@blockml/parser 0.9.0 → 0.9.2

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.
Files changed (48) hide show
  1. package/blocks/org/blockml/bml/compiler/parser/Library.bml +4 -1
  2. package/blocks/org/blockml/bml/compiler/parser/capability/ContainsUnescapedInterpolation.bml +53 -0
  3. package/blocks/org/blockml/bml/compiler/parser/capability/ParseDirectives.bml +2 -1
  4. package/blocks/org/blockml/bml/compiler/parser/capability/ParseGenericArgumentList.bml +57 -0
  5. package/blocks/org/blockml/bml/compiler/parser/capability/ParseGenericsBinding.bml +58 -0
  6. package/blocks/org/blockml/bml/compiler/parser/capability/ParseMemberValue.bml +14 -1
  7. package/blocks/org/blockml/bml/compiler/parser/config/MapTimeDiagnosticCodes.bml +1 -1
  8. package/blocks/org/blockml/bml/compiler/parser/documentation/ArchitectureOverview.bml +1 -1
  9. package/blocks/org/blockml/bml/compiler/parser/documentation/AttributeClassification.bml +1 -1
  10. package/blocks/org/blockml/bml/compiler/parser/documentation/Diagnostics.bml +1 -0
  11. package/blocks/org/blockml/bml/compiler/parser/documentation/ExpressionCapture.bml +3 -1
  12. package/blocks/org/blockml/bml/compiler/parser/documentation/PublicApi.bml +4 -0
  13. package/blocks/org/blockml/bml/compiler/parser/map/MapContext.bml +3 -0
  14. package/blocks/org/blockml/bml/compiler/parser/map/MapContextOptions.bml +3 -0
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/map/context.d.ts +3 -1
  20. package/dist/map/context.d.ts.map +1 -1
  21. package/dist/map/context.js +3 -0
  22. package/dist/map/context.js.map +1 -1
  23. package/dist/map/directives.d.ts +28 -1
  24. package/dist/map/directives.d.ts.map +1 -1
  25. package/dist/map/directives.js +54 -3
  26. package/dist/map/directives.js.map +1 -1
  27. package/dist/map/map-block.d.ts +2 -2
  28. package/dist/map/map-block.d.ts.map +1 -1
  29. package/dist/map/map-block.js +104 -9
  30. package/dist/map/map-block.js.map +1 -1
  31. package/dist/map/map-composition.d.ts +10 -1
  32. package/dist/map/map-composition.d.ts.map +1 -1
  33. package/dist/map/map-composition.js +28 -13
  34. package/dist/map/map-composition.js.map +1 -1
  35. package/dist/map/member-value.d.ts +3 -1
  36. package/dist/map/member-value.d.ts.map +1 -1
  37. package/dist/map/member-value.js +49 -25
  38. package/dist/map/member-value.js.map +1 -1
  39. package/dist/map/structural.d.ts.map +1 -1
  40. package/dist/map/structural.js +3 -1
  41. package/dist/map/structural.js.map +1 -1
  42. package/dist/map/type-expression.d.ts +17 -0
  43. package/dist/map/type-expression.d.ts.map +1 -1
  44. package/dist/map/type-expression.js +32 -2
  45. package/dist/map/type-expression.js.map +1 -1
  46. package/dist/parse.js +1 -1
  47. package/dist/parse.js.map +1 -1
  48. package/package.json +3 -3
@@ -43,7 +43,7 @@
43
43
  (@blockml/bom). Membership is defined exclusively by this blocks list.
44
44
  </documentation>
45
45
 
46
- <version>0.9.0</version>
46
+ <version>0.9.2</version>
47
47
 
48
48
  <language>
49
49
  <English />
@@ -96,11 +96,14 @@
96
96
  <parcap:MapTypeReferenceEntityInstance />
97
97
  <parcap:BuildSubBlockIndex />
98
98
  <parcap:ParseTypeExpression />
99
+ <parcap:ParseGenericArgumentList />
99
100
  <parcap:InferCardinality />
100
101
  <parcap:TypeExpressionToString />
101
102
  <parcap:ParseMemberValue />
103
+ <parcap:ContainsUnescapedInterpolation />
102
104
  <parcap:ExpressionFromRaw />
103
105
  <parcap:ParseDirectives />
106
+ <parcap:ParseGenericsBinding />
104
107
  <parcap:ParseBmlMeta />
105
108
  <parcap:ParseVisibilityFromName />
106
109
  <parcap:VisibilityPrefix />
@@ -0,0 +1,53 @@
1
+ <!--
2
+ Parser Capability — ContainsUnescapedInterpolation
3
+ FQN: org.blockml.bml.compiler.parser.capability.ContainsUnescapedInterpolation
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcommon="org.blockml.bml.bom.common"
15
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
16
+ xmlns:bomdoc="org.blockml.bml.bom.document"
17
+ xmlns:bomtype="org.blockml.bml.bom.type"
18
+ xmlns:bomvalue="org.blockml.bml.bom.value"
19
+ xmlns:core="org.blockml.bml.core"
20
+ xmlns:def="org.blockml.bml.definition"
21
+ xmlns:parser="org.blockml.bml.compiler.parser"
22
+ xmlns:parcap="org.blockml.bml.compiler.parser.capability"
23
+ xmlns:parconfig="org.blockml.bml.compiler.parser.config"
24
+ xmlns:pardocumentation="org.blockml.bml.compiler.parser.documentation"
25
+ xmlns:parmap="org.blockml.bml.compiler.parser.map"
26
+ xmlns:type="org.blockml.bml.type"
27
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
28
+ xmlns:bomcap="org.blockml.bml.bom.capability"
29
+ xmlns:serdocumentation="org.blockml.bml.compiler.serializer.documentation"
30
+ xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
31
+
32
+ <name>ContainsUnescapedInterpolation</name>
33
+ <type>parcap:ContainsUnescapedInterpolation</type>
34
+ <baseType>core:Capability</baseType>
35
+ <is>Detect unescaped ${…} interpolation in raw text</is>
36
+
37
+ <documentation>True when raw contains ${ not preceded by a backslash. Used by ParseMemberValue and ParseDirectives to choose InterpolatedTextValue over a JSON-like literal.</documentation>
38
+
39
+ <references>
40
+ <see type="pardocumentation:ExpressionCapture" relation="SeeAlso" />
41
+ <see type="parcap:ParseMemberValue" relation="SeeAlso" />
42
+ </references>
43
+
44
+ <properties>
45
+ <raw type="type:Text">
46
+ <documentation>raw. TS type: type:Text. (required)</documentation>
47
+ </raw>
48
+ <result type="type:Boolean">
49
+ <documentation>result. TS type: type:Boolean. (required)</documentation>
50
+ </result>
51
+ </properties>
52
+
53
+ </block>
@@ -34,7 +34,8 @@
34
34
  <baseType>core:Capability</baseType>
35
35
  <is>Parse bml:each/if/unless/with directive attributes</is>
36
36
 
37
- <documentation>Parse bml:each/if/unless/with directive attributes</documentation>
37
+ <documentation>Parse bml:each/if/unless/with directive attributes.
38
+ bml:generics is composition meta (ParseGenericsBinding), not a flow-control directive.</documentation>
38
39
 
39
40
  <references>
40
41
  <see type="pardocumentation:AttributeClassification" relation="SeeAlso" />
@@ -0,0 +1,57 @@
1
+ <!--
2
+ Parser Capability — ParseGenericArgumentList
3
+ FQN: org.blockml.bml.compiler.parser.capability.ParseGenericArgumentList
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcommon="org.blockml.bml.bom.common"
15
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
16
+ xmlns:bomdoc="org.blockml.bml.bom.document"
17
+ xmlns:bomtype="org.blockml.bml.bom.type"
18
+ xmlns:bomvalue="org.blockml.bml.bom.value"
19
+ xmlns:core="org.blockml.bml.core"
20
+ xmlns:def="org.blockml.bml.definition"
21
+ xmlns:parser="org.blockml.bml.compiler.parser"
22
+ xmlns:parcap="org.blockml.bml.compiler.parser.capability"
23
+ xmlns:parconfig="org.blockml.bml.compiler.parser.config"
24
+ xmlns:pardocumentation="org.blockml.bml.compiler.parser.documentation"
25
+ xmlns:parmap="org.blockml.bml.compiler.parser.map"
26
+ xmlns:type="org.blockml.bml.type"
27
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
28
+ xmlns:bomcap="org.blockml.bml.bom.capability"
29
+ xmlns:serdocumentation="org.blockml.bml.compiler.serializer.documentation"
30
+ xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
31
+
32
+ <name>ParseGenericArgumentList</name>
33
+ <type>parcap:ParseGenericArgumentList</type>
34
+ <baseType>core:Capability</baseType>
35
+ <is>Parse a parenthesized TypeExpression list for bml:generics</is>
36
+
37
+ <documentation>Parse a parenthesized TypeExpression list for bml:generics.
38
+ Outer parentheses are required. Reuses the TypeExpression parser used by
39
+ baseType generic applications, without a leading type name.</documentation>
40
+
41
+ <references>
42
+ <see type="parcap:ParseTypeExpression" relation="SeeAlso" />
43
+ </references>
44
+
45
+ <properties>
46
+ <raw type="type:Text">
47
+ <documentation>raw. TS type: type:Text. (required)</documentation>
48
+ </raw>
49
+ <bindings type="type:Text">
50
+ <documentation>xmlns prefix bindings. (required)</documentation>
51
+ </bindings>
52
+ <arguments type="bomtype:TypeExpression[]">
53
+ <documentation>arguments. TS type: bomtype:TypeExpression[]. (required)</documentation>
54
+ </arguments>
55
+ </properties>
56
+
57
+ </block>
@@ -0,0 +1,58 @@
1
+ <!--
2
+ Parser Capability — ParseGenericsBinding
3
+ FQN: org.blockml.bml.compiler.parser.capability.ParseGenericsBinding
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcommon="org.blockml.bml.bom.common"
15
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
16
+ xmlns:bomdoc="org.blockml.bml.bom.document"
17
+ xmlns:bomtype="org.blockml.bml.bom.type"
18
+ xmlns:bomvalue="org.blockml.bml.bom.value"
19
+ xmlns:core="org.blockml.bml.core"
20
+ xmlns:def="org.blockml.bml.definition"
21
+ xmlns:parser="org.blockml.bml.compiler.parser"
22
+ xmlns:parcap="org.blockml.bml.compiler.parser.capability"
23
+ xmlns:parconfig="org.blockml.bml.compiler.parser.config"
24
+ xmlns:pardocumentation="org.blockml.bml.compiler.parser.documentation"
25
+ xmlns:parmap="org.blockml.bml.compiler.parser.map"
26
+ xmlns:type="org.blockml.bml.type"
27
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
28
+ xmlns:bomcap="org.blockml.bml.bom.capability"
29
+ xmlns:serdocumentation="org.blockml.bml.compiler.serializer.documentation"
30
+ xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
31
+
32
+ <name>ParseGenericsBinding</name>
33
+ <type>parcap:ParseGenericsBinding</type>
34
+ <baseType>core:Capability</baseType>
35
+ <is>Parse bml:generics attribute or child element into GenericsBinding</is>
36
+
37
+ <documentation>Parse bml:generics as attribute or child element. Attribute form wins.
38
+ Stores lossless raw plus parsed TypeExpression arguments when parentheses
39
+ are present and well-formed.</documentation>
40
+
41
+ <references>
42
+ <see type="parcap:ParseGenericArgumentList" relation="SeeAlso" />
43
+ <see type="pardocumentation:AttributeClassification" relation="SeeAlso" />
44
+ </references>
45
+
46
+ <properties>
47
+ <element type="parmap:XmlDomNode">
48
+ <documentation>element. TS type: parmap:XmlDomNode. (required)</documentation>
49
+ </element>
50
+ <ctx type="parmap:MapContext">
51
+ <documentation>ctx. TS type: parmap:MapContext. (required)</documentation>
52
+ </ctx>
53
+ <binding type="bomcomp:GenericsBinding">
54
+ <documentation>binding. TS type: bomcomp:GenericsBinding. (optional)</documentation>
55
+ </binding>
56
+ </properties>
57
+
58
+ </block>
@@ -34,7 +34,20 @@
34
34
  <baseType>core:Capability</baseType>
35
35
  <is>Parse attribute/element value to MemberValue</is>
36
36
 
37
- <documentation>Parse attribute/element value to MemberValue</documentation>
37
+ <documentation>
38
+ Parse attribute/element value to MemberValue.
39
+
40
+ Always classifies a whole `${ … }` as ExpressionValue and unescaped `${` in
41
+ running text as InterpolatedTextValue. JSON arrays/objects stay structural
42
+ list/struct tokenization.
43
+
44
+ Without `ctx.parseValue` (library bootstrap): Boolean and number heuristics
45
+ (Text / Integer / Boolean / TypeIdentifier) remain.
46
+
47
+ With the host hook: scalars go through parseValue only. Success stores the
48
+ host value. Failure keeps the authored string and reports BML_INVALID_VALUE.
49
+ Skip keeps the authored string — no Boolean/number coercion.
50
+ </documentation>
38
51
 
39
52
  <references>
40
53
  <see type="pardocumentation:ExpressionCapture" relation="SeeAlso" />
@@ -38,7 +38,7 @@
38
38
 
39
39
  <properties>
40
40
  <codes type="type:Text[]">
41
- <documentation>Ordered: BML_UNSUPPORTED_FORMAT, BML_MALFORMED_XML, BML_MISSING_ROOT, BML_INVALID_ROOT, BML_MAP_ERROR, BML_UNKNOWN_NAMESPACE_PREFIX, BML_UNQUALIFIED_BLOCK_REFERENCE, BML_UNKNOWN_TYPE, BML_INVALID_TYPE_REFERENCE, BML_UNKNOWN_ELEMENT, BML_UNKNOWN_ATTRIBUTE, BML_UNKNOWN_DIRECTIVE, BML_STANDALONE_COMPOSITION, BML_NESTED_COMPOSITION, BML_DUPLICATE_COMPOSITION, BML_DUPLICATE_PROPERTY_VALUE, BML_UNEXPECTED_TEXT (required)</documentation>
41
+ <documentation>Ordered: BML_UNSUPPORTED_FORMAT, BML_MALFORMED_XML, BML_MISSING_ROOT, BML_INVALID_ROOT, BML_MAP_ERROR, BML_UNKNOWN_NAMESPACE_PREFIX, BML_UNQUALIFIED_BLOCK_REFERENCE, BML_UNKNOWN_TYPE, BML_INVALID_TYPE_REFERENCE, BML_UNKNOWN_ELEMENT, BML_UNKNOWN_ATTRIBUTE, BML_UNKNOWN_DIRECTIVE, BML_STANDALONE_COMPOSITION, BML_NESTED_COMPOSITION, BML_DUPLICATE_COMPOSITION, BML_DUPLICATE_PROPERTY_VALUE, BML_UNEXPECTED_TEXT, BML_INVALID_VALUE (required)</documentation>
42
42
  </codes>
43
43
  </properties>
44
44
 
@@ -54,7 +54,7 @@
54
54
  • map/map-block.ts → parcap:MapDocumentBlock, MapBlock
55
55
  • map/map-composition.ts → composition tree mapping
56
56
  • map/type-expression.ts → parcap:ParseTypeExpression
57
- • map/member-value.ts → parcap:ParseMemberValue
57
+ • map/member-value.ts → parcap:ParseMemberValue, ContainsUnescapedInterpolation, ExpressionFromRaw
58
58
  • map/directives.ts → parcap:ParseDirectives, ParseBmlMeta
59
59
  • util/* → visibility, boolean, qname, xml helpers]]></documentation>
60
60
 
@@ -43,7 +43,7 @@
43
43
  • other xsi:* → ignore (not memberValues)
44
44
 
45
45
  Rule 2 — bml:* attributes:
46
- • Composition meta (bml:id, bml:version, …) → BlockInstance fields
46
+ • Composition meta (bml:id, bml:version, bml:generics, …) → BlockInstance fields
47
47
  • Directives (bml:each, bml:if, …) → directives[]
48
48
  • Unknown bml:* → BML_UNKNOWN_DIRECTIVE (error at map time — B2)
49
49
 
@@ -54,6 +54,7 @@
54
54
  • BML_DUPLICATE_COMPOSITION — more than one <composition> on the same aggregation member
55
55
  • BML_DUPLICATE_PROPERTY_VALUE — more than one <value> for the same namespace on a property
56
56
  • BML_UNEXPECTED_TEXT — non-whitespace text on an element-only grammar node
57
+ • BML_INVALID_VALUE — optional parseValue hook rejected a literal (value stays a string)
57
58
 
58
59
  Map-time diagnostics attach Diagnostic.source to the use-site token when known
59
60
  (attribute value or first occurrence in the throwing element), not the document root.
@@ -36,10 +36,12 @@
36
36
  <is>Raw expression storage — no AST in Urmodell (B4)</is>
37
37
 
38
38
  <documentation>${ … } attribute/element values → ExpressionValue { raw, source }.
39
+ Mixed text with ${ … } holes → InterpolatedTextValue { raw, source }.
39
40
  Implementation CDATA → embeddedExpressions[] with source offsets.
40
41
 
41
42
  Parser step [5] captures raw text only. AST construction via parseExpression()
42
- in @blockml/framework (Stage 2 utility) — never stored on Urmodell.
43
+ / parseInterpolatedText() in @blockml/framework (Stage 2 utility) — never stored
44
+ on Urmodell.
43
45
 
44
46
  inputType/outputType on capabilities → TypeExpression at map time (B3).</documentation>
45
47
 
@@ -40,6 +40,10 @@
40
40
  ParseOptions (owned by @blockml/bom):
41
41
  • filePath — default "<memory>"; written to BomDocument.source.filePath
42
42
  • continueOnError — default true; keep mapping after errors when possible
43
+ • parseValue — optional host hook for PrimitiveType.parseValue (injected after
44
+ registry bootstrap). When set, scalar member values use the hook only;
45
+ Boolean/number heuristics run only during bootstrap (no hook). Expression
46
+ and interpolation classification always run.
43
47
 
44
48
  ParseResult (owned by @blockml/bom):
45
49
  • document — BomDocument | null (null on hard fail)
@@ -61,6 +61,9 @@
61
61
  <diagnostics type="bomcommon:Diagnostic[]">
62
62
  <documentation>Shared map-time diagnostics; structural errors append here without aborting. (required)</documentation>
63
63
  </diagnostics>
64
+ <parseValue type="type:Text">
65
+ <documentation>Optional host parseValue hook from ParseOptions. (optional)</documentation>
66
+ </parseValue>
64
67
  </properties>
65
68
 
66
69
  </block>
@@ -52,6 +52,9 @@
52
52
  <diagnostics type="bomcommon:Diagnostic[]">
53
53
  <documentation>diagnostics. TS type: bomcommon:Diagnostic[]. (optional)</documentation>
54
54
  </diagnostics>
55
+ <parseValue type="type:Text">
56
+ <documentation>Optional host parseValue hook from ParseOptions. (optional)</documentation>
57
+ </parseValue>
55
58
  </properties>
56
59
 
57
60
  </block>
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { parse } from "./parse.js";
2
2
  export { isWellKnownTypeFqn, resolveTypeName, type ImplicitNamespaceContext, } from "./util/qname.js";
3
+ export { parseTypeExpression, parseGenericArgumentList, type ParseGenericArgumentListResult, type TypeExpressionResolveOptions, } from "./map/type-expression.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,KAAK,wBAAwB,GAC9B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,KAAK,wBAAwB,GAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { parse } from "./parse.js";
2
2
  export { isWellKnownTypeFqn, resolveTypeName, } from "./util/qname.js";
3
+ export { parseTypeExpression, parseGenericArgumentList, } from "./map/type-expression.js";
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,eAAe,GAEhB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GAGzB,MAAM,0BAA0B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Diagnostic } from "@blockml/bom";
1
+ import type { Diagnostic, ParseValueHook } from "@blockml/bom";
2
2
  export interface MapContext {
3
3
  filePath: string;
4
4
  source: string;
@@ -8,6 +8,7 @@ export interface MapContext {
8
8
  isRoot: boolean;
9
9
  isEmbedded: boolean;
10
10
  diagnostics: Diagnostic[];
11
+ parseValue?: ParseValueHook;
11
12
  }
12
13
  export declare function createMapContext(filePath: string, source: string, bindings: Record<string, string>, options?: {
13
14
  subBlockIndex?: Map<string, string>;
@@ -15,5 +16,6 @@ export declare function createMapContext(filePath: string, source: string, bindi
15
16
  isRoot?: boolean;
16
17
  isEmbedded?: boolean;
17
18
  diagnostics?: Diagnostic[];
19
+ parseValue?: ParseValueHook;
18
20
  }): MapContext;
19
21
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/map/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB,GACL,UAAU,CAcZ"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/map/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,cAAc,CAAC;CACxB,GACL,UAAU,CAiBZ"}
@@ -11,6 +11,9 @@ export function createMapContext(filePath, source, bindings, options = {}) {
11
11
  if (options.parentBlockType !== undefined) {
12
12
  ctx.parentBlockType = options.parentBlockType;
13
13
  }
14
+ if (options.parseValue !== undefined) {
15
+ ctx.parseValue = options.parseValue;
16
+ }
14
17
  return ctx;
15
18
  }
16
19
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/map/context.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,MAAc,EACd,QAAgC,EAChC,UAMI,EAAE;IAEN,MAAM,GAAG,GAAe;QACtB,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,EAAE;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;KACvC,CAAC;IACF,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/map/context.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,MAAc,EACd,QAAgC,EAChC,UAOI,EAAE;IAEN,MAAM,GAAG,GAAe;QACtB,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,EAAE;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;KACvC,CAAC;IACF,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,23 +1,50 @@
1
- import type { DirectiveAttribute, ExpressionValue } from "@blockml/bom";
1
+ import type { DirectiveAttribute, ExpressionValue, GenericsBinding } from "@blockml/bom";
2
2
  import type { Element } from "@xmldom/xmldom";
3
3
  import type { SourceLocation } from "@blockml/bom";
4
4
  import type { MapContext } from "./context.js";
5
+ import { type TypeExpressionResolveOptions } from "./type-expression.js";
6
+ export declare const isGenericsDirectiveElement: (element: Element) => boolean;
7
+ export declare function parseGenericsBinding(element: Element, ctx: MapContext, options?: TypeExpressionResolveOptions): GenericsBinding | undefined;
5
8
  export declare function parseDirectives(element: Element, loc: SourceLocation, ctx?: MapContext): DirectiveAttribute[];
6
9
  export declare function parseBmlMeta(element: Element, typeFqn: string, file: string, loc: SourceLocation): {
7
10
  id: ExpressionValue | {
11
+ kind: "interpolated";
12
+ raw: string;
13
+ source: SourceLocation;
14
+ value?: never;
15
+ typeFqn?: never;
16
+ } | {
8
17
  kind: "literal";
9
18
  value: string;
10
19
  typeFqn: string;
20
+ raw?: never;
21
+ source?: never;
11
22
  } | undefined;
12
23
  version: ExpressionValue | {
24
+ kind: "interpolated";
25
+ raw: string;
26
+ source: SourceLocation;
27
+ value?: never;
28
+ typeFqn?: never;
29
+ } | {
13
30
  kind: "literal";
14
31
  value: string;
15
32
  typeFqn: string;
33
+ raw?: never;
34
+ source?: never;
16
35
  } | undefined;
17
36
  bean: ExpressionValue | {
37
+ kind: "interpolated";
38
+ raw: string;
39
+ source: SourceLocation;
40
+ value?: never;
41
+ typeFqn?: never;
42
+ } | {
18
43
  kind: "literal";
19
44
  value: string;
20
45
  typeFqn: string;
46
+ raw?: never;
47
+ source?: never;
21
48
  } | undefined;
22
49
  scope: "local" | "context" | undefined;
23
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../../src/map/directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAElB,eAAe,EAKhB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY/C,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,cAAc,EACnB,GAAG,CAAC,EAAE,UAAU,GACf,kBAAkB,EAAE,CAgEtB;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,cAAc;;;;;;;;;;;;;;;;;EAiBpB"}
1
+ {"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../../src/map/directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAElB,eAAe,EACf,eAAe,EAKhB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAS9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,sBAAsB,CAAC;AAY9B,eAAO,MAAM,0BAA0B,GAAI,SAAS,OAAO,KAAG,OAI7D,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,4BAA4B,GACrC,eAAe,GAAG,SAAS,CAoC7B;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,cAAc,EACnB,GAAG,CAAC,EAAE,UAAU,GACf,kBAAkB,EAAE,CAgEtB;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBpB"}
@@ -1,11 +1,53 @@
1
- import { expressionFromRaw } from "./member-value.js";
2
- import { getAttribute } from "../util/xml.js";
3
- import { collectUnknownBmlAttributes } from "./structural.js";
1
+ import { containsUnescapedInterpolation, expressionFromRaw } from "./member-value.js";
2
+ import { elementChildren, elementLocalName, elementPrefix, getAttribute, getCharacterData, } from "../util/xml.js";
3
+ import { collectUnknownBmlAttributes, reportDiagnostic } from "./structural.js";
4
+ import { parseGenericArgumentList, } from "./type-expression.js";
5
+ import { attributeValueLoc, elementSourceLoc } from "../util/qname.js";
4
6
  const BML_NS = "http://blockml.org/bml";
5
7
  function bmlAttr(element, local) {
6
8
  return (getAttribute(element, `bml:${local}`) ??
7
9
  getAttribute(element, `${BML_NS}:${local}`));
8
10
  }
11
+ export const isGenericsDirectiveElement = (element) => {
12
+ const local = elementLocalName(element);
13
+ const prefix = elementPrefix(element);
14
+ return (prefix === "bml" && local === "generics") || local === "bml:generics";
15
+ };
16
+ export function parseGenericsBinding(element, ctx, options) {
17
+ const loc = elementSourceLoc(ctx.filePath, ctx.source, element);
18
+ const attr = bmlAttr(element, "generics");
19
+ const child = elementChildren(element).find(isGenericsDirectiveElement);
20
+ let raw;
21
+ let authoredPlacement;
22
+ let source = loc;
23
+ if (attr !== undefined) {
24
+ raw = attr;
25
+ authoredPlacement = "attribute";
26
+ source =
27
+ attributeValueLoc(ctx.filePath, ctx.source, element, "bml:generics", attr) ?? loc;
28
+ }
29
+ else if (child) {
30
+ raw = getCharacterData(child).text;
31
+ authoredPlacement = "element";
32
+ source = elementSourceLoc(ctx.filePath, ctx.source, child);
33
+ }
34
+ else {
35
+ return undefined;
36
+ }
37
+ const binding = {
38
+ raw,
39
+ authoredPlacement,
40
+ source,
41
+ };
42
+ const parsed = parseGenericArgumentList(raw, ctx.bindings, "type", options);
43
+ if (parsed.ok) {
44
+ binding.arguments = parsed.arguments;
45
+ }
46
+ else if (parsed.code === "BML_INVALID_TYPE_REFERENCE") {
47
+ reportDiagnostic(ctx, parsed.code, parsed.message, source);
48
+ }
49
+ return binding;
50
+ }
9
51
  export function parseDirectives(element, loc, ctx) {
10
52
  const directives = [];
11
53
  if (ctx) {
@@ -84,6 +126,15 @@ function parseMetaValue(raw, typeFqn, file, loc) {
84
126
  if (raw.startsWith("${") && raw.endsWith("}")) {
85
127
  return expressionFromRaw(raw, loc);
86
128
  }
129
+ const trimmed = raw.trim();
130
+ const looksLikeJson = trimmed.startsWith("[") || trimmed.startsWith("{");
131
+ if (!looksLikeJson && containsUnescapedInterpolation(raw)) {
132
+ return {
133
+ kind: "interpolated",
134
+ raw,
135
+ source: loc,
136
+ };
137
+ }
87
138
  return {
88
139
  kind: "literal",
89
140
  value: raw,
@@ -1 +1 @@
1
- {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/map/directives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/map/directives.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { BlockDefinition, Diagnostic } from "@blockml/bom";
1
+ import type { BlockDefinition, Diagnostic, ParseValueHook } from "@blockml/bom";
2
2
  import type { Element } from "@xmldom/xmldom";
3
3
  import { type MapContext } from "./context.js";
4
4
  export declare function mapBlock(element: Element, ctx: MapContext): BlockDefinition;
5
- export declare function mapDocumentBlock(element: Element, filePath: string, source: string, bindings: Record<string, string>, diagnostics?: Diagnostic[]): BlockDefinition;
5
+ export declare function mapDocumentBlock(element: Element, filePath: string, source: string, bindings: Record<string, string>, diagnostics?: Diagnostic[], parseValue?: ParseValueHook): BlockDefinition;
6
6
  //# sourceMappingURL=map-block.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"map-block.d.ts","sourceRoot":"","sources":["../../src/map/map-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,eAAe,EAKf,UAAU,EAkBX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAgtCjE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,eAAe,CAE3E;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,WAAW,GAAE,UAAU,EAAO,GAC7B,eAAe,CAGjB"}
1
+ {"version":3,"file":"map-block.d.ts","sourceRoot":"","sources":["../../src/map/map-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,eAAe,EAKf,UAAU,EAUV,cAAc,EASf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAg0CjE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,eAAe,CAE3E;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,WAAW,GAAE,UAAU,EAAO,EAC9B,UAAU,CAAC,EAAE,cAAc,GAC1B,eAAe,CAOjB"}