@hozu/cli 0.23.0 → 0.24.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.
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +13 -3
- package/dist/commands/browse.js.map +1 -1
- package/dist/commands/call.d.ts.map +1 -1
- package/dist/commands/call.js +26 -4
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +12 -4
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/request.d.ts +1 -0
- package/dist/commands/request.d.ts.map +1 -1
- package/dist/commands/request.js +124 -31
- package/dist/commands/request.js.map +1 -1
- package/dist/contract.d.ts +7 -2
- package/dist/contract.d.ts.map +1 -1
- package/dist/gen/go.d.ts +3 -1
- package/dist/gen/go.d.ts.map +1 -1
- package/dist/gen/go.js +34 -4
- package/dist/gen/go.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/migrate/steps.d.ts +2 -2
- package/dist/migrate/steps.d.ts.map +1 -1
- package/dist/migrate/steps.js +92 -13
- package/dist/migrate/steps.js.map +1 -1
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +7 -2
- package/dist/remote.js.map +1 -1
- package/package.json +8 -8
- package/schema/call.schema.json +1 -1
- package/schema/gen.schema.json +1 -1
- package/schema/inspect.schema.json +2 -1
- package/schema/migrate.schema.json +10 -2
- package/skill/topics/data.md +7 -3
- package/skill/topics/recipes.md +2 -1
- package/skill/topics/views.md +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/migrate/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAA+B,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAMpC,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/migrate/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAA+B,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAMpC,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,6DAA6D;IAC7D,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACrF,sGAAsG;IACtG,SAAS,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAA;IACzB,yFAAyF;IACzF,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtE,uGAAuG;IACvG,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,sGAAsG;AACtG,eAAO,MAAM,KAAK,EAAE,IAAI,EA2LvB,CAAA;AA6BD,eAAO,MAAM,MAAM,QAAiB,CAAA;AAEpC,eAAO,MAAM,OAAO,YAAa,MAAM,KAAG,MAAkD,CAAA;AAI5F,eAAO,MAAM,YAAY,MAAO,MAAM,KAAK,MAAM,KAAG,MAInD,CAAA;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,IAAI,CAU7D"}
|
package/dist/migrate/steps.js
CHANGED
|
@@ -8,14 +8,14 @@ export const steps = [
|
|
|
8
8
|
{
|
|
9
9
|
from: '0.10',
|
|
10
10
|
to: '0.11',
|
|
11
|
-
|
|
11
|
+
changes: ["runs: 'server' on every query and mutation without runs (0.11 defaults to 'either')"],
|
|
12
12
|
rewrite: addRunsServer,
|
|
13
13
|
normalize: normalize010,
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
from: '0.11',
|
|
17
17
|
to: '0.12',
|
|
18
|
-
|
|
18
|
+
changes: ['.hozu/ in .gitignore (0.12 caches the transform and the type check there)'],
|
|
19
19
|
rewrite: (_file, source) => ({ code: source, notes: [], count: 0 }),
|
|
20
20
|
normalize: (ir) => ir,
|
|
21
21
|
files: ignoreHozu,
|
|
@@ -23,7 +23,10 @@ export const steps = [
|
|
|
23
23
|
{
|
|
24
24
|
from: '0.12',
|
|
25
25
|
to: '0.13',
|
|
26
|
-
|
|
26
|
+
changes: [
|
|
27
|
+
'connect: [] on every feature and env files / internal in the IR (ADR 0051, 0052)',
|
|
28
|
+
'new warnings HZ083 and HZ084',
|
|
29
|
+
],
|
|
27
30
|
rewrite: (_file, source) => ({ code: source, notes: [], count: 0 }),
|
|
28
31
|
normalize: (ir) => {
|
|
29
32
|
const features = ir.features ?? {};
|
|
@@ -40,7 +43,10 @@ export const steps = [
|
|
|
40
43
|
{
|
|
41
44
|
from: '0.13',
|
|
42
45
|
to: '0.14',
|
|
43
|
-
|
|
46
|
+
changes: [
|
|
47
|
+
"runs: 'either' where runs is omitted (0.14 requires it)",
|
|
48
|
+
'package.json scripts call hozu check, and hozu graph scripts are removed (ADR 0053)',
|
|
49
|
+
],
|
|
44
50
|
rewrite: (file, source) => addRuns('either', file, source),
|
|
45
51
|
normalize: (ir) => {
|
|
46
52
|
;
|
|
@@ -52,49 +58,89 @@ export const steps = [
|
|
|
52
58
|
{
|
|
53
59
|
from: '0.14',
|
|
54
60
|
to: '0.15',
|
|
55
|
-
|
|
61
|
+
changes: [
|
|
62
|
+
"access: 'anyone' on every server-run user query and mutation, the 0.14 behaviour (ADR 0056 B)",
|
|
63
|
+
'HZ090 then lists the user queries to tighten',
|
|
64
|
+
"an error the app named Forbidden (the framework's access error since 0.15) becomes NotAllowed",
|
|
65
|
+
],
|
|
56
66
|
rewrite: accessStep,
|
|
57
67
|
normalize: normalize014Renamed,
|
|
58
68
|
},
|
|
59
69
|
{
|
|
60
70
|
from: '0.15',
|
|
61
71
|
to: '0.16',
|
|
62
|
-
|
|
72
|
+
changes: [
|
|
73
|
+
'no source change',
|
|
74
|
+
'an app without machines now locks its pages, so run hozu check --update-lock if it says the lock is missing',
|
|
75
|
+
'an endpoint at /sitemap.xml, /robots.txt or (with a site) /manifest.webmanifest is now HZ046',
|
|
76
|
+
'a head.render field Hozu does not know is HZ014: move them to entries, noindex or site (ADR 0057)',
|
|
77
|
+
],
|
|
63
78
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
64
79
|
normalize: (ir) => ir,
|
|
65
80
|
},
|
|
66
81
|
{
|
|
67
82
|
from: '0.16',
|
|
68
83
|
to: '0.17',
|
|
69
|
-
|
|
84
|
+
changes: [
|
|
85
|
+
'no source change',
|
|
86
|
+
'DevTools follows Figma (Shift+Enter selects the parent, Alt measures)',
|
|
87
|
+
'feature({ styles }) must be a list (HZ014) (ADR 0058)',
|
|
88
|
+
],
|
|
70
89
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
71
90
|
normalize: (ir) => ir,
|
|
72
91
|
},
|
|
73
92
|
{
|
|
74
93
|
from: '0.17',
|
|
75
94
|
to: '0.18',
|
|
76
|
-
|
|
95
|
+
changes: [
|
|
96
|
+
'no source change',
|
|
97
|
+
'a page whose head query fails is titled with the site name',
|
|
98
|
+
'app({ refreshSession }) can renew a session while reading',
|
|
99
|
+
'hozu browse --viewport',
|
|
100
|
+
'DevTools in your language (--devtools-messages) (ADR 0060)',
|
|
101
|
+
],
|
|
77
102
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
78
103
|
normalize: (ir) => ir,
|
|
79
104
|
},
|
|
80
105
|
{
|
|
81
106
|
from: '0.18',
|
|
82
107
|
to: '0.19',
|
|
83
|
-
|
|
108
|
+
changes: [
|
|
109
|
+
'no source change',
|
|
110
|
+
'freshness: { poll: seconds } re-reads a query on a timer',
|
|
111
|
+
"target: 'previous' returns to the state a machine came from",
|
|
112
|
+
'a field alone is a guard',
|
|
113
|
+
'hozu browse says per step what changed (hold / release keep an effect pending) (ADR 0063)',
|
|
114
|
+
],
|
|
84
115
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
85
116
|
normalize: (ir) => ir,
|
|
86
117
|
},
|
|
87
118
|
{
|
|
88
119
|
from: '0.19',
|
|
89
120
|
to: '0.20',
|
|
90
|
-
|
|
121
|
+
changes: [
|
|
122
|
+
'no source change',
|
|
123
|
+
'transitions take refresh: () => [tag()] and copy',
|
|
124
|
+
'a render gets is([...])',
|
|
125
|
+
"HZ036 no longer warns about a form that starts a runs: 'browser' mutation (delete such accept entries, HZ087)",
|
|
126
|
+
'hozu browse runs with JavaScript by default',
|
|
127
|
+
'an on without target stays without entering its state again (ADR 0064)',
|
|
128
|
+
'accept the lock with hozu check --update-lock if HZ057 lists --> stays',
|
|
129
|
+
],
|
|
91
130
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
92
131
|
normalize: (ir) => ir,
|
|
93
132
|
},
|
|
94
133
|
{
|
|
95
134
|
from: '0.20',
|
|
96
135
|
to: '0.21',
|
|
97
|
-
|
|
136
|
+
changes: [
|
|
137
|
+
'no source change',
|
|
138
|
+
'query regions settle in place, added parts fade in',
|
|
139
|
+
'views two pages share keep still and machines keep their state across a page change',
|
|
140
|
+
'is([...]) works for structure, ui.set and replace are new',
|
|
141
|
+
'hozu browse reports flashes and layout shift (ADR 0067)',
|
|
142
|
+
'component fingerprints hash the recorded render, so run hozu build again before deploying',
|
|
143
|
+
],
|
|
98
144
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
99
145
|
normalize: markSharedViews,
|
|
100
146
|
unpredictable: /^\/(?:features\/[^/]+|kits\/[^/]+)\/components\/[^/]+\/sourceHash$/,
|
|
@@ -102,7 +148,20 @@ export const steps = [
|
|
|
102
148
|
{
|
|
103
149
|
from: '0.21',
|
|
104
150
|
to: '0.22',
|
|
105
|
-
|
|
151
|
+
changes: [
|
|
152
|
+
'no source change',
|
|
153
|
+
'resolvers may be in Go through remote() and hozu gen (ADR 0068)',
|
|
154
|
+
'a seed reads queries',
|
|
155
|
+
'links to the page shown get aria-current',
|
|
156
|
+
"a dialog's open follows the machine",
|
|
157
|
+
'ui.format.plural',
|
|
158
|
+
'head reads search',
|
|
159
|
+
'resolvers answer Forbidden',
|
|
160
|
+
'signedIn narrows the session type',
|
|
161
|
+
'one-shot commands exit (app({ dispose }) closes a pool)',
|
|
162
|
+
'kept state follows a view two pages share or the same address (ADR 0069)',
|
|
163
|
+
'run hozu build again before deploying',
|
|
164
|
+
],
|
|
106
165
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
107
166
|
normalize: remarkSharedViews,
|
|
108
167
|
unpredictable: /^\/(?:features\/[^/]+|kits\/[^/]+)\/components\/[^/]+\/sourceHash$/,
|
|
@@ -110,7 +169,27 @@ export const steps = [
|
|
|
110
169
|
{
|
|
111
170
|
from: '0.22',
|
|
112
171
|
to: '0.23',
|
|
113
|
-
|
|
172
|
+
changes: [
|
|
173
|
+
'no source change',
|
|
174
|
+
'route params are parsed (z.coerce applies)',
|
|
175
|
+
'canonical URLs and links leave defaults out after an optional segment',
|
|
176
|
+
'aria-current marks sections above the page only',
|
|
177
|
+
'native multi-step forms keep their step',
|
|
178
|
+
'{ ...search } works in ui.link',
|
|
179
|
+
'a Go service needs hozu gen and a rebuild (a fingerprint per effect) (ADR 0070)',
|
|
180
|
+
],
|
|
181
|
+
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
182
|
+
normalize: (ir) => ir,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
from: '0.23',
|
|
186
|
+
to: '0.24',
|
|
187
|
+
changes: [
|
|
188
|
+
'no source change',
|
|
189
|
+
"aria-current marks only the address shown: mark a menu's sections with current(route) in the render",
|
|
190
|
+
'aria-current false writes no attribute',
|
|
191
|
+
"hozu get --select takes descendant and child selectors; hozu call shows an endpoint's invalidated tags (ADR 0071)",
|
|
192
|
+
],
|
|
114
193
|
rewrite: (_, source) => ({ code: source, notes: [], count: 0 }),
|
|
115
194
|
normalize: (ir) => ir,
|
|
116
195
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/migrate/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAgBhE,sGAAsG;AACtG,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B;QACE,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,qFAAqF;
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/migrate/steps.ts"],"names":[],"mappings":"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"}
|
package/dist/remote.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAS,KAAK,UAAU,EAAE,KAAK,cAAc,EAAkB,MAAM,eAAe,CAAA;AAG7G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,cAAc,CAAA;CACzB;AASD,eAAO,MAAM,SAAS,SAAU,MAAM,WAGG,CAAA;AAEzC,kFAAkF;AAClF,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAQxB;AAaD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAS,KAAK,UAAU,EAAE,KAAK,cAAc,EAAkB,MAAM,eAAe,CAAA;AAG7G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,cAAc,CAAA;CACzB;AASD,eAAO,MAAM,SAAS,SAAU,MAAM,WAGG,CAAA;AAEzC,kFAAkF;AAClF,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAQxB;AAaD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAuDlG"}
|
package/dist/remote.js
CHANGED
|
@@ -3,7 +3,7 @@ import { basename, dirname, extname, relative } from 'node:path';
|
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { codes, remoteContract } from '@hozu/core/ir';
|
|
5
5
|
import { importer } from './commands/app.js';
|
|
6
|
-
import { goFingerprints } from './gen/go.js';
|
|
6
|
+
import { goFingerprints, goWholeContract } from './gen/go.js';
|
|
7
7
|
export const packageOf = (file) => basename(dirname(file))
|
|
8
8
|
.toLowerCase()
|
|
9
9
|
.replace(/[^a-z0-9_]/g, '') || 'hozu';
|
|
@@ -49,7 +49,12 @@ export function remoteDiagnostics(loaded, groups, app) {
|
|
|
49
49
|
problem(`The remote contract ${shown(g.file)} does not exist`, 'hozu gen writes it from the declarations remote() lists.', 'Run hozu gen, then implement the Resolvers interface it prints in the service');
|
|
50
50
|
continue;
|
|
51
51
|
}
|
|
52
|
-
const
|
|
52
|
+
const text = readFileSync(g.file, 'utf8');
|
|
53
|
+
const found = goFingerprints(text);
|
|
54
|
+
if (!Object.keys(found).length && goWholeContract(text)) {
|
|
55
|
+
problem(`The remote contract ${shown(g.file)} was written by an older hozu gen (one fingerprint for the whole contract); run hozu gen and rebuild the service`, 'Since 0.23 the contract carries one fingerprint per effect, so the service answers 409 for every call.', 'Run hozu gen, fix the service until go build passes, and rebuild it');
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
53
58
|
const stale = [
|
|
54
59
|
...g.contract.effects
|
|
55
60
|
.filter((e) => found[e.ref] !== e.fingerprint)
|
package/dist/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAoB,KAAK,EAAwC,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7G,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hozu/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"description": "The hozu command: check, map, why, show, get, browse, call, plan, add, build, dev, serve, docs, migrate and skill (all with --json)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hozu",
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@hozu/core": "0.
|
|
52
|
-
"@hozu/
|
|
53
|
-
"@hozu/
|
|
54
|
-
"@hozu/
|
|
55
|
-
"@hozu/
|
|
56
|
-
"@hozu/transform": "0.
|
|
51
|
+
"@hozu/core": "0.24.0",
|
|
52
|
+
"@hozu/validator": "0.24.0",
|
|
53
|
+
"@hozu/machine": "0.24.0",
|
|
54
|
+
"@hozu/compiler": "0.24.0",
|
|
55
|
+
"@hozu/devtools": "0.24.0",
|
|
56
|
+
"@hozu/transform": "0.24.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"create-hozu": "0.
|
|
59
|
+
"create-hozu": "0.24.0"
|
|
60
60
|
}
|
|
61
61
|
}
|
package/schema/call.schema.json
CHANGED
package/schema/gen.schema.json
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"items": {
|
|
54
54
|
"type": "string"
|
|
55
55
|
},
|
|
56
|
-
"description": "Number fields named like an id or a count, which may want z.int() (ADR 0070 C4); not diagnostics."
|
|
56
|
+
"description": "Number fields named like an id or a count, which may want z.int() (ADR 0070 C4), and enums without a title that became several Go types, which a title makes one; not diagnostics."
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
"required": [
|
|
@@ -41,15 +41,23 @@
|
|
|
41
41
|
},
|
|
42
42
|
"summary": {
|
|
43
43
|
"type": "string"
|
|
44
|
+
},
|
|
45
|
+
"changes": {
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": {
|
|
48
|
+
"type": "string"
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
},
|
|
46
52
|
"required": [
|
|
47
53
|
"from",
|
|
48
54
|
"to",
|
|
49
|
-
"summary"
|
|
55
|
+
"summary",
|
|
56
|
+
"changes"
|
|
50
57
|
],
|
|
51
58
|
"additionalProperties": false
|
|
52
|
-
}
|
|
59
|
+
},
|
|
60
|
+
"description": "Each step's changes: `summary` joins `changes` with \"; \"."
|
|
53
61
|
},
|
|
54
62
|
"changed": {
|
|
55
63
|
"type": "array",
|
package/skill/topics/data.md
CHANGED
|
@@ -146,7 +146,11 @@ func main() {
|
|
|
146
146
|
- Data the whole staff shares but only staff may read is `scope: 'user'` with `access` (it is never cached across
|
|
147
147
|
requests). Share one rule: `const staffOnly = part(({ session }) => session.role !== 'editor')`, then
|
|
148
148
|
`access: { allow: staffOnly }` on each effect.
|
|
149
|
-
- A resolver may answer `fail('Forbidden', { message })` (a
|
|
150
|
-
|
|
149
|
+
- A resolver may answer `fail('Forbidden', { message })` (a check `access` cannot make); with any access but
|
|
150
|
+
`'anyone'` its `session` is never null.
|
|
151
|
+
- A failure you can expect (a row gone, a state that forbids the change) is a declared error of the effect
|
|
152
|
+
(`errors: { NotFound }`, `fail('NotFound', …)`), handled in `failed` with and without JavaScript. A thrown error is
|
|
153
|
+
`Unexpected`: a server fault (500 on a native post, `Internal error` in production).
|
|
151
154
|
- Another app writing the same database: give the reading app a signed `endpoint` that `invalidates` the tags, and
|
|
152
|
-
call it after a write (`hozu docs endpoints`).
|
|
155
|
+
call it after a write (`hozu docs endpoints`). Every query that app's writes change needs a tag, or only its
|
|
156
|
+
freshness time refreshes it.
|
package/skill/topics/recipes.md
CHANGED
|
@@ -89,7 +89,8 @@ const staffHead = { query: me, render: (m) => ({ title: `${m.name} · Admin` }),
|
|
|
89
89
|
const staff = (route, View) => ui.page(route, { views: [Sidebar, View], head: staffHead })
|
|
90
90
|
export default project({ /* … */ pages: [staff(orders, OrderList), staff(orderDetail, OrderPage), …] })
|
|
91
91
|
```
|
|
92
|
-
The sidebar
|
|
92
|
+
The sidebar marks its sections with `current(route)` from its render:
|
|
93
|
+
`'aria-current': current(orders) || current(orderDetail)`, styled `aria-[current]:font-bold`.
|
|
93
94
|
|
|
94
95
|
## Screens with different state
|
|
95
96
|
One machine per feature: an order list (filters, selection) and an order page (shipping, refund) are two features,
|
package/skill/topics/views.md
CHANGED
|
@@ -67,8 +67,10 @@ export const Board = ui.view({
|
|
|
67
67
|
## Menus, dialogs, counting
|
|
68
68
|
- When a query's input changes, the rows stay (`aria-busy` on the parent) and update by key; `pending` shows only
|
|
69
69
|
before the first answer.
|
|
70
|
-
- A link to the
|
|
71
|
-
`
|
|
70
|
+
- A link to the address shown gets `aria-current="page"`. Which links mark a section is yours to say: the render's
|
|
71
|
+
`current(route)` is true on that route's pages, so a menu writes
|
|
72
|
+
`ui.a({ href: ui.link(orders, null), 'aria-current': current(orders) || current(orderDetail) }, ['Orders'])` and
|
|
73
|
+
styles `aria-[current]:font-bold`: `true` is written `"page"` on the address itself, `false` writes nothing.
|
|
72
74
|
- `ui.dialog({ open: is(['editing']), on: { close: ui.send(Cancel, {}) } }, [...])` opens as a modal and closes with
|
|
73
75
|
the machine; Escape sends `close`. It needs JavaScript: a dialog that must open without it uses the native
|
|
74
76
|
`commandfor` button (the short form) and closes when the data that shows it changes.
|