@nifrajs/cli 4.0.0 → 5.0.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 +3 -0
- package/dist/agent-files.d.ts +107 -0
- package/dist/agent-files.d.ts.map +1 -0
- package/dist/agent-files.js +162 -0
- package/dist/agent-files.js.map +1 -0
- package/dist/app-files.d.ts +6 -0
- package/dist/app-files.d.ts.map +1 -1
- package/dist/app-files.js +27 -2
- package/dist/app-files.js.map +1 -1
- package/dist/assure-hydration.d.ts.map +1 -1
- package/dist/assure-hydration.js +7 -2
- package/dist/assure-hydration.js.map +1 -1
- package/dist/capabilities-tool.d.ts.map +1 -1
- package/dist/capabilities-tool.js +13 -3
- package/dist/capabilities-tool.js.map +1 -1
- package/dist/check-diagnostics.d.ts +20 -2
- package/dist/check-diagnostics.d.ts.map +1 -1
- package/dist/check-diagnostics.js +54 -7
- package/dist/check-diagnostics.js.map +1 -1
- package/dist/check-scan.d.ts +75 -22
- package/dist/check-scan.d.ts.map +1 -1
- package/dist/check-scan.js +1475 -310
- package/dist/check-scan.js.map +1 -1
- package/dist/check.d.ts +2 -2
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +192 -65
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +112 -5
- package/dist/cli.js.map +1 -1
- package/dist/client-module.d.ts +18 -0
- package/dist/client-module.d.ts.map +1 -0
- package/dist/client-module.js +49 -0
- package/dist/client-module.js.map +1 -0
- package/dist/command-catalog.d.ts +21 -5
- package/dist/command-catalog.d.ts.map +1 -1
- package/dist/command-catalog.js +138 -38
- package/dist/command-catalog.js.map +1 -1
- package/dist/component-check.d.ts +13 -0
- package/dist/component-check.d.ts.map +1 -0
- package/dist/component-check.js +59 -0
- package/dist/component-check.js.map +1 -0
- package/dist/contract-proof.d.ts +1 -1
- package/dist/contract-proof.d.ts.map +1 -1
- package/dist/contract-proof.js +2 -24
- package/dist/contract-proof.js.map +1 -1
- package/dist/contracts.d.ts +19 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +50 -3
- package/dist/contracts.js.map +1 -1
- package/dist/db-tool.d.ts.map +1 -1
- package/dist/db-tool.js +4 -3
- package/dist/db-tool.js.map +1 -1
- package/dist/dev-bun-config.d.ts +5 -1
- package/dist/dev-bun-config.d.ts.map +1 -1
- package/dist/dev-bun-config.js +44 -11
- package/dist/dev-bun-config.js.map +1 -1
- package/dist/diagnostics.d.ts +3 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/diff-tool.d.ts +9 -8
- package/dist/diff-tool.d.ts.map +1 -1
- package/dist/diff-tool.js +28 -24
- package/dist/diff-tool.js.map +1 -1
- package/dist/doctor.d.ts +13 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +23 -15
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.d.ts +6 -0
- package/dist/env-file.d.ts.map +1 -1
- package/dist/env-file.js +6 -0
- package/dist/env-file.js.map +1 -1
- package/dist/fix-recipes.d.ts.map +1 -1
- package/dist/fix-recipes.js +28 -3
- package/dist/fix-recipes.js.map +1 -1
- package/dist/hand-built-manifest.d.ts +27 -0
- package/dist/hand-built-manifest.d.ts.map +1 -0
- package/dist/hand-built-manifest.js +124 -0
- package/dist/hand-built-manifest.js.map +1 -0
- package/dist/hooks-report.d.ts +23 -0
- package/dist/hooks-report.d.ts.map +1 -0
- package/dist/hooks-report.js +104 -0
- package/dist/hooks-report.js.map +1 -0
- package/dist/init-agents.d.ts +2 -2
- package/dist/init-agents.d.ts.map +1 -1
- package/dist/init-agents.js +17 -11
- package/dist/init-agents.js.map +1 -1
- package/dist/internal/nifra-project.d.ts +41 -0
- package/dist/internal/nifra-project.d.ts.map +1 -0
- package/dist/internal/nifra-project.js +183 -0
- package/dist/internal/nifra-project.js.map +1 -0
- package/dist/internal/project-specifiers.d.ts +16 -0
- package/dist/internal/project-specifiers.d.ts.map +1 -0
- package/dist/internal/project-specifiers.js +396 -0
- package/dist/internal/project-specifiers.js.map +1 -0
- package/dist/internal/script-kind.d.ts.map +1 -1
- package/dist/internal/script-kind.js +2 -1
- package/dist/internal/script-kind.js.map +1 -1
- package/dist/internal/source-facts.d.ts +2 -0
- package/dist/internal/source-facts.d.ts.map +1 -1
- package/dist/internal/source-facts.js +11 -0
- package/dist/internal/source-facts.js.map +1 -1
- 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 +5 -3
- package/dist/internal/typescript-import.js.map +1 -1
- package/dist/introspect.d.ts +6 -6
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +55 -24
- package/dist/introspect.js.map +1 -1
- package/dist/levels-tool.d.ts.map +1 -1
- package/dist/levels-tool.js +93 -15
- package/dist/levels-tool.js.map +1 -1
- package/dist/load.d.ts +31 -8
- package/dist/load.d.ts.map +1 -1
- package/dist/load.js +37 -7
- package/dist/load.js.map +1 -1
- package/dist/mcp-context.d.ts +5 -5
- package/dist/mcp-context.d.ts.map +1 -1
- package/dist/mcp-context.js +2 -2
- package/dist/mcp-context.js.map +1 -1
- package/dist/mcp-exec.d.ts +12 -4
- package/dist/mcp-exec.d.ts.map +1 -1
- package/dist/mcp-exec.js +50 -13
- package/dist/mcp-exec.js.map +1 -1
- package/dist/mcp-http.js +1 -1
- package/dist/mcp-io.d.ts +17 -0
- package/dist/mcp-io.d.ts.map +1 -1
- package/dist/mcp-io.js +40 -0
- package/dist/mcp-io.js.map +1 -1
- package/dist/mcp-isolate.d.ts.map +1 -1
- package/dist/mcp-isolate.js +3 -2
- package/dist/mcp-isolate.js.map +1 -1
- package/dist/mcp-project-child.js +1 -1
- package/dist/mcp-project-child.js.map +1 -1
- package/dist/mcp-root.d.ts.map +1 -1
- package/dist/mcp-root.js +50 -10
- package/dist/mcp-root.js.map +1 -1
- package/dist/mcp-ws.d.ts.map +1 -1
- package/dist/mcp-ws.js +3 -1
- package/dist/mcp-ws.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +8 -2
- package/dist/mcp.js.map +1 -1
- package/dist/migrate-layout.d.ts +7 -0
- package/dist/migrate-layout.d.ts.map +1 -1
- package/dist/migrate-layout.js +958 -71
- package/dist/migrate-layout.js.map +1 -1
- package/dist/output-schemas.d.ts +94 -0
- package/dist/output-schemas.d.ts.map +1 -0
- package/dist/output-schemas.js +864 -0
- package/dist/output-schemas.js.map +1 -0
- package/dist/port.d.ts.map +1 -1
- package/dist/port.js +3 -2
- package/dist/port.js.map +1 -1
- package/dist/project-facts.d.ts +15 -4
- package/dist/project-facts.d.ts.map +1 -1
- package/dist/project-facts.js +1 -0
- package/dist/project-facts.js.map +1 -1
- package/dist/recipes/4.0.0.d.ts.map +1 -1
- package/dist/recipes/4.0.0.js +2 -0
- package/dist/recipes/4.0.0.js.map +1 -1
- package/dist/recipes/5.0.0.d.ts +11 -0
- package/dist/recipes/5.0.0.d.ts.map +1 -0
- package/dist/recipes/5.0.0.js +34 -0
- package/dist/recipes/5.0.0.js.map +1 -0
- package/dist/recipes/index.d.ts +7 -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/replay.d.ts.map +1 -1
- package/dist/replay.js +12 -3
- package/dist/replay.js.map +1 -1
- package/dist/review.d.ts +3 -1
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +38 -7
- package/dist/review.js.map +1 -1
- package/dist/rules/codes.d.ts +10 -0
- package/dist/rules/codes.d.ts.map +1 -1
- package/dist/rules/codes.js +10 -0
- package/dist/rules/codes.js.map +1 -1
- package/dist/rules/comment-markers.d.ts +16 -7
- package/dist/rules/comment-markers.d.ts.map +1 -1
- package/dist/rules/comment-markers.js +58 -19
- package/dist/rules/comment-markers.js.map +1 -1
- package/dist/rules/contract-visibility.d.ts +3 -0
- package/dist/rules/contract-visibility.d.ts.map +1 -0
- package/dist/rules/contract-visibility.js +337 -0
- package/dist/rules/contract-visibility.js.map +1 -0
- package/dist/rules/data-guard.d.ts +7 -0
- package/dist/rules/data-guard.d.ts.map +1 -1
- package/dist/rules/data-guard.js +319 -37
- package/dist/rules/data-guard.js.map +1 -1
- package/dist/rules/layout.d.ts +4 -0
- package/dist/rules/layout.d.ts.map +1 -0
- package/dist/rules/layout.js +19 -0
- package/dist/rules/layout.js.map +1 -0
- package/dist/rules/legacy.d.ts.map +1 -1
- package/dist/rules/legacy.js +158 -43
- package/dist/rules/legacy.js.map +1 -1
- package/dist/rules/pages.d.ts +24 -0
- package/dist/rules/pages.d.ts.map +1 -1
- package/dist/rules/pages.js +221 -3
- package/dist/rules/pages.js.map +1 -1
- package/dist/rules/routes.d.ts +6 -0
- package/dist/rules/routes.d.ts.map +1 -1
- package/dist/rules/routes.js +111 -16
- package/dist/rules/routes.js.map +1 -1
- package/dist/rules/secrets.js +2 -2
- package/dist/rules/secrets.js.map +1 -1
- package/dist/rules/security.d.ts +12 -1
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +281 -68
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/zones.d.ts +13 -0
- package/dist/rules/zones.d.ts.map +1 -1
- package/dist/rules/zones.js +192 -40
- package/dist/rules/zones.js.map +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +6 -4
- package/dist/scaffold.js.map +1 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +14 -5
- package/dist/sdk.js.map +1 -1
- package/dist/stylex-migrate.d.ts.map +1 -1
- package/dist/stylex-migrate.js +163 -7
- package/dist/stylex-migrate.js.map +1 -1
- package/dist/sync-manifest.d.ts +10 -2
- package/dist/sync-manifest.d.ts.map +1 -1
- package/dist/sync-manifest.js +42 -18
- package/dist/sync-manifest.js.map +1 -1
- package/dist/test-tool.d.ts.map +1 -1
- package/dist/test-tool.js +12 -3
- package/dist/test-tool.js.map +1 -1
- package/dist/typecheck-coverage.d.ts +20 -0
- package/dist/typecheck-coverage.d.ts.map +1 -0
- package/dist/typecheck-coverage.js +129 -0
- package/dist/typecheck-coverage.js.map +1 -0
- package/dist/upgrade.d.ts +69 -0
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +420 -77
- package/dist/upgrade.js.map +1 -1
- package/dist/verification-plan.d.ts.map +1 -1
- package/dist/verification-plan.js +11 -0
- package/dist/verification-plan.js.map +1 -1
- package/dist/version-drift.d.ts +22 -0
- package/dist/version-drift.d.ts.map +1 -0
- package/dist/version-drift.js +42 -0
- package/dist/version-drift.js.map +1 -0
- package/dist/web-app-options.d.ts +1 -1
- package/dist/web-app-options.d.ts.map +1 -1
- package/dist/web-app-options.js +1 -1
- package/dist/web-app-options.js.map +1 -1
- package/dist/work-graph.d.ts.map +1 -1
- package/dist/work-graph.js +20 -8
- package/dist/work-graph.js.map +1 -1
- package/docs/examples.json +54 -6
- package/docs/llms-full.txt +1539 -138
- package/docs/types.json +1456 -206
- package/package.json +11 -12
- package/src/agent-files.ts +203 -0
- package/src/app-files.ts +34 -4
- package/src/assure-hydration.ts +15 -2
- package/src/capabilities-tool.ts +15 -3
- package/src/check-diagnostics.ts +73 -9
- package/src/check-scan.ts +1773 -381
- package/src/check.ts +237 -76
- package/src/cli.ts +141 -5
- package/src/client-module.ts +61 -0
- package/src/command-catalog.ts +181 -47
- package/src/component-check.ts +79 -0
- package/src/contract-proof.ts +3 -25
- package/src/contracts.ts +60 -3
- package/src/db-tool.ts +5 -2
- package/src/dev-bun-config.ts +51 -10
- package/src/diagnostics.ts +3 -0
- package/src/diff-tool.ts +33 -26
- package/src/doctor.ts +43 -21
- package/src/env-file.ts +7 -0
- package/src/fix-recipes.ts +34 -3
- package/src/hand-built-manifest.ts +144 -0
- package/src/hooks-report.ts +135 -0
- package/src/init-agents.ts +17 -11
- package/src/internal/nifra-project.ts +191 -0
- package/src/internal/project-specifiers.ts +424 -0
- package/src/internal/script-kind.ts +2 -1
- package/src/internal/source-facts.ts +25 -0
- package/src/internal/typescript-import.ts +10 -3
- package/src/introspect.ts +65 -27
- package/src/levels-tool.ts +117 -20
- package/src/load.ts +78 -14
- package/src/mcp-context.ts +7 -7
- package/src/mcp-exec.ts +60 -17
- package/src/mcp-http.ts +1 -1
- package/src/mcp-io.ts +41 -0
- package/src/mcp-isolate.ts +9 -2
- package/src/mcp-project-child.ts +1 -1
- package/src/mcp-root.ts +58 -8
- package/src/mcp-ws.ts +4 -2
- package/src/mcp.ts +8 -3
- package/src/migrate-layout.ts +1109 -70
- package/src/output-schemas.ts +1084 -0
- package/src/port.ts +3 -2
- package/src/project-facts.ts +17 -3
- package/src/recipes/4.0.0.ts +2 -0
- package/src/recipes/5.0.0.ts +35 -0
- package/src/recipes/index.ts +10 -0
- package/src/replay.ts +14 -3
- package/src/review.ts +39 -10
- package/src/rules/codes.ts +10 -0
- package/src/rules/comment-markers.ts +57 -21
- package/src/rules/contract-visibility.ts +383 -0
- package/src/rules/data-guard.ts +351 -42
- package/src/rules/layout.ts +22 -0
- package/src/rules/legacy.ts +184 -51
- package/src/rules/pages.ts +238 -3
- package/src/rules/routes.ts +124 -16
- package/src/rules/secrets.ts +2 -2
- package/src/rules/security.ts +352 -71
- package/src/rules/zones.ts +205 -38
- package/src/scaffold.ts +6 -4
- package/src/sdk.ts +14 -5
- package/src/stylex-migrate.ts +134 -7
- package/src/sync-manifest.ts +48 -18
- package/src/test-tool.ts +18 -3
- package/src/typecheck-coverage.ts +134 -0
- package/src/upgrade.ts +487 -71
- package/src/verification-plan.ts +24 -0
- package/src/version-drift.ts +67 -0
- package/src/web-app-options.ts +2 -2
- package/src/work-graph.ts +17 -12
package/dist/rules/pages.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* NF-C027: a page file whose URL sits under the backend's mount path.
|
|
3
3
|
*
|
|
4
|
-
* `backend/app.ts`'s backend is mounted at `apiPrefix
|
|
4
|
+
* `backend/app.ts`'s backend is mounted at `apiPrefix`, when one is set, ahead of page routing, and
|
|
5
5
|
* its 404 is final, so `routes/api/report.tsx` never renders - every request for it gets the
|
|
6
6
|
* backend's 404. `createWebApp` refuses such an app at startup and `nifra build` refuses to build
|
|
7
7
|
* it; this reports it earlier, without running app code (check's pre-`loadApp` invariant): the
|
|
@@ -18,6 +18,10 @@ import { shadowedPages } from "@nifrajs/web/route-manifest";
|
|
|
18
18
|
import { BACKEND_APP_FILE, CONFIG_FILE, FRAMEWORK_FILE } from "../app-files.js";
|
|
19
19
|
import { stripComments } from "../check-scan.js";
|
|
20
20
|
import { diagnostic } from "../diagnostics.js";
|
|
21
|
+
import { codeUnitOrder } from "../internal/code-unit-order.js";
|
|
22
|
+
import { hasWebConfig } from "../internal/nifra-project.js";
|
|
23
|
+
import { scriptKindOf } from "../internal/script-kind.js";
|
|
24
|
+
import { loadRuleTypeScript } from "./typescript.js";
|
|
21
25
|
const LITERAL_EXPORT = /\bexport\s+const\s+apiPrefix\s*(?::\s*string\s*)?=\s*(?:"([^"\\\r\n]*)"|'([^'\\\r\n]*)')\s*(?:as\s+const\s*)?(?:;|\r?\n|$)/;
|
|
22
26
|
const MENTION = /\bapiPrefix\b/;
|
|
23
27
|
const BACKEND_EXPORT = /\bexport\s+(?:const|let|var|function|class)\s+backend\b|\bexport\s*\{[^}]*\bbackend\b[^}]*\}/;
|
|
@@ -40,7 +44,7 @@ export const shadowedPageRule = {
|
|
|
40
44
|
return [];
|
|
41
45
|
if (!BACKEND_EXPORT.test(stripComments(readFileSync(backendFile, "utf8"))))
|
|
42
46
|
return [];
|
|
43
|
-
let apiPrefix = "
|
|
47
|
+
let apiPrefix = "";
|
|
44
48
|
// backend/framework.ts first: the generated server entry imports from it, and the build refuses
|
|
45
49
|
// a nifra.config.ts whose forwarded fields differ from it.
|
|
46
50
|
const configFile = CONFIG_FILES.find((file) => existsSync(join(ctx.root, file)));
|
|
@@ -84,5 +88,219 @@ export const shadowedPageRule = {
|
|
|
84
88
|
return findings;
|
|
85
89
|
},
|
|
86
90
|
};
|
|
87
|
-
|
|
91
|
+
const IN_LAYOUTS = /\binLayouts\b/;
|
|
92
|
+
/** An import of the root layout from a page beside it, statically or dynamically. */
|
|
93
|
+
const importsRootLayout = (code, layoutFile) => {
|
|
94
|
+
const stem = layoutFile.replace(/\.[^./]+$/, "");
|
|
95
|
+
return [`"./${stem}`, `'./${stem}`].some((quoted) => [`${quoted}"`, `${quoted}'`, `${quoted}.`].some((opening) => {
|
|
96
|
+
for (let at = code.indexOf(opening); at !== -1; at = code.indexOf(opening, at + 1)) {
|
|
97
|
+
const before = code.slice(Math.max(0, at - 16), at);
|
|
98
|
+
if (/(?:\bfrom|\bimport)\s*\(?\s*$/.test(before))
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}));
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* NF-C034: a root status page (`_404`, `_<status>`) beside a root `_layout` that imports that layout
|
|
106
|
+
* to wrap itself. Status pages render inside their layouts, so such a page renders the layout twice.
|
|
107
|
+
* A page that names `inLayouts` at all has decided, so it is not reported.
|
|
108
|
+
*/
|
|
109
|
+
export const statusLayoutRule = {
|
|
110
|
+
code: "NF-C034",
|
|
111
|
+
title: "Root status page wraps the root layout itself",
|
|
112
|
+
async scan(ctx) {
|
|
113
|
+
const routesDir = join(ctx.root, "routes");
|
|
114
|
+
if (!existsSync(routesDir))
|
|
115
|
+
return [];
|
|
116
|
+
let manifest;
|
|
117
|
+
try {
|
|
118
|
+
manifest = discoverRoutes(routesDir);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
const layout = manifest.layouts._layout;
|
|
124
|
+
if (layout === undefined)
|
|
125
|
+
return [];
|
|
126
|
+
const pages = [
|
|
127
|
+
...(manifest.notFound === undefined ? [] : [manifest.notFound.file]),
|
|
128
|
+
...Object.values(manifest.statusPages ?? {}).map((page) => page.file),
|
|
129
|
+
];
|
|
130
|
+
const findings = [];
|
|
131
|
+
for (const file of pages.sort()) {
|
|
132
|
+
const source = stripComments(readFileSync(join(routesDir, file), "utf8"));
|
|
133
|
+
if (IN_LAYOUTS.test(source) || !importsRootLayout(source, layout.file))
|
|
134
|
+
continue;
|
|
135
|
+
findings.push(diagnostic({
|
|
136
|
+
code: "NF-C034",
|
|
137
|
+
severity: "warn",
|
|
138
|
+
file: `routes/${file}`,
|
|
139
|
+
message: `routes/${file} imports routes/${layout.file} to wrap itself, and status pages render inside their layouts, so it renders routes/${layout.file} twice. Remove the wrap, or add \`export const inLayouts = false\` to keep rendering the page alone.`,
|
|
140
|
+
evidence: [`layout: routes/${layout.file}`],
|
|
141
|
+
verify: "nifra check",
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
return findings;
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* NF-C035: `backend/app.ts` exports a backend and the framework config sets no `apiPrefix`, so the
|
|
149
|
+
* backend is not served over HTTP - a browser call to `/api` reaches page routing. Loader-only is a
|
|
150
|
+
* valid choice; the finding asks for it to be stated. An unreadable `apiPrefix` is NF-C027's to report.
|
|
151
|
+
*/
|
|
152
|
+
export const implicitApiMountRule = {
|
|
153
|
+
code: "NF-C035",
|
|
154
|
+
title: "Backend not served over HTTP",
|
|
155
|
+
async scan(ctx) {
|
|
156
|
+
const backendFile = join(ctx.root, BACKEND_APP_FILE);
|
|
157
|
+
// An API-only app serves its backend itself; there is no page routing to fall into.
|
|
158
|
+
if (!existsSync(backendFile) || !hasWebConfig(ctx.root, "."))
|
|
159
|
+
return [];
|
|
160
|
+
if (!BACKEND_EXPORT.test(stripComments(readFileSync(backendFile, "utf8"))))
|
|
161
|
+
return [];
|
|
162
|
+
const configFile = CONFIG_FILES.find((file) => existsSync(join(ctx.root, file)));
|
|
163
|
+
if (configFile !== undefined &&
|
|
164
|
+
readStaticApiPrefix(readFileSync(join(ctx.root, configFile), "utf8")).kind !== "default") {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
const file = configFile ?? FRAMEWORK_FILE;
|
|
168
|
+
return [
|
|
169
|
+
diagnostic({
|
|
170
|
+
code: "NF-C035",
|
|
171
|
+
severity: "info",
|
|
172
|
+
file,
|
|
173
|
+
message: `${BACKEND_APP_FILE}'s backend is not served over HTTP, because ${file} sets no apiPrefix: a browser call to /api reaches page routing instead. Add \`export const apiPrefix = "/api"\` to ${file} to serve it there, as 4.x did by default, or \`export const apiPrefix = ""\` to keep it loader-only.`,
|
|
174
|
+
fix: { recipe: "framework.api-prefix", command: "nifra fix --code NF-C035" },
|
|
175
|
+
verify: "nifra check",
|
|
176
|
+
}),
|
|
177
|
+
];
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
/** Append `export const apiPrefix = "/api"` to a framework config that sets none, creating it if needed. */
|
|
181
|
+
export function withDefaultApiPrefix(source) {
|
|
182
|
+
if (source !== undefined && readStaticApiPrefix(source).kind !== "default")
|
|
183
|
+
return undefined;
|
|
184
|
+
const line = 'export const apiPrefix = "/api"\n';
|
|
185
|
+
if (source === undefined || source === "")
|
|
186
|
+
return line;
|
|
187
|
+
return `${source}${source.endsWith("\n") ? "" : "\n"}${line}`;
|
|
188
|
+
}
|
|
189
|
+
const LOADER_EXPORT = /\bexport\s+(?:async\s+)?(?:const|let|var|function\*?)\s+loader\b|\bexport\s*\{[^}]*\bloader\b[^}]*\}/;
|
|
190
|
+
const SCRIPT_LAYOUT = /\.[cm]?[jt]sx?$/;
|
|
191
|
+
const hasModifier = (ts, node, kind) => ts.canHaveModifiers(node) && (ts.getModifiers(node) ?? []).some((m) => m.kind === kind);
|
|
192
|
+
/** The function an exported `meta` names: a declaration, or a const initialized with one. */
|
|
193
|
+
function exportedMetaFunction(ts, tree) {
|
|
194
|
+
for (const statement of tree.statements) {
|
|
195
|
+
if (!hasModifier(ts, statement, ts.SyntaxKind.ExportKeyword))
|
|
196
|
+
continue;
|
|
197
|
+
if (ts.isFunctionDeclaration(statement) && statement.name?.text === "meta")
|
|
198
|
+
return statement;
|
|
199
|
+
if (!ts.isVariableStatement(statement))
|
|
200
|
+
continue;
|
|
201
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
202
|
+
if (!ts.isIdentifier(declaration.name) || declaration.name.text !== "meta")
|
|
203
|
+
continue;
|
|
204
|
+
let init = declaration.initializer;
|
|
205
|
+
while (init !== undefined &&
|
|
206
|
+
(ts.isParenthesizedExpression(init) ||
|
|
207
|
+
ts.isAsExpression(init) ||
|
|
208
|
+
ts.isSatisfiesExpression(init))) {
|
|
209
|
+
init = init.expression;
|
|
210
|
+
}
|
|
211
|
+
if (init !== undefined && (ts.isArrowFunction(init) || ts.isFunctionExpression(init)))
|
|
212
|
+
return init;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
/** Where an exported function `meta` reads its args' `data`: a destructured `data`, or `args.data`. */
|
|
218
|
+
export function metaDataReads(ts, tree) {
|
|
219
|
+
const meta = exportedMetaFunction(ts, tree);
|
|
220
|
+
const param = meta?.parameters[0];
|
|
221
|
+
if (param === undefined)
|
|
222
|
+
return [];
|
|
223
|
+
const lineOf = (node) => tree.getLineAndCharacterOfPosition(node.getStart(tree)).line + 1;
|
|
224
|
+
if (ts.isObjectBindingPattern(param.name)) {
|
|
225
|
+
return param.name.elements
|
|
226
|
+
.filter((element) => (element.propertyName ?? element.name).getText(tree) === "data")
|
|
227
|
+
.map(lineOf);
|
|
228
|
+
}
|
|
229
|
+
if (!ts.isIdentifier(param.name) || meta?.body === undefined)
|
|
230
|
+
return [];
|
|
231
|
+
const args = param.name.text;
|
|
232
|
+
const reads = [];
|
|
233
|
+
const visit = (node) => {
|
|
234
|
+
if (ts.isPropertyAccessExpression(node) &&
|
|
235
|
+
ts.isIdentifier(node.expression) &&
|
|
236
|
+
node.expression.text === args &&
|
|
237
|
+
node.name.text === "data") {
|
|
238
|
+
reads.push(lineOf(node));
|
|
239
|
+
}
|
|
240
|
+
ts.forEachChild(node, visit);
|
|
241
|
+
};
|
|
242
|
+
visit(meta.body);
|
|
243
|
+
return reads;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* NF-C040: a layout whose function `meta` reads `data` and which has no loader. A layout's `meta`
|
|
247
|
+
* receives its own loader data, `null` without a loader, so `data` there is always `null`; the page's
|
|
248
|
+
* data is `pageData`. Until 5.0 a layout's `meta` received the page's data as `data`, which is what such
|
|
249
|
+
* a `meta` was written against. A layout with a loader reading `data` reads its own, so it is not reported.
|
|
250
|
+
*/
|
|
251
|
+
export const layoutMetaDataRule = {
|
|
252
|
+
code: "NF-C040",
|
|
253
|
+
title: "Layout meta reads data its layout never loads",
|
|
254
|
+
async scan(ctx) {
|
|
255
|
+
const routesDir = join(ctx.root, "routes");
|
|
256
|
+
if (!existsSync(routesDir))
|
|
257
|
+
return [];
|
|
258
|
+
let manifest;
|
|
259
|
+
try {
|
|
260
|
+
manifest = discoverRoutes(routesDir);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
const layouts = Object.values(manifest.layouts)
|
|
266
|
+
.filter((layout) => SCRIPT_LAYOUT.test(layout.file))
|
|
267
|
+
.sort((a, b) => codeUnitOrder(a.file, b.file));
|
|
268
|
+
if (layouts.length === 0)
|
|
269
|
+
return [];
|
|
270
|
+
const loaded = await loadRuleTypeScript(ctx);
|
|
271
|
+
const ts = loaded.compiler;
|
|
272
|
+
if (ts === undefined)
|
|
273
|
+
return [];
|
|
274
|
+
const findings = [];
|
|
275
|
+
for (const layout of layouts) {
|
|
276
|
+
const halves = [layout.file, ...(layout.backend === undefined ? [] : [layout.backend])];
|
|
277
|
+
const loads = halves.some((file) => LOADER_EXPORT.test(stripComments(readFileSync(join(routesDir, file), "utf8"))));
|
|
278
|
+
if (loads)
|
|
279
|
+
continue;
|
|
280
|
+
const text = readFileSync(join(routesDir, layout.file), "utf8");
|
|
281
|
+
const tree = ts.createSourceFile(layout.file, text, ts.ScriptTarget.Latest, true, scriptKindOf(ts, layout.file));
|
|
282
|
+
for (const line of metaDataReads(ts, tree)) {
|
|
283
|
+
findings.push(diagnostic({
|
|
284
|
+
code: "NF-C040",
|
|
285
|
+
severity: "warn",
|
|
286
|
+
file: `routes/${layout.file}`,
|
|
287
|
+
line,
|
|
288
|
+
message: `routes/${layout.file}'s meta reads \`data\`, which is this layout's own loader data, and the layout has no loader, so it is always null. Read the page's data from \`pageData\` instead.`,
|
|
289
|
+
evidence: [
|
|
290
|
+
"data: the layout's loader data (null without a loader)",
|
|
291
|
+
"pageData: the page's loader data",
|
|
292
|
+
],
|
|
293
|
+
verify: "nifra check",
|
|
294
|
+
}));
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return findings;
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
export const pageRules = Object.freeze([
|
|
301
|
+
shadowedPageRule,
|
|
302
|
+
statusLayoutRule,
|
|
303
|
+
implicitApiMountRule,
|
|
304
|
+
layoutMetaDataRule,
|
|
305
|
+
]);
|
|
88
306
|
//# sourceMappingURL=pages.js.map
|
package/dist/rules/pages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/rules/pages.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/rules/pages.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/routes.d.ts
CHANGED
|
@@ -19,5 +19,11 @@ export declare const overlappingRouteRule: CheckRule;
|
|
|
19
19
|
* (`/users/:id?/posts`, `/users/:id{int}`). Only a trailing `?` run and a valid `{...}` are syntax.
|
|
20
20
|
*/
|
|
21
21
|
export declare const paramModifierRule: CheckRule;
|
|
22
|
+
/**
|
|
23
|
+
* NF-C036: a registration whose path the static scan cannot read. The route still serves; what it
|
|
24
|
+
* loses is every source-level analysis keyed by path - automatic capability provenance and the route
|
|
25
|
+
* lints above - so it is reported as information, naming the expression.
|
|
26
|
+
*/
|
|
27
|
+
export declare const unresolvedRoutePathRule: CheckRule;
|
|
22
28
|
export declare const routeRules: readonly CheckRule[];
|
|
23
29
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAA;AA4ExD,eAAO,MAAM,mBAAmB,EAAE,SAqCjC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAsChC,CAAA;AAkDD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,SA0GlC,CAAA;AAwBD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAgC/B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,SA4BrC,CAAA;AAED,eAAO,MAAM,UAAU,sBAMrB,CAAA"}
|
package/dist/rules/routes.js
CHANGED
|
@@ -2,7 +2,7 @@ import { RESERVED_KEY_READOUT, reservedKeyFor } from "@nifrajs/client";
|
|
|
2
2
|
import { RoutePatternOverlapLimitError, routePatternOverlap } from "@nifrajs/core";
|
|
3
3
|
import { expandOptionalParams, paramConstraint } from "@nifrajs/core/pattern";
|
|
4
4
|
import { diagnostic } from "../diagnostics.js";
|
|
5
|
-
import {
|
|
5
|
+
import { commentBlockExpectation, MISSING_EXPECTATION_REASON } from "./comment-markers.js";
|
|
6
6
|
/**
|
|
7
7
|
* Route-table lints over the statically collected route registrations (`ProjectFacts.routes` is built
|
|
8
8
|
* once before the registry runs - no rule re-walks source).
|
|
@@ -20,10 +20,13 @@ import { commentBlockHasMarker } from "./comment-markers.js";
|
|
|
20
20
|
* one place it is written down and the one place the freeze policy lives - a lint that carried its
|
|
21
21
|
* own copy is a lint that can disagree with the compiler it is explaining.
|
|
22
22
|
*/
|
|
23
|
-
/**
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
const
|
|
23
|
+
/** What marks a route deliberately served only to NON-typed-client consumers. */
|
|
24
|
+
const RESERVED_SEGMENT_EXPECTATION = ["NF-C018", "reserved-segment"];
|
|
25
|
+
// An intended overlap answers both findings about the pair: proven (NF-C024) or unprovable (NF-C025).
|
|
26
|
+
const ROUTE_OVERLAP_EXPECTATION = ["NF-C024", "NF-C025", "route-overlap"];
|
|
27
|
+
const PARAM_MODIFIER_EXPECTATION = ["NF-C026", "param-modifier"];
|
|
28
|
+
// A deliberately computed path is accepted with or without a reason: the finding is information.
|
|
29
|
+
const DYNAMIC_PATH_EXPECTATION = ["NF-C036"];
|
|
27
30
|
/** Parse-don't-cast over the project fact: a malformed entry is dropped, never trusted. */
|
|
28
31
|
function routeFacts(ctx) {
|
|
29
32
|
const raw = ctx.project.routes;
|
|
@@ -80,14 +83,14 @@ export const reservedSegmentRule = {
|
|
|
80
83
|
lines = (ctx.project.source.read(route.file) ?? "").split("\n");
|
|
81
84
|
linesByFile.set(route.file, lines);
|
|
82
85
|
}
|
|
83
|
-
if (
|
|
86
|
+
if (commentBlockExpectation(lines, route.line, RESERVED_SEGMENT_EXPECTATION) !== undefined)
|
|
84
87
|
continue;
|
|
85
88
|
findings.push(diagnostic({
|
|
86
89
|
code: "NF-C018",
|
|
87
90
|
severity: "warn",
|
|
88
91
|
file: route.file,
|
|
89
92
|
line: route.line,
|
|
90
|
-
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 \`//
|
|
93
|
+
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 \`// nifra-expect NF-C018: <reason>\` above the registration. \`nifra fix --code NF-C018\` rewrites the broken call sites for you`,
|
|
91
94
|
evidence: [`${route.method} ${route.path}`, `segment: ${segment}`],
|
|
92
95
|
// The route is fine; what needs editing is every typed-client call site the collision
|
|
93
96
|
// broke, which the recipe finds from the compiler rather than from this one finding.
|
|
@@ -145,6 +148,49 @@ export const duplicateRouteRule = {
|
|
|
145
148
|
return findings;
|
|
146
149
|
},
|
|
147
150
|
};
|
|
151
|
+
/** A segment the router reads as exactly its own text. */
|
|
152
|
+
const PLAIN_SEGMENT = /^[A-Za-z0-9_.~-]+$/;
|
|
153
|
+
function leadOf(path) {
|
|
154
|
+
const lead = [];
|
|
155
|
+
for (const segment of path.split("/").slice(1)) {
|
|
156
|
+
if (!PLAIN_SEGMENT.test(segment))
|
|
157
|
+
break;
|
|
158
|
+
lead.push(segment);
|
|
159
|
+
}
|
|
160
|
+
return lead;
|
|
161
|
+
}
|
|
162
|
+
/** The routes in `root` whose lead is compatible with `lead`, in registration order. */
|
|
163
|
+
function routesSharingLead(root, lead) {
|
|
164
|
+
const found = [];
|
|
165
|
+
let node = root;
|
|
166
|
+
for (const segment of lead) {
|
|
167
|
+
for (const route of node.routes)
|
|
168
|
+
found.push(route);
|
|
169
|
+
node = node.children.get(segment);
|
|
170
|
+
if (node === undefined)
|
|
171
|
+
return found.sort((a, b) => a - b);
|
|
172
|
+
}
|
|
173
|
+
const below = [node];
|
|
174
|
+
for (const next of below) {
|
|
175
|
+
for (const route of next.routes)
|
|
176
|
+
found.push(route);
|
|
177
|
+
for (const child of next.children.values())
|
|
178
|
+
below.push(child);
|
|
179
|
+
}
|
|
180
|
+
return found.sort((a, b) => a - b);
|
|
181
|
+
}
|
|
182
|
+
function addLead(root, lead, route) {
|
|
183
|
+
let node = root;
|
|
184
|
+
for (const segment of lead) {
|
|
185
|
+
let child = node.children.get(segment);
|
|
186
|
+
if (child === undefined) {
|
|
187
|
+
child = { routes: [], children: new Map() };
|
|
188
|
+
node.children.set(segment, child);
|
|
189
|
+
}
|
|
190
|
+
node = child;
|
|
191
|
+
}
|
|
192
|
+
node.routes.push(route);
|
|
193
|
+
}
|
|
148
194
|
/**
|
|
149
195
|
* NF-C024: two different same-method route patterns in one source file accept at least one of the
|
|
150
196
|
* same paths. This is deliberately file-scoped, like NF-C019: the static scanner cannot prove
|
|
@@ -175,17 +221,33 @@ export const overlappingRouteRule = {
|
|
|
175
221
|
}
|
|
176
222
|
return value;
|
|
177
223
|
};
|
|
224
|
+
const expectationByLine = new Map();
|
|
225
|
+
const expectationAt = (line) => {
|
|
226
|
+
if (!expectationByLine.has(line))
|
|
227
|
+
expectationByLine.set(line, commentBlockExpectation(lines(), line, ROUTE_OVERLAP_EXPECTATION));
|
|
228
|
+
return expectationByLine.get(line);
|
|
229
|
+
};
|
|
230
|
+
const leads = new Map();
|
|
178
231
|
for (let laterIndex = 0; laterIndex < routes.length; laterIndex += 1) {
|
|
179
232
|
const later = routes[laterIndex];
|
|
180
233
|
const laterKey = `${later.method} ${later.path}`;
|
|
181
|
-
|
|
234
|
+
const lead = leadOf(later.path);
|
|
235
|
+
let methodLeads = leads.get(later.method);
|
|
236
|
+
if (methodLeads === undefined) {
|
|
237
|
+
methodLeads = { routes: [], children: new Map() };
|
|
238
|
+
leads.set(later.method, methodLeads);
|
|
239
|
+
}
|
|
240
|
+
const candidates = routesSharingLead(methodLeads, lead);
|
|
241
|
+
addLead(methodLeads, lead, laterIndex);
|
|
242
|
+
for (const earlierIndex of candidates) {
|
|
182
243
|
const earlier = routes[earlierIndex];
|
|
183
|
-
if (
|
|
244
|
+
if (`${earlier.method} ${earlier.path}` === laterKey)
|
|
184
245
|
continue;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (
|
|
246
|
+
// Both are errors, so the comment silences only with a reason.
|
|
247
|
+
const expectations = [later.line, earlier.line].map(expectationAt);
|
|
248
|
+
if (expectations.some((expected) => expected?.reason !== undefined))
|
|
188
249
|
continue;
|
|
250
|
+
const unreasoned = expectations.some((expected) => expected !== undefined);
|
|
189
251
|
let witness;
|
|
190
252
|
try {
|
|
191
253
|
witness = routePatternOverlap(earlier.path, later.path);
|
|
@@ -197,7 +259,7 @@ export const overlappingRouteRule = {
|
|
|
197
259
|
severity: "error",
|
|
198
260
|
file: later.file,
|
|
199
261
|
line: later.line,
|
|
200
|
-
message: `${laterKey} could not be proven disjoint from ${earlier.method} ${earlier.path}; bounded route-overlap analysis exceeded its safety budget - simplify the patterns or add
|
|
262
|
+
message: `${laterKey} could not be proven disjoint from ${earlier.method} ${earlier.path}; bounded route-overlap analysis exceeded its safety budget - simplify the patterns or add a \`// nifra-expect NF-C025: <reason>\` comment only after manual review${unreasoned ? `; ${MISSING_EXPECTATION_REASON}` : ""}`,
|
|
201
263
|
evidence: [
|
|
202
264
|
`${earlier.method} ${earlier.path}`,
|
|
203
265
|
`${later.method} ${later.path}`,
|
|
@@ -221,7 +283,7 @@ export const overlappingRouteRule = {
|
|
|
221
283
|
severity: "error",
|
|
222
284
|
file: later.file,
|
|
223
285
|
line: later.line,
|
|
224
|
-
message: `${laterKey} overlaps ${earlier.method} ${earlier.path} (first at line ${earlier.line}); witness path: ${witness} - make the patterns disjoint,
|
|
286
|
+
message: `${laterKey} overlaps ${earlier.method} ${earlier.path} (first at line ${earlier.line}); witness path: ${witness} - make the patterns disjoint, or add a \`// nifra-expect NF-C024: <reason>\` comment above either registration${unreasoned ? `; ${MISSING_EXPECTATION_REASON}` : ""}`,
|
|
225
287
|
evidence: [
|
|
226
288
|
`${earlier.method} ${earlier.path}`,
|
|
227
289
|
`${later.method} ${later.path}`,
|
|
@@ -280,7 +342,7 @@ export const paramModifierRule = {
|
|
|
280
342
|
lines = (ctx.project.source.read(route.file) ?? "").split("\n");
|
|
281
343
|
linesByFile.set(route.file, lines);
|
|
282
344
|
}
|
|
283
|
-
if (
|
|
345
|
+
if (commentBlockExpectation(lines, route.line, PARAM_MODIFIER_EXPECTATION) !== undefined)
|
|
284
346
|
continue;
|
|
285
347
|
const character = text[text.length - 1];
|
|
286
348
|
findings.push(diagnostic({
|
|
@@ -288,7 +350,7 @@ export const paramModifierRule = {
|
|
|
288
350
|
severity: "warn",
|
|
289
351
|
file: route.file,
|
|
290
352
|
line: route.line,
|
|
291
|
-
message: `${route.method} ${route.path} - '${character}' after '${text.slice(0, -1)}' is matched as literal text, not as a param modifier${character === "?" ? "; a request path never contains '?', so this route cannot be reached" : ""}. Optional params are supported as the trailing whole segments of a path (\`/users/:id?\`, \`/d/:year?/:month?\`), and a constraint as one character class with an optional count (\`:id{[0-9]+}\`, \`:code{[A-Z]{2}}\`) or a list of two or more values (\`:ext{png|jpg}\`); for anything else register each path, or mark a deliberate literal with \`//
|
|
353
|
+
message: `${route.method} ${route.path} - '${character}' after '${text.slice(0, -1)}' is matched as literal text, not as a param modifier${character === "?" ? "; a request path never contains '?', so this route cannot be reached" : ""}. Optional params are supported as the trailing whole segments of a path (\`/users/:id?\`, \`/d/:year?/:month?\`), and a constraint as one character class with an optional count (\`:id{[0-9]+}\`, \`:code{[A-Z]{2}}\`) or a list of two or more values (\`:ext{png|jpg}\`); for anything else register each path, or mark a deliberate literal with \`// nifra-expect NF-C026: <reason>\` above the registration`,
|
|
292
354
|
evidence: [`${route.method} ${route.path}`, `literal: ${text}`],
|
|
293
355
|
verify: "nifra check --lints-only",
|
|
294
356
|
}));
|
|
@@ -296,10 +358,43 @@ export const paramModifierRule = {
|
|
|
296
358
|
return findings;
|
|
297
359
|
},
|
|
298
360
|
};
|
|
361
|
+
/**
|
|
362
|
+
* NF-C036: a registration whose path the static scan cannot read. The route still serves; what it
|
|
363
|
+
* loses is every source-level analysis keyed by path - automatic capability provenance and the route
|
|
364
|
+
* lints above - so it is reported as information, naming the expression.
|
|
365
|
+
*/
|
|
366
|
+
export const unresolvedRoutePathRule = {
|
|
367
|
+
code: "NF-C036",
|
|
368
|
+
title: "Route path the static scan cannot read",
|
|
369
|
+
async scan(ctx) {
|
|
370
|
+
const findings = [];
|
|
371
|
+
const linesByFile = new Map();
|
|
372
|
+
for (const route of ctx.project.sourceFindings.routePaths) {
|
|
373
|
+
let lines = linesByFile.get(route.file);
|
|
374
|
+
if (lines === undefined) {
|
|
375
|
+
lines = (ctx.project.source.read(route.file) ?? "").split("\n");
|
|
376
|
+
linesByFile.set(route.file, lines);
|
|
377
|
+
}
|
|
378
|
+
if (commentBlockExpectation(lines, route.line, DYNAMIC_PATH_EXPECTATION) !== undefined)
|
|
379
|
+
continue;
|
|
380
|
+
findings.push(diagnostic({
|
|
381
|
+
code: "NF-C036",
|
|
382
|
+
severity: "info",
|
|
383
|
+
file: route.file,
|
|
384
|
+
line: route.line,
|
|
385
|
+
message: `${route.method} ${route.expression} - the static scan cannot read this route path, so automatic capability provenance and the route lints do not see the route. Write the path as a string literal, or as a module-level \`const\` (optionally \`as const\`) in this file or exported from a project file it imports; mark a deliberately computed path with a \`// nifra-expect NF-C036: <reason>\` comment above the registration`,
|
|
386
|
+
evidence: [`${route.method} ${route.expression}`],
|
|
387
|
+
verify: "nifra check --lints-only",
|
|
388
|
+
}));
|
|
389
|
+
}
|
|
390
|
+
return findings;
|
|
391
|
+
},
|
|
392
|
+
};
|
|
299
393
|
export const routeRules = Object.freeze([
|
|
300
394
|
reservedSegmentRule,
|
|
301
395
|
duplicateRouteRule,
|
|
302
396
|
overlappingRouteRule,
|
|
303
397
|
paramModifierRule,
|
|
398
|
+
unresolvedRoutePathRule,
|
|
304
399
|
]);
|
|
305
400
|
//# sourceMappingURL=routes.js.map
|
package/dist/rules/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/rules/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/secrets.js
CHANGED
|
@@ -11,7 +11,7 @@ import { CONFIG_FILE } from "../app-files.js";
|
|
|
11
11
|
import { stripComments } from "../check-scan.js";
|
|
12
12
|
import { diagnostic } from "../diagnostics.js";
|
|
13
13
|
import { codeUnitOrder } from "../internal/code-unit-order.js";
|
|
14
|
-
import { zonedFiles } from "./zones.js";
|
|
14
|
+
import { buildText, zonedFiles } from "./zones.js";
|
|
15
15
|
const BROWSER_CODE = new Set(["route-frontend", "frontend", "shared"]);
|
|
16
16
|
const EXEMPTIONS_START = /\bexport\s+const\s+secretExemptions\b[^=]*=\s*\[/;
|
|
17
17
|
/**
|
|
@@ -122,7 +122,7 @@ export const secretSourceRule = {
|
|
|
122
122
|
apps.set(app, []);
|
|
123
123
|
if (!BROWSER_CODE.has(classification.zone))
|
|
124
124
|
continue;
|
|
125
|
-
const text = ctx
|
|
125
|
+
const text = buildText(ctx, file);
|
|
126
126
|
if (text === undefined)
|
|
127
127
|
continue;
|
|
128
128
|
const name = app === "" ? file : file.slice(app.length + 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/rules/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EACL,eAAe,EAGf,cAAc,GACf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAmB,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/rules/secrets.ts"],"names":[],"mappings":"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"}
|