ai-spector 0.9.21 → 0.9.24
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/contracts/bootstrap/config/prototype-screen-map.json +25 -0
- package/contracts/bootstrap/config/prototype.config.json +17 -0
- package/contracts/bootstrap/config/review-queue-pending.json +4 -0
- package/contracts/bootstrap/config/review-queue-registry.json +4 -0
- package/contracts/bootstrap/config/review.config.json +5 -0
- package/contracts/bootstrap/docs/ENTITY_REGISTRY_MIGRATION.md +192 -0
- package/contracts/bootstrap/docs/MIGRATION.md +463 -0
- package/contracts/bootstrap/docs/README.md +48 -0
- package/contracts/bootstrap/docs/adapters/README.md +32 -0
- package/contracts/bootstrap/docs/guides/COMMENTS_ENTITY_MIGRATION.md +195 -0
- package/contracts/bootstrap/docs/guides/DOCOPS_MANUAL_FALLBACK.md +177 -0
- package/contracts/bootstrap/docs/guides/PROJECT_LAYOUT.md +84 -0
- package/contracts/bootstrap/docs/modules/comments.md +77 -0
- package/contracts/bootstrap/docs/modules/generate.md +25 -0
- package/contracts/bootstrap/docs/modules/graph.md +31 -0
- package/contracts/bootstrap/docs/modules/prototype.md +26 -0
- package/contracts/bootstrap/docs/modules/review.md +25 -0
- package/contracts/bootstrap/docs/modules/translate.md +26 -0
- package/contracts/bootstrap/scripts/migrate-entity-registry.sh +55 -0
- package/contracts/bootstrap/templates/basic-design/db-design-template.md +177 -0
- package/contracts/bootstrap/templates/basic-design/detail-api-template.md +278 -0
- package/contracts/bootstrap/templates/basic-design/detail-screen-template.md +281 -0
- package/contracts/bootstrap/templates/basic-design/list-api-template.md +130 -0
- package/contracts/bootstrap/templates/basic-design/list-screen-template.md +242 -0
- package/contracts/bootstrap/templates/detail-design/common/architecture-overview-template.md +302 -0
- package/contracts/bootstrap/templates/detail-design/common/deployment-infrastructure-template.md +461 -0
- package/contracts/bootstrap/templates/detail-design/common/error-handling-patterns-template.md +460 -0
- package/contracts/bootstrap/templates/detail-design/common/integration-patterns-template.md +410 -0
- package/contracts/bootstrap/templates/detail-design/common/performance-standards-template.md +406 -0
- package/contracts/bootstrap/templates/detail-design/common/security-patterns-template.md +395 -0
- package/contracts/bootstrap/templates/detail-design/feature-detail-design-template.md +773 -0
- package/contracts/bootstrap/templates/detail-design/feature-list-template.md +39 -0
- package/contracts/bootstrap/templates/srs/1-introduction.md +58 -0
- package/contracts/bootstrap/templates/srs/2-overall-description.md +91 -0
- package/contracts/bootstrap/templates/srs/3-use-case-detail-template.md +142 -0
- package/contracts/bootstrap/templates/srs/3-use-cases.md +53 -0
- package/contracts/bootstrap/templates/srs/4-system-feature-detail-template.md +131 -0
- package/contracts/bootstrap/templates/srs/4-system-features-list-template.md +39 -0
- package/contracts/bootstrap/templates/srs/5-data-requirements.md +59 -0
- package/contracts/bootstrap/templates/srs/6-external-interfaces.md +56 -0
- package/contracts/bootstrap/templates/srs/7-quality-attributes.md +74 -0
- package/contracts/bootstrap/templates/srs/8-internationalization.md +36 -0
- package/contracts/bootstrap/templates/srs/9-other-requirements.md +46 -0
- package/contracts/examples/full-docops.config.json +54 -0
- package/contracts/examples/migrate-lifecycle.json +18 -0
- package/contracts/examples/minimal-comment-thread/comment-root.json +10 -0
- package/contracts/examples/minimal-comment-thread/meta_data.json +22 -0
- package/contracts/examples/minimal-docops.config.json +33 -0
- package/contracts/examples/minimal-lifecycle.json +17 -0
- package/contracts/examples/minimal-prototype.config.json +18 -0
- package/contracts/examples/minimal-screen-map.json +25 -0
- package/contracts/examples/registry/minimal-document.entity.json +15 -0
- package/contracts/examples/registry/minimal-manifest.json +7 -0
- package/contracts/examples/registry/minimal-screen.entity.json +11 -0
- package/contracts/examples/review/minimal-pending.json +14 -0
- package/contracts/examples/review/minimal-registry.json +31 -0
- package/contracts/examples/review/minimal-review.config.json +7 -0
- package/contracts/schemas/comments/comment_body.schema.json +19 -0
- package/contracts/schemas/comments/meta_data.schema.json +59 -0
- package/contracts/schemas/docops.config.schema.json +97 -0
- package/contracts/schemas/lifecycle.schema.json +43 -0
- package/contracts/schemas/prototype/config.schema.json +56 -0
- package/contracts/schemas/prototype/screen-map.schema.json +51 -0
- package/contracts/schemas/registry/document.entity.schema.json +38 -0
- package/contracts/schemas/registry/manifest.schema.json +18 -0
- package/contracts/schemas/registry/screen.entity.schema.json +28 -0
- package/contracts/schemas/review/registry.schema.json +72 -0
- package/contracts/schemas/review/review.config.schema.json +42 -0
- package/dist/cli.js +26 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/docops/bootstrap.d.ts +4 -1
- package/dist/core/docops/bootstrap.d.ts.map +1 -1
- package/dist/core/docops/bootstrap.js +16 -9
- package/dist/core/docops/bootstrap.js.map +1 -1
- package/dist/core/docops/guide.d.ts +78 -0
- package/dist/core/docops/guide.d.ts.map +1 -0
- package/dist/core/docops/guide.js +554 -0
- package/dist/core/docops/guide.js.map +1 -0
- package/dist/core/docops/migrate.d.ts.map +1 -1
- package/dist/core/docops/migrate.js +40 -6
- package/dist/core/docops/migrate.js.map +1 -1
- package/dist/core/graph/doc-extract.d.ts.map +1 -1
- package/dist/core/graph/doc-extract.js +12 -0
- package/dist/core/graph/doc-extract.js.map +1 -1
- package/dist/core/graph/impact.d.ts.map +1 -1
- package/dist/core/graph/impact.js +2 -1
- package/dist/core/graph/impact.js.map +1 -1
- package/dist/core/graph/link-testcases.d.ts +14 -0
- package/dist/core/graph/link-testcases.d.ts.map +1 -0
- package/dist/core/graph/link-testcases.js +46 -0
- package/dist/core/graph/link-testcases.js.map +1 -0
- package/dist/core/operations/docops.d.ts +8 -0
- package/dist/core/operations/docops.d.ts.map +1 -1
- package/dist/core/operations/docops.js +40 -0
- package/dist/core/operations/docops.js.map +1 -1
- package/dist/core/operations/index.d.ts.map +1 -1
- package/dist/core/operations/index.js +25 -0
- package/dist/core/operations/index.js.map +1 -1
- package/dist/core/operations/task-gates.d.ts +8 -1
- package/dist/core/operations/task-gates.d.ts.map +1 -1
- package/dist/core/operations/task-gates.js +14 -0
- package/dist/core/operations/task-gates.js.map +1 -1
- package/dist/core/operations/task.d.ts +2 -0
- package/dist/core/operations/task.d.ts.map +1 -1
- package/dist/core/operations/task.js +40 -2
- package/dist/core/operations/task.js.map +1 -1
- package/dist/core/sync/audit.d.ts.map +1 -1
- package/dist/core/sync/audit.js +14 -6
- package/dist/core/sync/audit.js.map +1 -1
- package/dist/core/sync/baseline.d.ts.map +1 -1
- package/dist/core/sync/baseline.js +5 -2
- package/dist/core/sync/baseline.js.map +1 -1
- package/dist/core/sync/constants.d.ts.map +1 -1
- package/dist/core/sync/constants.js +2 -1
- package/dist/core/sync/constants.js.map +1 -1
- package/dist/core/sync/gaps.d.ts.map +1 -1
- package/dist/core/sync/gaps.js +23 -2
- package/dist/core/sync/gaps.js.map +1 -1
- package/dist/core/sync/git-diff.d.ts +1 -0
- package/dist/core/sync/git-diff.d.ts.map +1 -1
- package/dist/core/sync/git-diff.js +14 -0
- package/dist/core/sync/git-diff.js.map +1 -1
- package/dist/core/sync/repo-context.d.ts +23 -0
- package/dist/core/sync/repo-context.d.ts.map +1 -0
- package/dist/core/sync/repo-context.js +28 -0
- package/dist/core/sync/repo-context.js.map +1 -0
- package/dist/core/sync/snapshot.d.ts.map +1 -1
- package/dist/core/sync/snapshot.js +24 -18
- package/dist/core/sync/snapshot.js.map +1 -1
- package/dist/core/sync/types.d.ts +7 -2
- package/dist/core/sync/types.d.ts.map +1 -1
- package/dist/core/upgrade/checklist.json +2 -2
- package/dist/interfaces/mcp/schemas.d.ts +2 -0
- package/dist/interfaces/mcp/schemas.d.ts.map +1 -1
- package/dist/interfaces/mcp/schemas.js +4 -0
- package/dist/interfaces/mcp/schemas.js.map +1 -1
- package/dist/interfaces/mcp/server.js +0 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/scaffold/claude/.claude/skills/_skill-router.md +11 -8
- package/scaffold/claude/.claude/skills/ai-spector/references/cli-failures.md +3 -3
- package/scaffold/claude/.claude/skills/ai-spector/references/docops-migrate.md +112 -0
- package/scaffold/claude/.claude/skills/ai-spector/references/help.md +1 -1
- package/scaffold/claude/.claude/skills/ai-spector/references/runbook.md +49 -26
- package/scaffold/claude/.claude/skills/ai-spector/skill.md +3 -2
- package/scaffold/cursor/skills/_skill-router.md +11 -8
- package/scaffold/cursor/skills/ai-spector/SKILL.md +3 -2
- package/scaffold/cursor/skills/ai-spector/references/cli-failures.md +3 -3
- package/scaffold/cursor/skills/ai-spector/references/docops-migrate.md +112 -0
- package/scaffold/cursor/skills/ai-spector/references/help.md +1 -1
- package/scaffold/cursor/skills/ai-spector/references/runbook.md +49 -26
- package/schemas/rules.impact.json +3 -2
- package/schemas/schema.graph.json +4 -2
- package/dist/commands/analyze.d.ts +0 -12
- package/dist/commands/analyze.d.ts.map +0 -1
- package/dist/commands/analyze.js +0 -53
- package/dist/commands/analyze.js.map +0 -1
- package/dist/commands/bootstrap.d.ts +0 -4
- package/dist/commands/bootstrap.d.ts.map +0 -1
- package/dist/commands/bootstrap.js +0 -58
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/commands/comments.d.ts +0 -44
- package/dist/commands/comments.d.ts.map +0 -1
- package/dist/commands/comments.js +0 -79
- package/dist/commands/comments.js.map +0 -1
- package/dist/commands/graph-impact.d.ts +0 -28
- package/dist/commands/graph-impact.d.ts.map +0 -1
- package/dist/commands/graph-impact.js +0 -174
- package/dist/commands/graph-impact.js.map +0 -1
- package/dist/commands/graph-merge.d.ts +0 -32
- package/dist/commands/graph-merge.d.ts.map +0 -1
- package/dist/commands/graph-merge.js +0 -101
- package/dist/commands/graph-merge.js.map +0 -1
- package/dist/commands/graph-query.d.ts +0 -10
- package/dist/commands/graph-query.d.ts.map +0 -1
- package/dist/commands/graph-query.js +0 -24
- package/dist/commands/graph-query.js.map +0 -1
- package/dist/commands/graph-report.d.ts +0 -9
- package/dist/commands/graph-report.d.ts.map +0 -1
- package/dist/commands/graph-report.js +0 -10
- package/dist/commands/graph-report.js.map +0 -1
- package/dist/commands/graph-visualize.d.ts +0 -17
- package/dist/commands/graph-visualize.d.ts.map +0 -1
- package/dist/commands/graph-visualize.js +0 -44
- package/dist/commands/graph-visualize.js.map +0 -1
- package/dist/commands/hooks-constants.d.ts +0 -2
- package/dist/commands/hooks-constants.d.ts.map +0 -1
- package/dist/commands/hooks-constants.js +0 -2
- package/dist/commands/hooks-constants.js.map +0 -1
- package/dist/commands/hooks.d.ts +0 -28
- package/dist/commands/hooks.d.ts.map +0 -1
- package/dist/commands/hooks.js +0 -187
- package/dist/commands/hooks.js.map +0 -1
- package/dist/commands/index.d.ts +0 -22
- package/dist/commands/index.d.ts.map +0 -1
- package/dist/commands/index.js +0 -472
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/init.d.ts +0 -19
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -210
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/lang-queue.d.ts +0 -28
- package/dist/commands/lang-queue.d.ts.map +0 -1
- package/dist/commands/lang-queue.js +0 -49
- package/dist/commands/lang-queue.js.map +0 -1
- package/dist/commands/lang.d.ts +0 -16
- package/dist/commands/lang.d.ts.map +0 -1
- package/dist/commands/lang.js +0 -69
- package/dist/commands/lang.js.map +0 -1
- package/dist/commands/prototype.d.ts +0 -66
- package/dist/commands/prototype.d.ts.map +0 -1
- package/dist/commands/prototype.js +0 -370
- package/dist/commands/prototype.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -26
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -259
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/sync-cursor.d.ts +0 -10
- package/dist/commands/sync-cursor.d.ts.map +0 -1
- package/dist/commands/sync-cursor.js +0 -18
- package/dist/commands/sync-cursor.js.map +0 -1
- package/dist/commands/template-regen.d.ts +0 -24
- package/dist/commands/template-regen.d.ts.map +0 -1
- package/dist/commands/template-regen.js +0 -240
- package/dist/commands/template-regen.js.map +0 -1
- package/dist/commands/template.d.ts +0 -3
- package/dist/commands/template.d.ts.map +0 -1
- package/dist/commands/template.js +0 -1285
- package/dist/commands/template.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -10
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -89
- package/dist/commands/validate.js.map +0 -1
- package/dist/comments/anchor.d.ts +0 -16
- package/dist/comments/anchor.d.ts.map +0 -1
- package/dist/comments/anchor.js +0 -59
- package/dist/comments/anchor.js.map +0 -1
- package/dist/comments/inbox.d.ts +0 -82
- package/dist/comments/inbox.d.ts.map +0 -1
- package/dist/comments/inbox.js +0 -179
- package/dist/comments/inbox.js.map +0 -1
- package/dist/comments/paths.d.ts +0 -12
- package/dist/comments/paths.d.ts.map +0 -1
- package/dist/comments/paths.js +0 -54
- package/dist/comments/paths.js.map +0 -1
- package/dist/comments/plan.d.ts +0 -20
- package/dist/comments/plan.d.ts.map +0 -1
- package/dist/comments/plan.js +0 -62
- package/dist/comments/plan.js.map +0 -1
- package/dist/comments/storage.d.ts +0 -30
- package/dist/comments/storage.d.ts.map +0 -1
- package/dist/comments/storage.js +0 -272
- package/dist/comments/storage.js.map +0 -1
- package/dist/comments/types.d.ts +0 -54
- package/dist/comments/types.d.ts.map +0 -1
- package/dist/comments/types.js +0 -2
- package/dist/comments/types.js.map +0 -1
- package/dist/config/load.d.ts +0 -47
- package/dist/config/load.d.ts.map +0 -1
- package/dist/config/load.js +0 -148
- package/dist/config/load.js.map +0 -1
- package/dist/config/types.d.ts +0 -56
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -2
- package/dist/config/types.js.map +0 -1
- package/dist/core/adopt/apply.d.ts +0 -15
- package/dist/core/adopt/apply.d.ts.map +0 -1
- package/dist/core/adopt/apply.js +0 -127
- package/dist/core/adopt/apply.js.map +0 -1
- package/dist/core/adopt/bootstrap.d.ts +0 -16
- package/dist/core/adopt/bootstrap.d.ts.map +0 -1
- package/dist/core/adopt/bootstrap.js +0 -195
- package/dist/core/adopt/bootstrap.js.map +0 -1
- package/dist/core/adopt/classify.d.ts +0 -22
- package/dist/core/adopt/classify.d.ts.map +0 -1
- package/dist/core/adopt/classify.js +0 -295
- package/dist/core/adopt/classify.js.map +0 -1
- package/dist/core/adopt/paths.d.ts +0 -10
- package/dist/core/adopt/paths.d.ts.map +0 -1
- package/dist/core/adopt/paths.js +0 -16
- package/dist/core/adopt/paths.js.map +0 -1
- package/dist/core/adopt/plan.d.ts +0 -10
- package/dist/core/adopt/plan.d.ts.map +0 -1
- package/dist/core/adopt/plan.js +0 -269
- package/dist/core/adopt/plan.js.map +0 -1
- package/dist/core/adopt/scan.d.ts +0 -5
- package/dist/core/adopt/scan.d.ts.map +0 -1
- package/dist/core/adopt/scan.js +0 -169
- package/dist/core/adopt/scan.js.map +0 -1
- package/dist/core/adopt/setup.d.ts +0 -7
- package/dist/core/adopt/setup.d.ts.map +0 -1
- package/dist/core/adopt/setup.js +0 -64
- package/dist/core/adopt/setup.js.map +0 -1
- package/dist/core/adopt/tasks.d.ts +0 -9
- package/dist/core/adopt/tasks.d.ts.map +0 -1
- package/dist/core/adopt/tasks.js +0 -153
- package/dist/core/adopt/tasks.js.map +0 -1
- package/dist/core/adopt/types.d.ts +0 -75
- package/dist/core/adopt/types.d.ts.map +0 -1
- package/dist/core/adopt/types.js +0 -2
- package/dist/core/adopt/types.js.map +0 -1
- package/dist/core/adopt/validate.d.ts +0 -20
- package/dist/core/adopt/validate.d.ts.map +0 -1
- package/dist/core/adopt/validate.js +0 -129
- package/dist/core/adopt/validate.js.map +0 -1
- package/dist/core/docops/dual-write.d.ts +0 -12
- package/dist/core/docops/dual-write.d.ts.map +0 -1
- package/dist/core/docops/dual-write.js +0 -44
- package/dist/core/docops/dual-write.js.map +0 -1
- package/dist/core/engine/local-adapter.d.ts +0 -3
- package/dist/core/engine/local-adapter.d.ts.map +0 -1
- package/dist/core/engine/local-adapter.js +0 -18
- package/dist/core/engine/local-adapter.js.map +0 -1
- package/dist/core/graph/rules/default-impact.json +0 -24
- package/dist/core/operations/adopt-gates.d.ts +0 -19
- package/dist/core/operations/adopt-gates.d.ts.map +0 -1
- package/dist/core/operations/adopt-gates.js +0 -71
- package/dist/core/operations/adopt-gates.js.map +0 -1
- package/dist/core/operations/adopt-plan.d.ts +0 -15
- package/dist/core/operations/adopt-plan.d.ts.map +0 -1
- package/dist/core/operations/adopt-plan.js +0 -24
- package/dist/core/operations/adopt-plan.js.map +0 -1
- package/dist/core/operations/adopt.d.ts +0 -11
- package/dist/core/operations/adopt.d.ts.map +0 -1
- package/dist/core/operations/adopt.js +0 -150
- package/dist/core/operations/adopt.js.map +0 -1
- package/dist/core/operations/analyze.d.ts +0 -12
- package/dist/core/operations/analyze.d.ts.map +0 -1
- package/dist/core/operations/analyze.js +0 -53
- package/dist/core/operations/analyze.js.map +0 -1
- package/dist/core/prototype/spa-route-fallbacks.d.ts +0 -21
- package/dist/core/prototype/spa-route-fallbacks.d.ts.map +0 -1
- package/dist/core/prototype/spa-route-fallbacks.js +0 -93
- package/dist/core/prototype/spa-route-fallbacks.js.map +0 -1
- package/dist/graph/InMemoryGraph.d.ts +0 -2
- package/dist/graph/InMemoryGraph.d.ts.map +0 -1
- package/dist/graph/InMemoryGraph.js +0 -2
- package/dist/graph/InMemoryGraph.js.map +0 -1
- package/dist/graph/bundles.d.ts +0 -32
- package/dist/graph/bundles.d.ts.map +0 -1
- package/dist/graph/bundles.js +0 -109
- package/dist/graph/bundles.js.map +0 -1
- package/dist/graph/defaults.d.ts +0 -23
- package/dist/graph/defaults.d.ts.map +0 -1
- package/dist/graph/defaults.js +0 -25
- package/dist/graph/defaults.js.map +0 -1
- package/dist/graph/detail-sections.d.ts +0 -28
- package/dist/graph/detail-sections.d.ts.map +0 -1
- package/dist/graph/detail-sections.js +0 -220
- package/dist/graph/detail-sections.js.map +0 -1
- package/dist/graph/doc-extract.d.ts +0 -84
- package/dist/graph/doc-extract.d.ts.map +0 -1
- package/dist/graph/doc-extract.js +0 -821
- package/dist/graph/doc-extract.js.map +0 -1
- package/dist/graph/impact.d.ts +0 -5
- package/dist/graph/impact.d.ts.map +0 -1
- package/dist/graph/impact.js +0 -7
- package/dist/graph/impact.js.map +0 -1
- package/dist/graph/knowledge.d.ts +0 -11
- package/dist/graph/knowledge.d.ts.map +0 -1
- package/dist/graph/knowledge.js +0 -62
- package/dist/graph/knowledge.js.map +0 -1
- package/dist/graph/layer-audit.d.ts +0 -5
- package/dist/graph/layer-audit.d.ts.map +0 -1
- package/dist/graph/layer-audit.js +0 -29
- package/dist/graph/layer-audit.js.map +0 -1
- package/dist/graph/load.d.ts +0 -4
- package/dist/graph/load.d.ts.map +0 -1
- package/dist/graph/load.js +0 -12
- package/dist/graph/load.js.map +0 -1
- package/dist/graph/loadGraph.d.ts +0 -3
- package/dist/graph/loadGraph.d.ts.map +0 -1
- package/dist/graph/loadGraph.js +0 -7
- package/dist/graph/loadGraph.js.map +0 -1
- package/dist/graph/merge.d.ts +0 -27
- package/dist/graph/merge.d.ts.map +0 -1
- package/dist/graph/merge.js +0 -239
- package/dist/graph/merge.js.map +0 -1
- package/dist/graph/path-target-edges.d.ts +0 -2
- package/dist/graph/path-target-edges.d.ts.map +0 -1
- package/dist/graph/path-target-edges.js +0 -2
- package/dist/graph/path-target-edges.js.map +0 -1
- package/dist/graph/provenance.d.ts +0 -19
- package/dist/graph/provenance.d.ts.map +0 -1
- package/dist/graph/provenance.js +0 -199
- package/dist/graph/provenance.js.map +0 -1
- package/dist/graph/query.d.ts +0 -3
- package/dist/graph/query.d.ts.map +0 -1
- package/dist/graph/query.js +0 -2
- package/dist/graph/query.js.map +0 -1
- package/dist/graph/resolve.d.ts +0 -15
- package/dist/graph/resolve.d.ts.map +0 -1
- package/dist/graph/resolve.js +0 -117
- package/dist/graph/resolve.js.map +0 -1
- package/dist/graph/source-refs.d.ts +0 -2
- package/dist/graph/source-refs.d.ts.map +0 -1
- package/dist/graph/source-refs.js +0 -30
- package/dist/graph/source-refs.js.map +0 -1
- package/dist/graph/translation.d.ts +0 -14
- package/dist/graph/translation.d.ts.map +0 -1
- package/dist/graph/translation.js +0 -65
- package/dist/graph/translation.js.map +0 -1
- package/dist/index/doc-semantics.d.ts +0 -14
- package/dist/index/doc-semantics.d.ts.map +0 -1
- package/dist/index/doc-semantics.js +0 -101
- package/dist/index/doc-semantics.js.map +0 -1
- package/dist/index/docs-build.d.ts +0 -40
- package/dist/index/docs-build.d.ts.map +0 -1
- package/dist/index/docs-build.js +0 -136
- package/dist/index/docs-build.js.map +0 -1
- package/dist/index/docs-config.d.ts +0 -19
- package/dist/index/docs-config.d.ts.map +0 -1
- package/dist/index/docs-config.js +0 -5
- package/dist/index/docs-config.js.map +0 -1
- package/dist/interfaces/cli/format/adopt.d.ts +0 -23
- package/dist/interfaces/cli/format/adopt.d.ts.map +0 -1
- package/dist/interfaces/cli/format/adopt.js +0 -89
- package/dist/interfaces/cli/format/adopt.js.map +0 -1
- package/dist/interfaces/mcp/tools/adopt.d.ts +0 -22
- package/dist/interfaces/mcp/tools/adopt.d.ts.map +0 -1
- package/dist/interfaces/mcp/tools/adopt.js +0 -55
- package/dist/interfaces/mcp/tools/adopt.js.map +0 -1
- package/dist/lang/diff.d.ts +0 -12
- package/dist/lang/diff.d.ts.map +0 -1
- package/dist/lang/diff.js +0 -71
- package/dist/lang/diff.js.map +0 -1
- package/dist/lang/paths.d.ts +0 -16
- package/dist/lang/paths.d.ts.map +0 -1
- package/dist/lang/paths.js +0 -32
- package/dist/lang/paths.js.map +0 -1
- package/dist/lang/queue-layout.d.ts +0 -11
- package/dist/lang/queue-layout.d.ts.map +0 -1
- package/dist/lang/queue-layout.js +0 -56
- package/dist/lang/queue-layout.js.map +0 -1
- package/dist/lang/queue-store.d.ts +0 -23
- package/dist/lang/queue-store.d.ts.map +0 -1
- package/dist/lang/queue-store.js +0 -285
- package/dist/lang/queue-store.js.map +0 -1
- package/dist/lang/queue-types.d.ts +0 -122
- package/dist/lang/queue-types.d.ts.map +0 -1
- package/dist/lang/queue-types.js +0 -2
- package/dist/lang/queue-types.js.map +0 -1
- package/dist/lang/queue.d.ts +0 -17
- package/dist/lang/queue.d.ts.map +0 -1
- package/dist/lang/queue.js +0 -362
- package/dist/lang/queue.js.map +0 -1
- package/dist/lang/sections.d.ts +0 -26
- package/dist/lang/sections.d.ts.map +0 -1
- package/dist/lang/sections.js +0 -85
- package/dist/lang/sections.js.map +0 -1
- package/dist/markdown/parse.d.ts +0 -25
- package/dist/markdown/parse.d.ts.map +0 -1
- package/dist/markdown/parse.js +0 -100
- package/dist/markdown/parse.js.map +0 -1
- package/dist/prototype/build-base-path.d.ts +0 -11
- package/dist/prototype/build-base-path.d.ts.map +0 -1
- package/dist/prototype/build-base-path.js +0 -84
- package/dist/prototype/build-base-path.js.map +0 -1
- package/dist/prototype/build-manifest.d.ts +0 -21
- package/dist/prototype/build-manifest.d.ts.map +0 -1
- package/dist/prototype/build-manifest.js +0 -171
- package/dist/prototype/build-manifest.js.map +0 -1
- package/dist/prototype/config.d.ts +0 -21
- package/dist/prototype/config.d.ts.map +0 -1
- package/dist/prototype/config.js +0 -131
- package/dist/prototype/config.js.map +0 -1
- package/dist/prototype/deploy-path.d.ts +0 -9
- package/dist/prototype/deploy-path.d.ts.map +0 -1
- package/dist/prototype/deploy-path.js +0 -21
- package/dist/prototype/deploy-path.js.map +0 -1
- package/dist/prototype/htpasswd.d.ts +0 -8
- package/dist/prototype/htpasswd.d.ts.map +0 -1
- package/dist/prototype/htpasswd.js +0 -36
- package/dist/prototype/htpasswd.js.map +0 -1
- package/dist/prototype/nginx-config.d.ts +0 -16
- package/dist/prototype/nginx-config.d.ts.map +0 -1
- package/dist/prototype/nginx-config.js +0 -39
- package/dist/prototype/nginx-config.js.map +0 -1
- package/dist/prototype/parse-screen-index.d.ts +0 -10
- package/dist/prototype/parse-screen-index.d.ts.map +0 -1
- package/dist/prototype/parse-screen-index.js +0 -109
- package/dist/prototype/parse-screen-index.js.map +0 -1
- package/dist/prototype/preview-uri.d.ts +0 -8
- package/dist/prototype/preview-uri.d.ts.map +0 -1
- package/dist/prototype/preview-uri.js +0 -35
- package/dist/prototype/preview-uri.js.map +0 -1
- package/dist/prototype/relative-assets.d.ts +0 -9
- package/dist/prototype/relative-assets.d.ts.map +0 -1
- package/dist/prototype/relative-assets.js +0 -23
- package/dist/prototype/relative-assets.js.map +0 -1
- package/dist/prototype/resolve-default-screen.d.ts +0 -17
- package/dist/prototype/resolve-default-screen.d.ts.map +0 -1
- package/dist/prototype/resolve-default-screen.js +0 -31
- package/dist/prototype/resolve-default-screen.js.map +0 -1
- package/dist/prototype/rewrite-build-assets.d.ts +0 -8
- package/dist/prototype/rewrite-build-assets.d.ts.map +0 -1
- package/dist/prototype/rewrite-build-assets.js +0 -40
- package/dist/prototype/rewrite-build-assets.js.map +0 -1
- package/dist/prototype/route-defaults.d.ts +0 -43
- package/dist/prototype/route-defaults.d.ts.map +0 -1
- package/dist/prototype/route-defaults.js +0 -50
- package/dist/prototype/route-defaults.js.map +0 -1
- package/dist/prototype/screen-doc-paths.d.ts +0 -15
- package/dist/prototype/screen-doc-paths.d.ts.map +0 -1
- package/dist/prototype/screen-doc-paths.js +0 -38
- package/dist/prototype/screen-doc-paths.js.map +0 -1
- package/dist/prototype/spa-route-fallbacks.d.ts +0 -21
- package/dist/prototype/spa-route-fallbacks.d.ts.map +0 -1
- package/dist/prototype/spa-route-fallbacks.js +0 -93
- package/dist/prototype/spa-route-fallbacks.js.map +0 -1
- package/dist/prototype/theme-preview.d.ts +0 -17
- package/dist/prototype/theme-preview.d.ts.map +0 -1
- package/dist/prototype/theme-preview.js +0 -73
- package/dist/prototype/theme-preview.js.map +0 -1
- package/dist/prototype/themes.d.ts +0 -6
- package/dist/prototype/themes.d.ts.map +0 -1
- package/dist/prototype/themes.js +0 -55
- package/dist/prototype/themes.js.map +0 -1
- package/dist/prototype/types.d.ts +0 -160
- package/dist/prototype/types.d.ts.map +0 -1
- package/dist/prototype/types.js +0 -2
- package/dist/prototype/types.js.map +0 -1
- package/dist/prototype/validate.d.ts +0 -16
- package/dist/prototype/validate.d.ts.map +0 -1
- package/dist/prototype/validate.js +0 -149
- package/dist/prototype/validate.js.map +0 -1
- package/dist/registry/build.d.ts +0 -5
- package/dist/registry/build.d.ts.map +0 -1
- package/dist/registry/build.js +0 -71
- package/dist/registry/build.js.map +0 -1
- package/dist/registry/slug.d.ts +0 -4
- package/dist/registry/slug.d.ts.map +0 -1
- package/dist/registry/slug.js +0 -16
- package/dist/registry/slug.js.map +0 -1
- package/dist/registry/structure-patch.d.ts +0 -6
- package/dist/registry/structure-patch.d.ts.map +0 -1
- package/dist/registry/structure-patch.js +0 -49
- package/dist/registry/structure-patch.js.map +0 -1
- package/dist/template/scan.d.ts +0 -21
- package/dist/template/scan.d.ts.map +0 -1
- package/dist/template/scan.js +0 -84
- package/dist/template/scan.js.map +0 -1
- package/dist/template/validate.d.ts +0 -10
- package/dist/template/validate.d.ts.map +0 -1
- package/dist/template/validate.js +0 -64
- package/dist/template/validate.js.map +0 -1
- package/dist/util/fs.d.ts +0 -6
- package/dist/util/fs.d.ts.map +0 -1
- package/dist/util/fs.js +0 -24
- package/dist/util/fs.js.map +0 -1
- package/dist/util/git-diff.d.ts +0 -16
- package/dist/util/git-diff.d.ts.map +0 -1
- package/dist/util/git-diff.js +0 -93
- package/dist/util/git-diff.js.map +0 -1
- package/dist/util/gitignore.d.ts +0 -9
- package/dist/util/gitignore.d.ts.map +0 -1
- package/dist/util/gitignore.js +0 -44
- package/dist/util/gitignore.js.map +0 -1
- package/dist/util/open-browser.d.ts +0 -3
- package/dist/util/open-browser.d.ts.map +0 -1
- package/dist/util/open-browser.js +0 -24
- package/dist/util/open-browser.js.map +0 -1
- package/dist/util/paths.d.ts +0 -16
- package/dist/util/paths.d.ts.map +0 -1
- package/dist/util/paths.js +0 -19
- package/dist/util/paths.js.map +0 -1
- package/dist/util/prompt.d.ts +0 -14
- package/dist/util/prompt.d.ts.map +0 -1
- package/dist/util/prompt.js +0 -65
- package/dist/util/prompt.js.map +0 -1
- package/dist/visualize/html.d.ts +0 -13
- package/dist/visualize/html.d.ts.map +0 -1
- package/dist/visualize/html.js +0 -766
- package/dist/visualize/html.js.map +0 -1
- package/dist/visualize/stats.d.ts +0 -8
- package/dist/visualize/stats.d.ts.map +0 -1
- package/dist/visualize/stats.js +0 -9
- package/dist/visualize/stats.js.map +0 -1
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
3
|
-
import { pathExists } from "../util/fs.js";
|
|
4
|
-
import { toDeployBasePath, toSpaScreenPrototypePath } from "./deploy-path.js";
|
|
5
|
-
/** All deploy-prefix paths that need an index.html copy (every URL segment). */
|
|
6
|
-
export function spaFallbackDeployPaths(deployBase, previewOrRoute) {
|
|
7
|
-
const pathname = previewOrRoute.split("?")[0].split("#")[0];
|
|
8
|
-
const route = pathname.startsWith("/") ? pathname.slice(1) : pathname;
|
|
9
|
-
if (!route) {
|
|
10
|
-
return [];
|
|
11
|
-
}
|
|
12
|
-
const parts = route.split("/").filter(Boolean);
|
|
13
|
-
const base = deployBase.replace(/\/$/, "");
|
|
14
|
-
const paths = [];
|
|
15
|
-
for (let i = 1; i <= parts.length; i++) {
|
|
16
|
-
paths.push(`${base}/${parts.slice(0, i).join("/")}`);
|
|
17
|
-
}
|
|
18
|
-
return paths;
|
|
19
|
-
}
|
|
20
|
-
function routePartFromDeployPath(deployPath, deployBase) {
|
|
21
|
-
const normalizedDeploy = deployPath.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
22
|
-
const base = deployBase.replace(/\/$/, "");
|
|
23
|
-
if (normalizedDeploy === base) {
|
|
24
|
-
return "";
|
|
25
|
-
}
|
|
26
|
-
if (normalizedDeploy.startsWith(`${base}/`)) {
|
|
27
|
-
return normalizedDeploy.slice(base.length + 1);
|
|
28
|
-
}
|
|
29
|
-
return normalizedDeploy;
|
|
30
|
-
}
|
|
31
|
-
function deployPathToRepoIndexPath(deployPath, repoBuildDest, deployBase) {
|
|
32
|
-
const routePart = routePartFromDeployPath(deployPath, deployBase);
|
|
33
|
-
return join(repoBuildDest, routePart, "index.html").replace(/\\/g, "/");
|
|
34
|
-
}
|
|
35
|
-
/** Relative base href so `./assets/…` resolves to the SPA build root, not the nested folder. */
|
|
36
|
-
export function baseHrefForRouteDepth(routeSegmentCount) {
|
|
37
|
-
if (routeSegmentCount <= 0) {
|
|
38
|
-
return "./";
|
|
39
|
-
}
|
|
40
|
-
return "../".repeat(routeSegmentCount);
|
|
41
|
-
}
|
|
42
|
-
export function injectSpaFallbackBaseHref(html, baseHref) {
|
|
43
|
-
const baseTag = `<base href="${baseHref.replace(/"/g, """)}">`;
|
|
44
|
-
if (/<base\s[\s\S]*?\/?>/i.test(html)) {
|
|
45
|
-
return html.replace(/<base\s[\s\S]*?\/?>/i, baseTag);
|
|
46
|
-
}
|
|
47
|
-
if (/<head(\s[^>]*)?>/i.test(html)) {
|
|
48
|
-
return html.replace(/<head(\s[^>]*)?>/i, (match) => `${match}\n ${baseTag}`);
|
|
49
|
-
}
|
|
50
|
-
return `${baseTag}\n${html}`;
|
|
51
|
-
}
|
|
52
|
-
function fallbackIndexHtml(rootIndexHtml, deployPath, deployBase) {
|
|
53
|
-
const depth = routePartFromDeployPath(deployPath, deployBase)
|
|
54
|
-
.split("/")
|
|
55
|
-
.filter(Boolean).length;
|
|
56
|
-
return injectSpaFallbackBaseHref(rootIndexHtml, baseHrefForRouteDepth(depth));
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Copy the SPA entry index.html into each screen route directory so zip/static hosts
|
|
60
|
-
* can serve deep links without nginx try_files (e.g. dist/trip/x/print/index.html).
|
|
61
|
-
*/
|
|
62
|
-
export async function writeSpaRouteFallbacks(opts) {
|
|
63
|
-
const rootIndex = join(opts.projectRoot, opts.repoBuildDest, "index.html");
|
|
64
|
-
if (!(await pathExists(rootIndex))) {
|
|
65
|
-
return { filesWritten: 0, paths: [] };
|
|
66
|
-
}
|
|
67
|
-
const indexHtml = await readFile(rootIndex, "utf8");
|
|
68
|
-
const deployBase = opts.deployBase || toDeployBasePath(opts.repoBuildDest, opts.prototypeDir);
|
|
69
|
-
const deployPaths = new Set();
|
|
70
|
-
for (const screen of opts.screens) {
|
|
71
|
-
const preview = screen.previewUri ?? screen.uri;
|
|
72
|
-
for (const path of spaFallbackDeployPaths(deployBase, preview)) {
|
|
73
|
-
deployPaths.add(path);
|
|
74
|
-
}
|
|
75
|
-
deployPaths.add(toSpaScreenPrototypePath(deployBase, preview));
|
|
76
|
-
}
|
|
77
|
-
const written = [];
|
|
78
|
-
for (const deployPath of deployPaths) {
|
|
79
|
-
const relIndex = deployPathToRepoIndexPath(deployPath, opts.repoBuildDest, deployBase);
|
|
80
|
-
if (relIndex.replace(/\\/g, "/").endsWith("/index.html") && deployPath === deployBase) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
const absIndex = join(opts.projectRoot, relIndex);
|
|
84
|
-
if (absIndex.replace(/\\/g, "/") === rootIndex.replace(/\\/g, "/")) {
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
await mkdir(dirname(absIndex), { recursive: true });
|
|
88
|
-
await writeFile(absIndex, fallbackIndexHtml(indexHtml, deployPath, deployBase), "utf8");
|
|
89
|
-
written.push(relIndex.replace(/\\/g, "/"));
|
|
90
|
-
}
|
|
91
|
-
return { filesWritten: written.length, paths: written };
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=spa-route-fallbacks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spa-route-fallbacks.js","sourceRoot":"","sources":["../../src/prototype/spa-route-fallbacks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare function resolveThemePreviewPath(themeName: string): string;
|
|
2
|
-
export declare function themeHasPreview(themeName: string): Promise<boolean>;
|
|
3
|
-
/** Legacy staging dirs (`assets/preview/themes` or accidental `assets/preview /themes`). */
|
|
4
|
-
export declare function resolveThemePreviewsStagingRoot(explicitFrom?: string): Promise<string | undefined>;
|
|
5
|
-
export interface InstallThemePreviewsResult {
|
|
6
|
-
stagingRoot: string;
|
|
7
|
-
moved: string[];
|
|
8
|
-
skipped: string[];
|
|
9
|
-
missingTheme: string[];
|
|
10
|
-
}
|
|
11
|
-
export interface InstallThemePreviewsOptions {
|
|
12
|
-
from?: string;
|
|
13
|
-
themesRoot?: string;
|
|
14
|
-
dryRun?: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare function installThemePreviews(opts?: InstallThemePreviewsOptions): Promise<InstallThemePreviewsResult>;
|
|
17
|
-
//# sourceMappingURL=theme-preview.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-preview.d.ts","sourceRoot":"","sources":["../../src/prototype/theme-preview.ts"],"names":[],"mappings":"AAeA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEzE;AAED,4FAA4F;AAC5F,wBAAsB,+BAA+B,CACnD,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,0BAA0B,CAAC,CAyCrC"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { readdir, rename } from "node:fs/promises";
|
|
2
|
-
import { basename, join } from "node:path";
|
|
3
|
-
import { packageBundleRoot, themesBundleRoot } from "../config/load.js";
|
|
4
|
-
import { pathExists } from "../util/fs.js";
|
|
5
|
-
const PREVIEW_FILENAME = "preview.html";
|
|
6
|
-
function sanitizeThemeName(themeName) {
|
|
7
|
-
const safe = themeName.replace(/[^a-zA-Z0-9._-]/g, "");
|
|
8
|
-
if (!safe || safe !== themeName) {
|
|
9
|
-
throw new Error(`Invalid theme name: ${themeName}`);
|
|
10
|
-
}
|
|
11
|
-
return safe;
|
|
12
|
-
}
|
|
13
|
-
export function resolveThemePreviewPath(themeName) {
|
|
14
|
-
return join(themesBundleRoot(), sanitizeThemeName(themeName), PREVIEW_FILENAME);
|
|
15
|
-
}
|
|
16
|
-
export async function themeHasPreview(themeName) {
|
|
17
|
-
return pathExists(resolveThemePreviewPath(themeName));
|
|
18
|
-
}
|
|
19
|
-
/** Legacy staging dirs (`assets/preview/themes` or accidental `assets/preview /themes`). */
|
|
20
|
-
export async function resolveThemePreviewsStagingRoot(explicitFrom) {
|
|
21
|
-
if (explicitFrom?.trim()) {
|
|
22
|
-
const from = explicitFrom.trim();
|
|
23
|
-
return (await pathExists(from)) ? from : undefined;
|
|
24
|
-
}
|
|
25
|
-
const root = packageBundleRoot();
|
|
26
|
-
const candidates = [
|
|
27
|
-
join(root, "assets", "preview", "themes"),
|
|
28
|
-
join(root, "assets", "preview ", "themes"),
|
|
29
|
-
];
|
|
30
|
-
for (const candidate of candidates) {
|
|
31
|
-
if (await pathExists(candidate)) {
|
|
32
|
-
return candidate;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
export async function installThemePreviews(opts = {}) {
|
|
38
|
-
const stagingRoot = await resolveThemePreviewsStagingRoot(opts.from);
|
|
39
|
-
if (!stagingRoot) {
|
|
40
|
-
const hint = opts.from?.trim()
|
|
41
|
-
? `Path not found: ${opts.from.trim()}`
|
|
42
|
-
: "No staging folder (expected assets/preview/themes/)";
|
|
43
|
-
throw new Error(hint);
|
|
44
|
-
}
|
|
45
|
-
const themesRoot = opts.themesRoot ?? themesBundleRoot();
|
|
46
|
-
const entries = await readdir(stagingRoot, { withFileTypes: true });
|
|
47
|
-
const moved = [];
|
|
48
|
-
const skipped = [];
|
|
49
|
-
const missingTheme = [];
|
|
50
|
-
for (const ent of entries) {
|
|
51
|
-
if (!ent.isFile() || !ent.name.endsWith(".html")) {
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
const themeName = basename(ent.name, ".html");
|
|
55
|
-
const themeDir = join(themesRoot, themeName);
|
|
56
|
-
const dest = join(themeDir, PREVIEW_FILENAME);
|
|
57
|
-
const src = join(stagingRoot, ent.name);
|
|
58
|
-
if (!(await pathExists(themeDir))) {
|
|
59
|
-
missingTheme.push(themeName);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
if (await pathExists(dest)) {
|
|
63
|
-
skipped.push(themeName);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
if (!opts.dryRun) {
|
|
67
|
-
await rename(src, dest);
|
|
68
|
-
}
|
|
69
|
-
moved.push(themeName);
|
|
70
|
-
}
|
|
71
|
-
return { stagingRoot, moved, skipped, missingTheme };
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=theme-preview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-preview.js","sourceRoot":"","sources":["../../src/prototype/theme-preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare function listBundledThemes(): Promise<string[]>;
|
|
2
|
-
export declare function resolveThemeDesignPath(themeName: string): string;
|
|
3
|
-
export declare function assertThemeExists(themeName: string): Promise<string>;
|
|
4
|
-
export declare function installThemeDesign(themeName: string, prototypeDesignPath: string): Promise<void>;
|
|
5
|
-
export declare function readThemeSummary(themeName: string): Promise<string | undefined>;
|
|
6
|
-
//# sourceMappingURL=themes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/prototype/themes.ts"],"names":[],"mappings":"AAMA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB3D;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW1E;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQrF"}
|
package/dist/prototype/themes.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { readdir } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { copyFile, readFile } from "node:fs/promises";
|
|
4
|
-
import { themesBundleRoot } from "../config/load.js";
|
|
5
|
-
import { pathExists } from "../util/fs.js";
|
|
6
|
-
export async function listBundledThemes() {
|
|
7
|
-
const root = themesBundleRoot();
|
|
8
|
-
if (!(await pathExists(root))) {
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
const entries = await readdir(root, { withFileTypes: true });
|
|
12
|
-
const themes = [];
|
|
13
|
-
for (const ent of entries) {
|
|
14
|
-
if (!ent.isDirectory()) {
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
const designPath = join(root, ent.name, "DESIGN.md");
|
|
18
|
-
if (await pathExists(designPath)) {
|
|
19
|
-
themes.push(ent.name);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return themes.sort((a, b) => a.localeCompare(b));
|
|
23
|
-
}
|
|
24
|
-
export function resolveThemeDesignPath(themeName) {
|
|
25
|
-
const safe = themeName.replace(/[^a-zA-Z0-9._-]/g, "");
|
|
26
|
-
if (!safe || safe !== themeName) {
|
|
27
|
-
throw new Error(`Invalid theme name: ${themeName}`);
|
|
28
|
-
}
|
|
29
|
-
return join(themesBundleRoot(), safe, "DESIGN.md");
|
|
30
|
-
}
|
|
31
|
-
export async function assertThemeExists(themeName) {
|
|
32
|
-
const designPath = resolveThemeDesignPath(themeName);
|
|
33
|
-
if (!(await pathExists(designPath))) {
|
|
34
|
-
const available = await listBundledThemes();
|
|
35
|
-
const hint = available.length > 0
|
|
36
|
-
? ` Available: ${available.slice(0, 12).join(", ")}${available.length > 12 ? ", …" : ""}`
|
|
37
|
-
: "";
|
|
38
|
-
throw new Error(`Theme not found: ${themeName}.${hint}`);
|
|
39
|
-
}
|
|
40
|
-
return designPath;
|
|
41
|
-
}
|
|
42
|
-
export async function installThemeDesign(themeName, prototypeDesignPath) {
|
|
43
|
-
const src = await assertThemeExists(themeName);
|
|
44
|
-
await copyFile(src, prototypeDesignPath);
|
|
45
|
-
}
|
|
46
|
-
export async function readThemeSummary(themeName) {
|
|
47
|
-
const summaryPath = join(themesBundleRoot(), themeName.replace(/[^a-zA-Z0-9._-]/g, ""), "SUMMARY.md");
|
|
48
|
-
if (!(await pathExists(summaryPath))) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
const raw = await readFile(summaryPath, "utf8");
|
|
52
|
-
const first = raw.split(/\r?\n/).find((l) => l.trim().length > 0);
|
|
53
|
-
return first?.trim();
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=themes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/prototype/themes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
export interface PrototypeBasicAuth {
|
|
2
|
-
username: string;
|
|
3
|
-
password: string;
|
|
4
|
-
setAt: string;
|
|
5
|
-
}
|
|
6
|
-
/** "static" = one HTML file per screen; "spa" = single entrypoint, route per screen. */
|
|
7
|
-
export type PrototypeBuildMode = "static" | "spa";
|
|
8
|
-
/**
|
|
9
|
-
* Tech stack used to author the prototype.
|
|
10
|
-
* - "html" plain HTML/CSS/JS, no framework
|
|
11
|
-
* - "vue" Vue 3 SPA (Vite + Vue Router)
|
|
12
|
-
* - "react" React SPA (Vite + React Router)
|
|
13
|
-
* - "nuxt" Nuxt 3 (file-system routing)
|
|
14
|
-
* - "next" Next.js (file-system routing)
|
|
15
|
-
* - "svelte" SvelteKit
|
|
16
|
-
* - "angular" Angular
|
|
17
|
-
*/
|
|
18
|
-
export type PrototypeTechStack = "html" | "vue" | "react" | "nuxt" | "next" | "svelte" | "angular";
|
|
19
|
-
export interface PrototypeConfig {
|
|
20
|
-
version: number;
|
|
21
|
-
listScreenDoc: string;
|
|
22
|
-
screenIndexSection: string;
|
|
23
|
-
screenDetailDir: string;
|
|
24
|
-
prototypeDir: string;
|
|
25
|
-
srcDir: string;
|
|
26
|
-
slugFrom: "screenName";
|
|
27
|
-
defaultTheme: string;
|
|
28
|
-
/**
|
|
29
|
-
* Tech stack chosen for authoring the prototype.
|
|
30
|
-
* Stored after the stack-picker runs; absent means "not yet chosen".
|
|
31
|
-
*/
|
|
32
|
-
techStack?: PrototypeTechStack;
|
|
33
|
-
/**
|
|
34
|
-
* Build mode for the prototype.
|
|
35
|
-
* - "static" (default): one HTML file per screen, URI maps to /src/<stem>.html
|
|
36
|
-
* - "spa": single entrypoint app (React, Vue, etc.), URI maps to /<slug> route
|
|
37
|
-
* Derived from techStack when not explicitly set.
|
|
38
|
-
*/
|
|
39
|
-
buildMode?: PrototypeBuildMode;
|
|
40
|
-
/**
|
|
41
|
-
* Repo-relative path to the SPA/framework build output directory (e.g. "frontend/dist").
|
|
42
|
-
* Used by `prototype sync` to know where to copy built files from.
|
|
43
|
-
* Only relevant when buildMode is "spa" or when the user builds files outside prototype/.
|
|
44
|
-
*/
|
|
45
|
-
buildSrc?: string;
|
|
46
|
-
/**
|
|
47
|
-
* Repo-relative destination path for synced build output (e.g. "prototype/dist").
|
|
48
|
-
* Defaults to prototypeDir + "/dist".
|
|
49
|
-
*/
|
|
50
|
-
buildDest?: string;
|
|
51
|
-
/** Screen Index id used as prototype entry / nginx default route. */
|
|
52
|
-
defaultScreenId?: string;
|
|
53
|
-
/** Repo-relative path to Apache htpasswd file (nginx basic auth). */
|
|
54
|
-
htpasswdFile: string;
|
|
55
|
-
basicAuth?: PrototypeBasicAuth;
|
|
56
|
-
/**
|
|
57
|
-
* When true (default for SPA prototypes), router auth guards must allow direct navigation
|
|
58
|
-
* to any screen without forcing login first. Set false to test real auth flows.
|
|
59
|
-
*/
|
|
60
|
-
prototypeBypassAuth?: boolean;
|
|
61
|
-
}
|
|
62
|
-
export interface ScreenIndexRow {
|
|
63
|
-
screenId: string;
|
|
64
|
-
displayName: string;
|
|
65
|
-
purpose?: string;
|
|
66
|
-
userRole?: string;
|
|
67
|
-
slug: string;
|
|
68
|
-
/** Resolved path from slug OR explicit Spec file column. */
|
|
69
|
-
screenDoc: string;
|
|
70
|
-
/** Explicit spec filename from the Screen Index "Spec file" column (overrides slug-derived path). */
|
|
71
|
-
specFile?: string;
|
|
72
|
-
prototypeStem: string;
|
|
73
|
-
prototypePath: string;
|
|
74
|
-
}
|
|
75
|
-
export interface PrototypeManifestScreen {
|
|
76
|
-
screenId: string;
|
|
77
|
-
displayName: string;
|
|
78
|
-
prototypeStem: string;
|
|
79
|
-
screenDoc: string;
|
|
80
|
-
purpose?: string;
|
|
81
|
-
userRole?: string;
|
|
82
|
-
}
|
|
83
|
-
export interface PrototypeManifest {
|
|
84
|
-
schemaVersion: 1;
|
|
85
|
-
themeName: string;
|
|
86
|
-
generatedAt: string;
|
|
87
|
-
screens: PrototypeManifestScreen[];
|
|
88
|
-
}
|
|
89
|
-
export interface PrototypeScreenMapEntry {
|
|
90
|
-
screenId: string;
|
|
91
|
-
displayName: string;
|
|
92
|
-
/** Primary screen design doc — full repo-relative path (primary language). */
|
|
93
|
-
screenDoc: string;
|
|
94
|
-
/**
|
|
95
|
-
* Language-neutral screen design doc path (no `docs/` prefix, no language segment).
|
|
96
|
-
* e.g. "basic-design/screens/login.md"
|
|
97
|
-
*/
|
|
98
|
-
screenDocPath: string;
|
|
99
|
-
/**
|
|
100
|
-
* Per-language repo-relative screen design doc paths.
|
|
101
|
-
* Present when the project has multiple docflow languages.
|
|
102
|
-
* e.g. { en: "docs/basic-design/en/screens/login.md", vi: "docs/basic-design/vi/screens/login.md" }
|
|
103
|
-
*/
|
|
104
|
-
screenDocs?: Record<string, string>;
|
|
105
|
-
prototypeStem: string;
|
|
106
|
-
/**
|
|
107
|
-
* Path to open this screen in the deployed prototype.
|
|
108
|
-
* - static mode: repo-relative HTML file, e.g. "prototype/src/<stem>.html"
|
|
109
|
-
* - spa mode: deploy-relative route directory, e.g. "dist/schedules/new/" (trailing slash)
|
|
110
|
-
*/
|
|
111
|
-
prototypePath: string;
|
|
112
|
-
/**
|
|
113
|
-
* Route path for this screen.
|
|
114
|
-
* - static mode: "/src/<stem>.html"
|
|
115
|
-
* - spa mode: "/<slug>" or a pattern with params (e.g. "/orders/:id")
|
|
116
|
-
*/
|
|
117
|
-
uri: string;
|
|
118
|
-
htmlExists: boolean;
|
|
119
|
-
/**
|
|
120
|
-
* SPA only: explicit router pattern when it differs from the slug-only path.
|
|
121
|
-
* Usually the same as `uri`; set when the app uses param segments.
|
|
122
|
-
*/
|
|
123
|
-
routePattern?: string;
|
|
124
|
-
/** SPA only: default path-param values for prototype deep links (e.g. `{ "id": "demo-001" }`). */
|
|
125
|
-
routeParams?: Record<string, string>;
|
|
126
|
-
/** SPA only: default query params appended to `previewUri`. */
|
|
127
|
-
queryParams?: Record<string, string>;
|
|
128
|
-
/**
|
|
129
|
-
* SPA only: concrete URL to open this screen in a browser (params substituted, query appended).
|
|
130
|
-
* Hosting and reviewers use this instead of typing IDs manually.
|
|
131
|
-
*/
|
|
132
|
-
previewUri?: string;
|
|
133
|
-
/** SPA only: production would require login; prototype still allows direct `previewUri` access. */
|
|
134
|
-
requiresAuth?: boolean;
|
|
135
|
-
}
|
|
136
|
-
export interface PrototypeScreenMap {
|
|
137
|
-
schemaVersion: 1;
|
|
138
|
-
themeName: string;
|
|
139
|
-
buildMode: PrototypeBuildMode;
|
|
140
|
-
generatedAt: string;
|
|
141
|
-
/** Entry screen at generation time (from screens with HTML when any exist). */
|
|
142
|
-
defaultScreenId?: string;
|
|
143
|
-
/**
|
|
144
|
-
* SPA only: when true, generated router must not redirect unauthenticated users to login
|
|
145
|
-
* when opening a deep-linked route (prototype review mode).
|
|
146
|
-
*/
|
|
147
|
-
prototypeBypassAuth?: boolean;
|
|
148
|
-
/**
|
|
149
|
-
* SPA only: deploy-relative build output directory (e.g. "dist").
|
|
150
|
-
* Served at domain/prefix/<buildDest>/; repo sync path may include a prototype/ prefix.
|
|
151
|
-
*/
|
|
152
|
-
buildDest?: string;
|
|
153
|
-
/**
|
|
154
|
-
* SPA only: repo-relative path to the framework build source (e.g. "frontend/dist").
|
|
155
|
-
* Informational — documents where buildDest was synced from.
|
|
156
|
-
*/
|
|
157
|
-
buildSrc?: string;
|
|
158
|
-
screens: PrototypeScreenMapEntry[];
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prototype/types.ts"],"names":[],"mappings":"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"}
|
package/dist/prototype/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/prototype/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { PrototypeConfig } from "./types.js";
|
|
2
|
-
export interface PrototypeValidationIssue {
|
|
3
|
-
severity: "error" | "warn";
|
|
4
|
-
code: string;
|
|
5
|
-
message: string;
|
|
6
|
-
path?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ValidatePrototypeOptions {
|
|
9
|
-
projectRoot: string;
|
|
10
|
-
config: PrototypeConfig;
|
|
11
|
-
strict?: boolean;
|
|
12
|
-
checkExternalAssets?: boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare function validatePrototype(opts: ValidatePrototypeOptions): Promise<PrototypeValidationIssue[]>;
|
|
15
|
-
export declare function formatPrototypeIssues(issues: PrototypeValidationIssue[]): string;
|
|
16
|
-
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/prototype/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAC;AASrE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CA+IrC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,CAOhF"}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { isPrototypeBasicAuthConfigured } from "./config.js";
|
|
4
|
-
import { findAbsoluteLocalRefs } from "./relative-assets.js";
|
|
5
|
-
import { checkViteRelativeBase, formatViteBasePathHint } from "./build-base-path.js";
|
|
6
|
-
import { pathExists, readJson } from "../util/fs.js";
|
|
7
|
-
const EXTERNAL_ASSET_RE = /(?:https?:)?\/\/(?:fonts\.googleapis|fonts\.gstatic|cdn\.|unpkg\.|jsdelivr\.)/i;
|
|
8
|
-
export async function validatePrototype(opts) {
|
|
9
|
-
const issues = [];
|
|
10
|
-
if (!isPrototypeBasicAuthConfigured(opts.config)) {
|
|
11
|
-
issues.push({
|
|
12
|
-
severity: "error",
|
|
13
|
-
code: "BASIC_AUTH_MISSING",
|
|
14
|
-
message: "Prototype basic auth not configured — ask the user for username/password, then: npx ai-spector prototype auth --username <u> --password <p>",
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
const htpasswdPath = join(opts.projectRoot, opts.config.htpasswdFile);
|
|
19
|
-
if (!(await pathExists(htpasswdPath))) {
|
|
20
|
-
issues.push({
|
|
21
|
-
severity: "error",
|
|
22
|
-
code: "HTPASSWD_MISSING",
|
|
23
|
-
message: `Missing ${opts.config.htpasswdFile} — run: npx ai-spector prototype auth --from-config`,
|
|
24
|
-
path: htpasswdPath,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const manifestPath = join(opts.projectRoot, opts.config.prototypeDir, "manifest.json");
|
|
29
|
-
if (!(await pathExists(manifestPath))) {
|
|
30
|
-
issues.push({
|
|
31
|
-
severity: "error",
|
|
32
|
-
code: "MANIFEST_MISSING",
|
|
33
|
-
message: `Missing ${opts.config.prototypeDir}/manifest.json — run: npx ai-spector prototype setup`,
|
|
34
|
-
path: manifestPath,
|
|
35
|
-
});
|
|
36
|
-
return issues;
|
|
37
|
-
}
|
|
38
|
-
const manifest = await readJson(manifestPath);
|
|
39
|
-
if (manifest.schemaVersion !== 1) {
|
|
40
|
-
issues.push({
|
|
41
|
-
severity: "error",
|
|
42
|
-
code: "MANIFEST_SCHEMA",
|
|
43
|
-
message: `Unsupported manifest schemaVersion: ${manifest.schemaVersion}`,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
if (!manifest.themeName?.trim()) {
|
|
47
|
-
issues.push({
|
|
48
|
-
severity: "error",
|
|
49
|
-
code: "THEME_MISSING",
|
|
50
|
-
message: "manifest.json themeName is empty — run: npx ai-spector prototype setup --theme <name>",
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
const buildMode = opts.config.buildMode ?? "static";
|
|
54
|
-
const stems = new Set();
|
|
55
|
-
for (const screen of manifest.screens ?? []) {
|
|
56
|
-
if (stems.has(screen.prototypeStem)) {
|
|
57
|
-
issues.push({
|
|
58
|
-
severity: "error",
|
|
59
|
-
code: "DUPLICATE_STEM",
|
|
60
|
-
message: `Duplicate prototypeStem: ${screen.prototypeStem}`,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
stems.add(screen.prototypeStem);
|
|
64
|
-
if (buildMode !== "spa") {
|
|
65
|
-
const htmlPath = join(opts.projectRoot, opts.config.srcDir, `${screen.prototypeStem}.html`);
|
|
66
|
-
if (!(await pathExists(htmlPath))) {
|
|
67
|
-
issues.push({
|
|
68
|
-
severity: opts.strict ? "error" : "warn",
|
|
69
|
-
code: "HTML_MISSING",
|
|
70
|
-
message: `Missing HTML for ${screen.displayName}: ${opts.config.srcDir}/${screen.prototypeStem}.html`,
|
|
71
|
-
path: htmlPath,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else if (opts.checkExternalAssets !== false) {
|
|
75
|
-
const html = await readFile(htmlPath, "utf8");
|
|
76
|
-
if (EXTERNAL_ASSET_RE.test(html)) {
|
|
77
|
-
issues.push({
|
|
78
|
-
severity: "warn",
|
|
79
|
-
code: "EXTERNAL_ASSET",
|
|
80
|
-
message: `External CDN/font URL in ${screen.prototypeStem}.html — use tokens from prototype/DESIGN.md only`,
|
|
81
|
-
path: htmlPath,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
const absoluteRefs = findAbsoluteLocalRefs(html);
|
|
85
|
-
if (absoluteRefs.length > 0) {
|
|
86
|
-
issues.push({
|
|
87
|
-
severity: opts.strict ? "error" : "warn",
|
|
88
|
-
code: "ABSOLUTE_ASSET_PATH",
|
|
89
|
-
message: `Root-absolute asset refs in ${screen.prototypeStem}.html (${absoluteRefs.slice(0, 3).join(", ")}${absoluteRefs.length > 3 ? ", …" : ""}) — use relative paths from the current file (e.g. ./assets/app.js)`,
|
|
90
|
-
path: htmlPath,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
const docPath = join(opts.projectRoot, screen.screenDoc);
|
|
96
|
-
if (!(await pathExists(docPath))) {
|
|
97
|
-
issues.push({
|
|
98
|
-
severity: "warn",
|
|
99
|
-
code: "SCREEN_DOC_MISSING",
|
|
100
|
-
message: `Screen design doc missing: ${screen.screenDoc}`,
|
|
101
|
-
path: docPath,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// SPA mode: validate the single build entrypoint (replaces per-screen HTML checks above).
|
|
106
|
-
if (buildMode === "spa") {
|
|
107
|
-
const buildDest = opts.config.buildDest?.trim() || `${opts.config.prototypeDir}/dist`;
|
|
108
|
-
const indexPath = join(opts.projectRoot, buildDest, "index.html");
|
|
109
|
-
if (!(await pathExists(indexPath))) {
|
|
110
|
-
issues.push({
|
|
111
|
-
severity: opts.strict ? "error" : "warn",
|
|
112
|
-
code: "SPA_BUILD_MISSING",
|
|
113
|
-
message: `SPA build not found: ${buildDest}/index.html — run your framework build then: npx ai-spector prototype sync`,
|
|
114
|
-
path: indexPath,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
else if (opts.checkExternalAssets !== false) {
|
|
118
|
-
const html = await readFile(indexPath, "utf8");
|
|
119
|
-
const absoluteRefs = findAbsoluteLocalRefs(html);
|
|
120
|
-
if (absoluteRefs.length > 0) {
|
|
121
|
-
issues.push({
|
|
122
|
-
severity: opts.strict ? "error" : "warn",
|
|
123
|
-
code: "ABSOLUTE_ASSET_PATH",
|
|
124
|
-
message: `Root-absolute asset refs in ${buildDest}/index.html (${absoluteRefs.slice(0, 3).join(", ")}${absoluteRefs.length > 3 ? ", …" : ""}) — set Vite base: './' and rebuild, or run prototype sync to rewrite paths`,
|
|
125
|
-
path: indexPath,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const viteCheck = await checkViteRelativeBase(opts.projectRoot, opts.config.techStack);
|
|
130
|
-
if (viteCheck?.needsRelativeBase) {
|
|
131
|
-
issues.push({
|
|
132
|
-
severity: opts.strict ? "error" : "warn",
|
|
133
|
-
code: "VITE_BASE_PATH",
|
|
134
|
-
message: `Vite build will emit root-absolute asset URLs — ${formatViteBasePathHint(viteCheck)}`,
|
|
135
|
-
path: viteCheck.configPath ?? undefined,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return issues;
|
|
140
|
-
}
|
|
141
|
-
export function formatPrototypeIssues(issues) {
|
|
142
|
-
if (issues.length === 0) {
|
|
143
|
-
return "Prototype validation: OK";
|
|
144
|
-
}
|
|
145
|
-
return issues
|
|
146
|
-
.map((i) => `[${i.severity.toUpperCase()}] ${i.code}: ${i.message}`)
|
|
147
|
-
.join("\n");
|
|
148
|
-
}
|
|
149
|
-
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/prototype/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/build.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { RegistryDocument, SectionRegistry } from "../types.js";
|
|
2
|
-
/** Scan basic-design list-chapter templates (api-list, screen map, db-design). */
|
|
3
|
-
export declare function scanBasicDesignListDocuments(projectRoot: string): Promise<RegistryDocument[]>;
|
|
4
|
-
export declare function buildSectionRegistry(root?: string): Promise<SectionRegistry>;
|
|
5
|
-
//# sourceMappingURL=build.d.ts.map
|