tamedevil 0.0.0-0.1 → 0.0.0-0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # tamedevil
2
2
 
3
+ ## 0.0.0-0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`4ca7fce12`](undefined) - Make runnable in the browser for playground
8
+
9
+ ## 0.0.0-0.2
10
+
11
+ ### Patch Changes
12
+
13
+ - [`9b296ba54`](undefined) - More secure, more compatible, and lots of fixes
14
+ across the monorepo
15
+
3
16
  ## 0.0.0-0.1
4
17
 
5
18
  ### Patch Changes
package/README.md CHANGED
@@ -89,16 +89,12 @@ typically the only thing you need to import.
89
89
 
90
90
  For ESM, import `te`:
91
91
 
92
- <!-- skip-example -->
93
-
94
92
  ```js
95
93
  import { te } from "tamedevil";
96
94
  ```
97
95
 
98
96
  Or for CommonJS, `require` it:
99
97
 
100
- <!-- skip-example -->
101
-
102
98
  ```js
103
99
  const { te } = require("tamedevil");
104
100
  ```
@@ -122,15 +118,13 @@ const toEval = te`\
122
118
 
123
119
  const plan = te.run(toEval);
124
120
 
125
- console.log(plan.toString());
126
- /* Outputs:
127
-
128
- function plan($record) {
129
- const $records = source.find("some string here");
130
- return connection($records);
131
- }
132
-
133
- */
121
+ assert.strictEqual(
122
+ plan.toString(),
123
+ `function plan($record) {
124
+ const $records = source.find("some string here");
125
+ return connection($records);
126
+ }`,
127
+ );
134
128
  ```
135
129
 
136
130
  ## API
@@ -143,13 +137,13 @@ embedded expressions. If a non `te` expression is passed in, e.g.:
143
137
  <!-- skip-example -->
144
138
 
145
139
  ```js
146
- te`return 2 + ${1}`;
140
+ te`return 2 + ${1}`; // WILL THROW AN ERROR
147
141
  ```
148
142
 
149
143
  then an error will be thrown. This prevents code injection, as all values must
150
144
  go through an allowed API.
151
145
 
152
- ### `te.ref(val)` (alias: te.reference)
146
+ ### `te.ref(val, name?)` (alias: te.reference)
153
147
 
154
148
  Tells `te` to pass the given value by reference into the scope of the function
155
149
  via a closure, and returns an identifier that can be used to reference it. Note:
@@ -162,13 +156,44 @@ debug, e.g.:
162
156
  const source = new Source(/* ... */);
163
157
  const spec = "some string here";
164
158
 
165
- const toEval = te`\
159
+ const plan = te.run`\
166
160
  const source = ${te.ref(source)};
167
161
  return function plan($record) {
168
162
  const $records = source.find(${te.lit(spec)});
169
163
  return connection($records);
170
164
  }
171
165
  `;
166
+
167
+ assert.strictEqual(
168
+ plan.toString(),
169
+ `function plan($record) {
170
+ const $records = source.find("some string here");
171
+ return connection($records);
172
+ }`,
173
+ );
174
+ ```
175
+
176
+ If you want to force a particular identifier to be used, you can pass the
177
+ `name`, but then it's up to you to ensure that no conflicts take place:
178
+
179
+ ```js
180
+ const source = new Source(/* ... */);
181
+ const spec = "some string here";
182
+
183
+ const plan = te.run`\
184
+ return function plan($record) {
185
+ const $records = ${te.ref(source, "source")}.find(${te.lit(spec)});
186
+ return connection($records);
187
+ }
188
+ `;
189
+
190
+ assert.strictEqual(
191
+ plan.toString(),
192
+ `function plan($record) {
193
+ const $records = source.find("some string here");
194
+ return connection($records);
195
+ }`,
196
+ );
172
197
  ```
173
198
 
174
199
  ### `te.lit(val)` (alias: te.literal)
@@ -188,12 +213,16 @@ const key1 = "one";
188
213
  // fine for `Object.create(null)`
189
214
  const key2 = "__proto__";
190
215
 
191
- const fragment = te`\
216
+ const obj = te.run`\
192
217
  const obj = Object.create(null);
193
218
  obj[${te.lit(key1)}] = 1;
194
- obj[${te.lit(key2)}] = {str: true};
219
+ obj[${te.lit(key2)}] = { str: true };
195
220
  return obj;
196
221
  `;
222
+
223
+ assert.equal(typeof obj, "object");
224
+ assert.equal(obj.one, 1);
225
+ assert.deepEqual(obj.__proto__, { str: true });
197
226
  ```
198
227
 
199
228
  ### `te.substring(str, stringType)`
@@ -205,7 +234,13 @@ argument should be `"`, `'` or `` ` `` depending on what type of string you're
205
234
  embedding into. Example:
206
235
 
207
236
  ```js
208
- const code = te`const str = "abc${te.substring(untrusted, '"')}123";`;
237
+ // Some untrusted user input, could have anything in it
238
+ const untrusted = "'\"` \\'\\\"\\` ${process.exit(1)}";
239
+
240
+ // Safely insert the untrusted input into a string
241
+ const code = te.run`return "abc${te.substring(untrusted, '"')}123";`;
242
+
243
+ assert.strictEqual(code, "abc'\"` \\'\\\"\\` ${process.exit(1)}123");
209
244
  ```
210
245
 
211
246
  ### `te.join(arrayOfFragments, delimiter)`
@@ -216,8 +251,9 @@ Joins an array of `te` values using the delimiter (a plain string); e.g.
216
251
  const keysAndValues = ["a", "b", "c", "d"].map(
217
252
  (n, i) => te`${te.dangerousKey(n)}: ${te.literal(i)}`,
218
253
  );
219
- const obj = te`{ ${te.join(keysAndValues, ", ")} }`;
220
- // obj = { a: 0, b: 1, c: 2, d: 3 }
254
+ const obj = te.run`return { ${te.join(keysAndValues, ", ")} }`;
255
+
256
+ assert.deepEqual(obj, { a: 0, b: 1, c: 2, d: 3 });
221
257
  ```
222
258
 
223
259
  ### `te.identifier(name)`
@@ -266,7 +302,7 @@ symbol or number) of the preceding expression; will return code like `.foo` or
266
302
  As with `te.get` except using optional chaining - the expression will be `?.foo`
267
303
  or `?.["foo"]` as appropriate.
268
304
 
269
- ### `te.set(key, hasNullPrototype)`
305
+ ### `te.set(key, hasNullPrototype?)`
270
306
 
271
307
  As with `te.get`, except since it's for setting a key we'll perform checks to
272
308
  ensure you're not writing to unsafe keys (such as `__proto__`) unless you
@@ -299,7 +335,8 @@ Evaluates the TE fragment and returns the result.
299
335
  ```js
300
336
  const fragment = te`return 1 + 2`;
301
337
  const result = te.run(fragment);
302
- // result = 3;
338
+
339
+ assert.equal(result, 3);
303
340
  ```
304
341
 
305
342
  ### `te.compile(fragment)`
@@ -311,5 +348,9 @@ for debugging, or tests.
311
348
  ```js
312
349
  const fragment = te`return ${te.ref(1)} + ${te.ref(2)}`;
313
350
  const result = te.compile(fragment);
314
- // result = { string: `return _$_ref1 + _$_ref2`, refs: { _$_ref1: 1, _$_ref2: 2 } }
351
+
352
+ assert.deepEqual(result, {
353
+ string: `return _$$_ref_1 + _$$_ref_2`,
354
+ refs: { _$$_ref_1: 1, _$$_ref_2: 2 },
355
+ });
315
356
  ```
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { reservedWords } from "./reservedWords.js";
2
1
  /**
3
2
  * This is the secret to our safety; since this is a symbol it cannot be faked
4
3
  * in a JSON payload and it cannot be constructed with a new Symbol (even with
5
4
  * the same argument), so external data cannot make itself trusted.
5
+ *
6
+ * @internal
6
7
  */
7
8
  declare const $$type: unique symbol;
8
9
  /**
@@ -21,7 +22,13 @@ export interface TERefNode {
21
22
  readonly [$$type]: "REF";
22
23
  /** value */
23
24
  readonly v: any;
25
+ /** name */
26
+ readonly n: string | undefined;
24
27
  }
28
+ /**
29
+ * Represents a temporary variable that will be created, primarily useful for
30
+ * inline wrangling of data where statements are not available.
31
+ */
25
32
  export interface TETemporaryVariableNode {
26
33
  readonly [$$type]: "VARIABLE";
27
34
  /** symbol */
@@ -44,14 +51,17 @@ export interface TEQuery {
44
51
  readonly n: ReadonlyArray<TENode>;
45
52
  }
46
53
  /**
47
- * Representation of TE, identifiers, values, etc; to generate a query that
48
- * can be issued to the database it needs to be fed to `te.compile`.
54
+ * A tamedevil node or fragment, ready to be combined into a larger fragment or
55
+ * evaluated directly. To evaluate, feed this node into `te.run()`.
49
56
  */
50
57
  export declare type TE = TENode | TEQuery;
58
+ /**
59
+ * Returns true if the given node is a TE node, false otherwise.
60
+ */
51
61
  declare function isTE(node: unknown): node is TE;
52
62
  /**
53
- * Accepts an te`...` expression and compiles it out to TE text with
54
- * placeholders, and the values to substitute for these values.
63
+ * Accepts an te`...` expression and compiles it out to the function body
64
+ * `string` and the `refs` that need to be passed via the closure.
55
65
  */
56
66
  declare function compile(fragment: TE): {
57
67
  string: string;
@@ -60,29 +70,45 @@ declare function compile(fragment: TE): {
60
70
  };
61
71
  };
62
72
  /**
63
- * Creates a TE item for a raw code string. Just plain ol‘ raw code. This
64
- * method is dangerous though because it involves no escaping, so proceed with
65
- * caution! It's very very rarely warranted - there is likely a safer way of
73
+ * Creates a TE node for a raw code string. Just plain ol‘ raw code - EXTREMELY
74
+ * DANGEROUS.
75
+ *
76
+ * This method is dangerous because it involves no escaping, so proceed with
77
+ * caution!
78
+ *
79
+ * It's very very rarely warranted to use this - there is likely a safer way of
66
80
  * achieving your goal. DO NOT USE THIS WITH UNTRUSTED INPUT!
67
81
  */
68
82
  declare function raw(text: string): TE;
69
83
  /**
70
- * Creates a TE item for a value that will be included in our final query.
71
- * This value will be added in a way which avoids TE injection.
84
+ * Creates a TE node for an arbitrary JS object that will be made available
85
+ * (via a closure) to the final code that will be executed. This value is not
86
+ * serialized or similar, it is passed by reference.
72
87
  */
73
- declare function ref(val: any): TE;
88
+ declare function ref(val: any, name?: string): TE;
74
89
  declare const undefinedNode: TERawNode;
90
+ /**
91
+ * Similar to `JSON.stringify(string)`, but faster. Bizarrely this seems to be
92
+ * faster than the regexp approach
93
+ */
75
94
  export declare function stringifyString(value: string): string;
95
+ /**
96
+ * Equivalent to JSON.stringify, but typically faster.
97
+ */
76
98
  export declare const toJSON: (value: any) => string;
77
99
  /**
78
- * If the value is simple will inline it into the query, otherwise will defer
79
- * to `te.ref`.
100
+ * If the value is simple this will stringify it and inject it directly into
101
+ * the code to be evaluated, otherwise will defer to `te.ref`.
80
102
  */
81
103
  declare function lit(val: any): TE;
82
104
  /**
83
105
  * If you're building a string and you want to inject untrusted content into it
84
- * without opening yourself to code injection attacks, this is the method for
85
- * you. Example:
106
+ * without opening yourself to code injection attacks nor doing awkward string
107
+ * concatenation, this is the method for you. It's essential that you pass the
108
+ * correct type of string that you're embedding into via the `stringType`
109
+ * parameter.
110
+ *
111
+ * Example:
86
112
  *
87
113
  * ```js
88
114
  * const code = te`const str = "abc${te.substring(untrusted, '"')}123";`
@@ -94,42 +120,53 @@ declare function substring(text: string, stringType: "'" | '"' | "`"): TE;
94
120
  */
95
121
  declare function subcomment(content: string | number | null | undefined): TERawNode;
96
122
  /**
97
- * Is safe to set as the key of a POJO (without a null prototype).
123
+ * Returns true if the given key is safe to set as the key of a POJO (without a
124
+ * null prototype), false otherwise.
98
125
  */
99
126
  export declare const isSafeObjectPropertyName: (key: string | symbol | number) => boolean;
100
127
  /**
101
- * Can represent as an identifier rather than a string key
102
- *
103
- * @remarks
104
- * Doesn't allow it to start with two underscores.
128
+ * Asserts that the given `name` is allowed to be used as an identifier
129
+ * (variable name, function name, etc); and if so it returns a TE node
130
+ * representing this identifier. If disallowed, will throw an error.
105
131
  */
106
- export declare const canRepresentAsIdentifier: (key: string | symbol | number) => key is string | number;
107
132
  declare function identifier(name: string): TERawNode;
108
133
  /**
134
+ * Checks that the given `key` is not explicitly disallowed as a key on a POJO and returns a TE node representing it. If disallowed, an error will be thrown. Useful for building easy to read objects:
135
+ *
136
+ * ```js
137
+ * const obj = te.run`return { ${te.identifier("frogs")}: "frogs" }`;
138
+ * ```
139
+ *
109
140
  * IMPORTANT: It's strongly recommended that instead of defining an object via
110
141
  * `const obj = { ${te.dangerousKey(untrustedKey)}: value }` you instead use
111
142
  * `const obj = Object.create(null);` and then set the properties on the resulting
112
- * object via `${obj}[${te.lit(untrustedKey)}] = value;` - this prevents attacks such as
113
- * **prototype polution** since properties like `__proto__` are not special on
114
- * null-prototype objects, whereas they can cause havok in regular `{}` objects.
143
+ * object via `${obj}${te.set(untrustedKey, true)} = value;` - this prevents
144
+ * attacks such as **prototype polution** since properties like `__proto__` are
145
+ * not special on null-prototype objects, whereas they can cause havok in
146
+ * regular `{}` objects (POJOs).
115
147
  */
116
148
  declare function dangerousKey(key: string | symbol | number): TE;
117
149
  /**
118
150
  * Accesses the key of an object either via `.` or `[]` as appropriate;
119
151
  * `obj${te.get(key)}` would become `obj.foo` or `obj["1foo"]` as
120
152
  * appropriate.
153
+ *
154
+ * DO NOT USE THIS FOR ASSIGNMENT!
121
155
  */
122
156
  declare function get(key: string | symbol | number): TE;
123
157
  /**
124
158
  * Accesses the key of an object via optional-chaining:
125
159
  * `obj${te.optionalGet(key)}` would become `obj?.foo` or `obj?.["1foo"]` as
126
160
  * appropriate.
161
+ *
162
+ * DO NOT USE THIS FOR ASSIGNMENT!
127
163
  */
128
164
  declare function optionalGet(key: string | symbol | number): TE;
129
165
  /**
130
- * Sets the key of an object either via `.` or `[]` as appropriate;
131
- * `obj${te.set(key)}` would become `obj.foo` or `obj["1foo"]` as
132
- * appropriate.
166
+ * Access to the key of an object either via `.` or `[]` as appropriate ready
167
+ * for being assigned to; `obj${te.set(key)}` would become `obj.foo` or
168
+ * `obj["1foo"]` as appropriate. Note this is different to `get` because it
169
+ * performs additional checks.
133
170
  *
134
171
  * If the object you're setting properties on has a `null` prototype
135
172
  * (`Object.create(null)`) then you can set `hasNullPrototype` to true and all
@@ -141,26 +178,55 @@ declare function set(key: string | symbol | number, hasNullPrototype?: boolean):
141
178
  * @experimental
142
179
  */
143
180
  declare function tempVar(symbol?: symbol): TE;
181
+ /**
182
+ * @experimental
183
+ */
144
184
  declare function tmp(obj: TE, callback: (tmp: TE) => TE): TE;
185
+ /**
186
+ * Evaluates the given TE fragment, and returns the result. Note that the
187
+ * fragment must contain a `return` statement for the result to not be
188
+ * undefined.
189
+ */
145
190
  declare function run<TResult>(fragment: TE): TResult;
146
191
  declare function run<TResult>(strings: TemplateStringsArray, ...values: TE[]): TResult;
147
192
  /**
148
193
  * Join some TE items together, optionally separated by a string. Useful when
149
- * dealing with lists of TE items, for example a dynamic list of columns or
150
- * variadic TE function arguments.
194
+ * dealing with lists of TE nodes, for example a dynamic list of object
195
+ * properties.
151
196
  */
152
197
  declare function join(items: Array<TE>, separator?: string): TE;
153
198
  /**
199
+ * Indicates that the given fragment should be indented when output in debug
200
+ * mode. (Has no effect in production mode.)
201
+ *
154
202
  * WARNING: all lines will be indented, without any parsing, so if there are
155
203
  * template literals that contain newlines, spaces will be added inside these
156
204
  * too.
157
205
  */
158
206
  declare function indent(fragment: TE): TE;
159
207
  declare function indent(strings: TemplateStringsArray, ...values: Array<TE>): TE;
208
+ /**
209
+ * If the given condition is true, the fragment will be wrapped with an indent
210
+ * node, otherwise it will be returned verbatim.
211
+ */
160
212
  declare function indentIf(condition: boolean, fragment: TE): TE;
213
+ /**
214
+ * Makes safe identifiers
215
+ *
216
+ * @experimental
217
+ * @internal
218
+ */
219
+ export declare class Idents {
220
+ idents: Set<string>;
221
+ /**
222
+ * Don't allow using these identifiers (presumably because they're already in use).
223
+ */
224
+ forbid(identifiers: string[]): void;
225
+ makeSafeIdentifier(str: string): string;
226
+ }
161
227
  declare const te: TamedEvil;
162
228
  export default te;
163
- export { compile, dangerousKey, run as eval, get, identifier, isTE, join, lit, lit as literal, optionalGet, ref, reservedWords, run, set, subcomment, substring, te, tempVar, tmp, undefinedNode as undefined, raw, };
229
+ export { compile, dangerousKey, run as eval, get, identifier, isTE, join, lit, lit as literal, optionalGet, raw, ref, run, set, subcomment, substring, te, tempVar, tmp, undefinedNode as undefined, };
164
230
  export interface TamedEvil {
165
231
  (strings: TemplateStringsArray, ...values: Array<TE>): TE;
166
232
  te: TamedEvil;
@@ -192,7 +258,6 @@ export interface TamedEvil {
192
258
  undefined: TE;
193
259
  blank: TE;
194
260
  isTE: typeof isTE;
195
- reservedWords: typeof reservedWords;
196
261
  raw: typeof raw;
197
262
  }
198
263
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.raw = exports.undefined = exports.tmp = exports.tempVar = exports.te = exports.substring = exports.subcomment = exports.set = exports.run = exports.reservedWords = exports.ref = exports.optionalGet = exports.literal = exports.lit = exports.join = exports.isTE = exports.identifier = exports.get = exports.eval = exports.dangerousKey = exports.compile = exports.canRepresentAsIdentifier = exports.isSafeObjectPropertyName = exports.toJSON = exports.stringifyString = void 0;
3
+ exports.undefined = exports.tmp = exports.tempVar = exports.te = exports.substring = exports.subcomment = exports.set = exports.run = exports.ref = exports.raw = exports.optionalGet = exports.literal = exports.lit = exports.join = exports.isTE = exports.identifier = exports.get = exports.eval = exports.dangerousKey = exports.compile = exports.Idents = exports.isSafeObjectPropertyName = exports.toJSON = exports.stringifyString = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const lru_1 = tslib_1.__importDefault(require("@graphile/lru"));
6
6
  const reservedWords_js_1 = require("./reservedWords.js");
7
- Object.defineProperty(exports, "reservedWords", { enumerable: true, get: function () { return reservedWords_js_1.reservedWords; } });
7
+ /**
8
+ * For compatibility with graphile-export
9
+ */
8
10
  function exportAs(thing, exportName) {
9
11
  const existingExport = thing.$$export;
10
12
  if (existingExport) {
@@ -19,11 +21,13 @@ function exportAs(thing, exportName) {
19
21
  }
20
22
  return thing;
21
23
  }
22
- const isDev = process.env.GRAPHILE_ENV === "development";
24
+ const isDev = typeof process !== "undefined" && process.env.GRAPHILE_ENV === "development";
23
25
  /**
24
26
  * This is the secret to our safety; since this is a symbol it cannot be faked
25
27
  * in a JSON payload and it cannot be constructed with a new Symbol (even with
26
28
  * the same argument), so external data cannot make itself trusted.
29
+ *
30
+ * @internal
27
31
  */
28
32
  const $$type = Symbol("tamedevil-type");
29
33
  /**
@@ -34,7 +38,15 @@ const $$type = Symbol("tamedevil-type");
34
38
  * amount of memory to consume for this.
35
39
  */
36
40
  const CACHE_RAW_NODES = new lru_1.default({ maxLength: 10000 });
41
+ const CACHE_MAX_ENTRY_LENGTH = 50;
37
42
  function makeRawNode(text, exportName) {
43
+ // Don't use the cache for longer texts
44
+ if (text.length > CACHE_MAX_ENTRY_LENGTH && exportName === undefined) {
45
+ return Object.freeze({
46
+ [$$type]: "RAW",
47
+ t: text,
48
+ });
49
+ }
38
50
  const n = CACHE_RAW_NODES.get(text);
39
51
  if (n) {
40
52
  return n;
@@ -54,30 +66,37 @@ function makeRawNode(text, exportName) {
54
66
  return newNode;
55
67
  }
56
68
  // Simple function to help V8 optimize it.
57
- function makeRefNode(rawValue) {
69
+ function makeRefNode(rawValue, name) {
58
70
  return Object.freeze({
59
71
  [$$type]: "REF",
60
72
  v: rawValue,
73
+ n: name,
61
74
  });
62
75
  }
76
+ // Simple function to help V8 optimize it.
63
77
  function makeTemporaryVariableNode(symbol) {
64
78
  return Object.freeze({
65
79
  [$$type]: "VARIABLE",
66
80
  s: symbol,
67
81
  });
68
82
  }
83
+ // Simple function to help V8 optimize it.
69
84
  function makeIndentNode(content) {
70
85
  return Object.freeze({
71
86
  [$$type]: "INDENT",
72
87
  c: content[$$type] === "QUERY" ? content : makeQueryNode([content]),
73
88
  });
74
89
  }
90
+ // Simple function to help V8 optimize it.
75
91
  function makeQueryNode(nodes) {
76
92
  return Object.freeze({
77
93
  [$$type]: "QUERY",
78
94
  n: nodes,
79
95
  });
80
96
  }
97
+ /**
98
+ * Returns true if the given node is a TE node, false otherwise.
99
+ */
81
100
  function isTE(node) {
82
101
  return (typeof node === "object" &&
83
102
  node !== null &&
@@ -91,8 +110,8 @@ function enforceValidNode(node, where) {
91
110
  throw new Error(`[tamedevil] Invalid expression. Expected an TE item${where ? ` at ${where}` : ""} but received '${String(node)}'. This may mean that there is an issue in the TE expression where a dynamic value was not escaped via 'te.ref(...)', an embedded string wasn't wrapped with 'te.string(...)', or a TE expression was added without using the \`te\` tagged template literal.`);
92
111
  }
93
112
  /**
94
- * Accepts an te`...` expression and compiles it out to TE text with
95
- * placeholders, and the values to substitute for these values.
113
+ * Accepts an te`...` expression and compiles it out to the function body
114
+ * `string` and the `refs` that need to be passed via the closure.
96
115
  */
97
116
  function compile(fragment) {
98
117
  /**
@@ -103,7 +122,7 @@ function compile(fragment) {
103
122
  const refs = Object.create(null);
104
123
  let refCount = 0;
105
124
  const refMap = new Map();
106
- const makeRef = (value) => {
125
+ const makeRef = (value, suggestedName) => {
107
126
  const existingIdentifier = refMap.get(value);
108
127
  if (existingIdentifier) {
109
128
  return existingIdentifier;
@@ -113,7 +132,7 @@ function compile(fragment) {
113
132
  if (refCount > 65535) {
114
133
  throw new Error("[tamedevil] This TE statement would contain too many placeholders; tamedevil supports at most 65535 placeholders. To solve this, consider passing multiple values in using a single array or object.");
115
134
  }
116
- const identifier = `_$$_ref_${refCount}`;
135
+ const identifier = suggestedName ?? `_$$_ref_${refCount}`;
117
136
  refMap.set(value, identifier);
118
137
  refs[identifier] = value;
119
138
  return identifier;
@@ -129,9 +148,10 @@ function compile(fragment) {
129
148
  varMap.set(sym, varName);
130
149
  return varName;
131
150
  };
151
+ const variables = [];
132
152
  function print(untrustedInput, indent = 0) {
133
153
  /**
134
- * Join this to generate the TE query
154
+ * Join this to generate the TE string
135
155
  */
136
156
  const teFragments = [];
137
157
  const trustedInput = enforceValidNode(untrustedInput, ``);
@@ -147,13 +167,16 @@ function compile(fragment) {
147
167
  // No need to add blank raw text!
148
168
  break;
149
169
  }
150
- // IMPORTANT: this **must not** mangle primitives. Fortunately they're single line so it should be fine.
170
+ // IMPORTANT: this **must not** mangle primitives. Fortunately they're all single line so it should be fine.
151
171
  teFragments.push(isDev ? item.t.replace(/\n/g, "\n" + " ".repeat(indent)) : item.t);
152
172
  break;
153
173
  }
154
174
  case "REF": {
155
- const identifier = makeRef(item.v);
175
+ const identifier = makeRef(item.v, item.n);
156
176
  teFragments.push(identifier);
177
+ if (item.n != null && identifier !== item.n) {
178
+ variables.push(`const ${item.n} = ${identifier};`);
179
+ }
157
180
  break;
158
181
  }
159
182
  case "VARIABLE": {
@@ -182,7 +205,6 @@ function compile(fragment) {
182
205
  return teFragments.join("");
183
206
  }
184
207
  let str = print(fragment);
185
- const variables = [];
186
208
  for (const varName of varMap.values()) {
187
209
  variables.push(`let ${varName};`);
188
210
  }
@@ -199,12 +221,17 @@ exports.compile = compile;
199
221
  // LRU not necessary
200
222
  const CACHE_SIMPLE_FRAGMENTS = new Map();
201
223
  /**
202
- * A template string tag that creates a `TE` query out of some strings and
203
- * some values. Use this to construct all PostgreTE queries to avoid TE
204
- * injection.
224
+ * A template string tag function that creates a `TE` query out of some strings and
225
+ * some TE values. Use this to prepare all dynamically executed code code
226
+ * injection attacks.
205
227
  *
206
- * Note that using this function, the user *must* specify if they are injecting
207
- * raw text. This makes a TE injection vulnerability harder to create.
228
+ * Note that this function enforces that every passed placeholder is a TE node,
229
+ * preventing potentially untrusted raw text from being injected into the code
230
+ * to be evaluated, thereby seriously reducing the risk of code injection
231
+ * attacks. Care must still be taken in the building and management of these
232
+ * code strings, however, since no parsing takes place - so it is up to the
233
+ * coder to use the right TE helper in the right positions in the constructed
234
+ * code.
208
235
  */
209
236
  const teBase = function te(strings, ...values) {
210
237
  if (!Array.isArray(strings) || !strings.raw) {
@@ -226,19 +253,19 @@ const teBase = function te(strings, ...values) {
226
253
  }
227
254
  // Special case te`${...}` - just return the node directly
228
255
  if (stringsLength === 2 && strings[0] === "" && strings[1] === "") {
229
- return values[0];
256
+ return enforceValidNode(values[0]);
230
257
  }
231
258
  const items = [];
232
259
  let currentText = "";
233
- for (let i = 0, l = stringsLength; i < l; i++) {
260
+ const finalStringIndex = stringsLength - 1;
261
+ for (let i = 0; i < stringsLength; i++) {
234
262
  const text = strings[i];
235
263
  if (typeof text !== "string") {
236
264
  throw new Error("[tamedevil] te must be invoked as a template literal, not a function call.");
237
265
  }
238
266
  currentText += text;
239
- if (i < l - 1) {
240
- const rawVal = values[i];
241
- const valid = enforceValidNode(rawVal, `template literal placeholder ${i}`);
267
+ if (i < finalStringIndex) {
268
+ const valid = enforceValidNode(values[i], `template literal placeholder ${i}`);
242
269
  if (valid[$$type] === "RAW") {
243
270
  currentText += valid.t;
244
271
  }
@@ -275,10 +302,15 @@ const teBase = function te(strings, ...values) {
275
302
  return items.length === 1 ? items[0] : makeQueryNode(items);
276
303
  };
277
304
  let rawWarningOutput = false;
305
+ // FIXME: should we just straight up remove this method?
278
306
  /**
279
- * Creates a TE item for a raw code string. Just plain ol‘ raw code. This
280
- * method is dangerous though because it involves no escaping, so proceed with
281
- * caution! It's very very rarely warranted - there is likely a safer way of
307
+ * Creates a TE node for a raw code string. Just plain ol‘ raw code - EXTREMELY
308
+ * DANGEROUS.
309
+ *
310
+ * This method is dangerous because it involves no escaping, so proceed with
311
+ * caution!
312
+ *
313
+ * It's very very rarely warranted to use this - there is likely a safer way of
282
314
  * achieving your goal. DO NOT USE THIS WITH UNTRUSTED INPUT!
283
315
  */
284
316
  function raw(text) {
@@ -288,7 +320,7 @@ function raw(text) {
288
320
  throw new Error("te.raw first invoked here");
289
321
  }
290
322
  catch (e) {
291
- console.warn(`[tamedevil] WARNING: you're using the te.raw escape hatch, usage of this API is rarely required and is highly discouraged. Please be sure this is what you intend. ${e.stack}`);
323
+ console.warn(`[tamedevil] WARNING: you're using the te.raw escape hatch, usage of this API is rarely required and is highly discouraged due to the potential security ramifications. Please be sure this is what you intend. ${e.stack}`);
292
324
  }
293
325
  }
294
326
  if (typeof text !== "string") {
@@ -298,11 +330,20 @@ function raw(text) {
298
330
  }
299
331
  exports.raw = raw;
300
332
  /**
301
- * Creates a TE item for a value that will be included in our final query.
302
- * This value will be added in a way which avoids TE injection.
333
+ * Creates a TE node for an arbitrary JS object that will be made available
334
+ * (via a closure) to the final code that will be executed. This value is not
335
+ * serialized or similar, it is passed by reference.
303
336
  */
304
- function ref(val) {
305
- return makeRefNode(val);
337
+ function ref(val, name) {
338
+ if (name != null) {
339
+ if (!isValidVariableName(name)) {
340
+ throw new Error(`Invalid variable name '${name}'`);
341
+ }
342
+ return makeRefNode(val, name);
343
+ }
344
+ else {
345
+ return makeRefNode(val);
346
+ }
306
347
  }
307
348
  exports.ref = ref;
308
349
  const blankNode = makeRawNode(``, "blank");
@@ -329,7 +370,10 @@ exports.undefined = undefinedNode;
329
370
  const MAX_SHORT_STRING_LENGTH = 200; // TODO: what should this be?
330
371
  const BACKSLASH_CODE = "\\".charCodeAt(0);
331
372
  const QUOTE_CODE = '"'.charCodeAt(0);
332
- // Bizarrely this seems to be faster than the regexp approach
373
+ /**
374
+ * Similar to `JSON.stringify(string)`, but faster. Bizarrely this seems to be
375
+ * faster than the regexp approach
376
+ */
333
377
  function stringifyString(value) {
334
378
  const l = value.length;
335
379
  if (l > MAX_SHORT_STRING_LENGTH) {
@@ -352,6 +396,9 @@ function stringifyString(value) {
352
396
  exports.stringifyString = stringifyString;
353
397
  // TODO: more optimal stringifier
354
398
  // TODO: rename to jsonStringify?
399
+ /**
400
+ * Equivalent to JSON.stringify, but typically faster.
401
+ */
355
402
  const toJSON = (value) => {
356
403
  if (value == null)
357
404
  return "null";
@@ -369,8 +416,8 @@ const toJSON = (value) => {
369
416
  };
370
417
  exports.toJSON = toJSON;
371
418
  /**
372
- * If the value is simple will inline it into the query, otherwise will defer
373
- * to `te.ref`.
419
+ * If the value is simple this will stringify it and inject it directly into
420
+ * the code to be evaluated, otherwise will defer to `te.ref`.
374
421
  */
375
422
  function lit(val) {
376
423
  if (val === undefined) {
@@ -399,14 +446,21 @@ exports.lit = lit;
399
446
  exports.literal = lit;
400
447
  /**
401
448
  * If you're building a string and you want to inject untrusted content into it
402
- * without opening yourself to code injection attacks, this is the method for
403
- * you. Example:
449
+ * without opening yourself to code injection attacks nor doing awkward string
450
+ * concatenation, this is the method for you. It's essential that you pass the
451
+ * correct type of string that you're embedding into via the `stringType`
452
+ * parameter.
453
+ *
454
+ * Example:
404
455
  *
405
456
  * ```js
406
457
  * const code = te`const str = "abc${te.substring(untrusted, '"')}123";`
407
458
  * ```
408
459
  */
409
460
  function substring(text, stringType) {
461
+ if (typeof text !== "string" || typeof stringType !== "string") {
462
+ throw new Error(`Invalid call to te.substring`);
463
+ }
410
464
  // Quick scan to see if it's safe to use verbatim
411
465
  const l = text.length;
412
466
  if (l < MAX_SHORT_STRING_LENGTH) {
@@ -438,7 +492,7 @@ function substring(text, stringType) {
438
492
  ? inner // "" strings already escapes
439
493
  : stringType === "'"
440
494
  ? inner.replace(/'/g, "\\'") // '' strings need `'` escaped too (`\` has already been escaped)
441
- : inner.replace(/[`$]/g, "\\$&"); // `` strings need both '`' and `$` to be escaped
495
+ : inner.replace(/[`$]/g, "\\$&"); // `` strings need both '`' and `$` to be escaped (`\` has already been escaped)
442
496
  // Finally return a raw node
443
497
  return makeRawNode(escaped);
444
498
  }
@@ -450,12 +504,17 @@ function subcomment(content) {
450
504
  return makeRawNode(String(content).replace(/\*\//g, "* /"));
451
505
  }
452
506
  exports.subcomment = subcomment;
507
+ /**
508
+ * Values that cannot safely be used as the keys on a POJO (`{}`) due to
509
+ * security or similar concerns. For example `__proto__` is disallowed.
510
+ */
453
511
  const disallowedKeys = [
454
512
  ...Object.getOwnPropertyNames(Object.prototype),
455
513
  ...Object.getOwnPropertySymbols(Object.prototype),
456
514
  ];
457
515
  /**
458
- * Is safe to set as the key of a POJO (without a null prototype).
516
+ * Returns true if the given key is safe to set as the key of a POJO (without a
517
+ * null prototype), false otherwise.
459
518
  */
460
519
  const isSafeObjectPropertyName = (key) => (typeof key === "number" ||
461
520
  typeof key === "symbol" ||
@@ -464,15 +523,20 @@ const isSafeObjectPropertyName = (key) => (typeof key === "number" ||
464
523
  !disallowedKeys.includes(key);
465
524
  exports.isSafeObjectPropertyName = isSafeObjectPropertyName;
466
525
  /**
467
- * Can represent as an identifier rather than a string key
526
+ * Returns true if you can use the given key as the key to a POJO without
527
+ * requiring quote marks or square braces.
468
528
  *
469
529
  * @remarks
470
530
  * Doesn't allow it to start with two underscores.
471
531
  */
472
- const canRepresentAsIdentifier = (key) => Number.isFinite(key) ||
532
+ const canBeObjectKeyWithoutQuotes = (key) => Number.isFinite(key) ||
473
533
  (typeof key === "string" &&
474
534
  (key === "_" || /^(?:[a-z$]|_[a-z0-9$])[a-z0-9_$]*$/i.test(key)));
475
- exports.canRepresentAsIdentifier = canRepresentAsIdentifier;
535
+ /**
536
+ * If this returns true then the given `name` is allowed to be a variable name
537
+ * in JavaScript. If it returns false then it may or may not be safe to use it
538
+ * as a variable name.
539
+ */
476
540
  function isValidVariableName(name) {
477
541
  if (reservedWords_js_1.reservedWords.has(name)) {
478
542
  return false;
@@ -482,8 +546,13 @@ function isValidVariableName(name) {
482
546
  }
483
547
  return true;
484
548
  }
549
+ /**
550
+ * Asserts that the given `name` is allowed to be used as an identifier
551
+ * (variable name, function name, etc); and if so it returns a TE node
552
+ * representing this identifier. If disallowed, will throw an error.
553
+ */
485
554
  function identifier(name) {
486
- if (!isValidVariableName(name)) {
555
+ if (typeof name !== "string" || !isValidVariableName(name)) {
487
556
  throw new Error(`Invalid identifier name '${name}'`);
488
557
  }
489
558
  return makeRawNode(name);
@@ -491,16 +560,23 @@ function identifier(name) {
491
560
  exports.identifier = identifier;
492
561
  // TODO: rename to `ensureSafeKey` or `safeKeyOrThrow` or something?
493
562
  /**
563
+ * Checks that the given `key` is not explicitly disallowed as a key on a POJO and returns a TE node representing it. If disallowed, an error will be thrown. Useful for building easy to read objects:
564
+ *
565
+ * ```js
566
+ * const obj = te.run`return { ${te.identifier("frogs")}: "frogs" }`;
567
+ * ```
568
+ *
494
569
  * IMPORTANT: It's strongly recommended that instead of defining an object via
495
570
  * `const obj = { ${te.dangerousKey(untrustedKey)}: value }` you instead use
496
571
  * `const obj = Object.create(null);` and then set the properties on the resulting
497
- * object via `${obj}[${te.lit(untrustedKey)}] = value;` - this prevents attacks such as
498
- * **prototype polution** since properties like `__proto__` are not special on
499
- * null-prototype objects, whereas they can cause havok in regular `{}` objects.
572
+ * object via `${obj}${te.set(untrustedKey, true)} = value;` - this prevents
573
+ * attacks such as **prototype polution** since properties like `__proto__` are
574
+ * not special on null-prototype objects, whereas they can cause havok in
575
+ * regular `{}` objects (POJOs).
500
576
  */
501
577
  function dangerousKey(key) {
502
578
  if ((0, exports.isSafeObjectPropertyName)(key)) {
503
- if ((0, exports.canRepresentAsIdentifier)(key)) {
579
+ if (canBeObjectKeyWithoutQuotes(key)) {
504
580
  return makeRawNode(String(key));
505
581
  }
506
582
  else {
@@ -520,6 +596,8 @@ function canAccessViaDot(str) {
520
596
  * Accesses the key of an object either via `.` or `[]` as appropriate;
521
597
  * `obj${te.get(key)}` would become `obj.foo` or `obj["1foo"]` as
522
598
  * appropriate.
599
+ *
600
+ * DO NOT USE THIS FOR ASSIGNMENT!
523
601
  */
524
602
  function get(key) {
525
603
  return typeof key === "string" && canAccessViaDot(key)
@@ -533,6 +611,8 @@ exports.get = get;
533
611
  * Accesses the key of an object via optional-chaining:
534
612
  * `obj${te.optionalGet(key)}` would become `obj?.foo` or `obj?.["1foo"]` as
535
613
  * appropriate.
614
+ *
615
+ * DO NOT USE THIS FOR ASSIGNMENT!
536
616
  */
537
617
  function optionalGet(key) {
538
618
  return typeof key === "string" && canAccessViaDot(key)
@@ -544,9 +624,10 @@ function optionalGet(key) {
544
624
  exports.optionalGet = optionalGet;
545
625
  // TODO: rename this. 'leftSet'? 'leftAccess'? 'safeAccess'?
546
626
  /**
547
- * Sets the key of an object either via `.` or `[]` as appropriate;
548
- * `obj${te.set(key)}` would become `obj.foo` or `obj["1foo"]` as
549
- * appropriate.
627
+ * Access to the key of an object either via `.` or `[]` as appropriate ready
628
+ * for being assigned to; `obj${te.set(key)}` would become `obj.foo` or
629
+ * `obj["1foo"]` as appropriate. Note this is different to `get` because it
630
+ * performs additional checks.
550
631
  *
551
632
  * If the object you're setting properties on has a `null` prototype
552
633
  * (`Object.create(null)`) then you can set `hasNullPrototype` to true and all
@@ -568,12 +649,21 @@ exports.set = set;
568
649
  * @experimental
569
650
  */
570
651
  function tempVar(symbol = Symbol()) {
652
+ if (typeof symbol !== "symbol") {
653
+ throw new Error(`Invalid call to te.tempVar`);
654
+ }
571
655
  return makeTemporaryVariableNode(symbol);
572
656
  }
573
657
  exports.tempVar = tempVar;
658
+ /**
659
+ * @experimental
660
+ */
574
661
  function tmp(obj, callback) {
662
+ const trustedObj = enforceValidNode(obj);
663
+ // ENHANCEMENT: we should be able to reuse these tempvars between tmp calls
664
+ // that aren't nested (or are nested at the same level).
575
665
  const varName = te.tempVar();
576
- return te `(${varName} = ${obj}, ${callback(varName)})`;
666
+ return te `(${varName} = ${trustedObj}, ${callback(varName)})`;
577
667
  }
578
668
  exports.tmp = tmp;
579
669
  function run(fragmentOrStrings, ...values) {
@@ -583,7 +673,7 @@ function run(fragmentOrStrings, ...values) {
583
673
  if (values.length > 0) {
584
674
  throw new Error("Invalid call to `te.run`");
585
675
  }
586
- const fragment = fragmentOrStrings;
676
+ const fragment = enforceValidNode(fragmentOrStrings);
587
677
  const compiled = compile(fragment);
588
678
  const argNames = Object.keys(compiled.refs);
589
679
  const argValues = Object.values(compiled.refs);
@@ -607,8 +697,8 @@ function newFunction(...args) {
607
697
  }
608
698
  /**
609
699
  * Join some TE items together, optionally separated by a string. Useful when
610
- * dealing with lists of TE items, for example a dynamic list of columns or
611
- * variadic TE function arguments.
700
+ * dealing with lists of TE nodes, for example a dynamic list of object
701
+ * properties.
612
702
  */
613
703
  function join(items, separator = "") {
614
704
  if (!Array.isArray(items)) {
@@ -631,8 +721,8 @@ function join(items, separator = "") {
631
721
  const currentItems = [];
632
722
  for (let i = 0, l = items.length; i < l; i++) {
633
723
  const rawNode = items[i];
634
- const addSeparator = i > 0 && hasSeparator;
635
724
  const node = enforceValidNode(rawNode, `join item ${i}`);
725
+ const addSeparator = i > 0 && hasSeparator;
636
726
  if (addSeparator) {
637
727
  currentText += separator;
638
728
  }
@@ -670,21 +760,63 @@ function join(items, separator = "") {
670
760
  : makeQueryNode(currentItems);
671
761
  }
672
762
  exports.join = join;
763
+ /** @internal */
673
764
  function expandQueryNodes(node) {
674
765
  return node.n;
675
766
  }
676
767
  function indent(fragmentOrStrings, ...values) {
677
768
  const fragment = "raw" in fragmentOrStrings
678
769
  ? te(fragmentOrStrings, ...values)
679
- : fragmentOrStrings;
770
+ : enforceValidNode(fragmentOrStrings);
680
771
  if (!isDev) {
681
772
  return fragment;
682
773
  }
683
774
  return makeIndentNode(fragment);
684
775
  }
776
+ /**
777
+ * If the given condition is true, the fragment will be wrapped with an indent
778
+ * node, otherwise it will be returned verbatim.
779
+ */
685
780
  function indentIf(condition, fragment) {
686
- return isDev && condition ? makeIndentNode(fragment) : fragment;
781
+ const trusted = enforceValidNode(fragment);
782
+ return isDev && condition ? makeIndentNode(trusted) : trusted;
783
+ }
784
+ /**
785
+ * Makes safe identifiers
786
+ *
787
+ * @experimental
788
+ * @internal
789
+ */
790
+ class Idents {
791
+ // Initialized with forbidden words
792
+ idents = new Set(reservedWords_js_1.reservedWords);
793
+ /**
794
+ * Don't allow using these identifiers (presumably because they're already in use).
795
+ */
796
+ forbid(identifiers) {
797
+ for (const identifier in identifiers) {
798
+ this.idents.add(identifier);
799
+ }
800
+ }
801
+ makeSafeIdentifier(str) {
802
+ const { idents } = this;
803
+ const safe = str.replace(/[^a-zA-Z0-9_$]+/g, "").replace(/_+/, "_");
804
+ let ident = undefined;
805
+ for (let i = 1; i < 10000; i++) {
806
+ const val = safe + (i > 1 ? String(i) : "");
807
+ if (!idents.has(val)) {
808
+ ident = val;
809
+ break;
810
+ }
811
+ }
812
+ if (!ident) {
813
+ throw new Error("Too many identifiers!");
814
+ }
815
+ idents.add(ident);
816
+ return ident;
817
+ }
687
818
  }
819
+ exports.Idents = Idents;
688
820
  const te = teBase;
689
821
  exports.te = te;
690
822
  exports.default = te;
@@ -712,7 +844,6 @@ const attributes = {
712
844
  undefined: undefinedNode,
713
845
  blank: blankNode,
714
846
  isTE,
715
- reservedWords: reservedWords_js_1.reservedWords,
716
847
  raw,
717
848
  };
718
849
  Object.entries(attributes).forEach(([exportName, value]) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tamedevil",
3
- "version": "0.0.0-0.1",
3
+ "version": "0.0.0-0.3",
4
4
  "description": "Build and evaluate JavaScript strings safely via tagged template literals",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",