@hozu/validator 0.12.0 → 0.13.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AA4BvD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC9D,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC1E,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAmDhD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,mGAAmG;IACnG,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAClD,wHAAwH;IACxH,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,CAAA;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CACxB;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAiBjF;AAED,eAAO,MAAM,QAAQ,OAAQ,SAAS,YAAW,eAAe,KAAQ,UAAU,EACjD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AA4BvD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC9D,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC1E,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAqDhD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,mGAAmG;IACnG,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAClD,wHAAwH;IACxH,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,CAAA;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CACxB;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAiBjF;AAED,eAAO,MAAM,QAAQ,OAAQ,SAAS,YAAW,eAAe,KAAQ,UAAU,EACjD,CAAA"}
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ import { offlinePage } from './rules/pwa.js';
20
20
  import { featureLinks, references, routes } from './rules/refs.js';
21
21
  import { rendering } from './rules/rendering.js';
22
22
  import { routeParams, searchSchemas } from './rules/routes.js';
23
- import { effectRuntimes } from './rules/runtime.js';
23
+ import { connectEnv, effectRuntimes, envConfig } from './rules/runtime.js';
24
24
  import { seed } from './rules/seed.js';
25
25
  import { deadEnds, reachability, shadowing, stateNames } from './rules/states.js';
26
26
  import { classConflicts, componentStyles, leadingImportant } from './rules/styles.js';
@@ -34,6 +34,8 @@ export { closest, distance } from './suggest.js';
34
34
  const rules = [
35
35
  endpoints,
36
36
  effectRuntimes,
37
+ connectEnv,
38
+ envConfig,
37
39
  seed,
38
40
  featureLinks,
39
41
  references,
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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"}
@@ -1,4 +1,8 @@
1
1
  import type { Ctx } from '../context.ts';
2
2
  /** HZ082: data or a refresh that only the server can provide, asked of an effect that does not run there (ADR 0049). */
3
3
  export declare function effectRuntimes(ctx: Ctx): void;
4
+ /** HZ081: a `connect` entry that names a public env variable the project does not declare (ADR 0051). */
5
+ export declare function connectEnv(ctx: Ctx): void;
6
+ /** HZ084: a public variable named like a secret; HZ085: an `internal` mapping to undeclared variables (ADR 0052). */
7
+ export declare function envConfig(ctx: Ctx): void;
4
8
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/rules/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AA0BxC,wHAAwH;AACxH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,QAwDtC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/rules/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AA0BxC,wHAAwH;AACxH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,QAwDtC;AAED,yGAAyG;AACzG,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,QAqBlC;AAID,qHAAqH;AACrH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,QAwCjC"}
@@ -61,4 +61,49 @@ export function effectRuntimes(ctx) {
61
61
  });
62
62
  }
63
63
  }
64
+ /** HZ081: a `connect` entry that names a public env variable the project does not declare (ADR 0051). */
65
+ export function connectEnv(ctx) {
66
+ const { ir } = ctx;
67
+ const declared = Object.keys((ir.env?.public?.properties ?? {}));
68
+ for (const f of Object.values(ir.features))
69
+ f.connect.forEach((c, i) => {
70
+ if ('env' in c && !declared.includes(c.env))
71
+ ctx.report('HZ081', f.id, join('', 'features', f.id, 'connect', String(i)), `connect of ${f.id} names the public env variable ${c.env}, which project({ env: { public } }) does not declare`, 'An { env } entry is read from the parsed public environment at startup and its origin is added to CSP connect-src.', {
72
+ summary: declared.length
73
+ ? `Use one of ${declared.join(', ')}, or declare ${c.env} in env.public`
74
+ : `Declare ${c.env} in project({ env: { public } })`,
75
+ snippet: `env: { public: z.object({ ${c.env}: z.string().url() }) }`,
76
+ patch: null,
77
+ });
78
+ });
79
+ }
80
+ const SECRET = /(SECRET|TOKEN|PASSWORD|PASSWD|PRIVATE|CREDENTIAL)|(^|_)(API_)?KEY$/;
81
+ /** HZ084: a public variable named like a secret; HZ085: an `internal` mapping to undeclared variables (ADR 0052). */
82
+ export function envConfig(ctx) {
83
+ const env = ctx.ir.env;
84
+ if (!env)
85
+ return;
86
+ const names = (schema) => Object.keys((schema?.properties ?? {}));
87
+ const pub = names(env.public);
88
+ const server = names(env.server);
89
+ for (const name of pub)
90
+ if (SECRET.test(name) && !name.startsWith('PUBLIC_') && !name.includes('PUBLISHABLE'))
91
+ ctx.report('HZ084', null, join('', 'env', 'public', 'properties', name), `The public env variable ${name} looks like a secret, and public values are sent to the browser`, 'Public env is written into pages and island payloads and baked into a static export; anyone can read it.', {
92
+ summary: `Move ${name} to env.server; resolvers read it as ctx.env.${name}. Keep it public only if the value is made to be published (a publishable key), and then name it PUBLIC_${name}`,
93
+ snippet: `server: z.object({ ${name}: z.string() })`,
94
+ patch: null,
95
+ });
96
+ for (const [key, target] of Object.entries(env.internal ?? {})) {
97
+ const problems = [
98
+ ...(pub.includes(key) ? [] : [`${key} is not a public variable`]),
99
+ ...(server.includes(target) ? [] : [`${target} is not a server variable`]),
100
+ ];
101
+ if (problems.length)
102
+ ctx.report('HZ085', null, join('', 'env', 'internal', key), `env.internal maps ${key} to ${target}, but ${problems.join(' and ')}`, 'env.internal maps a public variable (the URL the browser calls) to a server variable (the internal URL the server calls instead); without the internal value set, the public one is used.', {
103
+ summary: `Declare ${key} in env.public and ${target} in env.server`,
104
+ snippet: `public: z.object({ ${key}: z.string().url() }), server: z.object({ ${target}: z.string().url().optional() })`,
105
+ patch: null,
106
+ });
107
+ }
108
+ }
64
109
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/rules/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/rules/runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hozu/validator",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Hozu validator: structured diagnostics with fixes, contract runner and behaviour lock",
5
5
  "keywords": [
6
6
  "hozu",
@@ -39,8 +39,8 @@
39
39
  "access": "public"
40
40
  },
41
41
  "dependencies": {
42
- "@hozu/core": "0.12.0",
43
- "@hozu/compiler": "0.12.0"
42
+ "@hozu/core": "0.13.0",
43
+ "@hozu/compiler": "0.13.0"
44
44
  },
45
45
  "sideEffects": false
46
46
  }
@@ -1,3 +0,0 @@
1
- import type { Ctx } from '../context.ts';
2
- export declare function widgetEvents(ctx: Ctx): void;
3
- //# sourceMappingURL=widgets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../src/rules/widgets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAKxC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,QA+BpC"}
@@ -1,33 +0,0 @@
1
- import { at, resolveAt } from '@hozu/core/ir';
2
- import { resolveRef } from '../resolve.js';
3
- import { closest, didYouMean } from '../suggest.js';
4
- import { walkView } from '../walk.js';
5
- export function widgetEvents(ctx) {
6
- const { ir } = ctx;
7
- for (const f of Object.values(ir.features))
8
- for (const [vid, view] of Object.entries(f.views))
9
- walkView(ir, f, vid, view, ({ node, pointer }) => {
10
- if (node.kind !== 'widget')
11
- return;
12
- const r = resolveRef(ir, node.widget, 'widget');
13
- const declared = r ? Object.keys(r.feature.widgets[r.symbol].events) : null;
14
- if (!declared)
15
- return;
16
- for (const name of Object.keys(node.on)) {
17
- if (declared.includes(name))
18
- continue;
19
- const guess = closest(name, declared);
20
- ctx.report('HZ029', f.id, at(pointer, 'on', name), `Widget ${node.widget} does not emit "${name}".${didYouMean(guess)}`, declared.length ? `Declared events: ${declared.join(', ')}.` : 'The widget declares no events.', {
21
- summary: guess ? `Handle "${guess}"` : 'Declare the event on the widget or remove the handler',
22
- snippet: null,
23
- patch: guess
24
- ? [
25
- { op: 'add', path: resolveAt(at(pointer, 'on', guess)), value: node.on[name] },
26
- { op: 'remove', path: resolveAt(at(pointer, 'on', name)) },
27
- ]
28
- : null,
29
- });
30
- }
31
- });
32
- }
33
- //# sourceMappingURL=widgets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../src/rules/widgets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,MAAM,UAAU,YAAY,CAAC,GAAQ;IACnC,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;IAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/C,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAM;gBAClC,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;gBAC/C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBAC5E,IAAI,CAAC,QAAQ;oBAAE,OAAM;gBACrB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,SAAQ;oBACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;oBACrC,GAAG,CAAC,MAAM,CACR,OAAO,EACP,CAAC,CAAC,EAAE,EACJ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EACvB,UAAU,IAAI,CAAC,MAAM,mBAAmB,IAAI,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,EACpE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC,EAC/F;wBACE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,uDAAuD;wBAC9F,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE,KAAK;4BACV,CAAC,CAAC;gCACE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAU,EAAE;gCACvF,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE;6BAC3D;4BACH,CAAC,CAAC,IAAI;qBACT,CACF,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;AACR,CAAC"}
@@ -1,3 +0,0 @@
1
- import { type Diagnostic } from '@hozu/core/ir';
2
- export declare function truthinessDiagnostics(files: Record<string, string>): Diagnostic[];
3
- //# sourceMappingURL=truthiness-rule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"truthiness-rule.d.ts","sourceRoot":"","sources":["../src/truthiness-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAGtD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,EAAE,CAkBjF"}
@@ -1,21 +0,0 @@
1
- import { codes } from '@hozu/core/ir';
2
- import { scanTruthiness } from './truthiness.js';
3
- export function truthinessDiagnostics(files) {
4
- const out = [];
5
- for (const [file, text] of Object.entries(files))
6
- for (const f of scanTruthiness(text))
7
- out.push({
8
- code: 'HZ044',
9
- severity: codes.HZ044.severity,
10
- message: `${f.expression} is a recorded reference used as ${f.use}`,
11
- location: { feature: null, pointer: '', source: { file, line: f.line, column: f.column } },
12
- cause: 'References are recorded, not evaluated: as a JavaScript value a reference is always truthy, so this always takes the same branch.',
13
- fix: {
14
- summary: `In a view use ui.if(op.neq(${f.expression}, null), […], […]) or op.eq; in a machine use a guard with op.*; to compute a value use fn()`,
15
- snippet: `ui.if(op.neq(${f.expression}, null), [/* then */], [/* else */])`,
16
- patch: null,
17
- },
18
- });
19
- return out;
20
- }
21
- //# sourceMappingURL=truthiness-rule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"truthiness-rule.js","sourceRoot":"","sources":["../src/truthiness-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmB,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,UAAU,qBAAqB,CAAC,KAA6B;IACjE,MAAM,GAAG,GAAiB,EAAE,CAAA;IAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;gBAC9B,OAAO,EAAE,GAAG,CAAC,CAAC,UAAU,oCAAoC,CAAC,CAAC,GAAG,EAAE;gBACnE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1F,KAAK,EACH,mIAAmI;gBACrI,GAAG,EAAE;oBACH,OAAO,EAAE,8BAA8B,CAAC,CAAC,UAAU,8FAA8F;oBACjJ,OAAO,EAAE,gBAAgB,CAAC,CAAC,UAAU,sCAAsC;oBAC3E,KAAK,EAAE,IAAI;iBACZ;aACF,CAAC,CAAA;IACN,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1,8 +0,0 @@
1
- export interface TruthinessFinding {
2
- line: number;
3
- column: number;
4
- expression: string;
5
- use: 'a ?: condition' | 'the left side of &&' | 'the left side of ||' | 'the left side of ??' | 'the operand of !' | 'an if condition' | 'a while condition';
6
- }
7
- export declare function scanTruthiness(source: string): TruthinessFinding[];
8
- //# sourceMappingURL=truthiness.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"truthiness.d.ts","sourceRoot":"","sources":["../src/truthiness.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EACC,gBAAgB,GAChB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,CAAA;CACxB;AA+MD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAkDlE"}
@@ -1,268 +0,0 @@
1
- const PUNCT = ['?.', '??=', '??', '&&=', '||=', '&&', '||', '===', '!==', '==', '!=', '=>', '...', '<=', '>='];
2
- const REGEX_BEFORE = new Set([
3
- '(',
4
- ',',
5
- '=',
6
- ':',
7
- '[',
8
- '!',
9
- '&&',
10
- '||',
11
- '??',
12
- '?',
13
- '{',
14
- '}',
15
- ';',
16
- 'return',
17
- '=>',
18
- ]);
19
- const LIST_METHODS = new Set([
20
- 'map',
21
- 'filter',
22
- 'forEach',
23
- 'reduce',
24
- 'some',
25
- 'every',
26
- 'find',
27
- 'flatMap',
28
- 'findIndex',
29
- 'sort',
30
- ]);
31
- function tokenize(source) {
32
- const tokens = [];
33
- let i = 0;
34
- let line = 1;
35
- let lineStart = 0;
36
- const push = (text, kind, start) => tokens.push({ text, kind, line, column: start - lineStart + 1 });
37
- const advance = (to) => {
38
- for (let k = i; k < to; k++)
39
- if (source[k] === '\n') {
40
- line++;
41
- lineStart = k + 1;
42
- }
43
- i = to;
44
- };
45
- const skipString = (quote) => {
46
- let k = i + 1;
47
- while (k < source.length && source[k] !== quote)
48
- k += source[k] === '\\' ? 2 : 1;
49
- return k + 1;
50
- };
51
- const skipTemplate = () => {
52
- let k = i + 1;
53
- let depth = 0;
54
- while (k < source.length) {
55
- const c = source[k];
56
- if (c === '\\')
57
- k += 2;
58
- else if (depth === 0 && c === '`')
59
- return k + 1;
60
- else if (c === '$' && source[k + 1] === '{') {
61
- depth++;
62
- k += 2;
63
- }
64
- else if (c === '}' && depth > 0) {
65
- depth--;
66
- k++;
67
- }
68
- else
69
- k++;
70
- }
71
- return k;
72
- };
73
- while (i < source.length) {
74
- const c = source[i];
75
- if (c === '\n' || c === ' ' || c === '\t' || c === '\r')
76
- advance(i + 1);
77
- else if (c === '/' && source[i + 1] === '/')
78
- advance(source.indexOf('\n', i) === -1 ? source.length : source.indexOf('\n', i));
79
- else if (c === '/' && source[i + 1] === '*')
80
- advance(source.indexOf('*/', i + 2) + 2);
81
- else if (c === "'" || c === '"') {
82
- const start = i;
83
- advance(skipString(c));
84
- push('"', 'literal', start);
85
- }
86
- else if (c === '`') {
87
- const start = i;
88
- advance(skipTemplate());
89
- push('`', 'literal', start);
90
- }
91
- else if (c === '/' && REGEX_BEFORE.has(tokens.at(-1)?.text ?? '(')) {
92
- const start = i;
93
- let k = i + 1;
94
- let klass = false;
95
- while (k < source.length && (klass || source[k] !== '/')) {
96
- if (source[k] === '\\')
97
- k++;
98
- else if (source[k] === '[')
99
- klass = true;
100
- else if (source[k] === ']')
101
- klass = false;
102
- k++;
103
- }
104
- k++;
105
- while (/[a-z]/.test(source[k] ?? ''))
106
- k++;
107
- advance(k);
108
- push('/', 'literal', start);
109
- }
110
- else if (/[A-Za-z_$]/.test(c)) {
111
- const start = i;
112
- let k = i + 1;
113
- while (/[\w$]/.test(source[k] ?? ''))
114
- k++;
115
- advance(k);
116
- push(source.slice(start, k), 'id', start);
117
- }
118
- else if (/[0-9]/.test(c)) {
119
- const start = i;
120
- let k = i + 1;
121
- while (/[\w.]/.test(source[k] ?? ''))
122
- k++;
123
- advance(k);
124
- push(source.slice(start, k), 'literal', start);
125
- }
126
- else {
127
- const start = i;
128
- const p = PUNCT.find((x) => source.startsWith(x, i)) ?? c;
129
- advance(i + p.length);
130
- push(p, 'punct', start);
131
- }
132
- }
133
- return tokens;
134
- }
135
- const OPEN = { '(': ')', '[': ']', '{': '}' };
136
- const CLOSE = { ')': '(', ']': '[', '}': '{' };
137
- function matchForward(tokens, at) {
138
- let depth = 0;
139
- for (let k = at; k < tokens.length; k++) {
140
- const t = tokens[k].text;
141
- if (OPEN[t])
142
- depth++;
143
- else if (CLOSE[t] && --depth === 0)
144
- return k;
145
- }
146
- return tokens.length - 1;
147
- }
148
- function matchBackward(tokens, at) {
149
- let depth = 0;
150
- for (let k = at; k >= 0; k--) {
151
- const t = tokens[k].text;
152
- if (CLOSE[t])
153
- depth++;
154
- else if (OPEN[t] && --depth === 0)
155
- return k;
156
- }
157
- return 0;
158
- }
159
- function bodyEnd(tokens, start) {
160
- if (tokens[start]?.text === '{' || tokens[start]?.text === '(')
161
- return matchForward(tokens, start);
162
- let depth = 0;
163
- for (let k = start; k < tokens.length; k++) {
164
- const t = tokens[k].text;
165
- if (OPEN[t])
166
- depth++;
167
- else if (CLOSE[t]) {
168
- if (depth === 0)
169
- return k - 1;
170
- depth--;
171
- }
172
- else if (depth === 0 && (t === ',' || t === ';'))
173
- return k - 1;
174
- }
175
- return tokens.length - 1;
176
- }
177
- function arrows(tokens) {
178
- const out = [];
179
- tokens.forEach((t, k) => {
180
- if (t.text !== '=>')
181
- return;
182
- let first = k - 1;
183
- const params = [];
184
- if (tokens[k - 1]?.text === ')') {
185
- first = matchBackward(tokens, k - 1);
186
- for (let j = first + 1; j < k - 1; j++) {
187
- const x = tokens[j];
188
- const prev = tokens[j - 1].text;
189
- if (x.kind === 'id' && prev !== ':' && prev !== '.' && tokens[j + 1]?.text !== ':')
190
- params.push(x.text);
191
- if (x.kind === 'id' &&
192
- tokens[j + 1]?.text === ':' &&
193
- (prev === '{' || prev === ',') &&
194
- tokens[j + 2]?.kind === 'id')
195
- params.push(tokens[j + 2].text);
196
- }
197
- }
198
- else if (tokens[k - 1]?.kind === 'id')
199
- params.push(tokens[k - 1].text);
200
- const before = tokens[first - 1];
201
- const callee = before?.text === '(' ? tokens[first - 2] : undefined;
202
- const method = callee?.kind === 'id' && tokens[first - 3]?.text === '.' && LIST_METHODS.has(callee.text);
203
- const impl = before?.text === ':' && tokens[first - 2]?.text === 'impl';
204
- out.push({
205
- params: params.filter((p) => p !== 'when'),
206
- from: k + 1,
207
- to: bodyEnd(tokens, k + 1),
208
- real: method || impl,
209
- });
210
- });
211
- return out;
212
- }
213
- export function scanTruthiness(source) {
214
- const tokens = tokenize(source);
215
- const list = arrows(tokens);
216
- const refsAt = (k) => {
217
- const refs = new Set();
218
- const real = new Set();
219
- for (const a of list)
220
- if (a.from <= k && k <= a.to)
221
- for (const p of a.params)
222
- (a.real ? real : refs).add(p);
223
- for (const p of real)
224
- refs.delete(p);
225
- const insideReal = list.some((a) => a.real && a.from <= k && k <= a.to);
226
- return insideReal ? new Set() : refs;
227
- };
228
- const findings = [];
229
- for (let k = 0; k < tokens.length; k++) {
230
- const t = tokens[k];
231
- if (t.kind !== 'id' || tokens[k - 1]?.text === '.' || tokens[k - 1]?.text === '?.')
232
- continue;
233
- if (!refsAt(k).has(t.text))
234
- continue;
235
- let end = k;
236
- while ((tokens[end + 1]?.text === '.' || tokens[end + 1]?.text === '?.') &&
237
- tokens[end + 2]?.kind === 'id')
238
- end += 2;
239
- if (tokens[end + 1]?.text === '(')
240
- continue;
241
- const next = tokens[end + 1]?.text;
242
- const prev = tokens[k - 1]?.text;
243
- const expression = tokens
244
- .slice(k, end + 1)
245
- .map((x) => x.text)
246
- .join('');
247
- const use = next === '?'
248
- ? 'a ?: condition'
249
- : next === '&&'
250
- ? 'the left side of &&'
251
- : next === '||'
252
- ? 'the left side of ||'
253
- : next === '??'
254
- ? 'the left side of ??'
255
- : prev === '!'
256
- ? 'the operand of !'
257
- : prev === '(' && next === ')' && tokens[k - 2]?.text === 'if'
258
- ? 'an if condition'
259
- : prev === '(' && next === ')' && tokens[k - 2]?.text === 'while'
260
- ? 'a while condition'
261
- : null;
262
- if (use)
263
- findings.push({ line: t.line, column: t.column, expression, use });
264
- k = end;
265
- }
266
- return findings;
267
- }
268
- //# sourceMappingURL=truthiness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"truthiness.js","sourceRoot":"","sources":["../src/truthiness.ts"],"names":[],"mappings":"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"}