@primmel/primmel 1.3.2 → 1.4.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/dist/index.d.ts +40 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -1
- package/dist/index.js.map +1 -1
- package/dist/src/check-allowlist.d.ts +56 -0
- package/dist/src/check-allowlist.d.ts.map +1 -0
- package/dist/src/check-allowlist.js +307 -0
- package/dist/src/check-allowlist.js.map +1 -0
- package/dist/src/check-rules.d.ts +17 -0
- package/dist/src/check-rules.d.ts.map +1 -0
- package/dist/src/check-rules.js +351 -0
- package/dist/src/check-rules.js.map +1 -0
- package/dist/src/check.d.ts +115 -0
- package/dist/src/check.d.ts.map +1 -0
- package/dist/src/check.js +4164 -0
- package/dist/src/check.js.map +1 -0
- package/dist/src/export/rdf-competency-questions.d.ts +11 -0
- package/dist/src/export/rdf-competency-questions.d.ts.map +1 -0
- package/dist/src/export/rdf-competency-questions.js +99 -0
- package/dist/src/export/rdf-competency-questions.js.map +1 -0
- package/dist/src/export/rdf-shapes.d.ts +3 -0
- package/dist/src/export/rdf-shapes.d.ts.map +1 -0
- package/dist/src/export/rdf-shapes.js +225 -0
- package/dist/src/export/rdf-shapes.js.map +1 -0
- package/dist/src/export/rdf-vocabulary.d.ts +125 -0
- package/dist/src/export/rdf-vocabulary.d.ts.map +1 -0
- package/dist/src/export/rdf-vocabulary.js +230 -0
- package/dist/src/export/rdf-vocabulary.js.map +1 -0
- package/dist/src/export/rdf.d.ts +92 -0
- package/dist/src/export/rdf.d.ts.map +1 -0
- package/dist/src/export/rdf.js +707 -0
- package/dist/src/export/rdf.js.map +1 -0
- package/dist/src/export/reqif.d.ts +81 -0
- package/dist/src/export/reqif.d.ts.map +1 -0
- package/dist/src/export/reqif.js +703 -0
- package/dist/src/export/reqif.js.map +1 -0
- package/dist/src/instance-resolution.d.ts +68 -0
- package/dist/src/instance-resolution.d.ts.map +1 -0
- package/dist/src/instance-resolution.js +239 -0
- package/dist/src/instance-resolution.js.map +1 -0
- package/dist/src/mapping-coverage.d.ts +220 -0
- package/dist/src/mapping-coverage.d.ts.map +1 -0
- package/dist/src/mapping-coverage.js +528 -0
- package/dist/src/mapping-coverage.js.map +1 -0
- package/dist/src/model-diff.d.ts +198 -0
- package/dist/src/model-diff.d.ts.map +1 -0
- package/dist/src/model-diff.js +914 -0
- package/dist/src/model-diff.js.map +1 -0
- package/dist/src/operational-state.d.ts +112 -0
- package/dist/src/operational-state.d.ts.map +1 -0
- package/dist/src/operational-state.js +162 -0
- package/dist/src/operational-state.js.map +1 -0
- package/dist/src/package-diff.d.ts +36 -0
- package/dist/src/package-diff.d.ts.map +1 -0
- package/dist/src/package-diff.js +104 -0
- package/dist/src/package-diff.js.map +1 -0
- package/dist/src/ser-des/config/acceptance.d.ts +10 -0
- package/dist/src/ser-des/config/acceptance.d.ts.map +1 -0
- package/dist/src/ser-des/config/acceptance.js +163 -0
- package/dist/src/ser-des/config/acceptance.js.map +1 -0
- package/dist/src/ser-des/config/activityArchetype.d.ts +5 -0
- package/dist/src/ser-des/config/activityArchetype.d.ts.map +1 -0
- package/dist/src/ser-des/config/activityArchetype.js +78 -0
- package/dist/src/ser-des/config/activityArchetype.js.map +1 -0
- package/dist/src/ser-des/config/artifact.d.ts +16 -0
- package/dist/src/ser-des/config/artifact.d.ts.map +1 -0
- package/dist/src/ser-des/config/artifact.js +392 -0
- package/dist/src/ser-des/config/artifact.js.map +1 -0
- package/dist/src/ser-des/config/calculation.d.ts.map +1 -1
- package/dist/src/ser-des/config/calculation.js +214 -12
- package/dist/src/ser-des/config/calculation.js.map +1 -1
- package/dist/src/ser-des/config/comment.d.ts +34 -0
- package/dist/src/ser-des/config/comment.d.ts.map +1 -0
- package/dist/src/ser-des/config/comment.js +121 -0
- package/dist/src/ser-des/config/comment.js.map +1 -0
- package/dist/src/ser-des/config/competenceKind.d.ts +8 -0
- package/dist/src/ser-des/config/competenceKind.d.ts.map +1 -0
- package/dist/src/ser-des/config/competenceKind.js +266 -0
- package/dist/src/ser-des/config/competenceKind.js.map +1 -0
- package/dist/src/ser-des/config/composition.d.ts +6 -0
- package/dist/src/ser-des/config/composition.d.ts.map +1 -0
- package/dist/src/ser-des/config/composition.js +165 -0
- package/dist/src/ser-des/config/composition.js.map +1 -0
- package/dist/src/ser-des/config/conformanceClass.d.ts +9 -0
- package/dist/src/ser-des/config/conformanceClass.d.ts.map +1 -0
- package/dist/src/ser-des/config/conformanceClass.js +128 -0
- package/dist/src/ser-des/config/conformanceClass.js.map +1 -0
- package/dist/src/ser-des/config/conformanceTest.d.ts +6 -0
- package/dist/src/ser-des/config/conformanceTest.d.ts.map +1 -0
- package/dist/src/ser-des/config/conformanceTest.js +929 -0
- package/dist/src/ser-des/config/conformanceTest.js.map +1 -0
- package/dist/src/ser-des/config/constraint.d.ts +5 -0
- package/dist/src/ser-des/config/constraint.d.ts.map +1 -0
- package/dist/src/ser-des/config/constraint.js +108 -0
- package/dist/src/ser-des/config/constraint.js.map +1 -0
- package/dist/src/ser-des/config/data.d.ts.map +1 -1
- package/dist/src/ser-des/config/data.js +105 -12
- package/dist/src/ser-des/config/data.js.map +1 -1
- package/dist/src/ser-des/config/design.d.ts +9 -0
- package/dist/src/ser-des/config/design.d.ts.map +1 -0
- package/dist/src/ser-des/config/design.js +847 -0
- package/dist/src/ser-des/config/design.js.map +1 -0
- package/dist/src/ser-des/config/discrepancyRecord.d.ts +5 -0
- package/dist/src/ser-des/config/discrepancyRecord.d.ts.map +1 -0
- package/dist/src/ser-des/config/discrepancyRecord.js +109 -0
- package/dist/src/ser-des/config/discrepancyRecord.js.map +1 -0
- package/dist/src/ser-des/config/dual.d.ts +9 -0
- package/dist/src/ser-des/config/dual.d.ts.map +1 -0
- package/dist/src/ser-des/config/dual.js +84 -0
- package/dist/src/ser-des/config/dual.js.map +1 -0
- package/dist/src/ser-des/config/field-parser.d.ts +92 -7
- package/dist/src/ser-des/config/field-parser.d.ts.map +1 -1
- package/dist/src/ser-des/config/field-parser.js +832 -29
- package/dist/src/ser-des/config/field-parser.js.map +1 -1
- package/dist/src/ser-des/config/form.d.ts.map +1 -1
- package/dist/src/ser-des/config/form.js +355 -134
- package/dist/src/ser-des/config/form.js.map +1 -1
- package/dist/src/ser-des/config/formulasUsed.d.ts +9 -0
- package/dist/src/ser-des/config/formulasUsed.d.ts.map +1 -0
- package/dist/src/ser-des/config/formulasUsed.js +126 -0
- package/dist/src/ser-des/config/formulasUsed.js.map +1 -0
- package/dist/src/ser-des/config/index.d.ts.map +1 -1
- package/dist/src/ser-des/config/index.js +180 -1
- package/dist/src/ser-des/config/index.js.map +1 -1
- package/dist/src/ser-des/config/instance.d.ts +22 -0
- package/dist/src/ser-des/config/instance.d.ts.map +1 -0
- package/dist/src/ser-des/config/instance.js +266 -0
- package/dist/src/ser-des/config/instance.js.map +1 -0
- package/dist/src/ser-des/config/invariant.d.ts +9 -0
- package/dist/src/ser-des/config/invariant.d.ts.map +1 -0
- package/dist/src/ser-des/config/invariant.js +143 -0
- package/dist/src/ser-des/config/invariant.js.map +1 -0
- package/dist/src/ser-des/config/mapProfile.d.ts.map +1 -1
- package/dist/src/ser-des/config/mapProfile.js +199 -14
- package/dist/src/ser-des/config/mapProfile.js.map +1 -1
- package/dist/src/ser-des/config/metadata.js +6 -6
- package/dist/src/ser-des/config/metadata.js.map +1 -1
- package/dist/src/ser-des/config/monitor.d.ts +9 -0
- package/dist/src/ser-des/config/monitor.d.ts.map +1 -0
- package/dist/src/ser-des/config/monitor.js +322 -0
- package/dist/src/ser-des/config/monitor.js.map +1 -0
- package/dist/src/ser-des/config/note.d.ts.map +1 -1
- package/dist/src/ser-des/config/note.js +16 -1
- package/dist/src/ser-des/config/note.js.map +1 -1
- package/dist/src/ser-des/config/packageManifest.d.ts +5 -0
- package/dist/src/ser-des/config/packageManifest.d.ts.map +1 -0
- package/dist/src/ser-des/config/packageManifest.js +349 -0
- package/dist/src/ser-des/config/packageManifest.js.map +1 -0
- package/dist/src/ser-des/config/passport.d.ts +9 -0
- package/dist/src/ser-des/config/passport.d.ts.map +1 -0
- package/dist/src/ser-des/config/passport.js +191 -0
- package/dist/src/ser-des/config/passport.js.map +1 -0
- package/dist/src/ser-des/config/process.d.ts +5 -3
- package/dist/src/ser-des/config/process.d.ts.map +1 -1
- package/dist/src/ser-des/config/process.js +915 -8
- package/dist/src/ser-des/config/process.js.map +1 -1
- package/dist/src/ser-des/config/quantity.d.ts +21 -0
- package/dist/src/ser-des/config/quantity.d.ts.map +1 -0
- package/dist/src/ser-des/config/quantity.js +114 -0
- package/dist/src/ser-des/config/quantity.js.map +1 -0
- package/dist/src/ser-des/config/quantityRegister.d.ts +9 -0
- package/dist/src/ser-des/config/quantityRegister.d.ts.map +1 -0
- package/dist/src/ser-des/config/quantityRegister.js +202 -0
- package/dist/src/ser-des/config/quantityRegister.js.map +1 -0
- package/dist/src/ser-des/config/reference.d.ts.map +1 -1
- package/dist/src/ser-des/config/reference.js +6 -0
- package/dist/src/ser-des/config/reference.js.map +1 -1
- package/dist/src/ser-des/config/referenceMaterial.d.ts +5 -0
- package/dist/src/ser-des/config/referenceMaterial.d.ts.map +1 -0
- package/dist/src/ser-des/config/referenceMaterial.js +296 -0
- package/dist/src/ser-des/config/referenceMaterial.js.map +1 -0
- package/dist/src/ser-des/config/requirement.d.ts +16 -0
- package/dist/src/ser-des/config/requirement.d.ts.map +1 -0
- package/dist/src/ser-des/config/requirement.js +579 -0
- package/dist/src/ser-des/config/requirement.js.map +1 -0
- package/dist/src/ser-des/config/role.d.ts.map +1 -1
- package/dist/src/ser-des/config/role.js +12 -0
- package/dist/src/ser-des/config/role.js.map +1 -1
- package/dist/src/ser-des/config/series.d.ts +9 -0
- package/dist/src/ser-des/config/series.d.ts.map +1 -0
- package/dist/src/ser-des/config/series.js +121 -0
- package/dist/src/ser-des/config/series.js.map +1 -0
- package/dist/src/ser-des/config/sourceDiscrepancy.d.ts +11 -0
- package/dist/src/ser-des/config/sourceDiscrepancy.d.ts.map +1 -0
- package/dist/src/ser-des/config/sourceDiscrepancy.js +83 -0
- package/dist/src/ser-des/config/sourceDiscrepancy.js.map +1 -0
- package/dist/src/ser-des/config/stateMachine.d.ts.map +1 -1
- package/dist/src/ser-des/config/stateMachine.js +189 -38
- package/dist/src/ser-des/config/stateMachine.js.map +1 -1
- package/dist/src/ser-des/config/subform.d.ts.map +1 -1
- package/dist/src/ser-des/config/subform.js +25 -33
- package/dist/src/ser-des/config/subform.js.map +1 -1
- package/dist/src/ser-des/config/subject.d.ts +58 -0
- package/dist/src/ser-des/config/subject.d.ts.map +1 -0
- package/dist/src/ser-des/config/subject.js +2093 -0
- package/dist/src/ser-des/config/subject.js.map +1 -0
- package/dist/src/ser-des/config/symbol.d.ts.map +1 -1
- package/dist/src/ser-des/config/symbol.js +130 -6
- package/dist/src/ser-des/config/symbol.js.map +1 -1
- package/dist/src/ser-des/config/table.d.ts.map +1 -1
- package/dist/src/ser-des/config/table.js +373 -7
- package/dist/src/ser-des/config/table.js.map +1 -1
- package/dist/src/ser-des/config/term.d.ts.map +1 -1
- package/dist/src/ser-des/config/term.js +107 -0
- package/dist/src/ser-des/config/term.js.map +1 -1
- package/dist/src/ser-des/config/testPointSet.d.ts +5 -0
- package/dist/src/ser-des/config/testPointSet.d.ts.map +1 -0
- package/dist/src/ser-des/config/testPointSet.js +199 -0
- package/dist/src/ser-des/config/testPointSet.js.map +1 -0
- package/dist/src/ser-des/config/testSequence.d.ts +9 -0
- package/dist/src/ser-des/config/testSequence.d.ts.map +1 -0
- package/dist/src/ser-des/config/testSequence.js +206 -0
- package/dist/src/ser-des/config/testSequence.js.map +1 -0
- package/dist/src/ser-des/config/text.d.ts +5 -0
- package/dist/src/ser-des/config/text.d.ts.map +1 -0
- package/dist/src/ser-des/config/text.js +106 -0
- package/dist/src/ser-des/config/text.js.map +1 -0
- package/dist/src/ser-des/config/twin.d.ts +31 -0
- package/dist/src/ser-des/config/twin.d.ts.map +1 -0
- package/dist/src/ser-des/config/twin.js +362 -0
- package/dist/src/ser-des/config/twin.js.map +1 -0
- package/dist/src/ser-des/config/verdict.d.ts +5 -0
- package/dist/src/ser-des/config/verdict.d.ts.map +1 -0
- package/dist/src/ser-des/config/verdict.js +159 -0
- package/dist/src/ser-des/config/verdict.js.map +1 -0
- package/dist/src/ser-des/config/viewProfile.d.ts.map +1 -1
- package/dist/src/ser-des/config/viewProfile.js +7 -0
- package/dist/src/ser-des/config/viewProfile.js.map +1 -1
- package/dist/src/ser-des/includes.d.ts.map +1 -1
- package/dist/src/ser-des/includes.js +5 -2
- package/dist/src/ser-des/includes.js.map +1 -1
- package/dist/src/ser-des/index.d.ts +12 -0
- package/dist/src/ser-des/index.d.ts.map +1 -1
- package/dist/src/ser-des/index.js +42 -0
- package/dist/src/ser-des/index.js.map +1 -1
- package/dist/src/ser-des/package.d.ts +53 -0
- package/dist/src/ser-des/package.d.ts.map +1 -0
- package/dist/src/ser-des/package.js +404 -0
- package/dist/src/ser-des/package.js.map +1 -0
- package/dist/src/ser-des/parse-block.d.ts.map +1 -1
- package/dist/src/ser-des/parse-block.js +7 -1
- package/dist/src/ser-des/parse-block.js.map +1 -1
- package/dist/src/ser-des/parse.d.ts.map +1 -1
- package/dist/src/ser-des/parse.js +45 -0
- package/dist/src/ser-des/parse.js.map +1 -1
- package/dist/src/ser-des/prm.d.ts +53 -0
- package/dist/src/ser-des/prm.d.ts.map +1 -0
- package/dist/src/ser-des/prm.js +257 -0
- package/dist/src/ser-des/prm.js.map +1 -0
- package/dist/src/ser-des/resolve.d.ts.map +1 -1
- package/dist/src/ser-des/resolve.js +1 -0
- package/dist/src/ser-des/resolve.js.map +1 -1
- package/dist/src/ser-des/tokenize.d.ts +11 -0
- package/dist/src/ser-des/tokenize.d.ts.map +1 -1
- package/dist/src/ser-des/tokenize.js +28 -1
- package/dist/src/ser-des/tokenize.js.map +1 -1
- package/dist/src/ser-des/types.d.ts +56 -1
- package/dist/src/ser-des/types.d.ts.map +1 -1
- package/dist/src/spelling.d.ts +35 -0
- package/dist/src/spelling.d.ts.map +1 -0
- package/dist/src/spelling.js +140 -0
- package/dist/src/spelling.js.map +1 -0
- package/dist/src/text-coverage.d.ts +164 -0
- package/dist/src/text-coverage.d.ts.map +1 -0
- package/dist/src/text-coverage.js +679 -0
- package/dist/src/text-coverage.js.map +1 -0
- package/dist/src/time.d.ts +55 -0
- package/dist/src/time.d.ts.map +1 -0
- package/dist/src/time.js +223 -0
- package/dist/src/time.js.map +1 -0
- package/dist/src/type-expr.d.ts +31 -0
- package/dist/src/type-expr.d.ts.map +1 -0
- package/dist/src/type-expr.js +110 -0
- package/dist/src/type-expr.js.map +1 -0
- package/dist/src/types/Acceptance.d.ts +31 -0
- package/dist/src/types/Acceptance.d.ts.map +1 -0
- package/dist/src/types/Acceptance.js +12 -0
- package/dist/src/types/Acceptance.js.map +1 -0
- package/dist/src/types/ActivityArchetype.d.ts +14 -0
- package/dist/src/types/ActivityArchetype.d.ts.map +1 -0
- package/dist/src/types/ActivityArchetype.js +17 -0
- package/dist/src/types/ActivityArchetype.js.map +1 -0
- package/dist/src/types/Artifact.d.ts +117 -0
- package/dist/src/types/Artifact.d.ts.map +1 -0
- package/dist/src/types/Artifact.js +35 -0
- package/dist/src/types/Artifact.js.map +1 -0
- package/dist/src/types/Calculation.d.ts +49 -0
- package/dist/src/types/Calculation.d.ts.map +1 -1
- package/dist/src/types/Comment.d.ts +23 -0
- package/dist/src/types/Comment.d.ts.map +1 -0
- package/dist/src/types/Comment.js +3 -0
- package/dist/src/types/Comment.js.map +1 -0
- package/dist/src/types/CompetenceKind.d.ts +70 -0
- package/dist/src/types/CompetenceKind.d.ts.map +1 -0
- package/dist/src/types/CompetenceKind.js +3 -0
- package/dist/src/types/CompetenceKind.js.map +1 -0
- package/dist/src/types/Composition.d.ts +80 -0
- package/dist/src/types/Composition.d.ts.map +1 -0
- package/dist/src/types/Composition.js +44 -0
- package/dist/src/types/Composition.js.map +1 -0
- package/dist/src/types/ConformanceClass.d.ts +22 -0
- package/dist/src/types/ConformanceClass.d.ts.map +1 -0
- package/dist/src/types/ConformanceClass.js +7 -0
- package/dist/src/types/ConformanceClass.js.map +1 -0
- package/dist/src/types/ConformanceTest.d.ts +206 -0
- package/dist/src/types/ConformanceTest.d.ts.map +1 -0
- package/dist/src/types/ConformanceTest.js +3 -0
- package/dist/src/types/ConformanceTest.js.map +1 -0
- package/dist/src/types/Constraint.d.ts +34 -0
- package/dist/src/types/Constraint.d.ts.map +1 -0
- package/dist/src/types/Constraint.js +3 -0
- package/dist/src/types/Constraint.js.map +1 -0
- package/dist/src/types/Design.d.ts +147 -0
- package/dist/src/types/Design.d.ts.map +1 -0
- package/dist/src/types/Design.js +10 -0
- package/dist/src/types/Design.js.map +1 -0
- package/dist/src/types/DiscrepancyRecord.d.ts +42 -0
- package/dist/src/types/DiscrepancyRecord.d.ts.map +1 -0
- package/dist/src/types/DiscrepancyRecord.js +3 -0
- package/dist/src/types/DiscrepancyRecord.js.map +1 -0
- package/dist/src/types/Form.d.ts +127 -1
- package/dist/src/types/Form.d.ts.map +1 -1
- package/dist/src/types/FormulasUsed.d.ts +95 -0
- package/dist/src/types/FormulasUsed.d.ts.map +1 -0
- package/dist/src/types/FormulasUsed.js +64 -0
- package/dist/src/types/FormulasUsed.js.map +1 -0
- package/dist/src/types/Instance.d.ts +105 -0
- package/dist/src/types/Instance.d.ts.map +1 -0
- package/dist/src/types/Instance.js +40 -0
- package/dist/src/types/Instance.js.map +1 -0
- package/dist/src/types/Invariant.d.ts +82 -0
- package/dist/src/types/Invariant.d.ts.map +1 -0
- package/dist/src/types/Invariant.js +50 -0
- package/dist/src/types/Invariant.js.map +1 -0
- package/dist/src/types/MapProfile.d.ts +36 -1
- package/dist/src/types/MapProfile.d.ts.map +1 -1
- package/dist/src/types/Monitor.d.ts +144 -0
- package/dist/src/types/Monitor.d.ts.map +1 -0
- package/dist/src/types/Monitor.js +74 -0
- package/dist/src/types/Monitor.js.map +1 -0
- package/dist/src/types/Note.d.ts +4 -1
- package/dist/src/types/Note.d.ts.map +1 -1
- package/dist/src/types/Package.d.ts +161 -0
- package/dist/src/types/Package.d.ts.map +1 -0
- package/dist/src/types/Package.js +3 -0
- package/dist/src/types/Package.js.map +1 -0
- package/dist/src/types/Passport.d.ts +125 -0
- package/dist/src/types/Passport.d.ts.map +1 -0
- package/dist/src/types/Passport.js +84 -0
- package/dist/src/types/Passport.js.map +1 -0
- package/dist/src/types/Quantity.d.ts +99 -0
- package/dist/src/types/Quantity.d.ts.map +1 -0
- package/dist/src/types/Quantity.js +24 -0
- package/dist/src/types/Quantity.js.map +1 -0
- package/dist/src/types/Reference.d.ts +2 -0
- package/dist/src/types/Reference.d.ts.map +1 -1
- package/dist/src/types/ReferenceMaterial.d.ts +53 -0
- package/dist/src/types/ReferenceMaterial.d.ts.map +1 -0
- package/dist/src/types/ReferenceMaterial.js +14 -0
- package/dist/src/types/ReferenceMaterial.js.map +1 -0
- package/dist/src/types/Requirement.d.ts +111 -0
- package/dist/src/types/Requirement.d.ts.map +1 -0
- package/dist/src/types/Requirement.js +10 -0
- package/dist/src/types/Requirement.js.map +1 -0
- package/dist/src/types/Role.d.ts +4 -0
- package/dist/src/types/Role.d.ts.map +1 -1
- package/dist/src/types/Series.d.ts +31 -0
- package/dist/src/types/Series.d.ts.map +1 -0
- package/dist/src/types/Series.js +14 -0
- package/dist/src/types/Series.js.map +1 -0
- package/dist/src/types/SourceDiscrepancy.d.ts +21 -0
- package/dist/src/types/SourceDiscrepancy.d.ts.map +1 -0
- package/dist/src/types/SourceDiscrepancy.js +13 -0
- package/dist/src/types/SourceDiscrepancy.js.map +1 -0
- package/dist/src/types/Standard.d.ts +68 -0
- package/dist/src/types/Standard.d.ts.map +1 -1
- package/dist/src/types/StateMachine.d.ts +43 -0
- package/dist/src/types/StateMachine.d.ts.map +1 -1
- package/dist/src/types/StateMachine.js +7 -0
- package/dist/src/types/StateMachine.js.map +1 -1
- package/dist/src/types/Subject.d.ts +432 -0
- package/dist/src/types/Subject.d.ts.map +1 -0
- package/dist/src/types/Subject.js +13 -0
- package/dist/src/types/Subject.js.map +1 -0
- package/dist/src/types/Symbol.d.ts +31 -1
- package/dist/src/types/Symbol.d.ts.map +1 -1
- package/dist/src/types/Table.d.ts +43 -0
- package/dist/src/types/Table.d.ts.map +1 -1
- package/dist/src/types/Term.d.ts +29 -0
- package/dist/src/types/Term.d.ts.map +1 -1
- package/dist/src/types/TestPointSet.d.ts +33 -0
- package/dist/src/types/TestPointSet.d.ts.map +1 -0
- package/dist/src/types/TestPointSet.js +11 -0
- package/dist/src/types/TestPointSet.js.map +1 -0
- package/dist/src/types/TestSequence.d.ts +105 -0
- package/dist/src/types/TestSequence.d.ts.map +1 -0
- package/dist/src/types/TestSequence.js +65 -0
- package/dist/src/types/TestSequence.js.map +1 -0
- package/dist/src/types/Text.d.ts +21 -0
- package/dist/src/types/Text.d.ts.map +1 -0
- package/dist/src/types/Text.js +38 -0
- package/dist/src/types/Text.js.map +1 -0
- package/dist/src/types/Time.d.ts +43 -0
- package/dist/src/types/Time.d.ts.map +1 -0
- package/dist/src/types/Time.js +14 -0
- package/dist/src/types/Time.js.map +1 -0
- package/dist/src/types/Twin.d.ts +155 -0
- package/dist/src/types/Twin.d.ts.map +1 -0
- package/dist/src/types/Twin.js +102 -0
- package/dist/src/types/Twin.js.map +1 -0
- package/dist/src/types/Verdict.d.ts +40 -0
- package/dist/src/types/Verdict.d.ts.map +1 -0
- package/dist/src/types/Verdict.js +14 -0
- package/dist/src/types/Verdict.js.map +1 -0
- package/dist/src/types/ViewProfile.d.ts +6 -0
- package/dist/src/types/ViewProfile.d.ts.map +1 -1
- package/dist/src/types/data.d.ts +27 -0
- package/dist/src/types/data.d.ts.map +1 -1
- package/dist/src/types/process.d.ts +231 -0
- package/dist/src/types/process.d.ts.map +1 -1
- package/dist-browser/index.mjs +6695 -662
- package/dist-cli/primmel.mjs +21453 -0
- package/package.json +61 -5
|
@@ -1,10 +1,619 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
3
|
+
// `process` construct — v2 MMEL process + v3 process-model extensions
|
|
4
|
+
// (TODO.roadmap/02).
|
|
5
|
+
//
|
|
6
|
+
// The v2 shape is untouched: name/actor/modality, registry I/O
|
|
7
|
+
// (reference_data_registry / output), validate_provision /
|
|
8
|
+
// validate_measurement, canvas page, nested child processes.
|
|
9
|
+
//
|
|
10
|
+
// The v3 additions make the process a recursive subject with two
|
|
11
|
+
// definition forms (concept doc §4):
|
|
12
|
+
//
|
|
13
|
+
// process creep_test {
|
|
14
|
+
// name "Creep test method (R 60-2, 2.7.3)"
|
|
15
|
+
// # IS — signature, invariants, preconditions, executor
|
|
16
|
+
// signature {
|
|
17
|
+
// in { applied_load : mass duration : time }
|
|
18
|
+
// out { indication_series : mass_series }
|
|
19
|
+
// }
|
|
20
|
+
// invariants { "ocl{self.applied_load <= self.e_max}" }
|
|
21
|
+
// preconditions {
|
|
22
|
+
// precondition warmed-up {
|
|
23
|
+
// check "ocl{self.state = #ready and self.warmed_up}"
|
|
24
|
+
// description "An unwarmed run is invalid, never a fail."
|
|
25
|
+
// on_violation invalid
|
|
26
|
+
// }
|
|
27
|
+
// }
|
|
28
|
+
// executor lab
|
|
29
|
+
// # HAS — registers, state
|
|
30
|
+
// registers { conditions_log : text indication_series : mass_series }
|
|
31
|
+
// state OperationalStates
|
|
32
|
+
// # per-classification instances (R 60: n_runs A/B=5, C/D=3)
|
|
33
|
+
// instances {
|
|
34
|
+
// by accuracy_class
|
|
35
|
+
// values { A { n_runs: 5 } B { n_runs: 5 } C { n_runs: 3 } D { n_runs: 3 } }
|
|
36
|
+
// }
|
|
37
|
+
// # DOES — the executable body (absent = abstract form, always valid)
|
|
38
|
+
// does {
|
|
39
|
+
// start_event s
|
|
40
|
+
// action stabilize { executor actor role lab_technician capture stab_form write { conditions_log } }
|
|
41
|
+
// action apply_load { executor actor role lab_technician read { applied_load } }
|
|
42
|
+
// action hold { executor machine wait duration }
|
|
43
|
+
// action record { executor machine read { applied_load } write { indication_series } }
|
|
44
|
+
// end_event e
|
|
45
|
+
// flow {
|
|
46
|
+
// s -> stabilize -> apply_load -> hold -> record -> e
|
|
47
|
+
// }
|
|
48
|
+
// }
|
|
49
|
+
// }
|
|
50
|
+
//
|
|
51
|
+
// A step may declare `fires <transition>` (TODO.roadmap/07): when the step
|
|
52
|
+
// completes, the process's bound state machine (`state <machineRef>`) takes
|
|
53
|
+
// the named transition — e.g. `action warm_up { executor machine fires warm }`
|
|
54
|
+
// drives an operational machine off → ready.
|
|
55
|
+
//
|
|
56
|
+
// A step may declare `calls <process>` (TODO.roadmap/38): the step invokes
|
|
57
|
+
// a sub-process, binding its declared signature —
|
|
58
|
+
// `calls creep_method { with { in { applied_load : test_load } out { indication_series : raw } } }`
|
|
59
|
+
// maps every callee IN parameter to a caller register (read) and every
|
|
60
|
+
// callee OUT parameter back to a caller register (write). The linter
|
|
61
|
+
// (C76 subprocess-signature-bound) checks resolution, completeness and
|
|
62
|
+
// kind compatibility; the caller-side names count as step I/O for
|
|
63
|
+
// C12/C13/C75.
|
|
64
|
+
//
|
|
65
|
+
// Step kinds: action, approval, gateway, parallel_gateway, start_event,
|
|
66
|
+
// end_event, timer_event (period for recurrence), signal_event. Flow
|
|
67
|
+
// edges chain (`a -> b -> c`); an optional `{ when "ocl{...}" }` body
|
|
68
|
+
// conditions the LAST hop of a chain (first match in document order wins
|
|
69
|
+
// at a gateway; the unconditioned edge is the default).
|
|
70
|
+
//
|
|
71
|
+
// `child_composition gateway` (default `all`) declares how the process's
|
|
72
|
+
// CHILDREN combine for the coverage calculus (TODO.roadmap/04): `all` =
|
|
73
|
+
// every child required; `gateway` = the children are exclusive branches
|
|
74
|
+
// and at least one suffices for minimal cover.
|
|
75
|
+
//
|
|
76
|
+
// `activity_kind { <id>+ }` (TODO.roadmap/39) classifies the process
|
|
77
|
+
// against the ISO/IEC 17000 functional-approach activity taxonomy —
|
|
78
|
+
// multi-kind is deliberate (ISO/IEC 17065 §7.4 "evaluation" = selection +
|
|
79
|
+
// determination). Classification, not inheritance; the ids resolve against
|
|
80
|
+
// a declared activity_archetype register when one is in scope (C58).
|
|
81
|
+
//
|
|
82
|
+
// `segregation { constraint <id> { … } }` (TODO.roadmap/39b) declares the
|
|
83
|
+
// ISO/IEC 17065 role-segregation constraints as first-class structure —
|
|
84
|
+
// review/decision personnel disjoint from evaluation personnel (7.5.1 /
|
|
85
|
+
// 7.6.2), complaint-resolution independence (7.13.5, the reserved
|
|
86
|
+
// `case_personnel` pair member), and the consultancy bars (4.2.10
|
|
87
|
+
// body-specified period; 7.13.6 fixed P2Y):
|
|
88
|
+
//
|
|
89
|
+
// segregation {
|
|
90
|
+
// constraint review_not_evaluation {
|
|
91
|
+
// kind case_personnel_disjoint
|
|
92
|
+
// clause "7.5.1"
|
|
93
|
+
// pair { review evaluation }
|
|
94
|
+
// statement "The review shall be carried out by person(s) who have
|
|
95
|
+
// not been involved in the evaluation process."
|
|
96
|
+
// }
|
|
97
|
+
// constraint complaint_two_year_bar {
|
|
98
|
+
// kind consultancy_bar
|
|
99
|
+
// clause "7.13.6"
|
|
100
|
+
// period P2Y
|
|
101
|
+
// barred { consultancy employment }
|
|
102
|
+
// statement "…"
|
|
103
|
+
// }
|
|
104
|
+
// }
|
|
105
|
+
//
|
|
106
|
+
// Pair members are PROCESS ids (a process's personnel set for the case at
|
|
107
|
+
// hand), never roles — a scheme may bind one role to evaluation, review
|
|
108
|
+
// AND decision, so the norms quantify over process involvement. C59
|
|
109
|
+
// (segregation-members-resolve) checks declaration well-formedness.
|
|
110
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
2
111
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
112
|
exports.dumpProcess = exports.resolveProcess = exports.parseProcess = void 0;
|
|
4
113
|
exports.dumpProcessTree = dumpProcessTree;
|
|
5
114
|
const resolve_1 = require("../resolve");
|
|
6
115
|
const tokenize_1 = require("../tokenize");
|
|
7
116
|
const parse_block_1 = require("../parse-block");
|
|
117
|
+
const field_parser_1 = require("./field-parser");
|
|
118
|
+
const quantity_1 = require("./quantity");
|
|
119
|
+
/** Numeric-looking values parse as numbers, everything else stays a string. */
|
|
120
|
+
function numOrString(s) {
|
|
121
|
+
if (s.trim() !== '' && !isNaN(Number(s))) {
|
|
122
|
+
return Number(s);
|
|
123
|
+
}
|
|
124
|
+
return s;
|
|
125
|
+
}
|
|
126
|
+
/** A token that heads a `key :` entry: unquoted, trailing colon. */
|
|
127
|
+
function isKeyHead(tok) {
|
|
128
|
+
return !tok.startsWith('"') && tok.endsWith(':') && tok.length > 1;
|
|
129
|
+
}
|
|
130
|
+
// ── v3 block sub-parsers ─────────────────────────────────────────────
|
|
131
|
+
/**
|
|
132
|
+
* Read `name [: type]` entries (signature params, registers, call
|
|
133
|
+
* bindings). When `allowInitial` is set (registers only — TODO.roadmap/50),
|
|
134
|
+
* an entry may carry an INITIAL value: `name : type = <value> [unit]`.
|
|
135
|
+
* The value shape follows the instance `key : value [unit]` contract
|
|
136
|
+
* (ser-des/config/instance.ts readValueMap): the value is one token
|
|
137
|
+
* (quoted strings stay one token), the optional unit a second, and a
|
|
138
|
+
* single brace-block token is the QuantityValue block form
|
|
139
|
+
* (`= { value 2.2 unit t }`); anything more is a parse error — multi-word
|
|
140
|
+
* values must be quoted so the unit position stays unambiguous. Entry
|
|
141
|
+
* boundaries: the next entry head is a bare `name` token followed by a
|
|
142
|
+
* `:` token, or an attached-colon `name:` token.
|
|
143
|
+
*/
|
|
144
|
+
function parseParamList(block, allowInitial = false) {
|
|
145
|
+
const out = [];
|
|
146
|
+
const t = (0, tokenize_1.default)(block);
|
|
147
|
+
let i = 0;
|
|
148
|
+
while (i < t.length) {
|
|
149
|
+
const name = (0, field_parser_1.stripColon)(t[i++]);
|
|
150
|
+
if (!name) {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
let type = '';
|
|
154
|
+
if (i < t.length && t[i] === ':') {
|
|
155
|
+
i++;
|
|
156
|
+
}
|
|
157
|
+
if (i < t.length) {
|
|
158
|
+
type = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
159
|
+
}
|
|
160
|
+
const param = { name, type };
|
|
161
|
+
if (i < t.length && t[i] === '=') {
|
|
162
|
+
if (!allowInitial) {
|
|
163
|
+
throw new Error(`Parsing error: parameter "${name}" declares an initial value — initial values are a registers facet (signature parameters and call bindings take their values at the call)`);
|
|
164
|
+
}
|
|
165
|
+
i++;
|
|
166
|
+
const parts = [];
|
|
167
|
+
while (i < t.length && t[i + 1] !== ':' && !isKeyHead(t[i])) {
|
|
168
|
+
parts.push(t[i++]);
|
|
169
|
+
}
|
|
170
|
+
if (parts.length === 0) {
|
|
171
|
+
throw new Error(`Parsing error: register "${name}" declares "=" with no value (shape: name : type = value [unit])`);
|
|
172
|
+
}
|
|
173
|
+
if (parts.length > 2) {
|
|
174
|
+
throw new Error(`Parsing error: register "${name}" initial value has ${parts.length} tokens ` +
|
|
175
|
+
`(shape: name : type = value [unit]) — quote multi-word values`);
|
|
176
|
+
}
|
|
177
|
+
// QuantityValue block form: `= { value … unit … }`.
|
|
178
|
+
if (parts.length === 1 && parts[0].startsWith('{')) {
|
|
179
|
+
param.initial = (0, quantity_1.readQuantityBlock)((0, tokenize_1.unwrapBlock)(parts[0]));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const [rawValue, rawUnit] = parts;
|
|
183
|
+
const value = (0, quantity_1.coerceValueToken)(rawValue);
|
|
184
|
+
const initial = rawUnit === undefined
|
|
185
|
+
? { value }
|
|
186
|
+
: { value, unit: (0, tokenize_1.stripWrapping)(rawUnit) };
|
|
187
|
+
param.initial = initial;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
out.push(param);
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
/** Read OCL entries — quoted strings or bare `ocl{…}` (reassembled). */
|
|
195
|
+
function parseOclList(block) {
|
|
196
|
+
const out = [];
|
|
197
|
+
const t = (0, tokenize_1.default)(block);
|
|
198
|
+
let i = 0;
|
|
199
|
+
while (i < t.length) {
|
|
200
|
+
const read = (0, field_parser_1.readValueToken)(t, i);
|
|
201
|
+
const text = (0, tokenize_1.stripWrapping)(read.text);
|
|
202
|
+
i = read.next;
|
|
203
|
+
if (text) {
|
|
204
|
+
out.push(text);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return out;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Forward-compatible skip of an unknown keyword entry. `i` is the index
|
|
211
|
+
* AFTER the unknown keyword; consumes the optional value and, when a
|
|
212
|
+
* `{ … }` block follows, the balanced block — so `kw value`,
|
|
213
|
+
* `kw { block }`, and `kw value { block }` all stay aligned with the
|
|
214
|
+
* token walk (the tokenizer keeps a `{…}` group as ONE balanced token).
|
|
215
|
+
*/
|
|
216
|
+
function skipUnknownEntry(t, i) {
|
|
217
|
+
if (i >= t.length) {
|
|
218
|
+
return i;
|
|
219
|
+
}
|
|
220
|
+
if (t[i].startsWith('{')) {
|
|
221
|
+
return i + 1; // `kw { block }`
|
|
222
|
+
}
|
|
223
|
+
i++; // the value
|
|
224
|
+
if (i < t.length && t[i].startsWith('{')) {
|
|
225
|
+
i++; // `kw value { block }`
|
|
226
|
+
}
|
|
227
|
+
return i;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Preconditions — same shape as conformance-test preconditions (an OCL
|
|
231
|
+
* Boolean check, a description, and the violation outcome). The outcome
|
|
232
|
+
* is always `invalid` (a violated entry guard voids the run, never fails
|
|
233
|
+
* it); the keyword is carried for parallelism with cc.yaml.
|
|
234
|
+
*/
|
|
235
|
+
function parseProcessPreconditions(block) {
|
|
236
|
+
const out = [];
|
|
237
|
+
const t = (0, tokenize_1.default)(block);
|
|
238
|
+
let i = 0;
|
|
239
|
+
while (i < t.length) {
|
|
240
|
+
const cmd = t[i++];
|
|
241
|
+
if (cmd !== 'precondition') {
|
|
242
|
+
i = skipUnknownEntry(t, i);
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
const pid = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
246
|
+
const p = {
|
|
247
|
+
id: pid,
|
|
248
|
+
check: '',
|
|
249
|
+
description: '',
|
|
250
|
+
onViolation: 'invalid',
|
|
251
|
+
};
|
|
252
|
+
if (i < t.length && t[i].startsWith('{')) {
|
|
253
|
+
const pt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
|
|
254
|
+
let j = 0;
|
|
255
|
+
while (j < pt.length) {
|
|
256
|
+
const pc = pt[j++];
|
|
257
|
+
if (j >= pt.length) {
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
if (pc === 'check') {
|
|
261
|
+
const read = (0, field_parser_1.readValueToken)(pt, j);
|
|
262
|
+
p.check = (0, tokenize_1.stripWrapping)(read.text);
|
|
263
|
+
j = read.next;
|
|
264
|
+
}
|
|
265
|
+
else if (pc === 'description') {
|
|
266
|
+
p.description = (0, tokenize_1.stripWrapping)(pt[j++]);
|
|
267
|
+
}
|
|
268
|
+
else if (pc === 'on_violation') {
|
|
269
|
+
p.onViolation = (0, tokenize_1.stripWrapping)(pt[j++]);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
(0, tokenize_1.unwrapBlock)(pt[j++]);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
out.push(p);
|
|
277
|
+
}
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Segregation constraints (TODO.roadmap/39b): `constraint <id> { … }`
|
|
282
|
+
* entries of a `segregation { … }` block — the ISO/IEC 17065
|
|
283
|
+
* non-involvement rules as first-class structure (kind, clause, pair /
|
|
284
|
+
* period / barred, statement).
|
|
285
|
+
*/
|
|
286
|
+
function parseSegregation(block) {
|
|
287
|
+
const out = [];
|
|
288
|
+
const t = (0, tokenize_1.default)(block);
|
|
289
|
+
let i = 0;
|
|
290
|
+
while (i < t.length) {
|
|
291
|
+
const cmd = t[i++];
|
|
292
|
+
if (cmd !== 'constraint') {
|
|
293
|
+
i = skipUnknownEntry(t, i);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
const sid = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
297
|
+
const entry = {
|
|
298
|
+
id: sid,
|
|
299
|
+
kind: '',
|
|
300
|
+
clause: '',
|
|
301
|
+
pair: [],
|
|
302
|
+
period: '',
|
|
303
|
+
barred: [],
|
|
304
|
+
statement: '',
|
|
305
|
+
};
|
|
306
|
+
if (i < t.length && t[i].startsWith('{')) {
|
|
307
|
+
const et = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
|
|
308
|
+
let j = 0;
|
|
309
|
+
while (j < et.length) {
|
|
310
|
+
const ec = et[j++];
|
|
311
|
+
if (j >= et.length) {
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
if (ec === 'kind') {
|
|
315
|
+
entry.kind = (0, tokenize_1.stripWrapping)(et[j++]);
|
|
316
|
+
}
|
|
317
|
+
else if (ec === 'clause') {
|
|
318
|
+
entry.clause = (0, tokenize_1.stripWrapping)(et[j++]);
|
|
319
|
+
}
|
|
320
|
+
else if (ec === 'pair') {
|
|
321
|
+
entry.pair.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(et[j++]))
|
|
322
|
+
.map(field_parser_1.stripColon)
|
|
323
|
+
.map(tokenize_1.stripWrapping)
|
|
324
|
+
.filter(s => s.length > 0));
|
|
325
|
+
}
|
|
326
|
+
else if (ec === 'period') {
|
|
327
|
+
entry.period = (0, tokenize_1.stripWrapping)(et[j++]);
|
|
328
|
+
}
|
|
329
|
+
else if (ec === 'barred') {
|
|
330
|
+
entry.barred.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(et[j++]))
|
|
331
|
+
.map(field_parser_1.stripColon)
|
|
332
|
+
.map(tokenize_1.stripWrapping)
|
|
333
|
+
.filter(s => s.length > 0));
|
|
334
|
+
}
|
|
335
|
+
else if (ec === 'statement') {
|
|
336
|
+
entry.statement = (0, tokenize_1.stripWrapping)(et[j++]);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
(0, tokenize_1.unwrapBlock)(et[j++]);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
out.push(entry);
|
|
344
|
+
}
|
|
345
|
+
return out;
|
|
346
|
+
}
|
|
347
|
+
/** Per-classification instances: `by <dimension> values { V { k: n } … }`. */ function parseProcessInstances(block) {
|
|
348
|
+
const out = { by: '', values: {} };
|
|
349
|
+
const t = (0, tokenize_1.default)(block);
|
|
350
|
+
let i = 0;
|
|
351
|
+
while (i < t.length) {
|
|
352
|
+
const cmd = t[i++];
|
|
353
|
+
if (i >= t.length) {
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
if (cmd === 'by') {
|
|
357
|
+
out.by = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
358
|
+
}
|
|
359
|
+
else if (cmd === 'values') {
|
|
360
|
+
const vt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
|
|
361
|
+
let j = 0;
|
|
362
|
+
while (j < vt.length) {
|
|
363
|
+
const key = (0, field_parser_1.stripColon)(vt[j++]);
|
|
364
|
+
if (j >= vt.length) {
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
if (vt[j] === ':') {
|
|
368
|
+
j++;
|
|
369
|
+
}
|
|
370
|
+
if (j < vt.length && vt[j].startsWith('{')) {
|
|
371
|
+
const pt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(vt[j++]));
|
|
372
|
+
const params = {};
|
|
373
|
+
let k = 0;
|
|
374
|
+
while (k < pt.length) {
|
|
375
|
+
const pkey = (0, field_parser_1.stripColon)(pt[k++]);
|
|
376
|
+
if (k >= pt.length) {
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
if (pt[k] === ':') {
|
|
380
|
+
k++;
|
|
381
|
+
}
|
|
382
|
+
if (k < pt.length) {
|
|
383
|
+
params[pkey] = numOrString((0, tokenize_1.stripWrapping)(pt[k++]));
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
out.values[key] = params;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
(0, tokenize_1.unwrapBlock)(t[i++]);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return out;
|
|
395
|
+
}
|
|
396
|
+
const STEP_KINDS = new Set([
|
|
397
|
+
'action',
|
|
398
|
+
'approval',
|
|
399
|
+
'gateway',
|
|
400
|
+
'parallel_gateway',
|
|
401
|
+
'start_event',
|
|
402
|
+
'end_event',
|
|
403
|
+
'timer_event',
|
|
404
|
+
'signal_event',
|
|
405
|
+
]);
|
|
406
|
+
/** Read one step body (the `{ … }` after `<kind> <id>`). */
|
|
407
|
+
function parseStepBody(id, kind, block) {
|
|
408
|
+
const step = {
|
|
409
|
+
id,
|
|
410
|
+
kind,
|
|
411
|
+
executor: '',
|
|
412
|
+
role: '',
|
|
413
|
+
capture: '',
|
|
414
|
+
reads: [],
|
|
415
|
+
writes: [],
|
|
416
|
+
wait: '',
|
|
417
|
+
period: '',
|
|
418
|
+
signal: '',
|
|
419
|
+
fires: '',
|
|
420
|
+
calls: '',
|
|
421
|
+
callIn: [],
|
|
422
|
+
callOut: [],
|
|
423
|
+
description: '',
|
|
424
|
+
};
|
|
425
|
+
const t = (0, tokenize_1.default)(block);
|
|
426
|
+
let i = 0;
|
|
427
|
+
while (i < t.length) {
|
|
428
|
+
const cmd = t[i++];
|
|
429
|
+
if (i >= t.length) {
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
if (cmd === 'executor') {
|
|
433
|
+
const ex = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
434
|
+
if (ex !== 'machine' && ex !== 'actor') {
|
|
435
|
+
throw new Error(`Parsing error: process step. ID ${id}: Unknown executor ${ex} (valid: machine, actor)`);
|
|
436
|
+
}
|
|
437
|
+
step.executor = ex;
|
|
438
|
+
}
|
|
439
|
+
else if (cmd === 'role') {
|
|
440
|
+
step.role = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
441
|
+
}
|
|
442
|
+
else if (cmd === 'capture') {
|
|
443
|
+
step.capture = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
444
|
+
}
|
|
445
|
+
else if (cmd === 'read') {
|
|
446
|
+
step.reads.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(t[i++]))
|
|
447
|
+
.map(field_parser_1.stripColon)
|
|
448
|
+
.map(tokenize_1.stripWrapping)
|
|
449
|
+
.filter(s => s.length > 0));
|
|
450
|
+
}
|
|
451
|
+
else if (cmd === 'write') {
|
|
452
|
+
step.writes.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(t[i++]))
|
|
453
|
+
.map(field_parser_1.stripColon)
|
|
454
|
+
.map(tokenize_1.stripWrapping)
|
|
455
|
+
.filter(s => s.length > 0));
|
|
456
|
+
}
|
|
457
|
+
else if (cmd === 'wait') {
|
|
458
|
+
step.wait = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
459
|
+
}
|
|
460
|
+
else if (cmd === 'period') {
|
|
461
|
+
step.period = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
462
|
+
}
|
|
463
|
+
else if (cmd === 'signal') {
|
|
464
|
+
step.signal = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
465
|
+
}
|
|
466
|
+
else if (cmd === 'fires') {
|
|
467
|
+
step.fires = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
468
|
+
}
|
|
469
|
+
else if (cmd === 'calls') {
|
|
470
|
+
// calls <process> — optionally followed by a `with { in {…} out {…} }`
|
|
471
|
+
// signature-binding block (TODO.roadmap/38). The binding lists reuse
|
|
472
|
+
// the `name : name` param-list shape: callee param : caller name.
|
|
473
|
+
step.calls = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
474
|
+
if (i < t.length && t[i].startsWith('{')) {
|
|
475
|
+
const bind = (b) => parseParamList((0, tokenize_1.unwrapBlock)(b)).map(p => ({
|
|
476
|
+
param: p.name,
|
|
477
|
+
bind: p.type,
|
|
478
|
+
}));
|
|
479
|
+
const ct = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
|
|
480
|
+
let j = 0;
|
|
481
|
+
while (j < ct.length) {
|
|
482
|
+
const cc = ct[j++];
|
|
483
|
+
if (j >= ct.length) {
|
|
484
|
+
break;
|
|
485
|
+
}
|
|
486
|
+
if (cc === 'with') {
|
|
487
|
+
const wt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(ct[j++]));
|
|
488
|
+
let k = 0;
|
|
489
|
+
while (k < wt.length) {
|
|
490
|
+
const wc = wt[k++];
|
|
491
|
+
if (k >= wt.length) {
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
if (wc === 'in') {
|
|
495
|
+
step.callIn.push(...bind(wt[k++]));
|
|
496
|
+
}
|
|
497
|
+
else if (wc === 'out') {
|
|
498
|
+
step.callOut.push(...bind(wt[k++]));
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
(0, tokenize_1.unwrapBlock)(wt[k++]);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
j = skipUnknownEntry(ct, j);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
else if (cmd === 'description') {
|
|
512
|
+
step.description = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
i = skipUnknownEntry(t, i);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return step;
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Read the flow block: chained edges `a -> b -> c`, each hop optionally
|
|
522
|
+
* followed by `{ when "ocl{…}" }` (the condition binds to the LAST hop
|
|
523
|
+
* of the chain). `condition` is accepted as an alias of `when` for
|
|
524
|
+
* symmetry with canvas edges.
|
|
525
|
+
*
|
|
526
|
+
* A FUSED arrow (`s->a->e`, `s→a→e` — no whitespace around the arrow)
|
|
527
|
+
* tokenizes as ONE token and would otherwise yield zero edges, surfacing
|
|
528
|
+
* later as misleading C11 errors. Reject it at parse time with a clear
|
|
529
|
+
* message instead of silently dropping the chain or attempting to split
|
|
530
|
+
* it. Block (`{…}`) and quoted tokens are exempt — an OCL `->` inside a
|
|
531
|
+
* `when` condition is not a flow arrow.
|
|
532
|
+
*/
|
|
533
|
+
function parseFlowEdges(block) {
|
|
534
|
+
const edges = [];
|
|
535
|
+
const t = (0, tokenize_1.default)(block);
|
|
536
|
+
for (const tok of t) {
|
|
537
|
+
if (!tok.startsWith('{') &&
|
|
538
|
+
!tok.startsWith('"') &&
|
|
539
|
+
tok !== '->' &&
|
|
540
|
+
tok !== '→' &&
|
|
541
|
+
(tok.includes('->') || tok.includes('→'))) {
|
|
542
|
+
throw new Error(`Parsing error: process flow edge "${tok}" contains a fused arrow — separate steps and "->" with whitespace`);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
let i = 0;
|
|
546
|
+
while (i < t.length) {
|
|
547
|
+
let current = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
548
|
+
if (!current) {
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
while (i < t.length && (t[i] === '->' || t[i] === '→')) {
|
|
552
|
+
i++;
|
|
553
|
+
if (i >= t.length) {
|
|
554
|
+
break;
|
|
555
|
+
}
|
|
556
|
+
const to = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
557
|
+
let condition = '';
|
|
558
|
+
if (i < t.length && t[i].startsWith('{')) {
|
|
559
|
+
const bt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
|
|
560
|
+
let j = 0;
|
|
561
|
+
while (j < bt.length) {
|
|
562
|
+
const cmd = bt[j++];
|
|
563
|
+
if (j >= bt.length) {
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
if (cmd === 'when' || cmd === 'condition') {
|
|
567
|
+
const read = (0, field_parser_1.readValueToken)(bt, j);
|
|
568
|
+
condition = (0, tokenize_1.stripWrapping)(read.text);
|
|
569
|
+
j = read.next;
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
(0, tokenize_1.unwrapBlock)(bt[j++]);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
edges.push({ from: current, to, condition });
|
|
577
|
+
current = to;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
return edges;
|
|
581
|
+
}
|
|
582
|
+
/** Read the `does { … }` executable body: step declarations + one flow block. */
|
|
583
|
+
function parseDoes(block) {
|
|
584
|
+
const flow = { steps: [], edges: [] };
|
|
585
|
+
const t = (0, tokenize_1.default)(block);
|
|
586
|
+
let i = 0;
|
|
587
|
+
while (i < t.length) {
|
|
588
|
+
const cmd = t[i++];
|
|
589
|
+
if (i >= t.length) {
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
592
|
+
if (cmd === 'flow') {
|
|
593
|
+
flow.edges.push(...parseFlowEdges((0, tokenize_1.unwrapBlock)(t[i++])));
|
|
594
|
+
}
|
|
595
|
+
else if (STEP_KINDS.has(cmd)) {
|
|
596
|
+
const stepId = (0, tokenize_1.stripWrapping)(t[i++]);
|
|
597
|
+
let body = '';
|
|
598
|
+
if (i < t.length && t[i].startsWith('{')) {
|
|
599
|
+
body = (0, tokenize_1.unwrapBlock)(t[i++]);
|
|
600
|
+
}
|
|
601
|
+
flow.steps.push(parseStepBody(stepId, cmd, body));
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
// Forward-compatible: skip `kw value` and `kw id { body }` shapes.
|
|
605
|
+
const v = t[i++];
|
|
606
|
+
if (v !== undefined &&
|
|
607
|
+
!v.startsWith('{') &&
|
|
608
|
+
i < t.length &&
|
|
609
|
+
t[i].startsWith('{')) {
|
|
610
|
+
i++;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
return flow;
|
|
615
|
+
}
|
|
616
|
+
// ── process parser ───────────────────────────────────────────────────
|
|
8
617
|
const parseProcess = function (id, data) {
|
|
9
618
|
const result = {
|
|
10
619
|
id: id,
|
|
@@ -18,6 +627,20 @@ const parseProcess = function (id, data) {
|
|
|
18
627
|
measure: [],
|
|
19
628
|
parent: '',
|
|
20
629
|
children: [],
|
|
630
|
+
// v3 process model — defaults keep a plain v2 process exactly as before
|
|
631
|
+
signature: null,
|
|
632
|
+
invariants: [],
|
|
633
|
+
activityKinds: [],
|
|
634
|
+
segregation: [],
|
|
635
|
+
preconditions: [],
|
|
636
|
+
executor: '',
|
|
637
|
+
registers: [],
|
|
638
|
+
state: '',
|
|
639
|
+
instances: null,
|
|
640
|
+
childComposition: 'all',
|
|
641
|
+
does: null,
|
|
642
|
+
source: null,
|
|
643
|
+
provisionRefs: [],
|
|
21
644
|
_relations: {
|
|
22
645
|
actor: '',
|
|
23
646
|
output: [],
|
|
@@ -84,6 +707,84 @@ const parseProcess = function (id, data) {
|
|
|
84
707
|
else if (keyword === 'reference_data_registry') {
|
|
85
708
|
result._relations.input = (0, tokenize_1.tokenizePackage)(value());
|
|
86
709
|
}
|
|
710
|
+
else if (keyword === 'signature') {
|
|
711
|
+
// signature { in { … } out { … } }
|
|
712
|
+
const sig = { inputs: [], outputs: [] };
|
|
713
|
+
const st = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(value()));
|
|
714
|
+
let j = 0;
|
|
715
|
+
while (j < st.length) {
|
|
716
|
+
const sc = st[j++];
|
|
717
|
+
if (j >= st.length) {
|
|
718
|
+
break;
|
|
719
|
+
}
|
|
720
|
+
if (sc === 'in') {
|
|
721
|
+
sig.inputs.push(...parseParamList((0, tokenize_1.unwrapBlock)(st[j++])));
|
|
722
|
+
}
|
|
723
|
+
else if (sc === 'out') {
|
|
724
|
+
sig.outputs.push(...parseParamList((0, tokenize_1.unwrapBlock)(st[j++])));
|
|
725
|
+
}
|
|
726
|
+
else {
|
|
727
|
+
(0, tokenize_1.unwrapBlock)(st[j++]);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
result.signature = sig;
|
|
731
|
+
}
|
|
732
|
+
else if (keyword === 'invariants') {
|
|
733
|
+
result.invariants = parseOclList((0, tokenize_1.unwrapBlock)(value()));
|
|
734
|
+
}
|
|
735
|
+
else if (keyword === 'activity_kind') {
|
|
736
|
+
// activity_kind { testing verification … } — ISO/IEC 17000
|
|
737
|
+
// functional-approach classification (TODO.roadmap/39; C58).
|
|
738
|
+
result.activityKinds = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
|
|
739
|
+
.map(field_parser_1.stripColon)
|
|
740
|
+
.map(tokenize_1.stripWrapping)
|
|
741
|
+
.filter(s => s.length > 0);
|
|
742
|
+
}
|
|
743
|
+
else if (keyword === 'segregation') {
|
|
744
|
+
// segregation { constraint <id> { … } … } — ISO/IEC 17065 role
|
|
745
|
+
// segregation (TODO.roadmap/39b; C59).
|
|
746
|
+
result.segregation = parseSegregation((0, tokenize_1.unwrapBlock)(value()));
|
|
747
|
+
}
|
|
748
|
+
else if (keyword === 'preconditions') {
|
|
749
|
+
result.preconditions = parseProcessPreconditions((0, tokenize_1.unwrapBlock)(value()));
|
|
750
|
+
}
|
|
751
|
+
else if (keyword === 'executor') {
|
|
752
|
+
result.executor = (0, tokenize_1.stripWrapping)(value());
|
|
753
|
+
}
|
|
754
|
+
else if (keyword === 'registers') {
|
|
755
|
+
// registers { name : type [= value [unit]] … } — HAS state slots;
|
|
756
|
+
// the optional initial value is the register's starting content
|
|
757
|
+
// (TODO.roadmap/50).
|
|
758
|
+
result.registers = parseParamList((0, tokenize_1.unwrapBlock)(value()), true);
|
|
759
|
+
}
|
|
760
|
+
else if (keyword === 'state') {
|
|
761
|
+
result.state = (0, tokenize_1.stripWrapping)(value());
|
|
762
|
+
}
|
|
763
|
+
else if (keyword === 'instances') {
|
|
764
|
+
result.instances = parseProcessInstances((0, tokenize_1.unwrapBlock)(value()));
|
|
765
|
+
}
|
|
766
|
+
else if (keyword === 'child_composition') {
|
|
767
|
+
const comp = (0, tokenize_1.stripWrapping)(value());
|
|
768
|
+
if (comp !== 'all' && comp !== 'gateway') {
|
|
769
|
+
throw new Error(`Parsing error: process. ID ${id}: Unknown child_composition "${comp}" (valid: all, gateway)`);
|
|
770
|
+
}
|
|
771
|
+
result.childComposition = comp;
|
|
772
|
+
}
|
|
773
|
+
else if (keyword === 'does') {
|
|
774
|
+
// The presence of the body marks the process EXECUTABLE — even an
|
|
775
|
+
// empty `does { }` (the linter then reports the missing start event).
|
|
776
|
+
result.does = parseDoes((0, tokenize_1.unwrapBlock)(value()));
|
|
777
|
+
}
|
|
778
|
+
else if (keyword === 'source') {
|
|
779
|
+
// Clause-URN provenance — the same facet requirement carries.
|
|
780
|
+
// Repeated source blocks collect into sourceRefs (TODO.roadmap/24);
|
|
781
|
+
// source stays the first entry for back-compatibility.
|
|
782
|
+
const src = (0, field_parser_1.readSource)((0, tokenize_1.unwrapBlock)(value()));
|
|
783
|
+
if (!result.source) {
|
|
784
|
+
result.source = src;
|
|
785
|
+
}
|
|
786
|
+
(result.sourceRefs ??= []).push(src);
|
|
787
|
+
}
|
|
87
788
|
else {
|
|
88
789
|
return false;
|
|
89
790
|
}
|
|
@@ -105,6 +806,10 @@ const resolveProcess = function (ctx, unresolved) {
|
|
|
105
806
|
output: [],
|
|
106
807
|
input: [],
|
|
107
808
|
provision: [],
|
|
809
|
+
// The raw validate_provision ids survive resolution even when they
|
|
810
|
+
// name no declared `provision` construct (e.g. `/req/cs/*`
|
|
811
|
+
// requirements) — the linter and the dumper read this list.
|
|
812
|
+
provisionRefs: [..._relations.provision],
|
|
108
813
|
actor: null,
|
|
109
814
|
page: null,
|
|
110
815
|
};
|
|
@@ -142,14 +847,14 @@ function indentBlock(block) {
|
|
|
142
847
|
.map(line => (line ? ' ' + line : line))
|
|
143
848
|
.join('\n');
|
|
144
849
|
}
|
|
145
|
-
function dumpProcessTree(process, lookup) {
|
|
146
|
-
let out = (0, exports.dumpProcess)(process);
|
|
850
|
+
function dumpProcessTree(process, lookup, nested = false) {
|
|
851
|
+
let out = (0, exports.dumpProcess)(process, { nested });
|
|
147
852
|
if (process.children.length > 0) {
|
|
148
853
|
const childBlocks = [];
|
|
149
854
|
for (const childId of process.children) {
|
|
150
855
|
const child = lookup.get(childId);
|
|
151
856
|
if (child) {
|
|
152
|
-
childBlocks.push(indentBlock(dumpProcessTree(child, lookup)));
|
|
857
|
+
childBlocks.push(indentBlock(dumpProcessTree(child, lookup, true)));
|
|
153
858
|
}
|
|
154
859
|
}
|
|
155
860
|
if (childBlocks.length > 0) {
|
|
@@ -158,7 +863,102 @@ function dumpProcessTree(process, lookup) {
|
|
|
158
863
|
}
|
|
159
864
|
return out;
|
|
160
865
|
}
|
|
161
|
-
|
|
866
|
+
// ── v3 block dumpers ─────────────────────────────────────────────────
|
|
867
|
+
function dumpParamList(params) {
|
|
868
|
+
return params
|
|
869
|
+
.map(p => p.name +
|
|
870
|
+
(p.type ? ' : ' + p.type : '') +
|
|
871
|
+
(p.initial !== undefined ? ' = ' + (0, quantity_1.dumpQuantityValue)(p.initial) : ''))
|
|
872
|
+
.join(' ');
|
|
873
|
+
}
|
|
874
|
+
function dumpSignature(sig) {
|
|
875
|
+
let out = ' signature {\n';
|
|
876
|
+
if (sig.inputs.length > 0) {
|
|
877
|
+
out += ' in { ' + dumpParamList(sig.inputs) + ' }\n';
|
|
878
|
+
}
|
|
879
|
+
if (sig.outputs.length > 0) {
|
|
880
|
+
out += ' out { ' + dumpParamList(sig.outputs) + ' }\n';
|
|
881
|
+
}
|
|
882
|
+
out += ' }\n';
|
|
883
|
+
return out;
|
|
884
|
+
}
|
|
885
|
+
function dumpStep(step) {
|
|
886
|
+
const inner = [];
|
|
887
|
+
if (step.executor) {
|
|
888
|
+
inner.push('executor ' + step.executor);
|
|
889
|
+
}
|
|
890
|
+
if (step.role) {
|
|
891
|
+
inner.push('role ' + (0, field_parser_1.dumpBareSafe)(step.role));
|
|
892
|
+
}
|
|
893
|
+
if (step.capture) {
|
|
894
|
+
inner.push('capture ' + (0, field_parser_1.dumpBareSafe)(step.capture));
|
|
895
|
+
}
|
|
896
|
+
if (step.reads.length > 0) {
|
|
897
|
+
inner.push('read { ' + step.reads.map(field_parser_1.dumpBareSafe).join(' ') + ' }');
|
|
898
|
+
}
|
|
899
|
+
if (step.writes.length > 0) {
|
|
900
|
+
inner.push('write { ' + step.writes.map(field_parser_1.dumpBareSafe).join(' ') + ' }');
|
|
901
|
+
}
|
|
902
|
+
if (step.wait) {
|
|
903
|
+
inner.push('wait ' + (0, field_parser_1.dumpBareSafe)(step.wait));
|
|
904
|
+
}
|
|
905
|
+
if (step.period) {
|
|
906
|
+
inner.push('period ' + (0, field_parser_1.dumpBareSafe)(step.period));
|
|
907
|
+
}
|
|
908
|
+
if (step.signal) {
|
|
909
|
+
inner.push('signal ' + (0, field_parser_1.dumpBareSafe)(step.signal));
|
|
910
|
+
}
|
|
911
|
+
if (step.fires) {
|
|
912
|
+
inner.push('fires ' + (0, field_parser_1.dumpBareSafe)(step.fires));
|
|
913
|
+
}
|
|
914
|
+
if (step.calls) {
|
|
915
|
+
let c = 'calls ' + (0, field_parser_1.dumpBareSafe)(step.calls);
|
|
916
|
+
if (step.callIn.length > 0 || step.callOut.length > 0) {
|
|
917
|
+
const bind = (bs) => bs
|
|
918
|
+
.map(b => (0, field_parser_1.dumpBareSafe)(b.param) + ' : ' + (0, field_parser_1.dumpBareSafe)(b.bind))
|
|
919
|
+
.join(' ');
|
|
920
|
+
c += ' { with {';
|
|
921
|
+
if (step.callIn.length > 0) {
|
|
922
|
+
c += ' in { ' + bind(step.callIn) + ' }';
|
|
923
|
+
}
|
|
924
|
+
if (step.callOut.length > 0) {
|
|
925
|
+
c += ' out { ' + bind(step.callOut) + ' }';
|
|
926
|
+
}
|
|
927
|
+
c += ' } }';
|
|
928
|
+
}
|
|
929
|
+
inner.push(c);
|
|
930
|
+
}
|
|
931
|
+
if (step.description) {
|
|
932
|
+
inner.push('description "' + (0, tokenize_1.escapeString)(step.description) + '"');
|
|
933
|
+
}
|
|
934
|
+
if (inner.length === 0) {
|
|
935
|
+
return ' ' + step.kind + ' ' + step.id + '\n';
|
|
936
|
+
}
|
|
937
|
+
return ' ' + step.kind + ' ' + step.id + ' { ' + inner.join(' ') + ' }\n';
|
|
938
|
+
}
|
|
939
|
+
function dumpDoes(flow) {
|
|
940
|
+
let out = ' does {\n';
|
|
941
|
+
for (const s of flow.steps) {
|
|
942
|
+
out += dumpStep(s);
|
|
943
|
+
}
|
|
944
|
+
if (flow.edges.length > 0) {
|
|
945
|
+
out += ' flow {\n';
|
|
946
|
+
for (const e of flow.edges) {
|
|
947
|
+
out += ' ' + e.from + ' -> ' + e.to;
|
|
948
|
+
if (e.condition) {
|
|
949
|
+
out += ' { when "' + (0, tokenize_1.escapeString)(e.condition) + '" }';
|
|
950
|
+
}
|
|
951
|
+
out += '\n';
|
|
952
|
+
}
|
|
953
|
+
out += ' }\n';
|
|
954
|
+
}
|
|
955
|
+
out += ' }\n';
|
|
956
|
+
return out;
|
|
957
|
+
}
|
|
958
|
+
// Wider than Dumper<Process> by one OPTIONAL context arg (still
|
|
959
|
+
// assignable to Dumper<Process>): `nested` marks emission inside the
|
|
960
|
+
// parent's block, where the nesting itself expresses the parent link.
|
|
961
|
+
const dumpProcess = function (process, ctx) {
|
|
162
962
|
let out = 'process ' + process.id + ' {\n';
|
|
163
963
|
out += ' name "' + (0, tokenize_1.escapeString)(process.name) + '"\n';
|
|
164
964
|
if (process.actor !== null) {
|
|
@@ -174,10 +974,10 @@ const dumpProcess = function (process) {
|
|
|
174
974
|
}
|
|
175
975
|
out += ' }\n';
|
|
176
976
|
}
|
|
177
|
-
if (process.
|
|
977
|
+
if (process.provisionRefs.length > 0) {
|
|
178
978
|
out += ' validate_provision {\n';
|
|
179
|
-
for (const
|
|
180
|
-
out += ' ' +
|
|
979
|
+
for (const id of process.provisionRefs) {
|
|
980
|
+
out += ' ' + id + '\n';
|
|
181
981
|
}
|
|
182
982
|
out += ' }\n';
|
|
183
983
|
}
|
|
@@ -198,7 +998,114 @@ const dumpProcess = function (process) {
|
|
|
198
998
|
if (process.page !== null) {
|
|
199
999
|
out += ' canvas ' + process.page.id + '\n';
|
|
200
1000
|
}
|
|
201
|
-
|
|
1001
|
+
// ── v3 blocks (emitted only when declared) ──
|
|
1002
|
+
if (process.signature !== null && process.signature !== undefined) {
|
|
1003
|
+
out += dumpSignature(process.signature);
|
|
1004
|
+
}
|
|
1005
|
+
if (process.invariants && process.invariants.length > 0) {
|
|
1006
|
+
out += ' invariants {\n';
|
|
1007
|
+
for (const inv of process.invariants) {
|
|
1008
|
+
out += ' "' + (0, tokenize_1.escapeString)(inv) + '"\n';
|
|
1009
|
+
}
|
|
1010
|
+
out += ' }\n';
|
|
1011
|
+
}
|
|
1012
|
+
if (process.activityKinds && process.activityKinds.length > 0) {
|
|
1013
|
+
out +=
|
|
1014
|
+
' activity_kind { ' +
|
|
1015
|
+
process.activityKinds.map(field_parser_1.dumpBareSafe).join(' ') +
|
|
1016
|
+
' }\n';
|
|
1017
|
+
}
|
|
1018
|
+
if (process.segregation && process.segregation.length > 0) {
|
|
1019
|
+
out += ' segregation {\n';
|
|
1020
|
+
for (const s of process.segregation) {
|
|
1021
|
+
out += ' constraint ' + s.id + ' {\n';
|
|
1022
|
+
if (s.kind) {
|
|
1023
|
+
out += ' kind ' + (0, field_parser_1.dumpBareSafe)(s.kind) + '\n';
|
|
1024
|
+
}
|
|
1025
|
+
if (s.clause) {
|
|
1026
|
+
out += ' clause "' + (0, tokenize_1.escapeString)(s.clause) + '"\n';
|
|
1027
|
+
}
|
|
1028
|
+
if (s.pair.length > 0) {
|
|
1029
|
+
out += ' pair { ' + s.pair.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
|
|
1030
|
+
}
|
|
1031
|
+
if (s.period) {
|
|
1032
|
+
out += ' period ' + (0, field_parser_1.dumpBareSafe)(s.period) + '\n';
|
|
1033
|
+
}
|
|
1034
|
+
if (s.barred.length > 0) {
|
|
1035
|
+
out +=
|
|
1036
|
+
' barred { ' + s.barred.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
|
|
1037
|
+
}
|
|
1038
|
+
if (s.statement) {
|
|
1039
|
+
out += ' statement "' + (0, tokenize_1.escapeString)(s.statement) + '"\n';
|
|
1040
|
+
}
|
|
1041
|
+
out += ' }\n';
|
|
1042
|
+
}
|
|
1043
|
+
out += ' }\n';
|
|
1044
|
+
}
|
|
1045
|
+
if (process.preconditions && process.preconditions.length > 0) {
|
|
1046
|
+
out += ' preconditions {\n';
|
|
1047
|
+
for (const p of process.preconditions) {
|
|
1048
|
+
let line = ' precondition ' + p.id + ' { ';
|
|
1049
|
+
if (p.check) {
|
|
1050
|
+
line += 'check "' + (0, tokenize_1.escapeString)(p.check) + '" ';
|
|
1051
|
+
}
|
|
1052
|
+
if (p.description) {
|
|
1053
|
+
line += 'description "' + (0, tokenize_1.escapeString)(p.description) + '" ';
|
|
1054
|
+
}
|
|
1055
|
+
line += 'on_violation ' + p.onViolation + ' ';
|
|
1056
|
+
out += line + '}\n';
|
|
1057
|
+
}
|
|
1058
|
+
out += ' }\n';
|
|
1059
|
+
}
|
|
1060
|
+
if (process.executor) {
|
|
1061
|
+
out += ' executor ' + (0, field_parser_1.dumpBareSafe)(process.executor) + '\n';
|
|
1062
|
+
}
|
|
1063
|
+
if (process.registers && process.registers.length > 0) {
|
|
1064
|
+
out += ' registers { ' + dumpParamList(process.registers) + ' }\n';
|
|
1065
|
+
}
|
|
1066
|
+
if (process.state) {
|
|
1067
|
+
out += ' state ' + (0, field_parser_1.dumpBareSafe)(process.state) + '\n';
|
|
1068
|
+
}
|
|
1069
|
+
if (process.instances) {
|
|
1070
|
+
let line = ' instances { by ' + process.instances.by + ' values { ';
|
|
1071
|
+
for (const [key, params] of Object.entries(process.instances.values)) {
|
|
1072
|
+
line += key + ' { ';
|
|
1073
|
+
for (const [pk, pv] of Object.entries(params)) {
|
|
1074
|
+
line += pk + ': ' + (0, field_parser_1.dumpBareSafe)(String(pv)) + ' ';
|
|
1075
|
+
}
|
|
1076
|
+
line += '} ';
|
|
1077
|
+
}
|
|
1078
|
+
out += line + '} }\n';
|
|
1079
|
+
}
|
|
1080
|
+
if (process.childComposition === 'gateway') {
|
|
1081
|
+
out += ' child_composition gateway\n';
|
|
1082
|
+
}
|
|
1083
|
+
if (process.does) {
|
|
1084
|
+
out += dumpDoes(process.does);
|
|
1085
|
+
}
|
|
1086
|
+
// Clause-URN provenance (the requirement facet shape) — repeated blocks
|
|
1087
|
+
// from sourceRefs, single-block fallback.
|
|
1088
|
+
for (const src of process.sourceRefs ??
|
|
1089
|
+
(process.source && (process.source.doc || process.source.clause)
|
|
1090
|
+
? [process.source]
|
|
1091
|
+
: [])) {
|
|
1092
|
+
out +=
|
|
1093
|
+
' source { doc "' +
|
|
1094
|
+
(0, tokenize_1.escapeString)(src.doc) +
|
|
1095
|
+
'" clause "' +
|
|
1096
|
+
(0, tokenize_1.escapeString)(src.clause) +
|
|
1097
|
+
'"' +
|
|
1098
|
+
(src.fragment ? ' fragment "' + (0, tokenize_1.escapeString)(src.fragment) + '"' : '') +
|
|
1099
|
+
' }\n';
|
|
1100
|
+
}
|
|
1101
|
+
// A `parent` link is emitted explicitly whenever nesting does not
|
|
1102
|
+
// already express it: leaf processes keep the historical flat form,
|
|
1103
|
+
// and a non-leaf process dumped at TOP LEVEL (a flat `parent X`
|
|
1104
|
+
// declaration that itself has children) must emit it too — dropping it
|
|
1105
|
+
// would silently re-root the subtree across a dump/load cycle, which
|
|
1106
|
+
// the coverage calculus aggregates over. A non-leaf process dumped
|
|
1107
|
+
// NESTED inside its parent needs no line (the nesting expresses it).
|
|
1108
|
+
if (process.parent && (process.children.length === 0 || !ctx?.nested)) {
|
|
202
1109
|
out += ' parent ' + process.parent + '\n';
|
|
203
1110
|
}
|
|
204
1111
|
out += '}\n';
|