@hozu/validator 0.1.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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/context.d.ts +13 -0
  4. package/dist/context.d.ts.map +1 -0
  5. package/dist/context.js +27 -0
  6. package/dist/context.js.map +1 -0
  7. package/dist/contracts/lock.d.ts +19 -0
  8. package/dist/contracts/lock.d.ts.map +1 -0
  9. package/dist/contracts/lock.js +61 -0
  10. package/dist/contracts/lock.js.map +1 -0
  11. package/dist/contracts/run.d.ts +14 -0
  12. package/dist/contracts/run.d.ts.map +1 -0
  13. package/dist/contracts/run.js +130 -0
  14. package/dist/contracts/run.js.map +1 -0
  15. package/dist/contracts/skeleton.d.ts +4 -0
  16. package/dist/contracts/skeleton.d.ts.map +1 -0
  17. package/dist/contracts/skeleton.js +108 -0
  18. package/dist/contracts/skeleton.js.map +1 -0
  19. package/dist/contracts/verify.d.ts +5 -0
  20. package/dist/contracts/verify.d.ts.map +1 -0
  21. package/dist/contracts/verify.js +58 -0
  22. package/dist/contracts/verify.js.map +1 -0
  23. package/dist/env.d.ts +40 -0
  24. package/dist/env.d.ts.map +1 -0
  25. package/dist/env.js +79 -0
  26. package/dist/env.js.map +1 -0
  27. package/dist/impact.d.ts +27 -0
  28. package/dist/impact.d.ts.map +1 -0
  29. package/dist/impact.js +154 -0
  30. package/dist/impact.js.map +1 -0
  31. package/dist/index.d.ts +22 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +71 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/resolve.d.ts +13 -0
  36. package/dist/resolve.d.ts.map +1 -0
  37. package/dist/resolve.js +58 -0
  38. package/dist/resolve.js.map +1 -0
  39. package/dist/rules/classes.d.ts +3 -0
  40. package/dist/rules/classes.d.ts.map +1 -0
  41. package/dist/rules/classes.js +60 -0
  42. package/dist/rules/classes.js.map +1 -0
  43. package/dist/rules/data.d.ts +4 -0
  44. package/dist/rules/data.d.ts.map +1 -0
  45. package/dist/rules/data.js +34 -0
  46. package/dist/rules/data.js.map +1 -0
  47. package/dist/rules/dom.d.ts +3 -0
  48. package/dist/rules/dom.d.ts.map +1 -0
  49. package/dist/rules/dom.js +104 -0
  50. package/dist/rules/dom.js.map +1 -0
  51. package/dist/rules/errors.d.ts +3 -0
  52. package/dist/rules/errors.d.ts.map +1 -0
  53. package/dist/rules/errors.js +97 -0
  54. package/dist/rules/errors.js.map +1 -0
  55. package/dist/rules/events.d.ts +5 -0
  56. package/dist/rules/events.d.ts.map +1 -0
  57. package/dist/rules/events.js +87 -0
  58. package/dist/rules/events.js.map +1 -0
  59. package/dist/rules/forms.d.ts +3 -0
  60. package/dist/rules/forms.d.ts.map +1 -0
  61. package/dist/rules/forms.js +19 -0
  62. package/dist/rules/forms.js.map +1 -0
  63. package/dist/rules/html.d.ts +3 -0
  64. package/dist/rules/html.d.ts.map +1 -0
  65. package/dist/rules/html.js +55 -0
  66. package/dist/rules/html.js.map +1 -0
  67. package/dist/rules/http.d.ts +3 -0
  68. package/dist/rules/http.d.ts.map +1 -0
  69. package/dist/rules/http.js +71 -0
  70. package/dist/rules/http.js.map +1 -0
  71. package/dist/rules/i18n.d.ts +3 -0
  72. package/dist/rules/i18n.d.ts.map +1 -0
  73. package/dist/rules/i18n.js +201 -0
  74. package/dist/rules/i18n.js.map +1 -0
  75. package/dist/rules/images.d.ts +3 -0
  76. package/dist/rules/images.d.ts.map +1 -0
  77. package/dist/rules/images.js +32 -0
  78. package/dist/rules/images.js.map +1 -0
  79. package/dist/rules/links.d.ts +3 -0
  80. package/dist/rules/links.d.ts.map +1 -0
  81. package/dist/rules/links.js +60 -0
  82. package/dist/rules/links.js.map +1 -0
  83. package/dist/rules/literals.d.ts +3 -0
  84. package/dist/rules/literals.d.ts.map +1 -0
  85. package/dist/rules/literals.js +147 -0
  86. package/dist/rules/literals.js.map +1 -0
  87. package/dist/rules/paths.d.ts +3 -0
  88. package/dist/rules/paths.d.ts.map +1 -0
  89. package/dist/rules/paths.js +177 -0
  90. package/dist/rules/paths.js.map +1 -0
  91. package/dist/rules/pwa.d.ts +3 -0
  92. package/dist/rules/pwa.d.ts.map +1 -0
  93. package/dist/rules/pwa.js +28 -0
  94. package/dist/rules/pwa.js.map +1 -0
  95. package/dist/rules/refs.d.ts +5 -0
  96. package/dist/rules/refs.d.ts.map +1 -0
  97. package/dist/rules/refs.js +128 -0
  98. package/dist/rules/refs.js.map +1 -0
  99. package/dist/rules/rendering.d.ts +3 -0
  100. package/dist/rules/rendering.d.ts.map +1 -0
  101. package/dist/rules/rendering.js +37 -0
  102. package/dist/rules/rendering.js.map +1 -0
  103. package/dist/rules/routes.d.ts +4 -0
  104. package/dist/rules/routes.d.ts.map +1 -0
  105. package/dist/rules/routes.js +108 -0
  106. package/dist/rules/routes.js.map +1 -0
  107. package/dist/rules/states.d.ts +6 -0
  108. package/dist/rules/states.d.ts.map +1 -0
  109. package/dist/rules/states.js +167 -0
  110. package/dist/rules/states.js.map +1 -0
  111. package/dist/rules/text.d.ts +3 -0
  112. package/dist/rules/text.d.ts.map +1 -0
  113. package/dist/rules/text.js +148 -0
  114. package/dist/rules/text.js.map +1 -0
  115. package/dist/rules/widgets.d.ts +3 -0
  116. package/dist/rules/widgets.d.ts.map +1 -0
  117. package/dist/rules/widgets.js +33 -0
  118. package/dist/rules/widgets.js.map +1 -0
  119. package/dist/schema.d.ts +19 -0
  120. package/dist/schema.d.ts.map +1 -0
  121. package/dist/schema.js +142 -0
  122. package/dist/schema.js.map +1 -0
  123. package/dist/sites.d.ts +15 -0
  124. package/dist/sites.d.ts.map +1 -0
  125. package/dist/sites.js +151 -0
  126. package/dist/sites.js.map +1 -0
  127. package/dist/suggest.d.ts +4 -0
  128. package/dist/suggest.d.ts.map +1 -0
  129. package/dist/suggest.js +30 -0
  130. package/dist/suggest.js.map +1 -0
  131. package/dist/walk.d.ts +37 -0
  132. package/dist/walk.d.ts.map +1 -0
  133. package/dist/walk.js +138 -0
  134. package/dist/walk.js.map +1 -0
  135. package/package.json +46 -0
package/dist/sites.js ADDED
@@ -0,0 +1,151 @@
1
+ import { at } from '@hozu/core/ir';
2
+ import { featurePointer, transitionsOf, walkView } from './walk.js';
3
+ export const hasRefs = (value) => 'fn' in value || 'object' in value || 'test' in value || 'link' in value;
4
+ export const guardHasRefs = (guard) => 'left' in guard ? hasRefs(guard.left) || hasRefs(guard.right) : true;
5
+ export function valueRefs(value, pointer, out) {
6
+ if ('fn' in value) {
7
+ out(value.fn, at(pointer, 'fn'));
8
+ valueRefs(value.arg, at(pointer, 'arg'), out);
9
+ }
10
+ else if ('object' in value) {
11
+ for (const [k, v] of Object.entries(value.object))
12
+ valueRefs(v, at(pointer, 'object', k), out);
13
+ }
14
+ else if ('test' in value)
15
+ guardRefs(value.test, at(pointer, 'test'), out);
16
+ else if ('link' in value) {
17
+ valueRefs(value.params, at(pointer, 'params'), out);
18
+ valueRefs(value.search, at(pointer, 'search'), out);
19
+ }
20
+ }
21
+ export function guardRefs(guard, pointer, out) {
22
+ switch (guard.op) {
23
+ case 'and':
24
+ case 'or':
25
+ guard.args.forEach((g, i) => guardRefs(g, at(pointer, 'args', i), out));
26
+ return;
27
+ case 'not':
28
+ guardRefs(guard.arg, at(pointer, 'arg'), out);
29
+ return;
30
+ case 'fn':
31
+ out(guard.fn, at(pointer, 'fn'));
32
+ valueRefs(guard.arg, at(pointer, 'arg'), out);
33
+ return;
34
+ default:
35
+ valueRefs(guard.left, at(pointer, 'left'), out);
36
+ valueRefs(guard.right, at(pointer, 'right'), out);
37
+ }
38
+ }
39
+ export function refSites(ir) {
40
+ const sites = [];
41
+ for (const f of Object.values(ir.features)) {
42
+ const add = (ref, pointer, kind, key = false) => sites.push({ feature: f, pointer, ref, kind, key });
43
+ const fnRef = (ref, pointer) => add(ref, pointer, 'fn');
44
+ for (const [sym, q] of Object.entries(f.queries))
45
+ q.tags.forEach((t, i) => {
46
+ const p = featurePointer(f.id, 'queries', sym, 'tags', i);
47
+ add(t.tag, at(p, 'tag'), 'tag');
48
+ if (t.param && hasRefs(t.param))
49
+ valueRefs(t.param, at(p, 'param'), fnRef);
50
+ });
51
+ for (const [sym, m] of Object.entries(f.mutations))
52
+ m.invalidates.forEach((t, i) => {
53
+ const p = featurePointer(f.id, 'mutations', sym, 'invalidates', i);
54
+ add(t.tag, at(p, 'tag'), 'tag');
55
+ if (t.param && hasRefs(t.param))
56
+ valueRefs(t.param, at(p, 'param'), fnRef);
57
+ });
58
+ for (const [state, s] of Object.entries(f.machine?.states ?? {})) {
59
+ const base = featurePointer(f.id, 'machine', 'states', state);
60
+ for (const event of Object.keys(s.on))
61
+ add(event, at(base, 'on', event), 'event', true);
62
+ s.ignore.forEach((event, i) => add(event, at(base, 'ignore', i), 'event', false));
63
+ if (s.invoke) {
64
+ add(s.invoke.effect, at(base, 'invoke', 'effect'), 'effect');
65
+ if (hasRefs(s.invoke.input))
66
+ valueRefs(s.invoke.input, at(base, 'invoke', 'input'), fnRef);
67
+ }
68
+ }
69
+ for (const site of transitionsOf(f)) {
70
+ if (site.transition.guard && guardHasRefs(site.transition.guard))
71
+ guardRefs(site.transition.guard, site.at('guard'), fnRef);
72
+ site.transition.assign.forEach((a, i) => hasRefs(a.value) && valueRefs(a.value, site.at('assign', i, 'value'), fnRef));
73
+ const nav = site.transition.navigate;
74
+ if (nav && hasRefs(nav))
75
+ valueRefs(nav, site.at('navigate'), fnRef);
76
+ }
77
+ for (const [vid, view] of Object.entries(f.views))
78
+ walkView(ir, f, vid, view, ({ node, pointer }) => {
79
+ switch (node.kind) {
80
+ case 'widget':
81
+ case 'el': {
82
+ if (node.kind === 'widget') {
83
+ add(node.widget, at(pointer, 'widget'), 'widget');
84
+ if (hasRefs(node.props))
85
+ valueRefs(node.props, at(pointer, 'props'), fnRef);
86
+ }
87
+ for (const [dom, send] of Object.entries(node.on)) {
88
+ add(send.event, at(pointer, 'on', dom, 'event'), 'event');
89
+ if (hasRefs(send.payload))
90
+ valueRefs(send.payload, at(pointer, 'on', dom, 'payload'), fnRef);
91
+ }
92
+ const maps = [
93
+ ['toggle', node.toggle],
94
+ ['vars', node.vars],
95
+ ];
96
+ if (node.kind === 'el')
97
+ maps.push(['attrs', node.attrs]);
98
+ for (const [key, map] of maps)
99
+ for (const [name, v] of Object.entries(map))
100
+ if (hasRefs(v))
101
+ valueRefs(v, at(pointer, key, name), fnRef);
102
+ return;
103
+ }
104
+ case 'text':
105
+ case 'html':
106
+ if (hasRefs(node.value))
107
+ valueRefs(node.value, at(pointer, 'value'), fnRef);
108
+ return;
109
+ case 'if':
110
+ guardRefs(node.test, at(pointer, 'test'), fnRef);
111
+ return;
112
+ case 'global':
113
+ for (const [dom, send] of Object.entries(node.on)) {
114
+ add(send.event, at(pointer, 'on', dom, 'event'), 'event');
115
+ if (hasRefs(send.payload))
116
+ valueRefs(send.payload, at(pointer, 'on', dom, 'payload'), fnRef);
117
+ }
118
+ return;
119
+ case 'each':
120
+ if (hasRefs(node.source))
121
+ valueRefs(node.source, at(pointer, 'source'), fnRef);
122
+ return;
123
+ case 'query':
124
+ add(node.query, at(pointer, 'query'), 'query');
125
+ if (hasRefs(node.input))
126
+ valueRefs(node.input, at(pointer, 'input'), fnRef);
127
+ return;
128
+ case 'embed':
129
+ add(node.view, at(pointer, 'view'), 'view');
130
+ return;
131
+ default:
132
+ return;
133
+ }
134
+ });
135
+ for (const [cid, c] of Object.entries(f.contracts)) {
136
+ c.when.forEach((step, i) => {
137
+ const p = featurePointer(f.id, 'contracts', cid, 'when', i);
138
+ if ('send' in step)
139
+ add(step.send, at(p, 'send'), 'event');
140
+ else if ('done' in step)
141
+ add(step.done, at(p, 'done'), 'effect');
142
+ else if ('failed' in step)
143
+ add(step.failed, at(p, 'failed'), 'effect');
144
+ });
145
+ c.expect.effects?.forEach((e, i) => 'effect' in e &&
146
+ add(e.effect, featurePointer(f.id, 'contracts', cid, 'expect', 'effects', i, 'effect'), 'effect'));
147
+ }
148
+ }
149
+ return sites;
150
+ }
151
+ //# sourceMappingURL=sites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../src/sites.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function distance(a: string, b: string): number;
2
+ export declare function closest(input: string, candidates: Iterable<string>): string | null;
3
+ export declare const didYouMean: (suggestion: string | null) => string;
4
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../src/suggest.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAarD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAYlF;AAED,eAAO,MAAM,UAAU,eAAgB,MAAM,GAAG,IAAI,KAAG,MACH,CAAA"}
@@ -0,0 +1,30 @@
1
+ export function distance(a, b) {
2
+ if (a === b)
3
+ return 0;
4
+ const prev = Array.from({ length: b.length + 1 }, (_, i) => i);
5
+ for (let i = 1; i <= a.length; i++) {
6
+ let diag = prev[0];
7
+ prev[0] = i;
8
+ for (let j = 1; j <= b.length; j++) {
9
+ const up = prev[j];
10
+ prev[j] = Math.min(up + 1, prev[j - 1] + 1, diag + (a[i - 1] === b[j - 1] ? 0 : 1));
11
+ diag = up;
12
+ }
13
+ }
14
+ return prev[b.length];
15
+ }
16
+ export function closest(input, candidates) {
17
+ const lower = input.toLowerCase();
18
+ let best = null;
19
+ let bestScore = Number.POSITIVE_INFINITY;
20
+ for (const candidate of candidates) {
21
+ const score = candidate.toLowerCase() === lower ? 0 : distance(input, candidate);
22
+ if (score < bestScore) {
23
+ best = candidate;
24
+ bestScore = score;
25
+ }
26
+ }
27
+ return best !== null && bestScore <= Math.max(2, Math.floor(input.length / 3)) ? best : null;
28
+ }
29
+ export const didYouMean = (suggestion) => suggestion ? ` Did you mean "${suggestion}"?` : '';
30
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../src/suggest.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS;IAC3C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;YACnB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACpF,IAAI,GAAG,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAE,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,UAA4B;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IACjC,IAAI,IAAI,GAAkB,IAAI,CAAA;IAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACxC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAChF,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,IAAI,GAAG,SAAS,CAAA;YAChB,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9F,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAyB,EAAU,EAAE,CAC9D,UAAU,CAAC,CAAC,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA"}
package/dist/walk.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ import { type At, type FeatureIR, type ProjectIR, type TransitionIR, type ViewIR, type ViewNode } from '@hozu/core/ir';
2
+ import { type Env } from './env.ts';
3
+ export type Trigger = {
4
+ kind: 'on';
5
+ event: string;
6
+ } | {
7
+ kind: 'done';
8
+ effect: string;
9
+ } | {
10
+ kind: 'failed';
11
+ effect: string;
12
+ error: string;
13
+ } | {
14
+ kind: 'after';
15
+ ms: number;
16
+ };
17
+ export declare class TransitionSite {
18
+ readonly feature: string;
19
+ readonly state: string;
20
+ readonly trigger: Trigger;
21
+ readonly index: number;
22
+ readonly transition: TransitionIR;
23
+ readonly envKey: string;
24
+ constructor(feature: string, state: string, trigger: Trigger, index: number, transition: TransitionIR);
25
+ get pointer(): string;
26
+ at(...tokens: (string | number)[]): At;
27
+ }
28
+ export declare const featurePointer: (id: string, ...tokens: (string | number)[]) => At;
29
+ export declare function transitionsOf(feature: FeatureIR): TransitionSite[];
30
+ export interface NodeSite {
31
+ node: ViewNode;
32
+ pointer: At;
33
+ visible: string[] | null;
34
+ env: Env;
35
+ }
36
+ export declare function walkView(ir: ProjectIR, feature: FeatureIR, viewId: string, view: ViewIR, visit: (site: NodeSite) => void): void;
37
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAAE,EAEP,KAAK,SAAS,EAEd,KAAK,SAAS,EACd,KAAK,YAAY,EAEjB,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,eAAe,CAAA;AACtB,OAAO,EAAc,KAAK,GAAG,EAA6C,MAAM,UAAU,CAAA;AAI1F,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjC,qBAAa,cAAc;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAYpG;IAED,IAAI,OAAO,IAAI,MAAM,CAapB;IAED,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,CAErC;CACF;AAED,eAAO,MAAM,cAAc,OACpB,MAAM,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,EAET,CAAA;AAIvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,GAAG,cAAc,EAAE,CA2BlE;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,EAAE,CAAA;IACX,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACxB,GAAG,EAAE,GAAG,CAAA;CACT;AAED,wBAAgB,QAAQ,CACtB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,QAmEhC"}
package/dist/walk.js ADDED
@@ -0,0 +1,138 @@
1
+ import { at, join, UNEXPECTED_ERROR_SCHEMA, } from '@hozu/core/ir';
2
+ import { contextEnv, effectSchemas, valueSchema } from './env.js';
3
+ import { resolveRef } from './resolve.js';
4
+ import { itemsOf } from './schema.js';
5
+ export class TransitionSite {
6
+ feature;
7
+ state;
8
+ trigger;
9
+ index;
10
+ transition;
11
+ envKey;
12
+ constructor(feature, state, trigger, index, transition) {
13
+ this.feature = feature;
14
+ this.state = state;
15
+ this.trigger = trigger;
16
+ this.index = index;
17
+ this.transition = transition;
18
+ this.envKey =
19
+ trigger.kind === 'on'
20
+ ? `${feature}|on|${trigger.event}`
21
+ : trigger.kind === 'after'
22
+ ? `${feature}|after`
23
+ : `${feature}|${trigger.kind}|${trigger.effect}|${trigger.kind === 'failed' ? trigger.error : ''}`;
24
+ }
25
+ get pointer() {
26
+ const base = join('', 'features', this.feature, 'machine', 'states', this.state);
27
+ const t = this.trigger;
28
+ switch (t.kind) {
29
+ case 'on':
30
+ return join(base, 'on', t.event, this.index);
31
+ case 'done':
32
+ return join(base, 'invoke', 'done', this.index);
33
+ case 'failed':
34
+ return join(base, 'invoke', 'failed', t.error, this.index);
35
+ default:
36
+ return join(base, 'after', this.index, 'transition');
37
+ }
38
+ }
39
+ at(...tokens) {
40
+ return () => join(this.pointer, ...tokens);
41
+ }
42
+ }
43
+ export const featurePointer = (id, ...tokens) => () => join('', 'features', id, ...tokens);
44
+ const cache = new WeakMap();
45
+ export function transitionsOf(feature) {
46
+ const hit = cache.get(feature);
47
+ if (hit)
48
+ return hit;
49
+ const sites = [];
50
+ const id = feature.id;
51
+ for (const [state, s] of Object.entries(feature.machine?.states ?? {})) {
52
+ for (const [event, list] of Object.entries(s.on)) {
53
+ const trigger = { kind: 'on', event };
54
+ for (let i = 0; i < list.length; i++)
55
+ sites.push(new TransitionSite(id, state, trigger, i, list[i]));
56
+ }
57
+ if (s.invoke) {
58
+ const effect = s.invoke.effect;
59
+ const done = { kind: 'done', effect };
60
+ for (let i = 0; i < s.invoke.done.length; i++)
61
+ sites.push(new TransitionSite(id, state, done, i, s.invoke.done[i]));
62
+ for (const [error, list] of Object.entries(s.invoke.failed)) {
63
+ const trigger = { kind: 'failed', effect, error };
64
+ for (let i = 0; i < list.length; i++)
65
+ sites.push(new TransitionSite(id, state, trigger, i, list[i]));
66
+ }
67
+ }
68
+ for (let i = 0; i < s.after.length; i++) {
69
+ const a = s.after[i];
70
+ sites.push(new TransitionSite(id, state, { kind: 'after', ms: a.ms }, i, a.transition));
71
+ }
72
+ }
73
+ cache.set(feature, sites);
74
+ return sites;
75
+ }
76
+ export function walkView(ir, feature, viewId, view, visit) {
77
+ const bound = view.machine === feature.id && feature.machine !== null;
78
+ const root = bound ? contextEnv(feature) : { feature, sources: {}, bindings: [] };
79
+ const base = {
80
+ ...root,
81
+ sources: {
82
+ ...root.sources,
83
+ locale: { type: 'string' },
84
+ alternate: null,
85
+ env: ir.env?.public ?? { type: 'object', properties: {}, additionalProperties: false },
86
+ },
87
+ };
88
+ const env = view.route && view.route !== '?'
89
+ ? {
90
+ ...base,
91
+ sources: {
92
+ ...base.sources,
93
+ params: ir.routes[view.route]?.params ?? null,
94
+ search: ir.routes[view.route]?.search ?? null,
95
+ },
96
+ }
97
+ : base;
98
+ const all = bound ? Object.keys(feature.machine.states) : null;
99
+ const walk = (node, pointer, visible, env) => {
100
+ visit({ node, pointer, visible, env });
101
+ const bind = (schema) => ({
102
+ ...env,
103
+ bindings: [...env.bindings, schema],
104
+ });
105
+ switch (node.kind) {
106
+ case 'el':
107
+ case 'widget':
108
+ node.children.forEach((c, i) => walk(c, at(pointer, 'children', i), visible, env));
109
+ return;
110
+ case 'if':
111
+ node.ifTrue.forEach((c, i) => walk(c, at(pointer, 'ifTrue', i), visible, env));
112
+ node.ifFalse.forEach((c, i) => walk(c, at(pointer, 'ifFalse', i), visible, env));
113
+ return;
114
+ case 'when': {
115
+ const narrowed = visible ? visible.filter((s) => node.states.includes(s)) : null;
116
+ node.children.forEach((c, i) => walk(c, at(pointer, 'children', i), narrowed, env));
117
+ return;
118
+ }
119
+ case 'each':
120
+ walk(node.item, at(pointer, 'item'), visible, bind(itemsOf(valueSchema(ir, env, node.source))));
121
+ return;
122
+ case 'query': {
123
+ const q = resolveRef(ir, node.query, 'query');
124
+ const schemas = q ? effectSchemas(ir, node.query) : null;
125
+ walk(node.ready, at(pointer, 'ready'), visible, bind(schemas?.output ?? null));
126
+ if (node.pending)
127
+ walk(node.pending, at(pointer, 'pending'), visible, env);
128
+ for (const [name, child] of Object.entries(node.failed))
129
+ walk(child, at(pointer, 'failed', name), visible, bind(schemas ? schemas.error(name) : name === 'Unexpected' ? UNEXPECTED_ERROR_SCHEMA : null));
130
+ return;
131
+ }
132
+ default:
133
+ return;
134
+ }
135
+ };
136
+ walk(view.root, featurePointer(feature.id, 'views', viewId, 'root'), all, env);
137
+ }
138
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@hozu/validator",
3
+ "version": "0.1.0",
4
+ "description": "Hozu validator: structured diagnostics with fixes, contract runner and behaviour lock",
5
+ "keywords": [
6
+ "hozu",
7
+ "framework",
8
+ "ai",
9
+ "agents",
10
+ "ssr",
11
+ "islands",
12
+ "typescript"
13
+ ],
14
+ "homepage": "https://github.com/olevatorr/Hozu/tree/main/packages/validator#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/olevatorr/Hozu/issues"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/olevatorr/Hozu.git",
21
+ "directory": "packages/validator"
22
+ },
23
+ "license": "MIT",
24
+ "author": "olevatorr",
25
+ "type": "module",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "default": "./dist/index.js"
30
+ }
31
+ },
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "engines": {
36
+ "node": ">=22.18"
37
+ },
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "dependencies": {
42
+ "@hozu/core": "0.1.0",
43
+ "@hozu/compiler": "0.1.0"
44
+ },
45
+ "sideEffects": false
46
+ }