@blockml/framework 0.9.6 → 0.9.7
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/blocks/org/blockml/bml/framework/Library.bml +4 -1
- package/blocks/org/blockml/bml/framework/capability/EvaluateCapability.bml +74 -0
- package/blocks/org/blockml/bml/framework/capability/EvaluateParseValue.bml +1 -0
- package/blocks/org/blockml/bml/framework/capability/ScanPackages.bml +66 -0
- package/blocks/org/blockml/bml/framework/capability/ScanTypes.bml +66 -0
- package/blocks/org/blockml/bml/framework/documentation/ArchitectureOverview.bml +2 -0
- package/blocks/org/blockml/bml/framework/documentation/PublicApi.bml +4 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/scan.d.ts +13 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +59 -0
- package/dist/scan.js.map +1 -0
- package/dist/validate/evaluate-parse-value.d.ts +3 -1
- package/dist/validate/evaluate-parse-value.d.ts.map +1 -1
- package/dist/validate/evaluate-parse-value.js +47 -8
- package/dist/validate/evaluate-parse-value.js.map +1 -1
- package/package.json +4 -4
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
The BlockML Framework utilities package library catalog
|
|
33
33
|
</is>
|
|
34
34
|
<version>
|
|
35
|
-
0.9.
|
|
35
|
+
0.9.7
|
|
36
36
|
</version>
|
|
37
37
|
<documentation>
|
|
38
38
|
# The BlockML Framework utilities package library catalog
|
|
@@ -121,6 +121,9 @@
|
|
|
121
121
|
<fwcap:GetPropertyNumericValue />
|
|
122
122
|
<fwcap:IsLiteralValue />
|
|
123
123
|
<fwcap:EvaluateParseValue />
|
|
124
|
+
<fwcap:EvaluateCapability />
|
|
125
|
+
<fwcap:ScanTypes />
|
|
126
|
+
<fwcap:ScanPackages />
|
|
124
127
|
<fwdocumentation:Introduction />
|
|
125
128
|
<fwdocumentation:LayerSeparation />
|
|
126
129
|
<fwdocumentation:ArchitectureOverview />
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!--Framework Capability — EvaluateCapability
|
|
2
|
+
FQN: org.blockml.bml.framework.capability.EvaluateCapability-->
|
|
3
|
+
<fwcap:EvaluateCapability xmlns="http://blockml.org/bml"
|
|
4
|
+
xmlns:blockml="org.blockml.bml"
|
|
5
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
6
|
+
xmlns:bomapi="org.blockml.bml.bom.api"
|
|
7
|
+
xmlns:bomblock="org.blockml.bml.bom.block"
|
|
8
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
9
|
+
xmlns:bomcomp="org.blockml.bml.bom.composition"
|
|
10
|
+
xmlns:bomdoc="org.blockml.bml.bom.document"
|
|
11
|
+
xmlns:bommember="org.blockml.bml.bom.member"
|
|
12
|
+
xmlns:bomtype="org.blockml.bml.bom.type"
|
|
13
|
+
xmlns:bomvalue="org.blockml.bml.bom.value"
|
|
14
|
+
xmlns:core="org.blockml.bml.core"
|
|
15
|
+
xmlns:def="org.blockml.bml.definition"
|
|
16
|
+
xmlns:framework="org.blockml.bml.framework"
|
|
17
|
+
xmlns:fwcap="org.blockml.bml.framework.capability"
|
|
18
|
+
xmlns:fwconfig="org.blockml.bml.framework.config"
|
|
19
|
+
xmlns:fwdocumentation="org.blockml.bml.framework.documentation"
|
|
20
|
+
xmlns:fwexpression="org.blockml.bml.framework.expression"
|
|
21
|
+
xmlns:fwregistry="org.blockml.bml.framework.registry"
|
|
22
|
+
xmlns:parser="org.blockml.bml.compiler.parser"
|
|
23
|
+
xmlns:type="org.blockml.bml.type"
|
|
24
|
+
xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
|
|
25
|
+
xmlns:pardocumentation="org.blockml.bml.compiler.parser.documentation"
|
|
26
|
+
xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
|
|
27
|
+
|
|
28
|
+
<baseType>
|
|
29
|
+
core:Capability
|
|
30
|
+
</baseType>
|
|
31
|
+
<is>
|
|
32
|
+
Evaluate a named host-evaluable TypeScript Capability
|
|
33
|
+
</is>
|
|
34
|
+
<documentation>
|
|
35
|
+
Host-evaluable Capability on a named primitive: looks up the named member, compiles
|
|
36
|
+
its TypeScript arrow (parameter and return types stripped), and applies host args.
|
|
37
|
+
|
|
38
|
+
- No member, abstract, non-TypeScript, or type missing from the registry → skipped
|
|
39
|
+
- A thrown Error → ok:false + message
|
|
40
|
+
- parseValue is evaluateCapability(typeFqn, parseValue, [raw])
|
|
41
|
+
- matches is evaluateCapability(typeFqn, matches, [selector, candidate])
|
|
42
|
+
</documentation>
|
|
43
|
+
<references>
|
|
44
|
+
<see type="fwcap:EvaluateParseValue" relation="SeeAlso" />
|
|
45
|
+
<see type="fwcap:ResolveEffectiveMembers" relation="SeeAlso" />
|
|
46
|
+
</references>
|
|
47
|
+
<properties>
|
|
48
|
+
<typeFqn type="type:Text">
|
|
49
|
+
<documentation>
|
|
50
|
+
Declared primitive FQN or type expression. (required)
|
|
51
|
+
</documentation>
|
|
52
|
+
</typeFqn>
|
|
53
|
+
<capabilityName type="type:Text">
|
|
54
|
+
<documentation>
|
|
55
|
+
Capability member name. (required)
|
|
56
|
+
</documentation>
|
|
57
|
+
</capabilityName>
|
|
58
|
+
<args type="type:Text">
|
|
59
|
+
<documentation>
|
|
60
|
+
Host argument list. (required)
|
|
61
|
+
</documentation>
|
|
62
|
+
</args>
|
|
63
|
+
<registry type="fwcap:TypeRegistry">
|
|
64
|
+
<documentation>
|
|
65
|
+
registry. TS type: fwcap:TypeRegistry. (required)
|
|
66
|
+
</documentation>
|
|
67
|
+
</registry>
|
|
68
|
+
<result type="type:Text">
|
|
69
|
+
<documentation>
|
|
70
|
+
ok+value, ok+skipped, or ok:false+message. (required)
|
|
71
|
+
</documentation>
|
|
72
|
+
</result>
|
|
73
|
+
</properties>
|
|
74
|
+
</fwcap:EvaluateCapability>
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
- Lexical only — no `this.min` / `this.max`, no TypeRegistry existence
|
|
41
41
|
</documentation>
|
|
42
42
|
<references>
|
|
43
|
+
<see type="fwcap:EvaluateCapability" relation="SeeAlso" />
|
|
43
44
|
<see type="fwcap:ResolveEffectiveMembers" relation="SeeAlso" />
|
|
44
45
|
<see type="fwcap:ValidateTypes" relation="SeeAlso" />
|
|
45
46
|
</references>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!--Framework Capability — ScanPackages
|
|
2
|
+
FQN: org.blockml.bml.framework.capability.ScanPackages-->
|
|
3
|
+
<fwcap:ScanPackages xmlns="http://blockml.org/bml"
|
|
4
|
+
xmlns:blockml="org.blockml.bml"
|
|
5
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
6
|
+
xmlns:bomapi="org.blockml.bml.bom.api"
|
|
7
|
+
xmlns:bomblock="org.blockml.bml.bom.block"
|
|
8
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
9
|
+
xmlns:bomcomp="org.blockml.bml.bom.composition"
|
|
10
|
+
xmlns:bomdoc="org.blockml.bml.bom.document"
|
|
11
|
+
xmlns:bommember="org.blockml.bml.bom.member"
|
|
12
|
+
xmlns:bomtype="org.blockml.bml.bom.type"
|
|
13
|
+
xmlns:bomvalue="org.blockml.bml.bom.value"
|
|
14
|
+
xmlns:core="org.blockml.bml.core"
|
|
15
|
+
xmlns:def="org.blockml.bml.definition"
|
|
16
|
+
xmlns:framework="org.blockml.bml.framework"
|
|
17
|
+
xmlns:fwcap="org.blockml.bml.framework.capability"
|
|
18
|
+
xmlns:fwconfig="org.blockml.bml.framework.config"
|
|
19
|
+
xmlns:fwdocumentation="org.blockml.bml.framework.documentation"
|
|
20
|
+
xmlns:fwexpression="org.blockml.bml.framework.expression"
|
|
21
|
+
xmlns:fwregistry="org.blockml.bml.framework.registry"
|
|
22
|
+
xmlns:parser="org.blockml.bml.compiler.parser"
|
|
23
|
+
xmlns:type="org.blockml.bml.type"
|
|
24
|
+
xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
|
|
25
|
+
xmlns:pardocumentation="org.blockml.bml.compiler.parser.documentation"
|
|
26
|
+
xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
|
|
27
|
+
|
|
28
|
+
<baseType>
|
|
29
|
+
core:Capability
|
|
30
|
+
</baseType>
|
|
31
|
+
<is>
|
|
32
|
+
List known packages matching PackageSelectors
|
|
33
|
+
</is>
|
|
34
|
+
<documentation>
|
|
35
|
+
Parses each token as type:PackageSelector, then keeps known PackageIdentifier
|
|
36
|
+
prefixes of registry.keys() where any selector.matches. OR across selectors.
|
|
37
|
+
Sorted. Invalid parse → error message. Matching is Core PackageSelector.matches.
|
|
38
|
+
</documentation>
|
|
39
|
+
<references>
|
|
40
|
+
<see type="fwcap:ScanTypes" relation="SeeAlso" />
|
|
41
|
+
<see type="fwcap:EvaluateCapability" relation="SeeAlso" />
|
|
42
|
+
<see type="type:PackageSelector" relation="SeeAlso" />
|
|
43
|
+
</references>
|
|
44
|
+
<properties>
|
|
45
|
+
<selectors type="type:Text[]">
|
|
46
|
+
<documentation>
|
|
47
|
+
PackageSelector tokens. (required)
|
|
48
|
+
</documentation>
|
|
49
|
+
</selectors>
|
|
50
|
+
<registry type="fwcap:TypeRegistry">
|
|
51
|
+
<documentation>
|
|
52
|
+
registry. TS type: fwcap:TypeRegistry. (required)
|
|
53
|
+
</documentation>
|
|
54
|
+
</registry>
|
|
55
|
+
<hits type="type:Text[]">
|
|
56
|
+
<documentation>
|
|
57
|
+
Matching package identifiers when ok. (required)
|
|
58
|
+
</documentation>
|
|
59
|
+
</hits>
|
|
60
|
+
<message type="type:Text">
|
|
61
|
+
<documentation>
|
|
62
|
+
parseValue / eval error when not ok. (optional)
|
|
63
|
+
</documentation>
|
|
64
|
+
</message>
|
|
65
|
+
</properties>
|
|
66
|
+
</fwcap:ScanPackages>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!--Framework Capability — ScanTypes
|
|
2
|
+
FQN: org.blockml.bml.framework.capability.ScanTypes-->
|
|
3
|
+
<fwcap:ScanTypes xmlns="http://blockml.org/bml"
|
|
4
|
+
xmlns:blockml="org.blockml.bml"
|
|
5
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
6
|
+
xmlns:bomapi="org.blockml.bml.bom.api"
|
|
7
|
+
xmlns:bomblock="org.blockml.bml.bom.block"
|
|
8
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
9
|
+
xmlns:bomcomp="org.blockml.bml.bom.composition"
|
|
10
|
+
xmlns:bomdoc="org.blockml.bml.bom.document"
|
|
11
|
+
xmlns:bommember="org.blockml.bml.bom.member"
|
|
12
|
+
xmlns:bomtype="org.blockml.bml.bom.type"
|
|
13
|
+
xmlns:bomvalue="org.blockml.bml.bom.value"
|
|
14
|
+
xmlns:core="org.blockml.bml.core"
|
|
15
|
+
xmlns:def="org.blockml.bml.definition"
|
|
16
|
+
xmlns:framework="org.blockml.bml.framework"
|
|
17
|
+
xmlns:fwcap="org.blockml.bml.framework.capability"
|
|
18
|
+
xmlns:fwconfig="org.blockml.bml.framework.config"
|
|
19
|
+
xmlns:fwdocumentation="org.blockml.bml.framework.documentation"
|
|
20
|
+
xmlns:fwexpression="org.blockml.bml.framework.expression"
|
|
21
|
+
xmlns:fwregistry="org.blockml.bml.framework.registry"
|
|
22
|
+
xmlns:parser="org.blockml.bml.compiler.parser"
|
|
23
|
+
xmlns:type="org.blockml.bml.type"
|
|
24
|
+
xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
|
|
25
|
+
xmlns:pardocumentation="org.blockml.bml.compiler.parser.documentation"
|
|
26
|
+
xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
|
|
27
|
+
|
|
28
|
+
<baseType>
|
|
29
|
+
core:Capability
|
|
30
|
+
</baseType>
|
|
31
|
+
<is>
|
|
32
|
+
List TypeRegistry FQNs matching TypeSelectors
|
|
33
|
+
</is>
|
|
34
|
+
<documentation>
|
|
35
|
+
Parses each token as type:TypeSelector, then keeps registry.keys() (dotted FQNs)
|
|
36
|
+
where any selector.matches. OR across selectors. Sorted. Invalid parse → error
|
|
37
|
+
message. Matching is Core TypeSelector.matches — not copied here.
|
|
38
|
+
</documentation>
|
|
39
|
+
<references>
|
|
40
|
+
<see type="fwcap:ScanPackages" relation="SeeAlso" />
|
|
41
|
+
<see type="fwcap:EvaluateCapability" relation="SeeAlso" />
|
|
42
|
+
<see type="type:TypeSelector" relation="SeeAlso" />
|
|
43
|
+
</references>
|
|
44
|
+
<properties>
|
|
45
|
+
<selectors type="type:Text[]">
|
|
46
|
+
<documentation>
|
|
47
|
+
TypeSelector tokens. (required)
|
|
48
|
+
</documentation>
|
|
49
|
+
</selectors>
|
|
50
|
+
<registry type="fwcap:TypeRegistry">
|
|
51
|
+
<documentation>
|
|
52
|
+
registry. TS type: fwcap:TypeRegistry. (required)
|
|
53
|
+
</documentation>
|
|
54
|
+
</registry>
|
|
55
|
+
<hits type="type:Text[]">
|
|
56
|
+
<documentation>
|
|
57
|
+
Matching type FQNs when ok. (required)
|
|
58
|
+
</documentation>
|
|
59
|
+
</hits>
|
|
60
|
+
<message type="type:Text">
|
|
61
|
+
<documentation>
|
|
62
|
+
parseValue / eval error when not ok. (optional)
|
|
63
|
+
</documentation>
|
|
64
|
+
</message>
|
|
65
|
+
</properties>
|
|
66
|
+
</fwcap:ScanTypes>
|
|
@@ -48,6 +48,8 @@
|
|
|
48
48
|
fwcap:IsLiteralValue
|
|
49
49
|
validate/validate-versions.ts — fwcap:ValidateVersions
|
|
50
50
|
validate/validate-constraints.ts — fwcap:ValidateConstraints
|
|
51
|
+
validate/evaluate-parse-value.ts — fwcap:EvaluateParseValue, fwcap:EvaluateCapability
|
|
52
|
+
scan.ts — fwcap:ScanTypes, fwcap:ScanPackages
|
|
51
53
|
|
|
52
54
|
Internal data-structure types extend framework:FrameworkType.
|
|
53
55
|
Public operations are fwcap:* capabilities.
|
|
@@ -67,6 +67,10 @@
|
|
|
67
67
|
validateConstraints(document, registry) → Diagnostic[]
|
|
68
68
|
getPropertyNumericValue(property) → number | undefined
|
|
69
69
|
isLiteralValue(value) → boolean
|
|
70
|
+
evaluateParseValue(typeFqn, raw, registry) → ok+value | skipped | ok:false
|
|
71
|
+
evaluateCapability(typeFqn, capabilityName, args, registry) → ok+value | skipped | ok:false
|
|
72
|
+
scanTypes(selectors, registry) → matching type FQNs or parse error
|
|
73
|
+
scanPackages(selectors, registry) → matching package identifiers or parse error
|
|
70
74
|
|
|
71
75
|
Types: BootstrapResult, BootstrapTrace, BootstrapOptions, ExpressionNode, ParseExpressionResult, ParseExpressionOutcome
|
|
72
76
|
|
package/dist/index.d.ts
CHANGED
|
@@ -12,8 +12,10 @@ export { evaluateExpression, evaluateInterpolatedText, ExpressionEvaluationError
|
|
|
12
12
|
export type { ExpressionScope } from "./expression/evaluate-expression.js";
|
|
13
13
|
export type { ExpressionNode, InterpolatedStringNode, ParseExpressionResult, ParseExpressionOutcome, } from "./expression/types.js";
|
|
14
14
|
export { validateTypes, getPropertyNumericValue, isLiteralValue, } from "./validate/validate-types.js";
|
|
15
|
-
export { evaluateParseValue } from "./validate/evaluate-parse-value.js";
|
|
16
|
-
export type { EvaluateParseValueResult } from "./validate/evaluate-parse-value.js";
|
|
15
|
+
export { evaluateCapability, evaluateParseValue } from "./validate/evaluate-parse-value.js";
|
|
16
|
+
export type { EvaluateCapabilityResult, EvaluateParseValueResult, } from "./validate/evaluate-parse-value.js";
|
|
17
|
+
export { scanPackages, scanTypes } from "./scan.js";
|
|
18
|
+
export type { ScanResult } from "./scan.js";
|
|
17
19
|
export { validateVersions } from "./validate/validate-versions.js";
|
|
18
20
|
export { validateConstraints } from "./validate/validate-constraints.js";
|
|
19
21
|
export { validateEmbeddedBlocks } from "./validate/validate-embedded-blocks.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC5F,YAAY,EACV,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,8 @@ export { parseExpression } from "./expression/parse-expression.js";
|
|
|
10
10
|
export { parseInterpolatedText } from "./expression/parse-interpolated-text.js";
|
|
11
11
|
export { evaluateExpression, evaluateInterpolatedText, ExpressionEvaluationError, } from "./expression/evaluate-expression.js";
|
|
12
12
|
export { validateTypes, getPropertyNumericValue, isLiteralValue, } from "./validate/validate-types.js";
|
|
13
|
-
export { evaluateParseValue } from "./validate/evaluate-parse-value.js";
|
|
13
|
+
export { evaluateCapability, evaluateParseValue } from "./validate/evaluate-parse-value.js";
|
|
14
|
+
export { scanPackages, scanTypes } from "./scan.js";
|
|
14
15
|
export { validateVersions } from "./validate/validate-versions.js";
|
|
15
16
|
export { validateConstraints } from "./validate/validate-constraints.js";
|
|
16
17
|
export { validateEmbeddedBlocks } from "./validate/validate-embedded-blocks.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,GAIpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qCAAqC,CAAC;AAQ7C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,GAIpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qCAAqC,CAAC;AAQ7C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAK5F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/scan.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TypeRegistry } from "./registry/type-registry.js";
|
|
2
|
+
export type ScanResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
hits: string[];
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
message: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function typeCandidates(registry: TypeRegistry): string[];
|
|
10
|
+
export declare function packageCandidates(registry: TypeRegistry): string[];
|
|
11
|
+
export declare function scanTypes(selectors: string[], registry: TypeRegistry): ScanResult;
|
|
12
|
+
export declare function scanPackages(selectors: string[], registry: TypeRegistry): ScanResult;
|
|
13
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAWhE,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAiCnC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAE/D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAelE;AAkBD,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,CAEjF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,CAEpF"}
|
package/dist/scan.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { evaluateCapability, evaluateParseValue, } from "./validate/evaluate-parse-value.js";
|
|
2
|
+
const PACKAGE_SELECTOR = "org.blockml.bml.type.PackageSelector";
|
|
3
|
+
const TYPE_SELECTOR = "org.blockml.bml.type.TypeSelector";
|
|
4
|
+
const TYPE_EXPR_CHARS = /[(){}[\]|<>,:]/;
|
|
5
|
+
const PACKAGE_IDENTIFIER = /^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/;
|
|
6
|
+
function parseSelectorList(selectorType, selectors, registry) {
|
|
7
|
+
const parsed = [];
|
|
8
|
+
for (const raw of selectors) {
|
|
9
|
+
const result = evaluateParseValue(selectorType, raw, registry);
|
|
10
|
+
if (!result.ok) {
|
|
11
|
+
return { ok: false, message: result.message };
|
|
12
|
+
}
|
|
13
|
+
if ("skipped" in result) {
|
|
14
|
+
return { ok: false, message: `could not parse selector: ${raw}` };
|
|
15
|
+
}
|
|
16
|
+
parsed.push(String(result.value));
|
|
17
|
+
}
|
|
18
|
+
return { ok: true, selectors: parsed };
|
|
19
|
+
}
|
|
20
|
+
function matchesAny(selectorType, selectors, candidate, registry) {
|
|
21
|
+
return selectors.some((selector) => {
|
|
22
|
+
const result = evaluateCapability(selectorType, "matches", [selector, candidate], registry);
|
|
23
|
+
return result.ok && !("skipped" in result) && result.value === true;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function typeCandidates(registry) {
|
|
27
|
+
return registry.keys().filter((fqn) => Boolean(fqn) && !TYPE_EXPR_CHARS.test(fqn)).sort();
|
|
28
|
+
}
|
|
29
|
+
export function packageCandidates(registry) {
|
|
30
|
+
const packages = new Set();
|
|
31
|
+
for (const fqn of registry.keys()) {
|
|
32
|
+
if (!fqn || TYPE_EXPR_CHARS.test(fqn)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const segments = fqn.split(".");
|
|
36
|
+
for (let i = 2; i < segments.length; i++) {
|
|
37
|
+
const pkg = segments.slice(0, i).join(".");
|
|
38
|
+
if (PACKAGE_IDENTIFIER.test(pkg)) {
|
|
39
|
+
packages.add(pkg);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [...packages].sort();
|
|
44
|
+
}
|
|
45
|
+
function scan(selectorType, selectors, candidates, registry) {
|
|
46
|
+
const parsed = parseSelectorList(selectorType, selectors, registry);
|
|
47
|
+
if (!parsed.ok) {
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
const hits = candidates.filter((candidate) => matchesAny(selectorType, parsed.selectors, candidate, registry));
|
|
51
|
+
return { ok: true, hits };
|
|
52
|
+
}
|
|
53
|
+
export function scanTypes(selectors, registry) {
|
|
54
|
+
return scan(TYPE_SELECTOR, selectors, typeCandidates(registry), registry);
|
|
55
|
+
}
|
|
56
|
+
export function scanPackages(selectors, registry) {
|
|
57
|
+
return scan(PACKAGE_SELECTOR, selectors, packageCandidates(registry), registry);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=scan.js.map
|
package/dist/scan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TypeRegistry } from "../registry/type-registry.js";
|
|
2
|
-
export type
|
|
2
|
+
export type EvaluateCapabilityResult = {
|
|
3
3
|
ok: true;
|
|
4
4
|
value: unknown;
|
|
5
5
|
} | {
|
|
@@ -9,5 +9,7 @@ export type EvaluateParseValueResult = {
|
|
|
9
9
|
ok: false;
|
|
10
10
|
message: string;
|
|
11
11
|
};
|
|
12
|
+
export type EvaluateParseValueResult = EvaluateCapabilityResult;
|
|
13
|
+
export declare function evaluateCapability(typeFqn: string, capabilityName: string, args: unknown[], registry: TypeRegistry): EvaluateCapabilityResult;
|
|
12
14
|
export declare function evaluateParseValue(typeFqn: string, raw: string, registry: TypeRegistry): EvaluateParseValueResult;
|
|
13
15
|
//# sourceMappingURL=evaluate-parse-value.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-parse-value.d.ts","sourceRoot":"","sources":["../../src/validate/evaluate-parse-value.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAOjE,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluate-parse-value.d.ts","sourceRoot":"","sources":["../../src/validate/evaluate-parse-value.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAOjE,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAwJhE,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,OAAO,EAAE,EACf,QAAQ,EAAE,YAAY,GACrB,wBAAwB,CAiC1B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,YAAY,GACrB,wBAAwB,CAE1B"}
|
|
@@ -89,21 +89,56 @@ function isTypeScript(languageFqn) {
|
|
|
89
89
|
const named = namedPrimitiveFqn(languageFqn);
|
|
90
90
|
return !named.skip && named.fqn === TYPESCRIPT_FQN;
|
|
91
91
|
}
|
|
92
|
+
function splitTopLevelParams(params) {
|
|
93
|
+
const parts = [];
|
|
94
|
+
let depth = 0;
|
|
95
|
+
let current = "";
|
|
96
|
+
for (const ch of params) {
|
|
97
|
+
if (ch === "(" || ch === "{" || ch === "[" || ch === "<") {
|
|
98
|
+
depth += 1;
|
|
99
|
+
}
|
|
100
|
+
else if (ch === ")" || ch === "}" || ch === "]" || ch === ">") {
|
|
101
|
+
depth -= 1;
|
|
102
|
+
}
|
|
103
|
+
if (ch === "," && depth === 0) {
|
|
104
|
+
parts.push(current);
|
|
105
|
+
current = "";
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
current += ch;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (current.trim()) {
|
|
112
|
+
parts.push(current);
|
|
113
|
+
}
|
|
114
|
+
return parts;
|
|
115
|
+
}
|
|
116
|
+
function stripParamTypes(params) {
|
|
117
|
+
return splitTopLevelParams(params)
|
|
118
|
+
.map((part) => {
|
|
119
|
+
const trimmed = part.trim();
|
|
120
|
+
const name = trimmed.match(/^([A-Za-z_]\w*)/)?.[1];
|
|
121
|
+
return name ?? trimmed;
|
|
122
|
+
})
|
|
123
|
+
.filter(Boolean)
|
|
124
|
+
.join(", ");
|
|
125
|
+
}
|
|
92
126
|
function toHostJavaScript(source) {
|
|
93
|
-
|
|
127
|
+
const trimmed = source.trim();
|
|
128
|
+
return trimmed.replace(/^\(([\s\S]*?)\)\s*(?::\s*[^=]+)?\s*=>/, (_all, params) => `(${stripParamTypes(params)}) =>`);
|
|
94
129
|
}
|
|
95
130
|
function compileBody(source) {
|
|
96
131
|
return new Function(`"use strict"; return (${toHostJavaScript(source)});`)();
|
|
97
132
|
}
|
|
98
|
-
function
|
|
133
|
+
function findCapability(typeFqn, capabilityName, registry) {
|
|
99
134
|
const doc = registry.get(typeFqn);
|
|
100
135
|
if (!doc) {
|
|
101
136
|
return undefined;
|
|
102
137
|
}
|
|
103
|
-
const member = resolveEffectiveMembers(doc.block, registry).find((m) => m.kind === "capability" && m.name ===
|
|
138
|
+
const member = resolveEffectiveMembers(doc.block, registry).find((m) => m.kind === "capability" && m.name === capabilityName);
|
|
104
139
|
return member?.kind === "capability" ? member : undefined;
|
|
105
140
|
}
|
|
106
|
-
export function
|
|
141
|
+
export function evaluateCapability(typeFqn, capabilityName, args, registry) {
|
|
107
142
|
const named = namedPrimitiveFqn(typeFqn);
|
|
108
143
|
if (named.skip || !named.fqn) {
|
|
109
144
|
return skipped;
|
|
@@ -111,14 +146,15 @@ export function evaluateParseValue(typeFqn, raw, registry) {
|
|
|
111
146
|
if (!registry.has(named.fqn)) {
|
|
112
147
|
return skipped;
|
|
113
148
|
}
|
|
114
|
-
const cap =
|
|
149
|
+
const cap = findCapability(named.fqn, capabilityName, registry);
|
|
115
150
|
if (!cap || cap.abstract || !cap.implementation) {
|
|
116
151
|
return skipped;
|
|
117
152
|
}
|
|
118
153
|
if (!isTypeScript(cap.implementation.languageFqn)) {
|
|
119
154
|
return skipped;
|
|
120
155
|
}
|
|
121
|
-
|
|
156
|
+
const cacheKey = `${named.fqn}#${capabilityName}`;
|
|
157
|
+
let fn = compiledBodies.get(cacheKey);
|
|
122
158
|
if (!fn) {
|
|
123
159
|
try {
|
|
124
160
|
fn = compileBody(cap.implementation.source);
|
|
@@ -126,13 +162,16 @@ export function evaluateParseValue(typeFqn, raw, registry) {
|
|
|
126
162
|
catch {
|
|
127
163
|
return skipped;
|
|
128
164
|
}
|
|
129
|
-
compiledBodies.set(
|
|
165
|
+
compiledBodies.set(cacheKey, fn);
|
|
130
166
|
}
|
|
131
167
|
try {
|
|
132
|
-
return { ok: true, value: fn(
|
|
168
|
+
return { ok: true, value: fn(...args) };
|
|
133
169
|
}
|
|
134
170
|
catch (err) {
|
|
135
171
|
return { ok: false, message: err instanceof Error ? err.message : String(err) };
|
|
136
172
|
}
|
|
137
173
|
}
|
|
174
|
+
export function evaluateParseValue(typeFqn, raw, registry) {
|
|
175
|
+
return evaluateCapability(typeFqn, PARSE_VALUE, [raw], registry);
|
|
176
|
+
}
|
|
138
177
|
//# sourceMappingURL=evaluate-parse-value.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-parse-value.js","sourceRoot":"","sources":["../../src/validate/evaluate-parse-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D,MAAM,WAAW,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluate-parse-value.js","sourceRoot":"","sources":["../../src/validate/evaluate-parse-value.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blockml/framework",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.7",
|
|
4
4
|
"description": "BlockML framework — TypeRegistry, fork/resolve, parseExpression, validateTypes",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"test": "vitest run packages/framework/test"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@blockml/bom": "^0.9.
|
|
36
|
-
"@blockml/core": "^1.3.
|
|
37
|
-
"@blockml/parser": "^0.9.
|
|
35
|
+
"@blockml/bom": "^0.9.7",
|
|
36
|
+
"@blockml/core": "^1.3.2",
|
|
37
|
+
"@blockml/parser": "^0.9.7"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
40
|
"node": ">=20"
|