@nifrajs/cli 3.3.0 → 4.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 +42 -3
- package/dist/app-files.d.ts +11 -0
- package/dist/app-files.d.ts.map +1 -0
- package/dist/app-files.js +34 -0
- package/dist/app-files.js.map +1 -0
- package/dist/assure-hydration.d.ts +7 -1
- package/dist/assure-hydration.d.ts.map +1 -1
- package/dist/assure-hydration.js +128 -43
- package/dist/assure-hydration.js.map +1 -1
- package/dist/assure.d.ts.map +1 -1
- package/dist/assure.js +16 -2
- package/dist/assure.js.map +1 -1
- package/dist/capabilities-tool.d.ts +5 -1
- package/dist/capabilities-tool.d.ts.map +1 -1
- package/dist/capabilities-tool.js +32 -10
- package/dist/capabilities-tool.js.map +1 -1
- package/dist/cdn-check.d.ts +41 -0
- package/dist/cdn-check.d.ts.map +1 -0
- package/dist/cdn-check.js +207 -0
- package/dist/cdn-check.js.map +1 -0
- package/dist/check-diagnostics.d.ts +7 -15
- package/dist/check-diagnostics.d.ts.map +1 -1
- package/dist/check-diagnostics.js +162 -713
- package/dist/check-diagnostics.js.map +1 -1
- package/dist/check-scan.d.ts +58 -7
- package/dist/check-scan.d.ts.map +1 -1
- package/dist/check-scan.js +323 -62
- package/dist/check-scan.js.map +1 -1
- package/dist/check.d.ts +1 -0
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +145 -54
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +42 -16
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +306 -87
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.d.ts +60 -5
- package/dist/command-catalog.d.ts.map +1 -1
- package/dist/command-catalog.js +298 -33
- package/dist/command-catalog.js.map +1 -1
- package/dist/config-target.d.ts +8 -0
- package/dist/config-target.d.ts.map +1 -0
- package/dist/config-target.js +45 -0
- package/dist/config-target.js.map +1 -0
- package/dist/contracts.d.ts +3 -2
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +56 -16
- package/dist/contracts.js.map +1 -1
- package/dist/db-audit.d.ts +37 -0
- package/dist/db-audit.d.ts.map +1 -0
- package/dist/db-audit.js +99 -0
- package/dist/db-audit.js.map +1 -0
- package/dist/db-child.d.ts +64 -0
- package/dist/db-child.d.ts.map +1 -0
- package/dist/db-child.js +213 -0
- package/dist/db-child.js.map +1 -0
- package/dist/db-config.d.ts +60 -0
- package/dist/db-config.d.ts.map +1 -0
- package/dist/db-config.js +176 -0
- package/dist/db-config.js.map +1 -0
- package/dist/db-tool.d.ts +84 -0
- package/dist/db-tool.d.ts.map +1 -0
- package/dist/db-tool.js +537 -0
- package/dist/db-tool.js.map +1 -0
- package/dist/dev-bun-config.d.ts +20 -13
- package/dist/dev-bun-config.d.ts.map +1 -1
- package/dist/dev-bun-config.js +98 -41
- package/dist/dev-bun-config.js.map +1 -1
- package/dist/dev-feed-tool.d.ts +106 -0
- package/dist/dev-feed-tool.d.ts.map +1 -0
- package/dist/dev-feed-tool.js +713 -0
- package/dist/dev-feed-tool.js.map +1 -0
- package/dist/dev-server-client.d.ts +67 -0
- package/dist/dev-server-client.d.ts.map +1 -0
- package/dist/dev-server-client.js +195 -0
- package/dist/dev-server-client.js.map +1 -0
- package/dist/diagnostics.d.ts +86 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +85 -0
- package/dist/diagnostics.js.map +1 -1
- package/dist/diff-tool.d.ts +3 -3
- package/dist/diff-tool.d.ts.map +1 -1
- package/dist/diff-tool.js +6 -5
- package/dist/diff-tool.js.map +1 -1
- package/dist/docs-search.d.ts.map +1 -1
- package/dist/docs-search.js +12 -4
- package/dist/docs-search.js.map +1 -1
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +76 -15
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.d.ts +15 -0
- package/dist/env-file.d.ts.map +1 -1
- package/dist/env-file.js +73 -1
- package/dist/env-file.js.map +1 -1
- package/dist/fix-recipes.d.ts.map +1 -1
- package/dist/fix-recipes.js +41 -21
- package/dist/fix-recipes.js.map +1 -1
- package/dist/frontend-guidance.js +5 -5
- package/dist/frontend-guidance.js.map +1 -1
- package/dist/i18n-check.d.ts +16 -0
- package/dist/i18n-check.d.ts.map +1 -0
- package/dist/i18n-check.js +154 -0
- package/dist/i18n-check.js.map +1 -0
- package/dist/init-agents.d.ts +49 -13
- package/dist/init-agents.d.ts.map +1 -1
- package/dist/init-agents.js +239 -34
- package/dist/init-agents.js.map +1 -1
- package/dist/internal/code-unit-order.d.ts +4 -0
- package/dist/internal/code-unit-order.d.ts.map +1 -0
- package/dist/internal/code-unit-order.js +6 -0
- package/dist/internal/code-unit-order.js.map +1 -0
- package/dist/internal/script-kind.d.ts +7 -0
- package/dist/internal/script-kind.d.ts.map +1 -0
- package/dist/internal/script-kind.js +12 -0
- package/dist/internal/script-kind.js.map +1 -0
- package/dist/internal/source-facts.d.ts +5 -0
- package/dist/internal/source-facts.d.ts.map +1 -1
- package/dist/internal/source-facts.js +61 -5
- package/dist/internal/source-facts.js.map +1 -1
- package/dist/internal/typescript-import.d.ts +49 -24
- package/dist/internal/typescript-import.d.ts.map +1 -1
- package/dist/internal/typescript-import.js +507 -67
- package/dist/internal/typescript-import.js.map +1 -1
- package/dist/introspect.d.ts +6 -4
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +93 -74
- package/dist/introspect.js.map +1 -1
- package/dist/learn.js +3 -3
- package/dist/learn.js.map +1 -1
- package/dist/levels-tool.d.ts +10 -0
- package/dist/levels-tool.d.ts.map +1 -1
- package/dist/levels-tool.js +33 -3
- package/dist/levels-tool.js.map +1 -1
- package/dist/load.d.ts +71 -16
- package/dist/load.d.ts.map +1 -1
- package/dist/load.js +78 -18
- package/dist/load.js.map +1 -1
- package/dist/manifest-tool.d.ts.map +1 -1
- package/dist/manifest-tool.js +3 -2
- package/dist/manifest-tool.js.map +1 -1
- package/dist/mcp-app-tool.d.ts.map +1 -1
- package/dist/mcp-app-tool.js +2 -0
- package/dist/mcp-app-tool.js.map +1 -1
- package/dist/mcp-context.d.ts.map +1 -1
- package/dist/mcp-context.js +5 -6
- package/dist/mcp-context.js.map +1 -1
- package/dist/mcp-delegate.d.ts +57 -0
- package/dist/mcp-delegate.d.ts.map +1 -0
- package/dist/mcp-delegate.js +130 -0
- package/dist/mcp-delegate.js.map +1 -0
- package/dist/mcp-docs-tools.d.ts.map +1 -1
- package/dist/mcp-docs-tools.js +23 -5
- package/dist/mcp-docs-tools.js.map +1 -1
- package/dist/mcp-exec.d.ts +3 -0
- package/dist/mcp-exec.d.ts.map +1 -1
- package/dist/mcp-exec.js +263 -131
- package/dist/mcp-exec.js.map +1 -1
- package/dist/mcp-http.d.ts.map +1 -1
- package/dist/mcp-http.js +20 -5
- package/dist/mcp-http.js.map +1 -1
- package/dist/mcp-io.d.ts +26 -0
- package/dist/mcp-io.d.ts.map +1 -1
- package/dist/mcp-io.js +113 -0
- package/dist/mcp-io.js.map +1 -1
- package/dist/mcp-isolate.d.ts +48 -0
- package/dist/mcp-isolate.d.ts.map +1 -0
- package/dist/mcp-isolate.js +222 -0
- package/dist/mcp-isolate.js.map +1 -0
- package/dist/mcp-path.d.ts +10 -0
- package/dist/mcp-path.d.ts.map +1 -0
- package/dist/mcp-path.js +51 -0
- package/dist/mcp-path.js.map +1 -0
- package/dist/mcp-project-child.d.ts +74 -0
- package/dist/mcp-project-child.d.ts.map +1 -0
- package/dist/mcp-project-child.js +130 -0
- package/dist/mcp-project-child.js.map +1 -0
- package/dist/mcp-reflect.d.ts.map +1 -1
- package/dist/mcp-reflect.js +2 -2
- package/dist/mcp-reflect.js.map +1 -1
- package/dist/mcp-render.d.ts.map +1 -1
- package/dist/mcp-render.js +64 -45
- package/dist/mcp-render.js.map +1 -1
- package/dist/mcp-root.d.ts +37 -9
- package/dist/mcp-root.d.ts.map +1 -1
- package/dist/mcp-root.js +124 -25
- package/dist/mcp-root.js.map +1 -1
- package/dist/mcp-run.d.ts +18 -1
- package/dist/mcp-run.d.ts.map +1 -1
- package/dist/mcp-run.js +159 -55
- package/dist/mcp-run.js.map +1 -1
- package/dist/mcp-ws.js +4 -1
- package/dist/mcp-ws.js.map +1 -1
- package/dist/mcp.d.ts +18 -5
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +165 -82
- package/dist/mcp.js.map +1 -1
- package/dist/migrate-layout.d.ts +44 -0
- package/dist/migrate-layout.d.ts.map +1 -0
- package/dist/migrate-layout.js +982 -0
- package/dist/migrate-layout.js.map +1 -0
- package/dist/openapi-tool.d.ts +2 -2
- package/dist/openapi-tool.d.ts.map +1 -1
- package/dist/openapi-tool.js.map +1 -1
- package/dist/openapi-types.d.ts +2 -1
- package/dist/openapi-types.d.ts.map +1 -1
- package/dist/openapi-types.js +240 -12
- package/dist/openapi-types.js.map +1 -1
- package/dist/pipeline-report.d.ts +3 -2
- package/dist/pipeline-report.d.ts.map +1 -1
- package/dist/pipeline-report.js +19 -16
- package/dist/pipeline-report.js.map +1 -1
- package/dist/port.d.ts +5 -4
- package/dist/port.d.ts.map +1 -1
- package/dist/port.js +46 -29
- package/dist/port.js.map +1 -1
- package/dist/project-facts.d.ts +28 -4
- package/dist/project-facts.d.ts.map +1 -1
- package/dist/project-facts.js +12 -2
- package/dist/project-facts.js.map +1 -1
- package/dist/recipes/4.0.0.d.ts +9 -0
- package/dist/recipes/4.0.0.d.ts.map +1 -0
- package/dist/recipes/4.0.0.js +34 -0
- package/dist/recipes/4.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 +11 -1
- package/dist/release-verification.d.ts.map +1 -1
- package/dist/release-verification.js +47 -4
- package/dist/release-verification.js.map +1 -1
- package/dist/review.d.ts +21 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +823 -0
- package/dist/review.js.map +1 -0
- package/dist/route-types.d.ts +28 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +106 -0
- package/dist/route-types.js.map +1 -0
- package/dist/rules/codes.d.ts +9 -0
- package/dist/rules/codes.d.ts.map +1 -1
- package/dist/rules/codes.js +9 -0
- package/dist/rules/codes.js.map +1 -1
- package/dist/rules/data-guard.d.ts +12 -0
- package/dist/rules/data-guard.d.ts.map +1 -0
- package/dist/rules/data-guard.js +213 -0
- package/dist/rules/data-guard.js.map +1 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +17 -5
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/islands.d.ts.map +1 -1
- package/dist/rules/islands.js +7 -4
- package/dist/rules/islands.js.map +1 -1
- package/dist/rules/legacy.d.ts +3 -1
- package/dist/rules/legacy.d.ts.map +1 -1
- package/dist/rules/legacy.js +829 -34
- package/dist/rules/legacy.js.map +1 -1
- package/dist/rules/nano.d.ts.map +1 -1
- package/dist/rules/nano.js +15 -6
- package/dist/rules/nano.js.map +1 -1
- package/dist/rules/pages.d.ts +15 -0
- package/dist/rules/pages.d.ts.map +1 -0
- package/dist/rules/pages.js +88 -0
- package/dist/rules/pages.js.map +1 -0
- package/dist/rules/routes.d.ts +11 -0
- package/dist/rules/routes.d.ts.map +1 -1
- package/dist/rules/routes.js +180 -2
- package/dist/rules/routes.js.map +1 -1
- package/dist/rules/secrets.d.ts +10 -0
- package/dist/rules/secrets.d.ts.map +1 -0
- package/dist/rules/secrets.js +169 -0
- package/dist/rules/secrets.js.map +1 -0
- package/dist/rules/security.d.ts +7 -0
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +171 -65
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/typescript.d.ts +16 -0
- package/dist/rules/typescript.d.ts.map +1 -0
- package/dist/rules/typescript.js +59 -0
- package/dist/rules/typescript.js.map +1 -0
- package/dist/rules/zones.d.ts +17 -0
- package/dist/rules/zones.d.ts.map +1 -0
- package/dist/rules/zones.js +174 -0
- package/dist/rules/zones.js.map +1 -0
- package/dist/scaffold.d.ts +25 -12
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +154 -90
- package/dist/scaffold.js.map +1 -1
- package/dist/sdk.d.ts +17 -3
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +941 -153
- package/dist/sdk.js.map +1 -1
- package/dist/search-terms.d.ts +2 -0
- package/dist/search-terms.d.ts.map +1 -1
- package/dist/search-terms.js +23 -8
- package/dist/search-terms.js.map +1 -1
- package/dist/smoke.d.ts +79 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +494 -0
- package/dist/smoke.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/sync-routes.d.ts +4 -3
- package/dist/sync-routes.d.ts.map +1 -1
- package/dist/sync-routes.js +4 -3
- package/dist/sync-routes.js.map +1 -1
- package/dist/test-tool.d.ts.map +1 -1
- package/dist/test-tool.js +30 -11
- package/dist/test-tool.js.map +1 -1
- package/dist/types-search.d.ts.map +1 -1
- package/dist/types-search.js +11 -5
- package/dist/types-search.js.map +1 -1
- package/dist/upgrade.d.ts +36 -6
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +167 -29
- package/dist/upgrade.js.map +1 -1
- package/dist/verification-plan.d.ts.map +1 -1
- package/dist/verification-plan.js +8 -0
- package/dist/verification-plan.js.map +1 -1
- package/dist/verification.d.ts.map +1 -1
- package/dist/verification.js +45 -12
- package/dist/verification.js.map +1 -1
- package/dist/web-app-options.d.ts +19 -0
- package/dist/web-app-options.d.ts.map +1 -0
- package/dist/web-app-options.js +49 -0
- package/dist/web-app-options.js.map +1 -0
- package/dist/work-graph.d.ts +3 -0
- package/dist/work-graph.d.ts.map +1 -1
- package/dist/work-graph.js +33 -16
- package/dist/work-graph.js.map +1 -1
- package/docs/examples.json +185 -29
- package/docs/llms-full.txt +4123 -548
- package/docs/types.json +14391 -10060
- package/package.json +19 -11
- package/src/app-files.ts +40 -0
- package/src/assure-hydration.ts +139 -46
- package/src/assure.ts +17 -2
- package/src/capabilities-tool.ts +35 -9
- package/src/cdn-check.ts +268 -0
- package/src/check-diagnostics.ts +199 -797
- package/src/check-scan.ts +394 -63
- package/src/check.ts +146 -58
- package/src/cli.ts +347 -92
- package/src/command-catalog.ts +407 -45
- package/src/config-target.ts +47 -0
- package/src/contracts.ts +66 -15
- package/src/db-audit.ts +128 -0
- package/src/db-child.ts +285 -0
- package/src/db-config.ts +224 -0
- package/src/db-tool.ts +690 -0
- package/src/dev-bun-config.ts +116 -40
- package/src/dev-feed-tool.ts +912 -0
- package/src/dev-server-client.ts +267 -0
- package/src/diagnostics.ts +179 -0
- package/src/diff-tool.ts +6 -5
- package/src/docs-search.ts +10 -3
- package/src/doctor.ts +98 -15
- package/src/env-file.ts +78 -1
- package/src/fix-recipes.ts +44 -31
- package/src/frontend-guidance.ts +5 -5
- package/src/i18n-check.ts +179 -0
- package/src/init-agents.ts +301 -38
- package/src/internal/code-unit-order.ts +5 -0
- package/src/internal/script-kind.ts +11 -0
- package/src/internal/source-facts.ts +96 -22
- package/src/internal/typescript-import.ts +663 -68
- package/src/introspect.ts +93 -82
- package/src/learn.ts +3 -3
- package/src/levels-tool.ts +47 -2
- package/src/load.ts +144 -32
- package/src/manifest-tool.ts +3 -2
- package/src/mcp-app-tool.ts +2 -0
- package/src/mcp-context.ts +5 -7
- package/src/mcp-delegate.ts +162 -0
- package/src/mcp-docs-tools.ts +23 -5
- package/src/mcp-exec.ts +301 -161
- package/src/mcp-http.ts +22 -5
- package/src/mcp-io.ts +130 -0
- package/src/mcp-isolate.ts +287 -0
- package/src/mcp-path.ts +50 -0
- package/src/mcp-project-child.ts +182 -0
- package/src/mcp-reflect.ts +3 -2
- package/src/mcp-render.ts +72 -42
- package/src/mcp-root.ts +130 -24
- package/src/mcp-run.ts +190 -56
- package/src/mcp-ws.ts +4 -1
- package/src/mcp.ts +193 -91
- package/src/migrate-layout.ts +1121 -0
- package/src/openapi-tool.ts +7 -3
- package/src/openapi-types.ts +315 -13
- package/src/pipeline-report.ts +22 -18
- package/src/port.ts +53 -30
- package/src/project-facts.ts +42 -8
- package/src/recipes/4.0.0.ts +35 -0
- package/src/recipes/index.ts +2 -0
- package/src/release-verification.ts +74 -5
- package/src/review.ts +988 -0
- package/src/route-types.ts +133 -0
- package/src/rules/codes.ts +9 -0
- package/src/rules/data-guard.ts +230 -0
- package/src/rules/index.ts +18 -5
- package/src/rules/islands.ts +12 -4
- package/src/rules/legacy.ts +947 -35
- package/src/rules/nano.ts +18 -6
- package/src/rules/pages.ts +99 -0
- package/src/rules/routes.ts +181 -2
- package/src/rules/secrets.ts +174 -0
- package/src/rules/security.ts +198 -70
- package/src/rules/typescript.ts +77 -0
- package/src/rules/zones.ts +195 -0
- package/src/scaffold.ts +175 -98
- package/src/sdk.ts +1215 -158
- package/src/search-terms.ts +24 -7
- package/src/smoke.ts +607 -0
- package/src/sync-manifest.ts +2 -1
- package/src/sync-routes.ts +4 -3
- package/src/test-tool.ts +32 -11
- package/src/types-search.ts +11 -4
- package/src/upgrade.ts +205 -25
- package/src/verification-plan.ts +27 -0
- package/src/verification.ts +50 -12
- package/src/web-app-options.ts +57 -0
- package/src/work-graph.ts +40 -16
package/README.md
CHANGED
|
@@ -16,7 +16,9 @@ nifra assure [--config <file>] [--json] Gate reflected routes against enforcem
|
|
|
16
16
|
nifra capabilities check [--json] Gate effect provenance + the reviewed capability lockfile.
|
|
17
17
|
nifra manifest emit [--sign <key-ref>] Emit the hash-verified route trust artifact after assurance.
|
|
18
18
|
nifra manifest diff <before> <after> Block promotion on contract/governance regressions.
|
|
19
|
-
nifra sdk --lang <python|go>
|
|
19
|
+
nifra sdk --lang <python|go> [--strict]
|
|
20
|
+
Generate typed Python dataclass or Go SDK from `backend.ts`; strict mode
|
|
21
|
+
fails on opaque schemas and unsupported SSE contracts.
|
|
20
22
|
nifra doctor [--json] [--auto-fix] Catch undeclared imports and duplicate Nifra/React installs.
|
|
21
23
|
```
|
|
22
24
|
|
|
@@ -45,7 +47,20 @@ Ed25519 sidecar, so the private key can stay inside KMS/HSM infrastructure.
|
|
|
45
47
|
|
|
46
48
|
At promotion time, `nifra manifest diff previous.json candidate.json` hash-verifies both files and exits
|
|
47
49
|
non-zero on a breaking API change, removed assurance, expanded effect, lost provenance coverage, or
|
|
48
|
-
increased data sensitivity.
|
|
50
|
+
increased data sensitivity. A new route counts as well: one that declares a capability or returns `pii`
|
|
51
|
+
or `secret` data blocks promotion as the same change to an existing route would. This is separate from
|
|
52
|
+
the frontend asset `dist/manifest.json`.
|
|
53
|
+
|
|
54
|
+
## `nifra verify` - verification tiers
|
|
55
|
+
|
|
56
|
+
`nifra check` is the fast project done-gate: TypeScript plus static contract and boundary diagnostics.
|
|
57
|
+
It is not a release claim. `nifra verify` runs the ordered local verification plan; its default mode
|
|
58
|
+
is the feedback plan and reports which release gates it omits. CI and release automation should run
|
|
59
|
+
`nifra verify --release` (or `bun run check:release`), which includes build, coverage, corpus,
|
|
60
|
+
consumer, publish, and cross-runtime gates. Each gate runs a `package.json` script (`bun run lint`,
|
|
61
|
+
`bun run check:docs`, ...); a gate whose script the project does not declare is reported as
|
|
62
|
+
`undeclared` and does not fail the run. Run `nifra port --ci --target <target>` for an app's
|
|
63
|
+
resolved deployment target; CI never guesses a target when none is configured.
|
|
49
64
|
|
|
50
65
|
## `nifra check` - the drift gate (run as "done")
|
|
51
66
|
|
|
@@ -74,6 +89,15 @@ For hand-rolled own-API `fetch()` calls, `nifra check` stays conservative: simpl
|
|
|
74
89
|
that match a statically visible Nifra route get an exact typed-client rewrite diff; dynamic URLs, custom
|
|
75
90
|
headers, bodies, query strings, or ambiguous routes fall back to manual steps.
|
|
76
91
|
|
|
92
|
+
## `nifra i18n check` - the catalog gate
|
|
93
|
+
|
|
94
|
+
`nifra i18n check [entry]` imports the module that exports your `locales` (from `defineLocales`) and
|
|
95
|
+
`catalogs` - unlike `nifra check`, it runs that code - and reports per-locale coverage, missing and
|
|
96
|
+
unused keys, ICU syntax errors, placeholder and rich-tag parity with the default message, plural cases
|
|
97
|
+
the locale's grammar needs, script purity (letters from a script the locale does not write in), and
|
|
98
|
+
untranslated messages. It exits 1 on an error, `--strict` also fails on warnings, and `--json` prints
|
|
99
|
+
the result. The checks are `checkCatalogs()` from `@nifrajs/i18n/check`, usable in a test.
|
|
100
|
+
|
|
77
101
|
## `nifra migrate --from tailwind --to stylex`
|
|
78
102
|
|
|
79
103
|
This command is a dry run by default. It rewrites static `className` attributes whose utilities have a
|
|
@@ -109,7 +133,7 @@ an agent can act on the project, not just read about it. Core tools:
|
|
|
109
133
|
- **`nifra_context`** - the same project surface as above.
|
|
110
134
|
- **`nifra_routes`** / **`nifra_openapi`** - structured API route contracts and an OpenAPI 3.1 document.
|
|
111
135
|
- **`nifra_docs`** / **`nifra_example`** - token-efficient docs slices and verified code snippets.
|
|
112
|
-
- **`nifra_scaffold`** - map a URL to the correct `routes/`
|
|
136
|
+
- **`nifra_scaffold`** - map a URL to the correct `routes/` files and a route pair (the page + its `.backend.ts` loader with an output schema); optionally write them.
|
|
113
137
|
- **`nifra_run`** - run HTTP requests through this project's backend and get structured results
|
|
114
138
|
(status, headers, parsed body, and any thrown error). The backend is re-loaded in a fresh process
|
|
115
139
|
each call by default, so it reflects the agent's latest edits - the write → run → see-the-failure
|
|
@@ -153,6 +177,21 @@ Claude Code:
|
|
|
153
177
|
claude mcp add nifra -- nifra mcp
|
|
154
178
|
```
|
|
155
179
|
|
|
180
|
+
The server answers for the nifra the project installs. When the project has its own `@nifrajs/cli` at
|
|
181
|
+
a different version than the `nifra` the client spawned (a global install, say), the session is handed
|
|
182
|
+
to `./node_modules/.bin/nifra mcp`. When that is impossible, `nifra_check`, `nifra_types`,
|
|
183
|
+
`nifra_docs`, `nifra_example`, `nifra_assure` and `nifra_contracts` refuse with the fix instead of
|
|
184
|
+
describing a different release.
|
|
185
|
+
|
|
186
|
+
The server runs none of the project's code and keeps none of its `.env`. Every tool, resource and
|
|
187
|
+
prompt that loads the app, including the ones the app declares with `.tool()`, runs in a fresh process
|
|
188
|
+
started in the project's directory, which loads that directory's `.env` files, answers and exits; a
|
|
189
|
+
config that exits or hangs fails only that call. Values from the environment and from
|
|
190
|
+
`nifra mcp --env-file <path>` reach every such process. In a monorepo each app's tools see that app's
|
|
191
|
+
`.env`, not the root's. A call that loads the app costs one process start, and `warm: true` on
|
|
192
|
+
`nifra_run`/`nifra_render` keeps one worker with the app loaded until a source file changes. Details
|
|
193
|
+
and limits: [Where your code and secrets run](https://nifra.dev/docs/agents#project-code).
|
|
194
|
+
|
|
156
195
|
## Structured verification
|
|
157
196
|
|
|
158
197
|
`nifra check --json` returns stable diagnostic codes and machine-actionable evidence. `nifra assure --json --strict` returns one versioned bundle with explicit pass, fail, and skip gate results plus a `green` or `red` verdict. Use `nifra fix --code NF-...` for a registered fix recipe, and `nifra contracts snapshot` to opt into route contract drift detection.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const CONFIG_FILE = "nifra.config.ts";
|
|
2
|
+
export declare const FRAMEWORK_FILE = "backend/framework.ts";
|
|
3
|
+
export declare const BACKEND_APP_FILE = "backend/app.ts";
|
|
4
|
+
/** The root files this layout retired, and where each lives now. */
|
|
5
|
+
export declare const RETIRED_ROOT_FILES: Readonly<Record<string, string>>;
|
|
6
|
+
/** Refuse an app still on the retired root files: run against it, a command would silently miss them. */
|
|
7
|
+
export declare function assertCurrentLayout(cwd: string): void;
|
|
8
|
+
/** The file the generated server entry imports the adapter from: `backend/framework.ts` when it exists,
|
|
9
|
+
* else the config (a single-target app may keep everything in `nifra.config.ts`). */
|
|
10
|
+
export declare function adapterFile(cwd: string): string;
|
|
11
|
+
//# sourceMappingURL=app-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-files.d.ts","sourceRoot":"","sources":["../src/app-files.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW,oBAAoB,CAAA;AAC5C,eAAO,MAAM,cAAc,yBAAyB,CAAA;AACpD,eAAO,MAAM,gBAAgB,mBAAmB,CAAA;AAEhD,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG/D,CAAA;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAUrD;AAED;qFACqF;AACrF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where an app's own entry files live, in one place for every command.
|
|
3
|
+
*
|
|
4
|
+
* - `nifra.config.ts` - the CLI's config (dev/build tooling); only the CLI imports it.
|
|
5
|
+
* - `backend/framework.ts` - the render adapter and the options the generated server entry imports,
|
|
6
|
+
* kept free of build tooling because it is bundled into every server build.
|
|
7
|
+
* - `backend/app.ts` - exports `backend`, the app's API (a `@nifrajs/core` server). Optional.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync } from "node:fs";
|
|
10
|
+
import { resolve } from "node:path";
|
|
11
|
+
export const CONFIG_FILE = "nifra.config.ts";
|
|
12
|
+
export const FRAMEWORK_FILE = "backend/framework.ts";
|
|
13
|
+
export const BACKEND_APP_FILE = "backend/app.ts";
|
|
14
|
+
/** The root files this layout retired, and where each lives now. */
|
|
15
|
+
export const RETIRED_ROOT_FILES = {
|
|
16
|
+
"backend.ts": BACKEND_APP_FILE,
|
|
17
|
+
"framework.ts": FRAMEWORK_FILE,
|
|
18
|
+
};
|
|
19
|
+
/** Refuse an app still on the retired root files: run against it, a command would silently miss them. */
|
|
20
|
+
export function assertCurrentLayout(cwd) {
|
|
21
|
+
const retired = Object.entries(RETIRED_ROOT_FILES).filter(([file]) => existsSync(resolve(cwd, file)));
|
|
22
|
+
if (retired.length === 0)
|
|
23
|
+
return;
|
|
24
|
+
const moves = retired.map(([from, to]) => `${from} -> ${to}`).join(", ");
|
|
25
|
+
throw new Error(`[nifra] this app uses the retired root layout (${moves}). Run \`nifra migrate layout\` to see the ` +
|
|
26
|
+
"move (it also splits each route into x.tsx and x.backend.ts), then `nifra migrate layout --write`.");
|
|
27
|
+
}
|
|
28
|
+
/** The file the generated server entry imports the adapter from: `backend/framework.ts` when it exists,
|
|
29
|
+
* else the config (a single-target app may keep everything in `nifra.config.ts`). */
|
|
30
|
+
export function adapterFile(cwd) {
|
|
31
|
+
const framework = resolve(cwd, FRAMEWORK_FILE);
|
|
32
|
+
return existsSync(framework) ? framework : resolve(cwd, CONFIG_FILE);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=app-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-files.js","sourceRoot":"","sources":["../src/app-files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAA;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAA;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAA;AAEhD,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,cAAc;CAC/B,CAAA;AAED,yGAAyG;AACzG,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CACnE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAC/B,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxE,MAAM,IAAI,KAAK,CACb,kDAAkD,KAAK,6CAA6C;QAClG,oGAAoG,CACvG,CAAA;AACH,CAAC;AAED;qFACqF;AACrF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC9C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -9,6 +9,12 @@ export interface HydrationOptions {
|
|
|
9
9
|
readonly interact?: boolean;
|
|
10
10
|
readonly seed?: string;
|
|
11
11
|
}
|
|
12
|
+
/** Bounds on a hydration run beyond its {@link HydrationOptions}. */
|
|
13
|
+
export interface HydrationRunControl {
|
|
14
|
+
readonly signal?: AbortSignal;
|
|
15
|
+
/** Default 300000 (five minutes). */
|
|
16
|
+
readonly timeoutMs?: number;
|
|
17
|
+
}
|
|
12
18
|
/** Run hydration in a fresh process so the project's current client and framework modules are isolated. */
|
|
13
|
-
export declare function runHydrationAssurance(cwd: string, options?: HydrationOptions): Promise<HydrationResult>;
|
|
19
|
+
export declare function runHydrationAssurance(cwd: string, options?: HydrationOptions, control?: HydrationRunControl): Promise<HydrationResult>;
|
|
14
20
|
//# sourceMappingURL=assure-hydration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assure-hydration.d.ts","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assure-hydration.d.ts","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,OAAO,kBAAkB,EAAE,UAAU,EAAE,CAAA;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AA+jBD,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,2GAA2G;AAC3G,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,EAC9B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,CA0D1B"}
|
package/dist/assure-hydration.js
CHANGED
|
@@ -7,11 +7,10 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
9
|
import { existsSync, statSync } from "node:fs";
|
|
10
|
-
import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
10
|
+
import { copyFile, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
11
11
|
import { tmpdir } from "node:os";
|
|
12
12
|
import { basename, join, resolve } from "node:path";
|
|
13
13
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
14
|
-
import { inProcessClient } from "@nifrajs/client";
|
|
15
14
|
import { defineReplayFile } from "@nifrajs/core/replay";
|
|
16
15
|
import { runApp } from "@nifrajs/runner";
|
|
17
16
|
import { createWebApp } from "@nifrajs/web";
|
|
@@ -19,6 +18,8 @@ import { buildClient } from "@nifrajs/web/build";
|
|
|
19
18
|
import { discoverRoutes } from "@nifrajs/web/fs";
|
|
20
19
|
import { collectDoctorResult } from "./doctor.js";
|
|
21
20
|
import { loadApp, resolvePlugins } from "./load.js";
|
|
21
|
+
import { CHILD_OUTPUT_MAX_BYTES, joinHeadTail, readBoundedStream, readHeadTail } from "./mcp-io.js";
|
|
22
|
+
import { frameworkWebAppOptions } from "./web-app-options.js";
|
|
22
23
|
const HYDRATION_ASSURANCE = Symbol.for("nifra.hydration.assurance");
|
|
23
24
|
const SOURCE_GLOB = "**/*.{ts,tsx,js,jsx,vue,svelte,mdx}";
|
|
24
25
|
const IGNORED = /(^|\/)(node_modules|dist|build|coverage|\.git|\.nifra)\//;
|
|
@@ -120,6 +121,8 @@ async function buildHydrationApp(cwd) {
|
|
|
120
121
|
const client = await buildClient({
|
|
121
122
|
routesDir: loaded.routesDir,
|
|
122
123
|
outDir: clientOutput,
|
|
124
|
+
// The runner imports the entry from disk, where a `/assets/` chunk URL is a filesystem path.
|
|
125
|
+
publicPath: `${pathToFileURL(clientOutput).href}/`,
|
|
123
126
|
clientModule: loaded.framework.clientModule,
|
|
124
127
|
...(plugins.length === 0 ? {} : { plugins: plugins }),
|
|
125
128
|
...(loaded.framework.conditions === undefined
|
|
@@ -130,6 +133,9 @@ async function buildHydrationApp(cwd) {
|
|
|
130
133
|
...(loaded.framework.publicEnvPrefix === undefined
|
|
131
134
|
? {}
|
|
132
135
|
: { publicEnvPrefix: loaded.framework.publicEnvPrefix }),
|
|
136
|
+
...(loaded.framework.secretExemptions === undefined
|
|
137
|
+
? {}
|
|
138
|
+
: { secretExemptions: loaded.framework.secretExemptions }),
|
|
133
139
|
});
|
|
134
140
|
if (client.entry.trim() === "" || client.assets.length === 0) {
|
|
135
141
|
await rm(workDir, { recursive: true, force: true });
|
|
@@ -145,7 +151,7 @@ async function buildHydrationApp(cwd) {
|
|
|
145
151
|
adapter: loaded.framework.adapter,
|
|
146
152
|
manifest: discoverRoutes(loaded.routesDir),
|
|
147
153
|
clientEntry: client.entry,
|
|
148
|
-
...(loaded.
|
|
154
|
+
...frameworkWebAppOptions(loaded.framework, loaded.backend),
|
|
149
155
|
});
|
|
150
156
|
return {
|
|
151
157
|
app: webApp,
|
|
@@ -176,21 +182,12 @@ async function sourceFiles(cwd) {
|
|
|
176
182
|
}
|
|
177
183
|
return files;
|
|
178
184
|
}
|
|
185
|
+
/** How long a route may take to mark itself hydrated before the gate fails it. */
|
|
186
|
+
const HYDRATION_TIMEOUT_MS = 5_000;
|
|
187
|
+
let entryCopies = 0;
|
|
179
188
|
function outputPath(outputDir, entry) {
|
|
180
189
|
return join(outputDir, basename(entry));
|
|
181
190
|
}
|
|
182
|
-
function globalValue(html, name) {
|
|
183
|
-
const expression = new RegExp(`window\\.${name}=([\\s\\S]*?)(?:</script>|;window\\.)`);
|
|
184
|
-
const value = expression.exec(html)?.[1]?.replace(/;$/, "");
|
|
185
|
-
if (value === undefined)
|
|
186
|
-
return undefined;
|
|
187
|
-
try {
|
|
188
|
-
return JSON.parse(value);
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
return undefined;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
191
|
async function runDomHydration(cwd, built, html, path, interact) {
|
|
195
192
|
const domModule = await loadOptionalDom(cwd);
|
|
196
193
|
if (domModule === undefined)
|
|
@@ -228,11 +225,23 @@ async function runDomHydration(cwd, built, html, path, interact) {
|
|
|
228
225
|
else
|
|
229
226
|
globals[name] = windowValue[name];
|
|
230
227
|
}
|
|
228
|
+
// Framework runtimes reach for more DOM globals (Vue's `SVGElement`, `Text`, `Comment`). Lend every
|
|
229
|
+
// one the runtime does not define itself, so its own `fetch`, `URL` and timers stay in place.
|
|
230
|
+
for (const name of Object.getOwnPropertyNames(windowValue)) {
|
|
231
|
+
if (name in globals)
|
|
232
|
+
continue;
|
|
233
|
+
let value;
|
|
234
|
+
try {
|
|
235
|
+
value = windowValue[name];
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
previous.set(name, undefined);
|
|
241
|
+
globals[name] =
|
|
242
|
+
typeof value === "function" && !/^[A-Z]/.test(name) ? value.bind(windowValue) : value;
|
|
243
|
+
}
|
|
231
244
|
const windowRecord = windowValue;
|
|
232
|
-
windowRecord.__NIFRA_ROUTE__ = globalValue(html, "__NIFRA_ROUTE__");
|
|
233
|
-
windowRecord.__NIFRA_DATA__ = globalValue(html, "__NIFRA_DATA__");
|
|
234
|
-
windowRecord.__NIFRA_LAYOUT_DATA__ = globalValue(html, "__NIFRA_LAYOUT_DATA__");
|
|
235
|
-
windowRecord.__NIFRA_ACTION__ = globalValue(html, "__NIFRA_ACTION__");
|
|
236
245
|
windowRecord.console = console;
|
|
237
246
|
const errors = [];
|
|
238
247
|
const recover = (error, info) => {
|
|
@@ -249,7 +258,12 @@ async function runDomHydration(cwd, built, html, path, interact) {
|
|
|
249
258
|
write.call(documentValue, html);
|
|
250
259
|
const beforeRoot = documentValue.querySelector("#root");
|
|
251
260
|
const before = String(beforeRoot?.innerHTML ?? "");
|
|
252
|
-
|
|
261
|
+
// Bun evaluates a file module once per path, query or not, so each route imports its own copy.
|
|
262
|
+
// A fresh directory each time: Bun's resolver caches a directory's listing once it has read it.
|
|
263
|
+
const copyDir = join(built.outputDir, `route-${++entryCopies}`);
|
|
264
|
+
await mkdir(copyDir);
|
|
265
|
+
const entry = join(copyDir, basename(built.client.entry));
|
|
266
|
+
await copyFile(outputPath(built.outputDir, built.client.entry), entry);
|
|
253
267
|
const originalError = console.error;
|
|
254
268
|
const originalWarn = console.warn;
|
|
255
269
|
console.error = (...args) => {
|
|
@@ -264,17 +278,42 @@ async function runDomHydration(cwd, built, html, path, interact) {
|
|
|
264
278
|
errors.push(message);
|
|
265
279
|
originalWarn(...args);
|
|
266
280
|
};
|
|
281
|
+
// A render that throws on the client surfaces from a scheduler task, not from the import.
|
|
282
|
+
const uncaught = (error) => {
|
|
283
|
+
errors.push(`uncaught: ${error instanceof Error ? error.message : String(error)}`);
|
|
284
|
+
};
|
|
285
|
+
process.on("uncaughtException", uncaught);
|
|
286
|
+
process.on("unhandledRejection", uncaught);
|
|
287
|
+
let hydrated = false;
|
|
267
288
|
try {
|
|
268
|
-
await import(__rewriteRelativeImportExtension(
|
|
269
|
-
|
|
289
|
+
await import(__rewriteRelativeImportExtension(pathToFileURL(entry).href));
|
|
290
|
+
// The entry marks <html> once the adapter has mounted the route. `Date.now` is pinned by the
|
|
291
|
+
// deterministic runtime, so the bound is measured with `performance.now`.
|
|
292
|
+
const marked = documentValue.documentElement;
|
|
293
|
+
const started = performance.now();
|
|
294
|
+
for (;;) {
|
|
295
|
+
hydrated = marked.hasAttribute("data-nifra-hydrated");
|
|
296
|
+
if (hydrated || errors.length > 0 || performance.now() - started >= HYDRATION_TIMEOUT_MS)
|
|
297
|
+
break;
|
|
298
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, 1));
|
|
299
|
+
}
|
|
300
|
+
// The framework commits the hydration in its own scheduler tasks after the marker's frame.
|
|
301
|
+
for (let tick = 0; tick < 10; tick++) {
|
|
302
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, 0));
|
|
303
|
+
}
|
|
270
304
|
}
|
|
271
305
|
finally {
|
|
306
|
+
process.off("uncaughtException", uncaught);
|
|
307
|
+
process.off("unhandledRejection", uncaught);
|
|
272
308
|
console.error = originalError;
|
|
273
309
|
console.warn = originalWarn;
|
|
274
310
|
}
|
|
275
311
|
const afterRoot = documentValue.querySelector("#root");
|
|
276
312
|
const after = String(afterRoot?.innerHTML ?? "");
|
|
277
313
|
const diagnostics = [];
|
|
314
|
+
if (!hydrated && errors.length === 0) {
|
|
315
|
+
diagnostics.push(diagnostic("NF-H001", `client hydration did not complete within ${HYDRATION_TIMEOUT_MS / 1000}s`, undefined, [built.framework]));
|
|
316
|
+
}
|
|
278
317
|
if (errors.length > 0 || before !== after) {
|
|
279
318
|
diagnostics.push(diagnostic("NF-H001", "client hydration reported a recoverable mismatch", undefined, [
|
|
280
319
|
built.framework,
|
|
@@ -442,47 +481,93 @@ async function runHydrationProof(cwd, options) {
|
|
|
442
481
|
await cleanup();
|
|
443
482
|
}
|
|
444
483
|
}
|
|
484
|
+
/** How long one hydration run may take: it builds the client and renders every route. */
|
|
485
|
+
const HYDRATION_RUN_TIMEOUT_MS = 300_000;
|
|
445
486
|
/** Run hydration in a fresh process so the project's current client and framework modules are isolated. */
|
|
446
|
-
export async function runHydrationAssurance(cwd, options = {}) {
|
|
487
|
+
export async function runHydrationAssurance(cwd, options = {}, control = {}) {
|
|
488
|
+
const failed = (reason) => ({
|
|
489
|
+
diagnostics: [diagnostic("NF-H001", `hydration runner failed: ${reason}`)],
|
|
490
|
+
});
|
|
491
|
+
if (control.signal?.aborted)
|
|
492
|
+
return failed("cancelled");
|
|
447
493
|
const root = resolve(cwd);
|
|
448
494
|
const entry = fileURLToPath(import.meta.url);
|
|
495
|
+
// The answer line carries this token, so whatever project code prints cannot be read as the result.
|
|
496
|
+
const token = crypto.randomUUID();
|
|
449
497
|
const proc = Bun.spawn([process.execPath, entry, root, "--nifra-hydration-child", JSON.stringify(options)], {
|
|
450
|
-
|
|
498
|
+
cwd: root,
|
|
499
|
+
// Explicit: without `env`, Bun passes the environment it started with, missing `--env-file` values.
|
|
500
|
+
env: process.env,
|
|
501
|
+
stdin: "pipe",
|
|
451
502
|
stdout: "pipe",
|
|
452
503
|
stderr: "pipe",
|
|
453
504
|
});
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
505
|
+
let stopped;
|
|
506
|
+
const stop = (reason) => {
|
|
507
|
+
stopped ??= reason;
|
|
508
|
+
proc.kill();
|
|
509
|
+
};
|
|
510
|
+
const onAbort = () => stop("cancelled");
|
|
511
|
+
control.signal?.addEventListener("abort", onAbort, { once: true });
|
|
512
|
+
const timeoutMs = control.timeoutMs ?? HYDRATION_RUN_TIMEOUT_MS;
|
|
513
|
+
const timer = setTimeout(() => stop(`timed out after ${timeoutMs} ms`), timeoutMs);
|
|
459
514
|
try {
|
|
460
|
-
|
|
515
|
+
try {
|
|
516
|
+
proc.stdin.write(`${token}\n`);
|
|
517
|
+
await proc.stdin.end();
|
|
518
|
+
}
|
|
519
|
+
catch {
|
|
520
|
+
// The child exited before reading its token; its stderr says why.
|
|
521
|
+
}
|
|
522
|
+
const [stdout, stderr] = await Promise.all([
|
|
523
|
+
readBoundedStream(proc.stdout, CHILD_OUTPUT_MAX_BYTES, () => stop(`output exceeded ${CHILD_OUTPUT_MAX_BYTES} bytes`)),
|
|
524
|
+
readHeadTail(proc.stderr, 2048, 2048),
|
|
525
|
+
proc.exited,
|
|
526
|
+
]);
|
|
527
|
+
if (stopped !== undefined)
|
|
528
|
+
return failed(stopped);
|
|
529
|
+
const prefix = `${token} `;
|
|
530
|
+
const answer = stdout.text.split("\n").find((line) => line.startsWith(prefix));
|
|
531
|
+
if (answer !== undefined) {
|
|
532
|
+
try {
|
|
533
|
+
return JSON.parse(answer.slice(prefix.length));
|
|
534
|
+
}
|
|
535
|
+
catch {
|
|
536
|
+
// A truncated answer line falls through to the stderr report.
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return failed(joinHeadTail(stderr).trim() || "no result");
|
|
461
540
|
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
diagnostic("NF-H001", `hydration runner failed: ${stderr.trim() || stdout.trim() || "no result"}`),
|
|
466
|
-
],
|
|
467
|
-
};
|
|
541
|
+
finally {
|
|
542
|
+
clearTimeout(timer);
|
|
543
|
+
control.signal?.removeEventListener("abort", onAbort);
|
|
468
544
|
}
|
|
469
545
|
}
|
|
470
546
|
if (import.meta.main && process.argv.includes("--nifra-hydration-child")) {
|
|
547
|
+
// Bound before project code loads, so a `console.log` in a config or loader goes to stderr and
|
|
548
|
+
// never reaches the answer channel.
|
|
549
|
+
const stdout = process.stdout.write.bind(process.stdout);
|
|
550
|
+
const toStderr = (...args) => {
|
|
551
|
+
process.stderr.write(`${args.map((arg) => String(arg)).join(" ")}\n`);
|
|
552
|
+
};
|
|
553
|
+
console.log = toStderr;
|
|
554
|
+
console.info = toStderr;
|
|
555
|
+
console.debug = toStderr;
|
|
556
|
+
const token = (await readBoundedStream(Bun.stdin.stream(), 256)).text.trim();
|
|
471
557
|
const cwd = process.argv[2] ?? process.cwd();
|
|
472
558
|
const rawOptions = process.argv[4];
|
|
559
|
+
let result;
|
|
473
560
|
try {
|
|
474
561
|
process.chdir(cwd);
|
|
475
562
|
const options = rawOptions === undefined ? {} : JSON.parse(rawOptions);
|
|
476
|
-
|
|
477
|
-
await Bun.write(Bun.stdout, JSON.stringify(result));
|
|
563
|
+
result = await runHydrationProof(cwd, options);
|
|
478
564
|
}
|
|
479
565
|
catch (error) {
|
|
480
|
-
|
|
481
|
-
diagnostics: [
|
|
482
|
-
|
|
483
|
-
],
|
|
484
|
-
}));
|
|
566
|
+
result = {
|
|
567
|
+
diagnostics: [diagnostic("NF-H001", error instanceof Error ? error.message : String(error))],
|
|
568
|
+
};
|
|
485
569
|
}
|
|
570
|
+
await new Promise((done) => stdout(`${token} ${JSON.stringify(result)}\n`, () => done()));
|
|
486
571
|
process.exit(0);
|
|
487
572
|
}
|
|
488
573
|
//# sourceMappingURL=assure-hydration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assure-hydration.js","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assure-hydration.js","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"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"}
|
package/dist/assure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assure.d.ts","sourceRoot":"","sources":["../src/assure.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAK3F,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"assure.d.ts","sourceRoot":"","sources":["../src/assure.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAK3F,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EACT,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,CAAA;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAA;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAazD;AAED,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAc5D,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,UAAU,SAA2B,GACpC,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA0BrE;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,OAAO,CAAC,OAAO,CAAC,CAalB;AAiCD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,OAAO,CAAC,YAAY,CAAC,CAgNvB"}
|
package/dist/assure.js
CHANGED
|
@@ -10,6 +10,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
10
10
|
import { existsSync } from "node:fs";
|
|
11
11
|
import { join, resolve } from "node:path";
|
|
12
12
|
import { pathToFileURL } from "node:url";
|
|
13
|
+
import { CONFIG_FILE, FRAMEWORK_FILE } from "./app-files.js";
|
|
13
14
|
export function createMemoryAssureSink() {
|
|
14
15
|
const bundles = [];
|
|
15
16
|
return {
|
|
@@ -49,10 +50,23 @@ export async function loadAssuranceConfig(cwd, configPath = DEFAULT_ASSURANCE_CO
|
|
|
49
50
|
}
|
|
50
51
|
export function formatAssuranceReport(report) {
|
|
51
52
|
if (report.ok) {
|
|
53
|
+
const contracted = report.routes.filter((route) => route.responseContract !== undefined);
|
|
54
|
+
const enforced = contracted.filter((route) => route.responseContract === "enforce").length;
|
|
55
|
+
const warned = contracted.filter((route) => route.responseContract === "warn").length;
|
|
56
|
+
const unchecked = contracted.filter((route) => route.responseContract === "unchecked").length;
|
|
57
|
+
const runtimeContract = contracted.length === 0
|
|
58
|
+
? " No declared response/error schemas were found."
|
|
59
|
+
: " Runtime response contracts: " +
|
|
60
|
+
enforced +
|
|
61
|
+
" enforced, " +
|
|
62
|
+
warned +
|
|
63
|
+
" warn-only, " +
|
|
64
|
+
unchecked +
|
|
65
|
+
" typed-only.";
|
|
52
66
|
const capability = report.capabilities
|
|
53
67
|
? ` Capability assurance covered ${report.capabilities.routes.length} route${report.capabilities.routes.length === 1 ? "" : "s"}.`
|
|
54
68
|
: "";
|
|
55
|
-
return `✓ route assurance: ${report.routes.length} route${report.routes.length === 1 ? "" : "s"} classified; all required evidence is present.${capability}`;
|
|
69
|
+
return `✓ route assurance: ${report.routes.length} route${report.routes.length === 1 ? "" : "s"} classified; all required evidence is present.${capability}${runtimeContract}`;
|
|
56
70
|
}
|
|
57
71
|
const messages = [
|
|
58
72
|
...report.findings.map((finding) => finding.message),
|
|
@@ -187,7 +201,7 @@ export async function collectAssureBundle(cwd, options = {}) {
|
|
|
187
201
|
};
|
|
188
202
|
});
|
|
189
203
|
await addGate("render", async () => {
|
|
190
|
-
if (!existsSync(join(cwd,
|
|
204
|
+
if (!existsSync(join(cwd, CONFIG_FILE)) && !existsSync(join(cwd, FRAMEWORK_FILE)))
|
|
191
205
|
return { diagnostics: [], skipReason: "no client render target configured" };
|
|
192
206
|
const { renderPages } = await import("./mcp-render.js");
|
|
193
207
|
const result = await renderPages(cwd, [{ path: "/" }]);
|