@seanmars/tospec 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +243 -0
- package/README.md +10 -6
- package/assets/dashboard/lib/derive.js +11 -5
- package/assets/dashboard/lib/store.js +4 -2
- package/assets/dashboard/views/change.js +5 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +42 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +213 -100
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dashboard.d.ts +9 -0
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +77 -21
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/decision.d.ts +38 -1
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +303 -27
- package/dist/commands/decision.js.map +1 -1
- package/dist/commands/metrics.d.ts +3 -4
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +3 -5
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/shared-output.d.ts +24 -0
- package/dist/commands/shared-output.d.ts.map +1 -1
- package/dist/commands/shared-output.js +21 -2
- package/dist/commands/shared-output.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +12 -9
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/validate.d.ts +19 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +243 -64
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/workflow/instructions.d.ts +7 -1
- package/dist/commands/workflow/instructions.d.ts.map +1 -1
- package/dist/commands/workflow/instructions.js +299 -81
- package/dist/commands/workflow/instructions.js.map +1 -1
- package/dist/commands/workflow/new-change.d.ts.map +1 -1
- package/dist/commands/workflow/new-change.js +26 -17
- package/dist/commands/workflow/new-change.js.map +1 -1
- package/dist/commands/workflow/prompt-escape.d.ts +25 -0
- package/dist/commands/workflow/prompt-escape.d.ts.map +1 -0
- package/dist/commands/workflow/prompt-escape.js +62 -0
- package/dist/commands/workflow/prompt-escape.js.map +1 -0
- package/dist/commands/workflow/schemas.d.ts.map +1 -1
- package/dist/commands/workflow/schemas.js +34 -16
- package/dist/commands/workflow/schemas.js.map +1 -1
- package/dist/commands/workflow/shared.d.ts +46 -10
- package/dist/commands/workflow/shared.d.ts.map +1 -1
- package/dist/commands/workflow/shared.js +66 -30
- package/dist/commands/workflow/shared.js.map +1 -1
- package/dist/commands/workflow/status.d.ts +5 -2
- package/dist/commands/workflow/status.d.ts.map +1 -1
- package/dist/commands/workflow/status.js +62 -28
- package/dist/commands/workflow/status.js.map +1 -1
- package/dist/core/archive.d.ts +38 -0
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +492 -75
- package/dist/core/archive.js.map +1 -1
- package/dist/core/artifact-graph/index.d.ts +2 -2
- package/dist/core/artifact-graph/index.d.ts.map +1 -1
- package/dist/core/artifact-graph/index.js +2 -2
- package/dist/core/artifact-graph/index.js.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.d.ts +8 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +58 -36
- package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
- package/dist/core/artifact-graph/resolver.d.ts +39 -12
- package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
- package/dist/core/artifact-graph/resolver.js +82 -36
- package/dist/core/artifact-graph/resolver.js.map +1 -1
- package/dist/core/artifact-graph/schema.d.ts +24 -0
- package/dist/core/artifact-graph/schema.d.ts.map +1 -1
- package/dist/core/artifact-graph/schema.js +32 -1
- package/dist/core/artifact-graph/schema.js.map +1 -1
- package/dist/core/artifact-graph/stub-detection.d.ts +10 -2
- package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -1
- package/dist/core/artifact-graph/stub-detection.js +18 -11
- package/dist/core/artifact-graph/stub-detection.js.map +1 -1
- package/dist/core/artifact-graph/types.d.ts +2 -2
- package/dist/core/artifact-graph/types.d.ts.map +1 -1
- package/dist/core/artifact-graph/types.js +10 -1
- package/dist/core/artifact-graph/types.js.map +1 -1
- package/dist/core/change-metadata/schema.d.ts.map +1 -1
- package/dist/core/change-metadata/schema.js +18 -4
- package/dist/core/change-metadata/schema.js.map +1 -1
- package/dist/core/change-presenter.d.ts.map +1 -1
- package/dist/core/change-presenter.js +13 -8
- package/dist/core/change-presenter.js.map +1 -1
- package/dist/core/change-status-policy.d.ts.map +1 -1
- package/dist/core/change-status-policy.js +3 -1
- package/dist/core/change-status-policy.js.map +1 -1
- package/dist/core/codex-metrics.d.ts +1 -1
- package/dist/core/codex-metrics.js +1 -1
- package/dist/core/config-schema.d.ts +8 -0
- package/dist/core/config-schema.d.ts.map +1 -1
- package/dist/core/config-schema.js +10 -0
- package/dist/core/config-schema.js.map +1 -1
- package/dist/core/dashboard-activity.d.ts +4 -4
- package/dist/core/dashboard-activity.js +4 -4
- package/dist/core/dashboard-data.d.ts +11 -5
- package/dist/core/dashboard-data.d.ts.map +1 -1
- package/dist/core/dashboard-data.js +54 -28
- package/dist/core/dashboard-data.js.map +1 -1
- package/dist/core/dashboard-hub.d.ts +3 -3
- package/dist/core/dashboard-hub.d.ts.map +1 -1
- package/dist/core/dashboard-hub.js +16 -4
- package/dist/core/dashboard-hub.js.map +1 -1
- package/dist/core/dashboard-routes.d.ts +2 -1
- package/dist/core/dashboard-routes.d.ts.map +1 -1
- package/dist/core/dashboard-routes.js +102 -33
- package/dist/core/dashboard-routes.js.map +1 -1
- package/dist/core/global-config.d.ts +71 -2
- package/dist/core/global-config.d.ts.map +1 -1
- package/dist/core/global-config.js +149 -4
- package/dist/core/global-config.js.map +1 -1
- package/dist/core/id.d.ts +9 -0
- package/dist/core/id.d.ts.map +1 -1
- package/dist/core/id.js +37 -0
- package/dist/core/id.js.map +1 -1
- package/dist/core/init.d.ts +9 -2
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +116 -33
- package/dist/core/init.js.map +1 -1
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +69 -45
- package/dist/core/list.js.map +1 -1
- package/dist/core/local-server.d.ts +9 -2
- package/dist/core/local-server.d.ts.map +1 -1
- package/dist/core/local-server.js +24 -4
- package/dist/core/local-server.js.map +1 -1
- package/dist/core/markdown-render.d.ts.map +1 -1
- package/dist/core/markdown-render.js +7 -2
- package/dist/core/markdown-render.js.map +1 -1
- package/dist/core/migrate.d.ts +24 -2
- package/dist/core/migrate.d.ts.map +1 -1
- package/dist/core/migrate.js +335 -59
- package/dist/core/migrate.js.map +1 -1
- package/dist/core/parsers/change-parser.d.ts +20 -1
- package/dist/core/parsers/change-parser.d.ts.map +1 -1
- package/dist/core/parsers/change-parser.js +76 -73
- package/dist/core/parsers/change-parser.js.map +1 -1
- package/dist/core/parsers/markdown-parser.d.ts +24 -0
- package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
- package/dist/core/parsers/markdown-parser.js +65 -10
- package/dist/core/parsers/markdown-parser.js.map +1 -1
- package/dist/core/parsers/requirement-blocks.d.ts +127 -6
- package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
- package/dist/core/parsers/requirement-blocks.js +349 -56
- package/dist/core/parsers/requirement-blocks.js.map +1 -1
- package/dist/core/parsers/requirement-text.d.ts +25 -1
- package/dist/core/parsers/requirement-text.d.ts.map +1 -1
- package/dist/core/parsers/requirement-text.js +62 -6
- 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 +36 -24
- package/dist/core/parsers/spec-structure.js.map +1 -1
- package/dist/core/project-config.d.ts +9 -2
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +30 -7
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/project-layout.d.ts +26 -0
- package/dist/core/project-layout.d.ts.map +1 -1
- package/dist/core/project-layout.js +51 -1
- package/dist/core/project-layout.js.map +1 -1
- package/dist/core/schema-names.d.ts +17 -0
- package/dist/core/schema-names.d.ts.map +1 -1
- package/dist/core/schema-names.js +24 -0
- package/dist/core/schema-names.js.map +1 -1
- package/dist/core/shared/index.d.ts +1 -1
- package/dist/core/shared/index.d.ts.map +1 -1
- package/dist/core/shared/index.js +1 -1
- package/dist/core/shared/index.js.map +1 -1
- package/dist/core/shared/rules-generation.d.ts +12 -0
- package/dist/core/shared/rules-generation.d.ts.map +1 -1
- package/dist/core/shared/rules-generation.js +26 -2
- package/dist/core/shared/rules-generation.js.map +1 -1
- package/dist/core/shared/skill-generation.d.ts +7 -0
- package/dist/core/shared/skill-generation.d.ts.map +1 -1
- package/dist/core/shared/skill-generation.js +19 -0
- package/dist/core/shared/skill-generation.js.map +1 -1
- package/dist/core/shared/tool-detection.d.ts +10 -1
- package/dist/core/shared/tool-detection.d.ts.map +1 -1
- package/dist/core/shared/tool-detection.js +37 -6
- package/dist/core/shared/tool-detection.js.map +1 -1
- package/dist/core/spec-presenter.d.ts.map +1 -1
- package/dist/core/spec-presenter.js +23 -1
- package/dist/core/spec-presenter.js.map +1 -1
- package/dist/core/specs-apply.d.ts +98 -1
- package/dist/core/specs-apply.d.ts.map +1 -1
- package/dist/core/specs-apply.js +426 -63
- package/dist/core/specs-apply.js.map +1 -1
- package/dist/core/templates/fragments/change-diff.d.ts +37 -0
- package/dist/core/templates/fragments/change-diff.d.ts.map +1 -0
- package/dist/core/templates/fragments/change-diff.js +37 -0
- package/dist/core/templates/fragments/change-diff.js.map +1 -0
- package/dist/core/templates/fragments/sync-fail.d.ts +8 -0
- package/dist/core/templates/fragments/sync-fail.d.ts.map +1 -0
- package/dist/core/templates/fragments/sync-fail.js +8 -0
- package/dist/core/templates/fragments/sync-fail.js.map +1 -0
- package/dist/core/templates/fragments/validate.d.ts +14 -1
- package/dist/core/templates/fragments/validate.d.ts.map +1 -1
- package/dist/core/templates/fragments/validate.js +14 -1
- package/dist/core/templates/fragments/validate.js.map +1 -1
- package/dist/core/templates/fragments/verify.d.ts +2 -2
- package/dist/core/templates/fragments/verify.d.ts.map +1 -1
- package/dist/core/templates/fragments/verify.js +8 -5
- package/dist/core/templates/fragments/verify.js.map +1 -1
- package/dist/core/templates/workflows/apply.d.ts +1 -1
- package/dist/core/templates/workflows/apply.d.ts.map +1 -1
- package/dist/core/templates/workflows/apply.js +29 -10
- package/dist/core/templates/workflows/apply.js.map +1 -1
- package/dist/core/templates/workflows/archive.d.ts.map +1 -1
- package/dist/core/templates/workflows/archive.js +27 -9
- package/dist/core/templates/workflows/archive.js.map +1 -1
- package/dist/core/templates/workflows/decision.d.ts.map +1 -1
- package/dist/core/templates/workflows/decision.js +10 -4
- package/dist/core/templates/workflows/decision.js.map +1 -1
- package/dist/core/templates/workflows/explore.d.ts +2 -2
- package/dist/core/templates/workflows/explore.d.ts.map +1 -1
- package/dist/core/templates/workflows/explore.js +7 -3
- package/dist/core/templates/workflows/explore.js.map +1 -1
- package/dist/core/templates/workflows/grill.d.ts +2 -2
- package/dist/core/templates/workflows/grill.d.ts.map +1 -1
- package/dist/core/templates/workflows/grill.js +5 -4
- package/dist/core/templates/workflows/grill.js.map +1 -1
- package/dist/core/templates/workflows/issue.d.ts.map +1 -1
- package/dist/core/templates/workflows/issue.js +9 -3
- package/dist/core/templates/workflows/issue.js.map +1 -1
- package/dist/core/templates/workflows/propose.d.ts.map +1 -1
- package/dist/core/templates/workflows/propose.js +4 -1
- package/dist/core/templates/workflows/propose.js.map +1 -1
- package/dist/core/templates/workflows/sync.d.ts.map +1 -1
- package/dist/core/templates/workflows/sync.js +25 -11
- package/dist/core/templates/workflows/sync.js.map +1 -1
- package/dist/core/templates/workflows/update.d.ts.map +1 -1
- package/dist/core/templates/workflows/update.js +17 -10
- package/dist/core/templates/workflows/update.js.map +1 -1
- package/dist/core/update.d.ts +5 -0
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +66 -29
- package/dist/core/update.js.map +1 -1
- package/dist/core/validation/constants.d.ts +7 -1
- package/dist/core/validation/constants.d.ts.map +1 -1
- package/dist/core/validation/constants.js +16 -2
- package/dist/core/validation/constants.js.map +1 -1
- package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
- package/dist/core/validation/purpose-placeholder.js +35 -11
- package/dist/core/validation/purpose-placeholder.js.map +1 -1
- package/dist/core/validation/section-validator.d.ts +7 -0
- package/dist/core/validation/section-validator.d.ts.map +1 -1
- package/dist/core/validation/section-validator.js +22 -2
- package/dist/core/validation/section-validator.js.map +1 -1
- package/dist/core/validation/sister-changes.d.ts +93 -0
- package/dist/core/validation/sister-changes.d.ts.map +1 -0
- package/dist/core/validation/sister-changes.js +180 -0
- package/dist/core/validation/sister-changes.js.map +1 -0
- package/dist/core/validation/task-markers.d.ts +9 -0
- package/dist/core/validation/task-markers.d.ts.map +1 -0
- package/dist/core/validation/task-markers.js +71 -0
- package/dist/core/validation/task-markers.js.map +1 -0
- package/dist/core/validation/types.d.ts +58 -0
- package/dist/core/validation/types.d.ts.map +1 -1
- package/dist/core/validation/types.js +22 -0
- package/dist/core/validation/types.js.map +1 -1
- package/dist/core/validation/validator.d.ts +79 -2
- package/dist/core/validation/validator.d.ts.map +1 -1
- package/dist/core/validation/validator.js +565 -84
- package/dist/core/validation/validator.js.map +1 -1
- package/dist/utils/change-metadata.d.ts +62 -5
- package/dist/utils/change-metadata.d.ts.map +1 -1
- package/dist/utils/change-metadata.js +193 -31
- package/dist/utils/change-metadata.js.map +1 -1
- package/dist/utils/change-utils.d.ts +21 -0
- package/dist/utils/change-utils.d.ts.map +1 -1
- package/dist/utils/change-utils.js +168 -53
- package/dist/utils/change-utils.js.map +1 -1
- package/dist/utils/command-line.d.ts +11 -0
- package/dist/utils/command-line.d.ts.map +1 -0
- package/dist/utils/command-line.js +43 -0
- package/dist/utils/command-line.js.map +1 -0
- package/dist/utils/display-width.d.ts +10 -0
- package/dist/utils/display-width.d.ts.map +1 -0
- package/dist/utils/display-width.js +15 -0
- package/dist/utils/display-width.js.map +1 -0
- package/dist/utils/file-system.d.ts +16 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +49 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +11 -5
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/interactive.d.ts.map +1 -1
- package/dist/utils/interactive.js +3 -1
- package/dist/utils/interactive.js.map +1 -1
- package/dist/utils/item-discovery.d.ts +3 -2
- package/dist/utils/item-discovery.d.ts.map +1 -1
- package/dist/utils/item-discovery.js +34 -16
- package/dist/utils/item-discovery.js.map +1 -1
- package/dist/utils/link.d.ts +0 -1
- package/dist/utils/link.d.ts.map +1 -1
- package/dist/utils/link.js +0 -1
- package/dist/utils/link.js.map +1 -1
- package/dist/utils/match.d.ts.map +1 -1
- package/dist/utils/match.js +10 -1
- package/dist/utils/match.js.map +1 -1
- package/dist/utils/option-flags.d.ts +9 -0
- package/dist/utils/option-flags.d.ts.map +1 -0
- package/dist/utils/option-flags.js +12 -0
- package/dist/utils/option-flags.js.map +1 -0
- package/dist/utils/sentence.d.ts +9 -0
- package/dist/utils/sentence.d.ts.map +1 -0
- package/dist/utils/sentence.js +12 -0
- package/dist/utils/sentence.js.map +1 -0
- package/dist/utils/spec-files.d.ts +84 -1
- package/dist/utils/spec-files.d.ts.map +1 -1
- package/dist/utils/spec-files.js +192 -3
- package/dist/utils/spec-files.js.map +1 -1
- package/dist/utils/task-progress.d.ts.map +1 -1
- package/dist/utils/task-progress.js +32 -9
- package/dist/utils/task-progress.js.map +1 -1
- package/dist/utils/timestamp.d.ts +27 -0
- package/dist/utils/timestamp.d.ts.map +1 -1
- package/dist/utils/timestamp.js +37 -0
- package/dist/utils/timestamp.js.map +1 -1
- package/package.json +4 -1
- package/schemas/decision/templates/decision.md +2 -2
- package/schemas/issue/schema.yaml +12 -6
- package/schemas/issue/templates/task.md +1 -1
- package/schemas/sdd/schema.yaml +21 -10
- package/schemas/sdd/templates/proposal.md +1 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { buildCodeFenceMask, normalizeDocument } from './requirement-text.js';
|
|
1
|
+
import { LINE_TERMINATOR, buildCodeFenceMask, normalizeDocument, stripClosingHashes } from './requirement-text.js';
|
|
2
|
+
import { headingLevel } from './markdown-parser.js';
|
|
3
|
+
import { levenshtein } from '../../utils/match.js';
|
|
2
4
|
export function normalizeRequirementName(name) {
|
|
3
|
-
return name
|
|
5
|
+
return stripClosingHashes(name);
|
|
4
6
|
}
|
|
5
7
|
/**
|
|
6
8
|
* Case- and whitespace-insensitive fold, for typo detection only: two spellings
|
|
@@ -12,16 +14,61 @@ export function foldRequirementName(name) {
|
|
|
12
14
|
return normalizeRequirementName(name).toLowerCase().replace(/\s+/g, ' ');
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
|
-
* The
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* The first of `names` that folds onto `name`, else undefined. One helper so
|
|
18
|
+
* every duplicate and collision check applies the same rule: in-section checks
|
|
19
|
+
* that compared exactly let `Foo` + `foo` through while the cross-section ones
|
|
20
|
+
* refused them.
|
|
19
21
|
*/
|
|
20
|
-
export
|
|
22
|
+
export function findFoldedMatch(names, name) {
|
|
23
|
+
const folded = foldRequirementName(name);
|
|
24
|
+
for (const candidate of names) {
|
|
25
|
+
if (foldRequirementName(candidate) === folded)
|
|
26
|
+
return candidate;
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const REQUIREMENT_HEADER_LINE = /^###\s*Requirement:\s*(.[\s\S]*)$/i;
|
|
31
|
+
/**
|
|
32
|
+
* The name a `### Requirement:` header carries, as authored, or null when the
|
|
33
|
+
* line is not one. The one spelling of a requirement header, shared with the
|
|
34
|
+
* main-spec structure guard and the merge. `\s*` on purpose: `###Requirement:`
|
|
35
|
+
* is accepted here (see the no-space regressions in requirement-blocks.test.ts),
|
|
36
|
+
* so a guard using a stricter `\s+` let a duplicate slip past and the merge's
|
|
37
|
+
* Map collapsed it.
|
|
38
|
+
*
|
|
39
|
+
* The rest of the line is captured whole and cut at a line terminator in code.
|
|
40
|
+
* As `(.+)\s*$`, `\s` took U+2028/U+2029 where `.` stops, so a header holding
|
|
41
|
+
* one re-split its blank run every way: 80k blanks inside the name took 5 s,
|
|
42
|
+
* and blanks before it grew cubically. The cut keeps what `(.+)` captured, and
|
|
43
|
+
* anything but blanks after the terminator is still no match.
|
|
44
|
+
*/
|
|
45
|
+
export function matchRequirementHeader(line) {
|
|
46
|
+
const m = REQUIREMENT_HEADER_LINE.exec(line);
|
|
47
|
+
if (!m)
|
|
48
|
+
return null;
|
|
49
|
+
const name = m[1];
|
|
50
|
+
const end = name.search(LINE_TERMINATOR);
|
|
51
|
+
if (end === -1)
|
|
52
|
+
return name;
|
|
53
|
+
return name.slice(end).trim() === '' ? name.slice(0, end) : null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Whether a line ends the main spec's `## Requirements` section: a `#` or `##`
|
|
57
|
+
* heading, by `headingLevel`, the rule MarkdownParser ends that section by.
|
|
58
|
+
* Shared with the main-spec structure guard, so the requirements it checks are
|
|
59
|
+
* the ones the merge reads. Not fence-aware; the caller skips fenced lines.
|
|
60
|
+
*/
|
|
61
|
+
export function endsRequirementsSection(line) {
|
|
62
|
+
const level = headingLevel(line);
|
|
63
|
+
return level !== null && level <= 2;
|
|
64
|
+
}
|
|
21
65
|
export function extractRequirementsSection(content) {
|
|
22
66
|
const lines = normalizeDocument(content).split('\n');
|
|
23
67
|
const fenceMask = buildCodeFenceMask(lines);
|
|
24
|
-
|
|
68
|
+
// Keyed by `sectionHeaderKey`, the reading validate's `findSection` shares: a
|
|
69
|
+
// regex of its own missed `## Requirements ##`, so the merge would add a
|
|
70
|
+
// second Requirements section to a spec validate passes.
|
|
71
|
+
const reqHeaderIndex = lines.findIndex((l, i) => !fenceMask[i] && sectionHeaderKey(l) === 'requirements');
|
|
25
72
|
if (reqHeaderIndex === -1) {
|
|
26
73
|
// No Requirements section: hand back an empty one appended at the end.
|
|
27
74
|
// From the normalized text, not `content`: the parts are written back, and
|
|
@@ -36,10 +83,14 @@ export function extractRequirementsSection(content) {
|
|
|
36
83
|
after: '\n',
|
|
37
84
|
};
|
|
38
85
|
}
|
|
39
|
-
// The section ends at the next unfenced
|
|
86
|
+
// The section ends at the next unfenced `#` or `##` heading, where the spec
|
|
87
|
+
// parser ends it. Ending at `##` only read a `#` heading after the last
|
|
88
|
+
// requirement, and the text under it, as part of that block, so an ADDED
|
|
89
|
+
// requirement was appended under the `#` heading, where the parser no longer
|
|
90
|
+
// reads it as a requirement.
|
|
40
91
|
let endIndex = lines.length;
|
|
41
92
|
for (let i = reqHeaderIndex + 1; i < lines.length; i++) {
|
|
42
|
-
if (!fenceMask[i] &&
|
|
93
|
+
if (!fenceMask[i] && endsRequirementsSection(lines[i])) {
|
|
43
94
|
endIndex = i;
|
|
44
95
|
break;
|
|
45
96
|
}
|
|
@@ -48,8 +99,8 @@ export function extractRequirementsSection(content) {
|
|
|
48
99
|
const headerLine = lines[reqHeaderIndex];
|
|
49
100
|
const sectionBodyLines = lines.slice(reqHeaderIndex + 1, endIndex);
|
|
50
101
|
const sectionBodyMask = fenceMask.slice(reqHeaderIndex + 1, endIndex);
|
|
51
|
-
const isRequirementHeader = (cursor) => !sectionBodyMask[cursor] &&
|
|
52
|
-
const isTopLevelHeader = (cursor) => !sectionBodyMask[cursor] &&
|
|
102
|
+
const isRequirementHeader = (cursor) => !sectionBodyMask[cursor] && matchRequirementHeader(sectionBodyLines[cursor]) !== null;
|
|
103
|
+
const isTopLevelHeader = (cursor) => !sectionBodyMask[cursor] && endsRequirementsSection(sectionBodyLines[cursor]);
|
|
53
104
|
const blocks = [];
|
|
54
105
|
let cursor = 0;
|
|
55
106
|
const preambleLines = [];
|
|
@@ -63,8 +114,7 @@ export function extractRequirementsSection(content) {
|
|
|
63
114
|
cursor++;
|
|
64
115
|
continue;
|
|
65
116
|
}
|
|
66
|
-
const
|
|
67
|
-
const name = normalizeRequirementName(headerMatch[1]);
|
|
117
|
+
const name = normalizeRequirementName(matchRequirementHeader(headerLineCandidate));
|
|
68
118
|
const startLine = reqHeaderIndex + 1 + cursor + 1;
|
|
69
119
|
cursor++;
|
|
70
120
|
const bodyLines = [headerLineCandidate];
|
|
@@ -85,6 +135,22 @@ export function extractRequirementsSection(content) {
|
|
|
85
135
|
after: after.startsWith('\n') ? after : '\n' + after,
|
|
86
136
|
};
|
|
87
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Guidance for a REMOVED Scenarios entry that names a requirement this change
|
|
140
|
+
* renames away. The merge applies RENAMED first and keys declarations by the
|
|
141
|
+
* MODIFIED block's header, so only the post-rename name matches. Telling the
|
|
142
|
+
* author to "check both names against the spec" sent them to the one file that
|
|
143
|
+
* shows the old name, which is the name that fails. Undefined when the entry
|
|
144
|
+
* does not name a RENAMED source, so callers keep their generic guidance.
|
|
145
|
+
* Shared so validate and archive word the same mistake the same way.
|
|
146
|
+
*/
|
|
147
|
+
export function postRenameRemovalHint(entry, renamed) {
|
|
148
|
+
const pair = renamed.find(({ from }) => normalizeRequirementName(from) === entry.requirement);
|
|
149
|
+
if (pair === undefined)
|
|
150
|
+
return undefined;
|
|
151
|
+
const to = normalizeRequirementName(pair.to);
|
|
152
|
+
return `This change renames "${entry.requirement}" to "${to}", and REMOVED Scenarios must use the post-rename name: - Requirement: \`${to}\``;
|
|
153
|
+
}
|
|
88
154
|
export function parseDeltaSpec(content) {
|
|
89
155
|
const lines = normalizeDocument(content).split('\n');
|
|
90
156
|
const fenceMask = buildCodeFenceMask(lines);
|
|
@@ -102,7 +168,7 @@ export function parseDeltaSpec(content) {
|
|
|
102
168
|
const removedBlocks = removedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
|
|
103
169
|
const renamedBlocks = renamedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
|
|
104
170
|
const renamedResults = renamedLookup.bodies.map(parseRenamedPairs);
|
|
105
|
-
const
|
|
171
|
+
const renamedEntries = renamedResults.flatMap((r) => r.pairs);
|
|
106
172
|
const renamedIssues = renamedResults.flatMap((r) => r.issues);
|
|
107
173
|
return {
|
|
108
174
|
added,
|
|
@@ -111,10 +177,14 @@ export function parseDeltaSpec(content) {
|
|
|
111
177
|
removedEntries,
|
|
112
178
|
removedBlocks,
|
|
113
179
|
renamedBlocks,
|
|
114
|
-
renamed:
|
|
180
|
+
renamed: renamedEntries.map(({ from, to }) => ({ from, to })),
|
|
181
|
+
renamedEntries,
|
|
115
182
|
removedScenarios: removedScenariosLookup.bodies.flatMap(parseRemovedScenarioEntries),
|
|
116
183
|
renamedIssues,
|
|
117
184
|
duplicateSections: findDuplicateSections(sections),
|
|
185
|
+
orphanRequirements: findOrphanRequirements(lines, fenceMask),
|
|
186
|
+
unmergedSections: findUnmergedSections(sections),
|
|
187
|
+
misspelledSections: findMisspelledSections(sections),
|
|
118
188
|
sectionPresence: {
|
|
119
189
|
added: addedLookup.found,
|
|
120
190
|
modified: modifiedLookup.found,
|
|
@@ -124,15 +194,38 @@ export function parseDeltaSpec(content) {
|
|
|
124
194
|
},
|
|
125
195
|
};
|
|
126
196
|
}
|
|
197
|
+
/** Whether a document has any (unfenced) delta section header. */
|
|
198
|
+
export function hasDeltaSection(content) {
|
|
199
|
+
return Object.values(parseDeltaSpec(content).sectionPresence).some(Boolean);
|
|
200
|
+
}
|
|
201
|
+
const SECTION_HEADER_LINE = /^##\s+(.[\s\S]*)$/;
|
|
202
|
+
/**
|
|
203
|
+
* The title of a `## ` section header as authored, or null when the line is
|
|
204
|
+
* not one. `sectionHeaderKey` builds on it, so `extractDeltaPurpose` and migrate
|
|
205
|
+
* find the sections this parser finds.
|
|
206
|
+
*
|
|
207
|
+
* The rest of the line is captured whole and refused in code when it holds a
|
|
208
|
+
* line terminator. As `\s+(.+)$`, `\s` took U+2028/U+2029 where `.` stops, so a
|
|
209
|
+
* header holding one re-split its blank run every way: 80k blanks took 2.7 s.
|
|
210
|
+
* A title of blanks alone still matches on its last blank, as `(.+)` did, so
|
|
211
|
+
* `## ` stays a section.
|
|
212
|
+
*/
|
|
213
|
+
export function matchSectionHeader(line) {
|
|
214
|
+
const m = SECTION_HEADER_LINE.exec(line);
|
|
215
|
+
return m && !LINE_TERMINATOR.test(m[1]) ? m[1] : null;
|
|
216
|
+
}
|
|
127
217
|
function splitTopLevelSections(lines, fenceMask) {
|
|
128
218
|
const result = new Map();
|
|
129
219
|
const indices = [];
|
|
130
220
|
for (let i = 0; i < lines.length; i++) {
|
|
131
221
|
if (fenceMask[i])
|
|
132
222
|
continue; // a '## ...' inside a fenced example is not a section
|
|
133
|
-
const
|
|
134
|
-
if (
|
|
135
|
-
|
|
223
|
+
const title = matchSectionHeader(lines[i]);
|
|
224
|
+
if (title !== null) {
|
|
225
|
+
// CommonMark reads `## REMOVED Requirements ##` as `REMOVED Requirements`.
|
|
226
|
+
// Kept in the title, the closing run made it no delta section, and its
|
|
227
|
+
// removals and renames silently did not happen on archive.
|
|
228
|
+
indices.push({ title: stripClosingHashes(title), index: i });
|
|
136
229
|
}
|
|
137
230
|
}
|
|
138
231
|
for (let i = 0; i < indices.length; i++) {
|
|
@@ -173,7 +266,44 @@ const RENAMED_SECTION = 'RENAMED Requirements';
|
|
|
173
266
|
// MODIFIED that omits a scenario, so an obsolete one has no path out short of
|
|
174
267
|
// hand-editing the main spec.
|
|
175
268
|
const REMOVED_SCENARIOS_SECTION = 'REMOVED Scenarios';
|
|
176
|
-
const
|
|
269
|
+
const DELTA_SECTION_TITLES = [
|
|
270
|
+
ADDED_SECTION,
|
|
271
|
+
MODIFIED_SECTION,
|
|
272
|
+
REMOVED_SECTION,
|
|
273
|
+
RENAMED_SECTION,
|
|
274
|
+
REMOVED_SCENARIOS_SECTION,
|
|
275
|
+
];
|
|
276
|
+
const DELTA_SECTION_KEYS = new Set(DELTA_SECTION_TITLES.map((title) => title.toLowerCase()));
|
|
277
|
+
/**
|
|
278
|
+
* The key this parser files a `## ` header under (the same header match,
|
|
279
|
+
* closing `#` peel and case fold `splitTopLevelSections` applies), or null when
|
|
280
|
+
* the line is not one. Exported so a caller scanning lines on its own shares
|
|
281
|
+
* that reading rather than keeping a regex copy, which drifts: migrate's took
|
|
282
|
+
* only `## Purpose`, so a spec headed `## purpose` lost its Purpose to a stub.
|
|
283
|
+
* Not fence-aware; the caller skips fenced lines.
|
|
284
|
+
*/
|
|
285
|
+
export function sectionHeaderKey(line) {
|
|
286
|
+
const title = matchSectionHeader(line);
|
|
287
|
+
return title === null ? null : stripClosingHashes(title).toLowerCase();
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Whether a line is a header this parser reads as a delta section, keyed as
|
|
291
|
+
* `sectionHeaderKey` keys it. Migrate's own regex took only the upper-case,
|
|
292
|
+
* single-space spelling. Not fence-aware either.
|
|
293
|
+
*/
|
|
294
|
+
export function isDeltaSectionHeader(line) {
|
|
295
|
+
const key = sectionHeaderKey(line);
|
|
296
|
+
return key !== null && DELTA_SECTION_KEYS.has(key);
|
|
297
|
+
}
|
|
298
|
+
// A title at most this many edits from a delta section title (case-insensitive)
|
|
299
|
+
// counts as a misspelling of it. Every delta title is 17 or more characters, so
|
|
300
|
+
// a title this close repeats nearly all of one: `## REMOVED Requirement` is 1
|
|
301
|
+
// edit away, `## Add Requirements` 2, `## Modify Requirements` 3. An ordinary
|
|
302
|
+
// heading is far off: `## Notes`, `## Context` and `## Purpose` are 14 or more
|
|
303
|
+
// edits from every delta title. A keyword test (`removed` anywhere in the
|
|
304
|
+
// title) was rejected because it also flags a prose heading such as
|
|
305
|
+
// `## Removed endpoints`.
|
|
306
|
+
const MISSPELLED_SECTION_MAX_DISTANCE = 3;
|
|
177
307
|
/**
|
|
178
308
|
* Delta section titles that appear more than once, in document order.
|
|
179
309
|
*
|
|
@@ -196,6 +326,116 @@ function findDuplicateSections(sections) {
|
|
|
196
326
|
}
|
|
197
327
|
return duplicates;
|
|
198
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Fence-aware, so a `### Requirement:` shown inside a code example is not
|
|
331
|
+
* reported: the template itself carries such examples.
|
|
332
|
+
*/
|
|
333
|
+
function findOrphanRequirements(lines, fenceMask) {
|
|
334
|
+
const orphans = [];
|
|
335
|
+
let section = null;
|
|
336
|
+
for (let i = 0; i < lines.length; i++) {
|
|
337
|
+
if (fenceMask[i])
|
|
338
|
+
continue;
|
|
339
|
+
const sectionTitle = matchSectionHeader(lines[i]);
|
|
340
|
+
if (sectionTitle !== null) {
|
|
341
|
+
// Same peel as `splitTopLevelSections`, or a requirement under
|
|
342
|
+
// `## ADDED Requirements ##` is reported as sitting outside a section the
|
|
343
|
+
// parser does read.
|
|
344
|
+
section = stripClosingHashes(sectionTitle);
|
|
345
|
+
continue;
|
|
346
|
+
}
|
|
347
|
+
const header = matchRequirementHeader(lines[i]);
|
|
348
|
+
if (header !== null && (section === null || !DELTA_SECTION_KEYS.has(section.toLowerCase()))) {
|
|
349
|
+
orphans.push({ name: normalizeRequirementName(header), line: i + 1, section });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return orphans;
|
|
353
|
+
}
|
|
354
|
+
function findUnmergedSections(sections) {
|
|
355
|
+
const unmerged = [];
|
|
356
|
+
for (const [key, bodies] of sections) {
|
|
357
|
+
if (DELTA_SECTION_KEYS.has(key) || key === 'purpose')
|
|
358
|
+
continue;
|
|
359
|
+
for (const body of bodies) {
|
|
360
|
+
if (body.lines.some((line) => line.trim() !== '')) {
|
|
361
|
+
unmerged.push({ title: `## ${body.title}`, line: body.headerLine });
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
for (const desired of [ADDED_SECTION, MODIFIED_SECTION]) {
|
|
366
|
+
for (const body of getSections(sections, desired).bodies)
|
|
367
|
+
unmerged.push(...findStrayHeadingText(body));
|
|
368
|
+
}
|
|
369
|
+
return unmerged.sort((a, b) => a.line - b.line);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* The `#` headings in an ADDED or MODIFIED section with text under them that
|
|
373
|
+
* no requirement block holds. A block ends at such a heading, but the section
|
|
374
|
+
* runs on to the next `##`, so the text sat in a delta section yet in no block:
|
|
375
|
+
* the merge dropped it while a `## Notes` holding the same text was named.
|
|
376
|
+
* REMOVED and RENAMED are left out: their entries are read across the whole
|
|
377
|
+
* section, so text under a `#` there may still be applied.
|
|
378
|
+
*/
|
|
379
|
+
function findStrayHeadingText(body) {
|
|
380
|
+
const { lines, fenceMask } = body;
|
|
381
|
+
const isRequirementHeader = (i) => !fenceMask[i] && matchRequirementHeader(lines[i]) !== null;
|
|
382
|
+
const isTopLevelHeader = (i) => !fenceMask[i] && endsRequirementsSection(lines[i]);
|
|
383
|
+
const strays = [];
|
|
384
|
+
let i = 0;
|
|
385
|
+
while (i < lines.length) {
|
|
386
|
+
if (!isTopLevelHeader(i)) {
|
|
387
|
+
i++;
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
let end = i + 1;
|
|
391
|
+
while (end < lines.length && !isRequirementHeader(end) && !isTopLevelHeader(end))
|
|
392
|
+
end++;
|
|
393
|
+
if (lines.slice(i + 1, end).some((line) => line.trim() !== '')) {
|
|
394
|
+
strays.push({ title: lines[i].trim(), line: body.offset + i + 1 });
|
|
395
|
+
}
|
|
396
|
+
i = end;
|
|
397
|
+
}
|
|
398
|
+
return strays;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Skips a section that holds a `### Requirement:` header: the orphan scan
|
|
402
|
+
* already reports each one and asks for the header's spelling to be fixed, so a
|
|
403
|
+
* second finding would name the same mistake twice.
|
|
404
|
+
*/
|
|
405
|
+
function findMisspelledSections(sections) {
|
|
406
|
+
const misspelled = [];
|
|
407
|
+
for (const [key, bodies] of sections) {
|
|
408
|
+
if (DELTA_SECTION_KEYS.has(key))
|
|
409
|
+
continue;
|
|
410
|
+
const suggestion = nearestDeltaSectionTitle(key);
|
|
411
|
+
if (suggestion === undefined)
|
|
412
|
+
continue;
|
|
413
|
+
for (const body of bodies) {
|
|
414
|
+
const hasContent = body.lines.some((line) => line.trim() !== '');
|
|
415
|
+
const hasRequirementHeader = body.lines.some((line, i) => !body.fenceMask[i] && matchRequirementHeader(line) !== null);
|
|
416
|
+
if (hasContent && !hasRequirementHeader) {
|
|
417
|
+
misspelled.push({ title: `## ${body.title}`, line: body.headerLine, suggestion: `## ${suggestion}` });
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return misspelled.sort((a, b) => a.line - b.line);
|
|
422
|
+
}
|
|
423
|
+
function nearestDeltaSectionTitle(key) {
|
|
424
|
+
let best;
|
|
425
|
+
for (const title of DELTA_SECTION_TITLES) {
|
|
426
|
+
const target = title.toLowerCase();
|
|
427
|
+
// The length gap is a lower bound on the distance, so this skip loses
|
|
428
|
+
// nothing. It also keeps a very long heading from costing its length times
|
|
429
|
+
// the title's in `levenshtein`.
|
|
430
|
+
if (Math.abs(key.length - target.length) > MISSPELLED_SECTION_MAX_DISTANCE)
|
|
431
|
+
continue;
|
|
432
|
+
const distance = levenshtein(key, target);
|
|
433
|
+
if (distance <= MISSPELLED_SECTION_MAX_DISTANCE && (best === undefined || distance < best.distance)) {
|
|
434
|
+
best = { title, distance };
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return best?.title;
|
|
438
|
+
}
|
|
199
439
|
/**
|
|
200
440
|
* Every `### Requirement:` block in a document, whichever section it sits in (or
|
|
201
441
|
* none). For a caller rebuilding a whole file rather than applying a delta: a
|
|
@@ -215,8 +455,12 @@ function parseRequirementBlocksFromSection(sectionBody) {
|
|
|
215
455
|
const { lines, fenceMask } = sectionBody;
|
|
216
456
|
if (lines.length === 0)
|
|
217
457
|
return [];
|
|
218
|
-
const isRequirementHeader = (i) => !fenceMask[i] &&
|
|
219
|
-
|
|
458
|
+
const isRequirementHeader = (i) => !fenceMask[i] && matchRequirementHeader(lines[i]) !== null;
|
|
459
|
+
// A `#` heading ends a block too, as it ends the main spec's section: ending
|
|
460
|
+
// at `##` only copied a `# Note` under an ADDED block into the main spec,
|
|
461
|
+
// where a requirement after it sat outside `## Requirements`, so validate
|
|
462
|
+
// passed the change and archive then refused the rebuilt spec.
|
|
463
|
+
const isTopLevelHeader = (i) => !fenceMask[i] && endsRequirementsSection(lines[i]);
|
|
220
464
|
const blocks = [];
|
|
221
465
|
let i = 0;
|
|
222
466
|
while (i < lines.length) {
|
|
@@ -226,7 +470,7 @@ function parseRequirementBlocksFromSection(sectionBody) {
|
|
|
226
470
|
break;
|
|
227
471
|
const headerLine = lines[i];
|
|
228
472
|
const startLine = sectionBody.offset + i + 1;
|
|
229
|
-
const name = normalizeRequirementName(headerLine
|
|
473
|
+
const name = normalizeRequirementName(matchRequirementHeader(headerLine));
|
|
230
474
|
const buf = [headerLine];
|
|
231
475
|
i++;
|
|
232
476
|
while (i < lines.length && !isRequirementHeader(i) && !isTopLevelHeader(i)) {
|
|
@@ -241,37 +485,84 @@ function parseRequirementBlocksFromSection(sectionBody) {
|
|
|
241
485
|
// `[ \t]*(?:-[ \t]*)?` rather than `\s*-?\s*`: two adjacent `\s*` around an
|
|
242
486
|
// optional token backtrack quadratically on a line of nothing but blanks, and a
|
|
243
487
|
// 40k-space line took ~600 ms per regex. Horizontal whitespace only — a line
|
|
244
|
-
// never contains its own newline.
|
|
245
|
-
|
|
488
|
+
// never contains its own newline. Every CommonMark bullet marker counts: with
|
|
489
|
+
// `-` alone, a `* FROM:` / `* TO:` pair was skipped and the rename never ran.
|
|
490
|
+
const LINE_PREFIX = '^[ \\t]*(?:[-*+][ \\t]*)?';
|
|
246
491
|
/** `**Reason**:` / `- Reason:` style field line inside a REMOVED entry. */
|
|
247
492
|
const REMOVED_REASON_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Reason(\\*\\*)?\\s*:`, 'i');
|
|
248
493
|
const REMOVED_MIGRATION_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Migration(\\*\\*)?\\s*:`, 'i');
|
|
249
494
|
// The `### Requirement:` prefix is optional (the templates show a plain name),
|
|
250
495
|
// but an unanchored bullet match collides with prose bullets, so this is
|
|
251
496
|
// restricted to a top-level bullet:
|
|
252
|
-
// -
|
|
253
|
-
// `Migration:`, each of which became an entry failing its own checks.
|
|
254
|
-
//
|
|
255
|
-
//
|
|
256
|
-
//
|
|
497
|
+
// - `^[-*+]` (no leading whitespace) skips continuation bullets nested under
|
|
498
|
+
// `Migration:`, each of which became an entry failing its own checks. All
|
|
499
|
+
// three CommonMark markers: a `* Late Fees` entry was silently not removed.
|
|
500
|
+
// - `\s+` skips a `---` thematic break and keeps `**Reason**:` from reading
|
|
501
|
+
// as a bullet; THEMATIC_BREAK_REST skips the spaced `* * *` / `- - -` forms.
|
|
502
|
+
// - `\S` rejects a bare marker rather than recording an empty name.
|
|
257
503
|
// A top-level bullet that is neither a name nor Reason:/Migration: is still read
|
|
258
504
|
// as a name; disambiguating that needs a grammar change.
|
|
259
|
-
|
|
260
|
-
//
|
|
505
|
+
// Split into three anchored steps instead of one regex: as a single pattern,
|
|
506
|
+
// every backtrack of `\s+` rescanned the blank run in the lookahead, and a
|
|
507
|
+
// marker followed by 40k blanks took ~450 ms. Only the greedy `\s+` split can
|
|
508
|
+
// ever match (a shorter one leaves a blank where `\S` is needed), so testing it
|
|
509
|
+
// alone loses nothing.
|
|
510
|
+
const REMOVED_BULLET_HEAD = /^[-*+]\s+/;
|
|
511
|
+
const THEMATIC_BREAK_REST = /^[-*_\s]*$/;
|
|
512
|
+
const REMOVED_BULLET_NAME = /^`?(?:###\s*Requirement:\s*)?(\S[\s\S]*)$/;
|
|
513
|
+
function matchRemovedBullet(line) {
|
|
514
|
+
const head = REMOVED_BULLET_HEAD.exec(line);
|
|
515
|
+
if (!head)
|
|
516
|
+
return null;
|
|
517
|
+
const rest = line.slice(head[0].length);
|
|
518
|
+
if (THEMATIC_BREAK_REST.test(rest))
|
|
519
|
+
return null;
|
|
520
|
+
const m = REMOVED_BULLET_NAME.exec(rest);
|
|
521
|
+
return m ? trimNameTail(m[1]) : null;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* The name a `(\S.*?)`?\s*$` tail would have captured, done in code: the lazy
|
|
525
|
+
* capture retried `\s*$` at every position of a blank run, so one line of 40k
|
|
526
|
+
* blanks before a non-blank took ~600 ms. `trimEnd` strips exactly the `\s`
|
|
527
|
+
* set, and the backtick goes only when a character is left, as the lazy `\S`
|
|
528
|
+
* required. `.` refused a line terminator inside the name, so one there is
|
|
529
|
+
* still no match.
|
|
530
|
+
*/
|
|
531
|
+
function trimNameTail(captured) {
|
|
532
|
+
let name = captured.trimEnd();
|
|
533
|
+
if (name.length > 1 && name.endsWith('`'))
|
|
534
|
+
name = name.slice(0, -1);
|
|
535
|
+
return LINE_TERMINATOR.test(name) ? null : name;
|
|
536
|
+
}
|
|
537
|
+
function matchNameLine(line, regex) {
|
|
538
|
+
const m = regex.exec(line);
|
|
539
|
+
return m ? trimNameTail(m[1]) : null;
|
|
540
|
+
}
|
|
541
|
+
// Unlike the REMOVED bullet these stay permissive about leading whitespace:
|
|
261
542
|
// the FROM:/TO: keyword is itself the anchor.
|
|
262
|
-
|
|
263
|
-
|
|
543
|
+
// The rest of the line is captured whole and peeled by `trimNameTail`: the lazy
|
|
544
|
+
// `(.+?)`?\s*$` tail took 2-3 s on a line of 80k blanks. `.` rather than `\S`
|
|
545
|
+
// opens the capture because `.+?` did, so a line naming nothing still matches;
|
|
546
|
+
// `trimNameTail` returns '' where `.+?` kept one blank, and
|
|
547
|
+
// `normalizeRequirementName` trims that to the same ''.
|
|
548
|
+
const RENAMED_FROM_REGEX = new RegExp(`${LINE_PREFIX}FROM:\\s*\`?(?:###\\s*Requirement:\\s*)?(.[\\s\\S]*)$`);
|
|
549
|
+
const RENAMED_TO_REGEX = new RegExp(`${LINE_PREFIX}TO:\\s*\`?(?:###\\s*Requirement:\\s*)?(.[\\s\\S]*)$`);
|
|
264
550
|
// The bullet form is the documented grammar, but `### Requirement:` /
|
|
265
551
|
// `#### Scenario:` headers are accepted too: they are how the same names are
|
|
266
552
|
// spelled everywhere else in a delta, so authors reach for them, and a header
|
|
267
553
|
// that was silently skipped here left the MODIFIED block failing with no hint
|
|
268
554
|
// that this section was the reason.
|
|
269
|
-
// Same shape as LINE_PREFIX with a heading marker as the alternative token
|
|
270
|
-
|
|
555
|
+
// Same shape as LINE_PREFIX with a heading marker as the alternative token,
|
|
556
|
+
// including every bullet marker: with `-` alone, a `* Scenario:` declaration was
|
|
557
|
+
// skipped and the MODIFIED omitting that scenario failed the drop guard. A
|
|
558
|
+
// thematic break or `**Reason**:` cannot match, since the keyword must follow.
|
|
559
|
+
const HEADING_OR_BULLET_PREFIX = '^[ \\t]*(?:(?:[-*+]|#{1,6})[ \\t]*)?';
|
|
560
|
+
// The rest of the line is captured whole and its trailing backtick/blanks are
|
|
561
|
+
// peeled by `trimNameTail`, for the reason given there.
|
|
271
562
|
/** `- 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
|
|
563
|
+
const REMOVED_SCENARIO_REQUIREMENT_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Requirement(?:\\*\\*)?\\s*:\\s*\`?(\\S[\\s\\S]*)$`, 'i');
|
|
273
564
|
/** `- 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
|
|
565
|
+
const REMOVED_SCENARIO_NAME_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Scenario(?:\\*\\*)?\\s*:\\s*\`?(\\S[\\s\\S]*)$`, 'i');
|
|
275
566
|
/**
|
|
276
567
|
* An entry opens on its `Requirement:` line and is completed by the `Scenario:`
|
|
277
568
|
* line under it, so one requirement can drop several scenarios by repeating the
|
|
@@ -295,17 +586,19 @@ function parseRemovedScenarioEntries(sectionBody) {
|
|
|
295
586
|
continue;
|
|
296
587
|
}
|
|
297
588
|
// Tested before Scenario so adding a third field cannot reorder the match.
|
|
298
|
-
const
|
|
299
|
-
if (
|
|
300
|
-
requirement = { name: normalizeRequirementName(
|
|
589
|
+
const requirementName = matchNameLine(line, REMOVED_SCENARIO_REQUIREMENT_LINE);
|
|
590
|
+
if (requirementName !== null) {
|
|
591
|
+
requirement = { name: normalizeRequirementName(requirementName), line: offset + i + 1 };
|
|
301
592
|
current = null;
|
|
302
593
|
continue;
|
|
303
594
|
}
|
|
304
|
-
const
|
|
305
|
-
if (
|
|
595
|
+
const scenarioName = matchNameLine(line, REMOVED_SCENARIO_NAME_LINE);
|
|
596
|
+
if (scenarioName !== null && requirement) {
|
|
306
597
|
current = {
|
|
307
598
|
requirement: requirement.name,
|
|
308
|
-
|
|
599
|
+
// Same peel as `scenarioNameFrom`, or the heading form's
|
|
600
|
+
// `#### Scenario: Works ####` named a scenario no spec header carries.
|
|
601
|
+
scenario: stripClosingHashes(scenarioName),
|
|
309
602
|
startLine: requirement.line,
|
|
310
603
|
hasReason: false,
|
|
311
604
|
};
|
|
@@ -340,13 +633,13 @@ function parseRemovedEntries(sectionBody) {
|
|
|
340
633
|
current.hasMigration = true;
|
|
341
634
|
continue;
|
|
342
635
|
}
|
|
343
|
-
const header = line
|
|
344
|
-
if (header)
|
|
636
|
+
const header = matchRequirementHeader(line);
|
|
637
|
+
if (header !== null)
|
|
345
638
|
inHeaderForm = true;
|
|
346
|
-
const
|
|
347
|
-
if (
|
|
639
|
+
const name = header ?? (inHeaderForm ? null : matchRemovedBullet(line));
|
|
640
|
+
if (name !== null) {
|
|
348
641
|
current = {
|
|
349
|
-
name: normalizeRequirementName(
|
|
642
|
+
name: normalizeRequirementName(name),
|
|
350
643
|
startLine: offset + i + 1,
|
|
351
644
|
hasReason: false,
|
|
352
645
|
hasMigration: false,
|
|
@@ -368,19 +661,19 @@ function parseRenamedPairs(sectionBody) {
|
|
|
368
661
|
if (fenceMask[i])
|
|
369
662
|
continue;
|
|
370
663
|
const line = lines[i];
|
|
371
|
-
const
|
|
372
|
-
const
|
|
373
|
-
if (
|
|
664
|
+
const fromName = matchNameLine(line, RENAMED_FROM_REGEX);
|
|
665
|
+
const toName = matchNameLine(line, RENAMED_TO_REGEX);
|
|
666
|
+
if (fromName !== null) {
|
|
374
667
|
if (current) {
|
|
375
668
|
// Two FROMs in a row: the first one has no TO.
|
|
376
669
|
issues.push({ kind: 'from-without-to', name: current.from, line: current.line });
|
|
377
670
|
}
|
|
378
|
-
current = { from: normalizeRequirementName(
|
|
671
|
+
current = { from: normalizeRequirementName(fromName), line: offset + i + 1 };
|
|
379
672
|
}
|
|
380
|
-
else if (
|
|
381
|
-
const to = normalizeRequirementName(
|
|
673
|
+
else if (toName !== null) {
|
|
674
|
+
const to = normalizeRequirementName(toName);
|
|
382
675
|
if (current) {
|
|
383
|
-
pairs.push({ from: current.from, to });
|
|
676
|
+
pairs.push({ from: current.from, to, fromLine: current.line });
|
|
384
677
|
current = null;
|
|
385
678
|
}
|
|
386
679
|
else {
|
|
@@ -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;AAsB9E,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;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;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,iCAAiC,CAAC;AAE1E,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,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,uEAAuE;QACvE,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,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,sDAAsD;IACtD,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,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,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,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,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;AA0ED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,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,aAAa,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,sBAAsB,GAAG,WAAW,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAChF,8EAA8E;IAC9E,oCAAoC;IACpC,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,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,aAAa;QACb,OAAO,EAAE,YAAY;QACrB,gBAAgB,EAAE,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC;QACpF,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;YAC5B,gBAAgB,EAAE,sBAAsB,CAAC,KAAK;SAC/C;KACF,CAAC;AACJ,CAAC;AA2BD,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,sDAAsD;QAClF,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,wEAAwE;QACxE,gDAAgD;QAChD,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,4EAA4E;AAC5E,6EAA6E;AAC7E,UAAU;AACV,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAC3C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,8BAA8B;AAC9B,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAEtD,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CACrD,CAAC,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC,GAAG,CAChG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAC/B,CACF,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,QAAsB;IACnD,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC3C,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;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,iCAAiC,CAAC;QACvC,KAAK,EAAE,EAAE;QACT,KAAK;QACL,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;QACpC,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,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,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,mEAAmE;AACnE,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,kCAAkC;AAClC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,+BAA+B,EAAE,GAAG,CAAC,CAAC;AAC3F,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,kCAAkC,EAAE,GAAG,CAAC,CAAC;AAEjG,+EAA+E;AAC/E,yEAAyE;AACzE,oCAAoC;AACpC,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,kBAAkB;AAClB,mEAAmE;AACnE,iFAAiF;AACjF,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AAE9E,8EAA8E;AAC9E,8CAA8C;AAC9C,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,uDAAuD,CAAC,CAAC;AAC7G,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,qDAAqD,CAAC,CAAC;AAEzG,sEAAsE;AACtE,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,oCAAoC;AACpC,4EAA4E;AAC5E,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AACpE,uGAAuG;AACvG,MAAM,iCAAiC,GAAG,IAAI,MAAM,CAClD,GAAG,wBAAwB,+DAA+D,EAC1F,GAAG,CACJ,CAAC;AACF,8FAA8F;AAC9F,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAC3C,GAAG,wBAAwB,4DAA4D,EACvF,GAAG,CACJ,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,2BAA2B,CAAC,WAAwB;IAC3D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACjD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,WAAW,GAA0C,IAAI,CAAC;IAC9D,IAAI,OAAO,GAAgC,IAAI,CAAC;IAEhD,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,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACtC,SAAS;QACX,CAAC;QACD,2EAA2E;QAC3E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACvE,IAAI,gBAAgB,EAAE,CAAC;YACrB,WAAW,GAAG,EAAE,IAAI,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5F,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC7D,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;YACjC,OAAO,GAAG;gBACR,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACjC,SAAS,EAAE,WAAW,CAAC,IAAI;gBAC3B,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,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,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,+DAA+D;IAC/D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,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,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,OAAO;gBAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YACzC,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpD,IAAI,MAAM;YAAE,YAAY,GAAG,IAAI,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7E,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;IACH,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,kBAAkB,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,+CAA+C;gBAC/C,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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"}
|