@hozu/validator 0.7.0 → 0.9.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 (114) hide show
  1. package/dist/context.d.ts +10 -0
  2. package/dist/context.d.ts.map +1 -1
  3. package/dist/context.js +2 -0
  4. package/dist/context.js.map +1 -1
  5. package/dist/contracts/lock.d.ts +14 -17
  6. package/dist/contracts/lock.d.ts.map +1 -1
  7. package/dist/contracts/lock.js +52 -50
  8. package/dist/contracts/lock.js.map +1 -1
  9. package/dist/contracts/mechanical.d.ts +8 -2
  10. package/dist/contracts/mechanical.d.ts.map +1 -1
  11. package/dist/contracts/mechanical.js +98 -32
  12. package/dist/contracts/mechanical.js.map +1 -1
  13. package/dist/contracts/record.d.ts +45 -0
  14. package/dist/contracts/record.d.ts.map +1 -0
  15. package/dist/contracts/record.js +79 -0
  16. package/dist/contracts/record.js.map +1 -0
  17. package/dist/contracts/run.d.ts +2 -1
  18. package/dist/contracts/run.d.ts.map +1 -1
  19. package/dist/contracts/run.js +32 -4
  20. package/dist/contracts/run.js.map +1 -1
  21. package/dist/contracts/verify.d.ts +2 -2
  22. package/dist/contracts/verify.d.ts.map +1 -1
  23. package/dist/contracts/verify.js +185 -34
  24. package/dist/contracts/verify.js.map +1 -1
  25. package/dist/env.d.ts.map +1 -1
  26. package/dist/env.js +2 -0
  27. package/dist/env.js.map +1 -1
  28. package/dist/index.d.ts +13 -5
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +22 -7
  31. package/dist/index.js.map +1 -1
  32. package/dist/resolve.d.ts +2 -2
  33. package/dist/resolve.d.ts.map +1 -1
  34. package/dist/resolve.js +1 -1
  35. package/dist/resolve.js.map +1 -1
  36. package/dist/rules/classes.js +1 -1
  37. package/dist/rules/classes.js.map +1 -1
  38. package/dist/rules/clients.d.ts +3 -0
  39. package/dist/rules/clients.d.ts.map +1 -0
  40. package/dist/rules/clients.js +33 -0
  41. package/dist/rules/clients.js.map +1 -0
  42. package/dist/rules/data.d.ts +2 -0
  43. package/dist/rules/data.d.ts.map +1 -1
  44. package/dist/rules/data.js +39 -4
  45. package/dist/rules/data.js.map +1 -1
  46. package/dist/rules/dom.js +2 -2
  47. package/dist/rules/dom.js.map +1 -1
  48. package/dist/rules/endpoints.d.ts +1 -0
  49. package/dist/rules/endpoints.d.ts.map +1 -1
  50. package/dist/rules/endpoints.js +140 -4
  51. package/dist/rules/endpoints.js.map +1 -1
  52. package/dist/rules/events.js +1 -1
  53. package/dist/rules/events.js.map +1 -1
  54. package/dist/rules/form-model.d.ts +31 -0
  55. package/dist/rules/form-model.d.ts.map +1 -0
  56. package/dist/rules/form-model.js +114 -0
  57. package/dist/rules/form-model.js.map +1 -0
  58. package/dist/rules/forms.d.ts +5 -0
  59. package/dist/rules/forms.d.ts.map +1 -1
  60. package/dist/rules/forms.js +141 -4
  61. package/dist/rules/forms.js.map +1 -1
  62. package/dist/rules/html.js +1 -1
  63. package/dist/rules/html.js.map +1 -1
  64. package/dist/rules/http.d.ts.map +1 -1
  65. package/dist/rules/http.js +14 -4
  66. package/dist/rules/http.js.map +1 -1
  67. package/dist/rules/i18n.d.ts.map +1 -1
  68. package/dist/rules/i18n.js +16 -1
  69. package/dist/rules/i18n.js.map +1 -1
  70. package/dist/rules/links.d.ts.map +1 -1
  71. package/dist/rules/links.js +61 -6
  72. package/dist/rules/links.js.map +1 -1
  73. package/dist/rules/literals.d.ts.map +1 -1
  74. package/dist/rules/literals.js +3 -1
  75. package/dist/rules/literals.js.map +1 -1
  76. package/dist/rules/pages.d.ts +4 -0
  77. package/dist/rules/pages.d.ts.map +1 -0
  78. package/dist/rules/pages.js +97 -0
  79. package/dist/rules/pages.js.map +1 -0
  80. package/dist/rules/paths.d.ts.map +1 -1
  81. package/dist/rules/paths.js +26 -1
  82. package/dist/rules/paths.js.map +1 -1
  83. package/dist/rules/refs.d.ts.map +1 -1
  84. package/dist/rules/refs.js +0 -4
  85. package/dist/rules/refs.js.map +1 -1
  86. package/dist/rules/routes.d.ts +2 -0
  87. package/dist/rules/routes.d.ts.map +1 -1
  88. package/dist/rules/routes.js +5 -3
  89. package/dist/rules/routes.js.map +1 -1
  90. package/dist/rules/styles.d.ts +10 -0
  91. package/dist/rules/styles.d.ts.map +1 -0
  92. package/dist/rules/styles.js +334 -0
  93. package/dist/rules/styles.js.map +1 -0
  94. package/dist/rules/text.d.ts.map +1 -1
  95. package/dist/rules/text.js +100 -42
  96. package/dist/rules/text.js.map +1 -1
  97. package/dist/schema.d.ts.map +1 -1
  98. package/dist/schema.js +3 -1
  99. package/dist/schema.js.map +1 -1
  100. package/dist/sites.d.ts +4 -2
  101. package/dist/sites.d.ts.map +1 -1
  102. package/dist/sites.js +10 -8
  103. package/dist/sites.js.map +1 -1
  104. package/dist/walk.js +1 -1
  105. package/dist/walk.js.map +1 -1
  106. package/package.json +3 -3
  107. package/dist/truthiness-rule.d.ts +0 -3
  108. package/dist/truthiness-rule.d.ts.map +0 -1
  109. package/dist/truthiness-rule.js +0 -21
  110. package/dist/truthiness-rule.js.map +0 -1
  111. package/dist/truthiness.d.ts +0 -8
  112. package/dist/truthiness.d.ts.map +0 -1
  113. package/dist/truthiness.js +0 -268
  114. package/dist/truthiness.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ import { at, formRefOf, } from '@hozu/core/ir';
2
+ import { featurePointer } from '../walk.js';
3
+ const literal = (v) => v && 'literal' in v && typeof v.literal === 'string' ? v.literal : null;
4
+ const controlTags = new Set(['input', 'select', 'textarea', 'button', 'fieldset', 'output', 'object']);
5
+ export const isSubmit = (el) => (el.tag === 'button' && (literal(el.attrs.type) ?? 'submit') === 'submit') ||
6
+ (el.tag === 'input' && ['submit', 'image'].includes(literal(el.attrs.type) ?? ''));
7
+ const control = (node, pointer, chain) => ({
8
+ node,
9
+ pointer,
10
+ chain,
11
+ name: node.attrs.name === undefined ? null : literal(node.attrs.name),
12
+ submit: isSubmit(node),
13
+ radio: node.tag === 'input' && literal(node.attrs.type) === 'radio',
14
+ });
15
+ const models = new WeakMap();
16
+ /** Every form of a feature with the controls that belong to it: descendants and formRef controls. */
17
+ export function formsOf(feature) {
18
+ const hit = models.get(feature);
19
+ if (hit)
20
+ return hit;
21
+ const forms = [];
22
+ const external = new Map();
23
+ for (const [view, v] of Object.entries(feature.views)) {
24
+ const walk = (n, pointer, chain, form) => {
25
+ switch (n.kind) {
26
+ case 'el': {
27
+ const owner = formRefOf(n.attrs.form);
28
+ if (n.tag === 'form' && !form) {
29
+ const model = { node: n, pointer, view, chain, controls: [], opaque: null };
30
+ forms.push(model);
31
+ n.children.forEach((c, i) => walk(c, at(pointer, 'children', i), chain, model));
32
+ return;
33
+ }
34
+ if (controlTags.has(n.tag)) {
35
+ const c = control(n, pointer, chain);
36
+ if (owner !== null)
37
+ external.set(owner, [...(external.get(owner) ?? []), c]);
38
+ else if (n.attrs.form === undefined && form)
39
+ form.controls.push(c);
40
+ if (form && c.name === null && n.attrs.name !== undefined)
41
+ form.opaque ??= 'a control with a computed name';
42
+ }
43
+ n.children.forEach((c, i) => walk(c, at(pointer, 'children', i), chain, form));
44
+ return;
45
+ }
46
+ case 'component':
47
+ if (form)
48
+ form.opaque ??= 'a client component';
49
+ n.children.forEach((c, i) => walk(c, at(pointer, 'children', i), chain, form));
50
+ return;
51
+ case 'html':
52
+ if (form)
53
+ form.opaque ??= 'ui.html';
54
+ return;
55
+ case 'embed':
56
+ if (form)
57
+ form.opaque ??= 'another view';
58
+ return;
59
+ case 'when':
60
+ n.children.forEach((c, i) => walk(c, at(pointer, 'children', i), chain, form));
61
+ return;
62
+ case 'if':
63
+ n.ifTrue.forEach((c, i) => walk(c, at(pointer, 'ifTrue', i), chain, form));
64
+ n.ifFalse.forEach((c, i) => walk(c, at(pointer, 'ifFalse', i), chain, form));
65
+ return;
66
+ case 'each':
67
+ walk(n.item, at(pointer, 'item'), [...chain, n.id], form);
68
+ return;
69
+ case 'query':
70
+ walk(n.ready, at(pointer, 'ready'), chain, form);
71
+ if (n.pending)
72
+ walk(n.pending, at(pointer, 'pending'), chain, form);
73
+ for (const [name, child] of Object.entries(n.failed))
74
+ walk(child, at(pointer, 'failed', name), chain, form);
75
+ return;
76
+ default:
77
+ return;
78
+ }
79
+ };
80
+ walk(v.root, featurePointer(feature.id, 'views', view, 'root'), [], null);
81
+ }
82
+ for (const f of forms)
83
+ if (f.node.ref)
84
+ f.controls.push(...(external.get(f.node.ref.formRef) ?? []));
85
+ models.set(feature, forms);
86
+ return forms;
87
+ }
88
+ /** The ui.dom.form / formAll reads of a submit payload, with the payload field each one feeds. */
89
+ export function formReads(payload, pointer) {
90
+ const out = [];
91
+ const visit = (v, field, p) => {
92
+ if ('ref' in v) {
93
+ const [kind, name] = v.path;
94
+ if (v.ref === 'dom' && (kind === 'form' || kind === 'formAll') && name !== undefined)
95
+ out.push({ kind, name, field, pointer: p });
96
+ }
97
+ else if ('object' in v) {
98
+ for (const [k, x] of Object.entries(v.object))
99
+ visit(x, field ? [...field, k] : null, at(p, 'object', k));
100
+ }
101
+ else if ('fn' in v)
102
+ visit(v.arg, null, at(p, 'arg'));
103
+ };
104
+ visit(payload, [], pointer);
105
+ return out;
106
+ }
107
+ const multiple = (v) => v !== undefined && !('literal' in v && (v.literal === false || v.literal === null));
108
+ /** Whether a name can carry several values in one form instance (radio and submit groups excluded). */
109
+ export function multiValued(form, name) {
110
+ const named = form.controls.filter((c) => c.name === name && !c.radio && !c.submit);
111
+ return (named.length > 1 ||
112
+ named.some((c) => c.chain.length > form.chain.length || multiple(c.node.attrs.multiple)));
113
+ }
114
+ //# sourceMappingURL=form-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-model.js","sourceRoot":"","sources":["../../src/rules/form-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,EAAE,EAGF,SAAS,GAGV,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AA2B3C,MAAM,OAAO,GAAG,CAAC,CAAwB,EAAE,EAAE,CAC3C,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AAEzE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEtG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAe,EAAE,EAAE,CAC1C,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,QAAQ,CAAC;IAC1E,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAEpF,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAE,OAAW,EAAE,KAAe,EAAW,EAAE,CAAC,CAAC;IAC7E,IAAI;IACJ,OAAO;IACP,KAAK;IACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACrE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;IACtB,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO;CACpE,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,IAAI,OAAO,EAA0B,CAAA;AAEpD,qGAAqG;AACrG,MAAM,UAAU,OAAO,CAAC,OAAkB;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,GAAG;QAAE,OAAO,GAAG,CAAA;IACnB,MAAM,KAAK,GAAgB,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAA;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,CAAC,CAAW,EAAE,OAAW,EAAE,KAAe,EAAE,IAAsB,EAAE,EAAE;YACjF,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,IAAI,EAAE,CAAC;oBACV,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;wBACtF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBACjB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;wBAC/E,OAAM;oBACR,CAAC;oBACD,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;wBACpC,IAAI,KAAK,KAAK,IAAI;4BAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;6BACvE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI;4BAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBAClE,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;4BACvD,IAAI,CAAC,MAAM,KAAK,gCAAgC,CAAA;oBACpD,CAAC;oBACD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC9E,OAAM;gBACR,CAAC;gBACD,KAAK,WAAW;oBACd,IAAI,IAAI;wBAAE,IAAI,CAAC,MAAM,KAAK,oBAAoB,CAAA;oBAC9C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC9E,OAAM;gBACR,KAAK,MAAM;oBACT,IAAI,IAAI;wBAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAA;oBACnC,OAAM;gBACR,KAAK,OAAO;oBACV,IAAI,IAAI;wBAAE,IAAI,CAAC,MAAM,KAAK,cAAc,CAAA;oBACxC,OAAM;gBACR,KAAK,MAAM;oBACT,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC9E,OAAM;gBACR,KAAK,IAAI;oBACP,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC1E,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC5E,OAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;oBACzD,OAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;oBAChD,IAAI,CAAC,CAAC,OAAO;wBAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;oBACnE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;wBAClD,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;oBACvD,OAAM;gBACR;oBACE,OAAM;YACV,CAAC;QACH,CAAC,CAAA;QACD,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC3E,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG;YAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACnG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC1B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,SAAS,CAAC,OAAkB,EAAE,OAAW;IACvD,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,CAAC,CAAY,EAAE,KAAsB,EAAE,CAAK,EAAE,EAAE;QAC5D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;YAC3B,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,SAAS;gBAClF,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC3C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,CAAC;aAAM,IAAI,IAAI,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;IACxD,CAAC,CAAA;IACD,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAwB,EAAE,EAAE,CAC5C,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAA;AAErF,uGAAuG;AACvG,MAAM,UAAU,WAAW,CAAC,IAAe,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACnF,OAAO,CACL,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CACzF,CAAA;AACH,CAAC"}
@@ -1,3 +1,8 @@
1
+ import { type JsonSchema, type ProjectIR } from '@hozu/core/ir';
1
2
  import type { Ctx } from '../context.ts';
2
3
  export declare function progressiveForms(ctx: Ctx): void;
4
+ export declare const isList: (s: JsonSchema | null) => boolean;
5
+ /** The IR pointer of a schema inside an event payload, when no effect shares that payload schema. */
6
+ export declare function schemaPointer(ir: ProjectIR, event: string, target: JsonSchema): string | null;
7
+ export declare function formFields(ctx: Ctx): void;
3
8
  //# sourceMappingURL=forms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../src/rules/forms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAGxC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,QAqBxC"}
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../src/rules/forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAEf,KAAK,SAAS,EAGf,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAaxC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,QAqBxC;AAKD,eAAO,MAAM,MAAM,MAAO,UAAU,GAAG,IAAI,KAAG,OAO7C,CAAA;AAyCD,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAM7F;AAqBD,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,QAoDlC"}
@@ -1,5 +1,13 @@
1
- import { at, formRunnable } from '@hozu/core/ir';
1
+ import { at, formRunnable, join, resolveAt, } from '@hozu/core/ir';
2
+ import { eventSchema } from '../env.js';
3
+ import { resolveRef } from '../resolve.js';
4
+ import { resolvePath } from '../schema.js';
5
+ import { closest, didYouMean } from '../suggest.js';
2
6
  import { walkView } from '../walk.js';
7
+ import { formReads, formsOf, multiValued } from './form-model.js';
8
+ const fieldsOf = (payload) => ('object' in payload ? Object.keys(payload.object) : ['title'])
9
+ .map((k) => `${k}: ui.dom.form('${k}')`)
10
+ .join(', ');
3
11
  export function progressiveForms(ctx) {
4
12
  const { ir } = ctx;
5
13
  for (const f of Object.values(ir.features))
@@ -9,11 +17,140 @@ export function progressiveForms(ctx) {
9
17
  return;
10
18
  if (formRunnable(node.on.submit.payload))
11
19
  return;
12
- ctx.report('HZ036', f.id, at(pointer, 'on', 'submit', 'payload'), `This form only works with JavaScript: its ${node.on.submit.event} payload reads values the server cannot see`, 'Without JavaScript the browser posts the named form fields; the server can use those, context, params and search, but not other DOM fields or each/query bindings.', {
13
- summary: "Read the fields with ui.dom.form('name') so the form also works before hydration and without JavaScript",
14
- snippet: null,
20
+ ctx.report('HZ036', f.id, at(pointer, 'on', 'submit', 'payload'), `This form only works with JavaScript: its ${node.on.submit.event} payload reads values the server cannot see`, 'Without JavaScript the browser posts the named form fields and the pressed submit button; the server can use those, context, params and search, but not other DOM fields or each/query bindings.', {
21
+ summary: "Read the fields with ui.dom.form('name') or ui.dom.formAll('name') so the form also works before hydration and without JavaScript",
22
+ snippet: `on: { submit: ui.send(${node.on.submit.event.split('.').pop()}, { ${fieldsOf(node.on.submit.payload)} }) }`,
15
23
  patch: null,
16
24
  });
17
25
  });
18
26
  }
27
+ const obj = (v) => v && typeof v === 'object' && !Array.isArray(v) ? v : null;
28
+ export const isList = (s) => {
29
+ if (!s)
30
+ return false;
31
+ const t = s.type;
32
+ if (t === 'array' || (Array.isArray(t) && t.includes('array')) || obj(s.items))
33
+ return true;
34
+ return ['anyOf', 'oneOf'].some((k) => Array.isArray(s[k]) && s[k].some((v) => isList(obj(v))));
35
+ };
36
+ const limits = [
37
+ 'minLength',
38
+ 'maxLength',
39
+ 'pattern',
40
+ 'format',
41
+ 'minimum',
42
+ 'maximum',
43
+ 'exclusiveMinimum',
44
+ 'exclusiveMaximum',
45
+ 'multipleOf',
46
+ 'minItems',
47
+ 'maxItems',
48
+ ];
49
+ function constraints(s, found = []) {
50
+ for (const k of limits)
51
+ if (k in s)
52
+ found.push([s, k]);
53
+ for (const k of ['anyOf', 'oneOf'])
54
+ if (Array.isArray(s[k]))
55
+ for (const v of s[k])
56
+ if (obj(v))
57
+ constraints(obj(v), found);
58
+ const items = obj(s.items);
59
+ if (items)
60
+ constraints(items, found);
61
+ return found;
62
+ }
63
+ function pathTo(node, target, tokens = []) {
64
+ if (node === target)
65
+ return tokens;
66
+ if (!node || typeof node !== 'object')
67
+ return null;
68
+ for (const [k, v] of Object.entries(node)) {
69
+ const hit = pathTo(v, target, [...tokens, k]);
70
+ if (hit)
71
+ return hit;
72
+ }
73
+ return null;
74
+ }
75
+ const sharedSchema = (f, hash, event) => Object.values(f.queries).some((q) => q.input === hash) ||
76
+ Object.values(f.mutations).some((m) => m.input === hash) ||
77
+ Object.values(f.endpoints).some((e) => e.input === hash) ||
78
+ Object.entries(f.events).some(([sym, e]) => `${f.id}.${sym}` !== event && e.payload === hash);
79
+ /** The IR pointer of a schema inside an event payload, when no effect shares that payload schema. */
80
+ export function schemaPointer(ir, event, target) {
81
+ const owner = resolveRef(ir, event, 'event');
82
+ const hash = owner?.feature.events[owner.symbol]?.payload;
83
+ if (!owner || !hash || sharedSchema(owner.feature, hash, event))
84
+ return null;
85
+ const tokens = pathTo(owner.feature.schemas[hash], target);
86
+ return tokens ? join('', 'features', owner.feature.id, 'schemas', hash, ...tokens) : null;
87
+ }
88
+ function submitButtons(ctx, f, form) {
89
+ for (const c of form.controls) {
90
+ if (!c.submit || !c.node.on.click)
91
+ continue;
92
+ ctx.report('HZ056', f.id, at(c.pointer, 'on', 'click'), `A submit button sends ${c.node.on.click.event} on click, and its form submits as well`, 'The click runs first and the form submit follows (with JavaScript, and as a native post without it), so both events reach the machine.', {
93
+ summary: "Give the button name and value and read ui.dom.form('action') in the form's submit, or make it type: 'button'",
94
+ snippet: "ui.button({ type: 'submit', name: 'action', value: 'archive' }, ['Archive'])",
95
+ patch: [{ op: 'add', path: resolveAt(at(c.pointer, 'attrs', 'type')), value: { literal: 'button' } }],
96
+ });
97
+ }
98
+ }
99
+ export function formFields(ctx) {
100
+ const { ir } = ctx;
101
+ for (const f of Object.values(ir.features))
102
+ for (const form of formsOf(f)) {
103
+ submitButtons(ctx, f, form);
104
+ const submit = form.node.on.submit;
105
+ if (!submit)
106
+ continue;
107
+ const root = eventSchema(ir, submit.event);
108
+ const names = [...new Set(form.controls.map((c) => c.name).filter((n) => n !== null))];
109
+ for (const read of formReads(submit.payload, at(form.pointer, 'on', 'submit', 'payload'))) {
110
+ const source = `ui.dom.${read.kind}('${read.name}')`;
111
+ if (!names.includes(read.name)) {
112
+ const guess = closest(read.name, names);
113
+ ctx.report(form.opaque ? 'HZ063' : 'HZ055', f.id, at(read.pointer, 'path', 1), `${source}: no control named "${read.name}" belongs to this form.${didYouMean(guess)}`, form.opaque
114
+ ? `The form holds ${form.opaque}, whose fields cannot be seen statically. Known fields: ${names.join(', ') || 'none'}.`
115
+ : `A form posts the named controls inside it, the controls whose form attribute holds its formRef, and the pressed submit button. Fields: ${names.join(', ') || 'none'}.`, {
116
+ summary: guess ? `Read ${guess}` : `Add a control with name: '${read.name}' to the form`,
117
+ snippet: guess ? null : `ui.input({ name: '${read.name}' })`,
118
+ patch: guess
119
+ ? [{ op: 'replace', path: resolveAt(at(read.pointer, 'path', 1)), value: guess }]
120
+ : null,
121
+ });
122
+ continue;
123
+ }
124
+ const r = read.field && root ? resolvePath(root, read.field) : null;
125
+ const schema = r?.ok ? r.schema : null;
126
+ const field = `${submit.event}.${read.field?.join('.') || 'payload'}`;
127
+ if (read.kind === 'form' && (isList(schema) || multiValued(form, read.name)))
128
+ ctx.report('HZ054', f.id, at(read.pointer, 'path', 0), isList(schema)
129
+ ? `${source} reads one value, but ${field} is a list`
130
+ : `${source} reads one value, but several controls named "${read.name}" submit in this form`, 'ui.dom.form(name) is the first value of the name; a checkbox group, a select with multiple, repeated controls and controls inside ui.each post one value each.', {
131
+ summary: `Read every value with ui.dom.formAll('${read.name}') into a list field`,
132
+ snippet: null,
133
+ patch: [{ op: 'replace', path: resolveAt(at(read.pointer, 'path', 0)), value: 'formAll' }],
134
+ });
135
+ if (schema)
136
+ constrainedPayload(ctx, f, submit.event, schema, source, field, read.pointer);
137
+ }
138
+ }
139
+ }
140
+ function constrainedPayload(ctx, f, event, schema, source, field, pointer) {
141
+ const found = constraints(schema);
142
+ if (!found.length)
143
+ return;
144
+ const patch = [];
145
+ for (const [s, k] of found) {
146
+ const base = schemaPointer(ctx.ir, event, s);
147
+ if (base)
148
+ patch.push({ op: 'remove', path: join(base, k) });
149
+ }
150
+ ctx.report('HZ061', f.id, pointer, `${source} feeds ${field}, whose schema declares ${[...new Set(found.map(([, k]) => k))].join(', ')}`, 'A native post checks the event payload and answers 400, while with JavaScript the payload is not checked and the mutation answers Invalid with field errors: the same input behaves differently in the two modes.', {
151
+ summary: "Move the limits to the mutation's input schema, where both modes get the same Invalid",
152
+ snippet: `event({ payload: z.object({ ${field.split('.').pop()}: z.string() }) })`,
153
+ patch: patch.length ? patch : null,
154
+ });
155
+ }
19
156
  //# sourceMappingURL=forms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/rules/forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,MAAM,UAAU,gBAAgB,CAAC,GAAQ;IACvC,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,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM;oBAAE,OAAM;gBACxE,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;oBAAE,OAAM;gBAChD,GAAG,CAAC,MAAM,CACR,OAAO,EACP,CAAC,CAAC,EAAE,EACJ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,EACtC,6CAA6C,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,6CAA6C,EAC9G,oKAAoK,EACpK;oBACE,OAAO,EACL,yGAAyG;oBAC3G,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,IAAI;iBACZ,CACF,CAAA;YACH,CAAC,CAAC,CAAA;AACR,CAAC"}
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/rules/forms.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export function unsafeHtml(ctx) {
26
26
  return;
27
27
  case 'el':
28
28
  case 'when':
29
- case 'widget':
29
+ case 'component':
30
30
  kids(n.children, 'children');
31
31
  return;
32
32
  case 'if':
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/rules/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/rules/html.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/rules/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAoBxC,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,QAoFjC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/rules/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAoBxC,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,QA8FjC"}
@@ -1,4 +1,4 @@
1
- import { join, routePattern } from '@hozu/core/ir';
1
+ import { join, localePath, routePattern } from '@hozu/core/ir';
2
2
  const RESERVED = new Set([
3
3
  'content-type',
4
4
  'content-length',
@@ -29,7 +29,10 @@ export function httpRules(ctx) {
29
29
  },
30
30
  ],
31
31
  });
32
- const pages = Object.keys(ctx.ir.pages).flatMap((id) => ctx.ir.routes[id] ? [[id, ctx.ir.routes[id].path]] : []);
32
+ const locales = ctx.ir.site?.locales ?? [null];
33
+ const pages = Object.keys(ctx.ir.pages).flatMap((id) => ctx.ir.routes[id]
34
+ ? [...new Set(locales.map((l) => localePath(ctx.ir, ctx.ir.routes[id].path, l)))].map((p) => [id, p])
35
+ : []);
33
36
  http.redirects.forEach((r, i) => {
34
37
  const at = join('', 'http', 'redirects', i);
35
38
  const remove = {
@@ -48,8 +51,15 @@ export function httpRules(ctx) {
48
51
  return invalid(`Redirect "${r.from}" overlaps redirect "${other.from}"`, 'Two redirects for one URL make the target depend on order.');
49
52
  if ('link' in r.to && !ctx.ir.routes[r.to.link])
50
53
  return invalid(`Redirect "${r.from}" targets an unknown route`, 'Point `to` at a registered route with ui.link.');
51
- if ('literal' in r.to && typeof r.to.literal === 'string' && r.to.literal.startsWith('/'))
52
- ctx.report('HZ032', null, join(at, 'to'), `Redirect "${r.from}" targets the internal path "${r.to.literal}" as a string`, 'Internal URLs are built from route declarations so they stay typed and canonical.', { summary: 'Use to: (params) => ui.link(route, params)', snippet: null, patch: null });
54
+ if ('literal' in r.to && typeof r.to.literal === 'string' && r.to.literal.startsWith('/')) {
55
+ const path = r.to.literal;
56
+ const route = Object.keys(ctx.ir.routes).find((id) => ctx.ir.routes[id].path === path);
57
+ ctx.report('HZ032', null, join(at, 'to'), `Redirect "${r.from}" targets the internal path "${path}" as a string`, 'Internal URLs are built from route declarations so they stay typed and canonical.', {
58
+ summary: 'Use to: (params) => ui.link(route, params)',
59
+ snippet: route ? `to: () => ui.link(${route}, null),` : 'to: (params) => ui.link(route, params),',
60
+ patch: null,
61
+ });
62
+ }
53
63
  });
54
64
  http.headers.forEach((rule, i) => {
55
65
  for (const [name, value] of Object.entries(rule.set)) {
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/rules/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/rules/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/rules/i18n.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AA+ExC,wBAAgB,IAAI,CAAC,GAAG,EAAE,GAAG,QA4K5B"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/rules/i18n.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AA+ExC,wBAAgB,IAAI,CAAC,GAAG,EAAE,GAAG,QAiM5B"}
@@ -47,7 +47,7 @@ function nodeValues(node, pointer, visit) {
47
47
  record(node.vars, 'vars');
48
48
  sends(node.on);
49
49
  return;
50
- case 'widget':
50
+ case 'component':
51
51
  scanValue(node.props, at(pointer, 'props'), visit);
52
52
  record(node.toggle, 'toggle');
53
53
  record(node.vars, 'vars');
@@ -111,6 +111,21 @@ export function i18n(ctx) {
111
111
  ],
112
112
  });
113
113
  });
114
+ const taken = new Set(Object.values(ir.routes).map((r) => r.path));
115
+ for (const id of Object.keys(ir.pages)) {
116
+ const path = ir.routes[id]?.path;
117
+ const segment = path?.split('/')[1] ?? '';
118
+ if (!path || !locales.includes(segment))
119
+ continue;
120
+ const rest = path.slice(segment.length + 1) || '/';
121
+ const renamed = taken.has(rest) ? `/${segment}-page${rest === '/' ? '' : rest}` : rest;
122
+ const pointer = join('', 'routes', id, 'path');
123
+ ctx.report('HZ060', null, pointer, `Route "${id}" (${path}) starts with the locale segment "${segment}"`, `Under site.locales the first segment of a URL names its locale, so this route would own URLs the locale prefix also means.`, {
124
+ summary: `Rename the route path to "${renamed}"`,
125
+ snippet: null,
126
+ patch: [{ op: 'replace', path: pointer, value: renamed }],
127
+ });
128
+ }
114
129
  }
115
130
  for (const f of Object.values(ir.features)) {
116
131
  const m = f.messages;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/rules/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/rules/i18n.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/rules/links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAyDxC,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,QAYrC"}
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/rules/links.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAwHxC,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,QAmBrC"}
@@ -1,4 +1,4 @@
1
- import { at, resolveAt, routeParams, routePattern } from '@hozu/core/ir';
1
+ import { at, resolveAt, routeParams, routePattern, } from '@hozu/core/ir';
2
2
  import { closest, didYouMean } from '../suggest.js';
3
3
  import { walkView } from '../walk.js';
4
4
  function matchRoute(ir, pathname) {
@@ -42,19 +42,74 @@ function report(ctx, feature, pointer, href) {
42
42
  : null,
43
43
  });
44
44
  }
45
+ const URL_ATTRS = {
46
+ a: 'href',
47
+ area: 'href',
48
+ form: 'action',
49
+ button: 'formaction',
50
+ input: 'formaction',
51
+ };
52
+ function postEndpoint(ir, path) {
53
+ for (const f of Object.values(ir.features))
54
+ for (const [sym, e] of Object.entries(f.endpoints))
55
+ if (e.method === 'POST' && e.path === path)
56
+ return `${f.id}.${sym}`;
57
+ return null;
58
+ }
59
+ function reportEndpoint(ctx, feature, pointer, path, ref) {
60
+ const call = `ui.link(${ref.slice(ref.indexOf('.') + 1)})`;
61
+ ctx.report('HZ032', feature, pointer, `Form action "${path}" is a string; use ${call}`, 'An endpoint is a declaration identity, so a moved or removed endpoint is caught.', {
62
+ summary: `Use ${call}`,
63
+ snippet: call,
64
+ patch: [{ op: 'replace', path: resolveAt(pointer), value: { endpoint: ref, input: null } }],
65
+ });
66
+ }
67
+ const internal = (v) => v.startsWith('/') && !v.startsWith('//') && !v.startsWith('/_hozu/');
68
+ function concatHref(value) {
69
+ if (!('fn' in value) || value.fn !== '%concat' || !('object' in value.arg))
70
+ return null;
71
+ const parts = Object.values(value.arg.object);
72
+ const first = parts[0];
73
+ if (!first || !('literal' in first) || typeof first.literal !== 'string' || !internal(first.literal))
74
+ return null;
75
+ return parts.map((p) => ('literal' in p ? String(p.literal) : '…')).join('');
76
+ }
77
+ function reportConcat(ctx, feature, pointer, href) {
78
+ const match = matchRoute(ctx.ir, href.replaceAll('…', 'x').split(/[?#]/)[0]);
79
+ const call = match
80
+ ? `ui.link(${match.id}, ${match.params
81
+ ? `{ ${Object.keys(match.params)
82
+ .map((k) => `${k}: …`)
83
+ .join(', ')} }`
84
+ : 'null'})`
85
+ : 'ui.link(route, params)';
86
+ ctx.report('HZ032', feature, pointer, `Internal link \`${href}\` is built from a template string; use ${call}`, 'Internal paths are typed references to a route, so a renamed route or a wrong parameter is caught; a template string is not checked.', { summary: `Use ${call}`, snippet: call, patch: null });
87
+ }
45
88
  export function internalLinks(ctx) {
46
89
  const { ir } = ctx;
47
90
  for (const f of Object.values(ir.features))
48
91
  for (const [vid, view] of Object.entries(f.views))
49
92
  walkView(ir, f, vid, view, ({ node, pointer }) => {
50
- if (node.kind !== 'el' || (node.tag !== 'a' && node.tag !== 'area'))
93
+ if (node.kind !== 'el')
51
94
  return;
52
- const href = node.attrs.href;
53
- if (!href || !('literal' in href) || typeof href.literal !== 'string')
95
+ const attr = URL_ATTRS[node.tag];
96
+ const href = attr ? node.attrs[attr] : undefined;
97
+ if (!attr || !href)
98
+ return;
99
+ const p = at(pointer, 'attrs', attr);
100
+ const built = concatHref(href);
101
+ if (built)
102
+ reportConcat(ctx, f.id, p, built);
103
+ if (!('literal' in href) || typeof href.literal !== 'string')
54
104
  return;
55
105
  const v = href.literal;
56
- if (v.startsWith('/') && !v.startsWith('//') && !v.startsWith('/_hozu/'))
57
- report(ctx, f.id, at(pointer, 'attrs', 'href'), v);
106
+ if (!internal(v))
107
+ return;
108
+ const endpoint = attr === 'href' ? null : postEndpoint(ir, v);
109
+ if (endpoint)
110
+ reportEndpoint(ctx, f.id, p, v, endpoint);
111
+ else
112
+ report(ctx, f.id, p, v);
58
113
  });
59
114
  }
60
115
  //# sourceMappingURL=links.js.map