componentsjs 5.4.2 → 5.5.1
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/components/context.json +34 -0
- package/components/context.jsonld +34 -0
- package/lib/preprocess/ConfigPreprocessorOverride.d.ts +19 -16
- package/lib/preprocess/ConfigPreprocessorOverride.js +67 -60
- package/lib/preprocess/overridesteps/IOverrideStep.d.ts +24 -0
- package/lib/preprocess/overridesteps/IOverrideStep.js +3 -0
- package/lib/preprocess/overridesteps/OverrideListInsertAfter.d.ts +14 -0
- package/lib/preprocess/overridesteps/OverrideListInsertAfter.js +28 -0
- package/lib/preprocess/overridesteps/OverrideListInsertAt.d.ts +16 -0
- package/lib/preprocess/overridesteps/OverrideListInsertAt.js +43 -0
- package/lib/preprocess/overridesteps/OverrideListInsertBefore.d.ts +14 -0
- package/lib/preprocess/overridesteps/OverrideListInsertBefore.js +27 -0
- package/lib/preprocess/overridesteps/OverrideListRemove.d.ts +13 -0
- package/lib/preprocess/overridesteps/OverrideListRemove.js +33 -0
- package/lib/preprocess/overridesteps/OverrideMapEntry.d.ts +35 -0
- package/lib/preprocess/overridesteps/OverrideMapEntry.js +83 -0
- package/lib/preprocess/overridesteps/OverrideParameters.d.ts +15 -0
- package/lib/preprocess/overridesteps/OverrideParameters.js +40 -0
- package/lib/preprocess/overridesteps/OverrideUtil.d.ts +31 -0
- package/lib/preprocess/overridesteps/OverrideUtil.js +82 -0
- package/lib/rdf/Iris.d.ts +1 -0
- package/lib/rdf/Iris.js +1 -0
- package/package.json +14 -15
package/components/context.json
CHANGED
|
@@ -80,12 +80,46 @@
|
|
|
80
80
|
"Override": {
|
|
81
81
|
"@id": "oo:Override"
|
|
82
82
|
},
|
|
83
|
+
"OverrideParameters": {
|
|
84
|
+
"@id": "oo:OverrideParameters"
|
|
85
|
+
},
|
|
86
|
+
"OverrideMapEntry": {
|
|
87
|
+
"@id": "oo:OverrideMapEntry"
|
|
88
|
+
},
|
|
89
|
+
"OverrideListInsertBefore": {
|
|
90
|
+
"@id": "oo:OverrideListInsertBefore"
|
|
91
|
+
},
|
|
92
|
+
"OverrideListInsertAfter": {
|
|
93
|
+
"@id": "oo:OverrideListInsertAfter"
|
|
94
|
+
},
|
|
95
|
+
"OverrideListInsertAt": {
|
|
96
|
+
"@id": "oo:OverrideListInsertAt"
|
|
97
|
+
},
|
|
98
|
+
"OverrideListRemove": {
|
|
99
|
+
"@id": "oo:OverrideListRemove"
|
|
100
|
+
},
|
|
83
101
|
"overrideInstance": {
|
|
84
102
|
"@id": "oo:overrideInstance"
|
|
85
103
|
},
|
|
86
104
|
"overrideParameters": {
|
|
87
105
|
"@id": "oo:overrideParameters"
|
|
88
106
|
},
|
|
107
|
+
"overrideSteps": {
|
|
108
|
+
"@id": "oo:overrideSteps",
|
|
109
|
+
"@container": "@list"
|
|
110
|
+
},
|
|
111
|
+
"overrideParameter": {
|
|
112
|
+
"@id": "oo:overrideParameter",
|
|
113
|
+
"@container": "@list"
|
|
114
|
+
},
|
|
115
|
+
"overrideTarget": {
|
|
116
|
+
"@id": "oo:overrideTarget",
|
|
117
|
+
"@container": "@list"
|
|
118
|
+
},
|
|
119
|
+
"overrideValue": {
|
|
120
|
+
"@id": "oo:overrideValue",
|
|
121
|
+
"@container": "@list"
|
|
122
|
+
},
|
|
89
123
|
"ParameterRange": {
|
|
90
124
|
"@id": "oo:ParameterRange"
|
|
91
125
|
},
|
|
@@ -80,12 +80,46 @@
|
|
|
80
80
|
"Override": {
|
|
81
81
|
"@id": "oo:Override"
|
|
82
82
|
},
|
|
83
|
+
"OverrideParameters": {
|
|
84
|
+
"@id": "oo:OverrideParameters"
|
|
85
|
+
},
|
|
86
|
+
"OverrideMapEntry": {
|
|
87
|
+
"@id": "oo:OverrideMapEntry"
|
|
88
|
+
},
|
|
89
|
+
"OverrideListInsertBefore": {
|
|
90
|
+
"@id": "oo:OverrideListInsertBefore"
|
|
91
|
+
},
|
|
92
|
+
"OverrideListInsertAfter": {
|
|
93
|
+
"@id": "oo:OverrideListInsertAfter"
|
|
94
|
+
},
|
|
95
|
+
"OverrideListInsertAt": {
|
|
96
|
+
"@id": "oo:OverrideListInsertAt"
|
|
97
|
+
},
|
|
98
|
+
"OverrideListRemove": {
|
|
99
|
+
"@id": "oo:OverrideListRemove"
|
|
100
|
+
},
|
|
83
101
|
"overrideInstance": {
|
|
84
102
|
"@id": "oo:overrideInstance"
|
|
85
103
|
},
|
|
86
104
|
"overrideParameters": {
|
|
87
105
|
"@id": "oo:overrideParameters"
|
|
88
106
|
},
|
|
107
|
+
"overrideSteps": {
|
|
108
|
+
"@id": "oo:overrideSteps",
|
|
109
|
+
"@container": "@list"
|
|
110
|
+
},
|
|
111
|
+
"overrideParameter": {
|
|
112
|
+
"@id": "oo:overrideParameter",
|
|
113
|
+
"@container": "@list"
|
|
114
|
+
},
|
|
115
|
+
"overrideTarget": {
|
|
116
|
+
"@id": "oo:overrideTarget",
|
|
117
|
+
"@container": "@list"
|
|
118
|
+
},
|
|
119
|
+
"overrideValue": {
|
|
120
|
+
"@id": "oo:overrideValue",
|
|
121
|
+
"@container": "@list"
|
|
122
|
+
},
|
|
89
123
|
"ParameterRange": {
|
|
90
124
|
"@id": "oo:ParameterRange"
|
|
91
125
|
},
|
|
@@ -7,25 +7,26 @@ import type { IConfigPreprocessor, IConfigPreprocessorTransform } from './IConfi
|
|
|
7
7
|
* Values in the given {@link Resource}s will be replaced if any overriding object is found,
|
|
8
8
|
* targeting this resource.
|
|
9
9
|
*/
|
|
10
|
-
export declare class ConfigPreprocessorOverride implements IConfigPreprocessor<
|
|
10
|
+
export declare class ConfigPreprocessorOverride implements IConfigPreprocessor<Resource[]> {
|
|
11
11
|
readonly objectLoader: RdfObjectLoader;
|
|
12
12
|
readonly componentResources: Record<string, Resource>;
|
|
13
13
|
readonly logger: Logger;
|
|
14
|
+
private readonly stepHandlers;
|
|
14
15
|
private overrides;
|
|
15
16
|
constructor(options: IComponentConfigPreprocessorOverrideOptions);
|
|
16
17
|
/**
|
|
17
18
|
* Checks if there are any overrides targeting the given resource.
|
|
18
19
|
* @param config - Resource to find overrides for.
|
|
19
20
|
*
|
|
20
|
-
* @returns A
|
|
21
|
+
* @returns A list of override steps to apply to the target, in order.
|
|
21
22
|
*/
|
|
22
|
-
canHandle(config: Resource):
|
|
23
|
+
canHandle(config: Resource): Resource[] | undefined;
|
|
23
24
|
/**
|
|
24
|
-
* Override the resource with the stored
|
|
25
|
+
* Override the resource with the stored override steps.
|
|
25
26
|
* @param config - The resource to override.
|
|
26
|
-
* @param handleResponse - Override
|
|
27
|
+
* @param handleResponse - Override steps that were found for this resource.
|
|
27
28
|
*/
|
|
28
|
-
transform(config: Resource, handleResponse:
|
|
29
|
+
transform(config: Resource, handleResponse: Resource[]): IConfigPreprocessorTransform;
|
|
29
30
|
/**
|
|
30
31
|
* Clear all cached overrides, so they will be calculated again on the next call.
|
|
31
32
|
*/
|
|
@@ -35,7 +36,7 @@ export declare class ConfigPreprocessorOverride implements IConfigPreprocessor<R
|
|
|
35
36
|
* Keys of the object are the identifiers of the resources that need to be modified,
|
|
36
37
|
* values are key/value maps listing all parameters with their new values.
|
|
37
38
|
*/
|
|
38
|
-
|
|
39
|
+
createOverrideSteps(): Record<string, Resource[]>;
|
|
39
40
|
/**
|
|
40
41
|
* Finds all Override resources in the object loader and links them to their target resource.
|
|
41
42
|
*/
|
|
@@ -47,6 +48,7 @@ export declare class ConfigPreprocessorOverride implements IConfigPreprocessor<R
|
|
|
47
48
|
* Chains all Overrides together if they reference each other.
|
|
48
49
|
* E.g., if the input is a list of Overrides A -> B, B -> C, D -> E,
|
|
49
50
|
* the result wil be [[ A, B, C ], [ D, E ]].
|
|
51
|
+
* The last element in the array will always be the non-Override resource being targeted.
|
|
50
52
|
*
|
|
51
53
|
* @param overrides - All Overrides that have to be combined.
|
|
52
54
|
*/
|
|
@@ -60,14 +62,15 @@ export declare class ConfigPreprocessorOverride implements IConfigPreprocessor<R
|
|
|
60
62
|
*/
|
|
61
63
|
protected validateChains(chains: Resource[][]): void;
|
|
62
64
|
/**
|
|
63
|
-
* Merges all Overrides in a chain to create a single override
|
|
64
|
-
*
|
|
65
|
+
* Merges all Overrides in a chain to create a single list of override steps.
|
|
66
|
+
* The order of the steps is the order in which they should be applied,
|
|
67
|
+
* with the first entry being the first step of the override closest to the target resource.
|
|
65
68
|
*
|
|
66
69
|
* @param chain - The chain of Overrides, with a normal resource as the last entry in the array.
|
|
67
70
|
*/
|
|
68
|
-
protected
|
|
69
|
-
target:
|
|
70
|
-
|
|
71
|
+
protected chainToOverrideSteps(chain: Resource[]): {
|
|
72
|
+
target: Resource;
|
|
73
|
+
steps: Resource[];
|
|
71
74
|
};
|
|
72
75
|
/**
|
|
73
76
|
* Finds the final target and validates its type value.
|
|
@@ -75,11 +78,11 @@ export declare class ConfigPreprocessorOverride implements IConfigPreprocessor<R
|
|
|
75
78
|
*/
|
|
76
79
|
protected getChainTarget(chain: Resource[]): Resource;
|
|
77
80
|
/**
|
|
78
|
-
*
|
|
79
|
-
* @param override
|
|
80
|
-
* @
|
|
81
|
+
*
|
|
82
|
+
* @param override
|
|
83
|
+
* @protected
|
|
81
84
|
*/
|
|
82
|
-
protected
|
|
85
|
+
protected simplifiedOverrideToStep(override: Resource): Resource;
|
|
83
86
|
}
|
|
84
87
|
export interface IComponentConfigPreprocessorOverrideOptions {
|
|
85
88
|
objectLoader: RdfObjectLoader;
|
|
@@ -4,6 +4,12 @@ exports.ConfigPreprocessorOverride = void 0;
|
|
|
4
4
|
const Iris_1 = require("../rdf/Iris");
|
|
5
5
|
const ResourceUtil_1 = require("../rdf/ResourceUtil");
|
|
6
6
|
const ErrorResourcesContext_1 = require("../util/ErrorResourcesContext");
|
|
7
|
+
const OverrideListInsertAfter_1 = require("./overridesteps/OverrideListInsertAfter");
|
|
8
|
+
const OverrideListInsertAt_1 = require("./overridesteps/OverrideListInsertAt");
|
|
9
|
+
const OverrideListInsertBefore_1 = require("./overridesteps/OverrideListInsertBefore");
|
|
10
|
+
const OverrideListRemove_1 = require("./overridesteps/OverrideListRemove");
|
|
11
|
+
const OverrideMapEntry_1 = require("./overridesteps/OverrideMapEntry");
|
|
12
|
+
const OverrideParameters_1 = require("./overridesteps/OverrideParameters");
|
|
7
13
|
/**
|
|
8
14
|
* An {@link IConfigPreprocessor} that handles the overriding of parameters.
|
|
9
15
|
* Values in the given {@link Resource}s will be replaced if any overriding object is found,
|
|
@@ -14,37 +20,48 @@ class ConfigPreprocessorOverride {
|
|
|
14
20
|
this.objectLoader = options.objectLoader;
|
|
15
21
|
this.componentResources = options.componentResources;
|
|
16
22
|
this.logger = options.logger;
|
|
23
|
+
this.stepHandlers = [
|
|
24
|
+
new OverrideParameters_1.OverrideParameters(),
|
|
25
|
+
new OverrideListInsertBefore_1.OverrideListInsertBefore(),
|
|
26
|
+
new OverrideListInsertAfter_1.OverrideListInsertAfter(),
|
|
27
|
+
new OverrideListInsertAt_1.OverrideListInsertAt(),
|
|
28
|
+
new OverrideListRemove_1.OverrideListRemove(),
|
|
29
|
+
new OverrideMapEntry_1.OverrideMapEntry(),
|
|
30
|
+
];
|
|
17
31
|
}
|
|
18
32
|
/**
|
|
19
33
|
* Checks if there are any overrides targeting the given resource.
|
|
20
34
|
* @param config - Resource to find overrides for.
|
|
21
35
|
*
|
|
22
|
-
* @returns A
|
|
36
|
+
* @returns A list of override steps to apply to the target, in order.
|
|
23
37
|
*/
|
|
24
38
|
canHandle(config) {
|
|
25
39
|
if (!this.overrides) {
|
|
26
|
-
this.overrides = this.
|
|
40
|
+
this.overrides = this.createOverrideSteps();
|
|
27
41
|
}
|
|
28
42
|
return this.overrides[config.value];
|
|
29
43
|
}
|
|
30
44
|
/**
|
|
31
|
-
* Override the resource with the stored
|
|
45
|
+
* Override the resource with the stored override steps.
|
|
32
46
|
* @param config - The resource to override.
|
|
33
|
-
* @param handleResponse - Override
|
|
47
|
+
* @param handleResponse - Override steps that were found for this resource.
|
|
34
48
|
*/
|
|
35
49
|
transform(config, handleResponse) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
// Apply all override steps sequentially
|
|
51
|
+
for (const step of handleResponse) {
|
|
52
|
+
let handler;
|
|
53
|
+
for (const stepHandler of this.stepHandlers) {
|
|
54
|
+
if (stepHandler.canHandle(config, step)) {
|
|
55
|
+
handler = stepHandler;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
44
58
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
59
|
+
if (!handler) {
|
|
60
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Found no handler supporting an override step of type ${step.property.type.value}`, {
|
|
61
|
+
step,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
handler.handle(config, step);
|
|
48
65
|
}
|
|
49
66
|
return { rawConfig: config, finishTransformation: false };
|
|
50
67
|
}
|
|
@@ -59,18 +76,18 @@ class ConfigPreprocessorOverride {
|
|
|
59
76
|
* Keys of the object are the identifiers of the resources that need to be modified,
|
|
60
77
|
* values are key/value maps listing all parameters with their new values.
|
|
61
78
|
*/
|
|
62
|
-
|
|
79
|
+
createOverrideSteps() {
|
|
63
80
|
const overrides = [...this.findOverrideTargets()];
|
|
64
81
|
const chains = this.createOverrideChains(overrides);
|
|
65
82
|
this.validateChains(chains);
|
|
66
|
-
const
|
|
83
|
+
const overrideSteps = {};
|
|
67
84
|
for (const chain of chains) {
|
|
68
|
-
const { target,
|
|
69
|
-
if (Object.keys(
|
|
70
|
-
|
|
85
|
+
const { target, steps } = this.chainToOverrideSteps(chain);
|
|
86
|
+
if (Object.keys(steps).length > 0) {
|
|
87
|
+
overrideSteps[target.value] = steps;
|
|
71
88
|
}
|
|
72
89
|
}
|
|
73
|
-
return
|
|
90
|
+
return overrideSteps;
|
|
74
91
|
}
|
|
75
92
|
/**
|
|
76
93
|
* Finds all Override resources in the object loader and links them to their target resource.
|
|
@@ -96,6 +113,7 @@ class ConfigPreprocessorOverride {
|
|
|
96
113
|
* Chains all Overrides together if they reference each other.
|
|
97
114
|
* E.g., if the input is a list of Overrides A -> B, B -> C, D -> E,
|
|
98
115
|
* the result wil be [[ A, B, C ], [ D, E ]].
|
|
116
|
+
* The last element in the array will always be the non-Override resource being targeted.
|
|
99
117
|
*
|
|
100
118
|
* @param overrides - All Overrides that have to be combined.
|
|
101
119
|
*/
|
|
@@ -148,31 +166,35 @@ class ConfigPreprocessorOverride {
|
|
|
148
166
|
}
|
|
149
167
|
}
|
|
150
168
|
/**
|
|
151
|
-
* Merges all Overrides in a chain to create a single override
|
|
152
|
-
*
|
|
169
|
+
* Merges all Overrides in a chain to create a single list of override steps.
|
|
170
|
+
* The order of the steps is the order in which they should be applied,
|
|
171
|
+
* with the first entry being the first step of the override closest to the target resource.
|
|
153
172
|
*
|
|
154
173
|
* @param chain - The chain of Overrides, with a normal resource as the last entry in the array.
|
|
155
174
|
*/
|
|
156
|
-
|
|
175
|
+
chainToOverrideSteps(chain) {
|
|
157
176
|
var _a, _b;
|
|
158
177
|
const target = this.getChainTarget(chain);
|
|
159
|
-
|
|
160
|
-
// This ensures the most recent override has priority.
|
|
161
|
-
let mergedOverride = {};
|
|
178
|
+
const steps = [];
|
|
162
179
|
for (let i = chain.length - 2; i >= 0; --i) {
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
180
|
+
const subStepProperties = chain[i].properties[Iris_1.IRIS_OO.overrideSteps];
|
|
181
|
+
if (subStepProperties.length > 1) {
|
|
182
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Detected multiple values for overrideSteps in Override ${chain[i].value}. RDF lists should be used for defining multiple values.`, {
|
|
183
|
+
override: chain[i],
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
let subSteps = (_b = (_a = subStepProperties[0]) === null || _a === void 0 ? void 0 : _a.list) !== null && _b !== void 0 ? _b : subStepProperties;
|
|
187
|
+
// Translate simplified format to override step
|
|
188
|
+
if (chain[i].properties[Iris_1.IRIS_OO.overrideParameters].length > 0) {
|
|
189
|
+
subSteps = [this.simplifiedOverrideToStep(chain[i])];
|
|
170
190
|
}
|
|
171
|
-
|
|
172
|
-
|
|
191
|
+
if (subSteps.length === 0) {
|
|
192
|
+
this.logger.warn(`No steps found for Override ${chain[i].value}. This Override will be ignored.`);
|
|
193
|
+
continue;
|
|
173
194
|
}
|
|
195
|
+
steps.push(...subSteps);
|
|
174
196
|
}
|
|
175
|
-
return { target
|
|
197
|
+
return { target, steps };
|
|
176
198
|
}
|
|
177
199
|
/**
|
|
178
200
|
* Finds the final target and validates its type value.
|
|
@@ -196,36 +218,21 @@ class ConfigPreprocessorOverride {
|
|
|
196
218
|
return target;
|
|
197
219
|
}
|
|
198
220
|
/**
|
|
199
|
-
*
|
|
200
|
-
* @param override
|
|
201
|
-
* @
|
|
221
|
+
*
|
|
222
|
+
* @param override
|
|
223
|
+
* @protected
|
|
202
224
|
*/
|
|
203
|
-
|
|
225
|
+
simplifiedOverrideToStep(override) {
|
|
204
226
|
const overrideObjects = override.properties[Iris_1.IRIS_OO.overrideParameters];
|
|
205
|
-
if (!overrideObjects || overrideObjects.length === 0) {
|
|
206
|
-
this.logger.warn(`No overrideParameters found for ${override.value}.`);
|
|
207
|
-
return {};
|
|
208
|
-
}
|
|
209
227
|
if (overrideObjects.length > 1) {
|
|
210
228
|
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Detected multiple values for overrideParameters in Override ${override.value}`, {
|
|
211
229
|
override,
|
|
212
230
|
});
|
|
213
231
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const overrideValues = overrideObject.properties[parameter];
|
|
219
|
-
if (overrideValues.length > 1) {
|
|
220
|
-
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Detected multiple values for override parameter ${parameter} in Override ${override.value}. RDF lists should be used for defining multiple values.`, {
|
|
221
|
-
arguments: overrideValues,
|
|
222
|
-
target,
|
|
223
|
-
override,
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
validatedObject[parameter] = overrideValues[0];
|
|
227
|
-
}
|
|
228
|
-
return validatedObject;
|
|
232
|
+
return this.objectLoader.createCompactedResource({
|
|
233
|
+
types: (0, Iris_1.PREFIX_OO)('OverrideParameters'),
|
|
234
|
+
overrideValue: overrideObjects[0],
|
|
235
|
+
});
|
|
229
236
|
}
|
|
230
237
|
}
|
|
231
238
|
exports.ConfigPreprocessorOverride = ConfigPreprocessorOverride;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
/**
|
|
3
|
+
* Transforms a resource based on the contents of an override step.
|
|
4
|
+
*/
|
|
5
|
+
export interface IOverrideStep {
|
|
6
|
+
/**
|
|
7
|
+
* Determines if this handler can apply the given override step to the resource.
|
|
8
|
+
*
|
|
9
|
+
* @param config - The resource to override.
|
|
10
|
+
* @param step - The override step to apply.
|
|
11
|
+
*
|
|
12
|
+
* @returns true if this handler should be used.
|
|
13
|
+
*/
|
|
14
|
+
canHandle: (config: Resource, step: Resource) => boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Applies the changes described in the given override step to the resource.
|
|
17
|
+
*
|
|
18
|
+
* @param config - The resource to override.
|
|
19
|
+
* @param step - The override step to apply.
|
|
20
|
+
*
|
|
21
|
+
* @returns The modified resource.
|
|
22
|
+
*/
|
|
23
|
+
handle: (config: Resource, step: Resource) => Resource;
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
import type { IOverrideStep } from './IOverrideStep';
|
|
3
|
+
/**
|
|
4
|
+
* Override step that inserts elements in a list after a specific element.
|
|
5
|
+
*
|
|
6
|
+
* Uses the following override step fields:
|
|
7
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
8
|
+
* - `overrideTarget`: Element already in the list that is used as reference. This can be a named node or a literal.
|
|
9
|
+
* - `overrideValue`: Element(s) to insert immediately after the target element.
|
|
10
|
+
*/
|
|
11
|
+
export declare class OverrideListInsertAfter implements IOverrideStep {
|
|
12
|
+
canHandle(config: Resource, step: Resource): boolean;
|
|
13
|
+
handle(config: Resource, step: Resource): Resource;
|
|
14
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OverrideListInsertAfter = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const OverrideUtil_1 = require("./OverrideUtil");
|
|
6
|
+
/**
|
|
7
|
+
* Override step that inserts elements in a list after a specific element.
|
|
8
|
+
*
|
|
9
|
+
* Uses the following override step fields:
|
|
10
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
11
|
+
* - `overrideTarget`: Element already in the list that is used as reference. This can be a named node or a literal.
|
|
12
|
+
* - `overrideValue`: Element(s) to insert immediately after the target element.
|
|
13
|
+
*/
|
|
14
|
+
class OverrideListInsertAfter {
|
|
15
|
+
canHandle(config, step) {
|
|
16
|
+
return step.property.type.value === (0, Iris_1.PREFIX_OO)('OverrideListInsertAfter');
|
|
17
|
+
}
|
|
18
|
+
handle(config, step) {
|
|
19
|
+
const { parameters, targets, values } = (0, OverrideUtil_1.extractOverrideStepFields)(step, { parameters: 1, targets: 1 });
|
|
20
|
+
const list = (0, OverrideUtil_1.getPropertyResourceList)(config, parameters[0]);
|
|
21
|
+
const index = (0, OverrideUtil_1.findResourceIndex)(list, targets[0]);
|
|
22
|
+
// +1 so we start after the selected element
|
|
23
|
+
list.splice(index + 1, 0, ...values);
|
|
24
|
+
return config;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.OverrideListInsertAfter = OverrideListInsertAfter;
|
|
28
|
+
//# sourceMappingURL=OverrideListInsertAfter.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
import type { IOverrideStep } from './IOverrideStep';
|
|
3
|
+
/**
|
|
4
|
+
* Override step that inserts elements in a list at a specific index.
|
|
5
|
+
* A negative index can be used to count from the back of the list.
|
|
6
|
+
* An index of `-0` can be used to insert at the end of the list.
|
|
7
|
+
*
|
|
8
|
+
* Uses the following override step fields:
|
|
9
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
10
|
+
* - `overrideTarget`: A literal containing the index.
|
|
11
|
+
* - `overrideValue`: Element(s) to insert at the chosen index.
|
|
12
|
+
*/
|
|
13
|
+
export declare class OverrideListInsertAt implements IOverrideStep {
|
|
14
|
+
canHandle(config: Resource, step: Resource): boolean;
|
|
15
|
+
handle(config: Resource, step: Resource): Resource;
|
|
16
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OverrideListInsertAt = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const ErrorResourcesContext_1 = require("../../util/ErrorResourcesContext");
|
|
6
|
+
const OverrideUtil_1 = require("./OverrideUtil");
|
|
7
|
+
/**
|
|
8
|
+
* Override step that inserts elements in a list at a specific index.
|
|
9
|
+
* A negative index can be used to count from the back of the list.
|
|
10
|
+
* An index of `-0` can be used to insert at the end of the list.
|
|
11
|
+
*
|
|
12
|
+
* Uses the following override step fields:
|
|
13
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
14
|
+
* - `overrideTarget`: A literal containing the index.
|
|
15
|
+
* - `overrideValue`: Element(s) to insert at the chosen index.
|
|
16
|
+
*/
|
|
17
|
+
class OverrideListInsertAt {
|
|
18
|
+
canHandle(config, step) {
|
|
19
|
+
return step.property.type.value === (0, Iris_1.PREFIX_OO)('OverrideListInsertAt');
|
|
20
|
+
}
|
|
21
|
+
handle(config, step) {
|
|
22
|
+
const { parameters, targets, values } = (0, OverrideUtil_1.extractOverrideStepFields)(step, { parameters: 1, targets: 1 });
|
|
23
|
+
const list = (0, OverrideUtil_1.getPropertyResourceList)(config, parameters[0]);
|
|
24
|
+
const val = targets[0].value;
|
|
25
|
+
if (!/^-?\d+$/u.test(val)) {
|
|
26
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Invalid index in Override step OverrideListInsertAt for parameter ${parameters[0].value}: ${val}`, {
|
|
27
|
+
config,
|
|
28
|
+
step,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Support adding elements at the end using -0
|
|
32
|
+
if (val === '-0') {
|
|
33
|
+
list.push(...values);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const index = Number.parseInt(val, 10);
|
|
37
|
+
list.splice(index, 0, ...values);
|
|
38
|
+
}
|
|
39
|
+
return config;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.OverrideListInsertAt = OverrideListInsertAt;
|
|
43
|
+
//# sourceMappingURL=OverrideListInsertAt.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
import type { IOverrideStep } from './IOverrideStep';
|
|
3
|
+
/**
|
|
4
|
+
* Override step that inserts elements in a list before a specific element.
|
|
5
|
+
*
|
|
6
|
+
* Uses the following override step fields:
|
|
7
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
8
|
+
* - `overrideTarget`: Element already in the list that is used as reference. This can be a named node or a literal.
|
|
9
|
+
* - `overrideValue`: Element(s) to insert immediately before the target element.
|
|
10
|
+
*/
|
|
11
|
+
export declare class OverrideListInsertBefore implements IOverrideStep {
|
|
12
|
+
canHandle(config: Resource, step: Resource): boolean;
|
|
13
|
+
handle(config: Resource, step: Resource): Resource;
|
|
14
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OverrideListInsertBefore = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const OverrideUtil_1 = require("./OverrideUtil");
|
|
6
|
+
/**
|
|
7
|
+
* Override step that inserts elements in a list before a specific element.
|
|
8
|
+
*
|
|
9
|
+
* Uses the following override step fields:
|
|
10
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
11
|
+
* - `overrideTarget`: Element already in the list that is used as reference. This can be a named node or a literal.
|
|
12
|
+
* - `overrideValue`: Element(s) to insert immediately before the target element.
|
|
13
|
+
*/
|
|
14
|
+
class OverrideListInsertBefore {
|
|
15
|
+
canHandle(config, step) {
|
|
16
|
+
return step.property.type.value === (0, Iris_1.PREFIX_OO)('OverrideListInsertBefore');
|
|
17
|
+
}
|
|
18
|
+
handle(config, step) {
|
|
19
|
+
const { parameters, targets, values } = (0, OverrideUtil_1.extractOverrideStepFields)(step, { parameters: 1, targets: 1 });
|
|
20
|
+
const list = (0, OverrideUtil_1.getPropertyResourceList)(config, parameters[0]);
|
|
21
|
+
const index = (0, OverrideUtil_1.findResourceIndex)(list, targets[0]);
|
|
22
|
+
list.splice(index, 0, ...values);
|
|
23
|
+
return config;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.OverrideListInsertBefore = OverrideListInsertBefore;
|
|
27
|
+
//# sourceMappingURL=OverrideListInsertBefore.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
import type { IOverrideStep } from './IOverrideStep';
|
|
3
|
+
/**
|
|
4
|
+
* Override step that removes specified elements.
|
|
5
|
+
*
|
|
6
|
+
* Uses the following override step fields:
|
|
7
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
8
|
+
* - `overrideTarget`: Element(s) already in the list that need to be removed. These can be named nodes or literals.
|
|
9
|
+
*/
|
|
10
|
+
export declare class OverrideListRemove implements IOverrideStep {
|
|
11
|
+
canHandle(config: Resource, step: Resource): boolean;
|
|
12
|
+
handle(config: Resource, step: Resource): Resource;
|
|
13
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OverrideListRemove = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const OverrideUtil_1 = require("./OverrideUtil");
|
|
6
|
+
/**
|
|
7
|
+
* Override step that removes specified elements.
|
|
8
|
+
*
|
|
9
|
+
* Uses the following override step fields:
|
|
10
|
+
* - `overrideParameter`: Parameter of the original object that contains the list.
|
|
11
|
+
* - `overrideTarget`: Element(s) already in the list that need to be removed. These can be named nodes or literals.
|
|
12
|
+
*/
|
|
13
|
+
class OverrideListRemove {
|
|
14
|
+
canHandle(config, step) {
|
|
15
|
+
return step.property.type.value === (0, Iris_1.PREFIX_OO)('OverrideListRemove');
|
|
16
|
+
}
|
|
17
|
+
handle(config, step) {
|
|
18
|
+
const { parameters, targets, values } = (0, OverrideUtil_1.extractOverrideStepFields)(step, { parameters: 1, values: 0 });
|
|
19
|
+
const list = (0, OverrideUtil_1.getPropertyResourceList)(config, parameters[0]);
|
|
20
|
+
const indexes = [];
|
|
21
|
+
for (const element of targets) {
|
|
22
|
+
indexes.push((0, OverrideUtil_1.findResourceIndex)(list, element));
|
|
23
|
+
}
|
|
24
|
+
// Highest number first so indexes remain correct while sorting
|
|
25
|
+
indexes.sort((left, right) => right - left);
|
|
26
|
+
for (const index of indexes) {
|
|
27
|
+
list.splice(index, 1);
|
|
28
|
+
}
|
|
29
|
+
return config;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.OverrideListRemove = OverrideListRemove;
|
|
33
|
+
//# sourceMappingURL=OverrideListRemove.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
import type { IOverrideStep } from './IOverrideStep';
|
|
3
|
+
/**
|
|
4
|
+
* Override step that updates an entry in a key/value map.
|
|
5
|
+
*
|
|
6
|
+
* Uses the following override step fields:
|
|
7
|
+
* - `overrideParameter`: Parameter of the original object that contains the key/value map.
|
|
8
|
+
* - `overrideTarget`: The key that needs to be updated.
|
|
9
|
+
* - `overrideValue`: The new value for the key. In case this is not defined, the key will be deleted instead.
|
|
10
|
+
*/
|
|
11
|
+
export declare class OverrideMapEntry implements IOverrideStep {
|
|
12
|
+
canHandle(config: Resource, step: Resource): boolean;
|
|
13
|
+
handle(config: Resource, step: Resource): Resource;
|
|
14
|
+
/**
|
|
15
|
+
* Finds the URIs used to link to the key and value of a map entry.
|
|
16
|
+
*
|
|
17
|
+
* @param type - Type of the class that contains the key/value map.
|
|
18
|
+
* @param parameter - Parameter of the class used to link to the key/value map.
|
|
19
|
+
*/
|
|
20
|
+
protected findProperties(type: Resource, parameter: Resource): {
|
|
21
|
+
key: Resource;
|
|
22
|
+
value: Resource;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Finds the index in a list of key/value map entries of the entry with the matching key.
|
|
26
|
+
*
|
|
27
|
+
* @param entries - List of key/value map entries.
|
|
28
|
+
* @param key - Key of the entry to find.
|
|
29
|
+
* @param properties - URIs used to link the key and value of a map entry.
|
|
30
|
+
*/
|
|
31
|
+
protected findEntryIndex(entries: Resource[], key: Resource, properties: {
|
|
32
|
+
key: Resource;
|
|
33
|
+
value: Resource;
|
|
34
|
+
}): number;
|
|
35
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OverrideMapEntry = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const ErrorResourcesContext_1 = require("../../util/ErrorResourcesContext");
|
|
6
|
+
const OverrideUtil_1 = require("./OverrideUtil");
|
|
7
|
+
/**
|
|
8
|
+
* Override step that updates an entry in a key/value map.
|
|
9
|
+
*
|
|
10
|
+
* Uses the following override step fields:
|
|
11
|
+
* - `overrideParameter`: Parameter of the original object that contains the key/value map.
|
|
12
|
+
* - `overrideTarget`: The key that needs to be updated.
|
|
13
|
+
* - `overrideValue`: The new value for the key. In case this is not defined, the key will be deleted instead.
|
|
14
|
+
*/
|
|
15
|
+
class OverrideMapEntry {
|
|
16
|
+
canHandle(config, step) {
|
|
17
|
+
return step.property.type.value === (0, Iris_1.PREFIX_OO)('OverrideMapEntry');
|
|
18
|
+
}
|
|
19
|
+
handle(config, step) {
|
|
20
|
+
const { parameters, targets, values } = (0, OverrideUtil_1.extractOverrideStepFields)(step, { parameters: 1, targets: 1 });
|
|
21
|
+
const properties = this.findProperties(config.property.type, parameters[0]);
|
|
22
|
+
const entries = (0, OverrideUtil_1.getPropertyResourceList)(config, parameters[0]);
|
|
23
|
+
const index = this.findEntryIndex(entries, targets[0], properties);
|
|
24
|
+
if (values.length === 0) {
|
|
25
|
+
// Remove the entry
|
|
26
|
+
entries.splice(index, 1);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Replace the value of the entry
|
|
30
|
+
entries[index].properties[properties.value.value] = values;
|
|
31
|
+
}
|
|
32
|
+
return config;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Finds the URIs used to link to the key and value of a map entry.
|
|
36
|
+
*
|
|
37
|
+
* @param type - Type of the class that contains the key/value map.
|
|
38
|
+
* @param parameter - Parameter of the class used to link to the key/value map.
|
|
39
|
+
*/
|
|
40
|
+
findProperties(type, parameter) {
|
|
41
|
+
var _a, _b;
|
|
42
|
+
const constructArgs = (_a = type.property.constructorArguments.list) !== null && _a !== void 0 ? _a : [];
|
|
43
|
+
for (const arg of constructArgs) {
|
|
44
|
+
const fields = (_b = arg.property.fields.list) !== null && _b !== void 0 ? _b : [];
|
|
45
|
+
for (const field of fields) {
|
|
46
|
+
let collectEntries = field.property.collectEntries;
|
|
47
|
+
// Not sure when this is not a list in practice.
|
|
48
|
+
// Based on behaviour in `ConstructorArgumentsElementMappingHandlerCollectEntries`.
|
|
49
|
+
if (collectEntries.list) {
|
|
50
|
+
collectEntries = collectEntries.list[0];
|
|
51
|
+
}
|
|
52
|
+
if (collectEntries.term.equals(parameter.term)) {
|
|
53
|
+
return { key: field.property.key, value: field.property.value };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Unable to find key/value URIs for parameter ${parameter.value}`, {
|
|
58
|
+
type,
|
|
59
|
+
parameter,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Finds the index in a list of key/value map entries of the entry with the matching key.
|
|
64
|
+
*
|
|
65
|
+
* @param entries - List of key/value map entries.
|
|
66
|
+
* @param key - Key of the entry to find.
|
|
67
|
+
* @param properties - URIs used to link the key and value of a map entry.
|
|
68
|
+
*/
|
|
69
|
+
findEntryIndex(entries, key, properties) {
|
|
70
|
+
for (const [i, entry] of entries.entries()) {
|
|
71
|
+
if (key.term.equals(entry.property[properties.key.value].term)) {
|
|
72
|
+
return i;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Unable to find key/value entry with key ${key.value}`, {
|
|
76
|
+
entries,
|
|
77
|
+
key,
|
|
78
|
+
properties,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.OverrideMapEntry = OverrideMapEntry;
|
|
83
|
+
//# sourceMappingURL=OverrideMapEntry.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
import type { IOverrideStep } from './IOverrideStep';
|
|
3
|
+
/**
|
|
4
|
+
* Override step that replaces properties of the target object.
|
|
5
|
+
* Only the specified parameters will be replaced,
|
|
6
|
+
* others will keep their original value.
|
|
7
|
+
* In case the type is changed all original values will be removed.
|
|
8
|
+
*
|
|
9
|
+
* Uses the following override step fields:
|
|
10
|
+
* - `overrideValue`: New properties for the object.
|
|
11
|
+
*/
|
|
12
|
+
export declare class OverrideParameters implements IOverrideStep {
|
|
13
|
+
canHandle(config: Resource, step: Resource): boolean;
|
|
14
|
+
handle(config: Resource, step: Resource): Resource;
|
|
15
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OverrideParameters = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const OverrideUtil_1 = require("./OverrideUtil");
|
|
6
|
+
/**
|
|
7
|
+
* Override step that replaces properties of the target object.
|
|
8
|
+
* Only the specified parameters will be replaced,
|
|
9
|
+
* others will keep their original value.
|
|
10
|
+
* In case the type is changed all original values will be removed.
|
|
11
|
+
*
|
|
12
|
+
* Uses the following override step fields:
|
|
13
|
+
* - `overrideValue`: New properties for the object.
|
|
14
|
+
*/
|
|
15
|
+
class OverrideParameters {
|
|
16
|
+
canHandle(config, step) {
|
|
17
|
+
return step.property.type.value === (0, Iris_1.PREFIX_OO)('OverrideParameters');
|
|
18
|
+
}
|
|
19
|
+
handle(config, step) {
|
|
20
|
+
var _a;
|
|
21
|
+
const { values } = (0, OverrideUtil_1.extractOverrideStepFields)(step, { parameters: 0, targets: 0, values: 1 });
|
|
22
|
+
const partialResource = values[0];
|
|
23
|
+
// In case the step has a different type, the properties of the previous step don't matter any more,
|
|
24
|
+
// as the object is being replaced completely.
|
|
25
|
+
const originalType = config.property.type.term;
|
|
26
|
+
const newType = (_a = partialResource.property.type) === null || _a === void 0 ? void 0 : _a.term;
|
|
27
|
+
// In case the type changes we have to delete all the original properties as those correspond to the old type
|
|
28
|
+
if (newType && !newType.equals(originalType)) {
|
|
29
|
+
for (const id of Object.keys(config.properties)) {
|
|
30
|
+
delete config.properties[id];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const property of Object.keys(partialResource.properties)) {
|
|
34
|
+
config.properties[property] = partialResource.properties[property];
|
|
35
|
+
}
|
|
36
|
+
return config;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.OverrideParameters = OverrideParameters;
|
|
40
|
+
//# sourceMappingURL=OverrideParameters.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Resource } from 'rdf-object';
|
|
2
|
+
export declare const OVERRIDE_STEP_FIELD_NAMES: readonly ["parameter", "target", "value"];
|
|
3
|
+
export type OverrideStepFieldName = `${typeof OVERRIDE_STEP_FIELD_NAMES[number]}s`;
|
|
4
|
+
/**
|
|
5
|
+
* Extracts the fields from an override step and checks if the correct amount is present.
|
|
6
|
+
* Will throw an error if the amount doesn't match what is expected.
|
|
7
|
+
*
|
|
8
|
+
* @param step - Override step to get the fields from.
|
|
9
|
+
* @param expected - For each field, how many are expected. The value can be undefined if there is no fixed amount.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractOverrideStepFields(step: Resource, expected?: {
|
|
12
|
+
[key in OverrideStepFieldName]?: number;
|
|
13
|
+
}): Record<OverrideStepFieldName, Resource[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Returns a list containing all values for the given resource found with the given property.
|
|
16
|
+
* In case there are multiple matches, the lists will be merged.
|
|
17
|
+
* The parameter of the resource will be updated to have a single value which is the returned list,
|
|
18
|
+
* so the returned list can be updated to modify the resource directly.
|
|
19
|
+
*
|
|
20
|
+
* @param config
|
|
21
|
+
* @param parameter
|
|
22
|
+
*/
|
|
23
|
+
export declare function getPropertyResourceList(config: Resource, parameter: Resource): Resource[];
|
|
24
|
+
/**
|
|
25
|
+
* Finds the index of the given resource in the given list.
|
|
26
|
+
* Will throw an error if the resource is not found.
|
|
27
|
+
*
|
|
28
|
+
* @param list - The list to find the resource in.
|
|
29
|
+
* @param target - The resource to find.
|
|
30
|
+
*/
|
|
31
|
+
export declare function findResourceIndex(list: Resource[], target: Resource): number;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findResourceIndex = exports.getPropertyResourceList = exports.extractOverrideStepFields = exports.OVERRIDE_STEP_FIELD_NAMES = void 0;
|
|
4
|
+
const Iris_1 = require("../../rdf/Iris");
|
|
5
|
+
const ErrorResourcesContext_1 = require("../../util/ErrorResourcesContext");
|
|
6
|
+
exports.OVERRIDE_STEP_FIELD_NAMES = ['parameter', 'target', 'value'];
|
|
7
|
+
/**
|
|
8
|
+
* Extracts the fields from an override step and checks if the correct amount is present.
|
|
9
|
+
* Will throw an error if the amount doesn't match what is expected.
|
|
10
|
+
*
|
|
11
|
+
* @param step - Override step to get the fields from.
|
|
12
|
+
* @param expected - For each field, how many are expected. The value can be undefined if there is no fixed amount.
|
|
13
|
+
*/
|
|
14
|
+
function extractOverrideStepFields(step, expected = {}) {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
// Type is not correct yet now but will be completed in the loop below
|
|
17
|
+
const result = {};
|
|
18
|
+
for (const key of exports.OVERRIDE_STEP_FIELD_NAMES) {
|
|
19
|
+
const overrideKey = `override${key[0].toUpperCase()}${key.slice(1)}`;
|
|
20
|
+
const propertiesKey = `${key}s`;
|
|
21
|
+
const properties = step.properties[(0, Iris_1.PREFIX_OO)(overrideKey)];
|
|
22
|
+
if (properties.length > 1) {
|
|
23
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Detected multiple values for ${overrideKey} in Override step ${step.value}. RDF lists should be used for defining multiple values.`, {
|
|
24
|
+
overrideStep: step,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const list = (_b = (_a = properties[0]) === null || _a === void 0 ? void 0 : _a.list) !== null && _b !== void 0 ? _b : properties;
|
|
28
|
+
if (typeof expected[propertiesKey] === 'number' && list.length !== expected[propertiesKey]) {
|
|
29
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Expected ${expected[propertiesKey]} entries for ${overrideKey} but found ${list.length} in Override step ${step.value}`, {
|
|
30
|
+
overrideStep: step,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
result[propertiesKey] = list;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
exports.extractOverrideStepFields = extractOverrideStepFields;
|
|
38
|
+
/**
|
|
39
|
+
* Returns a list containing all values for the given resource found with the given property.
|
|
40
|
+
* In case there are multiple matches, the lists will be merged.
|
|
41
|
+
* The parameter of the resource will be updated to have a single value which is the returned list,
|
|
42
|
+
* so the returned list can be updated to modify the resource directly.
|
|
43
|
+
*
|
|
44
|
+
* @param config
|
|
45
|
+
* @param parameter
|
|
46
|
+
*/
|
|
47
|
+
function getPropertyResourceList(config, parameter) {
|
|
48
|
+
const properties = config.properties[parameter.value];
|
|
49
|
+
if (!properties || properties.length === 0) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
// Having multiple lists can happen if multiple config files add elements to the same list
|
|
53
|
+
const list = properties.flatMap(prop => prop.list);
|
|
54
|
+
if (list.some(res => res === undefined)) {
|
|
55
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Invalid target in Override step targeting ${config.value}: ${parameter.value} does not reference a list`, {
|
|
56
|
+
config,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
config.properties[parameter.value] = [properties[0]];
|
|
60
|
+
properties[0].list = list;
|
|
61
|
+
return properties[0].list;
|
|
62
|
+
}
|
|
63
|
+
exports.getPropertyResourceList = getPropertyResourceList;
|
|
64
|
+
/**
|
|
65
|
+
* Finds the index of the given resource in the given list.
|
|
66
|
+
* Will throw an error if the resource is not found.
|
|
67
|
+
*
|
|
68
|
+
* @param list - The list to find the resource in.
|
|
69
|
+
* @param target - The resource to find.
|
|
70
|
+
*/
|
|
71
|
+
function findResourceIndex(list, target) {
|
|
72
|
+
const index = list.findIndex((element) => element.term.equals(target.term));
|
|
73
|
+
if (index < 0) {
|
|
74
|
+
throw new ErrorResourcesContext_1.ErrorResourcesContext(`Unable to find ${target.value} in targeted list while overriding.`, {
|
|
75
|
+
target,
|
|
76
|
+
list,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return index;
|
|
80
|
+
}
|
|
81
|
+
exports.findResourceIndex = findResourceIndex;
|
|
82
|
+
//# sourceMappingURL=OverrideUtil.js.map
|
package/lib/rdf/Iris.d.ts
CHANGED
package/lib/rdf/Iris.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.IRIS_OO = {
|
|
|
13
13
|
Override: (0, exports.PREFIX_OO)('Override'),
|
|
14
14
|
overrideInstance: (0, exports.PREFIX_OO)('overrideInstance'),
|
|
15
15
|
overrideParameters: (0, exports.PREFIX_OO)('overrideParameters'),
|
|
16
|
+
overrideSteps: (0, exports.PREFIX_OO)('overrideSteps'),
|
|
16
17
|
parameter: (0, exports.PREFIX_OO)('parameter'),
|
|
17
18
|
};
|
|
18
19
|
exports.PREFIX_OM = definePrefix('https://linkedsoftwaredependencies.org/vocabularies/object-mapping#');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "componentsjs",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.1",
|
|
4
4
|
"description": "A semantic dependency injection framework",
|
|
5
5
|
"lsd:contexts": {
|
|
6
6
|
"https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^5.0.0/components/context.jsonld": "components/context.jsonld"
|
|
@@ -19,21 +19,19 @@
|
|
|
19
19
|
],
|
|
20
20
|
"author": "Ruben Taelman <ruben.taelman@ugent.be>",
|
|
21
21
|
"license": "MIT",
|
|
22
|
-
"
|
|
23
|
-
"node": ">=8.0"
|
|
24
|
-
},
|
|
22
|
+
"packageManager": "yarn@4.0.1",
|
|
25
23
|
"scripts": {
|
|
26
|
-
"test": "
|
|
27
|
-
"test:jest": "jest
|
|
28
|
-
"test:webpack": "
|
|
24
|
+
"test": "yarn test:jest && yarn test:webpack",
|
|
25
|
+
"test:jest": "jest",
|
|
26
|
+
"test:webpack": "yarn test:webpack:node && yarn test:webpack:web",
|
|
29
27
|
"test:webpack:node": "webpack -c test/webpack/webpack.config.js && node test/webpack/build/test.min.js",
|
|
30
28
|
"test:webpack:web": "webpack -c test/webpack/webpack.config-web.js && node test/webpack/build-web/test.min.js",
|
|
31
|
-
"test-watch": "jest
|
|
29
|
+
"test-watch": "jest --watch",
|
|
32
30
|
"build": "scopy ./components/context.jsonld ./components/context.json && tsc && chmod +x ./bin/compile-config.js",
|
|
33
31
|
"build-watch": "tsc --watch",
|
|
34
32
|
"lint": "eslint . --ext .ts --cache",
|
|
35
|
-
"validate": "
|
|
36
|
-
"prepare": "
|
|
33
|
+
"validate": "yarn info",
|
|
34
|
+
"prepare": "yarn build",
|
|
37
35
|
"version": "manual-git-changelog onversion"
|
|
38
36
|
},
|
|
39
37
|
"dependencies": {
|
|
@@ -54,7 +52,7 @@
|
|
|
54
52
|
},
|
|
55
53
|
"devDependencies": {
|
|
56
54
|
"@rubensworks/eslint-config": "^1.0.1",
|
|
57
|
-
"@types/jest": "^
|
|
55
|
+
"@types/jest": "^29.0.0",
|
|
58
56
|
"@types/stream-to-array": "^2.3.0",
|
|
59
57
|
"@types/streamify-string": "^1.0.0",
|
|
60
58
|
"@typescript-eslint/eslint-plugin": "^5.0.0",
|
|
@@ -66,17 +64,18 @@
|
|
|
66
64
|
"eslint-plugin-jest": "^26.0.0",
|
|
67
65
|
"eslint-plugin-tsdoc": "^0.2.7",
|
|
68
66
|
"eslint-plugin-unused-imports": "^2.0.0",
|
|
69
|
-
"jest": "^
|
|
70
|
-
"jest-
|
|
67
|
+
"jest": "^29.0.0",
|
|
68
|
+
"jest-mock": "^29.0.0",
|
|
69
|
+
"jest-rdf": "^1.8.0",
|
|
71
70
|
"jshint": "^2.1.10",
|
|
72
71
|
"manual-git-changelog": "^1.0.1",
|
|
73
72
|
"n3": "^1.11.1",
|
|
74
|
-
"node-polyfill-webpack-plugin": "^
|
|
73
|
+
"node-polyfill-webpack-plugin": "^3.0.0",
|
|
75
74
|
"pre-commit": "^1.2.2",
|
|
76
75
|
"simple-copy": "^2.2.1",
|
|
77
76
|
"stream-to-array": "^2.3.0",
|
|
78
77
|
"streamify-string": "^1.0.1",
|
|
79
|
-
"ts-jest": "^
|
|
78
|
+
"ts-jest": "^29.1.0",
|
|
80
79
|
"ts-loader": "^9.4.1",
|
|
81
80
|
"typescript": "^5.0.0",
|
|
82
81
|
"webpack": "^5.75.0",
|