@nifrajs/cli 2.14.1 → 3.2.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/README.md +10 -0
- package/dist/assure-hydration.d.ts.map +1 -1
- package/dist/assure-hydration.js +6 -1
- package/dist/assure-hydration.js.map +1 -1
- package/dist/assure.d.ts.map +1 -1
- package/dist/assure.js +3 -2
- package/dist/assure.js.map +1 -1
- package/dist/check-diagnostics.d.ts +165 -0
- package/dist/check-diagnostics.d.ts.map +1 -0
- package/dist/check-diagnostics.js +1009 -0
- package/dist/check-diagnostics.js.map +1 -0
- package/dist/check-scan.d.ts +245 -0
- package/dist/check-scan.d.ts.map +1 -0
- package/dist/check-scan.js +1599 -0
- package/dist/check-scan.js.map +1 -0
- package/dist/check.d.ts +4 -324
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +8 -2346
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +285 -10
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.d.ts +27 -1
- package/dist/command-catalog.d.ts.map +1 -1
- package/dist/command-catalog.js +142 -2
- package/dist/command-catalog.js.map +1 -1
- package/dist/doctor.d.ts +42 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +64 -7
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.d.ts +17 -0
- package/dist/env-file.d.ts.map +1 -0
- package/dist/env-file.js +113 -0
- package/dist/env-file.js.map +1 -0
- package/dist/fix-recipes.d.ts.map +1 -1
- package/dist/fix-recipes.js +91 -15
- package/dist/fix-recipes.js.map +1 -1
- package/dist/frontend-guidance.d.ts +57 -0
- package/dist/frontend-guidance.d.ts.map +1 -0
- package/dist/frontend-guidance.js +195 -0
- package/dist/frontend-guidance.js.map +1 -0
- package/dist/internal/reserved-segment-codemod.d.ts +36 -0
- package/dist/internal/reserved-segment-codemod.d.ts.map +1 -0
- package/dist/internal/reserved-segment-codemod.js +134 -0
- package/dist/internal/reserved-segment-codemod.js.map +1 -0
- package/dist/internal/typescript-import.d.ts +1 -1
- package/dist/internal/typescript-import.d.ts.map +1 -1
- package/dist/internal/typescript-import.js +62 -11
- package/dist/internal/typescript-import.js.map +1 -1
- package/dist/introspect.d.ts +26 -1
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +74 -24
- package/dist/introspect.js.map +1 -1
- package/dist/levels-tool.d.ts.map +1 -1
- package/dist/levels-tool.js +6 -0
- package/dist/levels-tool.js.map +1 -1
- package/dist/load.d.ts.map +1 -1
- package/dist/load.js +4 -1
- package/dist/load.js.map +1 -1
- package/dist/mcp-context.d.ts +48 -0
- package/dist/mcp-context.d.ts.map +1 -0
- package/dist/mcp-context.js +215 -0
- package/dist/mcp-context.js.map +1 -0
- package/dist/mcp-docs-tools.d.ts.map +1 -1
- package/dist/mcp-docs-tools.js +31 -0
- package/dist/mcp-docs-tools.js.map +1 -1
- package/dist/mcp-exec.d.ts +74 -0
- package/dist/mcp-exec.d.ts.map +1 -0
- package/dist/mcp-exec.js +844 -0
- package/dist/mcp-exec.js.map +1 -0
- package/dist/mcp-http.js +1 -1
- package/dist/mcp-http.js.map +1 -1
- package/dist/mcp-io.d.ts +26 -0
- package/dist/mcp-io.d.ts.map +1 -0
- package/dist/mcp-io.js +100 -0
- package/dist/mcp-io.js.map +1 -0
- package/dist/mcp-reflect.d.ts +16 -0
- package/dist/mcp-reflect.d.ts.map +1 -0
- package/dist/mcp-reflect.js +101 -0
- package/dist/mcp-reflect.js.map +1 -0
- package/dist/mcp-root.d.ts +7 -0
- package/dist/mcp-root.d.ts.map +1 -1
- package/dist/mcp-root.js +51 -3
- package/dist/mcp-root.js.map +1 -1
- package/dist/mcp.d.ts +10 -84
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +13 -1170
- package/dist/mcp.js.map +1 -1
- package/dist/openapi-tool.d.ts +5 -10
- package/dist/openapi-tool.d.ts.map +1 -1
- package/dist/openapi-tool.js +21 -2
- package/dist/openapi-tool.js.map +1 -1
- package/dist/openapi-types.d.ts +21 -0
- package/dist/openapi-types.d.ts.map +1 -0
- package/dist/openapi-types.js +214 -0
- package/dist/openapi-types.js.map +1 -0
- package/dist/port.d.ts.map +1 -1
- package/dist/port.js +2 -1
- package/dist/port.js.map +1 -1
- package/dist/project-facts.d.ts +2 -1
- package/dist/project-facts.d.ts.map +1 -1
- package/dist/project-facts.js.map +1 -1
- package/dist/recipes/3.0.0.d.ts +10 -0
- package/dist/recipes/3.0.0.d.ts.map +1 -0
- package/dist/recipes/3.0.0.js +23 -0
- package/dist/recipes/3.0.0.js.map +1 -0
- package/dist/recipes/index.d.ts.map +1 -1
- package/dist/recipes/index.js +2 -0
- package/dist/recipes/index.js.map +1 -1
- package/dist/release-verification.d.ts +4 -1
- package/dist/release-verification.d.ts.map +1 -1
- package/dist/release-verification.js +6 -123
- package/dist/release-verification.js.map +1 -1
- package/dist/rules/codes.d.ts +4 -0
- package/dist/rules/codes.d.ts.map +1 -1
- package/dist/rules/codes.js +4 -0
- package/dist/rules/codes.js.map +1 -1
- package/dist/rules/islands.d.ts +4 -0
- package/dist/rules/islands.d.ts.map +1 -0
- package/dist/rules/islands.js +155 -0
- package/dist/rules/islands.js.map +1 -0
- package/dist/rules/nano.d.ts +6 -0
- package/dist/rules/nano.d.ts.map +1 -0
- package/dist/rules/nano.js +264 -0
- package/dist/rules/nano.js.map +1 -0
- package/dist/rules/routes.d.ts.map +1 -1
- package/dist/rules/routes.js +17 -30
- package/dist/rules/routes.js.map +1 -1
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +38 -4
- package/dist/rules/security.js.map +1 -1
- package/dist/scaffold.d.ts +12 -6
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +149 -10
- package/dist/scaffold.js.map +1 -1
- package/dist/search-terms.d.ts.map +1 -1
- package/dist/search-terms.js +5 -3
- package/dist/search-terms.js.map +1 -1
- package/dist/stylex-migrate.d.ts +38 -0
- package/dist/stylex-migrate.d.ts.map +1 -0
- package/dist/stylex-migrate.js +1052 -0
- package/dist/stylex-migrate.js.map +1 -0
- package/dist/sync-manifest.d.ts.map +1 -1
- package/dist/sync-manifest.js +2 -1
- package/dist/sync-manifest.js.map +1 -1
- package/dist/verification-plan.d.ts +24 -0
- package/dist/verification-plan.d.ts.map +1 -0
- package/dist/verification-plan.js +116 -0
- package/dist/verification-plan.js.map +1 -0
- package/dist/work-graph.d.ts.map +1 -1
- package/dist/work-graph.js +6 -3
- package/dist/work-graph.js.map +1 -1
- package/dist/workspace-link.d.ts +37 -0
- package/dist/workspace-link.d.ts.map +1 -0
- package/dist/workspace-link.js +72 -0
- package/dist/workspace-link.js.map +1 -0
- package/docs/examples.json +37 -1
- package/docs/llms-full.txt +1598 -44
- package/docs/types.json +5157 -172
- package/package.json +9 -9
- package/src/assure-hydration.ts +6 -1
- package/src/assure.ts +4 -2
- package/src/check-diagnostics.ts +1219 -0
- package/src/check-scan.ts +1825 -0
- package/src/check.ts +47 -2731
- package/src/cli.ts +291 -10
- package/src/command-catalog.ts +177 -2
- package/src/doctor.ts +99 -8
- package/src/env-file.ts +121 -0
- package/src/fix-recipes.ts +101 -15
- package/src/frontend-guidance.ts +259 -0
- package/src/internal/reserved-segment-codemod.ts +150 -0
- package/src/internal/typescript-import.ts +61 -11
- package/src/introspect.ts +82 -21
- package/src/levels-tool.ts +6 -0
- package/src/load.ts +4 -1
- package/src/mcp-context.ts +266 -0
- package/src/mcp-docs-tools.ts +37 -0
- package/src/mcp-exec.ts +1040 -0
- package/src/mcp-http.ts +1 -1
- package/src/mcp-io.ts +118 -0
- package/src/mcp-reflect.ts +140 -0
- package/src/mcp-root.ts +62 -4
- package/src/mcp.ts +61 -1436
- package/src/openapi-tool.ts +32 -2
- package/src/openapi-types.ts +261 -0
- package/src/port.ts +2 -1
- package/src/project-facts.ts +2 -4
- package/src/recipes/3.0.0.ts +24 -0
- package/src/recipes/index.ts +2 -0
- package/src/release-verification.ts +22 -147
- package/src/rules/codes.ts +4 -0
- package/src/rules/islands.ts +171 -0
- package/src/rules/nano.ts +295 -0
- package/src/rules/routes.ts +17 -30
- package/src/rules/security.ts +40 -4
- package/src/scaffold.ts +169 -9
- package/src/search-terms.ts +7 -3
- package/src/stylex-migrate.ts +1139 -0
- package/src/sync-manifest.ts +2 -1
- package/src/verification-plan.ts +242 -0
- package/src/work-graph.ts +6 -3
- package/src/workspace-link.ts +80 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { diagnostic } from "../diagnostics.js";
|
|
2
|
+
import { importProjectTypeScript } from "../internal/typescript-import.js";
|
|
3
|
+
/**
|
|
4
|
+
* The nano lane lints (`@nifrajs/web/nano`). nano is deliberately explicit - every reactive edge is a
|
|
5
|
+
* `bind`/`bindList` call or a `computed(fn, [deps])` - and that is exactly what makes its three
|
|
6
|
+
* mistakes STATICALLY catchable, the property a framework's auto-tracked reactivity cannot offer:
|
|
7
|
+
*
|
|
8
|
+
* NF-C021 a `bind`/`bindList`/`bindResource` whose disposer is discarded (leaks on teardown)
|
|
9
|
+
* NF-C022 a `bindList` keyed by the array index (breaks add/remove/reorder)
|
|
10
|
+
* NF-C023 a `computed`/`resource` `(fn, [deps])` reading a signal its `deps` omit (won't recompute/refetch)
|
|
11
|
+
*
|
|
12
|
+
* All three warn (never block): a false positive must never fail a build, and each maps to a fix
|
|
13
|
+
* recipe (`nano.*`). Deliberately conservative - only the unambiguous authoring shapes are inspected.
|
|
14
|
+
*/
|
|
15
|
+
const parseCache = new WeakMap();
|
|
16
|
+
function parsedTree(ts, sources, file) {
|
|
17
|
+
let files = parseCache.get(sources);
|
|
18
|
+
if (files === undefined) {
|
|
19
|
+
files = new Map();
|
|
20
|
+
parseCache.set(sources, files);
|
|
21
|
+
}
|
|
22
|
+
const cached = files.get(file);
|
|
23
|
+
if (cached !== undefined)
|
|
24
|
+
return cached?.tree;
|
|
25
|
+
const source = sources.read(file);
|
|
26
|
+
if (source === undefined) {
|
|
27
|
+
files.set(file, null);
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const kind = /\.tsx?$/.test(file) ? ts.ScriptKind.TSX : ts.ScriptKind.JS;
|
|
31
|
+
const tree = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true, kind);
|
|
32
|
+
files.set(file, { tree });
|
|
33
|
+
return tree;
|
|
34
|
+
}
|
|
35
|
+
const isFn = (ts, n) => ts.isArrowFunction(n) || ts.isFunctionExpression(n);
|
|
36
|
+
/** Names bound to a `signal(...)` or `computed(...)` result anywhere in the file - the reactive cells
|
|
37
|
+
* a `computed` body may read and must therefore declare. */
|
|
38
|
+
function reactiveBindings(ts, tree) {
|
|
39
|
+
const names = new Set();
|
|
40
|
+
const visit = (n) => {
|
|
41
|
+
if (ts.isVariableDeclaration(n) &&
|
|
42
|
+
ts.isIdentifier(n.name) &&
|
|
43
|
+
n.initializer !== undefined &&
|
|
44
|
+
ts.isCallExpression(n.initializer) &&
|
|
45
|
+
ts.isIdentifier(n.initializer.expression) &&
|
|
46
|
+
(n.initializer.expression.text === "signal" ||
|
|
47
|
+
n.initializer.expression.text === "computed" ||
|
|
48
|
+
n.initializer.expression.text === "resource")) {
|
|
49
|
+
names.add(n.name.text);
|
|
50
|
+
}
|
|
51
|
+
ts.forEachChild(n, visit);
|
|
52
|
+
};
|
|
53
|
+
visit(tree);
|
|
54
|
+
return names;
|
|
55
|
+
}
|
|
56
|
+
/** Reactive identifiers read as `x.get()` inside `fn`. */
|
|
57
|
+
function getsInside(ts, fn, reactive) {
|
|
58
|
+
const reads = new Set();
|
|
59
|
+
const visit = (n) => {
|
|
60
|
+
if (ts.isCallExpression(n) &&
|
|
61
|
+
ts.isPropertyAccessExpression(n.expression) &&
|
|
62
|
+
n.expression.name.text === "get" &&
|
|
63
|
+
ts.isIdentifier(n.expression.expression) &&
|
|
64
|
+
reactive.has(n.expression.expression.text)) {
|
|
65
|
+
reads.add(n.expression.expression.text);
|
|
66
|
+
}
|
|
67
|
+
ts.forEachChild(n, visit);
|
|
68
|
+
};
|
|
69
|
+
visit(fn);
|
|
70
|
+
return reads;
|
|
71
|
+
}
|
|
72
|
+
/** The identifiers listed in a `computed`'s deps array literal (non-identifier entries are ignored -
|
|
73
|
+
* an unusual deps shape simply isn't linted rather than mis-flagged). */
|
|
74
|
+
function declaredDeps(ts, depsArg) {
|
|
75
|
+
const deps = new Set();
|
|
76
|
+
if (ts.isArrayLiteralExpression(depsArg)) {
|
|
77
|
+
for (const el of depsArg.elements)
|
|
78
|
+
if (ts.isIdentifier(el))
|
|
79
|
+
deps.add(el.text);
|
|
80
|
+
}
|
|
81
|
+
return deps;
|
|
82
|
+
}
|
|
83
|
+
/** A `bind`/`bindList` call whose return value is discarded: its immediate parent is the expression
|
|
84
|
+
* statement itself (not an assignment, array element, `return`, `await`, or argument). */
|
|
85
|
+
function isDiscarded(ts, call) {
|
|
86
|
+
const parent = call.parent;
|
|
87
|
+
return parent !== undefined && ts.isExpressionStatement(parent);
|
|
88
|
+
}
|
|
89
|
+
/** For a `bindList(src, container, { key, ... })`, the `key` property's function if it is an inline
|
|
90
|
+
* arrow/function literal. */
|
|
91
|
+
function keyFn(ts, call) {
|
|
92
|
+
const opts = call.arguments[2];
|
|
93
|
+
if (opts === undefined || !ts.isObjectLiteralExpression(opts))
|
|
94
|
+
return undefined;
|
|
95
|
+
for (const prop of opts.properties) {
|
|
96
|
+
if (ts.isPropertyAssignment(prop) &&
|
|
97
|
+
ts.isIdentifier(prop.name) &&
|
|
98
|
+
prop.name.text === "key" &&
|
|
99
|
+
isFn(ts, prop.initializer)) {
|
|
100
|
+
return prop.initializer;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
/** Does `fn`'s body return its own second parameter (the index) directly? `key: (_, i) => i`, the
|
|
106
|
+
* classic reorder-breaking key. Conservative: only a bare `return <secondParam>` / concise `=> i`. */
|
|
107
|
+
function returnsSecondParam(ts, fn) {
|
|
108
|
+
if (fn.parameters.length < 2)
|
|
109
|
+
return false;
|
|
110
|
+
const second = fn.parameters[1];
|
|
111
|
+
if (second === undefined || !ts.isIdentifier(second.name))
|
|
112
|
+
return false;
|
|
113
|
+
const idx = second.name.text;
|
|
114
|
+
const isIdxRef = (e) => ts.isIdentifier(e) && e.text === idx;
|
|
115
|
+
if (ts.isArrowFunction(fn) && !ts.isBlock(fn.body))
|
|
116
|
+
return isIdxRef(fn.body);
|
|
117
|
+
let found = false;
|
|
118
|
+
const visit = (n) => {
|
|
119
|
+
if (found)
|
|
120
|
+
return;
|
|
121
|
+
if (isFn(ts, n) || ts.isFunctionDeclaration(n))
|
|
122
|
+
return; // not a nested fn's return
|
|
123
|
+
if (ts.isReturnStatement(n) && n.expression !== undefined && isIdxRef(n.expression)) {
|
|
124
|
+
found = true;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
ts.forEachChild(n, visit);
|
|
128
|
+
};
|
|
129
|
+
ts.forEachChild(fn, visit);
|
|
130
|
+
return found;
|
|
131
|
+
}
|
|
132
|
+
const lineOf = (tree, n) => tree.getLineAndCharacterOfPosition(n.getStart(tree)).line + 1;
|
|
133
|
+
function toolchainMissing(code) {
|
|
134
|
+
return diagnostic({
|
|
135
|
+
code,
|
|
136
|
+
severity: "warn",
|
|
137
|
+
message: `nano lint (${code}) did NOT run - TypeScript is not installed, so this report says nothing about it`,
|
|
138
|
+
fix: { recipe: "toolchain.install-typescript", command: "bun add -d typescript" },
|
|
139
|
+
verify: "nifra check --lints-only",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
export const nanoBindCleanupRule = {
|
|
143
|
+
code: "NF-C021",
|
|
144
|
+
title: "nano binding cleanup check",
|
|
145
|
+
async scan(ctx) {
|
|
146
|
+
const ts = await importProjectTypeScript(ctx.root);
|
|
147
|
+
if (ts === undefined)
|
|
148
|
+
return [toolchainMissing("NF-C021")];
|
|
149
|
+
const findings = [];
|
|
150
|
+
for (const file of ctx.project.source.files) {
|
|
151
|
+
const tree = parsedTree(ts, ctx.project.source, file);
|
|
152
|
+
if (tree === undefined)
|
|
153
|
+
continue;
|
|
154
|
+
const visit = (n) => {
|
|
155
|
+
if (ts.isCallExpression(n) &&
|
|
156
|
+
ts.isIdentifier(n.expression) &&
|
|
157
|
+
(n.expression.text === "bind" ||
|
|
158
|
+
n.expression.text === "bindList" ||
|
|
159
|
+
n.expression.text === "bindResource") &&
|
|
160
|
+
isDiscarded(ts, n)) {
|
|
161
|
+
findings.push(diagnostic({
|
|
162
|
+
code: "NF-C021",
|
|
163
|
+
severity: "warn",
|
|
164
|
+
file,
|
|
165
|
+
line: lineOf(tree, n),
|
|
166
|
+
message: `${n.expression.text}(...) discards its cleanup - collect the returned disposer and call it on teardown, or it leaks on soft-nav`,
|
|
167
|
+
evidence: [`${n.expression.text}(...) as a bare statement`],
|
|
168
|
+
fix: { recipe: "nano.collect-cleanup", command: "nifra_docs nano" },
|
|
169
|
+
verify: "nifra check --lints-only",
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
ts.forEachChild(n, visit);
|
|
173
|
+
};
|
|
174
|
+
visit(tree);
|
|
175
|
+
}
|
|
176
|
+
return findings;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
export const nanoListKeyRule = {
|
|
180
|
+
code: "NF-C022",
|
|
181
|
+
title: "nano bindList key check",
|
|
182
|
+
async scan(ctx) {
|
|
183
|
+
const ts = await importProjectTypeScript(ctx.root);
|
|
184
|
+
if (ts === undefined)
|
|
185
|
+
return [toolchainMissing("NF-C022")];
|
|
186
|
+
const findings = [];
|
|
187
|
+
for (const file of ctx.project.source.files) {
|
|
188
|
+
const tree = parsedTree(ts, ctx.project.source, file);
|
|
189
|
+
if (tree === undefined)
|
|
190
|
+
continue;
|
|
191
|
+
const visit = (n) => {
|
|
192
|
+
if (ts.isCallExpression(n) &&
|
|
193
|
+
ts.isIdentifier(n.expression) &&
|
|
194
|
+
n.expression.text === "bindList") {
|
|
195
|
+
const key = keyFn(ts, n);
|
|
196
|
+
if (key !== undefined && returnsSecondParam(ts, key)) {
|
|
197
|
+
findings.push(diagnostic({
|
|
198
|
+
code: "NF-C022",
|
|
199
|
+
severity: "warn",
|
|
200
|
+
file,
|
|
201
|
+
line: lineOf(tree, key),
|
|
202
|
+
message: "bindList key is the array index - add/remove/reorder will reuse the wrong node. Key by a stable id on the item instead",
|
|
203
|
+
evidence: ["key: (_, i) => i"],
|
|
204
|
+
fix: { recipe: "nano.stable-key", command: "nifra_docs nano" },
|
|
205
|
+
verify: "nifra check --lints-only",
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
ts.forEachChild(n, visit);
|
|
210
|
+
};
|
|
211
|
+
visit(tree);
|
|
212
|
+
}
|
|
213
|
+
return findings;
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
export const nanoComputedDepsRule = {
|
|
217
|
+
code: "NF-C023",
|
|
218
|
+
title: "nano computed deps check",
|
|
219
|
+
async scan(ctx) {
|
|
220
|
+
const ts = await importProjectTypeScript(ctx.root);
|
|
221
|
+
if (ts === undefined)
|
|
222
|
+
return [toolchainMissing("NF-C023")];
|
|
223
|
+
const findings = [];
|
|
224
|
+
for (const file of ctx.project.source.files) {
|
|
225
|
+
const tree = parsedTree(ts, ctx.project.source, file);
|
|
226
|
+
if (tree === undefined)
|
|
227
|
+
continue;
|
|
228
|
+
const reactive = reactiveBindings(ts, tree);
|
|
229
|
+
if (reactive.size === 0)
|
|
230
|
+
continue;
|
|
231
|
+
const visit = (n) => {
|
|
232
|
+
const fnArg = ts.isCallExpression(n) ? n.arguments[0] : undefined;
|
|
233
|
+
const depsArg = ts.isCallExpression(n) ? n.arguments[1] : undefined;
|
|
234
|
+
const callName = ts.isCallExpression(n) && ts.isIdentifier(n.expression) ? n.expression.text : undefined;
|
|
235
|
+
if ((callName === "computed" || callName === "resource") &&
|
|
236
|
+
fnArg !== undefined &&
|
|
237
|
+
depsArg !== undefined &&
|
|
238
|
+
isFn(ts, fnArg)) {
|
|
239
|
+
const reads = getsInside(ts, fnArg, reactive);
|
|
240
|
+
const deps = declaredDeps(ts, depsArg);
|
|
241
|
+
const missing = [...reads].filter((r) => !deps.has(r));
|
|
242
|
+
if (missing.length > 0) {
|
|
243
|
+
const verb = callName === "resource" ? "refetch" : "recompute";
|
|
244
|
+
findings.push(diagnostic({
|
|
245
|
+
code: "NF-C023",
|
|
246
|
+
severity: "warn",
|
|
247
|
+
file,
|
|
248
|
+
line: lineOf(tree, n),
|
|
249
|
+
message: `${callName} reads ${JSON.stringify([...reads])} but its deps declare ${JSON.stringify([...deps])} - it will not ${verb} when ${missing.join(", ")} changes. Add ${missing.join(", ")} to the deps array`,
|
|
250
|
+
evidence: [`missing dep: ${missing.join(", ")}`],
|
|
251
|
+
fix: { recipe: "nano.declare-deps", command: "nifra_docs nano" },
|
|
252
|
+
verify: "nifra check --lints-only",
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
ts.forEachChild(n, visit);
|
|
257
|
+
};
|
|
258
|
+
visit(tree);
|
|
259
|
+
}
|
|
260
|
+
return findings;
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
export const nanoRules = Object.freeze([nanoBindCleanupRule, nanoListKeyRule, nanoComputedDepsRule]);
|
|
264
|
+
//# sourceMappingURL=nano.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nano.js","sourceRoot":"","sources":["../../src/rules/nano.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAA;AA4DxD,eAAO,MAAM,mBAAmB,EAAE,SAoCjC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAgChC,CAAA;AAED,eAAO,MAAM,UAAU,sBAA2D,CAAA"}
|
package/dist/rules/routes.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RESERVED_KEY_READOUT, reservedKeyFor } from "@nifrajs/client";
|
|
1
2
|
import { diagnostic } from "../diagnostics.js";
|
|
2
3
|
import { commentBlockHasMarker } from "./comment-markers.js";
|
|
3
4
|
/**
|
|
@@ -5,26 +6,18 @@ import { commentBlockHasMarker } from "./comment-markers.js";
|
|
|
5
6
|
* once before the registry runs - no rule re-walks source).
|
|
6
7
|
*
|
|
7
8
|
* NF-C018 exists because the typed client's proxy intercepts a fixed set of property names before
|
|
8
|
-
* path resolution (`resolveSegment` + the thenable guard in @nifrajs/client)
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
9
|
+
* path resolution (`resolveSegment` + the thenable guard in @nifrajs/client). A route whose path
|
|
10
|
+
* contains a static segment spelling one of these cannot be reached by DOT ACCESS -
|
|
11
|
+
* `api.delete.post` resolves the DELETE verb, not the path. The typed spelling is a call on the
|
|
12
|
+
* parent node (`api.api("delete").post()`, treaty.ts `SegmentCall`), and the client type rejects
|
|
13
|
+
* the dot access with the same guidance - so the collision is a warning that teaches the call
|
|
14
|
+
* spelling, not a blocking error: the route IS reachable, just not by the spelling its name
|
|
15
|
+
* suggests.
|
|
16
|
+
*
|
|
17
|
+
* The set itself is NOT copied here. It comes from `@nifrajs/client`'s `reserved.ts`, which is the
|
|
18
|
+
* one place it is written down and the one place the freeze policy lives - a lint that carried its
|
|
19
|
+
* own copy is a lint that can disagree with the compiler it is explaining.
|
|
15
20
|
*/
|
|
16
|
-
const RESERVED_VERB_SEGMENTS = new Set([
|
|
17
|
-
"get",
|
|
18
|
-
"post",
|
|
19
|
-
"put",
|
|
20
|
-
"patch",
|
|
21
|
-
"delete",
|
|
22
|
-
"head",
|
|
23
|
-
"options",
|
|
24
|
-
]);
|
|
25
|
-
// Intercepted by exact match only (`key === "subscribe"` etc.), unlike the lowercased verbs.
|
|
26
|
-
const RESERVED_EXACT_SEGMENTS = new Set(["subscribe", "ws", "index", "then"]);
|
|
27
|
-
const RESERVED_READOUT = "get/post/put/patch/delete/head/options (any casing), subscribe, ws, index, then";
|
|
28
21
|
/** Opt-out pragma for a route deliberately served only to NON-typed-client consumers. */
|
|
29
22
|
const RESERVED_SEGMENT_PRAGMA = "nifra-expect reserved-segment";
|
|
30
23
|
/** Parse-don't-cast over the project fact: a malformed entry is dropped, never trusted. */
|
|
@@ -54,15 +47,6 @@ function routeEscapeHint(path, colliding) {
|
|
|
54
47
|
const before = segments.slice(0, Math.max(segments.indexOf(colliding), 0));
|
|
55
48
|
return `${["api", ...before].join(".")}("${colliding}")`;
|
|
56
49
|
}
|
|
57
|
-
/** The reserved key a static path segment collides with, or undefined. Params/wildcards never collide. */
|
|
58
|
-
function reservedCollision(segment) {
|
|
59
|
-
if (segment.startsWith(":") || segment.startsWith("*"))
|
|
60
|
-
return undefined;
|
|
61
|
-
if (RESERVED_EXACT_SEGMENTS.has(segment))
|
|
62
|
-
return segment;
|
|
63
|
-
const lower = segment.toLowerCase();
|
|
64
|
-
return RESERVED_VERB_SEGMENTS.has(lower) ? lower : undefined;
|
|
65
|
-
}
|
|
66
50
|
export const reservedSegmentRule = {
|
|
67
51
|
code: "NF-C018",
|
|
68
52
|
title: "Route segment collides with a reserved client proxy key",
|
|
@@ -73,7 +57,7 @@ export const reservedSegmentRule = {
|
|
|
73
57
|
for (const segment of route.path.split("/")) {
|
|
74
58
|
if (segment === "")
|
|
75
59
|
continue;
|
|
76
|
-
const collision =
|
|
60
|
+
const collision = reservedKeyFor(segment);
|
|
77
61
|
if (collision === undefined)
|
|
78
62
|
continue;
|
|
79
63
|
let lines = linesByFile.get(route.file);
|
|
@@ -88,8 +72,11 @@ export const reservedSegmentRule = {
|
|
|
88
72
|
severity: "warn",
|
|
89
73
|
file: route.file,
|
|
90
74
|
line: route.line,
|
|
91
|
-
message: `${route.method} ${route.path} - segment '${segment}' collides with the reserved client proxy key '${collision}' (reserved: ${
|
|
75
|
+
message: `${route.method} ${route.path} - segment '${segment}' collides with the reserved client proxy key '${collision}' (reserved: ${RESERVED_KEY_READOUT}); dot access cannot reach it - call the parent node with the segment instead (\`${routeEscapeHint(route.path, segment)}\`), rename the segment, or mark an intentionally non-typed-client route with \`// ${RESERVED_SEGMENT_PRAGMA}\` above the registration. \`nifra fix --code NF-C018\` rewrites the broken call sites for you`,
|
|
92
76
|
evidence: [`${route.method} ${route.path}`, `segment: ${segment}`],
|
|
77
|
+
// The route is fine; what needs editing is every typed-client call site the collision
|
|
78
|
+
// broke, which the recipe finds from the compiler rather than from this one finding.
|
|
79
|
+
fix: { recipe: "client.reserved-segment", command: "nifra fix --code NF-C018" },
|
|
93
80
|
verify: "nifra check --lints-only",
|
|
94
81
|
}));
|
|
95
82
|
break; // one finding per route, even if several segments collide
|
package/dist/rules/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAA;AAyHxD,eAAO,MAAM,oBAAoB,EAAE,SA2DlC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,SA8CxB,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,SAgE9B,CAAA;AAiBD,eAAO,MAAM,uBAAuB,EAAE,SA2DrC,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,SA8ClC,CAAA;AAWD,eAAO,MAAM,wBAAwB,EAAE,SAuCtC,CAAA;AAID,eAAO,MAAM,0BAA0B,EAAE,SAsDxC,CAAA;AAED,eAAO,MAAM,aAAa,sBAQxB,CAAA"}
|
package/dist/rules/security.js
CHANGED
|
@@ -54,9 +54,28 @@ function nameOf(ts, node) {
|
|
|
54
54
|
return node.name.text;
|
|
55
55
|
return undefined;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The operand name to match secret-like patterns against for NF-S002, or undefined when the operand
|
|
59
|
+
* cannot hold runtime secret material. A property access to an uppercase-initial member
|
|
60
|
+
* (`ts.SyntaxKind.PlusToken`, `MediaKind.Audio`) reads an enum/type-constant discriminant, never a
|
|
61
|
+
* secret string or byte buffer, so comparing against it is a kind check a timing oracle does not
|
|
62
|
+
* apply to. Runtime secret fields follow the camelCase convention (`apiToken`, `signature`), so an
|
|
63
|
+
* uppercase-initial member is a safe exclusion. Identifiers stay matched in every case, so an
|
|
64
|
+
* `UPPER_SNAKE` secret constant still surfaces.
|
|
65
|
+
*/
|
|
66
|
+
function secretName(ts, node) {
|
|
67
|
+
if (ts.isPropertyAccessExpression(node)) {
|
|
68
|
+
const member = node.name.text;
|
|
69
|
+
return /^[A-Z]/.test(member) ? undefined : member;
|
|
70
|
+
}
|
|
71
|
+
return nameOf(ts, node);
|
|
72
|
+
}
|
|
57
73
|
/**
|
|
58
74
|
* Presence checks (`token === undefined`, `secret == null`, `apiKey !== ""`) and `typeof` guards are
|
|
59
75
|
* not equality over secret material - rewriting them to a timing-safe comparison would break the code.
|
|
76
|
+
* A comparison against a numeric literal (`signature !== 1`, `signatureLength !== 64`) is a
|
|
77
|
+
* length/version/discriminant check, never a secret: secrets are strings or bytes, so a number on
|
|
78
|
+
* either side proves this is not the compare a timing oracle applies to.
|
|
60
79
|
*/
|
|
61
80
|
function isPresenceComparison(ts, node) {
|
|
62
81
|
for (const side of [node.left, node.right]) {
|
|
@@ -70,6 +89,10 @@ function isPresenceComparison(ts, node) {
|
|
|
70
89
|
return true;
|
|
71
90
|
if (ts.isVoidExpression(side))
|
|
72
91
|
return true;
|
|
92
|
+
if (ts.isNumericLiteral(side))
|
|
93
|
+
return true;
|
|
94
|
+
if (ts.isPrefixUnaryExpression(side) && ts.isNumericLiteral(side.operand))
|
|
95
|
+
return true;
|
|
73
96
|
}
|
|
74
97
|
return false;
|
|
75
98
|
}
|
|
@@ -116,8 +139,8 @@ export const secretComparisonRule = {
|
|
|
116
139
|
ts.SyntaxKind.ExclamationEqualsToken,
|
|
117
140
|
].includes(node.operatorToken.kind) &&
|
|
118
141
|
!isPresenceComparison(ts, node)) {
|
|
119
|
-
const left =
|
|
120
|
-
const right =
|
|
142
|
+
const left = secretName(ts, node.left);
|
|
143
|
+
const right = secretName(ts, node.right);
|
|
121
144
|
if ((left !== undefined && SECRET.test(left)) ||
|
|
122
145
|
(right !== undefined && SECRET.test(right))) {
|
|
123
146
|
const line = tree.getLineAndCharacterOfPosition(node.getStart(tree)).line + 1;
|
|
@@ -218,9 +241,20 @@ export const failOpenGateRule = {
|
|
|
218
241
|
const name = ts.isFunctionLike(parent) && parent.name && ts.isIdentifier(parent.name)
|
|
219
242
|
? parent.name.text
|
|
220
243
|
: undefined;
|
|
221
|
-
|
|
244
|
+
// `can` only names a gate in camelCase (`canEdit`, `canAccess`) - matching it
|
|
245
|
+
// case-insensitively swept in `canonicalize…`, `cancel…`, `candidate…`, none of them
|
|
246
|
+
// authorization decisions. The other roots stay case-insensitive.
|
|
247
|
+
const gateName = name !== undefined &&
|
|
248
|
+
(/^(?:require|assert|authorize)/i.test(name) || /^can[A-Z]/.test(name));
|
|
249
|
+
if (name !== undefined && gateName) {
|
|
222
250
|
const text = node.block.getText(tree);
|
|
223
|
-
|
|
251
|
+
// A catch fails closed when it rethrows, returns an explicit denial, or hands the failure
|
|
252
|
+
// to a helper whose whole job is to fail (`fail(…)`, `deny(…)`, `reject(…)`, …). The last
|
|
253
|
+
// form is why conformance/invariant asserts that funnel every error through a
|
|
254
|
+
// `never`-returning `fail()` are not fail-open - the scanner reads no types, so it trusts
|
|
255
|
+
// the helper by name, the same trade the SQL and gate-name heuristics already make.
|
|
256
|
+
if (!/\b(?:throw|return\s+(?:false|new\s+Response|deny))/s.test(text) &&
|
|
257
|
+
!/(?:^|[^.\w])(?:fail|deny|reject|forbid|unauthorized|abort)\s*\(/s.test(text)) {
|
|
224
258
|
const line = tree.getLineAndCharacterOfPosition(node.getStart(tree)).line + 1;
|
|
225
259
|
const reviewed = hasReview(lines, line);
|
|
226
260
|
findings.push(diagnostic({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAG5D;;;;GAIG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,OAAO;QACL,UAAU,CAAC;YACT,IAAI;YACJ,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,KAAK,KAAK,IAAI,mFAAmF;YAC7G,GAAG,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,EAAE,uBAAuB,EAAE;YACjF,MAAM,EAAE,0BAA0B;SACnC,CAAC;KACH,CAAA;AACH,CAAC;AAED,MAAM,MAAM,GAAG,0DAA0D,CAAA;AACzE,MAAM,GAAG,GAAG,mDAAmD,CAAA;AAC/D,MAAM,QAAQ,GAAG,sBAAsB,CAAA;AACvC,MAAM,UAAU,GAAG,IAAI,OAAO,EAG3B,CAAA;AAEH,mGAAmG;AACnG,mGAAmG;AACnG,iDAAiD;AACjD,SAAS,SAAS,CAAC,KAAwB,EAAE,IAAY;IACvD,OAAO,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwB,EAAE,IAAY;IAC9D,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACvC,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAA;IACxD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAA;IAC9F,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAA;IAC1E,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,MAAM,CAAC,EAAgB,EAAE,IAAgB;IAChD,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAC3C,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IAC9D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,UAAU,CAAC,EAAgB,EAAE,IAAgB;IACpD,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IACnD,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,EAAgB,EAAE,IAA4B;IAC1E,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAA;QACnE,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA;QACxD,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE;YAAE,OAAO,IAAI,CAAA;QACjE,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5C,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAC1C,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAC1C,IAAI,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;IACxF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,KAAK,CAAC,EAAgB,EAAE,IAAY,EAAE,MAAc;IAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAA;IACxE,OAAO,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAC9E,CAAC;AAED,SAAS,UAAU,CACjB,EAAgB,EAChB,OAAoB,EACpB,IAAY;IAEZ,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;QACjB,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;IACrD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvB,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAc;IAC7C,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,qCAAqC;IAC5C,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,0CAA0C,CAAC,CAAA;QAC7F,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IACE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBAC3B;wBACE,EAAE,CAAC,UAAU,CAAC,uBAAuB;wBACrC,EAAE,CAAC,UAAU,CAAC,4BAA4B;wBAC1C,EAAE,CAAC,UAAU,CAAC,iBAAiB;wBAC/B,EAAE,CAAC,UAAU,CAAC,sBAAsB;qBACrC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACnC,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,EAC/B,CAAC;oBACD,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;oBACtC,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;oBACxC,IACE,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACzC,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC3C,CAAC;wBACD,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;wBAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;wBACvC,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;4BACT,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC;4BAC5D,IAAI;4BACJ,IAAI;4BACJ,OAAO,EAAE,QAAQ;gCACf,CAAC,CAAC,oDAAoD;gCACtD,CAAC,CAAC,uEAAuE;4BAC3E,QAAQ,EAAE,CAAC,IAAI,IAAI,KAAK,IAAI,mBAAmB,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;4BAClF,GAAG,CAAC,QAAQ;gCACV,CAAC,CAAC,EAAE;gCACJ,CAAC,CAAC;oCACE,GAAG,EAAE;wCACH,MAAM,EAAE,4BAA4B;wCACpC,OAAO,EAAE,0BAA0B;qCACpC;iCACF,CAAC;4BACN,MAAM,EAAE,0BAA0B;yBACnC,CAAC,CACH,CAAA;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAc;IACnC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,6BAA6B;IACpC,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAA;QAChF,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;oBAClC,MAAM,MAAM,GAAG,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC;wBACtD,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;wBACtE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;oBAClC,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;4BACjC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;4BAC5B,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCACzC,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gCAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gCACvC,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;oCACT,IAAI,EAAE,SAAS;oCACf,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oCACpC,IAAI;oCACJ,IAAI;oCACJ,OAAO,EAAE,QAAQ;wCACf,CAAC,CAAC,8DAA8D;wCAChE,CAAC,CAAC,4DAA4D;oCAChE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oCAClD,MAAM,EAAE,0BAA0B;iCACnC,CAAC,CACH,CAAA;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,gBAAgB;IACvB,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,IAAI,MAAM,GAA2B,IAAI,CAAC,MAAM,CAAA;oBAChD,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;wBAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;oBACjF,MAAM,IAAI,GACR,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;wBACtE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;wBAClB,CAAC,CAAC,SAAS,CAAA;oBACf,8EAA8E;oBAC9E,qFAAqF;oBACrF,kEAAkE;oBAClE,MAAM,QAAQ,GACZ,IAAI,KAAK,SAAS;wBAClB,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;oBACzE,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;wBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;wBACrC,0FAA0F;wBAC1F,0FAA0F;wBAC1F,8EAA8E;wBAC9E,0FAA0F;wBAC1F,oFAAoF;wBACpF,IACE,CAAC,qDAAqD,CAAC,IAAI,CAAC,IAAI,CAAC;4BACjE,CAAC,kEAAkE,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9E,CAAC;4BACD,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;4BAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;4BACvC,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;gCACT,IAAI,EAAE,SAAS;gCACf,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;gCACrC,IAAI;gCACJ,IAAI;gCACJ,OAAO,EAAE,QAAQ;oCACf,CAAC,CAAC,mDAAmD;oCACrD,CAAC,CAAC,6DAA6D;gCACjE,QAAQ,EAAE;oCACR,IAAI;oCACJ,sCAAsC;oCACtC,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC;iCACjC;gCACD,MAAM,EAAE,0BAA0B;6BACnC,CAAC,CACH,CAAA;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,8DAA8D;AAC9D,SAAS,SAAS,CAAC,EAAgB,EAAE,IAAgB,EAAE,KAAa;IAClE,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,MAAM,IAAI,GAAG,CAAC,CAAa,EAAQ,EAAE;QACnC,IAAI,IAAI;YAAE,OAAM;QAChB,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAA;YACX,OAAM;QACR,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACV,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAc;IAChD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,0CAA0C;IACjD,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;oBACxE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;oBAC7B,IAAI,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;4BAClC,IACE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;gCAC7B,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ;gCAClC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EACnF,CAAC;gCACD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAA;gCAC3B,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAA;gCACpC,mFAAmF;gCACnF,oFAAoF;gCACpF,+CAA+C;gCAC/C,MAAM,aAAa,GACjB,KAAK,KAAK,SAAS;oCACjB,CAAC,CAAC,IAAI;oCACN,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;wCACtB,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;wCACrC,CAAC,CAAC,KAAK,CAAA;gCACb,IAAI,aAAa,EAAE,CAAC;oCAClB,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;oCAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;oCACvC,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;wCACT,IAAI,EAAE,SAAS;wCACf,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;wCACpC,IAAI;wCACJ,IAAI;wCACJ,OAAO,EAAE,QAAQ;4CACf,CAAC,CAAC,iEAAiE;4CACnE,CAAC,CAAC,qHAAqH;wCACzH,QAAQ,EAAE,CAAC,kBAAkB,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wCAChE,MAAM,EAAE,0BAA0B;qCACnC,CAAC,CACH,CAAA;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAc;IAC7C,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,2BAA2B;IAClC,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAA;QACnF,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;oBAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjC,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC;4BAAE,SAAQ;wBAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;4BAClC,IACE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;gCAC7B,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;gCACpC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EACnD,CAAC;gCACD,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;gCAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gCACvC,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;oCACT,IAAI,EAAE,SAAS;oCACf,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oCACpC,IAAI;oCACJ,IAAI;oCACJ,OAAO,EAAE,QAAQ;wCACf,CAAC,CAAC,oDAAoD;wCACtD,CAAC,CAAC,+HAA+H;oCACnI,QAAQ,EAAE,CAAC,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oCAC9D,MAAM,EAAE,0BAA0B;iCACnC,CAAC,CACH,CAAA;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,MAAM,cAAc,GAAqC;IACvD,eAAe,EACb,gHAAgH;IAClH,cAAc,EACZ,yGAAyG;IAC3G,iBAAiB,EACf,yFAAyF;CAC5F,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAc;IACjD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,+BAA+B;IACtC,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBACzF,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;oBAClC,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;oBACzE,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;wBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;wBAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;wBACvC,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;4BACT,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;4BACpC,IAAI;4BACJ,IAAI;4BACJ,OAAO,EAAE,QAAQ;gCACf,CAAC,CAAC,GAAG,IAAI,gDAAgD;gCACzD,CAAC,CAAC,GAAG,IAAI,KAAK,WAAW,EAAE;4BAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;4BAClD,MAAM,EAAE,0BAA0B;yBACnC,CAAC,CACH,CAAA;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,MAAM,aAAa,GAAG,qBAAqB,CAAA;AAE3C,MAAM,CAAC,MAAM,0BAA0B,GAAc;IACnD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,kDAAkD;IACzD,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAA;QAC9E,MAAM,QAAQ,GAAiB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAQ;YAClC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;YACvB,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;gBACvC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;oBAC1C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;wBACxD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;wBACjC,MAAM,SAAS,GACb,OAAO,KAAK,SAAS;4BACrB,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC;4BAC/B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;wBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAChC,CAAC,GAAG,EAAE,EAAE,CACN,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC;4BACjC,GAAG,CAAC,UAAU,CAAC,IAAI,CACjB,CAAC,IAAI,EAAE,EAAE,CACP,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;gCAC7B,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ;gCAClC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CACtD,CACJ,CAAA;wBACD,gFAAgF;wBAChF,IAAI,MAAM,IAAI,CAAC,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;4BACrF,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;4BAC7E,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC;gCACT,IAAI,EAAE,SAAS;gCACf,QAAQ,EAAE,MAAM;gCAChB,IAAI;gCACJ,IAAI;gCACJ,OAAO,EACL,sHAAsH;gCACxH,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gCACxB,MAAM,EAAE,0BAA0B;6BACnC,CAAC,CACH,CAAA;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,gBAAgB;IAChB,oBAAoB;IACpB,UAAU;IACV,uBAAuB;IACvB,oBAAoB;IACpB,wBAAwB;IACxB,0BAA0B;CAC3B,CAAC,CAAA"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -4,11 +4,17 @@
|
|
|
4
4
|
* `filePathToPatterns`: `:id`/`[id]` → `[id]`, `*rest`/`[...rest]` → `[...rest]`, `[[lang]]` optional,
|
|
5
5
|
* `/` → `index`. The framework (→ file extension) comes from the project's `clientModule`.
|
|
6
6
|
*
|
|
7
|
-
* Page stubs are emitted
|
|
8
|
-
* for
|
|
9
|
-
*
|
|
7
|
+
* Page stubs are emitted for the JSX family (react/preact/solid - one shared, verified shape) and
|
|
8
|
+
* for vanilla (a zero-runtime `html` page carrying the golden island pattern); for vue/svelte we
|
|
9
|
+
* return the correct PATH + the route-module contract and point at `nifra_example` for the body,
|
|
10
|
+
* rather than hand-writing an SFC we can't typecheck here.
|
|
10
11
|
*/
|
|
11
12
|
export type Framework = "react" | "preact" | "solid" | "vue" | "svelte" | "vanilla";
|
|
13
|
+
/** A scaffold flavour on top of the framework. `default` is the plain page stub; `stateful` only
|
|
14
|
+
* applies to vanilla and emits the golden **nano** pattern (explicit reactivity: `signal` +
|
|
15
|
+
* `computed(fn, [deps])` + keyed `bindList` + collected cleanups) instead of the static island stub -
|
|
16
|
+
* the AI-safe small-app lane whose three mistakes NF-C021/C022/C023 catch statically. */
|
|
17
|
+
export type ScaffoldVariant = "default" | "stateful";
|
|
12
18
|
/** Derive the framework from a `clientModule` like `@nifrajs/web-react/client`. Defaults to react. */
|
|
13
19
|
export declare function frameworkFromClientModule(clientModule: string | undefined): Framework;
|
|
14
20
|
/** Map a URL path to its `routes/` file path (relative to `routes/`, without extension prefix dir).
|
|
@@ -25,11 +31,11 @@ export interface ScaffoldWriteResult extends ScaffoldResult {
|
|
|
25
31
|
}
|
|
26
32
|
/** Scaffold a page route for `urlPath` under the project's `framework`. Returns the correct file path
|
|
27
33
|
* always; a ready-to-write stub for the JSX family, contract guidance otherwise. */
|
|
28
|
-
export declare function scaffoldRoute(urlPath: string, framework: Framework): ScaffoldResult;
|
|
34
|
+
export declare function scaffoldRoute(urlPath: string, framework: Framework, variant?: ScaffoldVariant): ScaffoldResult;
|
|
29
35
|
/** Write a scaffolded route stub when the framework has a verified ready-to-write body. The write is
|
|
30
36
|
* intentionally conservative: it refuses non-JSX stubs (where we only return contract guidance) and
|
|
31
37
|
* uses `wx`, so an agent cannot overwrite user work by accident. */
|
|
32
|
-
export declare function writeScaffoldRoute(cwd: string, urlPath: string, framework: Framework): Promise<ScaffoldWriteResult>;
|
|
38
|
+
export declare function writeScaffoldRoute(cwd: string, urlPath: string, framework: Framework, variant?: ScaffoldVariant): Promise<ScaffoldWriteResult>;
|
|
33
39
|
/** Render the tool result as markdown - the file path, the stub (if any), and the contract note. */
|
|
34
|
-
export declare function renderScaffold(urlPath: string, framework: Framework): string;
|
|
40
|
+
export declare function renderScaffold(urlPath: string, framework: Framework, variant?: ScaffoldVariant): string;
|
|
35
41
|
//# sourceMappingURL=scaffold.d.ts.map
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEnF;;;yFAGyF;AACzF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,CAAA;AAWpD,sGAAsG;AACtG,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAGrF;AAWD;mFACmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUpE;AAiKD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;oFACoF;AACpF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,eAA2B,GACnC,cAAc,CA+BhB;AA0CD;;oEAEoE;AACpE,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,eAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED,oGAAoG;AACpG,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,eAA2B,GACnC,MAAM,CASR"}
|