componentsjs 4.4.1 → 5.0.0-beta.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.
- package/CHANGELOG.md +46 -0
- package/bin/compile-config.js +1 -1
- package/components/context.jsonld +74 -2
- package/lib/construction/ConfigConstructor.js +7 -14
- package/lib/construction/argument/ArgumentConstructorHandlerHash.js +3 -2
- package/lib/construction/strategy/ConstructionStrategyCommonJsString.js +3 -0
- package/lib/construction/strategy/IConstructionStrategy.d.ts +2 -2
- package/lib/loading/ComponentRegistry.d.ts +1 -1
- package/lib/loading/ComponentRegistry.js +1 -1
- package/lib/loading/ComponentRegistryFinalizer.js +18 -3
- package/lib/loading/ComponentsManagerBuilder.js +1 -1
- package/lib/loading/ConfigRegistry.d.ts +1 -1
- package/lib/preprocess/ConfigPreprocessorComponent.d.ts +3 -1
- package/lib/preprocess/ConfigPreprocessorComponent.js +38 -12
- package/lib/preprocess/ConfigPreprocessorComponentMapped.d.ts +4 -3
- package/lib/preprocess/ConfigPreprocessorComponentMapped.js +17 -18
- package/lib/preprocess/GenericsContext.d.ts +30 -0
- package/lib/preprocess/GenericsContext.js +63 -0
- package/lib/preprocess/ParameterHandler.d.ts +4 -2
- package/lib/preprocess/ParameterHandler.js +22 -20
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerCollectEntries.d.ts +3 -2
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerCollectEntries.js +24 -10
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerElements.d.ts +2 -1
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerElements.js +8 -5
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerFields.d.ts +2 -1
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerFields.js +16 -9
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerKeyValue.d.ts +4 -3
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerKeyValue.js +12 -12
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerList.d.ts +2 -1
- package/lib/preprocess/constructorargumentsmapping/ConstructorArgumentsElementMappingHandlerList.js +9 -22
- package/lib/preprocess/constructorargumentsmapping/IConstructorArgumentsElementMappingHandler.d.ts +5 -2
- package/lib/preprocess/constructorargumentsmapping/IConstructorArgumentsMapper.d.ts +5 -2
- package/lib/preprocess/parameterproperty/IParameterPropertyHandler.d.ts +5 -2
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerDefault.d.ts +6 -3
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerDefault.js +20 -3
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerDefaultScoped.d.ts +2 -2
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerDefaultScoped.js +16 -5
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerFixed.d.ts +5 -3
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerFixed.js +25 -2
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerLazy.d.ts +2 -2
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerLazy.js +10 -3
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerRange.d.ts +18 -4
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerRange.js +195 -30
- package/lib/rdf/Iris.js +24 -24
- package/lib/rdf/RdfParser.d.ts +2 -2
- package/lib/rdf/RdfParser.js +17 -5
- package/lib/rdf/RdfStreamIncluder.d.ts +1 -1
- package/lib/rdf/RdfStreamIncluder.js +2 -2
- package/package.json +10 -10
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerRequired.d.ts +0 -11
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerRequired.js +0 -23
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerUnique.d.ts +0 -12
- package/lib/preprocess/parameterproperty/ParameterPropertyHandlerUnique.js +0 -34
|
@@ -1,15 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ParameterPropertyHandlerFixed = void 0;
|
|
4
|
+
const ErrorResourcesContext_1 = require("../../util/ErrorResourcesContext");
|
|
4
5
|
/**
|
|
5
6
|
* Irrespective of any set values, prepend the parameter's fixed values.
|
|
6
7
|
*/
|
|
7
8
|
class ParameterPropertyHandlerFixed {
|
|
8
|
-
|
|
9
|
+
constructor(objectLoader) {
|
|
10
|
+
this.objectLoader = objectLoader;
|
|
11
|
+
}
|
|
12
|
+
canHandle(value, configRoot, parameter) {
|
|
9
13
|
return Boolean(parameter.property.fixed);
|
|
10
14
|
}
|
|
11
15
|
handle(value, configRoot, parameter, configElement) {
|
|
12
|
-
|
|
16
|
+
if (parameter.properties.fixed.length > 1) {
|
|
17
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Invalid fixed value for parameter "${parameter.value}": Only one value can be defined, or an RDF list must be provided`, { parameter });
|
|
18
|
+
}
|
|
19
|
+
if (value) {
|
|
20
|
+
const fixedValues = parameter.property.fixed.list || [parameter.property.fixed];
|
|
21
|
+
if (value.list) {
|
|
22
|
+
value.list.unshift(...fixedValues);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
value = this.objectLoader.createCompactedResource({
|
|
26
|
+
list: [
|
|
27
|
+
...fixedValues,
|
|
28
|
+
value,
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
value = parameter.property.fixed;
|
|
35
|
+
}
|
|
13
36
|
return value;
|
|
14
37
|
}
|
|
15
38
|
}
|
|
@@ -5,6 +5,6 @@ import type { IParameterPropertyHandler } from './IParameterPropertyHandler';
|
|
|
5
5
|
* make the value inherit this lazy tag so that it can be handled later.
|
|
6
6
|
*/
|
|
7
7
|
export declare class ParameterPropertyHandlerLazy implements IParameterPropertyHandler {
|
|
8
|
-
canHandle(value: Resource
|
|
9
|
-
handle(value: Resource
|
|
8
|
+
canHandle(value: Resource | undefined, configRoot: Resource, parameter: Resource): boolean;
|
|
9
|
+
handle(value: Resource | undefined, configRoot: Resource, parameter: Resource, configElement: Resource): Resource | undefined;
|
|
10
10
|
}
|
|
@@ -6,12 +6,19 @@ exports.ParameterPropertyHandlerLazy = void 0;
|
|
|
6
6
|
* make the value inherit this lazy tag so that it can be handled later.
|
|
7
7
|
*/
|
|
8
8
|
class ParameterPropertyHandlerLazy {
|
|
9
|
-
canHandle(value, configRoot, parameter
|
|
9
|
+
canHandle(value, configRoot, parameter) {
|
|
10
10
|
return Boolean(parameter.property.lazy);
|
|
11
11
|
}
|
|
12
12
|
handle(value, configRoot, parameter, configElement) {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
if (value) {
|
|
14
|
+
if (value.list) {
|
|
15
|
+
for (const subValue of value.list) {
|
|
16
|
+
subValue.property.lazy = parameter.property.lazy;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
value.property.lazy = parameter.property.lazy;
|
|
21
|
+
}
|
|
15
22
|
}
|
|
16
23
|
return value;
|
|
17
24
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RdfObjectLoader, Resource } from 'rdf-object';
|
|
2
|
+
import type { GenericsContext } from '../GenericsContext';
|
|
2
3
|
import type { IParameterPropertyHandler } from './IParameterPropertyHandler';
|
|
3
4
|
/**
|
|
4
5
|
* If a param range is defined, apply the type and validate the range.
|
|
@@ -6,8 +7,8 @@ import type { IParameterPropertyHandler } from './IParameterPropertyHandler';
|
|
|
6
7
|
export declare class ParameterPropertyHandlerRange implements IParameterPropertyHandler {
|
|
7
8
|
private readonly objectLoader;
|
|
8
9
|
constructor(objectLoader: RdfObjectLoader);
|
|
9
|
-
canHandle(value: Resource
|
|
10
|
-
handle(value: Resource
|
|
10
|
+
canHandle(value: Resource | undefined, configRoot: Resource, parameter: Resource): boolean;
|
|
11
|
+
handle(value: Resource | undefined, configRoot: Resource, parameter: Resource, configElement: Resource, genericsContext: GenericsContext): Resource | undefined;
|
|
11
12
|
/**
|
|
12
13
|
* Apply the given datatype to the given literal.
|
|
13
14
|
* Checks if the datatype is correct and casts to the correct js type.
|
|
@@ -15,7 +16,20 @@ export declare class ParameterPropertyHandlerRange implements IParameterProperty
|
|
|
15
16
|
* Will be ignored if the value is not a literal or the type is not recognized.
|
|
16
17
|
* @param value The value.
|
|
17
18
|
* @param param The parameter.
|
|
19
|
+
* @param genericsContext Context for generic types.
|
|
18
20
|
*/
|
|
19
|
-
captureType(value: Resource, param: Resource): Resource;
|
|
20
|
-
|
|
21
|
+
captureType(value: Resource | undefined, param: Resource, genericsContext: GenericsContext): Resource | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Apply the given datatype to the given literal.
|
|
24
|
+
* Checks if the datatype is correct and casts to the correct js type.
|
|
25
|
+
* Will throw an error if the type has an invalid value.
|
|
26
|
+
* Will be ignored if the value is not a literal or the type is not recognized.
|
|
27
|
+
* @param value The value.
|
|
28
|
+
* @param param The parameter.
|
|
29
|
+
* @param paramRange The parameter's range.
|
|
30
|
+
* @param genericsContext Context for generic types.
|
|
31
|
+
*/
|
|
32
|
+
hasParamValueValidType(value: Resource | undefined, param: Resource, paramRange: Resource, genericsContext: GenericsContext): boolean;
|
|
33
|
+
protected throwIncorrectTypeError(value: Resource | undefined, parameter: Resource, genericsContext: GenericsContext): never;
|
|
34
|
+
rangeToDisplayString(paramRange: Resource | undefined, genericsContext: GenericsContext): string;
|
|
21
35
|
}
|
|
@@ -10,13 +10,11 @@ class ParameterPropertyHandlerRange {
|
|
|
10
10
|
constructor(objectLoader) {
|
|
11
11
|
this.objectLoader = objectLoader;
|
|
12
12
|
}
|
|
13
|
-
canHandle(value, configRoot, parameter
|
|
13
|
+
canHandle(value, configRoot, parameter) {
|
|
14
14
|
return Boolean(parameter.property.range);
|
|
15
15
|
}
|
|
16
|
-
handle(value, configRoot, parameter, configElement) {
|
|
17
|
-
|
|
18
|
-
this.captureType(subValue, parameter);
|
|
19
|
-
}
|
|
16
|
+
handle(value, configRoot, parameter, configElement, genericsContext) {
|
|
17
|
+
this.captureType(value, parameter, genericsContext);
|
|
20
18
|
return value;
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
@@ -26,11 +24,36 @@ class ParameterPropertyHandlerRange {
|
|
|
26
24
|
* Will be ignored if the value is not a literal or the type is not recognized.
|
|
27
25
|
* @param value The value.
|
|
28
26
|
* @param param The parameter.
|
|
27
|
+
* @param genericsContext Context for generic types.
|
|
29
28
|
*/
|
|
30
|
-
captureType(value, param) {
|
|
31
|
-
if (value.
|
|
29
|
+
captureType(value, param, genericsContext) {
|
|
30
|
+
if (this.hasParamValueValidType(value, param, param.property.range, genericsContext)) {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
this.throwIncorrectTypeError(value, param, genericsContext);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Apply the given datatype to the given literal.
|
|
37
|
+
* Checks if the datatype is correct and casts to the correct js type.
|
|
38
|
+
* Will throw an error if the type has an invalid value.
|
|
39
|
+
* Will be ignored if the value is not a literal or the type is not recognized.
|
|
40
|
+
* @param value The value.
|
|
41
|
+
* @param param The parameter.
|
|
42
|
+
* @param paramRange The parameter's range.
|
|
43
|
+
* @param genericsContext Context for generic types.
|
|
44
|
+
*/
|
|
45
|
+
hasParamValueValidType(value, param, paramRange, genericsContext) {
|
|
46
|
+
if (!paramRange) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
if (!value && paramRange.isA('ParameterRangeUndefined')) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (value && value.type === 'Literal') {
|
|
32
53
|
let parsed;
|
|
33
|
-
switch (
|
|
54
|
+
switch (paramRange.value) {
|
|
55
|
+
case Iris_1.IRIS_XSD.string:
|
|
56
|
+
return true;
|
|
34
57
|
case Iris_1.IRIS_XSD.boolean:
|
|
35
58
|
if (value.value === 'true') {
|
|
36
59
|
value.term.valueRaw = true;
|
|
@@ -39,9 +62,9 @@ class ParameterPropertyHandlerRange {
|
|
|
39
62
|
value.term.valueRaw = false;
|
|
40
63
|
}
|
|
41
64
|
else {
|
|
42
|
-
|
|
65
|
+
return false;
|
|
43
66
|
}
|
|
44
|
-
|
|
67
|
+
return true;
|
|
45
68
|
case Iris_1.IRIS_XSD.integer:
|
|
46
69
|
case Iris_1.IRIS_XSD.number:
|
|
47
70
|
case Iris_1.IRIS_XSD.int:
|
|
@@ -49,44 +72,186 @@ class ParameterPropertyHandlerRange {
|
|
|
49
72
|
case Iris_1.IRIS_XSD.long:
|
|
50
73
|
parsed = Number.parseInt(value.value, 10);
|
|
51
74
|
if (Number.isNaN(parsed)) {
|
|
52
|
-
|
|
75
|
+
return false;
|
|
53
76
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.throwIncorrectTypeError(value, param);
|
|
58
|
-
}
|
|
59
|
-
value.term.valueRaw = parsed;
|
|
77
|
+
// ParseInt also parses floats to ints!
|
|
78
|
+
if (String(parsed) !== value.value) {
|
|
79
|
+
return false;
|
|
60
80
|
}
|
|
61
|
-
|
|
81
|
+
value.term.valueRaw = parsed;
|
|
82
|
+
return true;
|
|
62
83
|
case Iris_1.IRIS_XSD.float:
|
|
63
84
|
case Iris_1.IRIS_XSD.decimal:
|
|
64
85
|
case Iris_1.IRIS_XSD.double:
|
|
65
86
|
parsed = Number.parseFloat(value.value);
|
|
66
87
|
if (Number.isNaN(parsed)) {
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
value.term.valueRaw = parsed;
|
|
88
|
+
return false;
|
|
71
89
|
}
|
|
72
|
-
|
|
90
|
+
value.term.valueRaw = parsed;
|
|
91
|
+
return true;
|
|
73
92
|
case Iris_1.IRIS_RDF.JSON:
|
|
74
93
|
try {
|
|
75
94
|
parsed = JSON.parse(value.value);
|
|
76
95
|
value.term.valueRaw = parsed;
|
|
77
96
|
}
|
|
78
97
|
catch (_a) {
|
|
79
|
-
|
|
98
|
+
return false;
|
|
80
99
|
}
|
|
81
|
-
|
|
100
|
+
return true;
|
|
82
101
|
}
|
|
83
102
|
}
|
|
84
|
-
|
|
103
|
+
// Allow IRIs to be casted to strings
|
|
104
|
+
if (value && paramRange && paramRange.value === Iris_1.IRIS_XSD.string && value.type === 'NamedNode') {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
if (paramRange && (!value || (!value.isA('Variable') && !value.isA(paramRange.term)))) {
|
|
108
|
+
if (value && paramRange.isA('ParameterRangeArray')) {
|
|
109
|
+
if (!value.list) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return value.list.every(listElement => this
|
|
113
|
+
.hasParamValueValidType(listElement, param, paramRange.property.parameterRangeValue, genericsContext));
|
|
114
|
+
}
|
|
115
|
+
// Check if the param type is a composed type
|
|
116
|
+
if (paramRange.isA('ParameterRangeUnion')) {
|
|
117
|
+
return paramRange.properties.parameterRangeElements
|
|
118
|
+
.some(child => this.hasParamValueValidType(value, param, child, genericsContext));
|
|
119
|
+
}
|
|
120
|
+
if (paramRange.isA('ParameterRangeIntersection')) {
|
|
121
|
+
return paramRange.properties.parameterRangeElements
|
|
122
|
+
.every(child => this.hasParamValueValidType(value, param, child, genericsContext));
|
|
123
|
+
}
|
|
124
|
+
if (paramRange.isA('ParameterRangeTuple')) {
|
|
125
|
+
if (!value || !value.list) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
// Iterate over list elements and try to match with tuple types
|
|
129
|
+
const listElements = value.list;
|
|
130
|
+
const tupleTypes = paramRange.properties.parameterRangeElements;
|
|
131
|
+
let listIndex = 0;
|
|
132
|
+
let tupleIndex = 0;
|
|
133
|
+
while (listIndex < listElements.length && tupleIndex < tupleTypes.length) {
|
|
134
|
+
if (tupleTypes[tupleIndex].isA('ParameterRangeRest')) {
|
|
135
|
+
// Rest types can match multiple list elements, so only increment index if no match is found.
|
|
136
|
+
if (!this.hasParamValueValidType(listElements[listIndex], param, tupleTypes[tupleIndex].property.parameterRangeValue, genericsContext)) {
|
|
137
|
+
tupleIndex++;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
listIndex++;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
if (!this.hasParamValueValidType(listElements[listIndex], param, tupleTypes[tupleIndex], genericsContext)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
tupleIndex++;
|
|
148
|
+
listIndex++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return listIndex === listElements.length &&
|
|
152
|
+
(tupleIndex === tupleTypes.length ||
|
|
153
|
+
(tupleIndex === tupleTypes.length - 1 && tupleTypes[tupleIndex].isA('ParameterRangeRest')));
|
|
154
|
+
}
|
|
155
|
+
if (paramRange.isA('ParameterRangeLiteral')) {
|
|
156
|
+
return Boolean(value && value.term.equals(paramRange.property.parameterRangeValue.term));
|
|
157
|
+
}
|
|
158
|
+
// Check if the range refers to `keyof ...`
|
|
159
|
+
if (paramRange.isA('ParameterRangeKeyof')) {
|
|
160
|
+
const component = paramRange.property.parameterRangeValue;
|
|
161
|
+
// Simulate a union of the member keys as literal parameter ranges
|
|
162
|
+
const simulatedUnionRange = this.objectLoader.createCompactedResource({
|
|
163
|
+
'@type': 'ParameterRangeUnion',
|
|
164
|
+
parameterRangeElements: component.properties.memberKeys.map(memberKey => ({
|
|
165
|
+
'@type': 'ParameterRangeLiteral',
|
|
166
|
+
parameterRangeValue: memberKey,
|
|
167
|
+
})),
|
|
168
|
+
});
|
|
169
|
+
return this.hasParamValueValidType(value, param, simulatedUnionRange, genericsContext);
|
|
170
|
+
}
|
|
171
|
+
// Check if the range refers to a generic type
|
|
172
|
+
if (paramRange.isA('ParameterRangeGenericTypeReference')) {
|
|
173
|
+
return genericsContext.bindGenericTypeToValue(paramRange.property.parameterRangeGenericType.value, value, (subValue, subType) => this.hasParamValueValidType(subValue, param, subType, genericsContext));
|
|
174
|
+
}
|
|
175
|
+
// Check if the range refers to a component with a generic type
|
|
176
|
+
if (paramRange.isA('ParameterRangeGenericComponent')) {
|
|
177
|
+
if (value) {
|
|
178
|
+
if (value.property.genericTypeInstances) {
|
|
179
|
+
// Once we support manual generics setting, we'll need to check here if we can merge with it.
|
|
180
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Simultaneous manual generic type passing and generic type inference are not supported yet.`, { parameter: param, value });
|
|
181
|
+
}
|
|
182
|
+
// For the defined generic type instances, apply them into the instance so they can be checked later
|
|
183
|
+
value.properties.genericTypeInstances = paramRange.properties.genericTypeInstances
|
|
184
|
+
.map(genericTypeInstance => this.objectLoader.createCompactedResource({
|
|
185
|
+
type: 'ParameterRangeGenericTypeReference',
|
|
186
|
+
parameterRangeGenericType: genericTypeInstance.property.parameterRangeGenericType.value,
|
|
187
|
+
parameterRangeGenericBindings: genericsContext
|
|
188
|
+
.bindings[genericTypeInstance.property.parameterRangeGenericType.value],
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
return this.hasParamValueValidType(value, param, paramRange.property.component, genericsContext);
|
|
192
|
+
}
|
|
193
|
+
// Check if this param defines a field with sub-params
|
|
194
|
+
if (paramRange.isA('ParameterRangeCollectEntries')) {
|
|
195
|
+
// TODO: Add support for type-checking nested fields with collectEntries
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
return true;
|
|
85
201
|
}
|
|
86
|
-
throwIncorrectTypeError(value, parameter) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
});
|
|
202
|
+
throwIncorrectTypeError(value, parameter, genericsContext) {
|
|
203
|
+
const withTypes = value && value.properties.types.length > 0 ? ` with types "${value.properties.types.map(resource => resource.value)}"` : '';
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-extra-parens
|
|
205
|
+
const valueString = value ? (value.list ? `[${value.list.map(subValue => subValue.value).join(', ')}]` : value.value) : 'undefined';
|
|
206
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`The value "${valueString}"${withTypes} for parameter "${parameter.value}" is not of required range type "${this.rangeToDisplayString(parameter.property.range, genericsContext)}"`, Object.assign(Object.assign({ value: value || 'undefined' }, Object.keys(genericsContext.bindings).length > 0 ?
|
|
207
|
+
{ generics: `[\n ${Object.entries(genericsContext.bindings)
|
|
208
|
+
.map(([id, values]) => `<${id}> => ${values.map(subValue => subValue.value)}`)
|
|
209
|
+
.join(',\n ')}\n]` } :
|
|
210
|
+
{}), { parameter }));
|
|
211
|
+
}
|
|
212
|
+
rangeToDisplayString(paramRange, genericsContext) {
|
|
213
|
+
if (!paramRange) {
|
|
214
|
+
return `any`;
|
|
215
|
+
}
|
|
216
|
+
if (paramRange.isA('ParameterRangeUndefined')) {
|
|
217
|
+
return `undefined`;
|
|
218
|
+
}
|
|
219
|
+
if (paramRange.isA('ParameterRangeArray')) {
|
|
220
|
+
return `${this.rangeToDisplayString(paramRange.property.parameterRangeValue, genericsContext)}[]`;
|
|
221
|
+
}
|
|
222
|
+
if (paramRange.isA('ParameterRangeRest')) {
|
|
223
|
+
return `...${this.rangeToDisplayString(paramRange.property.parameterRangeValue, genericsContext)}`;
|
|
224
|
+
}
|
|
225
|
+
if (paramRange.isA('ParameterRangeKeyof')) {
|
|
226
|
+
return `keyof ${this.rangeToDisplayString(paramRange.property.parameterRangeValue, genericsContext)}`;
|
|
227
|
+
}
|
|
228
|
+
if (paramRange.isA('ParameterRangeUnion')) {
|
|
229
|
+
return paramRange.properties.parameterRangeElements
|
|
230
|
+
.map(child => this.rangeToDisplayString(child, genericsContext))
|
|
231
|
+
.join(' | ');
|
|
232
|
+
}
|
|
233
|
+
if (paramRange.isA('ParameterRangeIntersection')) {
|
|
234
|
+
return paramRange.properties.parameterRangeElements
|
|
235
|
+
.map(child => this.rangeToDisplayString(child, genericsContext))
|
|
236
|
+
.join(' & ');
|
|
237
|
+
}
|
|
238
|
+
if (paramRange.isA('ParameterRangeTuple')) {
|
|
239
|
+
return `[${paramRange.properties.parameterRangeElements
|
|
240
|
+
.map(child => this.rangeToDisplayString(child, genericsContext))
|
|
241
|
+
.join(', ')}]`;
|
|
242
|
+
}
|
|
243
|
+
if (paramRange.isA('ParameterRangeLiteral')) {
|
|
244
|
+
return paramRange.property.parameterRangeValue.value;
|
|
245
|
+
}
|
|
246
|
+
if (paramRange.isA('ParameterRangeGenericTypeReference')) {
|
|
247
|
+
const valid = paramRange.property.parameterRangeGenericType.value in genericsContext.genericTypeIds;
|
|
248
|
+
return `<${valid ? '' : 'UNKNOWN GENERIC: '}${paramRange.property.parameterRangeGenericType.value}>`;
|
|
249
|
+
}
|
|
250
|
+
if (paramRange.isA('ParameterRangeGenericComponent')) {
|
|
251
|
+
return `(${this.rangeToDisplayString(paramRange.property.component, genericsContext)})${paramRange.properties.genericTypeInstances
|
|
252
|
+
.map(genericTypeInstance => this.rangeToDisplayString(genericTypeInstance, genericsContext)).join('')}`;
|
|
253
|
+
}
|
|
254
|
+
return paramRange.value;
|
|
90
255
|
}
|
|
91
256
|
}
|
|
92
257
|
exports.ParameterPropertyHandlerRange = ParameterPropertyHandlerRange;
|
package/lib/rdf/Iris.js
CHANGED
|
@@ -4,45 +4,45 @@ exports.IRIS_OWL = exports.PREFIX_OWL = exports.IRIS_DOAP = exports.PREFIX_DOAP
|
|
|
4
4
|
const definePrefix = (prefix) => (suffix) => `${prefix}${suffix}`;
|
|
5
5
|
exports.PREFIX_OO = definePrefix('https://linkedsoftwaredependencies.org/vocabularies/object-oriented#');
|
|
6
6
|
exports.IRIS_OO = {
|
|
7
|
-
Module: exports.PREFIX_OO('Module'),
|
|
8
|
-
Class: exports.PREFIX_OO('Class'),
|
|
9
|
-
AbstractClass: exports.PREFIX_OO('AbstractClass'),
|
|
10
|
-
ComponentInstance: exports.PREFIX_OO('ComponentInstance'),
|
|
11
|
-
component: exports.PREFIX_OO('component'),
|
|
12
|
-
componentPath: exports.PREFIX_OO('componentPath'),
|
|
13
|
-
parameter: exports.PREFIX_OO('parameter'),
|
|
7
|
+
Module: (0, exports.PREFIX_OO)('Module'),
|
|
8
|
+
Class: (0, exports.PREFIX_OO)('Class'),
|
|
9
|
+
AbstractClass: (0, exports.PREFIX_OO)('AbstractClass'),
|
|
10
|
+
ComponentInstance: (0, exports.PREFIX_OO)('ComponentInstance'),
|
|
11
|
+
component: (0, exports.PREFIX_OO)('component'),
|
|
12
|
+
componentPath: (0, exports.PREFIX_OO)('componentPath'),
|
|
13
|
+
parameter: (0, exports.PREFIX_OO)('parameter'),
|
|
14
14
|
};
|
|
15
15
|
exports.PREFIX_OM = definePrefix('https://linkedsoftwaredependencies.org/vocabularies/object-mapping#');
|
|
16
16
|
exports.PREFIX_RDF = definePrefix('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
|
|
17
17
|
exports.IRIS_RDF = {
|
|
18
|
-
subject: exports.PREFIX_RDF('subject'),
|
|
19
|
-
object: exports.PREFIX_RDF('object'),
|
|
20
|
-
type: exports.PREFIX_RDF('type'),
|
|
21
|
-
JSON: exports.PREFIX_RDF('JSON'),
|
|
18
|
+
subject: (0, exports.PREFIX_RDF)('subject'),
|
|
19
|
+
object: (0, exports.PREFIX_RDF)('object'),
|
|
20
|
+
type: (0, exports.PREFIX_RDF)('type'),
|
|
21
|
+
JSON: (0, exports.PREFIX_RDF)('JSON'),
|
|
22
22
|
};
|
|
23
23
|
exports.PREFIX_RDFS = definePrefix('http://www.w3.org/2000/01/rdf-schema#');
|
|
24
24
|
exports.IRIS_RDFS = {
|
|
25
|
-
imports: exports.PREFIX_RDFS('seeAlso'),
|
|
25
|
+
imports: (0, exports.PREFIX_RDFS)('seeAlso'),
|
|
26
26
|
};
|
|
27
27
|
exports.PREFIX_XSD = definePrefix('http://www.w3.org/2001/XMLSchema#');
|
|
28
28
|
exports.IRIS_XSD = {
|
|
29
|
-
string: exports.PREFIX_XSD('string'),
|
|
30
|
-
boolean: exports.PREFIX_XSD('boolean'),
|
|
31
|
-
integer: exports.PREFIX_XSD('integer'),
|
|
32
|
-
number: exports.PREFIX_XSD('number'),
|
|
33
|
-
int: exports.PREFIX_XSD('int'),
|
|
34
|
-
byte: exports.PREFIX_XSD('byte'),
|
|
35
|
-
long: exports.PREFIX_XSD('long'),
|
|
36
|
-
float: exports.PREFIX_XSD('float'),
|
|
37
|
-
decimal: exports.PREFIX_XSD('decimal'),
|
|
38
|
-
double: exports.PREFIX_XSD('double'),
|
|
29
|
+
string: (0, exports.PREFIX_XSD)('string'),
|
|
30
|
+
boolean: (0, exports.PREFIX_XSD)('boolean'),
|
|
31
|
+
integer: (0, exports.PREFIX_XSD)('integer'),
|
|
32
|
+
number: (0, exports.PREFIX_XSD)('number'),
|
|
33
|
+
int: (0, exports.PREFIX_XSD)('int'),
|
|
34
|
+
byte: (0, exports.PREFIX_XSD)('byte'),
|
|
35
|
+
long: (0, exports.PREFIX_XSD)('long'),
|
|
36
|
+
float: (0, exports.PREFIX_XSD)('float'),
|
|
37
|
+
decimal: (0, exports.PREFIX_XSD)('decimal'),
|
|
38
|
+
double: (0, exports.PREFIX_XSD)('double'),
|
|
39
39
|
};
|
|
40
40
|
exports.PREFIX_DOAP = definePrefix('http://usefulinc.com/ns/doap#');
|
|
41
41
|
exports.IRIS_DOAP = {
|
|
42
|
-
name: exports.PREFIX_DOAP('name'),
|
|
42
|
+
name: (0, exports.PREFIX_DOAP)('name'),
|
|
43
43
|
};
|
|
44
44
|
exports.PREFIX_OWL = definePrefix('http://www.w3.org/2002/07/owl#');
|
|
45
45
|
exports.IRIS_OWL = {
|
|
46
|
-
Restriction: exports.PREFIX_OWL('Restriction'),
|
|
46
|
+
Restriction: (0, exports.PREFIX_OWL)('Restriction'),
|
|
47
47
|
};
|
|
48
48
|
//# sourceMappingURL=Iris.js.map
|
package/lib/rdf/RdfParser.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { Readable } from 'stream';
|
|
3
|
-
import type * as RDF from '
|
|
3
|
+
import type * as RDF from '@rdfjs/types';
|
|
4
4
|
import type { ParseOptions } from 'rdf-parse';
|
|
5
5
|
import type { Logger } from 'winston';
|
|
6
6
|
/**
|
|
@@ -41,7 +41,7 @@ export declare type RdfParserOptions = ParseOptions & {
|
|
|
41
41
|
*/
|
|
42
42
|
contexts?: Record<string, any>;
|
|
43
43
|
/**
|
|
44
|
-
* The cached import paths.
|
|
44
|
+
* The cached import paths. (URL -> file)
|
|
45
45
|
*/
|
|
46
46
|
importPaths?: Record<string, string>;
|
|
47
47
|
/**
|
package/lib/rdf/RdfParser.js
CHANGED
|
@@ -20,10 +20,22 @@ class RdfParser {
|
|
|
20
20
|
// Parsing libraries don't work as expected if path contains backslashes
|
|
21
21
|
options.path = options.path.replace(/\\+/gu, '/');
|
|
22
22
|
if (!options.baseIRI) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
// Try converting path to URL using defined import paths
|
|
24
|
+
if (options.importPaths) {
|
|
25
|
+
for (const [url, file] of Object.entries(options.importPaths)) {
|
|
26
|
+
if (options.path.startsWith(file)) {
|
|
27
|
+
options.baseIRI = `${url}${options.path.slice(file.length)}`;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Fallback to a baseIRI using the file scheme
|
|
33
|
+
if (!options.baseIRI) {
|
|
34
|
+
options.baseIRI = options.path;
|
|
35
|
+
// Windows paths always contain a ':'
|
|
36
|
+
if (!options.baseIRI.includes(':') || /^[A-Za-z]:[/\\][^/]/u.test(options.baseIRI)) {
|
|
37
|
+
options.baseIRI = `file://${options.baseIRI}`;
|
|
38
|
+
}
|
|
27
39
|
}
|
|
28
40
|
}
|
|
29
41
|
// Set JSON-LD parser options
|
|
@@ -61,7 +73,7 @@ class RdfParser {
|
|
|
61
73
|
if (!(await fs.stat(pathOrUrl)).isFile()) {
|
|
62
74
|
throw new Error(`Path does not refer to a valid file: ${pathOrUrl}`);
|
|
63
75
|
}
|
|
64
|
-
return fs_1.createReadStream(pathOrUrl);
|
|
76
|
+
return (0, fs_1.createReadStream)(pathOrUrl);
|
|
65
77
|
}
|
|
66
78
|
/**
|
|
67
79
|
* Add the path to an error message.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { TransformCallback } from 'stream';
|
|
3
3
|
import { Transform } from 'stream';
|
|
4
|
-
import type * as RDF from '
|
|
4
|
+
import type * as RDF from '@rdfjs/types';
|
|
5
5
|
import type { RdfParserOptions } from './RdfParser';
|
|
6
6
|
/**
|
|
7
7
|
* A RdfStreamIncluder takes a triple stream and detects owl:includes to automatically include other files.
|
|
@@ -51,7 +51,7 @@ class RdfStreamIncluder extends stream_1.Transform {
|
|
|
51
51
|
// Recursively call the parser
|
|
52
52
|
RdfParser_1.RdfParser.fetchFileOrUrl(relativeFilePath)
|
|
53
53
|
.then((rawStream) => {
|
|
54
|
-
const data = new RdfParser_1.RdfParser().parse(rawStream, Object.assign(Object.assign({}, this.parserOptions), { path: relativeFilePath, importedFromPath: this.parserOptions.path }));
|
|
54
|
+
const data = new RdfParser_1.RdfParser().parse(rawStream, Object.assign(Object.assign({}, this.parserOptions), { baseIRI: undefined, path: relativeFilePath, importedFromPath: this.parserOptions.path }));
|
|
55
55
|
data
|
|
56
56
|
.on('data', (subData) => this.push(subData))
|
|
57
57
|
.on('error', (error) => this.emit('error', error))
|
|
@@ -70,7 +70,7 @@ class RdfStreamIncluder extends stream_1.Transform {
|
|
|
70
70
|
*/
|
|
71
71
|
validateIris(quad) {
|
|
72
72
|
if (this.parserOptions.logger) {
|
|
73
|
-
for (const term of rdf_terms_1.getNamedNodes(rdf_terms_1.getTerms(quad))) {
|
|
73
|
+
for (const term of (0, rdf_terms_1.getNamedNodes)((0, rdf_terms_1.getTerms)(quad))) {
|
|
74
74
|
if (!RdfStreamIncluder.isValidIri(term.value)) {
|
|
75
75
|
this.parserOptions.logger.warn(`Detected potentially invalid IRI '${term.value}' in ${this.parserOptions.path}`);
|
|
76
76
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "componentsjs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-beta.2",
|
|
4
4
|
"description": "A semantic dependency injection framework",
|
|
5
5
|
"lsd:contexts": {
|
|
6
6
|
"https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld": "components/context.jsonld"
|
|
@@ -33,17 +33,17 @@
|
|
|
33
33
|
"version": "manual-git-changelog onversion"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
+
"@rdfjs/types": "*",
|
|
36
37
|
"@types/minimist": "^1.2.0",
|
|
37
38
|
"@types/node": "^14.14.7",
|
|
38
|
-
"@types/rdf-js": "*",
|
|
39
39
|
"@types/semver": "^7.3.4",
|
|
40
40
|
"jsonld-context-parser": "^2.1.1",
|
|
41
41
|
"minimist": "^1.2.0",
|
|
42
|
-
"rdf-data-factory": "^1.0
|
|
43
|
-
"rdf-object": "^1.
|
|
44
|
-
"rdf-parse": "^1.
|
|
42
|
+
"rdf-data-factory": "^1.1.0",
|
|
43
|
+
"rdf-object": "^1.12.0",
|
|
44
|
+
"rdf-parse": "^1.9.1",
|
|
45
45
|
"rdf-quad": "^1.5.0",
|
|
46
|
-
"rdf-terms": "^1.
|
|
46
|
+
"rdf-terms": "^1.7.0",
|
|
47
47
|
"semver": "^7.3.2",
|
|
48
48
|
"winston": "^3.3.3"
|
|
49
49
|
},
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@rubensworks/eslint-config": "^1.0.1",
|
|
52
52
|
"@typescript-eslint/eslint-plugin": "^4.6.1",
|
|
53
53
|
"@typescript-eslint/parser": "^4.6.1",
|
|
54
|
-
"@types/jest": "^
|
|
54
|
+
"@types/jest": "^27.0.0",
|
|
55
55
|
"eslint": "^7.12.1",
|
|
56
56
|
"eslint-config-es": "3.25.3",
|
|
57
57
|
"eslint-import-resolver-typescript": "^2.3.0",
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
"eslint-plugin-tsdoc": "^0.2.7",
|
|
61
61
|
"eslint-plugin-unused-imports": "^1.0.0",
|
|
62
62
|
"jest": "^27.0.1",
|
|
63
|
-
"jest-rdf": "^1.
|
|
63
|
+
"jest-rdf": "^1.7.0",
|
|
64
64
|
"jshint": "^2.1.10",
|
|
65
65
|
"manual-git-changelog": "^1.0.1",
|
|
66
|
-
"n3": "^1.
|
|
66
|
+
"n3": "^1.11.1",
|
|
67
67
|
"pre-commit": "^1.2.2",
|
|
68
68
|
"streamify-string": "^1.0.1",
|
|
69
69
|
"ts-jest": "^27.0.1",
|
|
70
|
-
"typescript": "^4.
|
|
70
|
+
"typescript": "^4.3.5"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|
|
73
73
|
"components",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { RdfObjectLoader, Resource } from 'rdf-object';
|
|
2
|
-
import type { IParameterPropertyHandler } from './IParameterPropertyHandler';
|
|
3
|
-
/**
|
|
4
|
-
* If no value has been set, but a value is required, throw.
|
|
5
|
-
*/
|
|
6
|
-
export declare class ParameterPropertyHandlerRequired implements IParameterPropertyHandler {
|
|
7
|
-
private readonly objectLoader;
|
|
8
|
-
constructor(objectLoader: RdfObjectLoader);
|
|
9
|
-
canHandle(value: Resource[], configRoot: Resource, parameter: Resource, configElement: Resource): boolean;
|
|
10
|
-
handle(value: Resource[], configRoot: Resource, parameter: Resource, configElement: Resource): Resource[];
|
|
11
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ParameterPropertyHandlerRequired = void 0;
|
|
4
|
-
const ErrorResourcesContext_1 = require("../../util/ErrorResourcesContext");
|
|
5
|
-
/**
|
|
6
|
-
* If no value has been set, but a value is required, throw.
|
|
7
|
-
*/
|
|
8
|
-
class ParameterPropertyHandlerRequired {
|
|
9
|
-
constructor(objectLoader) {
|
|
10
|
-
this.objectLoader = objectLoader;
|
|
11
|
-
}
|
|
12
|
-
canHandle(value, configRoot, parameter, configElement) {
|
|
13
|
-
return Boolean(value.length === 0 && parameter.property.required);
|
|
14
|
-
}
|
|
15
|
-
handle(value, configRoot, parameter, configElement) {
|
|
16
|
-
throw new ErrorResourcesContext_1.ErrorResourcesContext(`No value was set for required parameter "${parameter.value}"`, {
|
|
17
|
-
config: configElement,
|
|
18
|
-
parameter,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
exports.ParameterPropertyHandlerRequired = ParameterPropertyHandlerRequired;
|
|
23
|
-
//# sourceMappingURL=ParameterPropertyHandlerRequired.js.map
|