@hozu/validator 0.7.0 → 0.8.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.
Files changed (89) hide show
  1. package/dist/contracts/lock.d.ts +14 -17
  2. package/dist/contracts/lock.d.ts.map +1 -1
  3. package/dist/contracts/lock.js +52 -50
  4. package/dist/contracts/lock.js.map +1 -1
  5. package/dist/contracts/mechanical.d.ts +8 -2
  6. package/dist/contracts/mechanical.d.ts.map +1 -1
  7. package/dist/contracts/mechanical.js +98 -32
  8. package/dist/contracts/mechanical.js.map +1 -1
  9. package/dist/contracts/record.d.ts +45 -0
  10. package/dist/contracts/record.d.ts.map +1 -0
  11. package/dist/contracts/record.js +79 -0
  12. package/dist/contracts/record.js.map +1 -0
  13. package/dist/contracts/run.d.ts +2 -1
  14. package/dist/contracts/run.d.ts.map +1 -1
  15. package/dist/contracts/run.js +32 -4
  16. package/dist/contracts/run.js.map +1 -1
  17. package/dist/contracts/verify.d.ts +2 -2
  18. package/dist/contracts/verify.d.ts.map +1 -1
  19. package/dist/contracts/verify.js +185 -34
  20. package/dist/contracts/verify.js.map +1 -1
  21. package/dist/env.d.ts.map +1 -1
  22. package/dist/env.js +2 -0
  23. package/dist/env.js.map +1 -1
  24. package/dist/index.d.ts +8 -5
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +13 -5
  27. package/dist/index.js.map +1 -1
  28. package/dist/resolve.d.ts +2 -2
  29. package/dist/resolve.d.ts.map +1 -1
  30. package/dist/resolve.js +1 -0
  31. package/dist/resolve.js.map +1 -1
  32. package/dist/rules/data.d.ts +2 -0
  33. package/dist/rules/data.d.ts.map +1 -1
  34. package/dist/rules/data.js +39 -4
  35. package/dist/rules/data.js.map +1 -1
  36. package/dist/rules/endpoints.d.ts +1 -0
  37. package/dist/rules/endpoints.d.ts.map +1 -1
  38. package/dist/rules/endpoints.js +140 -4
  39. package/dist/rules/endpoints.js.map +1 -1
  40. package/dist/rules/form-model.d.ts +31 -0
  41. package/dist/rules/form-model.d.ts.map +1 -0
  42. package/dist/rules/form-model.js +114 -0
  43. package/dist/rules/form-model.js.map +1 -0
  44. package/dist/rules/forms.d.ts +5 -0
  45. package/dist/rules/forms.d.ts.map +1 -1
  46. package/dist/rules/forms.js +141 -4
  47. package/dist/rules/forms.js.map +1 -1
  48. package/dist/rules/http.d.ts.map +1 -1
  49. package/dist/rules/http.js +14 -4
  50. package/dist/rules/http.js.map +1 -1
  51. package/dist/rules/i18n.d.ts.map +1 -1
  52. package/dist/rules/i18n.js +15 -0
  53. package/dist/rules/i18n.js.map +1 -1
  54. package/dist/rules/links.d.ts.map +1 -1
  55. package/dist/rules/links.js +61 -6
  56. package/dist/rules/links.js.map +1 -1
  57. package/dist/rules/literals.d.ts.map +1 -1
  58. package/dist/rules/literals.js +2 -0
  59. package/dist/rules/literals.js.map +1 -1
  60. package/dist/rules/pages.d.ts +4 -0
  61. package/dist/rules/pages.d.ts.map +1 -0
  62. package/dist/rules/pages.js +97 -0
  63. package/dist/rules/pages.js.map +1 -0
  64. package/dist/rules/paths.d.ts.map +1 -1
  65. package/dist/rules/paths.js +25 -0
  66. package/dist/rules/paths.js.map +1 -1
  67. package/dist/rules/routes.d.ts +2 -0
  68. package/dist/rules/routes.d.ts.map +1 -1
  69. package/dist/rules/routes.js +5 -3
  70. package/dist/rules/routes.js.map +1 -1
  71. package/dist/rules/text.d.ts.map +1 -1
  72. package/dist/rules/text.js +100 -42
  73. package/dist/rules/text.js.map +1 -1
  74. package/dist/schema.d.ts.map +1 -1
  75. package/dist/schema.js +3 -1
  76. package/dist/schema.js.map +1 -1
  77. package/dist/sites.d.ts +4 -2
  78. package/dist/sites.d.ts.map +1 -1
  79. package/dist/sites.js +7 -2
  80. package/dist/sites.js.map +1 -1
  81. package/package.json +3 -3
  82. package/dist/truthiness-rule.d.ts +0 -3
  83. package/dist/truthiness-rule.d.ts.map +0 -1
  84. package/dist/truthiness-rule.js +0 -21
  85. package/dist/truthiness-rule.js.map +0 -1
  86. package/dist/truthiness.d.ts +0 -8
  87. package/dist/truthiness.d.ts.map +0 -1
  88. package/dist/truthiness.js +0 -268
  89. package/dist/truthiness.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hozu/validator",
3
- "version": "0.7.0",
3
+ "version": "0.8.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.7.0",
43
- "@hozu/compiler": "0.7.0"
42
+ "@hozu/core": "0.8.0",
43
+ "@hozu/compiler": "0.8.0"
44
44
  },
45
45
  "sideEffects": false
46
46
  }
@@ -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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"}