A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/leeoniya/uDSV/commit/4e7472a7015c0a7ae5ae76e41f282bd4bdcf0c67 below:

add some guards/sanitization for codegen of typed output · leeoniya/uDSV@4e7472a · GitHub

File tree Expand file treeCollapse file tree 6 files changed

+142

-37

lines changed

Filter options

Expand file treeCollapse file tree 6 files changed

+142

-37

lines changed Original file line number Diff line number Diff line change

@@ -80,23 +80,26 @@ function guessType(ci, rows) {

80 80

return t;

81 81

}

82 82 83 +

const toJSON = JSON.stringify;

84 +

const onlyStrEsc = v => typeof v === 'string' ? toJSON(v) : v;

85 + 83 86

function getValParseExpr(ci, col) {

84 87

let { type } = col;

85 88 86 89

let rv = `r[${ci}]`;

87 90 88 91

let parseExpr =

89 -

type === T_DATE ? `new Date(${rv})` :

90 -

type === T_JSON ? `JSON.parse(${rv})` :

91 -

type === T_NUMBER ? `+${rv}` :

92 -

type[0] === T_BOOLEAN ? `${rv} === '${type.slice(2)}' ? true : false` :

92 +

type === T_DATE ? `new Date(${rv})` :

93 +

type === T_JSON ? `JSON.parse(${rv})` :

94 +

type === T_NUMBER ? `+${rv}` :

95 +

type[0] === T_BOOLEAN ? `${rv} === ${toJSON(type.slice(2))} ? true : false` :

93 96

rv;

94 97 95 98

let { repl } = col;

96 99 97 -

let nanExpr = repl.NaN !== void 0 && type === T_NUMBER ? `${rv} === 'NaN' ? ${repl.NaN} : ` : '';

98 -

let nullExpr = repl.null !== void 0 ? `${rv} === 'null' || ${rv} === 'NULL' ? ${repl.null} : ` : '';

99 -

let emptyExpr = repl.empty !== void 0 ? `${rv} === '' ? ${repl.empty} : ` : '';

100 +

let nanExpr = repl.NaN !== void 0 && type === T_NUMBER ? `${rv} === 'NaN' ? ${onlyStrEsc(repl.NaN)} : ` : '';

101 +

let nullExpr = repl.null !== void 0 ? `${rv} === 'null' || ${rv} === 'NULL' ? ${onlyStrEsc(repl.null)} : ` : '';

102 +

let emptyExpr = repl.empty !== void 0 ? `${rv} === '' ? ${onlyStrEsc(repl.empty)} : ` : '';

100 103 101 104

return `${emptyExpr} ${nullExpr} ${nanExpr} ${parseExpr}`;

102 105

}

@@ -137,7 +140,7 @@ function genToTypedRows(cols, objs = false, deep = false) {

137 140

colIdx++;

138 141

} while (paths.length > 0);

139 142 140 -

buf = JSON.stringify(tplObj).replace(/"¦(\d+)¦"/g, (m, ci) => getValParseExpr(+ci, cols[+ci]));

143 +

buf = toJSON(tplObj).replace(/"¦(\d+)¦"/g, (m, ci) => getValParseExpr(+ci, cols[+ci]));

141 144

}

142 145

else {

143 146

if (!objs && cols.every(c => c.type === T_STRING))

@@ -146,7 +149,7 @@ function genToTypedRows(cols, objs = false, deep = false) {

146 149

buf = objs ? '{' : '[';

147 150 148 151

cols.forEach((col, ci) => {

149 -

buf += objs ? `"${col.name.replaceAll('"', '\\"')}":` : '';

152 +

buf += objs ? `${toJSON(col.name)}:` : '';

150 153

let parseVal = getValParseExpr(ci, col);

151 154

buf += `${parseVal},`;

152 155

});

Original file line number Diff line number Diff line change

@@ -81,23 +81,26 @@ var uDSV = (function (exports) {

81 81

return t;

82 82

}

83 83 84 +

const toJSON = JSON.stringify;

85 +

const onlyStrEsc = v => typeof v === 'string' ? toJSON(v) : v;

86 + 84 87

function getValParseExpr(ci, col) {

85 88

let { type } = col;

86 89 87 90

let rv = `r[${ci}]`;

88 91 89 92

let parseExpr =

90 -

type === T_DATE ? `new Date(${rv})` :

91 -

type === T_JSON ? `JSON.parse(${rv})` :

92 -

type === T_NUMBER ? `+${rv}` :

93 -

type[0] === T_BOOLEAN ? `${rv} === '${type.slice(2)}' ? true : false` :

93 +

type === T_DATE ? `new Date(${rv})` :

94 +

type === T_JSON ? `JSON.parse(${rv})` :

95 +

type === T_NUMBER ? `+${rv}` :

96 +

type[0] === T_BOOLEAN ? `${rv} === ${toJSON(type.slice(2))} ? true : false` :

94 97

rv;

95 98 96 99

let { repl } = col;

97 100 98 -

let nanExpr = repl.NaN !== void 0 && type === T_NUMBER ? `${rv} === 'NaN' ? ${repl.NaN} : ` : '';

99 -

let nullExpr = repl.null !== void 0 ? `${rv} === 'null' || ${rv} === 'NULL' ? ${repl.null} : ` : '';

100 -

let emptyExpr = repl.empty !== void 0 ? `${rv} === '' ? ${repl.empty} : ` : '';

101 +

let nanExpr = repl.NaN !== void 0 && type === T_NUMBER ? `${rv} === 'NaN' ? ${onlyStrEsc(repl.NaN)} : ` : '';

102 +

let nullExpr = repl.null !== void 0 ? `${rv} === 'null' || ${rv} === 'NULL' ? ${onlyStrEsc(repl.null)} : ` : '';

103 +

let emptyExpr = repl.empty !== void 0 ? `${rv} === '' ? ${onlyStrEsc(repl.empty)} : ` : '';

101 104 102 105

return `${emptyExpr} ${nullExpr} ${nanExpr} ${parseExpr}`;

103 106

}

@@ -138,7 +141,7 @@ var uDSV = (function (exports) {

138 141

colIdx++;

139 142

} while (paths.length > 0);

140 143 141 -

buf = JSON.stringify(tplObj).replace(/"¦(\d+)¦"/g, (m, ci) => getValParseExpr(+ci, cols[+ci]));

144 +

buf = toJSON(tplObj).replace(/"¦(\d+)¦"/g, (m, ci) => getValParseExpr(+ci, cols[+ci]));

142 145

}

143 146

else {

144 147

if (!objs && cols.every(c => c.type === T_STRING))

@@ -147,7 +150,7 @@ var uDSV = (function (exports) {

147 150

buf = objs ? '{' : '[';

148 151 149 152

cols.forEach((col, ci) => {

150 -

buf += objs ? `"${col.name.replaceAll('"', '\\"')}":` : '';

153 +

buf += objs ? `${toJSON(col.name)}:` : '';

151 154

let parseVal = getValParseExpr(ci, col);

152 155

buf += `${parseVal},`;

153 156

});

Original file line number Diff line number Diff line change

@@ -78,23 +78,26 @@ function guessType(ci, rows) {

78 78

return t;

79 79

}

80 80 81 +

const toJSON = JSON.stringify;

82 +

const onlyStrEsc = v => typeof v === 'string' ? toJSON(v) : v;

83 + 81 84

function getValParseExpr(ci, col) {

82 85

let { type } = col;

83 86 84 87

let rv = `r[${ci}]`;

85 88 86 89

let parseExpr =

87 -

type === T_DATE ? `new Date(${rv})` :

88 -

type === T_JSON ? `JSON.parse(${rv})` :

89 -

type === T_NUMBER ? `+${rv}` :

90 -

type[0] === T_BOOLEAN ? `${rv} === '${type.slice(2)}' ? true : false` :

90 +

type === T_DATE ? `new Date(${rv})` :

91 +

type === T_JSON ? `JSON.parse(${rv})` :

92 +

type === T_NUMBER ? `+${rv}` :

93 +

type[0] === T_BOOLEAN ? `${rv} === ${toJSON(type.slice(2))} ? true : false` :

91 94

rv;

92 95 93 96

let { repl } = col;

94 97 95 -

let nanExpr = repl.NaN !== void 0 && type === T_NUMBER ? `${rv} === 'NaN' ? ${repl.NaN} : ` : '';

96 -

let nullExpr = repl.null !== void 0 ? `${rv} === 'null' || ${rv} === 'NULL' ? ${repl.null} : ` : '';

97 -

let emptyExpr = repl.empty !== void 0 ? `${rv} === '' ? ${repl.empty} : ` : '';

98 +

let nanExpr = repl.NaN !== void 0 && type === T_NUMBER ? `${rv} === 'NaN' ? ${onlyStrEsc(repl.NaN)} : ` : '';

99 +

let nullExpr = repl.null !== void 0 ? `${rv} === 'null' || ${rv} === 'NULL' ? ${onlyStrEsc(repl.null)} : ` : '';

100 +

let emptyExpr = repl.empty !== void 0 ? `${rv} === '' ? ${onlyStrEsc(repl.empty)} : ` : '';

98 101 99 102

return `${emptyExpr} ${nullExpr} ${nanExpr} ${parseExpr}`;

100 103

}

@@ -135,7 +138,7 @@ function genToTypedRows(cols, objs = false, deep = false) {

135 138

colIdx++;

136 139

} while (paths.length > 0);

137 140 138 -

buf = JSON.stringify(tplObj).replace(/"¦(\d+)¦"/g, (m, ci) => getValParseExpr(+ci, cols[+ci]));

141 +

buf = toJSON(tplObj).replace(/"¦(\d+)¦"/g, (m, ci) => getValParseExpr(+ci, cols[+ci]));

139 142

}

140 143

else {

141 144

if (!objs && cols.every(c => c.type === T_STRING))

@@ -144,7 +147,7 @@ function genToTypedRows(cols, objs = false, deep = false) {

144 147

buf = objs ? '{' : '[';

145 148 146 149

cols.forEach((col, ci) => {

147 -

buf += objs ? `"${col.name.replaceAll('"', '\\"')}":` : '';

150 +

buf += objs ? `${toJSON(col.name)}:` : '';

148 151

let parseVal = getValParseExpr(ci, col);

149 152

buf += `${parseVal},`;

150 153

});

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4