@nifrajs/cli 3.5.0 → 4.0.2
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 +4 -0
- package/dist/check-diagnostics.d.ts.map +1 -1
- package/dist/check-diagnostics.js +13 -0
- package/dist/check-diagnostics.js.map +1 -1
- package/dist/check-scan.d.ts +49 -7
- package/dist/check-scan.d.ts.map +1 -1
- package/dist/check-scan.js +291 -62
- package/dist/check-scan.js.map +1 -1
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +99 -63
- 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 +262 -82
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.d.ts +62 -5
- package/dist/command-catalog.d.ts.map +1 -1
- package/dist/command-catalog.js +275 -35
- 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.map +1 -1
- package/dist/contracts.js +52 -13
- 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/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 +48 -22
- 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 +5 -1
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +92 -27
- 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 +67 -17
- 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.js +1 -1
- 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 +2 -0
- package/dist/mcp-exec.d.ts.map +1 -1
- package/dist/mcp-exec.js +132 -108
- package/dist/mcp-exec.js.map +1 -1
- package/dist/mcp-http.d.ts.map +1 -1
- package/dist/mcp-http.js +17 -5
- package/dist/mcp-http.js.map +1 -1
- package/dist/mcp-io.d.ts +14 -0
- package/dist/mcp-io.d.ts.map +1 -1
- package/dist/mcp-io.js +45 -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-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-render.js +2 -2
- 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 +110 -23
- 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 +82 -9
- 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 +16 -3
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +81 -53
- 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 +1155 -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 +5 -0
- package/dist/project-facts.d.ts.map +1 -1
- 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 +36 -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.map +1 -1
- package/dist/review.js +12 -8
- package/dist/review.js.map +1 -1
- 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.map +1 -1
- package/dist/rules/legacy.js +71 -38
- 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 +132 -87
- 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 +10 -2
- package/dist/sync-manifest.d.ts.map +1 -1
- package/dist/sync-manifest.js +44 -19
- 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 +4 -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.map +1 -1
- package/dist/work-graph.js +29 -13
- package/dist/work-graph.js.map +1 -1
- package/docs/examples.json +185 -29
- package/docs/llms-full.txt +3807 -580
- package/docs/types.json +14229 -10939
- package/package.json +19 -12
- 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 +17 -0
- package/src/check-scan.ts +358 -63
- package/src/check.ts +97 -62
- package/src/cli.ts +296 -87
- package/src/command-catalog.ts +389 -48
- package/src/config-target.ts +47 -0
- package/src/contracts.ts +54 -12
- 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/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 +53 -32
- 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 +90 -27
- package/src/learn.ts +3 -3
- package/src/levels-tool.ts +47 -2
- package/src/load.ts +140 -33
- package/src/manifest-tool.ts +3 -2
- package/src/mcp-app-tool.ts +2 -0
- package/src/mcp-context.ts +1 -1
- package/src/mcp-delegate.ts +162 -0
- package/src/mcp-docs-tools.ts +23 -5
- package/src/mcp-exec.ts +160 -132
- package/src/mcp-http.ts +19 -5
- package/src/mcp-io.ts +57 -0
- package/src/mcp-isolate.ts +287 -0
- package/src/mcp-project-child.ts +182 -0
- package/src/mcp-render.ts +2 -2
- package/src/mcp-root.ts +117 -22
- package/src/mcp-run.ts +104 -10
- package/src/mcp-ws.ts +4 -1
- package/src/mcp.ts +106 -64
- package/src/migrate-layout.ts +1338 -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 +5 -0
- package/src/recipes/4.0.0.ts +37 -0
- package/src/recipes/index.ts +2 -0
- package/src/release-verification.ts +74 -5
- package/src/review.ts +13 -8
- 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 +71 -39
- 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 +147 -95
- package/src/sdk.ts +1215 -158
- package/src/search-terms.ts +24 -7
- package/src/smoke.ts +607 -0
- package/src/sync-manifest.ts +50 -19
- 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 +13 -0
- package/src/verification.ts +50 -12
- package/src/web-app-options.ts +57 -0
- package/src/work-graph.ts +27 -13
package/dist/fix-recipes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix-recipes.js","sourceRoot":"","sources":["../src/fix-recipes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AASnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAA;AAE5C,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;IACjF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,iBAAiB,CAAC;IAChB,EAAE,EAAE,4BAA4B;IAChC,WAAW,EAAE,oFAAoF;IACjG,MAAM,EAAE,0BAA0B;IAClC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU;QAC1B,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS
|
|
1
|
+
{"version":3,"file":"fix-recipes.js","sourceRoot":"","sources":["../src/fix-recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,10 +27,10 @@ export const FRONTEND_GUIDANCE = [
|
|
|
27
27
|
id: "server-import",
|
|
28
28
|
adapters: ["all"],
|
|
29
29
|
symptom: "A client component crashes at build or runtime with a missing Node built-in, a leaked secret, or 'module not found in the browser'.",
|
|
30
|
-
cause: "
|
|
31
|
-
fix: "Move the access into
|
|
30
|
+
cause: "Browser code (a page, `frontend/` or `shared/`) imports backend code - `backend/`, a route's `.backend.ts` half, the DB, a secret, `node:*` - so the browser build refuses it.",
|
|
31
|
+
fix: "Move the access into the route's `.backend.ts` half (`loader`/`action` with `loaderOutput`/`actionOutput`) and read the result as `data` in the page. Reach the backend through the typed `api` argument; put code both sides need in `shared/`.",
|
|
32
32
|
verify: "nifra_check - its transitive server-import scan flags the exact import chain into a client module.",
|
|
33
|
-
seeAlso: "
|
|
33
|
+
seeAlso: "project structure route backend half import rules",
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
id: "hydration-mismatch",
|
|
@@ -55,9 +55,9 @@ export const FRONTEND_GUIDANCE = [
|
|
|
55
55
|
adapters: ["all"],
|
|
56
56
|
symptom: "Loader data is typed `any` in the page, or a hand-written interface silently drifts from what the loader actually returns.",
|
|
57
57
|
cause: "The component types its props by hand instead of inferring them from the loader, so a change to the loader is not a type error at the use site.",
|
|
58
|
-
fix:
|
|
58
|
+
fix: 'Type the page from its generated route types: `import type { Route } from "./+types/<name>"` and `props: Route.ComponentProps`. Its `data` is the `loaderOutput` schema\'s type - what actually reaches the browser - while `LoaderData<typeof loader>` also types fields the schema strips. Call the backend through the typed `api` (`Route.LoaderArgs`) so the request/response shape is inferred, not restated.',
|
|
59
59
|
verify: "nifra_context prints the exact loader shape and typed call form; nifra_check fails on drift.",
|
|
60
|
-
seeAlso: "
|
|
60
|
+
seeAlso: "route types Route.ComponentProps loaderOutput typed client",
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
id: "list-key",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend-guidance.js","sourceRoot":"","sources":["../src/frontend-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAwBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD;QACE,EAAE,EAAE,eAAe;QACnB,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,OAAO,EACL,qIAAqI;QACvI,KAAK,EACH,
|
|
1
|
+
{"version":3,"file":"frontend-guidance.js","sourceRoot":"","sources":["../src/frontend-guidance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CatalogCheckResult } from "@nifrajs/i18n/check";
|
|
2
|
+
export declare const DEFAULT_ENTRIES: readonly ["shared/i18n.ts", "i18n.ts", "lib/i18n.ts", "src/i18n.ts", "src/lib/i18n.ts", "app/i18n.ts"];
|
|
3
|
+
export interface I18nCheckOutput {
|
|
4
|
+
/** The entry module, relative to the project directory. */
|
|
5
|
+
readonly entry: string;
|
|
6
|
+
readonly result: CatalogCheckResult;
|
|
7
|
+
}
|
|
8
|
+
/** Import the entry, load every catalog it names, and check them. */
|
|
9
|
+
export declare function runI18nCheck(cwd: string, options?: {
|
|
10
|
+
readonly entry?: string | undefined;
|
|
11
|
+
}): Promise<I18nCheckOutput>;
|
|
12
|
+
/** The human report: a coverage table, then findings, grouped where they are key lists. */
|
|
13
|
+
export declare function renderI18nCheck(out: I18nCheckOutput): readonly string[];
|
|
14
|
+
/** Errors fail the run; with `strict`, warnings do too. Info never does. */
|
|
15
|
+
export declare function i18nCheckPassed(out: I18nCheckOutput, strict: boolean): boolean;
|
|
16
|
+
//# sourceMappingURL=i18n-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-check.d.ts","sourceRoot":"","sources":["../src/i18n-check.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAuB,kBAAkB,EAAkB,MAAM,qBAAqB,CAAA;AAElG,eAAO,MAAM,eAAe,wGAOlB,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CACpC;AAiCD,qEAAqE;AACrE,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GACpD,OAAO,CAAC,eAAe,CAAC,CAmC1B;AA2BD,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,SAAS,MAAM,EAAE,CA6CvE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAI9E"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* `nifra i18n check [entry]` - runs `checkCatalogs()` from `@nifrajs/i18n/check` over an app's locale
|
|
11
|
+
* registry and catalogs. Unlike `nifra check`, this IMPORTS app code: the entry module, which exports
|
|
12
|
+
* `locales` (from `defineLocales`) and `catalogs` (by locale key: a catalog, or a function returning
|
|
13
|
+
* one or a promise of one, such as `() => import("./messages/fr.json")`), plus an optional `ignore`.
|
|
14
|
+
* The default entry is the first of {@link DEFAULT_ENTRIES} that exists.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync } from "node:fs";
|
|
17
|
+
import { relative, resolve } from "node:path";
|
|
18
|
+
import { pathToFileURL } from "node:url";
|
|
19
|
+
export const DEFAULT_ENTRIES = [
|
|
20
|
+
"shared/i18n.ts",
|
|
21
|
+
"i18n.ts",
|
|
22
|
+
"lib/i18n.ts",
|
|
23
|
+
"src/i18n.ts",
|
|
24
|
+
"src/lib/i18n.ts",
|
|
25
|
+
"app/i18n.ts",
|
|
26
|
+
];
|
|
27
|
+
const isObject = (value) => value !== null && typeof value === "object";
|
|
28
|
+
/** A loaded module's default export when the value is a module namespace (`import("./fr.json")`). */
|
|
29
|
+
const unwrapModule = (value) => isObject(value) && Object.prototype.toString.call(value) === "[object Module]"
|
|
30
|
+
? value.default
|
|
31
|
+
: value;
|
|
32
|
+
const isRegistry = (value) => isObject(value) &&
|
|
33
|
+
typeof value.default === "string" &&
|
|
34
|
+
Array.isArray(value.all) &&
|
|
35
|
+
typeof value.get === "function" &&
|
|
36
|
+
typeof value.chain === "function";
|
|
37
|
+
function resolveEntry(cwd, entry) {
|
|
38
|
+
if (entry !== undefined) {
|
|
39
|
+
const path = resolve(cwd, entry);
|
|
40
|
+
if (!existsSync(path))
|
|
41
|
+
throw new Error(`i18n check: ${entry} does not exist`);
|
|
42
|
+
return path;
|
|
43
|
+
}
|
|
44
|
+
for (const candidate of DEFAULT_ENTRIES) {
|
|
45
|
+
const path = resolve(cwd, candidate);
|
|
46
|
+
if (existsSync(path))
|
|
47
|
+
return path;
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`i18n check: no entry module found (looked for ${DEFAULT_ENTRIES.join(", ")}). Pass one: nifra i18n check <entry>, a module exporting \`locales\` and \`catalogs\`.`);
|
|
50
|
+
}
|
|
51
|
+
/** Import the entry, load every catalog it names, and check them. */
|
|
52
|
+
export async function runI18nCheck(cwd, options = {}) {
|
|
53
|
+
const path = resolveEntry(cwd, options.entry);
|
|
54
|
+
const mod = (await import(__rewriteRelativeImportExtension(pathToFileURL(path).href)));
|
|
55
|
+
const source = isObject(mod.default) && mod.locales === undefined ? mod.default : mod;
|
|
56
|
+
const { locales, catalogs, ignore } = source;
|
|
57
|
+
const entry = relative(cwd, path).replaceAll("\\", "/") || path;
|
|
58
|
+
if (!isRegistry(locales)) {
|
|
59
|
+
throw new Error(`i18n check: ${entry} must export \`locales\`, the registry defineLocales() returns`);
|
|
60
|
+
}
|
|
61
|
+
if (!isObject(catalogs)) {
|
|
62
|
+
throw new Error(`i18n check: ${entry} must export \`catalogs\`, an object of catalogs by locale key`);
|
|
63
|
+
}
|
|
64
|
+
if (ignore !== undefined && !isObject(ignore)) {
|
|
65
|
+
throw new Error(`i18n check: \`ignore\` in ${entry} must be an object of key patterns by check`);
|
|
66
|
+
}
|
|
67
|
+
const loaded = {};
|
|
68
|
+
for (const key of Object.keys(catalogs)) {
|
|
69
|
+
let value = catalogs[key];
|
|
70
|
+
if (typeof value === "function")
|
|
71
|
+
value = value();
|
|
72
|
+
loaded[key] = unwrapModule(await value);
|
|
73
|
+
}
|
|
74
|
+
// Loaded on use: the command catalog imports this module on every CLI start.
|
|
75
|
+
const { checkCatalogs } = await import("@nifrajs/i18n/check");
|
|
76
|
+
return {
|
|
77
|
+
entry,
|
|
78
|
+
result: checkCatalogs({
|
|
79
|
+
locales,
|
|
80
|
+
catalogs: loaded,
|
|
81
|
+
ignore: ignore,
|
|
82
|
+
}),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const MARK = { error: "✖", warning: "⚠", info: "•" };
|
|
86
|
+
// Per-key findings that are lists rather than problems one by one: grouped per locale in the text.
|
|
87
|
+
const GROUPED = new Set(["missing-key", "unused-key", "untranslated"]);
|
|
88
|
+
const SHOWN_KEYS = 6;
|
|
89
|
+
// Catalog keys and text reach the terminal: control and bidi-override characters print as escapes, so
|
|
90
|
+
// a key can neither drive the terminal nor reorder what the line appears to say.
|
|
91
|
+
const unprintable = (code) => code <= 0x1f ||
|
|
92
|
+
(code >= 0x7f && code <= 0x9f) ||
|
|
93
|
+
code === 0x200e ||
|
|
94
|
+
code === 0x200f ||
|
|
95
|
+
(code >= 0x202a && code <= 0x202e) ||
|
|
96
|
+
(code >= 0x2066 && code <= 0x2069);
|
|
97
|
+
const printable = (line) => {
|
|
98
|
+
let out = "";
|
|
99
|
+
for (const char of line) {
|
|
100
|
+
const code = char.codePointAt(0) ?? 0;
|
|
101
|
+
out += unprintable(code) ? `\\u${code.toString(16).padStart(4, "0")}` : char;
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
};
|
|
105
|
+
const percent = (share) => `${(share * 100).toFixed(share === 1 ? 0 : 1)}%`;
|
|
106
|
+
/** The human report: a coverage table, then findings, grouped where they are key lists. */
|
|
107
|
+
export function renderI18nCheck(out) {
|
|
108
|
+
const { result } = out;
|
|
109
|
+
const lines = [`nifra i18n check - ${out.entry}`, ""];
|
|
110
|
+
const width = Math.max(6, ...result.coverage.map((row) => row.locale.length));
|
|
111
|
+
for (const row of result.coverage) {
|
|
112
|
+
const label = row.default ? "default" : row.draft ? "draft" : "";
|
|
113
|
+
const counts = row.default
|
|
114
|
+
? `${row.total} messages`
|
|
115
|
+
: `${row.translated}/${row.total} (${percent(row.coverage)})${row.own === row.translated ? "" : `, ${row.own} own`}`;
|
|
116
|
+
lines.push(` ${row.locale.padEnd(width)} ${label.padEnd(7)} ${counts}`);
|
|
117
|
+
}
|
|
118
|
+
if (result.coverage.length > 0)
|
|
119
|
+
lines.push("");
|
|
120
|
+
const groups = new Map();
|
|
121
|
+
for (const finding of result.findings) {
|
|
122
|
+
if (!GROUPED.has(finding.code) || finding.key === undefined) {
|
|
123
|
+
lines.push(`${MARK[finding.severity]} ${finding.locale} ${finding.code}: ${finding.message}`);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const id = `${finding.severity}\u0000${finding.locale}\u0000${finding.code}`;
|
|
127
|
+
const group = groups.get(id);
|
|
128
|
+
if (group === undefined)
|
|
129
|
+
groups.set(id, [finding]);
|
|
130
|
+
else
|
|
131
|
+
group.push(finding);
|
|
132
|
+
}
|
|
133
|
+
for (const group of groups.values()) {
|
|
134
|
+
const first = group[0];
|
|
135
|
+
const keys = group.map((finding) => finding.key);
|
|
136
|
+
const shown = keys.slice(0, SHOWN_KEYS).join(", ");
|
|
137
|
+
const more = keys.length > SHOWN_KEYS ? `, +${keys.length - SHOWN_KEYS} more` : "";
|
|
138
|
+
lines.push(`${MARK[first.severity]} ${first.locale} ${first.code} (${keys.length}): ${shown}${more}`);
|
|
139
|
+
}
|
|
140
|
+
const count = (severity) => result.findings.filter((finding) => finding.severity === severity).length;
|
|
141
|
+
const errors = count("error");
|
|
142
|
+
const warnings = count("warning");
|
|
143
|
+
if (result.findings.length > 0)
|
|
144
|
+
lines.push("");
|
|
145
|
+
lines.push(errors === 0 && warnings === 0
|
|
146
|
+
? "✓ catalogs are complete and consistent"
|
|
147
|
+
: `${errors} error${errors === 1 ? "" : "s"}, ${warnings} warning${warnings === 1 ? "" : "s"}${errors === 0 ? " - pass --strict to fail on warnings" : ""}`);
|
|
148
|
+
return lines.map(printable);
|
|
149
|
+
}
|
|
150
|
+
/** Errors fail the run; with `strict`, warnings do too. Info never does. */
|
|
151
|
+
export function i18nCheckPassed(out, strict) {
|
|
152
|
+
return out.result.findings.every((finding) => finding.severity === "info" || (finding.severity === "warning" && !strict));
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=i18n-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-check.js","sourceRoot":"","sources":["../src/i18n-check.ts"],"names":[],"mappings":"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"}
|
package/dist/init-agents.d.ts
CHANGED
|
@@ -1,46 +1,81 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `nifra init-agents` - retrofit an EXISTING app with the agent
|
|
3
|
-
*
|
|
2
|
+
* `nifra init-agents` - retrofit an EXISTING app with the agent files a freshly scaffolded app ships, so
|
|
3
|
+
* an already-built project adopts them in one command:
|
|
4
4
|
*
|
|
5
|
-
* .mcp.json
|
|
6
|
-
* .cursor/
|
|
7
|
-
*
|
|
8
|
-
* AGENTS.md
|
|
5
|
+
* .mcp.json, .cursor/mcp.json - the nifra MCP server for Claude Code and Cursor
|
|
6
|
+
* CLAUDE.md, GEMINI.md, .cursor/rules/nifra.mdc, .github/copilot-instructions.md
|
|
7
|
+
* - each agent's pointer to AGENTS.md, the single source of guidance
|
|
8
|
+
* AGENTS.md - the `## MCP server` section, and for an app with `routes/` the
|
|
9
|
+
* `## Project structure` section, appended when missing (or a minimal
|
|
10
|
+
* file if none exists)
|
|
9
11
|
*
|
|
10
12
|
* The generators are imported from `create-nifra/agent-files` - the SAME source of truth `create-nifra`
|
|
11
13
|
* uses at scaffold time - so a retrofitted app and a freshly scaffolded one get byte-identical configs.
|
|
12
14
|
*
|
|
13
15
|
* Safety: this writes into the user's existing tree, so it NEVER silently clobbers a file they may have
|
|
14
16
|
* customized. By default an existing `.mcp.json` / `CLAUDE.md` / `.cursor/mcp.json` is SKIPPED with a
|
|
15
|
-
* notice; `--force` overwrites. `AGENTS.md` is special-cased -
|
|
16
|
-
*
|
|
17
|
-
*
|
|
17
|
+
* notice; `--force` overwrites. `AGENTS.md` is special-cased - a section it already has is left alone,
|
|
18
|
+
* a missing one is APPENDED (never overwriting the user's conventions), and `--force` is not needed for
|
|
19
|
+
* that append since it's additive. Every write path is resolved + confined under the
|
|
18
20
|
* cwd (no `..` traversal escaping the project root).
|
|
21
|
+
*
|
|
22
|
+
* `--sync-mcp` is the upgrade path: the launch command pins an exact `@nifrajs/cli` version, so after
|
|
23
|
+
* the app upgrades nifra every existing file still launches the old CLI. It rewrites that version and
|
|
24
|
+
* nothing else - the pin in both MCP registries and the launch command in CLAUDE.md and AGENTS.md's
|
|
25
|
+
* MCP section - to the nifra the project installs, leaving every other byte of every file as it was.
|
|
26
|
+
*
|
|
27
|
+
* At a workspace root that is not itself a nifra project but has exactly one nifra member, both runs
|
|
28
|
+
* also name that member in the registries' launch args (`mcp app`), so the server keeps its root when
|
|
29
|
+
* a second nifra member arrives.
|
|
19
30
|
*/
|
|
20
31
|
/** What happened to one file during the retrofit, for the printed report + the `--json` shape. */
|
|
21
32
|
export interface InitAgentsFileResult {
|
|
22
33
|
/** Project-root-relative POSIX path. */
|
|
23
34
|
readonly path: string;
|
|
24
|
-
/** `wrote` - created or (with --force) overwrote; `appended` - added
|
|
25
|
-
* AGENTS.md; `skipped` - already present and not forced
|
|
26
|
-
|
|
35
|
+
/** `wrote` - created or (with --force) overwrote; `appended` - added missing sections to an existing
|
|
36
|
+
* AGENTS.md; `skipped` - already present and not forced (or, under --sync-mcp, absent or unpinned);
|
|
37
|
+
* `present` - every section already there (or, under --sync-mcp, already pinned to the target);
|
|
38
|
+
* `synced` - --sync-mcp rewrote a stale pinned version or named the workspace member. */
|
|
39
|
+
readonly action: "wrote" | "appended" | "skipped" | "present" | "synced";
|
|
27
40
|
/** Why it was skipped/left, for the notice (e.g. "exists - pass --force to overwrite"). */
|
|
28
41
|
readonly note?: string;
|
|
29
42
|
}
|
|
30
43
|
export interface InitAgentsResult {
|
|
31
44
|
readonly cwd: string;
|
|
32
45
|
readonly files: readonly InitAgentsFileResult[];
|
|
46
|
+
/** Under --sync-mcp: the `@nifrajs/cli` version every pin was brought to. */
|
|
47
|
+
readonly syncedTo?: string;
|
|
33
48
|
}
|
|
34
49
|
export interface InitAgentsOptions {
|
|
35
50
|
/** Overwrite an existing `.mcp.json` / `CLAUDE.md` / `.cursor/mcp.json` instead of skipping it. */
|
|
36
51
|
readonly force?: boolean;
|
|
52
|
+
/** Rewrite only the pinned `@nifrajs/cli` version (and, at a workspace root, the member the launch
|
|
53
|
+
* names) in the existing files; create and append nothing. */
|
|
54
|
+
readonly syncMcp?: boolean;
|
|
37
55
|
}
|
|
38
56
|
/** Confine a project-relative path under `cwd` and return the absolute path. Rejects a spec that escapes
|
|
39
57
|
* the root (defense-in-depth - these specs are constants, but the cwd-confinement invariant is enforced
|
|
40
58
|
* at the seam, not assumed). Exported so the invariant is directly testable. */
|
|
41
59
|
export declare function safeJoin(cwd: string, rel: string): string;
|
|
42
60
|
/**
|
|
43
|
-
*
|
|
61
|
+
* The version --sync-mcp pins to: the nifra the project installs, so the server an agent launches
|
|
62
|
+
* describes the surface the code builds with. The running CLI's own version when nothing is
|
|
63
|
+
* installed. Not simply the running CLI's version: the command that fixes a drifted server is run
|
|
64
|
+
* by that drifted CLI, and it must not re-pin to itself.
|
|
65
|
+
*/
|
|
66
|
+
export declare function mcpPinTarget(cwd: string): Promise<string>;
|
|
67
|
+
/** One file whose launch command pins a version other than {@link mcpPinTarget}. */
|
|
68
|
+
export interface StaleMcpPin {
|
|
69
|
+
readonly path: string;
|
|
70
|
+
readonly pinned: readonly string[];
|
|
71
|
+
}
|
|
72
|
+
/** Read-only: every agent file whose pinned `@nifrajs/cli` is not the one the project installs. */
|
|
73
|
+
export declare function collectStaleMcpPins(cwd: string): Promise<{
|
|
74
|
+
readonly target: string;
|
|
75
|
+
readonly files: readonly StaleMcpPin[];
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Retrofit `cwd` with the agent files. Pure enough to unit-test (no argv, no process.exit,
|
|
44
79
|
* no console) - the CLI wrapper handles printing + the exit code.
|
|
45
80
|
*/
|
|
46
81
|
export declare function initAgents(cwd: string, opts?: InitAgentsOptions): Promise<InitAgentsResult>;
|
|
@@ -54,5 +89,6 @@ export declare function renderInitAgents(result: InitAgentsResult): string;
|
|
|
54
89
|
export declare function runInitAgents(cwd: string, opts?: {
|
|
55
90
|
readonly json?: boolean;
|
|
56
91
|
readonly force?: boolean;
|
|
92
|
+
readonly syncMcp?: boolean;
|
|
57
93
|
}): Promise<boolean>;
|
|
58
94
|
//# sourceMappingURL=init-agents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-agents.d.ts","sourceRoot":"","sources":["../src/init-agents.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init-agents.d.ts","sourceRoot":"","sources":["../src/init-agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAoBH,kGAAkG;AAClG,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;6FAGyF;IACzF,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;IACxE,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAA;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,mGAAmG;IACnG,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB;kEAC8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;gFAEgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOzD;AAqQD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAED,mGAAmG;AACnG,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,CAAC,CAQ9E;AA0BD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAUD,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBjE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3F,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|