@dreamforgestudiollc/emet 0.0.0-stage → 0.2.6

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.
Files changed (114) hide show
  1. package/.env.example +189 -0
  2. package/CHANGELOG.md +360 -0
  3. package/CHARTER.md +137 -0
  4. package/LICENSE +22 -0
  5. package/README.md +868 -2
  6. package/docs/AUTHORSHIP.md +26 -0
  7. package/docs/BENCHMARKS.md +261 -0
  8. package/docs/BOOTSTRAP.md +127 -0
  9. package/docs/BOTS.md +83 -0
  10. package/docs/COVERAGE.md +64 -0
  11. package/docs/DEPLOY.md +251 -0
  12. package/docs/DISCIPLINES.md +29 -0
  13. package/docs/GUARDRAILS-AND-MONORAILS.md +108 -0
  14. package/docs/GUIDED-SETUP.md +301 -0
  15. package/docs/PERMISSIONS.md +121 -0
  16. package/docs/ROADMAP.md +62 -0
  17. package/docs/SETUP.md +265 -0
  18. package/docs/SUBKEYS.md +59 -0
  19. package/gems/artifact-index.json +12 -0
  20. package/gems/bot-team-backup/floor.json +15 -0
  21. package/gems/bot-team-backup/gem.json +43 -0
  22. package/gems/bot-team-backup/guides/BOT_TEAM_BACKUP.md +27 -0
  23. package/gems/bot-team-backup/guides/BOT_TEAM_RECOVERY.md +23 -0
  24. package/gems/fieldnote/floor.json +14 -0
  25. package/gems/fieldnote/gem.json +70 -0
  26. package/gems/fieldnote/runes/fieldnote.js +4 -0
  27. package/gems/lean-six-sigma/CHANGELOG.md +10 -0
  28. package/gems/lean-six-sigma/README.md +92 -0
  29. package/gems/lean-six-sigma/floor.json +31 -0
  30. package/gems/lean-six-sigma/gem.json +1296 -0
  31. package/gems/lean-six-sigma/guides/ASSUMPTIONS.md +45 -0
  32. package/gems/lean-six-sigma/guides/BELTS.md +52 -0
  33. package/gems/lean-six-sigma/guides/DMADV.md +56 -0
  34. package/gems/lean-six-sigma/guides/DMAIC.md +127 -0
  35. package/gems/lean-six-sigma/guides/FORMULAS.md +330 -0
  36. package/gems/lean-six-sigma/guides/LEAN.md +97 -0
  37. package/gems/lean-six-sigma/guides/TEMPLATES.md +279 -0
  38. package/gems/lean-six-sigma/runes/lss_capability.js +132 -0
  39. package/gems/lean-six-sigma/runes/lss_control_limits.js +240 -0
  40. package/gems/lean-six-sigma/runes/lss_dpmo_sigma.js +81 -0
  41. package/gems/lean-six-sigma/runes/lss_hypothesis.js +298 -0
  42. package/gems/lean-six-sigma/runes/lss_sample_size.js +81 -0
  43. package/gems/neurendipity/floor.json +65 -0
  44. package/gems/neurendipity/gem.json +42 -0
  45. package/gems/neurendipity/guides/AUTISTIC_BURNOUT.md +81 -0
  46. package/gems/neurendipity/guides/NEURODIVERGENT_SUPPORT.md +287 -0
  47. package/guides/README.md +3 -0
  48. package/package.json +76 -4
  49. package/server.json +79 -0
  50. package/src/aleph.js +395 -0
  51. package/src/annotations.js +170 -0
  52. package/src/approve-throttle.js +54 -0
  53. package/src/atlas-role.js +58 -0
  54. package/src/attribution.js +555 -0
  55. package/src/conformance.js +688 -0
  56. package/src/content_analyzer.js +450 -0
  57. package/src/database.js +812 -0
  58. package/src/disciplines.js +26 -0
  59. package/src/dispatch.js +382 -0
  60. package/src/env.js +97 -0
  61. package/src/floor.js +228 -0
  62. package/src/gaps.js +509 -0
  63. package/src/gem-check.js +1359 -0
  64. package/src/guides.js +75 -0
  65. package/src/host-reach.js +23 -0
  66. package/src/http-remote.js +313 -0
  67. package/src/index.js +397 -0
  68. package/src/invites.js +167 -0
  69. package/src/layers.js +449 -0
  70. package/src/lessons-to-checks.js +366 -0
  71. package/src/logger.js +300 -0
  72. package/src/metadata.js +61 -0
  73. package/src/module-path.js +32 -0
  74. package/src/mongo-connect.js +91 -0
  75. package/src/named-items.js +208 -0
  76. package/src/oauth-provider.js +838 -0
  77. package/src/owner-approvals.js +281 -0
  78. package/src/persons.js +136 -0
  79. package/src/provenance.js +257 -0
  80. package/src/redact.js +237 -0
  81. package/src/request-log.js +124 -0
  82. package/src/rune-dispatch.js +360 -0
  83. package/src/rune-registry.js +71 -0
  84. package/src/rune-scope.js +42 -0
  85. package/src/scopes.js +100 -0
  86. package/src/security-headers.js +26 -0
  87. package/src/session-graph.js +947 -0
  88. package/src/session.js +1097 -0
  89. package/src/setup.js +1580 -0
  90. package/src/socket.js +545 -0
  91. package/src/startup-pages.js +371 -0
  92. package/src/startup-payload.js +129 -0
  93. package/src/subkey-store.js +357 -0
  94. package/src/subkeys.js +947 -0
  95. package/src/tools.js +4508 -0
  96. package/src/transcript-session.js +106 -0
  97. package/src/validation.js +1187 -0
  98. package/src/version.js +2 -0
  99. package/templates/BOARD.md +72 -0
  100. package/templates/BOTHANDOFF.md +57 -0
  101. package/templates/CHARACTER.md +30 -0
  102. package/templates/HANDOFF.md +63 -0
  103. package/templates/IDENTITY.md +29 -0
  104. package/templates/INDEX.md +82 -0
  105. package/templates/INSTALL.md +29 -0
  106. package/templates/PROCEDURE.md +39 -0
  107. package/templates/ROSTER.md +43 -0
  108. package/templates/SEED.md +65 -0
  109. package/templates/STAGING.md +37 -0
  110. package/templates/STANDARD.md +99 -0
  111. package/templates/THREAD.md +43 -0
  112. package/templates/USER.md +32 -0
  113. package/verification/load-gate/corpus.json +1765 -0
  114. package/verification/load-gate/load-gate.mjs +1246 -0
@@ -0,0 +1,1765 @@
1
+ {
2
+ "note": "Vendored with verification/load-gate/load-gate.mjs. expect pass or refuse. sole marks the witness for that rule. branch marks the walker line that witness kills. from, files, path, and resolved are options passed to refuseHostAccess. resolved maps a normalized import to its real path relative to the GEM. via gate means the private text scan is not the checker for that case.",
3
+ "cases": [
4
+ {
5
+ "id": "pass-fieldnote",
6
+ "expect": "pass",
7
+ "source": "export default function fieldnote(input) {\n const rows = input && Array.isArray(input.rows) ? input.rows : [];\n return { count: rows.length };\n}\n"
8
+ },
9
+ {
10
+ "id": "pass-guarded-factors",
11
+ "expect": "pass",
12
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88, D3: 0, D4: 3.267 }),\n 3: Object.freeze({ __proto__: null, A2: 1.023, D3: 0, D4: 2.574 })\n});\nexport function controlLimits(input) {\n const n = String(input.n);\n if (!Object.hasOwn(FACTORS, n)) return null;\n return FACTORS[n].A2;\n}\n"
13
+ },
14
+ {
15
+ "id": "pass-guard-const",
16
+ "expect": "pass",
17
+ "source": "const FACTORS = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = String(input.n);\n if (!Object.hasOwn(FACTORS, n)) return 0;\n return FACTORS[n];\n}\n"
18
+ },
19
+ {
20
+ "id": "pass-guard-if",
21
+ "expect": "pass",
22
+ "source": "const FACTORS = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = String(input.n);\n if (Object.hasOwn(FACTORS, n)) return FACTORS[n];\n return 0;\n}\n"
23
+ },
24
+ {
25
+ "id": "pass-guard-and",
26
+ "expect": "pass",
27
+ "source": "const FACTORS = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = String(input.n);\n return Object.hasOwn(FACTORS, n) && FACTORS[n];\n}\n"
28
+ },
29
+ {
30
+ "id": "pass-guard-ternary",
31
+ "expect": "pass",
32
+ "source": "const FACTORS = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = String(input.n);\n return Object.hasOwn(FACTORS, n) ? FACTORS[n] : 0;\n}\n"
33
+ },
34
+ {
35
+ "id": "pass-guard-or",
36
+ "expect": "pass",
37
+ "source": "const FACTORS = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = String(input.n);\n return !Object.hasOwn(FACTORS, n) || FACTORS[n];\n}\n"
38
+ },
39
+ {
40
+ "id": "pass-math",
41
+ "expect": "pass",
42
+ "source": "export function f(n) { return Math.round(Math.sqrt(n)) + Math.PI + Math.abs(n); }\n"
43
+ },
44
+ {
45
+ "id": "pass-const-index",
46
+ "expect": "pass",
47
+ "source": "export function f(values) { const index = 0; return values[index] + values[0]; }\n"
48
+ },
49
+ {
50
+ "id": "pass-label-for-of",
51
+ "expect": "pass",
52
+ "source": "export function f(values, Date) {\n let sum = 0;\n process: for (let i = 0; i < values.length; i++) { if (i < 0) break process; }\n for (const value of values) sum += value;\n const index = 0;\n return Math.round(Math.sqrt(sum + values[index])) + Date;\n}\n"
53
+ },
54
+ {
55
+ "id": "pass-hashbang",
56
+ "expect": "pass",
57
+ "source": "#!/usr/bin/env node\nexport const x = 1\n"
58
+ },
59
+ {
60
+ "id": "pass-import",
61
+ "expect": "pass",
62
+ "source": "import { a } from './helper.js';\nexport const x = a;\n"
63
+ },
64
+ {
65
+ "id": "pass-import-runes",
66
+ "expect": "pass",
67
+ "from": "runes/look.js",
68
+ "files": ["runes/look.js", "runes/helper.js"],
69
+ "resolved": { "runes/helper.js": "runes/helper.js" },
70
+ "source": "import { a } from './helper.js';\nexport const x = a;\n"
71
+ },
72
+ {
73
+ "id": "pass-import-sibling",
74
+ "expect": "pass",
75
+ "from": "runes/sub/calc.js",
76
+ "files": ["runes/sub/calc.js", "runes/helper.js"],
77
+ "resolved": { "runes/helper.js": "runes/helper.js" },
78
+ "source": "import { a } from '../helper.js';\nexport const x = a;\n"
79
+ },
80
+ {
81
+ "id": "pass-error",
82
+ "expect": "pass",
83
+ "source": "export function f(input) { if (!input) throw new Error('missing'); return input.n; }\n"
84
+ },
85
+ {
86
+ "id": "pass-local-write",
87
+ "expect": "pass",
88
+ "source": "export function f() { const o = {}; o.a = 1; return o.a; }\n"
89
+ },
90
+ {
91
+ "id": "pass-foreach",
92
+ "expect": "pass",
93
+ "source": "export function f(input) { let total = 0; input.values.forEach((value) => { total += value; }); return total; }\n"
94
+ },
95
+ {
96
+ "id": "pass-comment-string",
97
+ "expect": "pass",
98
+ "source": "// new Date()\nexport const label = \"performance.now() crypto.randomUUID()\";\n"
99
+ },
100
+ {
101
+ "id": "pass-literal-key",
102
+ "expect": "pass",
103
+ "source": "const FACTORS = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f() { return FACTORS.a + FACTORS['b']; }\n"
104
+ },
105
+ {
106
+ "id": "sole-globalThis",
107
+ "expect": "refuse",
108
+ "rule": "globalThis",
109
+ "reason": "global",
110
+ "sole": true,
111
+ "branch": "global",
112
+ "source": "export function f(){ return globalThis; }\n"
113
+ },
114
+ {
115
+ "id": "sole-global",
116
+ "expect": "refuse",
117
+ "rule": "global",
118
+ "reason": "global",
119
+ "sole": true,
120
+ "source": "export function f(){ return global; }\n"
121
+ },
122
+ {
123
+ "id": "sole-self",
124
+ "expect": "refuse",
125
+ "rule": "self",
126
+ "reason": "global",
127
+ "sole": true,
128
+ "source": "export function f(){ return self; }\n"
129
+ },
130
+ {
131
+ "id": "sole-window",
132
+ "expect": "refuse",
133
+ "rule": "window",
134
+ "reason": "global",
135
+ "sole": true,
136
+ "source": "export function f(){ return window; }\n"
137
+ },
138
+ {
139
+ "id": "sole-process",
140
+ "expect": "refuse",
141
+ "rule": "process",
142
+ "reason": "env",
143
+ "sole": true,
144
+ "source": "export function f(){ return process; }\n"
145
+ },
146
+ {
147
+ "id": "sole-Date",
148
+ "expect": "refuse",
149
+ "rule": "Date",
150
+ "reason": "clock",
151
+ "sole": true,
152
+ "source": "export function f(){ return Date; }\n"
153
+ },
154
+ {
155
+ "id": "sole-performance",
156
+ "expect": "refuse",
157
+ "rule": "performance",
158
+ "reason": "clock",
159
+ "sole": true,
160
+ "source": "export function f(){ return performance; }\n"
161
+ },
162
+ {
163
+ "id": "sole-crypto",
164
+ "expect": "refuse",
165
+ "rule": "crypto",
166
+ "reason": "random",
167
+ "sole": true,
168
+ "source": "export function f(){ return crypto; }\n"
169
+ },
170
+ {
171
+ "id": "sole-setTimeout",
172
+ "expect": "refuse",
173
+ "rule": "setTimeout",
174
+ "reason": "timer",
175
+ "sole": true,
176
+ "source": "export function f(){ return setTimeout; }\n"
177
+ },
178
+ {
179
+ "id": "sole-setInterval",
180
+ "expect": "refuse",
181
+ "rule": "setInterval",
182
+ "reason": "timer",
183
+ "sole": true,
184
+ "source": "export function f(){ return setInterval; }\n"
185
+ },
186
+ {
187
+ "id": "sole-setImmediate",
188
+ "expect": "refuse",
189
+ "rule": "setImmediate",
190
+ "reason": "timer",
191
+ "sole": true,
192
+ "source": "export function f(){ return setImmediate; }\n"
193
+ },
194
+ {
195
+ "id": "sole-clearTimeout",
196
+ "expect": "refuse",
197
+ "rule": "clearTimeout",
198
+ "reason": "timer",
199
+ "sole": true,
200
+ "source": "export function f(){ return clearTimeout; }\n"
201
+ },
202
+ {
203
+ "id": "sole-clearInterval",
204
+ "expect": "refuse",
205
+ "rule": "clearInterval",
206
+ "reason": "timer",
207
+ "sole": true,
208
+ "source": "export function f(){ return clearInterval; }\n"
209
+ },
210
+ {
211
+ "id": "sole-clearImmediate",
212
+ "expect": "refuse",
213
+ "rule": "clearImmediate",
214
+ "reason": "timer",
215
+ "sole": true,
216
+ "source": "export function f(){ return clearImmediate; }\n"
217
+ },
218
+ {
219
+ "id": "sole-queueMicrotask",
220
+ "expect": "refuse",
221
+ "rule": "queueMicrotask",
222
+ "reason": "timer",
223
+ "sole": true,
224
+ "source": "export function f(){ return queueMicrotask; }\n"
225
+ },
226
+ {
227
+ "id": "sole-requestAnimationFrame",
228
+ "expect": "refuse",
229
+ "rule": "requestAnimationFrame",
230
+ "reason": "timer",
231
+ "sole": true,
232
+ "source": "export function f(){ return requestAnimationFrame; }\n"
233
+ },
234
+ {
235
+ "id": "sole-cancelAnimationFrame",
236
+ "expect": "refuse",
237
+ "rule": "cancelAnimationFrame",
238
+ "reason": "timer",
239
+ "sole": true,
240
+ "source": "export function f(){ return cancelAnimationFrame; }\n"
241
+ },
242
+ {
243
+ "id": "sole-Function",
244
+ "expect": "refuse",
245
+ "rule": "Function",
246
+ "reason": "Function",
247
+ "sole": true,
248
+ "source": "export function f(){ return Function; }\n"
249
+ },
250
+ {
251
+ "id": "sole-eval",
252
+ "expect": "refuse",
253
+ "rule": "eval",
254
+ "reason": "eval",
255
+ "sole": true,
256
+ "source": "export function f(){ return eval; }\n"
257
+ },
258
+ {
259
+ "id": "sole-require",
260
+ "expect": "refuse",
261
+ "rule": "require",
262
+ "reason": "require",
263
+ "sole": true,
264
+ "source": "export function f(){ return require; }\n"
265
+ },
266
+ {
267
+ "id": "sole-Reflect",
268
+ "expect": "refuse",
269
+ "rule": "Reflect",
270
+ "reason": "reflect",
271
+ "sole": true,
272
+ "source": "export function f(){ return Reflect; }\n"
273
+ },
274
+ {
275
+ "id": "sole-Intl",
276
+ "expect": "refuse",
277
+ "rule": "Intl",
278
+ "reason": "intl",
279
+ "sole": true,
280
+ "source": "export function f(){ return Intl; }\n"
281
+ },
282
+ {
283
+ "id": "sole-navigator",
284
+ "expect": "refuse",
285
+ "rule": "navigator",
286
+ "reason": "navigator",
287
+ "sole": true,
288
+ "source": "export function f(){ return navigator; }\n"
289
+ },
290
+ {
291
+ "id": "sole-WebAssembly",
292
+ "expect": "refuse",
293
+ "rule": "WebAssembly",
294
+ "reason": "wasm",
295
+ "sole": true,
296
+ "source": "export function f(){ return WebAssembly; }\n"
297
+ },
298
+ {
299
+ "id": "sole-Atomics",
300
+ "expect": "refuse",
301
+ "rule": "Atomics",
302
+ "reason": "atomics",
303
+ "sole": true,
304
+ "source": "export function f(){ return Atomics; }\n"
305
+ },
306
+ {
307
+ "id": "sole-Proxy",
308
+ "expect": "refuse",
309
+ "rule": "Proxy",
310
+ "reason": "proxy",
311
+ "sole": true,
312
+ "source": "export function f(){ return Proxy; }\n"
313
+ },
314
+ {
315
+ "id": "sole-WeakRef",
316
+ "expect": "refuse",
317
+ "rule": "WeakRef",
318
+ "reason": "weakref",
319
+ "sole": true,
320
+ "source": "export function f(){ return WeakRef; }\n"
321
+ },
322
+ {
323
+ "id": "sole-FinalizationRegistry",
324
+ "expect": "refuse",
325
+ "rule": "FinalizationRegistry",
326
+ "reason": "finalizer",
327
+ "sole": true,
328
+ "source": "export function f(){ return FinalizationRegistry; }\n"
329
+ },
330
+ {
331
+ "id": "sole-SharedArrayBuffer",
332
+ "expect": "refuse",
333
+ "rule": "SharedArrayBuffer",
334
+ "reason": "memory",
335
+ "sole": true,
336
+ "source": "export function f(){ return SharedArrayBuffer; }\n"
337
+ },
338
+ {
339
+ "id": "sole-structuredClone",
340
+ "expect": "refuse",
341
+ "rule": "structuredClone",
342
+ "reason": "intrinsic",
343
+ "sole": true,
344
+ "source": "export function f(){ return structuredClone; }\n"
345
+ },
346
+ {
347
+ "id": "sole-object-getOwnPropertyDescriptor",
348
+ "expect": "refuse",
349
+ "rule": "getOwnPropertyDescriptor",
350
+ "reason": "intrinsic",
351
+ "sole": true,
352
+ "source": "export function f(o){ return Object.getOwnPropertyDescriptor(o); }\n"
353
+ },
354
+ {
355
+ "id": "sole-object-getOwnPropertyDescriptors",
356
+ "expect": "refuse",
357
+ "rule": "getOwnPropertyDescriptors",
358
+ "reason": "intrinsic",
359
+ "sole": true,
360
+ "source": "export function f(o){ return Object.getOwnPropertyDescriptors(o); }\n"
361
+ },
362
+ {
363
+ "id": "sole-object-getPrototypeOf",
364
+ "expect": "refuse",
365
+ "rule": "getPrototypeOf",
366
+ "reason": "intrinsic",
367
+ "sole": true,
368
+ "branch": "object-method",
369
+ "source": "export function f(o){ return Object.getPrototypeOf(o); }\n"
370
+ },
371
+ {
372
+ "id": "sole-object-setPrototypeOf",
373
+ "expect": "refuse",
374
+ "rule": "setPrototypeOf",
375
+ "reason": "intrinsic",
376
+ "sole": true,
377
+ "source": "export function f(o){ return Object.setPrototypeOf(o); }\n"
378
+ },
379
+ {
380
+ "id": "sole-object-defineProperty",
381
+ "expect": "refuse",
382
+ "rule": "defineProperty",
383
+ "reason": "intrinsic",
384
+ "sole": true,
385
+ "source": "export function f(o){ return Object.defineProperty(o); }\n"
386
+ },
387
+ {
388
+ "id": "sole-object-defineProperties",
389
+ "expect": "refuse",
390
+ "rule": "defineProperties",
391
+ "reason": "intrinsic",
392
+ "sole": true,
393
+ "source": "export function f(o){ return Object.defineProperties(o); }\n"
394
+ },
395
+ {
396
+ "id": "math-value",
397
+ "expect": "refuse",
398
+ "rule": "math",
399
+ "reason": "random",
400
+ "sole": true,
401
+ "branch": "math-value",
402
+ "source": "export function f(){ return Math; }\n"
403
+ },
404
+ {
405
+ "id": "math-member",
406
+ "expect": "refuse",
407
+ "rule": "math",
408
+ "reason": "random",
409
+ "sole": true,
410
+ "branch": "math-member",
411
+ "source": "export function f(){ return Math.random(); }\n"
412
+ },
413
+ {
414
+ "id": "math-write",
415
+ "expect": "refuse",
416
+ "rule": "math",
417
+ "reason": "random",
418
+ "sole": true,
419
+ "branch": "math-write",
420
+ "source": "export function f(){ Math.round = 1; return 1; }\n"
421
+ },
422
+ {
423
+ "id": "math-map",
424
+ "expect": "refuse",
425
+ "rule": "math",
426
+ "reason": "random",
427
+ "sole": true,
428
+ "source": "export function f(){ return [Math].map((m) => m.random()); }\n"
429
+ },
430
+ {
431
+ "id": "math-find",
432
+ "expect": "refuse",
433
+ "rule": "math",
434
+ "reason": "random",
435
+ "sole": true,
436
+ "source": "export function f(){ return [Math].find((m) => m); }\n"
437
+ },
438
+ {
439
+ "id": "math-throw",
440
+ "expect": "refuse",
441
+ "rule": "math",
442
+ "reason": "random",
443
+ "sole": true,
444
+ "source": "export function f(){ try { throw Math } catch (M) { return M; } }\n"
445
+ },
446
+ {
447
+ "id": "math-alias",
448
+ "expect": "refuse",
449
+ "rule": "math",
450
+ "reason": "random",
451
+ "sole": false,
452
+ "source": "const M = Math;\nexport const x = 1;\n"
453
+ },
454
+ {
455
+ "id": "math-destructure",
456
+ "expect": "refuse",
457
+ "rule": "math",
458
+ "reason": "random",
459
+ "sole": false,
460
+ "source": "const { round } = Math;\nexport const x = 1;\n"
461
+ },
462
+ {
463
+ "id": "math-bracket",
464
+ "expect": "refuse",
465
+ "rule": "math",
466
+ "reason": "random",
467
+ "sole": true,
468
+ "source": "export function f(){ return Math['random'](); }\n"
469
+ },
470
+ {
471
+ "id": "math-store",
472
+ "expect": "refuse",
473
+ "rule": "math",
474
+ "reason": "random",
475
+ "sole": true,
476
+ "source": "export function f(){ const o = {}; o.m = Math; return o.m; }\n"
477
+ },
478
+ {
479
+ "id": "math-or",
480
+ "expect": "refuse",
481
+ "rule": "math",
482
+ "reason": "random",
483
+ "sole": true,
484
+ "source": "export function f(input){ return input.a || Math; }\n"
485
+ },
486
+ {
487
+ "id": "math-ternary",
488
+ "expect": "refuse",
489
+ "rule": "math",
490
+ "reason": "random",
491
+ "sole": true,
492
+ "source": "export function f(input){ return input.a ? Math : Math; }\n"
493
+ },
494
+ {
495
+ "id": "math-yield",
496
+ "expect": "refuse",
497
+ "rule": "node",
498
+ "reason": "syntax",
499
+ "sole": false,
500
+ "source": "export function* g(){ yield Math }\n"
501
+ },
502
+ {
503
+ "id": "intrinsic-create",
504
+ "expect": "refuse",
505
+ "rule": "intrinsic",
506
+ "reason": "intrinsic",
507
+ "sole": true,
508
+ "branch": "intrinsic",
509
+ "source": "export function f(){ return Object.create(null); }\n"
510
+ },
511
+ {
512
+ "id": "intrinsic-json-box",
513
+ "expect": "refuse",
514
+ "rule": "intrinsic",
515
+ "reason": "intrinsic",
516
+ "sole": true,
517
+ "source": "export function f(){ const o = { J: JSON }; o.J.parse = function () { return 1; }; return o; }\n"
518
+ },
519
+ {
520
+ "id": "intrinsic-ternary",
521
+ "expect": "refuse",
522
+ "rule": "intrinsic",
523
+ "reason": "intrinsic",
524
+ "sole": false,
525
+ "source": "export function f(input){ const O = input.a ? Object : Object; return O.getPrototypeOf({}); }\n"
526
+ },
527
+ {
528
+ "id": "intrinsic-or",
529
+ "expect": "refuse",
530
+ "rule": "intrinsic",
531
+ "reason": "intrinsic",
532
+ "sole": true,
533
+ "source": "export function f(input){ return input.a || Object; }\n"
534
+ },
535
+ {
536
+ "id": "prototype-read",
537
+ "expect": "refuse",
538
+ "rule": "prototype",
539
+ "reason": "prototype",
540
+ "sole": true,
541
+ "branch": "prototype",
542
+ "source": "export function f(){ return Array.prototype; }\n"
543
+ },
544
+ {
545
+ "id": "prototype-push-write",
546
+ "expect": "refuse",
547
+ "rule": "prototype",
548
+ "reason": "prototype",
549
+ "sole": true,
550
+ "source": "export function f(){ Array.prototype.push = null; return 1; }\n"
551
+ },
552
+ {
553
+ "id": "prototype-obj",
554
+ "expect": "refuse",
555
+ "rule": "prototype",
556
+ "reason": "prototype",
557
+ "sole": true,
558
+ "source": "export function f(){ const o = { p: Array.prototype }; return o.p; }\n"
559
+ },
560
+ {
561
+ "id": "prototype-arr",
562
+ "expect": "refuse",
563
+ "rule": "prototype",
564
+ "reason": "prototype",
565
+ "sole": true,
566
+ "source": "export function f(){ return [Array.prototype][0]; }\n"
567
+ },
568
+ {
569
+ "id": "prototype-fn",
570
+ "expect": "refuse",
571
+ "rule": "prototype",
572
+ "reason": "prototype",
573
+ "sole": true,
574
+ "source": "export function f(){ return (() => Array.prototype)(); }\n"
575
+ },
576
+ {
577
+ "id": "prototype-key",
578
+ "expect": "refuse",
579
+ "rule": "prototype",
580
+ "reason": "prototype",
581
+ "sole": false,
582
+ "source": "const T = Object.freeze({ __proto__: { x: 1 }, a: 1 });\nexport const x = 1;\n"
583
+ },
584
+ {
585
+ "id": "constructor",
586
+ "expect": "refuse",
587
+ "rule": "constructor",
588
+ "reason": "Function",
589
+ "sole": true,
590
+ "branch": "constructor",
591
+ "source": "export function f(){ return (() => {}).constructor; }\n"
592
+ },
593
+ {
594
+ "id": "constructor-unicode",
595
+ "expect": "refuse",
596
+ "rule": "constructor",
597
+ "reason": "Function",
598
+ "sole": true,
599
+ "source": "export function f(o){ return o.\\u0063onstructor; }\n"
600
+ },
601
+ {
602
+ "id": "stack",
603
+ "expect": "refuse",
604
+ "rule": "stack",
605
+ "reason": "intrinsic",
606
+ "sole": true,
607
+ "branch": "stack",
608
+ "source": "export function f(){ Error.prepareStackTrace = function () {}; return 1; }\n"
609
+ },
610
+ {
611
+ "id": "stack-read",
612
+ "expect": "refuse",
613
+ "rule": "stack",
614
+ "reason": "intrinsic",
615
+ "sole": true,
616
+ "source": "export function f(){ return new Error('x').stack; }\n"
617
+ },
618
+ {
619
+ "id": "computed",
620
+ "expect": "refuse",
621
+ "rule": "computed",
622
+ "reason": "computed key",
623
+ "sole": true,
624
+ "branch": "computed",
625
+ "source": "export function f(o, k){ return o[k]; }\n"
626
+ },
627
+ {
628
+ "id": "computed-twohop-string",
629
+ "expect": "refuse",
630
+ "rule": "computed",
631
+ "reason": "computed key",
632
+ "sole": true,
633
+ "source": "export function f(){ const k = ['constr', 'uctor'].join(''); return ''[k][k]('return globalThis')(); }\n"
634
+ },
635
+ {
636
+ "id": "computed-twohop-array",
637
+ "expect": "refuse",
638
+ "rule": "computed",
639
+ "reason": "computed key",
640
+ "sole": true,
641
+ "source": "export function f(){ const k = ['constr', 'uctor'].join(''); return [][k][k]('return globalThis')(); }\n"
642
+ },
643
+ {
644
+ "id": "computed-twohop-fn",
645
+ "expect": "refuse",
646
+ "rule": "computed",
647
+ "reason": "computed key",
648
+ "sole": true,
649
+ "source": "export function f(fn, k){ return fn[k]('return 1')(); }\n"
650
+ },
651
+ {
652
+ "id": "computed-no-guard",
653
+ "expect": "refuse",
654
+ "rule": "computed",
655
+ "reason": "computed key",
656
+ "sole": true,
657
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88, D3: 0, D4: 3.267 }),\n 3: Object.freeze({ __proto__: null, A2: 1.023, D3: 0, D4: 2.574 })\n});\nexport function f(input){ return FACTORS[input.n]; }\n"
658
+ },
659
+ {
660
+ "id": "table",
661
+ "expect": "refuse",
662
+ "rule": "table",
663
+ "reason": "module state",
664
+ "sole": true,
665
+ "branch": "table",
666
+ "source": "const T = Object.freeze({ __proto__: null, a: 1 });\nfunction id(x){ return x; }\nexport function f(){ return id(T); }\n"
667
+ },
668
+ {
669
+ "id": "table-foreach",
670
+ "expect": "refuse",
671
+ "rule": "table",
672
+ "reason": "module state",
673
+ "sole": false,
674
+ "source": "const T = Object.freeze({ __proto__: null, a: 1 });\nexport function f(){ [T].forEach((o) => { o.a = 2; }); return T.a; }\n"
675
+ },
676
+ {
677
+ "id": "table-getter",
678
+ "expect": "refuse",
679
+ "rule": "table",
680
+ "reason": "module state",
681
+ "sole": true,
682
+ "source": "const T = Object.freeze({ __proto__: null, a: 1 });\nexport function f(){ const box = { get v(){ return T; } }; return box.v; }\n"
683
+ },
684
+ {
685
+ "id": "table-destructure",
686
+ "expect": "refuse",
687
+ "rule": "table",
688
+ "reason": "module state",
689
+ "sole": true,
690
+ "source": "const T = Object.freeze({ __proto__: null, a: Object.freeze({ __proto__: null, x: 1 }) });\nexport function f(){ const { a } = T; return a; }\n"
691
+ },
692
+ {
693
+ "id": "table-reduce",
694
+ "expect": "refuse",
695
+ "rule": "table",
696
+ "reason": "module state",
697
+ "sole": true,
698
+ "source": "const T = Object.freeze({ __proto__: null, a: 1 });\nexport function f(){ return [T].reduce((acc, o) => o.a, 0); }\n"
699
+ },
700
+ {
701
+ "id": "table-sort",
702
+ "expect": "refuse",
703
+ "rule": "table",
704
+ "reason": "module state",
705
+ "sole": true,
706
+ "source": "const T = Object.freeze({ __proto__: null, l: Object.freeze([1, 2]) });\nexport function f(){ return T.l.sort((a, b) => a - b); }\n"
707
+ },
708
+ {
709
+ "id": "member",
710
+ "expect": "refuse",
711
+ "rule": "member",
712
+ "reason": "module state",
713
+ "sole": true,
714
+ "branch": "member",
715
+ "source": "export function f(o){ o.a = 1; return o.a; }\n"
716
+ },
717
+ {
718
+ "id": "callbind",
719
+ "expect": "refuse",
720
+ "rule": "callbind",
721
+ "reason": "module state",
722
+ "sole": true,
723
+ "branch": "callbind",
724
+ "source": "export function f(m){ return m.call(null); }\n"
725
+ },
726
+ {
727
+ "id": "callbind-apply",
728
+ "expect": "refuse",
729
+ "rule": "callbind",
730
+ "reason": "module state",
731
+ "sole": false,
732
+ "source": "const T = Object.freeze({ __proto__: null, l: Object.freeze([1]) });\nexport function f(){ Array.prototype.push.apply(T.l, [9]); return 1; }\n"
733
+ },
734
+ {
735
+ "id": "callbind-reverse",
736
+ "expect": "refuse",
737
+ "rule": "callbind",
738
+ "reason": "module state",
739
+ "sole": false,
740
+ "source": "const T = Object.freeze({ __proto__: null, l: Object.freeze([1]) });\nexport function f(){ return Array.prototype.reverse.call(T.l); }\n"
741
+ },
742
+ {
743
+ "id": "callbind-bind",
744
+ "expect": "refuse",
745
+ "rule": "callbind",
746
+ "reason": "module state",
747
+ "sole": true,
748
+ "source": "export function f(m){ return m.bind(null); }\n"
749
+ },
750
+ {
751
+ "id": "callbind-table",
752
+ "expect": "refuse",
753
+ "rule": "callbind",
754
+ "reason": "module state",
755
+ "sole": false,
756
+ "source": "const T = Object.freeze({ __proto__: null, a: 1 });\nexport function f(m){ return m.call(null, T); }\n"
757
+ },
758
+ {
759
+ "id": "var",
760
+ "expect": "refuse",
761
+ "rule": "var",
762
+ "reason": "syntax",
763
+ "sole": true,
764
+ "branch": "var",
765
+ "source": "export function f(){ var n = 1; return n; }\n"
766
+ },
767
+ {
768
+ "id": "var-for-of",
769
+ "expect": "refuse",
770
+ "rule": "var",
771
+ "reason": "syntax",
772
+ "sole": false,
773
+ "source": "const k = 0;\nconst fn = () => {};\nexport function h(){ for (var k of [fn.k2]); return fn[k]; }\n"
774
+ },
775
+ {
776
+ "id": "var-for-in",
777
+ "expect": "refuse",
778
+ "rule": "var",
779
+ "reason": "syntax",
780
+ "sole": false,
781
+ "source": "const k = 0;\nexport function g(){ for (var k in { constructor: 1 }); return k; }\n"
782
+ },
783
+ {
784
+ "id": "var-nested",
785
+ "expect": "refuse",
786
+ "rule": "var",
787
+ "reason": "syntax",
788
+ "sole": false,
789
+ "source": "const k = 0;\nexport function g(){ function h(){ for (var k of [1]); return k; } return h(); }\n"
790
+ },
791
+ {
792
+ "id": "shadow",
793
+ "expect": "refuse",
794
+ "rule": "shadow",
795
+ "reason": "syntax",
796
+ "sole": true,
797
+ "branch": "shadow",
798
+ "source": "const k = 0;\nexport function f(){ const k = 1; return k; }\n"
799
+ },
800
+ {
801
+ "id": "shadow-nested",
802
+ "expect": "refuse",
803
+ "rule": "shadow",
804
+ "reason": "syntax",
805
+ "sole": true,
806
+ "source": "const k = 0;\nexport function g(){ function h(){ const k = 'constructor'; return k; } return h(); }\n"
807
+ },
808
+ {
809
+ "id": "for-in",
810
+ "expect": "refuse",
811
+ "rule": "for-in",
812
+ "reason": "syntax",
813
+ "sole": true,
814
+ "branch": "for-in",
815
+ "source": "export function f(o){ for (const k in o) return k; }\n"
816
+ },
817
+ {
818
+ "id": "module-let",
819
+ "expect": "refuse",
820
+ "rule": "module",
821
+ "reason": "module state",
822
+ "sole": true,
823
+ "branch": "module",
824
+ "source": "let n = 0;\nexport const x = 1;\n"
825
+ },
826
+ {
827
+ "id": "module-json",
828
+ "expect": "refuse",
829
+ "rule": "module",
830
+ "reason": "module state",
831
+ "sole": true,
832
+ "source": "export const s = JSON.parse('[]');\n"
833
+ },
834
+ {
835
+ "id": "module-split",
836
+ "expect": "refuse",
837
+ "rule": "module",
838
+ "reason": "module state",
839
+ "sole": true,
840
+ "source": "export const s = 'ab'.split('');\n"
841
+ },
842
+ {
843
+ "id": "module-array",
844
+ "expect": "refuse",
845
+ "rule": "module",
846
+ "reason": "module state",
847
+ "sole": true,
848
+ "source": "export const s = Array(0);\n"
849
+ },
850
+ {
851
+ "id": "module-iife",
852
+ "expect": "refuse",
853
+ "rule": "module",
854
+ "reason": "module state",
855
+ "sole": true,
856
+ "source": "export const run = (() => { let n = 0; return () => ++n; })();\n"
857
+ },
858
+ {
859
+ "id": "module-unfrozen",
860
+ "expect": "refuse",
861
+ "rule": "module",
862
+ "reason": "module state",
863
+ "sole": true,
864
+ "source": "export const T = { a: 1 };\n"
865
+ },
866
+ {
867
+ "id": "new",
868
+ "expect": "refuse",
869
+ "rule": "new",
870
+ "reason": "module state",
871
+ "sole": true,
872
+ "branch": "new",
873
+ "source": "export function f(){ return new Map(); }\n"
874
+ },
875
+ {
876
+ "id": "node-class",
877
+ "expect": "refuse",
878
+ "rule": "node",
879
+ "reason": "syntax",
880
+ "sole": true,
881
+ "branch": "node",
882
+ "source": "export class A {}\n"
883
+ },
884
+ {
885
+ "id": "node-generator",
886
+ "expect": "refuse",
887
+ "rule": "node",
888
+ "reason": "syntax",
889
+ "sole": true,
890
+ "source": "export function* g(){ yield 1; }\n"
891
+ },
892
+ {
893
+ "id": "node-tag",
894
+ "expect": "refuse",
895
+ "rule": "node",
896
+ "reason": "syntax",
897
+ "sole": true,
898
+ "source": "export function f(){ return tag`a`; }\n"
899
+ },
900
+ {
901
+ "id": "import",
902
+ "expect": "refuse",
903
+ "rule": "import",
904
+ "reason": "syntax",
905
+ "sole": true,
906
+ "branch": "import",
907
+ "source": "export function f(){ return import('./x.js'); }\n"
908
+ },
909
+ {
910
+ "id": "meta",
911
+ "expect": "refuse",
912
+ "rule": "meta",
913
+ "reason": "env",
914
+ "sole": true,
915
+ "branch": "meta",
916
+ "source": "export function f(){ return import.meta.url; }\n"
917
+ },
918
+ {
919
+ "id": "bytes",
920
+ "expect": "refuse",
921
+ "rule": "bytes",
922
+ "reason": "too large",
923
+ "sole": true,
924
+ "branch": "bytes",
925
+ "source": "export const x = 1;\n "
926
+ },
927
+ {
928
+ "id": "parse",
929
+ "expect": "refuse",
930
+ "rule": "parse",
931
+ "reason": "parse",
932
+ "sole": true,
933
+ "branch": "parse",
934
+ "source": "export function ("
935
+ },
936
+ {
937
+ "id": "pass-at",
938
+ "expect": "pass",
939
+ "source": "export function f(input) {\n let total = 0;\n for (let i = 0; i < input.n; i += 1) total += input.y.at(i);\n return total;\n}\n"
940
+ },
941
+ {
942
+ "id": "pass-values-zip",
943
+ "expect": "pass",
944
+ "source": "export function f(input) {\n const ys = input.y.values();\n let total = 0;\n for (const xv of input.x) {\n const yv = ys.next().value;\n total += xv + yv;\n }\n return total;\n}\n"
945
+ },
946
+ {
947
+ "id": "pass-pairs",
948
+ "expect": "pass",
949
+ "source": "export function f(input) {\n let total = 0;\n for (const pair of [['xBar', input.xBar], ['mu0', input.mu0]]) total += pair[1];\n return total;\n}\n"
950
+ },
951
+ {
952
+ "id": "pass-means-at",
953
+ "expect": "pass",
954
+ "source": "export function f(input) {\n const means = [];\n input.groups.forEach((group, index) => { means.push(group.at(index)); });\n return means.length;\n}\n"
955
+ },
956
+ {
957
+ "id": "pass-spread-shell",
958
+ "expect": "pass",
959
+ "source": "export function f(input) {\n const out = { ...shell(input), grandMean: 1 };\n out.x = 2;\n return out.x;\n}\n"
960
+ },
961
+ {
962
+ "id": "pass-hasown-input",
963
+ "expect": "pass",
964
+ "source": "export function f(input) {\n if (!Object.hasOwn(input, 'tCrit')) return null;\n return input.tCrit;\n}\n"
965
+ },
966
+ {
967
+ "id": "pass-guard-for-of",
968
+ "expect": "pass",
969
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n for (const k of input.keys) {\n if (typeof k !== 'string' && typeof k !== 'number') continue;\n if (!Object.hasOwn(P, k)) continue;\n return P[k];\n }\n return 0;\n}\n"
970
+ },
971
+ {
972
+ "id": "guard-member",
973
+ "expect": "refuse",
974
+ "rule": "computed",
975
+ "reason": "computed key",
976
+ "sole": false,
977
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n if (!Object.hasOwn(FACTORS, input.n)) return null;\n return FACTORS[input.n].A2;\n}\n"
978
+ },
979
+ {
980
+ "id": "guard-let",
981
+ "expect": "refuse",
982
+ "rule": "computed",
983
+ "reason": "computed key",
984
+ "sole": false,
985
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n let k = input.n;\n if (!Object.hasOwn(FACTORS, k)) return null;\n k = input.alt;\n return FACTORS[k].A2;\n}\n"
986
+ },
987
+ {
988
+ "id": "guard-param",
989
+ "expect": "refuse",
990
+ "rule": "computed",
991
+ "reason": "computed key",
992
+ "sole": false,
993
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(k) {\n if (!Object.hasOwn(P, k)) return null;\n return P[k];\n}\n"
994
+ },
995
+ {
996
+ "id": "guard-call-key",
997
+ "expect": "refuse",
998
+ "rule": "computed",
999
+ "reason": "computed key",
1000
+ "sole": false,
1001
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n if (!Object.hasOwn(P, input.k())) return null;\n return P[input.k()];\n}\n"
1002
+ },
1003
+ {
1004
+ "id": "guard-other-key",
1005
+ "expect": "refuse",
1006
+ "rule": "computed",
1007
+ "reason": "computed key",
1008
+ "sole": false,
1009
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = String(input.n);\n const m = String(input.m);\n if (!Object.hasOwn(P, n)) return null;\n return P[m];\n}\n"
1010
+ },
1011
+ {
1012
+ "id": "guard-shadow-key",
1013
+ "expect": "refuse",
1014
+ "rule": "computed",
1015
+ "reason": "computed key",
1016
+ "sole": false,
1017
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(P, k)) return null;\n {\n const k = String(input.evil);\n return P[k];\n }\n}\n"
1018
+ },
1019
+ {
1020
+ "id": "guard-other-table",
1021
+ "expect": "refuse",
1022
+ "rule": "computed",
1023
+ "reason": "computed key",
1024
+ "sole": false,
1025
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nconst Q = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(Q, k)) return null;\n return P[k];\n}\n"
1026
+ },
1027
+ {
1028
+ "id": "guard-negated-read",
1029
+ "expect": "refuse",
1030
+ "rule": "computed",
1031
+ "reason": "computed key",
1032
+ "sole": false,
1033
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(P, k)) return P[k];\n return 0;\n}\n"
1034
+ },
1035
+ {
1036
+ "id": "guard-positive-early",
1037
+ "expect": "refuse",
1038
+ "rule": "computed",
1039
+ "reason": "computed key",
1040
+ "sole": false,
1041
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (Object.hasOwn(P, k)) return 0;\n return P[k];\n}\n"
1042
+ },
1043
+ {
1044
+ "id": "guard-closure",
1045
+ "expect": "refuse",
1046
+ "rule": "computed",
1047
+ "reason": "computed key",
1048
+ "sole": false,
1049
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(P, k)) return null;\n const g = () => P[k];\n return g();\n}\n"
1050
+ },
1051
+ {
1052
+ "id": "guard-or-wrong",
1053
+ "expect": "refuse",
1054
+ "rule": "computed",
1055
+ "reason": "computed key",
1056
+ "sole": false,
1057
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n return Object.hasOwn(P, k) || P[k];\n}\n"
1058
+ },
1059
+ {
1060
+ "id": "guard-and-wrong",
1061
+ "expect": "refuse",
1062
+ "rule": "computed",
1063
+ "reason": "computed key",
1064
+ "sole": false,
1065
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n return !Object.hasOwn(P, k) && P[k];\n}\n"
1066
+ },
1067
+ {
1068
+ "id": "guard-ternary-else",
1069
+ "expect": "refuse",
1070
+ "rule": "computed",
1071
+ "reason": "computed key",
1072
+ "sole": false,
1073
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n return Object.hasOwn(P, k) ? 0 : P[k];\n}\n"
1074
+ },
1075
+ {
1076
+ "id": "guard-no-abrupt",
1077
+ "expect": "refuse",
1078
+ "rule": "computed",
1079
+ "reason": "computed key",
1080
+ "sole": false,
1081
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(P, k)) { const x = 1; }\n return P[k];\n}\n"
1082
+ },
1083
+ {
1084
+ "id": "guard-fake-is",
1085
+ "expect": "refuse",
1086
+ "rule": "table",
1087
+ "reason": "module state",
1088
+ "sole": false,
1089
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.is(P, k)) return null;\n return P[k];\n}\n"
1090
+ },
1091
+ {
1092
+ "id": "table-no-null-proto",
1093
+ "expect": "refuse",
1094
+ "rule": "module",
1095
+ "reason": "module state",
1096
+ "sole": false,
1097
+ "source": "const T = Object.freeze({ a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(T, k)) return null;\n return T[k];\n}\n"
1098
+ },
1099
+ {
1100
+ "id": "table-seal",
1101
+ "expect": "refuse",
1102
+ "rule": "intrinsic",
1103
+ "reason": "intrinsic",
1104
+ "sole": false,
1105
+ "source": "const T = Object.seal({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(T, k)) return null;\n return T[k];\n}\n"
1106
+ },
1107
+ {
1108
+ "id": "table-row-bind",
1109
+ "expect": "refuse",
1110
+ "rule": "table",
1111
+ "reason": "module state",
1112
+ "sole": false,
1113
+ "source": "const T = Object.freeze({\n __proto__: null,\n a: Object.freeze({ __proto__: null, A2: 1 }),\n b: Object.freeze({ __proto__: null, A2: 2 })\n});\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(T, k)) return null;\n const r = T[k];\n return r;\n}\n"
1114
+ },
1115
+ {
1116
+ "id": "table-freeze-value",
1117
+ "expect": "refuse",
1118
+ "rule": "module",
1119
+ "reason": "module state",
1120
+ "sole": false,
1121
+ "source": "const T = Object.freeze(input);\nexport function f() { return 1; }\n"
1122
+ },
1123
+ {
1124
+ "id": "table-array-dynamic",
1125
+ "expect": "refuse",
1126
+ "rule": "computed",
1127
+ "reason": "computed key",
1128
+ "sole": false,
1129
+ "source": "const T = Object.freeze([1, 2, 3]);\nexport function f(input) {\n const k = String(input.k);\n if (!Object.hasOwn(T, k)) return null;\n return T[k];\n}\n"
1130
+ },
1131
+ {
1132
+ "id": "intrinsic-keys",
1133
+ "expect": "refuse",
1134
+ "rule": "intrinsic",
1135
+ "reason": "intrinsic",
1136
+ "sole": false,
1137
+ "source": "export function f(x) { return Object.keys(x); }\n"
1138
+ },
1139
+ {
1140
+ "id": "intrinsic-assign",
1141
+ "expect": "refuse",
1142
+ "rule": "intrinsic",
1143
+ "reason": "intrinsic",
1144
+ "sole": false,
1145
+ "source": "export function f(x) { return Object.assign({}, x); }\n"
1146
+ },
1147
+ {
1148
+ "id": "computed-constructor",
1149
+ "expect": "refuse",
1150
+ "rule": "constructor",
1151
+ "reason": "Function",
1152
+ "sole": false,
1153
+ "source": "export function f(o) { return o['constructor']; }\n"
1154
+ },
1155
+ {
1156
+ "id": "computed-template-interp",
1157
+ "expect": "refuse",
1158
+ "rule": "computed",
1159
+ "reason": "computed key",
1160
+ "sole": false,
1161
+ "source": "export function f(values) {\n const k = `0${''}`;\n return values[k];\n}\n"
1162
+ },
1163
+ {
1164
+ "id": "new-error-shadow",
1165
+ "expect": "refuse",
1166
+ "rule": "new",
1167
+ "reason": "module state",
1168
+ "sole": false,
1169
+ "source": "export function f(Error) { return new Error('x'); }\n"
1170
+ },
1171
+ {
1172
+ "id": "regexp-dollar",
1173
+ "expect": "refuse",
1174
+ "rule": "intrinsic",
1175
+ "reason": "intrinsic",
1176
+ "sole": false,
1177
+ "source": "export function f() { return RegExp.$1; }\n"
1178
+ },
1179
+ {
1180
+ "id": "regexp-last",
1181
+ "expect": "refuse",
1182
+ "rule": "intrinsic",
1183
+ "reason": "intrinsic",
1184
+ "sole": false,
1185
+ "source": "export function f() { return RegExp.lastMatch; }\n"
1186
+ },
1187
+ {
1188
+ "id": "member-shell",
1189
+ "expect": "refuse",
1190
+ "rule": "member",
1191
+ "reason": "module state",
1192
+ "sole": false,
1193
+ "source": "export function f(input) {\n const out = shell(input);\n out.x = 1;\n return out;\n}\n"
1194
+ },
1195
+ {
1196
+ "id": "callbind-hasown",
1197
+ "expect": "refuse",
1198
+ "rule": "callbind",
1199
+ "reason": "module state",
1200
+ "sole": false,
1201
+ "source": "export function f(input) {\n return Object.prototype.hasOwnProperty.call(input, 'tCrit');\n}\n"
1202
+ },
1203
+ {
1204
+ "id": "guard-other-member",
1205
+ "expect": "refuse",
1206
+ "rule": "computed",
1207
+ "reason": "computed key",
1208
+ "sole": false,
1209
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n if (!Object.hasOwn(FACTORS, input.n)) return null;\n return FACTORS[input.m].A2;\n}\n"
1210
+ },
1211
+ {
1212
+ "id": "pass-guard-number",
1213
+ "expect": "pass",
1214
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = Number(input.n);\n if (!Object.hasOwn(P, n)) return 0;\n return P[n];\n}\n"
1215
+ },
1216
+ {
1217
+ "id": "pass-guard-typeof",
1218
+ "expect": "pass",
1219
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function controlLimits(input) {\n const n = input.n;\n if (typeof n !== 'string' && typeof n !== 'number') return null;\n if (!Object.hasOwn(FACTORS, n)) return null;\n return FACTORS[n].A2;\n}\n"
1220
+ },
1221
+ {
1222
+ "id": "pass-guard-typeof-if",
1223
+ "expect": "pass",
1224
+ "source": "const P = Object.freeze({ __proto__: null, a: 1, b: 2 });\nexport function f(input) {\n const n = input.n;\n if (typeof n === 'string' || typeof n === 'number') {\n if (!Object.hasOwn(P, n)) return 0;\n return P[n];\n }\n return 0;\n}\n"
1225
+ },
1226
+ {
1227
+ "id": "guard-object-key",
1228
+ "expect": "refuse",
1229
+ "rule": "computed",
1230
+ "reason": "computed key",
1231
+ "sole": false,
1232
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n const k = input.key;\n if (!Object.hasOwn(FACTORS, k)) return null;\n return FACTORS[k].A2;\n}\n"
1233
+ },
1234
+ {
1235
+ "id": "guard-tostring-key",
1236
+ "expect": "refuse",
1237
+ "rule": "computed",
1238
+ "reason": "computed key",
1239
+ "sole": false,
1240
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n const key = { toString() { return input.alt ? 'evil' : '2'; } };\n const k = key;\n if (!Object.hasOwn(FACTORS, k)) return null;\n return FACTORS[k].A2;\n}\n"
1241
+ },
1242
+ {
1243
+ "id": "guard-toprimitive",
1244
+ "expect": "refuse",
1245
+ "rule": "computed",
1246
+ "reason": "computed key",
1247
+ "sole": false,
1248
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n // input.key may implement Symbol.toPrimitive and return 2, then 'evil'\n const k = input.key;\n if (!Object.hasOwn(FACTORS, k)) return null;\n return FACTORS[k].A2;\n}\n"
1249
+ },
1250
+ {
1251
+ "id": "guard-boxed-string",
1252
+ "expect": "refuse",
1253
+ "rule": "new",
1254
+ "reason": "module state",
1255
+ "sole": false,
1256
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n const k = new String(input.n);\n if (!Object.hasOwn(FACTORS, k)) return null;\n return FACTORS[k].A2;\n}\n"
1257
+ },
1258
+ {
1259
+ "id": "guard-typeof-object",
1260
+ "expect": "refuse",
1261
+ "rule": "computed",
1262
+ "reason": "computed key",
1263
+ "sole": false,
1264
+ "source": "const FACTORS = Object.freeze({\n __proto__: null,\n 2: Object.freeze({ __proto__: null, A2: 1.88 }),\n evil: Object.freeze({ __proto__: null, A2: 999 })\n});\nexport function f(input) {\n const k = input.key;\n if (typeof k !== 'object') return null;\n if (!Object.hasOwn(FACTORS, k)) return null;\n return FACTORS[k].A2;\n}\n"
1265
+ },
1266
+ {
1267
+ "id": "locale-tostring",
1268
+ "expect": "refuse",
1269
+ "rule": "locale",
1270
+ "reason": "intl",
1271
+ "sole": true,
1272
+ "source": "export function f(n) { return (1234.5).toLocaleString(); }\n",
1273
+ "branch": "locale"
1274
+ },
1275
+ {
1276
+ "id": "locale-compare",
1277
+ "expect": "refuse",
1278
+ "rule": "locale",
1279
+ "reason": "intl",
1280
+ "sole": false,
1281
+ "source": "export function f(a, b) { return a.localeCompare(b); }\n"
1282
+ },
1283
+ {
1284
+ "id": "locale-date",
1285
+ "expect": "refuse",
1286
+ "rule": "locale",
1287
+ "reason": "intl",
1288
+ "sole": false,
1289
+ "source": "export function f(d) { return d.toLocaleDateString(); }\n"
1290
+ },
1291
+ {
1292
+ "id": "locale-time",
1293
+ "expect": "refuse",
1294
+ "rule": "locale",
1295
+ "reason": "intl",
1296
+ "sole": false,
1297
+ "source": "export function f(d) { return d.toLocaleTimeString(); }\n"
1298
+ },
1299
+ {
1300
+ "id": "buffer-alloc",
1301
+ "expect": "refuse",
1302
+ "rule": "Buffer",
1303
+ "reason": "memory",
1304
+ "sole": true,
1305
+ "source": "export function f() { return Buffer.allocUnsafe(8); }\n"
1306
+ },
1307
+ {
1308
+ "id": "freeze-not-object",
1309
+ "expect": "refuse",
1310
+ "rule": "intrinsic",
1311
+ "reason": "intrinsic",
1312
+ "sole": false,
1313
+ "source": "const T = JSON.freeze({ __proto__: null, a: 1 });\nexport function f() { return 1; }\n"
1314
+ },
1315
+ {
1316
+ "id": "guard-typeof-let",
1317
+ "expect": "refuse",
1318
+ "rule": "computed",
1319
+ "reason": "computed key",
1320
+ "sole": false,
1321
+ "source": "const F=Object.freeze({__proto__:null, 2:Object.freeze({__proto__:null,A2:1.88}), evil:Object.freeze({__proto__:null,A2:999})});\nexport function g(x){ let k=x.key; if(typeof k!=='string') return null; k=x.key2; if(!Object.hasOwn(F,k)) return null; return F[k].A2; }\n"
1322
+ },
1323
+ {
1324
+ "id": "guard-typeof-param",
1325
+ "expect": "refuse",
1326
+ "rule": "computed",
1327
+ "reason": "computed key",
1328
+ "sole": false,
1329
+ "source": "const F=Object.freeze({__proto__:null, 2:Object.freeze({__proto__:null,A2:1.88}), evil:Object.freeze({__proto__:null,A2:999})});\nexport function g(k){ if(typeof k!=='string') return null; if(!Object.hasOwn(F,k)) return null; return F[k].A2; }\n"
1330
+ },
1331
+ {
1332
+ "id": "guard-shadow-string",
1333
+ "expect": "refuse",
1334
+ "rule": "computed",
1335
+ "reason": "computed key",
1336
+ "sole": false,
1337
+ "source": "const F=Object.freeze({__proto__:null,2:Object.freeze({__proto__:null,A2:1})}); export function g(x, String){ const k=String(x.key); if(!Object.hasOwn(F,k)) return null; return F[k].A2; }\n"
1338
+ },
1339
+ {
1340
+ "id": "guard-typeof-or",
1341
+ "expect": "refuse",
1342
+ "rule": "computed",
1343
+ "reason": "computed key",
1344
+ "sole": false,
1345
+ "source": "const F=Object.freeze({__proto__:null, 2:Object.freeze({__proto__:null,A2:1.88}), evil:Object.freeze({__proto__:null,A2:999})});\nexport function g(x){ const k=x.key; if(typeof k!=='string' || typeof k!=='number') return null; if(!Object.hasOwn(F,k)) return null; return F[k].A2; }\n"
1346
+ },
1347
+ {
1348
+ "id": "guard-typeof-no-abrupt",
1349
+ "expect": "refuse",
1350
+ "rule": "computed",
1351
+ "reason": "computed key",
1352
+ "sole": false,
1353
+ "source": "const F=Object.freeze({__proto__:null, 2:Object.freeze({__proto__:null,A2:1.88}), evil:Object.freeze({__proto__:null,A2:999})});\nexport function g(x){ const k=x.key; if(typeof k!=='string') x.z; if(!Object.hasOwn(F,k)) return null; return F[k].A2; }\n"
1354
+ },
1355
+ {
1356
+ "id": "guard-typeof-closure",
1357
+ "expect": "refuse",
1358
+ "rule": "computed",
1359
+ "reason": "computed key",
1360
+ "sole": false,
1361
+ "source": "const F=Object.freeze({__proto__:null, 2:Object.freeze({__proto__:null,A2:1.88}), evil:Object.freeze({__proto__:null,A2:999})});\nexport function g(x){ const k=x.key; if(typeof k!=='string') return null; return (()=>{ if(!Object.hasOwn(F,k)) return null; return F[k].A2; })(); }\n"
1362
+ },
1363
+ {
1364
+ "id": "locale-upper",
1365
+ "expect": "refuse",
1366
+ "rule": "locale",
1367
+ "reason": "intl",
1368
+ "sole": false,
1369
+ "source": "export function g(x){ return 'i'.toLocaleUpperCase(); }\n"
1370
+ },
1371
+ {
1372
+ "id": "locale-lower",
1373
+ "expect": "refuse",
1374
+ "rule": "locale",
1375
+ "reason": "intl",
1376
+ "sole": false,
1377
+ "source": "export function g(x){ return 'I'.toLocaleLowerCase(); }\n"
1378
+ },
1379
+ {
1380
+ "id": "locale-destructure",
1381
+ "expect": "refuse",
1382
+ "rule": "locale",
1383
+ "reason": "intl",
1384
+ "sole": false,
1385
+ "source": "export function g(x){ const {toLocaleString:f}=[1]; return typeof f; }\n"
1386
+ },
1387
+ {
1388
+ "id": "dk-input",
1389
+ "expect": "refuse",
1390
+ "source": "export function g(x){ const {[x.k]: c} = ()=>{}; return c('return this')(); }\n",
1391
+ "rule": "computed",
1392
+ "reason": "computed key",
1393
+ "sole": false
1394
+ },
1395
+ {
1396
+ "id": "dk-concat",
1397
+ "expect": "refuse",
1398
+ "source": "export function g(x){ const {['constr'+'uctor']: c} = ()=>{}; return c('return this')(); }\n",
1399
+ "rule": "computed",
1400
+ "reason": "computed key",
1401
+ "sole": false
1402
+ },
1403
+ {
1404
+ "id": "dk-param",
1405
+ "expect": "refuse",
1406
+ "source": "export function g({[\"cons\"+\"tructor\"]: c}){ return c('return this')(); }\n",
1407
+ "rule": "computed",
1408
+ "reason": "computed key",
1409
+ "sole": false
1410
+ },
1411
+ {
1412
+ "id": "dk-assign",
1413
+ "expect": "refuse",
1414
+ "source": "export function g(x){ let c; ({[x.k]: c} = ()=>{}); return c('return this')(); }\n",
1415
+ "rule": "computed",
1416
+ "reason": "computed key",
1417
+ "sole": false
1418
+ },
1419
+ {
1420
+ "id": "dk-locale",
1421
+ "expect": "refuse",
1422
+ "source": "export function g(x){ const {[x.m]: f}=[1]; const o={0:1234567.5,length:1,f}; return o.f(); }\n",
1423
+ "rule": "computed",
1424
+ "reason": "computed key",
1425
+ "sole": false
1426
+ },
1427
+ {
1428
+ "id": "l-nested",
1429
+ "expect": "refuse",
1430
+ "source": "export function g(x){ const {a:{toLocaleString:f}}={a:[1]}; return typeof f; }\n",
1431
+ "rule": "locale",
1432
+ "reason": "intl",
1433
+ "sole": false
1434
+ },
1435
+ {
1436
+ "id": "l-default",
1437
+ "expect": "refuse",
1438
+ "source": "export function g(x){ const {toLocaleString:f=0}=[1]; return typeof f; }\n",
1439
+ "rule": "locale",
1440
+ "reason": "intl",
1441
+ "sole": false
1442
+ },
1443
+ {
1444
+ "id": "l-rest",
1445
+ "expect": "refuse",
1446
+ "source": "export function g(x){ const {...r}=[1]; return typeof r.toLocaleString; }\n",
1447
+ "rule": "locale",
1448
+ "reason": "intl",
1449
+ "sole": false
1450
+ },
1451
+ {
1452
+ "id": "l-computed-lit",
1453
+ "expect": "refuse",
1454
+ "source": "export function g(x){ const {['toLocaleString']:f}=[1]; return typeof f; }\n",
1455
+ "rule": "locale",
1456
+ "reason": "intl",
1457
+ "sole": false
1458
+ },
1459
+ {
1460
+ "id": "l-const-key",
1461
+ "expect": "refuse",
1462
+ "source": "export function g(x){ const m='toLocaleString'; const {[m]:f}=[1]; return typeof f; }\n",
1463
+ "rule": "computed",
1464
+ "reason": "computed key",
1465
+ "sole": false
1466
+ },
1467
+ {
1468
+ "id": "l-assign-pattern",
1469
+ "expect": "refuse",
1470
+ "source": "export function g(x){ let f; ({toLocaleString:f}=[1]); return typeof f; }\n",
1471
+ "rule": "locale",
1472
+ "reason": "intl",
1473
+ "sole": false
1474
+ },
1475
+ {
1476
+ "id": "l-param",
1477
+ "expect": "refuse",
1478
+ "source": "export function g({toLocaleString:f}){ return typeof f; }\n",
1479
+ "rule": "locale",
1480
+ "reason": "intl",
1481
+ "sole": false
1482
+ },
1483
+ {
1484
+ "id": "l-param-arr",
1485
+ "expect": "refuse",
1486
+ "source": "export function g(x){ return [[1]].map(({toLocaleString:f})=>typeof f)[0]; }\n",
1487
+ "rule": "locale",
1488
+ "reason": "intl",
1489
+ "sole": false
1490
+ },
1491
+ {
1492
+ "id": "l-shorthand",
1493
+ "expect": "refuse",
1494
+ "source": "export function g(x){ const {toLocaleString}=[1]; return typeof toLocaleString; }\n",
1495
+ "rule": "locale",
1496
+ "reason": "intl",
1497
+ "sole": false
1498
+ },
1499
+ {
1500
+ "id": "l-upper",
1501
+ "expect": "refuse",
1502
+ "source": "export function g(x){ return 'i'.toLocaleUpperCase(); }\n",
1503
+ "rule": "locale",
1504
+ "reason": "intl",
1505
+ "sole": false
1506
+ },
1507
+ {
1508
+ "id": "l-lower",
1509
+ "expect": "refuse",
1510
+ "source": "export function g(x){ return 'I'.toLocaleLowerCase(); }\n",
1511
+ "rule": "locale",
1512
+ "reason": "intl",
1513
+ "sole": false
1514
+ },
1515
+ {
1516
+ "id": "l-concat-method",
1517
+ "expect": "pass",
1518
+ "source": "export function g(x){ const a=[].concat([1234567.5]); return a.join(); }\n"
1519
+ },
1520
+ {
1521
+ "id": "l-object-values",
1522
+ "expect": "refuse",
1523
+ "source": "export function g(x){ return Object.values([1]); }\n",
1524
+ "rule": "intrinsic",
1525
+ "reason": "intrinsic",
1526
+ "sole": false
1527
+ },
1528
+ {
1529
+ "id": "l-entries-for",
1530
+ "expect": "pass",
1531
+ "source": "export function g(x){ for (const [k,v] of [[1]].entries()) return typeof v; }\n"
1532
+ },
1533
+ {
1534
+ "id": "l-arr-destr-method",
1535
+ "expect": "refuse",
1536
+ "source": "export function g(x){ const [f]=[ [1].toLocaleString ]; return 1; }\n",
1537
+ "rule": "locale",
1538
+ "reason": "intl",
1539
+ "sole": false
1540
+ },
1541
+ {
1542
+ "id": "l-catch-destr",
1543
+ "expect": "refuse",
1544
+ "source": "export function g(x){ try{ throw [1] }catch({toLocaleString:f}){ return typeof f; } }\n",
1545
+ "rule": "locale",
1546
+ "reason": "intl",
1547
+ "sole": false
1548
+ },
1549
+ {
1550
+ "id": "l-forof-destr",
1551
+ "expect": "refuse",
1552
+ "source": "export function g(x){ for (const {toLocaleString:f} of [[1]]) return typeof f; }\n",
1553
+ "rule": "locale",
1554
+ "reason": "intl",
1555
+ "sole": false
1556
+ },
1557
+ {
1558
+ "id": "dk-nested",
1559
+ "expect": "refuse",
1560
+ "rule": "computed",
1561
+ "reason": "computed key",
1562
+ "sole": false,
1563
+ "source": "export function g(x){ const {a:{[x.k]:c}}={a:()=>{}}; return typeof c; }\n"
1564
+ },
1565
+ {
1566
+ "id": "dk-default",
1567
+ "expect": "refuse",
1568
+ "rule": "computed",
1569
+ "reason": "computed key",
1570
+ "sole": false,
1571
+ "source": "export function g({[x.k]:c}=()=>{}){ return typeof c; }\n"
1572
+ },
1573
+ {
1574
+ "id": "dk-catch",
1575
+ "expect": "refuse",
1576
+ "rule": "computed",
1577
+ "reason": "computed key",
1578
+ "sole": false,
1579
+ "source": "export function g(x){ try { throw ()=>{} } catch ({[x.k]: c}) { return typeof c; } }\n"
1580
+ },
1581
+ {
1582
+ "id": "dk-forof",
1583
+ "expect": "refuse",
1584
+ "rule": "computed",
1585
+ "reason": "computed key",
1586
+ "sole": false,
1587
+ "source": "export function g(x){ for (const {[x.k]: c} of [()=>{}]) return typeof c; }\n"
1588
+ },
1589
+ {
1590
+ "id": "dk-lit-ctor",
1591
+ "expect": "refuse",
1592
+ "rule": "constructor",
1593
+ "reason": "Function",
1594
+ "sole": false,
1595
+ "source": "export function g(x){ const {[\"constructor\"]: c} = ()=>{}; return typeof c; }\n"
1596
+ },
1597
+ {
1598
+ "id": "call-computed",
1599
+ "expect": "refuse",
1600
+ "rule": "callbind",
1601
+ "reason": "module state",
1602
+ "sole": false,
1603
+ "source": "export function f(m){ return m[\"call\"](null); }\n"
1604
+ },
1605
+ {
1606
+ "id": "pattern-proto",
1607
+ "expect": "refuse",
1608
+ "rule": "prototype",
1609
+ "reason": "prototype",
1610
+ "sole": false,
1611
+ "source": "export function f(){ const {__proto__: p} = {}; return p; }\n"
1612
+ },
1613
+ {
1614
+ "id": "write-input-key",
1615
+ "expect": "refuse",
1616
+ "rule": "computed",
1617
+ "reason": "computed key",
1618
+ "sole": false,
1619
+ "source": "export function f(input){ const o = {}; o[input.k] = 1; return o; }\n"
1620
+ },
1621
+ {
1622
+ "id": "computed-bigint",
1623
+ "expect": "refuse",
1624
+ "rule": "computed",
1625
+ "reason": "computed key",
1626
+ "sole": false,
1627
+ "source": "export function f(o){ return o[1n]; }\n"
1628
+ },
1629
+ {
1630
+ "id": "import-fs",
1631
+ "expect": "refuse",
1632
+ "rule": "specifier",
1633
+ "reason": "specifier not allowed",
1634
+ "sole": false,
1635
+ "source": "import fs from 'fs';\nexport const y = 1;\n"
1636
+ },
1637
+ {
1638
+ "id": "import-node-child",
1639
+ "expect": "refuse",
1640
+ "rule": "specifier",
1641
+ "reason": "specifier not allowed",
1642
+ "sole": false,
1643
+ "source": "import * as cp from 'node:child_process';\nexport const y = 1;\n"
1644
+ },
1645
+ {
1646
+ "id": "import-node-fs",
1647
+ "expect": "refuse",
1648
+ "rule": "specifier",
1649
+ "reason": "specifier not allowed",
1650
+ "sole": false,
1651
+ "source": "import * as fs from 'node:fs';\nexport const y = 1;\n"
1652
+ },
1653
+ {
1654
+ "id": "import-node-vm",
1655
+ "expect": "refuse",
1656
+ "rule": "specifier",
1657
+ "reason": "specifier not allowed",
1658
+ "sole": false,
1659
+ "via": "gate",
1660
+ "source": "import * as vm from 'node:vm';\nexport const y = 1;\n"
1661
+ },
1662
+ {
1663
+ "id": "import-emet",
1664
+ "expect": "refuse",
1665
+ "rule": "specifier",
1666
+ "reason": "emet/rune",
1667
+ "sole": false,
1668
+ "via": "gate",
1669
+ "source": "import { read } from 'emet/rune';\nexport const y = 1;\n"
1670
+ },
1671
+ {
1672
+ "id": "import-url",
1673
+ "expect": "refuse",
1674
+ "rule": "specifier",
1675
+ "reason": "specifier not allowed",
1676
+ "sole": false,
1677
+ "source": "import x from 'https://example.com/x.js';\nexport const y = 1;\n"
1678
+ },
1679
+ {
1680
+ "id": "import-bare",
1681
+ "expect": "refuse",
1682
+ "rule": "specifier",
1683
+ "reason": "specifier not allowed",
1684
+ "sole": true,
1685
+ "source": "import x from 'left-pad';\nexport const y = 1;\n"
1686
+ },
1687
+ {
1688
+ "id": "import-escape",
1689
+ "expect": "refuse",
1690
+ "rule": "specifier",
1691
+ "reason": "specifier not allowed",
1692
+ "sole": false,
1693
+ "source": "import x from '../../outside.js';\nexport const y = 1;\n"
1694
+ },
1695
+ {
1696
+ "id": "import-dotdot",
1697
+ "expect": "refuse",
1698
+ "rule": "specifier",
1699
+ "reason": "specifier not allowed",
1700
+ "sole": false,
1701
+ "via": "gate",
1702
+ "source": "import x from '../secret.js';\nexport const y = 1;\n"
1703
+ },
1704
+ {
1705
+ "id": "import-unlisted",
1706
+ "expect": "refuse",
1707
+ "rule": "specifier",
1708
+ "reason": "specifier not allowed",
1709
+ "sole": false,
1710
+ "via": "gate",
1711
+ "from": "runes/look.js",
1712
+ "files": ["runes/look.js"],
1713
+ "source": "import { a } from './helper.js';\nexport const y = a;\n"
1714
+ },
1715
+ {
1716
+ "id": "import-outside-runes",
1717
+ "expect": "refuse",
1718
+ "rule": "specifier",
1719
+ "reason": "specifier not allowed",
1720
+ "sole": false,
1721
+ "via": "gate",
1722
+ "from": "runes/calc.js",
1723
+ "files": ["runes/calc.js", "lib/h.js"],
1724
+ "source": "import { h } from '../lib/h.js';\nexport const y = h;\n"
1725
+ },
1726
+ {
1727
+ "id": "import-symlink",
1728
+ "expect": "refuse",
1729
+ "rule": "specifier",
1730
+ "reason": "specifier not allowed",
1731
+ "sole": false,
1732
+ "via": "gate",
1733
+ "from": "runes/calc.js",
1734
+ "files": ["runes/calc.js", "runes/h.js"],
1735
+ "resolved": { "runes/h.js": "lib/h.js" },
1736
+ "source": "import { h } from './h.js';\nexport const y = h;\n"
1737
+ },
1738
+ {
1739
+ "id": "rune-txt",
1740
+ "expect": "refuse",
1741
+ "rule": "extension",
1742
+ "reason": "rune extension",
1743
+ "sole": true,
1744
+ "via": "gate",
1745
+ "path": "runes/calc.txt",
1746
+ "source": "export const x = 1;\n"
1747
+ },
1748
+ {
1749
+ "id": "pattern-bigint",
1750
+ "expect": "refuse",
1751
+ "rule": "computed",
1752
+ "reason": "computed key",
1753
+ "sole": false,
1754
+ "source": "export function f(){ const {1n:c}={}; return c; }\n"
1755
+ },
1756
+ {
1757
+ "id": "delete-input-key",
1758
+ "expect": "refuse",
1759
+ "rule": "computed",
1760
+ "reason": "computed key",
1761
+ "sole": false,
1762
+ "source": "export function f(input){ const o = {}; delete o[input.k]; return o; }\n"
1763
+ }
1764
+ ]
1765
+ }