@seanmars/tospec 0.19.0-beta.1 → 0.19.0-beta.13
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/CHANGELOG.md +530 -0
- package/README.md +71 -77
- package/assets/dashboard/app.js +14 -3
- package/assets/dashboard/style.css +7 -0
- package/assets/rules/tospec/decision.md +3 -0
- package/assets/rules/tospec/single-source-of-truth.md +19 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +254 -83
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/config.d.ts +9 -17
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +374 -98
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dashboard.d.ts +64 -81
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +346 -230
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/decision.d.ts +41 -19
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +400 -70
- package/dist/commands/decision.js.map +1 -1
- package/dist/commands/metrics.d.ts +28 -51
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +69 -85
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/shared-output.d.ts +18 -21
- package/dist/commands/shared-output.d.ts.map +1 -1
- package/dist/commands/shared-output.js +49 -23
- package/dist/commands/shared-output.js.map +1 -1
- package/dist/commands/show.d.ts +7 -0
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +39 -8
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/validate.d.ts +47 -30
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +282 -108
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/workflow/index.d.ts +6 -10
- package/dist/commands/workflow/index.d.ts.map +1 -1
- package/dist/commands/workflow/index.js +6 -10
- package/dist/commands/workflow/index.js.map +1 -1
- package/dist/commands/workflow/instructions.d.ts +21 -8
- package/dist/commands/workflow/instructions.d.ts.map +1 -1
- package/dist/commands/workflow/instructions.js +254 -95
- package/dist/commands/workflow/instructions.js.map +1 -1
- package/dist/commands/workflow/new-change.d.ts +4 -5
- package/dist/commands/workflow/new-change.d.ts.map +1 -1
- package/dist/commands/workflow/new-change.js +90 -25
- package/dist/commands/workflow/new-change.js.map +1 -1
- package/dist/commands/workflow/schemas.d.ts +3 -5
- package/dist/commands/workflow/schemas.d.ts.map +1 -1
- package/dist/commands/workflow/schemas.js +37 -11
- package/dist/commands/workflow/schemas.js.map +1 -1
- package/dist/commands/workflow/shared.d.ts +48 -21
- package/dist/commands/workflow/shared.d.ts.map +1 -1
- package/dist/commands/workflow/shared.js +36 -33
- package/dist/commands/workflow/shared.js.map +1 -1
- package/dist/commands/workflow/status.d.ts +10 -6
- package/dist/commands/workflow/status.d.ts.map +1 -1
- package/dist/commands/workflow/status.js +84 -42
- package/dist/commands/workflow/status.js.map +1 -1
- package/dist/commands/workflow/templates.d.ts +10 -3
- package/dist/commands/workflow/templates.d.ts.map +1 -1
- package/dist/commands/workflow/templates.js +39 -40
- package/dist/commands/workflow/templates.js.map +1 -1
- package/dist/core/archive.d.ts +26 -21
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +386 -205
- package/dist/core/archive.js.map +1 -1
- package/dist/core/artifact-graph/graph.d.ts +29 -36
- package/dist/core/artifact-graph/graph.d.ts.map +1 -1
- package/dist/core/artifact-graph/graph.js +50 -58
- package/dist/core/artifact-graph/graph.js.map +1 -1
- package/dist/core/artifact-graph/index.d.ts +1 -1
- package/dist/core/artifact-graph/index.d.ts.map +1 -1
- package/dist/core/artifact-graph/index.js +1 -1
- package/dist/core/artifact-graph/index.js.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.d.ts +105 -100
- package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +176 -110
- package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
- package/dist/core/artifact-graph/outputs.d.ts +11 -14
- package/dist/core/artifact-graph/outputs.d.ts.map +1 -1
- package/dist/core/artifact-graph/outputs.js +47 -29
- package/dist/core/artifact-graph/outputs.js.map +1 -1
- package/dist/core/artifact-graph/resolver.d.ts +44 -63
- package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
- package/dist/core/artifact-graph/resolver.js +85 -86
- package/dist/core/artifact-graph/resolver.js.map +1 -1
- package/dist/core/artifact-graph/schema.d.ts +0 -6
- package/dist/core/artifact-graph/schema.d.ts.map +1 -1
- package/dist/core/artifact-graph/schema.js +7 -32
- package/dist/core/artifact-graph/schema.js.map +1 -1
- package/dist/core/artifact-graph/state.d.ts +1 -8
- package/dist/core/artifact-graph/state.d.ts.map +1 -1
- package/dist/core/artifact-graph/state.js +2 -17
- package/dist/core/artifact-graph/state.js.map +1 -1
- package/dist/core/artifact-graph/stub-detection.d.ts +12 -0
- package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -0
- package/dist/core/artifact-graph/stub-detection.js +39 -0
- package/dist/core/artifact-graph/stub-detection.js.map +1 -0
- package/dist/core/artifact-graph/types.d.ts +4 -0
- package/dist/core/artifact-graph/types.d.ts.map +1 -1
- package/dist/core/artifact-graph/types.js +30 -10
- package/dist/core/artifact-graph/types.js.map +1 -1
- package/dist/core/available-tools.d.ts +3 -12
- package/dist/core/available-tools.d.ts.map +1 -1
- package/dist/core/available-tools.js +4 -13
- package/dist/core/available-tools.js.map +1 -1
- package/dist/core/change-metadata/schema.d.ts +1 -1
- package/dist/core/change-metadata/schema.d.ts.map +1 -1
- package/dist/core/change-metadata/schema.js +10 -7
- package/dist/core/change-metadata/schema.js.map +1 -1
- package/dist/core/change-presenter.d.ts +23 -18
- package/dist/core/change-presenter.d.ts.map +1 -1
- package/dist/core/change-presenter.js +102 -43
- package/dist/core/change-presenter.js.map +1 -1
- package/dist/core/change-status-policy.d.ts +8 -1
- package/dist/core/change-status-policy.d.ts.map +1 -1
- package/dist/core/change-status-policy.js +25 -1
- package/dist/core/change-status-policy.js.map +1 -1
- package/dist/core/codex-metrics.d.ts +25 -45
- package/dist/core/codex-metrics.d.ts.map +1 -1
- package/dist/core/codex-metrics.js +44 -88
- package/dist/core/codex-metrics.js.map +1 -1
- package/dist/core/codex-residue.d.ts +22 -0
- package/dist/core/codex-residue.d.ts.map +1 -0
- package/dist/core/codex-residue.js +61 -0
- package/dist/core/codex-residue.js.map +1 -0
- package/dist/core/command-generation/adapters/claude.d.ts +2 -9
- package/dist/core/command-generation/adapters/claude.d.ts.map +1 -1
- package/dist/core/command-generation/adapters/claude.js +2 -12
- package/dist/core/command-generation/adapters/claude.js.map +1 -1
- package/dist/core/command-generation/adapters/index.d.ts +1 -9
- package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
- package/dist/core/command-generation/adapters/index.js +1 -9
- package/dist/core/command-generation/adapters/index.js.map +1 -1
- package/dist/core/command-generation/generator.d.ts +0 -17
- package/dist/core/command-generation/generator.d.ts.map +1 -1
- package/dist/core/command-generation/generator.js +0 -17
- package/dist/core/command-generation/generator.js.map +1 -1
- package/dist/core/command-generation/index.d.ts +2 -5
- package/dist/core/command-generation/index.d.ts.map +1 -1
- package/dist/core/command-generation/index.js +0 -9
- package/dist/core/command-generation/index.js.map +1 -1
- package/dist/core/command-generation/types.d.ts +10 -36
- package/dist/core/command-generation/types.d.ts.map +1 -1
- package/dist/core/command-generation/types.js +0 -6
- package/dist/core/command-generation/types.js.map +1 -1
- package/dist/core/command-generation/yaml.d.ts +3 -18
- package/dist/core/command-generation/yaml.d.ts.map +1 -1
- package/dist/core/command-generation/yaml.js +5 -23
- package/dist/core/command-generation/yaml.js.map +1 -1
- package/dist/core/config-prompts.d.ts +2 -4
- package/dist/core/config-prompts.d.ts.map +1 -1
- package/dist/core/config-prompts.js +2 -7
- package/dist/core/config-prompts.js.map +1 -1
- package/dist/core/config-schema.d.ts +8 -53
- package/dist/core/config-schema.d.ts.map +1 -1
- package/dist/core/config-schema.js +49 -62
- package/dist/core/config-schema.js.map +1 -1
- package/dist/core/config.d.ts +56 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +73 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/converters/json-converter.d.ts.map +1 -1
- package/dist/core/dashboard-activity.d.ts +7 -9
- package/dist/core/dashboard-activity.d.ts.map +1 -1
- package/dist/core/dashboard-activity.js +26 -24
- package/dist/core/dashboard-activity.js.map +1 -1
- package/dist/core/dashboard-data.d.ts +40 -22
- package/dist/core/dashboard-data.d.ts.map +1 -1
- package/dist/core/dashboard-data.js +62 -70
- package/dist/core/dashboard-data.js.map +1 -1
- package/dist/core/global-config.d.ts +24 -53
- package/dist/core/global-config.d.ts.map +1 -1
- package/dist/core/global-config.js +38 -67
- package/dist/core/global-config.js.map +1 -1
- package/dist/core/init.d.ts +29 -11
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +232 -164
- package/dist/core/init.js.map +1 -1
- package/dist/core/list.d.ts +1 -1
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +121 -28
- package/dist/core/list.js.map +1 -1
- package/dist/core/local-server.d.ts +60 -50
- package/dist/core/local-server.d.ts.map +1 -1
- package/dist/core/local-server.js +94 -66
- package/dist/core/local-server.js.map +1 -1
- package/dist/core/markdown-render.d.ts +25 -0
- package/dist/core/markdown-render.d.ts.map +1 -0
- package/dist/core/markdown-render.js +94 -0
- package/dist/core/markdown-render.js.map +1 -0
- package/dist/core/migrate.d.ts +32 -15
- package/dist/core/migrate.d.ts.map +1 -1
- package/dist/core/migrate.js +220 -108
- package/dist/core/migrate.js.map +1 -1
- package/dist/core/parsers/change-parser.d.ts +7 -10
- package/dist/core/parsers/change-parser.d.ts.map +1 -1
- package/dist/core/parsers/change-parser.js +48 -56
- package/dist/core/parsers/change-parser.js.map +1 -1
- package/dist/core/parsers/markdown-parser.d.ts +8 -9
- package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
- package/dist/core/parsers/markdown-parser.js +31 -22
- package/dist/core/parsers/markdown-parser.js.map +1 -1
- package/dist/core/parsers/requirement-blocks.d.ts +43 -15
- package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
- package/dist/core/parsers/requirement-blocks.js +169 -54
- package/dist/core/parsers/requirement-blocks.js.map +1 -1
- package/dist/core/parsers/requirement-text.d.ts +73 -79
- package/dist/core/parsers/requirement-text.d.ts.map +1 -1
- package/dist/core/parsers/requirement-text.js +137 -79
- package/dist/core/parsers/requirement-text.js.map +1 -1
- package/dist/core/parsers/spec-structure.d.ts.map +1 -1
- package/dist/core/parsers/spec-structure.js +10 -6
- package/dist/core/parsers/spec-structure.js.map +1 -1
- package/dist/core/planning-home.js.map +1 -1
- package/dist/core/profiles.d.ts +3 -10
- package/dist/core/profiles.d.ts.map +1 -1
- package/dist/core/profiles.js +5 -12
- package/dist/core/profiles.js.map +1 -1
- package/dist/core/project-config.d.ts +43 -44
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +107 -82
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/project-layout.d.ts +10 -18
- package/dist/core/project-layout.d.ts.map +1 -1
- package/dist/core/project-layout.js +16 -26
- package/dist/core/project-layout.js.map +1 -1
- package/dist/core/root-selection.d.ts +11 -7
- package/dist/core/root-selection.d.ts.map +1 -1
- package/dist/core/root-selection.js +7 -8
- package/dist/core/root-selection.js.map +1 -1
- package/dist/core/rules.d.ts +10 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +43 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/schema-names.d.ts +16 -0
- package/dist/core/schema-names.d.ts.map +1 -0
- package/dist/core/schema-names.js +16 -0
- package/dist/core/schema-names.js.map +1 -0
- package/dist/core/schemas/base.schema.d.ts +3 -0
- package/dist/core/schemas/base.schema.d.ts.map +1 -1
- package/dist/core/schemas/base.schema.js +22 -6
- package/dist/core/schemas/base.schema.js.map +1 -1
- package/dist/core/schemas/change.schema.d.ts +16 -0
- package/dist/core/schemas/change.schema.d.ts.map +1 -1
- package/dist/core/schemas/change.schema.js +41 -10
- package/dist/core/schemas/change.schema.js.map +1 -1
- package/dist/core/schemas/spec.schema.d.ts +2 -0
- package/dist/core/schemas/spec.schema.d.ts.map +1 -1
- package/dist/core/shared/index.d.ts +3 -8
- package/dist/core/shared/index.d.ts.map +1 -1
- package/dist/core/shared/index.js +3 -8
- package/dist/core/shared/index.js.map +1 -1
- package/dist/core/shared/rules-generation.d.ts +27 -8
- package/dist/core/shared/rules-generation.d.ts.map +1 -1
- package/dist/core/shared/rules-generation.js +151 -16
- package/dist/core/shared/rules-generation.js.map +1 -1
- package/dist/core/shared/skill-generation.d.ts +38 -53
- package/dist/core/shared/skill-generation.d.ts.map +1 -1
- package/dist/core/shared/skill-generation.js +82 -51
- package/dist/core/shared/skill-generation.js.map +1 -1
- package/dist/core/shared/tool-detection.d.ts +40 -62
- package/dist/core/shared/tool-detection.d.ts.map +1 -1
- package/dist/core/shared/tool-detection.js +88 -80
- package/dist/core/shared/tool-detection.js.map +1 -1
- package/dist/core/skill-metrics.d.ts +36 -63
- package/dist/core/skill-metrics.d.ts.map +1 -1
- package/dist/core/skill-metrics.js +34 -73
- package/dist/core/skill-metrics.js.map +1 -1
- package/dist/core/spec-presenter.d.ts.map +1 -1
- package/dist/core/spec-presenter.js +6 -6
- package/dist/core/spec-presenter.js.map +1 -1
- package/dist/core/specs-apply.d.ts +22 -23
- package/dist/core/specs-apply.d.ts.map +1 -1
- package/dist/core/specs-apply.js +166 -193
- package/dist/core/specs-apply.js.map +1 -1
- package/dist/core/templates/fragments/interview.d.ts +2 -6
- package/dist/core/templates/fragments/interview.d.ts.map +1 -1
- package/dist/core/templates/fragments/interview.js +2 -6
- package/dist/core/templates/fragments/interview.js.map +1 -1
- package/dist/core/templates/fragments/next-step.d.ts +4 -8
- package/dist/core/templates/fragments/next-step.d.ts.map +1 -1
- package/dist/core/templates/fragments/next-step.js +4 -8
- package/dist/core/templates/fragments/next-step.js.map +1 -1
- package/dist/core/templates/fragments/verify.d.ts +9 -12
- package/dist/core/templates/fragments/verify.d.ts.map +1 -1
- package/dist/core/templates/fragments/verify.js +9 -12
- package/dist/core/templates/fragments/verify.js.map +1 -1
- package/dist/core/templates/index.d.ts +0 -6
- package/dist/core/templates/index.d.ts.map +1 -1
- package/dist/core/templates/index.js +0 -7
- package/dist/core/templates/index.js.map +1 -1
- package/dist/core/templates/skill-templates.d.ts +1 -5
- package/dist/core/templates/skill-templates.d.ts.map +1 -1
- package/dist/core/templates/skill-templates.js +0 -5
- package/dist/core/templates/skill-templates.js.map +1 -1
- package/dist/core/templates/types.d.ts +3 -7
- package/dist/core/templates/types.d.ts.map +1 -1
- package/dist/core/templates/types.js +0 -3
- package/dist/core/templates/types.js.map +1 -1
- package/dist/core/templates/workflows/apply.d.ts +3 -9
- package/dist/core/templates/workflows/apply.d.ts.map +1 -1
- package/dist/core/templates/workflows/apply.js +9 -12
- package/dist/core/templates/workflows/apply.js.map +1 -1
- package/dist/core/templates/workflows/archive.d.ts +0 -6
- package/dist/core/templates/workflows/archive.d.ts.map +1 -1
- package/dist/core/templates/workflows/archive.js +7 -5
- package/dist/core/templates/workflows/archive.js.map +1 -1
- package/dist/core/templates/workflows/decision.js +4 -4
- package/dist/core/templates/workflows/decision.js.map +1 -1
- package/dist/core/templates/workflows/explore.js +1 -1
- package/dist/core/templates/workflows/grill.d.ts.map +1 -1
- package/dist/core/templates/workflows/grill.js +0 -2
- package/dist/core/templates/workflows/grill.js.map +1 -1
- package/dist/core/templates/workflows/issue.d.ts +0 -6
- package/dist/core/templates/workflows/issue.d.ts.map +1 -1
- package/dist/core/templates/workflows/issue.js +3 -0
- package/dist/core/templates/workflows/issue.js.map +1 -1
- package/dist/core/templates/workflows/propose.d.ts +0 -6
- package/dist/core/templates/workflows/propose.d.ts.map +1 -1
- package/dist/core/templates/workflows/propose.js +0 -1
- package/dist/core/templates/workflows/propose.js.map +1 -1
- package/dist/core/templates/workflows/sync.d.ts +2 -8
- package/dist/core/templates/workflows/sync.d.ts.map +1 -1
- package/dist/core/templates/workflows/sync.js +2 -2
- package/dist/core/templates/workflows/sync.js.map +1 -1
- package/dist/core/templates/workflows/update.d.ts +0 -6
- package/dist/core/templates/workflows/update.d.ts.map +1 -1
- package/dist/core/templates/workflows/update.js.map +1 -1
- package/dist/core/update.d.ts +26 -21
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +165 -116
- package/dist/core/update.js.map +1 -1
- package/dist/core/user-state-migration.d.ts +13 -15
- package/dist/core/user-state-migration.d.ts.map +1 -1
- package/dist/core/user-state-migration.js +16 -20
- package/dist/core/user-state-migration.js.map +1 -1
- package/dist/core/validation/constants.d.ts +19 -25
- package/dist/core/validation/constants.d.ts.map +1 -1
- package/dist/core/validation/constants.js +25 -20
- package/dist/core/validation/constants.js.map +1 -1
- package/dist/core/validation/prose-length.d.ts +15 -0
- package/dist/core/validation/prose-length.d.ts.map +1 -0
- package/dist/core/validation/prose-length.js +29 -0
- package/dist/core/validation/prose-length.js.map +1 -0
- package/dist/core/validation/purpose-placeholder.d.ts +9 -16
- package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
- package/dist/core/validation/purpose-placeholder.js +30 -44
- package/dist/core/validation/purpose-placeholder.js.map +1 -1
- package/dist/core/validation/section-validator.d.ts +4 -4
- package/dist/core/validation/section-validator.d.ts.map +1 -1
- package/dist/core/validation/section-validator.js +43 -7
- package/dist/core/validation/section-validator.js.map +1 -1
- package/dist/core/validation/task-numbering.d.ts +6 -3
- package/dist/core/validation/task-numbering.d.ts.map +1 -1
- package/dist/core/validation/task-numbering.js +23 -11
- package/dist/core/validation/task-numbering.js.map +1 -1
- package/dist/core/validation/types.d.ts +18 -0
- package/dist/core/validation/types.d.ts.map +1 -1
- package/dist/core/validation/types.js +12 -1
- package/dist/core/validation/types.js.map +1 -1
- package/dist/core/validation/validator.d.ts +50 -51
- package/dist/core/validation/validator.d.ts.map +1 -1
- package/dist/core/validation/validator.js +478 -269
- package/dist/core/validation/validator.js.map +1 -1
- package/dist/prompts/searchable-multi-select.d.ts +3 -8
- package/dist/prompts/searchable-multi-select.d.ts.map +1 -1
- package/dist/prompts/searchable-multi-select.js +16 -39
- package/dist/prompts/searchable-multi-select.js.map +1 -1
- package/dist/utils/change-metadata.d.ts +11 -50
- package/dist/utils/change-metadata.d.ts.map +1 -1
- package/dist/utils/change-metadata.js +48 -67
- package/dist/utils/change-metadata.js.map +1 -1
- package/dist/utils/change-utils.d.ts +31 -54
- package/dist/utils/change-utils.d.ts.map +1 -1
- package/dist/utils/change-utils.js +143 -100
- package/dist/utils/change-utils.js.map +1 -1
- package/dist/utils/file-lock.d.ts +39 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +149 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/file-system.d.ts +12 -32
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +16 -40
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +7 -11
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +11 -11
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/interactive.d.ts +4 -9
- package/dist/utils/interactive.d.ts.map +1 -1
- package/dist/utils/interactive.js +2 -4
- package/dist/utils/interactive.js.map +1 -1
- package/dist/utils/item-discovery.d.ts +15 -10
- package/dist/utils/item-discovery.d.ts.map +1 -1
- package/dist/utils/item-discovery.js +42 -47
- package/dist/utils/item-discovery.js.map +1 -1
- package/dist/utils/link.d.ts +13 -4
- package/dist/utils/link.d.ts.map +1 -1
- package/dist/utils/link.js +13 -4
- package/dist/utils/link.js.map +1 -1
- package/dist/utils/match.js.map +1 -1
- package/dist/utils/requirement-diff.d.ts +13 -23
- package/dist/utils/requirement-diff.d.ts.map +1 -1
- package/dist/utils/requirement-diff.js +13 -23
- package/dist/utils/requirement-diff.js.map +1 -1
- package/dist/utils/spec-files.d.ts +10 -11
- package/dist/utils/spec-files.d.ts.map +1 -1
- package/dist/utils/spec-files.js +31 -22
- package/dist/utils/spec-files.js.map +1 -1
- package/dist/utils/task-progress.d.ts +11 -9
- package/dist/utils/task-progress.d.ts.map +1 -1
- package/dist/utils/task-progress.js +53 -32
- package/dist/utils/task-progress.js.map +1 -1
- package/dist/utils/timestamp.d.ts +5 -8
- package/dist/utils/timestamp.d.ts.map +1 -1
- package/dist/utils/timestamp.js +5 -8
- package/dist/utils/timestamp.js.map +1 -1
- package/package.json +9 -10
- package/schemas/decision/templates/decision.md +3 -1
- package/schemas/decision/templates/index.md +2 -2
- package/schemas/issue/schema.yaml +11 -2
- package/schemas/issue/templates/spec.md +37 -3
- package/schemas/sdd/schema.yaml +24 -1
- package/schemas/sdd/templates/spec.md +37 -3
|
@@ -3,27 +3,30 @@ export function normalizeRequirementName(name) {
|
|
|
3
3
|
return name.trim();
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
* Case- and whitespace-insensitive fold
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* only in case or interior whitespace mean a mistake, never two requirements.
|
|
6
|
+
* Case- and whitespace-insensitive fold, for typo detection only: two spellings
|
|
7
|
+
* differing only in case or interior whitespace mean a mistake, never two
|
|
8
|
+
* requirements. Requirement matching itself stays case-sensitive
|
|
9
|
+
* (normalizeRequirementName).
|
|
11
10
|
*/
|
|
12
11
|
export function foldRequirementName(name) {
|
|
13
12
|
return normalizeRequirementName(name).toLowerCase().replace(/\s+/g, ' ');
|
|
14
13
|
}
|
|
15
|
-
const REQUIREMENT_HEADER_REGEX = /^###\s*Requirement:\s*(.+)\s*$/i;
|
|
16
14
|
/**
|
|
17
|
-
*
|
|
15
|
+
* The one spelling of a requirement header, shared with the main-spec structure
|
|
16
|
+
* guard and the merge. `\s*` on purpose: `###Requirement:` is accepted here (see
|
|
17
|
+
* the no-space regressions in requirement-blocks.test.ts), so a guard using a
|
|
18
|
+
* stricter `\s+` let a duplicate slip past and the merge's Map collapsed it.
|
|
18
19
|
*/
|
|
20
|
+
export const REQUIREMENT_HEADER_REGEX = /^###\s*Requirement:\s*(.+)\s*$/i;
|
|
19
21
|
export function extractRequirementsSection(content) {
|
|
20
|
-
const
|
|
21
|
-
const lines = normalized.split('\n');
|
|
22
|
+
const lines = normalizeDocument(content).split('\n');
|
|
22
23
|
const fenceMask = buildCodeFenceMask(lines);
|
|
23
24
|
const reqHeaderIndex = lines.findIndex((l, i) => !fenceMask[i] && /^##\s+Requirements\s*$/i.test(l));
|
|
24
25
|
if (reqHeaderIndex === -1) {
|
|
25
|
-
// No
|
|
26
|
-
|
|
26
|
+
// No Requirements section: hand back an empty one appended at the end.
|
|
27
|
+
// From the normalized text, not `content`: the parts are written back, and
|
|
28
|
+
// the raw string still carries the BOM and CRs every other branch strips.
|
|
29
|
+
const before = normalizeDocument(content).trimEnd();
|
|
27
30
|
const headerLine = '## Requirements';
|
|
28
31
|
return {
|
|
29
32
|
before: before ? before + '\n\n' : '',
|
|
@@ -33,7 +36,7 @@ export function extractRequirementsSection(content) {
|
|
|
33
36
|
after: '\n',
|
|
34
37
|
};
|
|
35
38
|
}
|
|
36
|
-
//
|
|
39
|
+
// The section ends at the next unfenced '## ' header.
|
|
37
40
|
let endIndex = lines.length;
|
|
38
41
|
for (let i = reqHeaderIndex + 1; i < lines.length; i++) {
|
|
39
42
|
if (!fenceMask[i] && /^##\s+/.test(lines[i])) {
|
|
@@ -47,11 +50,9 @@ export function extractRequirementsSection(content) {
|
|
|
47
50
|
const sectionBodyMask = fenceMask.slice(reqHeaderIndex + 1, endIndex);
|
|
48
51
|
const isRequirementHeader = (cursor) => !sectionBodyMask[cursor] && REQUIREMENT_HEADER_REGEX.test(sectionBodyLines[cursor]);
|
|
49
52
|
const isTopLevelHeader = (cursor) => !sectionBodyMask[cursor] && /^##\s+/.test(sectionBodyLines[cursor]);
|
|
50
|
-
// Parse requirement blocks within section body
|
|
51
53
|
const blocks = [];
|
|
52
54
|
let cursor = 0;
|
|
53
|
-
|
|
54
|
-
// Collect preamble lines until first requirement header
|
|
55
|
+
const preambleLines = [];
|
|
55
56
|
while (cursor < sectionBodyLines.length && !isRequirementHeader(cursor)) {
|
|
56
57
|
preambleLines.push(sectionBodyLines[cursor]);
|
|
57
58
|
cursor++;
|
|
@@ -59,7 +60,6 @@ export function extractRequirementsSection(content) {
|
|
|
59
60
|
while (cursor < sectionBodyLines.length) {
|
|
60
61
|
const headerLineCandidate = sectionBodyLines[cursor];
|
|
61
62
|
if (!isRequirementHeader(cursor)) {
|
|
62
|
-
// Not a requirement header (or fenced); skip line defensively
|
|
63
63
|
cursor++;
|
|
64
64
|
continue;
|
|
65
65
|
}
|
|
@@ -67,7 +67,6 @@ export function extractRequirementsSection(content) {
|
|
|
67
67
|
const name = normalizeRequirementName(headerMatch[1]);
|
|
68
68
|
const startLine = reqHeaderIndex + 1 + cursor + 1;
|
|
69
69
|
cursor++;
|
|
70
|
-
// Gather lines until next requirement header or end of section
|
|
71
70
|
const bodyLines = [headerLineCandidate];
|
|
72
71
|
while (cursor < sectionBodyLines.length && !isRequirementHeader(cursor) && !isTopLevelHeader(cursor)) {
|
|
73
72
|
bodyLines.push(sectionBodyLines[cursor]);
|
|
@@ -86,28 +85,22 @@ export function extractRequirementsSection(content) {
|
|
|
86
85
|
after: after.startsWith('\n') ? after : '\n' + after,
|
|
87
86
|
};
|
|
88
87
|
}
|
|
89
|
-
function normalizeLineEndings(content) {
|
|
90
|
-
return normalizeDocument(content);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Parse a delta-formatted spec change file content into a DeltaPlan with raw blocks.
|
|
94
|
-
*/
|
|
95
88
|
export function parseDeltaSpec(content) {
|
|
96
|
-
const
|
|
97
|
-
const lines = normalized.split('\n');
|
|
89
|
+
const lines = normalizeDocument(content).split('\n');
|
|
98
90
|
const fenceMask = buildCodeFenceMask(lines);
|
|
99
91
|
const sections = splitTopLevelSections(lines, fenceMask);
|
|
100
|
-
const addedLookup = getSections(sections,
|
|
101
|
-
const modifiedLookup = getSections(sections,
|
|
102
|
-
const removedLookup = getSections(sections,
|
|
103
|
-
const renamedLookup = getSections(sections,
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
//
|
|
92
|
+
const addedLookup = getSections(sections, ADDED_SECTION);
|
|
93
|
+
const modifiedLookup = getSections(sections, MODIFIED_SECTION);
|
|
94
|
+
const removedLookup = getSections(sections, REMOVED_SECTION);
|
|
95
|
+
const renamedLookup = getSections(sections, RENAMED_SECTION);
|
|
96
|
+
const removedScenariosLookup = getSections(sections, REMOVED_SCENARIOS_SECTION);
|
|
97
|
+
// Each occurrence is parsed on its own, so no entry is interpreted across the
|
|
98
|
+
// boundary between two occurrences.
|
|
107
99
|
const added = addedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
|
|
108
100
|
const modified = modifiedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
|
|
109
101
|
const removedEntries = removedLookup.bodies.flatMap(parseRemovedEntries);
|
|
110
102
|
const removedBlocks = removedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
|
|
103
|
+
const renamedBlocks = renamedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
|
|
111
104
|
const renamedResults = renamedLookup.bodies.map(parseRenamedPairs);
|
|
112
105
|
const renamedPairs = renamedResults.flatMap((r) => r.pairs);
|
|
113
106
|
const renamedIssues = renamedResults.flatMap((r) => r.issues);
|
|
@@ -117,7 +110,9 @@ export function parseDeltaSpec(content) {
|
|
|
117
110
|
removed: removedEntries.map((e) => e.name),
|
|
118
111
|
removedEntries,
|
|
119
112
|
removedBlocks,
|
|
113
|
+
renamedBlocks,
|
|
120
114
|
renamed: renamedPairs,
|
|
115
|
+
removedScenarios: removedScenariosLookup.bodies.flatMap(parseRemovedScenarioEntries),
|
|
121
116
|
renamedIssues,
|
|
122
117
|
duplicateSections: findDuplicateSections(sections),
|
|
123
118
|
sectionPresence: {
|
|
@@ -125,6 +120,7 @@ export function parseDeltaSpec(content) {
|
|
|
125
120
|
modified: modifiedLookup.found,
|
|
126
121
|
removed: removedLookup.found,
|
|
127
122
|
renamed: renamedLookup.found,
|
|
123
|
+
removedScenarios: removedScenariosLookup.found,
|
|
128
124
|
},
|
|
129
125
|
};
|
|
130
126
|
}
|
|
@@ -133,7 +129,7 @@ function splitTopLevelSections(lines, fenceMask) {
|
|
|
133
129
|
const indices = [];
|
|
134
130
|
for (let i = 0; i < lines.length; i++) {
|
|
135
131
|
if (fenceMask[i])
|
|
136
|
-
continue; // a '## ...' inside a fenced example is not a
|
|
132
|
+
continue; // a '## ...' inside a fenced example is not a section
|
|
137
133
|
const m = lines[i].match(/^(##)\s+(.+)$/);
|
|
138
134
|
if (m) {
|
|
139
135
|
indices.push({ title: m[2].trim(), index: i });
|
|
@@ -150,9 +146,8 @@ function splitTopLevelSections(lines, fenceMask) {
|
|
|
150
146
|
offset: current.index + 1,
|
|
151
147
|
headerLine: current.index + 1,
|
|
152
148
|
};
|
|
153
|
-
// Case-insensitive key
|
|
154
|
-
//
|
|
155
|
-
// must fold together here too.
|
|
149
|
+
// Case-insensitive key, matching `getSections`: two spellings differing
|
|
150
|
+
// only in case are one section to every caller.
|
|
156
151
|
const key = current.title.toLowerCase();
|
|
157
152
|
const existing = result.get(key);
|
|
158
153
|
if (existing)
|
|
@@ -166,10 +161,32 @@ function getSections(sections, desired) {
|
|
|
166
161
|
const bodies = sections.get(desired.toLowerCase());
|
|
167
162
|
return bodies ? { bodies, found: true } : { bodies: [], found: false };
|
|
168
163
|
}
|
|
169
|
-
|
|
164
|
+
// The section titles carrying delta semantics, named once so the set cannot
|
|
165
|
+
// drift between what `parseDeltaSpec` reads and what `findDuplicateSections`
|
|
166
|
+
// judges.
|
|
167
|
+
const ADDED_SECTION = 'ADDED Requirements';
|
|
168
|
+
const MODIFIED_SECTION = 'MODIFIED Requirements';
|
|
169
|
+
const REMOVED_SECTION = 'REMOVED Requirements';
|
|
170
|
+
const RENAMED_SECTION = 'RENAMED Requirements';
|
|
171
|
+
// Declares a scenario the MODIFIED block deliberately does not restate. Without
|
|
172
|
+
// it the grammar is append-only at the scenario level: the drop guard refuses a
|
|
173
|
+
// MODIFIED that omits a scenario, so an obsolete one has no path out short of
|
|
174
|
+
// hand-editing the main spec.
|
|
175
|
+
const REMOVED_SCENARIOS_SECTION = 'REMOVED Scenarios';
|
|
176
|
+
const DELTA_SECTION_KEYS = new Set([ADDED_SECTION, MODIFIED_SECTION, REMOVED_SECTION, RENAMED_SECTION, REMOVED_SCENARIOS_SECTION].map((title) => title.toLowerCase()));
|
|
177
|
+
/**
|
|
178
|
+
* Delta section titles that appear more than once, in document order.
|
|
179
|
+
*
|
|
180
|
+
* Scoped to the delta titles on purpose: `splitTopLevelSections` is a general
|
|
181
|
+
* index where an ordinary repeated heading legitimately appears, but the
|
|
182
|
+
* validator reports every entry here as ambiguity about which requirements
|
|
183
|
+
* belong to which — false for a heading that owns none.
|
|
184
|
+
*/
|
|
170
185
|
function findDuplicateSections(sections) {
|
|
171
186
|
const duplicates = [];
|
|
172
|
-
for (const bodies of sections
|
|
187
|
+
for (const [key, bodies] of sections) {
|
|
188
|
+
if (!DELTA_SECTION_KEYS.has(key))
|
|
189
|
+
continue;
|
|
173
190
|
if (bodies.length > 1) {
|
|
174
191
|
duplicates.push({
|
|
175
192
|
title: `## ${bodies[0].title}`,
|
|
@@ -179,6 +196,21 @@ function findDuplicateSections(sections) {
|
|
|
179
196
|
}
|
|
180
197
|
return duplicates;
|
|
181
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Every `### Requirement:` block in a document, whichever section it sits in (or
|
|
201
|
+
* none). For a caller rebuilding a whole file rather than applying a delta: a
|
|
202
|
+
* block written outside every known section is still a requirement.
|
|
203
|
+
*/
|
|
204
|
+
export function parseRequirementBlocks(content) {
|
|
205
|
+
const lines = normalizeDocument(content).split('\n');
|
|
206
|
+
return parseRequirementBlocksFromSection({
|
|
207
|
+
title: '',
|
|
208
|
+
lines,
|
|
209
|
+
fenceMask: buildCodeFenceMask(lines),
|
|
210
|
+
offset: 0,
|
|
211
|
+
headerLine: 0,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
182
214
|
function parseRequirementBlocksFromSection(sectionBody) {
|
|
183
215
|
const { lines, fenceMask } = sectionBody;
|
|
184
216
|
if (lines.length === 0)
|
|
@@ -188,7 +220,6 @@ function parseRequirementBlocksFromSection(sectionBody) {
|
|
|
188
220
|
const blocks = [];
|
|
189
221
|
let i = 0;
|
|
190
222
|
while (i < lines.length) {
|
|
191
|
-
// Seek next requirement header (fenced headers are ignored)
|
|
192
223
|
while (i < lines.length && !isRequirementHeader(i))
|
|
193
224
|
i++;
|
|
194
225
|
if (i >= lines.length)
|
|
@@ -206,22 +237,113 @@ function parseRequirementBlocksFromSection(sectionBody) {
|
|
|
206
237
|
}
|
|
207
238
|
return blocks;
|
|
208
239
|
}
|
|
240
|
+
// Leading-whitespace prefix for the line regexes below. Written as
|
|
241
|
+
// `[ \t]*(?:-[ \t]*)?` rather than `\s*-?\s*`: two adjacent `\s*` around an
|
|
242
|
+
// optional token backtrack quadratically on a line of nothing but blanks, and a
|
|
243
|
+
// 40k-space line took ~600 ms per regex. Horizontal whitespace only — a line
|
|
244
|
+
// never contains its own newline.
|
|
245
|
+
const LINE_PREFIX = '^[ \\t]*(?:-[ \\t]*)?';
|
|
209
246
|
/** `**Reason**:` / `- Reason:` style field line inside a REMOVED entry. */
|
|
210
|
-
const REMOVED_REASON_LINE =
|
|
211
|
-
const REMOVED_MIGRATION_LINE =
|
|
247
|
+
const REMOVED_REASON_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Reason(\\*\\*)?\\s*:`, 'i');
|
|
248
|
+
const REMOVED_MIGRATION_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Migration(\\*\\*)?\\s*:`, 'i');
|
|
249
|
+
// The `### Requirement:` prefix is optional (the templates show a plain name),
|
|
250
|
+
// but an unanchored bullet match collides with prose bullets, so this is
|
|
251
|
+
// restricted to a top-level bullet:
|
|
252
|
+
// - `^-` (no leading whitespace) skips continuation bullets nested under
|
|
253
|
+
// `Migration:`, each of which became an entry failing its own checks.
|
|
254
|
+
// - `\s+` skips a `---` thematic break, otherwise parsed as a requirement
|
|
255
|
+
// named `--`.
|
|
256
|
+
// - `\S` rejects a bare `-` rather than recording an empty name.
|
|
257
|
+
// A top-level bullet that is neither a name nor Reason:/Migration: is still read
|
|
258
|
+
// as a name; disambiguating that needs a grammar change.
|
|
259
|
+
const REMOVED_BULLET_REGEX = /^-\s+`?(?:###\s*Requirement:\s*)?(\S.*?)`?\s*$/;
|
|
260
|
+
// Unlike REMOVED_BULLET_REGEX these stay permissive about leading whitespace:
|
|
261
|
+
// the FROM:/TO: keyword is itself the anchor.
|
|
262
|
+
const RENAMED_FROM_REGEX = new RegExp(`${LINE_PREFIX}FROM:\\s*\`?(?:###\\s*Requirement:\\s*)?(.+?)\`?\\s*$`);
|
|
263
|
+
const RENAMED_TO_REGEX = new RegExp(`${LINE_PREFIX}TO:\\s*\`?(?:###\\s*Requirement:\\s*)?(.+?)\`?\\s*$`);
|
|
264
|
+
// The bullet form is the documented grammar, but `### Requirement:` /
|
|
265
|
+
// `#### Scenario:` headers are accepted too: they are how the same names are
|
|
266
|
+
// spelled everywhere else in a delta, so authors reach for them, and a header
|
|
267
|
+
// that was silently skipped here left the MODIFIED block failing with no hint
|
|
268
|
+
// that this section was the reason.
|
|
269
|
+
// Same shape as LINE_PREFIX with a heading marker as the alternative token.
|
|
270
|
+
const HEADING_OR_BULLET_PREFIX = '^[ \\t]*(?:(?:-|#{1,6})[ \\t]*)?';
|
|
271
|
+
/** `- Requirement: `<name>`` (or `### Requirement: <name>`) — opens a `## REMOVED Scenarios` entry. */
|
|
272
|
+
const REMOVED_SCENARIO_REQUIREMENT_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Requirement(?:\\*\\*)?\\s*:\\s*\`?(\\S.*?)\`?\\s*$`, 'i');
|
|
273
|
+
/** `- Scenario: `<name>`` (or `#### Scenario: <name>`) — names the scenario being dropped. */
|
|
274
|
+
const REMOVED_SCENARIO_NAME_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Scenario(?:\\*\\*)?\\s*:\\s*\`?(\\S.*?)\`?\\s*$`, 'i');
|
|
275
|
+
/**
|
|
276
|
+
* An entry opens on its `Requirement:` line and is completed by the `Scenario:`
|
|
277
|
+
* line under it, so one requirement can drop several scenarios by repeating the
|
|
278
|
+
* pair. Without a `Scenario:` line it contributes nothing.
|
|
279
|
+
*
|
|
280
|
+
* Reason is recorded but not required, the same split the REMOVED Requirements
|
|
281
|
+
* parser uses: presence is data, mandatory-ness is the validator's call.
|
|
282
|
+
*/
|
|
283
|
+
function parseRemovedScenarioEntries(sectionBody) {
|
|
284
|
+
const { lines, fenceMask, offset } = sectionBody;
|
|
285
|
+
const entries = [];
|
|
286
|
+
let requirement = null;
|
|
287
|
+
let current = null;
|
|
288
|
+
for (let i = 0; i < lines.length; i++) {
|
|
289
|
+
if (fenceMask[i])
|
|
290
|
+
continue;
|
|
291
|
+
const line = lines[i];
|
|
292
|
+
if (REMOVED_REASON_LINE.test(line)) {
|
|
293
|
+
if (current)
|
|
294
|
+
current.hasReason = true;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
// Tested before Scenario so adding a third field cannot reorder the match.
|
|
298
|
+
const requirementMatch = line.match(REMOVED_SCENARIO_REQUIREMENT_LINE);
|
|
299
|
+
if (requirementMatch) {
|
|
300
|
+
requirement = { name: normalizeRequirementName(requirementMatch[1]), line: offset + i + 1 };
|
|
301
|
+
current = null;
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
const scenarioMatch = line.match(REMOVED_SCENARIO_NAME_LINE);
|
|
305
|
+
if (scenarioMatch && requirement) {
|
|
306
|
+
current = {
|
|
307
|
+
requirement: requirement.name,
|
|
308
|
+
scenario: scenarioMatch[1].trim(),
|
|
309
|
+
startLine: requirement.line,
|
|
310
|
+
hasReason: false,
|
|
311
|
+
};
|
|
312
|
+
entries.push(current);
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return entries;
|
|
317
|
+
}
|
|
212
318
|
function parseRemovedEntries(sectionBody) {
|
|
213
319
|
const { lines, fenceMask, offset } = sectionBody;
|
|
214
320
|
if (lines.length === 0)
|
|
215
321
|
return [];
|
|
216
322
|
const entries = [];
|
|
217
323
|
let current = null;
|
|
324
|
+
// Set by the first `### Requirement:` header: past that the section is in the
|
|
325
|
+
// header form, where every following bullet belongs to a requirement *body*
|
|
326
|
+
// (its WHEN/THEN steps). Reading those as entry names invents one removal per
|
|
327
|
+
// step. Bullets *before* any header are still the bullet form.
|
|
328
|
+
let inHeaderForm = false;
|
|
218
329
|
for (let i = 0; i < lines.length; i++) {
|
|
219
330
|
if (fenceMask[i])
|
|
220
331
|
continue;
|
|
221
332
|
const line = lines[i];
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
333
|
+
if (REMOVED_REASON_LINE.test(line)) {
|
|
334
|
+
if (current)
|
|
335
|
+
current.hasReason = true;
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
if (REMOVED_MIGRATION_LINE.test(line)) {
|
|
339
|
+
if (current)
|
|
340
|
+
current.hasMigration = true;
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
const header = line.match(REQUIREMENT_HEADER_REGEX);
|
|
344
|
+
if (header)
|
|
345
|
+
inHeaderForm = true;
|
|
346
|
+
const m = header ?? (inHeaderForm ? null : line.match(REMOVED_BULLET_REGEX));
|
|
225
347
|
if (m) {
|
|
226
348
|
current = {
|
|
227
349
|
name: normalizeRequirementName(m[1]),
|
|
@@ -232,12 +354,6 @@ function parseRemovedEntries(sectionBody) {
|
|
|
232
354
|
entries.push(current);
|
|
233
355
|
continue;
|
|
234
356
|
}
|
|
235
|
-
if (!current)
|
|
236
|
-
continue;
|
|
237
|
-
if (REMOVED_REASON_LINE.test(line))
|
|
238
|
-
current.hasReason = true;
|
|
239
|
-
if (REMOVED_MIGRATION_LINE.test(line))
|
|
240
|
-
current.hasMigration = true;
|
|
241
357
|
}
|
|
242
358
|
return entries;
|
|
243
359
|
}
|
|
@@ -252,12 +368,11 @@ function parseRenamedPairs(sectionBody) {
|
|
|
252
368
|
if (fenceMask[i])
|
|
253
369
|
continue;
|
|
254
370
|
const line = lines[i];
|
|
255
|
-
const fromMatch = line.match(
|
|
256
|
-
const toMatch = line.match(
|
|
371
|
+
const fromMatch = line.match(RENAMED_FROM_REGEX);
|
|
372
|
+
const toMatch = line.match(RENAMED_TO_REGEX);
|
|
257
373
|
if (fromMatch) {
|
|
258
374
|
if (current) {
|
|
259
|
-
// Two FROMs in a row: the first one has no TO
|
|
260
|
-
// silently dropped before).
|
|
375
|
+
// Two FROMs in a row: the first one has no TO.
|
|
261
376
|
issues.push({ kind: 'from-without-to', name: current.from, line: current.line });
|
|
262
377
|
}
|
|
263
378
|
current = { from: normalizeRequirementName(fromMatch[1]), line: offset + i + 1 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-blocks.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAkB9E,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,wBAAwB,GAAG,iCAAiC,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACrC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACrC,UAAU;YACV,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAW,EAAE,CACtD,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAW,EAAE,CACnD,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtE,+CAA+C;IAC/C,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,aAAa,GAAa,EAAE,CAAC;IAEjC,wDAAwD;IACxD,OAAO,MAAM,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,8DAA8D;YAC9D,MAAM,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,wBAAwB,CAAE,CAAC;QACzE,MAAM,IAAI,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC;QACT,+DAA+D;QAC/D,MAAM,SAAS,GAAa,CAAC,mBAAmB,CAAC,CAAC;QAClD,OAAO,MAAM,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACrG,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC;QACX,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAEpD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;QACjD,UAAU;QACV,QAAQ;QACR,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK;KACrD,CAAC;AACJ,CAAC;AAuDD,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACpE,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO;QACL,KAAK;QACL,QAAQ;QACR,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,cAAc;QACd,aAAa;QACb,OAAO,EAAE,YAAY;QACrB,aAAa;QACb,iBAAiB,EAAE,qBAAqB,CAAC,QAAQ,CAAC;QAClD,eAAe,EAAE;YACf,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,QAAQ,EAAE,cAAc,CAAC,KAAK;YAC9B,OAAO,EAAE,aAAa,CAAC,KAAK;YAC5B,OAAO,EAAE,aAAa,CAAC,KAAK;SAC7B;KACF,CAAC;AACJ,CAAC;AAuCD,SAAS,qBAAqB,CAAC,KAAe,EAAE,SAAoB;IAClE,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,OAAO,GAA4C,EAAE,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS,CAAC,2DAA2D;QACvF,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7C,MAAM,IAAI,GAAgB;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;YAC1C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;YAClD,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;YACzB,UAAU,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;SAC9B,CAAC;QACF,yEAAyE;QACzE,yEAAyE;QACzE,+BAA+B;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,QAAsB,EAAE,OAAe;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACzE,CAAC;AAED,oEAAoE;AACpE,SAAS,qBAAqB,CAAC,QAAsB;IACnD,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBAC9B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iCAAiC,CAAC,WAAwB;IACjE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,4DAA4D;QAC5D,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,GAAG,GAAa,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AACjE,MAAM,sBAAsB,GAAG,uCAAuC,CAAC;AAEvE,SAAS,mBAAmB,CAAC,WAAwB;IACnD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAwB,IAAI,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,GACL,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC;YACpC,sCAAsC;YACtC,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,GAAG;gBACR,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;gBACzB,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,KAAK;aACpB,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QAC7D,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB;IAIjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACzD,MAAM,KAAK,GAAwC,EAAE,CAAC;IACtD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,OAAO,GAA0C,IAAI,CAAC;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAChF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,gEAAgE;gBAChE,4BAA4B;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,GAAG,EAAE,IAAI,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnF,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"requirement-blocks.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,123 +1,118 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared, fence-aware requirement-reading helpers
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (`Validator.extractRequirementText` / `countScenarios`) — and the two drifted
|
|
7
|
-
* apart. These helpers are the single source of truth for requirement-body
|
|
8
|
-
* extraction, scenario counting, and `SHALL`/`MUST` detection in
|
|
9
|
-
* `validate <change>`, `validate <spec>`, and `archive`.
|
|
2
|
+
* Shared, fence-aware requirement-reading helpers: the single source of truth
|
|
3
|
+
* for requirement-body extraction, scenario counting and `SHALL`/`MUST`
|
|
4
|
+
* detection in `validate <change>`, `validate <spec>` and `archive`. These were
|
|
5
|
+
* once implemented twice — main specs and change deltas — and drifted apart.
|
|
10
6
|
*/
|
|
11
7
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* The BOM matters because every pattern in this file is anchored with `^`. A
|
|
16
|
-
* BOM-prefixed file — the default from several Windows editors and from
|
|
17
|
-
* PowerShell's `Out-File` — turns its first line into
|
|
18
|
-
* `<BOM>## ADDED Requirements`, so the section scan matches nothing and the
|
|
19
|
-
* user is told "No delta sections found", a message that points nowhere near
|
|
20
|
-
* the cause. Only a *leading* BOM is stripped; U+FEFF anywhere else is content.
|
|
8
|
+
* Strip a leading UTF-8 BOM, then collapse CRLF/CR to LF, before any line-based
|
|
9
|
+
* reading.
|
|
21
10
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
11
|
+
* Every pattern in this file is anchored with `^`, so a BOM turns the first line
|
|
12
|
+
* into `<BOM>## ADDED Requirements`, the section scan matches nothing, and the
|
|
13
|
+
* user is told "No delta sections found". Only a *leading* BOM is stripped;
|
|
14
|
+
* U+FEFF anywhere else is content.
|
|
25
15
|
*/
|
|
26
16
|
export declare function normalizeDocument(content: string): string;
|
|
27
17
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* opening length, with nothing but whitespace after it.
|
|
18
|
+
* Strip a leading UTF-8 BOM, leaving line endings untouched \u2014 for readers that
|
|
19
|
+
* write the file back and so must preserve its endings, which rules out
|
|
20
|
+
* `normalizeDocument`. Writing the stripped text back is deliberate: every
|
|
21
|
+
* document tospec produces is UTF-8 *without* a BOM.
|
|
33
22
|
*/
|
|
23
|
+
export declare function stripBom(content: string): string;
|
|
34
24
|
export interface CodeFenceScan {
|
|
25
|
+
/** True for every line inside a fenced code block, fence lines included. */
|
|
35
26
|
mask: boolean[];
|
|
36
27
|
/** 1-based line of a fence that was opened but never closed, else null. */
|
|
37
28
|
unclosedFenceLine: number | null;
|
|
38
29
|
}
|
|
39
30
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
31
|
+
* Mask the lines inside fenced code blocks, mirroring markdown's own rules: a
|
|
32
|
+
* fence opens on a ```` ``` ````/`~~~` run of length >= 3 and closes on the same
|
|
33
|
+
* marker at >= the opening length with nothing but whitespace after it.
|
|
34
|
+
*
|
|
35
|
+
* An unclosed fence masks every following line, silently hiding the rest of the
|
|
36
|
+
* document, so it is reported separately for the validation path to raise.
|
|
44
37
|
*/
|
|
45
38
|
export declare function scanCodeFences(lines: string[]): CodeFenceScan;
|
|
46
39
|
export declare function buildCodeFenceMask(lines: string[]): boolean[];
|
|
47
40
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* paths stay in parity.
|
|
52
|
-
*
|
|
53
|
-
* Exported because archive's scenario-drift check reads scenarios too. It used
|
|
54
|
-
* to carry its own copy of this pattern, and the copies were not actually the
|
|
55
|
-
* same — parity between the two readers has to hold by construction, not by two
|
|
56
|
-
* literals that happen to agree.
|
|
41
|
+
* Only `#### Scenario:` counts as a scenario — a `#### Notes` or other level-4
|
|
42
|
+
* header under a requirement does not. Exported so archive's scenario-drift
|
|
43
|
+
* check shares it: it once carried its own, subtly different copy.
|
|
57
44
|
*/
|
|
58
45
|
export declare const SCENARIO_HEADER: RegExp;
|
|
59
46
|
/**
|
|
60
47
|
* The scenario name from a `#### Scenario:` header line, or null when the line
|
|
61
|
-
* is not one. The single place the name is peeled off
|
|
62
|
-
* reader normalizes it identically.
|
|
48
|
+
* is not one. The single place the name is peeled off, so every reader agrees.
|
|
63
49
|
*/
|
|
64
50
|
export declare function scenarioNameFrom(line: string): string | null;
|
|
65
51
|
/**
|
|
66
|
-
* The one predicate for normative-keyword detection
|
|
67
|
-
*
|
|
68
|
-
* and reject identical text.
|
|
52
|
+
* The one predicate for normative-keyword detection, matching whole words so the
|
|
53
|
+
* delta reader and the schema reader accept and reject identical text.
|
|
69
54
|
*/
|
|
70
55
|
export declare function containsShallOrMust(text: string): boolean;
|
|
71
56
|
/**
|
|
72
|
-
* Extract the full requirement body from the lines
|
|
73
|
-
* `### Requirement:` header
|
|
57
|
+
* Extract the full requirement body from the lines following a
|
|
58
|
+
* `### Requirement:` header, up to the first header on a non-fenced line —
|
|
59
|
+
* usually the first `#### Scenario:`, but also a stray `###` divider the delta
|
|
60
|
+
* reader absorbed into the block.
|
|
74
61
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* when other body text remains: a requirement written entirely as
|
|
80
|
-
* `**Constraint**: The system MUST ...` keeps that line as its body. Captured
|
|
81
|
-
* lines are trimmed and joined with newlines so a requirement whose text wraps
|
|
82
|
-
* across lines — or whose `SHALL`/`MUST` lands on a later line — is read in
|
|
83
|
-
* full.
|
|
62
|
+
* `**metadata**:` lines are skipped only when other body text remains, so a
|
|
63
|
+
* requirement written entirely as `**Constraint**: The system MUST ...` keeps
|
|
64
|
+
* that line as its body. Lines are joined with newlines so text that wraps — or
|
|
65
|
+
* whose `SHALL`/`MUST` lands on a later line — is read in full.
|
|
84
66
|
*/
|
|
85
67
|
export declare function extractRequirementBody(bodyLines: string[]): string;
|
|
86
68
|
/**
|
|
87
|
-
* Parser/display fallback for a requirement block with no body text
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* a keyword that appears only in the header still receives the body-keyword
|
|
92
|
-
* hint.
|
|
69
|
+
* Parser/display fallback for a requirement block with no body text, so a bare
|
|
70
|
+
* `### The system SHALL ...` header stays readable on the spec path. Validator
|
|
71
|
+
* body-keyword checks call `extractRequirementBody` directly instead, so a
|
|
72
|
+
* keyword that appears only in the header still gets the body-keyword hint.
|
|
93
73
|
*/
|
|
94
74
|
export declare function extractRequirementText(headerTitle: string, bodyLines: string[]): string;
|
|
95
|
-
/**
|
|
96
|
-
* Count the real scenarios in a requirement block: `#### ` headers on non-fenced
|
|
97
|
-
* lines. A `#### Scenario:` that lives inside a fenced example is not a real
|
|
98
|
-
* scenario and is not counted.
|
|
99
|
-
*/
|
|
75
|
+
/** Count real scenarios: a `#### Scenario:` inside a fenced example is not one. */
|
|
100
76
|
export declare function countScenarios(bodyLines: string[]): number;
|
|
101
77
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* Duplicates are kept — `findMissingScenarios` counts multiplicity.
|
|
78
|
+
* Scenario names in document order. Duplicates are kept — `findMissingScenarios`
|
|
79
|
+
* counts multiplicity.
|
|
105
80
|
*/
|
|
106
81
|
export declare function scenarioNamesOf(requirementRaw: string): string[];
|
|
107
82
|
/**
|
|
108
83
|
* Scenarios present in the current requirement that an incoming MODIFIED block
|
|
109
84
|
* would drop. A MODIFIED replaces the whole requirement, so anything it omits
|
|
110
|
-
* is deleted
|
|
111
|
-
*
|
|
85
|
+
* is deleted. Shared by `specs-apply` (archive) and the validator so validate
|
|
86
|
+
* reports exactly what archive refuses.
|
|
112
87
|
*
|
|
113
88
|
* Multiplicity-aware: a name present N times in current and M times in incoming
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* Shared by `specs-apply` (archive) and the validator so the two cannot drift:
|
|
118
|
-
* validate must report exactly what archive refuses, no more and no less.
|
|
89
|
+
* leaves max(0, N - M) missing. Set membership would treat N > M as fully
|
|
90
|
+
* covered and let a duplicate be dropped silently.
|
|
119
91
|
*/
|
|
120
92
|
export declare function findMissingScenarios(currentRaw: string, incomingRaw: string): string[];
|
|
93
|
+
/**
|
|
94
|
+
* A requirement block with the named scenarios cut out, header and body. Takes
|
|
95
|
+
* declared removals out of the "current" side before comparing: a scenario
|
|
96
|
+
* under `## REMOVED Scenarios` is going on purpose, so its bullets are not a
|
|
97
|
+
* loss to warn about.
|
|
98
|
+
*
|
|
99
|
+
* A scenario runs from its `#### Scenario:` header to the next header of any
|
|
100
|
+
* level — the boundary every other scenario reader here uses.
|
|
101
|
+
*/
|
|
102
|
+
export declare function withoutScenarios(requirementRaw: string, names: readonly string[]): string;
|
|
103
|
+
/**
|
|
104
|
+
* Bullet lines the current requirement has that an incoming MODIFIED drops —
|
|
105
|
+
* the quieter half of the scenario-name check above: a block that restates every
|
|
106
|
+
* scenario *name* correctly but carries older wording inside them.
|
|
107
|
+
*
|
|
108
|
+
* Bullets and nothing else, on purpose. WHEN/THEN/AND bullets are the grammar's
|
|
109
|
+
* atomic units and each lives on one line, so a dropped bullet is a real loss.
|
|
110
|
+
* Prose bodies are not compared: re-flowing a paragraph changes every line
|
|
111
|
+
* without changing a word.
|
|
112
|
+
*
|
|
113
|
+
* Multiplicity-aware for the same reason as `findMissingScenarios`.
|
|
114
|
+
*/
|
|
115
|
+
export declare function findDroppedBullets(currentRaw: string, incomingRaw: string): string[];
|
|
121
116
|
export interface ScenarioAnalysis {
|
|
122
117
|
scenarios: Array<{
|
|
123
118
|
title: string;
|
|
@@ -133,10 +128,9 @@ export interface ScenarioAnalysis {
|
|
|
133
128
|
}>;
|
|
134
129
|
}
|
|
135
130
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* scenarios at all. Fence-aware like the other readers.
|
|
131
|
+
* Which `####` headers are real scenarios, whether each scenario body contains
|
|
132
|
+
* the uppercase WHEN and THEN keywords, and which level-4 headers are not
|
|
133
|
+
* scenarios at all.
|
|
140
134
|
*/
|
|
141
135
|
export declare function analyzeScenarios(lines: string[]): ScenarioAnalysis;
|
|
142
136
|
//# sourceMappingURL=requirement-text.d.ts.map
|