@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
|
@@ -0,0 +1,703 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
3
|
+
// ReqIF export (TODO.roadmap/27 — interop projections, surface 1).
|
|
4
|
+
//
|
|
5
|
+
// A Primmel package → ReqIF XML for RM-tool ecosystems, following the
|
|
6
|
+
// DIN DKE SPEC 99200 profile (ReqIF interpretation for public standards,
|
|
7
|
+
// Release 1.3) where compatible: one document spec-object for the
|
|
8
|
+
// package, heading spec-objects for the requirement classes (nested per
|
|
9
|
+
// their /req/... id paths), provision spec-objects for the requirements
|
|
10
|
+
// and the conformance tests, and a single SPEC-RELATION-TYPE
|
|
11
|
+
// "cross-reference" (the only relation type the profile defines) for the
|
|
12
|
+
// projected cross-references. ReqIF version: 1.0.1, the 20110401
|
|
13
|
+
// namespace the profile's examples use.
|
|
14
|
+
//
|
|
15
|
+
// ONE-WAY PROJECTION, NEVER THE KERNEL'S TRUTH. The package stays the
|
|
16
|
+
// single source of truth; re-imports are new-model suggestions, never
|
|
17
|
+
// merges (documented, not built). The same doctrine is stated in the
|
|
18
|
+
// exported document's header note (the XML comment after the prolog):
|
|
19
|
+
//
|
|
20
|
+
// SURVIVES — provisions (requirements, classes as headings, tests),
|
|
21
|
+
// the class/requirement hierarchy, modality (shall → requirement,
|
|
22
|
+
// should → recommendation, may → permission), clause provenance
|
|
23
|
+
// (doc + clause), and cross-references (dependencies, conformance-
|
|
24
|
+
// test targets, bindings that name an exported spec-object);
|
|
25
|
+
// guidance and the verification method survive as inert text.
|
|
26
|
+
// LOST — machine-checkable bindings (binds_to subject paths), OCL
|
|
27
|
+
// limit expressions, acceptance criteria, quantities with units,
|
|
28
|
+
// typed parameters, applicability filters, processes, forms,
|
|
29
|
+
// workflows — ABSENT from the export, by design.
|
|
30
|
+
//
|
|
31
|
+
// Deviations from the profile (all stated in the header note):
|
|
32
|
+
// - primmel.* extension attributes (primmel.guidance,
|
|
33
|
+
// primmel.verification-method) and the primmel.object-kind enum
|
|
34
|
+
// (requirement | conformance-test) — the profile has no test object
|
|
35
|
+
// kind, and tests are what `targets` cross-references hang on;
|
|
36
|
+
// - a synthetic "Conformance tests" heading grouping the tests;
|
|
37
|
+
// - the modality enum carries only the values this export mints
|
|
38
|
+
// (requirement, recommendation, permission, undefined) — the
|
|
39
|
+
// profile's wider value set (capability, constraint, …) has no
|
|
40
|
+
// Primmel counterpart;
|
|
41
|
+
// - string datatypes for joined clause citations are widened to
|
|
42
|
+
// 1024 chars (the profile's 64 fits single citations only);
|
|
43
|
+
// - spec-relations carry the projection kind in LONG-NAME
|
|
44
|
+
// (depends-on | verifies | binds) since the profile's single
|
|
45
|
+
// cross-reference type cannot distinguish them;
|
|
46
|
+
// - requirements outside any class sit as top-level siblings of the
|
|
47
|
+
// document node (the profile nests every provision under a heading
|
|
48
|
+
// — XSD-legal either way);
|
|
49
|
+
// - leaf SPEC-HIERARCHY nodes emit an explicit empty <CHILDREN/>
|
|
50
|
+
// (the profile omits the element — XSD-optional either way).
|
|
51
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.REQIF_MODALITY_BY_OBLIGATION = exports.REQIF_VERSION = exports.REQIF_NAMESPACE = void 0;
|
|
54
|
+
exports.reqifModality = reqifModality;
|
|
55
|
+
exports.requirementClassOf = requirementClassOf;
|
|
56
|
+
exports.xmlCommentSafe = xmlCommentSafe;
|
|
57
|
+
exports.exportStandardReqif = exportStandardReqif;
|
|
58
|
+
exports.exportPackageReqif = exportPackageReqif;
|
|
59
|
+
const package_1 = require("../ser-des/package");
|
|
60
|
+
/** The ReqIF namespace (1.0.1) the DIN DKE SPEC 99200 examples target. */
|
|
61
|
+
exports.REQIF_NAMESPACE = 'http://www.omg.org/spec/ReqIF/20110401/reqif.xsd';
|
|
62
|
+
/** The REQ-IF-VERSION header value for that namespace. */
|
|
63
|
+
exports.REQIF_VERSION = '1.0';
|
|
64
|
+
/**
|
|
65
|
+
* The modality mapping (exact): shall → requirement, should →
|
|
66
|
+
* recommendation, may → permission. The empty obligation is the Primmel
|
|
67
|
+
* default (shall). Anything else maps to the profile's `undefined`
|
|
68
|
+
* value — visible in the RM tool, never silently promoted.
|
|
69
|
+
*/
|
|
70
|
+
exports.REQIF_MODALITY_BY_OBLIGATION = {
|
|
71
|
+
shall: 'requirement',
|
|
72
|
+
should: 'recommendation',
|
|
73
|
+
may: 'permission',
|
|
74
|
+
};
|
|
75
|
+
/** Maps a Primmel obligation facet to the ReqIF modality enum value. */
|
|
76
|
+
function reqifModality(obligation) {
|
|
77
|
+
if (!obligation) {
|
|
78
|
+
return 'requirement'; // shall is the Primmel default
|
|
79
|
+
}
|
|
80
|
+
return exports.REQIF_MODALITY_BY_OBLIGATION[obligation] ?? 'undefined';
|
|
81
|
+
}
|
|
82
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
83
|
+
// Fixed identifiers (datatypes, spec-types, attribute definitions).
|
|
84
|
+
// LONG-NAMEs of profile-compatible attributes match the profile
|
|
85
|
+
// verbatim; primmel.* names mark the extensions.
|
|
86
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
87
|
+
const DT_STRING_16384 = 'primmel-dds-string-16384';
|
|
88
|
+
const DT_STRING_1024 = 'primmel-dds-string-1024';
|
|
89
|
+
const DT_STRING_64 = 'primmel-dds-string-64';
|
|
90
|
+
const DT_XHTML = 'primmel-ddx-xhtml';
|
|
91
|
+
const DT_MODALITY = 'primmel-dde-modality';
|
|
92
|
+
const DT_NORMATIVITY = 'primmel-dde-normativity';
|
|
93
|
+
const DT_OBJECT_KIND = 'primmel-dde-object-kind';
|
|
94
|
+
const EV_MODALITY = (v) => `primmel-ev-modality-${v}`;
|
|
95
|
+
const EV_NORMATIVITY = (v) => `primmel-ev-normativity-${v}`;
|
|
96
|
+
const EV_OBJECT_KIND = (v) => `primmel-ev-object-kind-${v}`;
|
|
97
|
+
const SOT_DOCUMENT = 'primmel-sot-document';
|
|
98
|
+
const SOT_HEADING = 'primmel-sot-heading';
|
|
99
|
+
const SOT_PROVISION = 'primmel-sot-provision';
|
|
100
|
+
const SRT_CROSS_REFERENCE = 'primmel-srt-cross-reference';
|
|
101
|
+
const ST_SPECIFICATION = 'primmel-st-specification-standard';
|
|
102
|
+
/** Attribute-definition refs, per owning spec-object type. */
|
|
103
|
+
const AD = {
|
|
104
|
+
document: {
|
|
105
|
+
text: 'primmel-adx-document-reqif.text',
|
|
106
|
+
docIdentifier: 'primmel-ads-document-bib.di.document-identifier',
|
|
107
|
+
unique: 'primmel-ads-document-ids.unique',
|
|
108
|
+
},
|
|
109
|
+
heading: {
|
|
110
|
+
chapterName: 'primmel-adx-heading-reqif.chaptername',
|
|
111
|
+
unique: 'primmel-ads-heading-ids.unique',
|
|
112
|
+
},
|
|
113
|
+
provision: {
|
|
114
|
+
text: 'primmel-adx-provision-reqif.text',
|
|
115
|
+
modality: 'primmel-ade-provision-obj.modality',
|
|
116
|
+
normativity: 'primmel-ade-provision-obj.normativity',
|
|
117
|
+
objectKind: 'primmel-ade-provision-primmel.object-kind',
|
|
118
|
+
clauseNumber: 'primmel-ads-provision-obj.clause-number',
|
|
119
|
+
docIdentifier: 'primmel-ads-provision-bib.di.document-identifier',
|
|
120
|
+
unique: 'primmel-ads-provision-ids.unique',
|
|
121
|
+
guidance: 'primmel-ads-provision-primmel.guidance',
|
|
122
|
+
verificationMethod: 'primmel-ads-provision-primmel.verification-method',
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
/** Escapes the five predefined XML entities (text and attribute safe). */
|
|
126
|
+
function escapeXml(s) {
|
|
127
|
+
return s
|
|
128
|
+
.replace(/&/g, '&')
|
|
129
|
+
.replace(/</g, '<')
|
|
130
|
+
.replace(/>/g, '>')
|
|
131
|
+
.replace(/"/g, '"')
|
|
132
|
+
.replace(/'/g, ''');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Slugs a Primmel id into an XML-attribute-safe identifier fragment:
|
|
136
|
+
* `/req/metrological/mpe` → `req-metrological-mpe`.
|
|
137
|
+
*/
|
|
138
|
+
function slug(id) {
|
|
139
|
+
const s = id
|
|
140
|
+
.replace(/^\/+/, '')
|
|
141
|
+
.replace(/[^A-Za-z0-9_-]+/g, '-')
|
|
142
|
+
.replace(/-+/g, '-')
|
|
143
|
+
.replace(/-$/, '');
|
|
144
|
+
return s === '' ? 'x' : s;
|
|
145
|
+
}
|
|
146
|
+
/** The class a requirement belongs to: the longest class id that is a
|
|
147
|
+
* path-prefix of the requirement id (`/req/a/b` holds `/req/a/b/c`).
|
|
148
|
+
* Null = the requirement sits at the document's top level. */
|
|
149
|
+
function requirementClassOf(requirementId, classIds) {
|
|
150
|
+
let best = null;
|
|
151
|
+
for (const c of classIds) {
|
|
152
|
+
if (requirementId.startsWith(c + '/')) {
|
|
153
|
+
if (best === null || c.length > best.length) {
|
|
154
|
+
best = c;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return best;
|
|
159
|
+
}
|
|
160
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
161
|
+
// Projection: Standard → the intermediate model.
|
|
162
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
163
|
+
/** Joins citation facets (clause, doc) into one "; "-separated value,
|
|
164
|
+
* deduped in first-citation order — repeated source blocks citing the
|
|
165
|
+
* same clause fragment collapse to one mention. */
|
|
166
|
+
function joinCitation(values) {
|
|
167
|
+
const seen = new Set();
|
|
168
|
+
const out = [];
|
|
169
|
+
for (const v of values) {
|
|
170
|
+
if (v && !seen.has(v)) {
|
|
171
|
+
seen.add(v);
|
|
172
|
+
out.push(v);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return out.join('; ');
|
|
176
|
+
}
|
|
177
|
+
/** All { doc, clause } fragments a requirement cites (sourceRefs first,
|
|
178
|
+
* falling back to the back-compat single `source`). */
|
|
179
|
+
function requirementSourceRefs(r) {
|
|
180
|
+
const refs = r.sourceRefs ?? (r.source ? [r.source] : []);
|
|
181
|
+
return refs.map(s => ({ doc: s.doc, clause: s.clause }));
|
|
182
|
+
}
|
|
183
|
+
function requirementSpecObject(r, identifier) {
|
|
184
|
+
const values = [
|
|
185
|
+
{ kind: 'xhtml', ref: AD.provision.text, text: r.statement },
|
|
186
|
+
{
|
|
187
|
+
kind: 'enum',
|
|
188
|
+
ref: AD.provision.modality,
|
|
189
|
+
values: [EV_MODALITY(reqifModality(r.obligation))],
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
kind: 'enum',
|
|
193
|
+
ref: AD.provision.normativity,
|
|
194
|
+
values: [EV_NORMATIVITY('normative')],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
kind: 'enum',
|
|
198
|
+
ref: AD.provision.objectKind,
|
|
199
|
+
values: [EV_OBJECT_KIND('requirement')],
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
const refs = requirementSourceRefs(r);
|
|
203
|
+
const clause = joinCitation(refs.map(s => s.clause));
|
|
204
|
+
if (clause) {
|
|
205
|
+
values.push({
|
|
206
|
+
kind: 'string',
|
|
207
|
+
ref: AD.provision.clauseNumber,
|
|
208
|
+
value: clause,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const doc = joinCitation(refs.map(s => s.doc));
|
|
212
|
+
if (doc) {
|
|
213
|
+
values.push({
|
|
214
|
+
kind: 'string',
|
|
215
|
+
ref: AD.provision.docIdentifier,
|
|
216
|
+
value: doc,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
values.push({ kind: 'string', ref: AD.provision.unique, value: r.id });
|
|
220
|
+
if (r.guidance) {
|
|
221
|
+
values.push({
|
|
222
|
+
kind: 'string',
|
|
223
|
+
ref: AD.provision.guidance,
|
|
224
|
+
value: r.guidance,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
if (r.verificationMethod) {
|
|
228
|
+
values.push({
|
|
229
|
+
kind: 'string',
|
|
230
|
+
ref: AD.provision.verificationMethod,
|
|
231
|
+
value: r.verificationMethod,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
identifier,
|
|
236
|
+
longName: r.name || r.id,
|
|
237
|
+
typeRef: SOT_PROVISION,
|
|
238
|
+
values,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function testSpecObject(t, identifier) {
|
|
242
|
+
return {
|
|
243
|
+
identifier,
|
|
244
|
+
longName: t.name || t.id,
|
|
245
|
+
typeRef: SOT_PROVISION,
|
|
246
|
+
values: [
|
|
247
|
+
{
|
|
248
|
+
kind: 'xhtml',
|
|
249
|
+
ref: AD.provision.text,
|
|
250
|
+
text: t.purpose || t.method || '',
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
kind: 'enum',
|
|
254
|
+
ref: AD.provision.modality,
|
|
255
|
+
values: [EV_MODALITY('undefined')],
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
kind: 'enum',
|
|
259
|
+
ref: AD.provision.normativity,
|
|
260
|
+
values: [EV_NORMATIVITY('normative')],
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
kind: 'enum',
|
|
264
|
+
ref: AD.provision.objectKind,
|
|
265
|
+
values: [EV_OBJECT_KIND('conformance-test')],
|
|
266
|
+
},
|
|
267
|
+
{ kind: 'string', ref: AD.provision.unique, value: t.id },
|
|
268
|
+
],
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function headingSpecObject(rc, identifier) {
|
|
272
|
+
const title = rc.title || rc.name || rc.id;
|
|
273
|
+
return {
|
|
274
|
+
identifier,
|
|
275
|
+
longName: title,
|
|
276
|
+
typeRef: SOT_HEADING,
|
|
277
|
+
values: [
|
|
278
|
+
{ kind: 'xhtml', ref: AD.heading.chapterName, text: title },
|
|
279
|
+
{ kind: 'string', ref: AD.heading.unique, value: rc.id },
|
|
280
|
+
],
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
284
|
+
// Rendering.
|
|
285
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
286
|
+
function renderAttrValue(v, ind) {
|
|
287
|
+
if (v.kind === 'xhtml') {
|
|
288
|
+
return (`${ind}<ATTRIBUTE-VALUE-XHTML>\n` +
|
|
289
|
+
`${ind}\t<THE-VALUE><xhtml:div><xhtml:p>${escapeXml(v.text)}</xhtml:p></xhtml:div></THE-VALUE>\n` +
|
|
290
|
+
`${ind}\t<DEFINITION><ATTRIBUTE-DEFINITION-XHTML-REF>${v.ref}</ATTRIBUTE-DEFINITION-XHTML-REF></DEFINITION>\n` +
|
|
291
|
+
`${ind}</ATTRIBUTE-VALUE-XHTML>`);
|
|
292
|
+
}
|
|
293
|
+
if (v.kind === 'string') {
|
|
294
|
+
return (`${ind}<ATTRIBUTE-VALUE-STRING THE-VALUE="${escapeXml(v.value)}">\n` +
|
|
295
|
+
`${ind}\t<DEFINITION><ATTRIBUTE-DEFINITION-STRING-REF>${v.ref}</ATTRIBUTE-DEFINITION-STRING-REF></DEFINITION>\n` +
|
|
296
|
+
`${ind}</ATTRIBUTE-VALUE-STRING>`);
|
|
297
|
+
}
|
|
298
|
+
return (`${ind}<ATTRIBUTE-VALUE-ENUMERATION>\n` +
|
|
299
|
+
`${ind}\t<VALUES>${v.values.map(e => `<ENUM-VALUE-REF>${e}</ENUM-VALUE-REF>`).join('')}</VALUES>\n` +
|
|
300
|
+
`${ind}\t<DEFINITION><ATTRIBUTE-DEFINITION-ENUMERATION-REF>${v.ref}</ATTRIBUTE-DEFINITION-ENUMERATION-REF></DEFINITION>\n` +
|
|
301
|
+
`${ind}</ATTRIBUTE-VALUE-ENUMERATION>`);
|
|
302
|
+
}
|
|
303
|
+
function renderSpecObject(o, now) {
|
|
304
|
+
return (`\t\t\t\t<SPEC-OBJECT IDENTIFIER="${o.identifier}" LAST-CHANGE="${now}" LONG-NAME="${escapeXml(o.longName)}">\n` +
|
|
305
|
+
`\t\t\t\t\t<VALUES>\n` +
|
|
306
|
+
o.values.map(v => renderAttrValue(v, '\t\t\t\t\t\t')).join('\n') +
|
|
307
|
+
`\n\t\t\t\t\t</VALUES>\n` +
|
|
308
|
+
`\t\t\t\t\t<TYPE><SPEC-OBJECT-TYPE-REF>${o.typeRef}</SPEC-OBJECT-TYPE-REF></TYPE>\n` +
|
|
309
|
+
`\t\t\t\t</SPEC-OBJECT>`);
|
|
310
|
+
}
|
|
311
|
+
function renderRelation(r, now) {
|
|
312
|
+
return (`\t\t\t\t<SPEC-RELATION IDENTIFIER="${r.identifier}" LAST-CHANGE="${now}" LONG-NAME="${r.kind}">\n` +
|
|
313
|
+
`\t\t\t\t\t<TARGET><SPEC-OBJECT-REF>${r.target}</SPEC-OBJECT-REF></TARGET>\n` +
|
|
314
|
+
`\t\t\t\t\t<SOURCE><SPEC-OBJECT-REF>${r.source}</SPEC-OBJECT-REF></SOURCE>\n` +
|
|
315
|
+
`\t\t\t\t\t<TYPE><SPEC-RELATION-TYPE-REF>${SRT_CROSS_REFERENCE}</SPEC-RELATION-TYPE-REF></TYPE>\n` +
|
|
316
|
+
`\t\t\t\t</SPEC-RELATION>`);
|
|
317
|
+
}
|
|
318
|
+
function renderHierarchy(node, identifier, now, ind) {
|
|
319
|
+
const children = node.children.length === 0
|
|
320
|
+
? `${ind}\t<CHILDREN/>\n`
|
|
321
|
+
: `${ind}\t<CHILDREN>\n` +
|
|
322
|
+
node.children
|
|
323
|
+
.map((c, i) => renderHierarchy(c, `${identifier}-${i + 1}`, now, ind + '\t\t'))
|
|
324
|
+
.join('\n') +
|
|
325
|
+
`\n${ind}\t</CHILDREN>\n`;
|
|
326
|
+
return (`${ind}<SPEC-HIERARCHY IDENTIFIER="${identifier}" LAST-CHANGE="${now}">\n` +
|
|
327
|
+
`${ind}\t<OBJECT><SPEC-OBJECT-REF>${node.objectIdentifier}</SPEC-OBJECT-REF></OBJECT>\n` +
|
|
328
|
+
children +
|
|
329
|
+
`${ind}</SPEC-HIERARCHY>`);
|
|
330
|
+
}
|
|
331
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
332
|
+
// The header note — the one-way / survive-vs-lost doctrine, shipped IN
|
|
333
|
+
// the exported document as its leading XML comment.
|
|
334
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
335
|
+
/**
|
|
336
|
+
* Sanitizes a value interpolated into the header note's XML comment:
|
|
337
|
+
* XML comments may not contain `--` (a package titled `R 99 -- the
|
|
338
|
+
* dashy package` would otherwise export malformed XML). `--` runs
|
|
339
|
+
* become an em dash — the punctuation the run stands for in prose.
|
|
340
|
+
*/
|
|
341
|
+
function xmlCommentSafe(s) {
|
|
342
|
+
return s.replace(/--+/g, '—');
|
|
343
|
+
}
|
|
344
|
+
function headerNote(packageId, packageTitle, stats) {
|
|
345
|
+
// XML comments may not contain "--"; keep to single hyphens in the
|
|
346
|
+
// static text and run interpolated values through xmlCommentSafe.
|
|
347
|
+
const n = (count, singular, plural) => `${count} ${count === 1 ? singular : plural}`;
|
|
348
|
+
return `<!--
|
|
349
|
+
ReqIF export of the Primmel package "${xmlCommentSafe(packageId)}" (${xmlCommentSafe(packageTitle)}).
|
|
350
|
+
Generated by \`primmel export reqif\` (primmel-ts, TODO.roadmap/27).
|
|
351
|
+
|
|
352
|
+
ONE-WAY PROJECTION. The Primmel package remains the single source of
|
|
353
|
+
truth; this document is a lossy projection for RM-tool ecosystems.
|
|
354
|
+
Re-imports are new-model suggestions, NEVER merges.
|
|
355
|
+
|
|
356
|
+
Profile: DIN DKE SPEC 99200 (ReqIF interpretation for public
|
|
357
|
+
standards, Release 1.3), ReqIF ${exports.REQIF_VERSION} (20110401 namespace),
|
|
358
|
+
followed where compatible.
|
|
359
|
+
|
|
360
|
+
SURVIVES the projection:
|
|
361
|
+
- provisions: one spec-object per requirement, per requirement
|
|
362
|
+
class (heading), and per conformance test; the package itself as
|
|
363
|
+
the document spec-object
|
|
364
|
+
- hierarchy: classes nest per their /req/... id paths, requirements
|
|
365
|
+
sit under their class, tests under a synthetic heading
|
|
366
|
+
- modality: shall -> requirement, should -> recommendation,
|
|
367
|
+
may -> permission (obj.modality)
|
|
368
|
+
- clause provenance: obj.clause-number + bib.di.document-identifier
|
|
369
|
+
- cross-references (spec-relations of type cross-reference, kind in
|
|
370
|
+
LONG-NAME): depends-on (requirement and class dependencies),
|
|
371
|
+
verifies (conformance-test targets), binds (bindings that name an
|
|
372
|
+
exported spec-object)
|
|
373
|
+
- guidance and verification method as inert text attributes
|
|
374
|
+
(primmel.guidance, primmel.verification-method)
|
|
375
|
+
|
|
376
|
+
LOST in the projection (absent from this document, by design):
|
|
377
|
+
- machine-checkable bindings (binds_to subject paths)
|
|
378
|
+
- OCL limit expressions and acceptance criteria
|
|
379
|
+
- quantities with units, typed parameters, applicability filters
|
|
380
|
+
- processes, forms, workflows, state machines, tables, formulas
|
|
381
|
+
|
|
382
|
+
Deviations from the profile: the primmel.* extension attributes and
|
|
383
|
+
the primmel.object-kind enum (requirement | conformance-test); the
|
|
384
|
+
synthetic "Conformance tests" heading; the modality enum carries only
|
|
385
|
+
the values this export mints; joined clause citations use a widened
|
|
386
|
+
(1024) string datatype; requirements outside any class sit top-level
|
|
387
|
+
(the profile nests every provision under a heading); leaf
|
|
388
|
+
SPEC-HIERARCHY nodes carry an explicit empty CHILDREN element (the
|
|
389
|
+
profile omits it).
|
|
390
|
+
|
|
391
|
+
Contents: ${n(stats.documents, 'document', 'documents')}, ${n(stats.requirementClasses, 'requirement class', 'requirement classes')}, ${n(stats.requirements, 'requirement', 'requirements')}, ${n(stats.conformanceTests, 'conformance test', 'conformance tests')}, ${n(stats.specRelations, 'spec-relation', 'spec-relations')}, ${n(stats.droppedReferences.length, 'dropped reference', 'dropped references')}${stats.unknownObligations > 0 ? `, ${n(stats.unknownObligations, 'unknown obligation (modality undefined)', 'unknown obligations (modality undefined)')}` : ''}.
|
|
392
|
+
-->`;
|
|
393
|
+
}
|
|
394
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
395
|
+
// The export itself.
|
|
396
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
397
|
+
/** Projects a loaded Standard into a ReqIF document. */
|
|
398
|
+
function exportStandardReqif(standard, options = {}) {
|
|
399
|
+
const now = options.now ?? new Date().toISOString();
|
|
400
|
+
const manifest = standard.packageManifest ?? null;
|
|
401
|
+
const packageId = manifest?.id ?? 'unknown-package';
|
|
402
|
+
const packageTitle = manifest?.title || manifest?.id || 'Primmel package';
|
|
403
|
+
const classes = standard.requirementClasses ?? [];
|
|
404
|
+
const requirements = standard.requirements ?? [];
|
|
405
|
+
const tests = standard.conformanceTests ?? [];
|
|
406
|
+
// ── spec-objects + the exported-id map ──
|
|
407
|
+
const objects = [];
|
|
408
|
+
const identifierById = new Map();
|
|
409
|
+
const usedIdentifiers = new Set();
|
|
410
|
+
const claimIdentifier = (id) => {
|
|
411
|
+
let candidate = `primmel-so-${slug(id)}`;
|
|
412
|
+
for (let n = 2; usedIdentifiers.has(candidate); n++) {
|
|
413
|
+
candidate = `primmel-so-${slug(id)}-${n}`;
|
|
414
|
+
}
|
|
415
|
+
usedIdentifiers.add(candidate);
|
|
416
|
+
return candidate;
|
|
417
|
+
};
|
|
418
|
+
const docIdentifier = `primmel-doc-${slug(packageId)}`;
|
|
419
|
+
usedIdentifiers.add(docIdentifier);
|
|
420
|
+
identifierById.set(packageId, docIdentifier);
|
|
421
|
+
const docObject = {
|
|
422
|
+
identifier: docIdentifier,
|
|
423
|
+
longName: packageTitle,
|
|
424
|
+
typeRef: SOT_DOCUMENT,
|
|
425
|
+
values: [
|
|
426
|
+
{
|
|
427
|
+
kind: 'xhtml',
|
|
428
|
+
ref: AD.document.text,
|
|
429
|
+
text: manifest?.description ?? '',
|
|
430
|
+
},
|
|
431
|
+
...(manifest?.baseUrn
|
|
432
|
+
? [
|
|
433
|
+
{
|
|
434
|
+
kind: 'string',
|
|
435
|
+
ref: AD.document.docIdentifier,
|
|
436
|
+
value: manifest.baseUrn,
|
|
437
|
+
},
|
|
438
|
+
]
|
|
439
|
+
: []),
|
|
440
|
+
{ kind: 'string', ref: AD.document.unique, value: packageId },
|
|
441
|
+
],
|
|
442
|
+
};
|
|
443
|
+
objects.push(docObject);
|
|
444
|
+
for (const rc of classes) {
|
|
445
|
+
const identifier = claimIdentifier(rc.id);
|
|
446
|
+
identifierById.set(rc.id, identifier);
|
|
447
|
+
objects.push(headingSpecObject(rc, identifier));
|
|
448
|
+
}
|
|
449
|
+
let unknownObligations = 0;
|
|
450
|
+
for (const r of requirements) {
|
|
451
|
+
const identifier = claimIdentifier(r.id);
|
|
452
|
+
identifierById.set(r.id, identifier);
|
|
453
|
+
objects.push(requirementSpecObject(r, identifier));
|
|
454
|
+
if (r.obligation && !(r.obligation in exports.REQIF_MODALITY_BY_OBLIGATION)) {
|
|
455
|
+
// Exports with modality `undefined` (reqifModality) — counted so
|
|
456
|
+
// the typo is visible in stats, never silently promoted.
|
|
457
|
+
unknownObligations++;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
for (const t of tests) {
|
|
461
|
+
const identifier = claimIdentifier(t.id);
|
|
462
|
+
identifierById.set(t.id, identifier);
|
|
463
|
+
objects.push(testSpecObject(t, identifier));
|
|
464
|
+
}
|
|
465
|
+
const TESTS_HEADING_ID = 'primmel-hdr-conformance-tests';
|
|
466
|
+
if (tests.length > 0) {
|
|
467
|
+
usedIdentifiers.add(TESTS_HEADING_ID);
|
|
468
|
+
objects.push({
|
|
469
|
+
identifier: TESTS_HEADING_ID,
|
|
470
|
+
longName: 'Conformance tests',
|
|
471
|
+
typeRef: SOT_HEADING,
|
|
472
|
+
values: [
|
|
473
|
+
{
|
|
474
|
+
kind: 'xhtml',
|
|
475
|
+
ref: AD.heading.chapterName,
|
|
476
|
+
text: 'Conformance tests',
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
kind: 'string',
|
|
480
|
+
ref: AD.heading.unique,
|
|
481
|
+
value: 'primmel:conformance-tests',
|
|
482
|
+
},
|
|
483
|
+
],
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
// ── spec-relations (deduped; dangling refs dropped, recorded) ──
|
|
487
|
+
const relations = [];
|
|
488
|
+
const droppedReferences = [];
|
|
489
|
+
const seenRelation = new Set();
|
|
490
|
+
const addRelation = (owner, ref, kind) => {
|
|
491
|
+
const source = identifierById.get(owner);
|
|
492
|
+
const target = identifierById.get(ref);
|
|
493
|
+
if (source === undefined || target === undefined) {
|
|
494
|
+
droppedReferences.push(`${owner} -> ${ref} (${kind})`);
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
const key = `${source}|${target}|${kind}`;
|
|
498
|
+
if (seenRelation.has(key)) {
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
seenRelation.add(key);
|
|
502
|
+
relations.push({
|
|
503
|
+
identifier: `primmel-sr-${relations.length + 1}`,
|
|
504
|
+
kind,
|
|
505
|
+
source,
|
|
506
|
+
target,
|
|
507
|
+
});
|
|
508
|
+
};
|
|
509
|
+
for (const rc of classes) {
|
|
510
|
+
for (const dep of rc.dependencies ?? []) {
|
|
511
|
+
addRelation(rc.id, dep, 'depends-on');
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
for (const r of requirements) {
|
|
515
|
+
for (const dep of r.dependencies ?? []) {
|
|
516
|
+
addRelation(r.id, dep, 'depends-on');
|
|
517
|
+
}
|
|
518
|
+
// Bindings: binds_to paths and limit uses that name an exported
|
|
519
|
+
// spec-object become binds relations. Unexported refs in the
|
|
520
|
+
// `/`-addressed id space (meant to name a model element, e.g. an
|
|
521
|
+
// upstream /req/... id) are recorded as dropped; subject-chain
|
|
522
|
+
// paths (sample.x, formula:…, table:…) stay silent — they are LOST
|
|
523
|
+
// (the machine-checkable binding does not survive), not dropped.
|
|
524
|
+
const bindings = [...(r.bindsTo ?? []), ...(r.limit?.uses ?? [])];
|
|
525
|
+
for (const b of bindings) {
|
|
526
|
+
if (identifierById.has(b) || b.startsWith('/')) {
|
|
527
|
+
addRelation(r.id, b, 'binds');
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
for (const t of tests) {
|
|
532
|
+
for (const target of t.targets ?? []) {
|
|
533
|
+
addRelation(t.id, target, 'verifies');
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// ── the hierarchy ──
|
|
537
|
+
const classIds = classes.map(c => c.id);
|
|
538
|
+
const nodeByClassId = new Map();
|
|
539
|
+
for (const rc of classes) {
|
|
540
|
+
nodeByClassId.set(rc.id, {
|
|
541
|
+
objectIdentifier: identifierById.get(rc.id),
|
|
542
|
+
children: [],
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
// Class nesting: a class's parent is the longest OTHER class id that
|
|
546
|
+
// path-prefixes it (R 60's classes are flat — all top level).
|
|
547
|
+
const topLevel = [
|
|
548
|
+
{ objectIdentifier: docIdentifier, children: [] },
|
|
549
|
+
];
|
|
550
|
+
for (const rc of classes) {
|
|
551
|
+
const parent = requirementClassOf(rc.id, classIds.filter(c => c !== rc.id));
|
|
552
|
+
const node = nodeByClassId.get(rc.id);
|
|
553
|
+
if (parent !== null) {
|
|
554
|
+
nodeByClassId.get(parent).children.push(node);
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
topLevel.push(node);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
for (const r of requirements) {
|
|
561
|
+
const owner = requirementClassOf(r.id, classIds);
|
|
562
|
+
const node = {
|
|
563
|
+
objectIdentifier: identifierById.get(r.id),
|
|
564
|
+
children: [],
|
|
565
|
+
};
|
|
566
|
+
if (owner !== null) {
|
|
567
|
+
nodeByClassId.get(owner).children.push(node);
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
topLevel.push(node);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
if (tests.length > 0) {
|
|
574
|
+
topLevel.push({
|
|
575
|
+
objectIdentifier: TESTS_HEADING_ID,
|
|
576
|
+
children: tests.map(t => ({
|
|
577
|
+
objectIdentifier: identifierById.get(t.id),
|
|
578
|
+
children: [],
|
|
579
|
+
})),
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
const stats = {
|
|
583
|
+
documents: 1,
|
|
584
|
+
requirementClasses: classes.length,
|
|
585
|
+
requirements: requirements.length,
|
|
586
|
+
conformanceTests: tests.length,
|
|
587
|
+
specRelations: relations.length,
|
|
588
|
+
droppedReferences,
|
|
589
|
+
unknownObligations,
|
|
590
|
+
};
|
|
591
|
+
// ── render ──
|
|
592
|
+
const enumValues = (dt, name, values, ev) => `\t\t\t\t<DATATYPE-DEFINITION-ENUMERATION IDENTIFIER="${dt}" LAST-CHANGE="${now}" LONG-NAME="${name}">\n` +
|
|
593
|
+
`\t\t\t\t\t<SPECIFIED-VALUES>\n` +
|
|
594
|
+
values
|
|
595
|
+
// PROPERTIES/EMBEDDED-VALUE is a required child of ENUM-VALUE in
|
|
596
|
+
// the ReqIF XSD (KEY = the 1-based position, per the profile's
|
|
597
|
+
// examples; OTHER-CONTENT left empty).
|
|
598
|
+
.map((v, i) => `\t\t\t\t\t\t<ENUM-VALUE IDENTIFIER="${ev(v)}" LAST-CHANGE="${now}" LONG-NAME="${v}">\n` +
|
|
599
|
+
`\t\t\t\t\t\t\t<PROPERTIES><EMBEDDED-VALUE KEY="${i + 1}" OTHER-CONTENT=""/></PROPERTIES>\n` +
|
|
600
|
+
`\t\t\t\t\t\t</ENUM-VALUE>`)
|
|
601
|
+
.join('\n') +
|
|
602
|
+
`\n\t\t\t\t\t</SPECIFIED-VALUES>\n` +
|
|
603
|
+
`\t\t\t\t</DATATYPE-DEFINITION-ENUMERATION>`;
|
|
604
|
+
const stringAttr = (id, name, dt) => `\t\t\t\t\t\t<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" IS-EDITABLE="true">\n` +
|
|
605
|
+
`\t\t\t\t\t\t\t<TYPE><DATATYPE-DEFINITION-STRING-REF>${dt}</DATATYPE-DEFINITION-STRING-REF></TYPE>\n` +
|
|
606
|
+
`\t\t\t\t\t\t</ATTRIBUTE-DEFINITION-STRING>`;
|
|
607
|
+
const xhtmlAttr = (id, name) => `\t\t\t\t\t\t<ATTRIBUTE-DEFINITION-XHTML IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" IS-EDITABLE="true">\n` +
|
|
608
|
+
`\t\t\t\t\t\t\t<TYPE><DATATYPE-DEFINITION-XHTML-REF>${DT_XHTML}</DATATYPE-DEFINITION-XHTML-REF></TYPE>\n` +
|
|
609
|
+
`\t\t\t\t\t\t</ATTRIBUTE-DEFINITION-XHTML>`;
|
|
610
|
+
const enumAttr = (id, name, dt) => `\t\t\t\t\t\t<ATTRIBUTE-DEFINITION-ENUMERATION IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" IS-EDITABLE="true" MULTI-VALUED="false">\n` +
|
|
611
|
+
`\t\t\t\t\t\t\t<TYPE><DATATYPE-DEFINITION-ENUMERATION-REF>${dt}</DATATYPE-DEFINITION-ENUMERATION-REF></TYPE>\n` +
|
|
612
|
+
`\t\t\t\t\t\t</ATTRIBUTE-DEFINITION-ENUMERATION>`;
|
|
613
|
+
const specObjectType = (id, name, desc, attrs) => `\t\t\t\t<SPEC-OBJECT-TYPE IDENTIFIER="${id}" LAST-CHANGE="${now}" LONG-NAME="${name}" DESC="${desc}">\n` +
|
|
614
|
+
`\t\t\t\t\t<SPEC-ATTRIBUTES>\n` +
|
|
615
|
+
attrs.join('\n') +
|
|
616
|
+
`\n\t\t\t\t\t</SPEC-ATTRIBUTES>\n` +
|
|
617
|
+
`\t\t\t\t</SPEC-OBJECT-TYPE>`;
|
|
618
|
+
const specificationId = `primmel-spec-${slug(packageId)}`;
|
|
619
|
+
const xml = `<?xml version="1.0" encoding="UTF-8"?>\n` +
|
|
620
|
+
headerNote(packageId, packageTitle, stats) +
|
|
621
|
+
`\n<REQ-IF xmlns="${exports.REQIF_NAMESPACE}" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="${exports.REQIF_NAMESPACE} ${exports.REQIF_NAMESPACE}">\n` +
|
|
622
|
+
`\t<THE-HEADER>\n` +
|
|
623
|
+
`\t\t<REQ-IF-HEADER IDENTIFIER="primmel-reqif-${slug(packageId)}">\n` +
|
|
624
|
+
`\t\t\t<CREATION-TIME>${now}</CREATION-TIME>\n` +
|
|
625
|
+
`\t\t\t<REQ-IF-TOOL-ID>primmel export reqif</REQ-IF-TOOL-ID>\n` +
|
|
626
|
+
`\t\t\t<REQ-IF-VERSION>${exports.REQIF_VERSION}</REQ-IF-VERSION>\n` +
|
|
627
|
+
`\t\t\t<SOURCE-TOOL-ID>primmel-ts</SOURCE-TOOL-ID>\n` +
|
|
628
|
+
`\t\t\t<TITLE>${escapeXml(packageTitle)}</TITLE>\n` +
|
|
629
|
+
`\t\t</REQ-IF-HEADER>\n` +
|
|
630
|
+
`\t</THE-HEADER>\n` +
|
|
631
|
+
`\t<CORE-CONTENT>\n` +
|
|
632
|
+
`\t\t<REQ-IF-CONTENT>\n` +
|
|
633
|
+
`\t\t\t<DATATYPES>\n` +
|
|
634
|
+
`\t\t\t\t<DATATYPE-DEFINITION-STRING IDENTIFIER="${DT_STRING_16384}" LAST-CHANGE="${now}" LONG-NAME="string-16384" MAX-LENGTH="16384"/>\n` +
|
|
635
|
+
`\t\t\t\t<DATATYPE-DEFINITION-STRING IDENTIFIER="${DT_STRING_1024}" LAST-CHANGE="${now}" LONG-NAME="string-1024" MAX-LENGTH="1024"/>\n` +
|
|
636
|
+
`\t\t\t\t<DATATYPE-DEFINITION-STRING IDENTIFIER="${DT_STRING_64}" LAST-CHANGE="${now}" LONG-NAME="string-64" MAX-LENGTH="64"/>\n` +
|
|
637
|
+
`\t\t\t\t<DATATYPE-DEFINITION-XHTML IDENTIFIER="${DT_XHTML}" LAST-CHANGE="${now}" LONG-NAME="xhtml"/>\n` +
|
|
638
|
+
enumValues(DT_MODALITY, 'modality', ['requirement', 'recommendation', 'permission', 'undefined'], EV_MODALITY) +
|
|
639
|
+
`\n` +
|
|
640
|
+
enumValues(DT_NORMATIVITY, 'normativity', ['normative', 'informative'], EV_NORMATIVITY) +
|
|
641
|
+
`\n` +
|
|
642
|
+
enumValues(DT_OBJECT_KIND, 'primmel.object-kind', ['requirement', 'conformance-test'], EV_OBJECT_KIND) +
|
|
643
|
+
`\n\t\t\t</DATATYPES>\n` +
|
|
644
|
+
`\t\t\t<SPEC-TYPES>\n` +
|
|
645
|
+
specObjectType(SOT_DOCUMENT, 'document', 'Documents', [
|
|
646
|
+
xhtmlAttr(AD.document.text, 'ReqIF.Text'),
|
|
647
|
+
stringAttr(AD.document.docIdentifier, 'bib.di.document-identifier', DT_STRING_1024),
|
|
648
|
+
stringAttr(AD.document.unique, 'ids.unique', DT_STRING_1024),
|
|
649
|
+
]) +
|
|
650
|
+
`\n` +
|
|
651
|
+
specObjectType(SOT_HEADING, 'heading', 'Clause and Section Headers', [
|
|
652
|
+
xhtmlAttr(AD.heading.chapterName, 'ReqIF.ChapterName'),
|
|
653
|
+
stringAttr(AD.heading.unique, 'ids.unique', DT_STRING_1024),
|
|
654
|
+
]) +
|
|
655
|
+
`\n` +
|
|
656
|
+
specObjectType(SOT_PROVISION, 'provision', 'Governing and assertional provisions', [
|
|
657
|
+
xhtmlAttr(AD.provision.text, 'ReqIF.Text'),
|
|
658
|
+
enumAttr(AD.provision.modality, 'obj.modality', DT_MODALITY),
|
|
659
|
+
enumAttr(AD.provision.normativity, 'obj.normativity', DT_NORMATIVITY),
|
|
660
|
+
enumAttr(AD.provision.objectKind, 'primmel.object-kind', DT_OBJECT_KIND),
|
|
661
|
+
stringAttr(AD.provision.clauseNumber, 'obj.clause-number', DT_STRING_1024),
|
|
662
|
+
stringAttr(AD.provision.docIdentifier, 'bib.di.document-identifier', DT_STRING_1024),
|
|
663
|
+
stringAttr(AD.provision.unique, 'ids.unique', DT_STRING_1024),
|
|
664
|
+
stringAttr(AD.provision.guidance, 'primmel.guidance', DT_STRING_16384),
|
|
665
|
+
stringAttr(AD.provision.verificationMethod, 'primmel.verification-method', DT_STRING_64),
|
|
666
|
+
]) +
|
|
667
|
+
`\n` +
|
|
668
|
+
`\t\t\t\t<SPEC-RELATION-TYPE IDENTIFIER="${SRT_CROSS_REFERENCE}" LAST-CHANGE="${now}" LONG-NAME="cross-reference" DESC="Internal document reference"/>\n` +
|
|
669
|
+
`\t\t\t\t<SPECIFICATION-TYPE IDENTIFIER="${ST_SPECIFICATION}" LAST-CHANGE="${now}" LONG-NAME="specification-standard" DESC="Standards Document">\n` +
|
|
670
|
+
`\t\t\t\t\t<SPEC-ATTRIBUTES/>\n` +
|
|
671
|
+
`\t\t\t\t</SPECIFICATION-TYPE>\n` +
|
|
672
|
+
`\t\t\t</SPEC-TYPES>\n` +
|
|
673
|
+
`\t\t\t<SPEC-OBJECTS>\n` +
|
|
674
|
+
objects.map(o => renderSpecObject(o, now)).join('\n') +
|
|
675
|
+
`\n\t\t\t</SPEC-OBJECTS>\n` +
|
|
676
|
+
`\t\t\t<SPEC-RELATIONS>\n` +
|
|
677
|
+
relations.map(r => renderRelation(r, now)).join('\n') +
|
|
678
|
+
`\n\t\t\t</SPEC-RELATIONS>\n` +
|
|
679
|
+
`\t\t\t<SPECIFICATIONS>\n` +
|
|
680
|
+
`\t\t\t\t<SPECIFICATION IDENTIFIER="${specificationId}" LAST-CHANGE="${now}" LONG-NAME="${escapeXml(packageTitle)}">\n` +
|
|
681
|
+
`\t\t\t\t\t<TYPE><SPECIFICATION-TYPE-REF>${ST_SPECIFICATION}</SPECIFICATION-TYPE-REF></TYPE>\n` +
|
|
682
|
+
`\t\t\t\t\t<CHILDREN>\n` +
|
|
683
|
+
topLevel
|
|
684
|
+
.map((n, i) => renderHierarchy(n, `primmel-sh-${i + 1}`, now, '\t\t\t\t\t\t'))
|
|
685
|
+
.join('\n') +
|
|
686
|
+
`\n\t\t\t\t\t</CHILDREN>\n` +
|
|
687
|
+
`\t\t\t\t</SPECIFICATION>\n` +
|
|
688
|
+
`\t\t\t</SPECIFICATIONS>\n` +
|
|
689
|
+
`\t\t</REQ-IF-CONTENT>\n` +
|
|
690
|
+
`\t</CORE-CONTENT>\n` +
|
|
691
|
+
`</REQ-IF>\n`;
|
|
692
|
+
return { xml, stats };
|
|
693
|
+
}
|
|
694
|
+
/**
|
|
695
|
+
* Loads the package at `dir` (single directory — the CLI's `check`
|
|
696
|
+
* default; `uses` composition needs a locator and stays a punt) and
|
|
697
|
+
* projects it into a ReqIF document.
|
|
698
|
+
*/
|
|
699
|
+
function exportPackageReqif(dir, options = {}) {
|
|
700
|
+
const { standard } = (0, package_1.loadPackageWithIssues)(dir);
|
|
701
|
+
return exportStandardReqif(standard, options);
|
|
702
|
+
}
|
|
703
|
+
//# sourceMappingURL=reqif.js.map
|