@fgv/ts-json 1.9.6 → 2.0.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ts-json.d.ts +1826 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +42 -0
- package/lib/index.js.map +1 -0
- package/lib/packlets/context/compositeJsonMap.d.ts +60 -0
- package/lib/packlets/context/compositeJsonMap.d.ts.map +1 -0
- package/lib/packlets/context/compositeJsonMap.js +105 -0
- package/lib/packlets/context/compositeJsonMap.js.map +1 -0
- package/lib/packlets/context/contextHelpers.d.ts +116 -0
- package/lib/packlets/context/contextHelpers.d.ts.map +1 -0
- package/lib/packlets/context/contextHelpers.js +191 -0
- package/lib/packlets/context/contextHelpers.js.map +1 -0
- package/lib/packlets/context/index.d.ts +4 -0
- package/lib/packlets/context/index.d.ts.map +1 -0
- package/lib/packlets/context/index.js +31 -0
- package/lib/packlets/context/index.js.map +1 -0
- package/lib/packlets/context/jsonContext.d.ts +84 -0
- package/lib/packlets/context/jsonContext.d.ts.map +1 -0
- package/lib/packlets/context/jsonContext.js +41 -0
- package/lib/packlets/context/jsonContext.js.map +1 -0
- package/lib/packlets/converters/converters.d.ts +54 -0
- package/lib/packlets/converters/converters.d.ts.map +1 -0
- package/lib/packlets/converters/converters.js +105 -0
- package/lib/packlets/converters/converters.js.map +1 -0
- package/lib/packlets/converters/file.d.ts +83 -0
- package/lib/packlets/converters/file.d.ts.map +1 -0
- package/lib/packlets/converters/file.js +162 -0
- package/lib/packlets/converters/file.js.map +1 -0
- package/lib/packlets/converters/index.d.ts +5 -0
- package/lib/packlets/converters/index.d.ts.map +1 -0
- package/lib/packlets/converters/index.js +56 -0
- package/lib/packlets/converters/index.js.map +1 -0
- package/lib/packlets/converters/jsonConverter.d.ts +276 -0
- package/lib/packlets/converters/jsonConverter.d.ts.map +1 -0
- package/lib/packlets/converters/jsonConverter.js +310 -0
- package/lib/packlets/converters/jsonConverter.js.map +1 -0
- package/lib/packlets/editor/common.d.ts +67 -0
- package/lib/packlets/editor/common.d.ts.map +1 -0
- package/lib/packlets/editor/common.js +3 -0
- package/lib/packlets/editor/common.js.map +1 -0
- package/lib/packlets/editor/index.d.ts +8 -0
- package/lib/packlets/editor/index.d.ts.map +1 -0
- package/{jsonEditor → lib/packlets/editor}/index.js +15 -9
- package/lib/packlets/editor/index.js.map +1 -0
- package/lib/packlets/editor/jsonEditor.d.ts +155 -0
- package/lib/packlets/editor/jsonEditor.d.ts.map +1 -0
- package/lib/packlets/editor/jsonEditor.js +332 -0
- package/lib/packlets/editor/jsonEditor.js.map +1 -0
- package/lib/packlets/editor/jsonEditorRule.d.ts +64 -0
- package/lib/packlets/editor/jsonEditorRule.d.ts.map +1 -0
- package/lib/packlets/editor/jsonEditorRule.js +54 -0
- package/lib/packlets/editor/jsonEditorRule.js.map +1 -0
- package/lib/packlets/editor/jsonEditorState.d.ts +125 -0
- package/lib/packlets/editor/jsonEditorState.d.ts.map +1 -0
- package/lib/packlets/editor/jsonEditorState.js +177 -0
- package/lib/packlets/editor/jsonEditorState.js.map +1 -0
- package/lib/packlets/editor/jsonReferenceMap.d.ts +303 -0
- package/lib/packlets/editor/jsonReferenceMap.d.ts.map +1 -0
- package/lib/packlets/editor/jsonReferenceMap.js +324 -0
- package/lib/packlets/editor/jsonReferenceMap.js.map +1 -0
- package/lib/packlets/editor/rules/conditional.d.ts +107 -0
- package/lib/packlets/editor/rules/conditional.d.ts.map +1 -0
- package/lib/packlets/editor/rules/conditional.js +167 -0
- package/lib/packlets/editor/rules/conditional.js.map +1 -0
- package/{jsonEditor → lib/packlets/editor}/rules/index.d.ts +1 -0
- package/lib/packlets/editor/rules/index.d.ts.map +1 -0
- package/lib/packlets/editor/rules/index.js +42 -0
- package/lib/packlets/editor/rules/index.js.map +1 -0
- package/lib/packlets/editor/rules/multivalue.d.ts +94 -0
- package/lib/packlets/editor/rules/multivalue.d.ts.map +1 -0
- package/lib/packlets/editor/rules/multivalue.js +141 -0
- package/lib/packlets/editor/rules/multivalue.js.map +1 -0
- package/lib/packlets/editor/rules/references.d.ts +69 -0
- package/lib/packlets/editor/rules/references.d.ts.map +1 -0
- package/lib/packlets/editor/rules/references.js +159 -0
- package/lib/packlets/editor/rules/references.js.map +1 -0
- package/lib/packlets/editor/rules/templates.d.ts +74 -0
- package/lib/packlets/editor/rules/templates.d.ts.map +1 -0
- package/lib/packlets/editor/rules/templates.js +127 -0
- package/lib/packlets/editor/rules/templates.js.map +1 -0
- package/lib/packlets/json/common.d.ts +85 -0
- package/lib/packlets/json/common.d.ts.map +1 -0
- package/lib/packlets/json/common.js +123 -0
- package/lib/packlets/json/common.js.map +1 -0
- package/lib/packlets/json/index.d.ts +2 -0
- package/lib/packlets/json/index.d.ts.map +1 -0
- package/lib/packlets/json/index.js +39 -0
- package/lib/packlets/json/index.js.map +1 -0
- package/package.json +58 -49
- package/common.d.ts +0 -58
- package/common.js +0 -116
- package/compositeJsonMap.d.ts +0 -47
- package/compositeJsonMap.js +0 -97
- package/contextHelpers.d.ts +0 -21
- package/contextHelpers.js +0 -101
- package/converters.d.ts +0 -37
- package/converters.js +0 -92
- package/file.d.ts +0 -60
- package/file.js +0 -140
- package/index.d.ts +0 -10
- package/index.js +0 -62
- package/jsonContext.d.ts +0 -74
- package/jsonContext.js +0 -40
- package/jsonConverter.d.ts +0 -229
- package/jsonConverter.js +0 -292
- package/jsonEditor/common.d.ts +0 -36
- package/jsonEditor/common.js +0 -3
- package/jsonEditor/index.d.ts +0 -5
- package/jsonEditor/jsonEditor.d.ts +0 -74
- package/jsonEditor/jsonEditor.js +0 -259
- package/jsonEditor/jsonEditorRule.d.ts +0 -47
- package/jsonEditor/jsonEditorRule.js +0 -44
- package/jsonEditor/jsonEditorState.d.ts +0 -24
- package/jsonEditor/jsonEditorState.js +0 -86
- package/jsonEditor/rules/conditional.d.ts +0 -84
- package/jsonEditor/rules/conditional.js +0 -146
- package/jsonEditor/rules/index.js +0 -21
- package/jsonEditor/rules/multivalue.d.ts +0 -78
- package/jsonEditor/rules/multivalue.js +0 -129
- package/jsonEditor/rules/references.d.ts +0 -62
- package/jsonEditor/rules/references.js +0 -158
- package/jsonEditor/rules/templates.d.ts +0 -56
- package/jsonEditor/rules/templates.js +0 -115
- package/jsonReferenceMap.d.ts +0 -138
- package/jsonReferenceMap.js +0 -202
package/jsonEditor/jsonEditor.js
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2020 Erik Fortune
|
|
4
|
-
*
|
|
5
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
* in the Software without restriction, including without limitation the rights
|
|
8
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
* furnished to do so, subject to the following conditions:
|
|
11
|
-
*
|
|
12
|
-
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
* copies or substantial portions of the Software.
|
|
14
|
-
*
|
|
15
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
* SOFTWARE.
|
|
22
|
-
*/
|
|
23
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.JsonEditor = void 0;
|
|
25
|
-
const rules_1 = require("./rules");
|
|
26
|
-
const ts_utils_1 = require("@fgv/ts-utils");
|
|
27
|
-
const common_1 = require("../common");
|
|
28
|
-
const jsonEditorState_1 = require("./jsonEditorState");
|
|
29
|
-
/**
|
|
30
|
-
* The JsonEditor can be used to edit JSON objects in place or to clone any JSON value,
|
|
31
|
-
* applying a default context and optional set of editor rules that were supplied at
|
|
32
|
-
* initialization.
|
|
33
|
-
*/
|
|
34
|
-
class JsonEditor {
|
|
35
|
-
constructor(options, rules) {
|
|
36
|
-
this.options = JsonEditor._getDefaultOptions(options).orThrow();
|
|
37
|
-
this._rules = rules || JsonEditor.getDefaultRules(this.options).orThrow();
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Default singleton @see JsonEditor for simple use. Applies all rules
|
|
41
|
-
* but with no default context.
|
|
42
|
-
*/
|
|
43
|
-
static get default() {
|
|
44
|
-
if (!JsonEditor._default) {
|
|
45
|
-
const rules = this.getDefaultRules().orDefault();
|
|
46
|
-
JsonEditor._default = new JsonEditor(undefined, rules);
|
|
47
|
-
}
|
|
48
|
-
return JsonEditor._default;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Constructs a new @see JsonEditor
|
|
52
|
-
* @param options Optional configuration an context for this editor
|
|
53
|
-
* @param rules Optional set of rules used by this editor
|
|
54
|
-
*/
|
|
55
|
-
static create(options, rules) {
|
|
56
|
-
return (0, ts_utils_1.captureResult)(() => new JsonEditor(options, rules));
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Gets the default set of rules to be applied for a given set of options.
|
|
60
|
-
* By default, all available rules (templates, conditionals, multi-value and references)
|
|
61
|
-
* are applied.
|
|
62
|
-
* @param options The options used to initialize all rules
|
|
63
|
-
*/
|
|
64
|
-
static getDefaultRules(options) {
|
|
65
|
-
return (0, ts_utils_1.mapResults)([
|
|
66
|
-
rules_1.TemplatedJsonEditorRule.create(options),
|
|
67
|
-
rules_1.ConditionalJsonEditorRule.create(options),
|
|
68
|
-
rules_1.MultiValueJsonEditorRule.create(options),
|
|
69
|
-
rules_1.ReferenceJsonEditorRule.create(options),
|
|
70
|
-
]);
|
|
71
|
-
}
|
|
72
|
-
static _getDefaultOptions(options) {
|
|
73
|
-
const context = options === null || options === void 0 ? void 0 : options.context;
|
|
74
|
-
let validation = options === null || options === void 0 ? void 0 : options.validation;
|
|
75
|
-
if (validation === undefined) {
|
|
76
|
-
validation = {
|
|
77
|
-
onInvalidPropertyName: 'error',
|
|
78
|
-
onInvalidPropertyValue: 'error',
|
|
79
|
-
onUndefinedPropertyValue: 'ignore',
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
return (0, ts_utils_1.succeed)({ context, validation });
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Merges a supplied source object into a supplied target, updating the target object.
|
|
86
|
-
* @param target The target object to be updated
|
|
87
|
-
* @param src The source object to be merged
|
|
88
|
-
* @param runtimeContext An optional @see JsonContext supplying variables and references
|
|
89
|
-
*/
|
|
90
|
-
mergeObjectInPlace(target, src, runtimeContext) {
|
|
91
|
-
const state = new jsonEditorState_1.JsonEditorState(this, this.options, runtimeContext);
|
|
92
|
-
return this._mergeObjectInPlace(target, src, state).onSuccess((merged) => {
|
|
93
|
-
return this._finalizeAndMerge(merged, state);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Merges multiple supplied source objects into a supplied target, updating the target
|
|
98
|
-
* object and using the default context supplied at creation time.
|
|
99
|
-
* @param target The target object to be updated
|
|
100
|
-
* @param srcObjects Objects to be merged into the target object, in the order supplied.
|
|
101
|
-
*/
|
|
102
|
-
mergeObjectsInPlace(target, srcObjects) {
|
|
103
|
-
return this.mergeObjectsInPlaceWithContext(this.options.context, target, srcObjects);
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Merges multiple supplied source objects into a supplied target, updating the target
|
|
107
|
-
* object and using an optional context supplied in the call.
|
|
108
|
-
* @param context An optional @see JsonContext supplying variables and references
|
|
109
|
-
* @param target The target object to be updated
|
|
110
|
-
* @param srcObjects Objects to be merged into the target object, in the order supplied.
|
|
111
|
-
*/
|
|
112
|
-
mergeObjectsInPlaceWithContext(context, base, srcObjects) {
|
|
113
|
-
for (const src of srcObjects) {
|
|
114
|
-
const mergeResult = this.mergeObjectInPlace(base, src, context);
|
|
115
|
-
if (mergeResult.isFailure()) {
|
|
116
|
-
return mergeResult.withFailureDetail('error');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return (0, ts_utils_1.succeedWithDetail)(base);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Deep clones a supplied JSON value, applying all editor rules and a default
|
|
123
|
-
* or optionally supplied context
|
|
124
|
-
* @param src The @see JsonValue to be cloned
|
|
125
|
-
* @param context An optional @see JsonContext supplying variables and references
|
|
126
|
-
*/
|
|
127
|
-
clone(src, context) {
|
|
128
|
-
const state = new jsonEditorState_1.JsonEditorState(this, this.options, context);
|
|
129
|
-
let value = src;
|
|
130
|
-
let valueResult = this._editValue(src, state);
|
|
131
|
-
while (valueResult.isSuccess()) {
|
|
132
|
-
value = valueResult.value;
|
|
133
|
-
valueResult = this._editValue(value, state);
|
|
134
|
-
}
|
|
135
|
-
if ((valueResult.detail === 'error') || (valueResult.detail === 'ignore')) {
|
|
136
|
-
return valueResult;
|
|
137
|
-
}
|
|
138
|
-
if ((0, common_1.isJsonPrimitive)(value) || (value === null)) {
|
|
139
|
-
return (0, ts_utils_1.succeedWithDetail)(value, 'edited');
|
|
140
|
-
}
|
|
141
|
-
else if ((0, common_1.isJsonObject)(value)) {
|
|
142
|
-
return this.mergeObjectInPlace({}, value, state.context).withFailureDetail('error');
|
|
143
|
-
}
|
|
144
|
-
else if ((0, common_1.isJsonArray)(value)) {
|
|
145
|
-
return this._cloneArray(value, state.context);
|
|
146
|
-
}
|
|
147
|
-
else if (value === undefined) {
|
|
148
|
-
return state.failValidation('undefinedPropertyValue');
|
|
149
|
-
}
|
|
150
|
-
return state.failValidation('invalidPropertyValue', `Cannot convert invalid JSON: "${JSON.stringify(value)}"`);
|
|
151
|
-
}
|
|
152
|
-
_mergeObjectInPlace(target, src, state) {
|
|
153
|
-
for (const key in src) {
|
|
154
|
-
if (src.hasOwnProperty(key)) {
|
|
155
|
-
const propResult = this._editProperty(key, src[key], state);
|
|
156
|
-
if (propResult.isSuccess()) {
|
|
157
|
-
if (propResult.detail === 'deferred') {
|
|
158
|
-
state.defer(propResult.value);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
const mergeResult = this._mergeObjectInPlace(target, propResult.value, state);
|
|
162
|
-
if (mergeResult.isFailure()) {
|
|
163
|
-
return mergeResult;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
else if (propResult.detail === 'inapplicable') {
|
|
168
|
-
const valueResult = this.clone(src[key], state.context).onSuccess((cloned) => {
|
|
169
|
-
return this._mergeClonedProperty(target, key, cloned, state);
|
|
170
|
-
});
|
|
171
|
-
if (valueResult.isFailure() && (valueResult.detail === 'error')) {
|
|
172
|
-
return (0, ts_utils_1.fail)(`${key}: ${valueResult.message}`);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
else if (propResult.detail !== 'ignore') {
|
|
176
|
-
return (0, ts_utils_1.fail)(`${key}: ${propResult.message}`);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
return (0, ts_utils_1.fail)(`${key}: Cannot merge inherited properties`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return (0, ts_utils_1.succeed)(target);
|
|
184
|
-
}
|
|
185
|
-
_cloneArray(src, context) {
|
|
186
|
-
const results = src.map((v) => {
|
|
187
|
-
return this.clone(v, context);
|
|
188
|
-
});
|
|
189
|
-
return (0, ts_utils_1.mapDetailedResults)(results, ['ignore']).onSuccess((converted) => {
|
|
190
|
-
return (0, ts_utils_1.succeed)(converted);
|
|
191
|
-
}).withFailureDetail('error');
|
|
192
|
-
}
|
|
193
|
-
_mergeClonedProperty(target, key, newValue, state) {
|
|
194
|
-
const existing = target[key];
|
|
195
|
-
// merge is called right after clone so this should never happen
|
|
196
|
-
// since clone itself will have failed
|
|
197
|
-
// istanbul ignore else
|
|
198
|
-
if ((0, common_1.isJsonPrimitive)(newValue)) {
|
|
199
|
-
target[key] = newValue;
|
|
200
|
-
return (0, ts_utils_1.succeedWithDetail)(newValue, 'edited');
|
|
201
|
-
}
|
|
202
|
-
else if ((0, common_1.isJsonObject)(newValue)) {
|
|
203
|
-
if ((0, common_1.isJsonObject)(existing)) {
|
|
204
|
-
return this.mergeObjectInPlace(existing, newValue, state.context).withFailureDetail('error');
|
|
205
|
-
}
|
|
206
|
-
target[key] = newValue;
|
|
207
|
-
return (0, ts_utils_1.succeedWithDetail)(newValue, 'edited');
|
|
208
|
-
}
|
|
209
|
-
else if ((0, common_1.isJsonArray)(newValue)) {
|
|
210
|
-
if ((0, common_1.isJsonArray)(existing)) {
|
|
211
|
-
target[key] = existing.concat(...newValue);
|
|
212
|
-
return (0, ts_utils_1.succeedWithDetail)(target[key], 'edited');
|
|
213
|
-
}
|
|
214
|
-
target[key] = newValue;
|
|
215
|
-
return (0, ts_utils_1.succeedWithDetail)(newValue, 'edited');
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
return (0, ts_utils_1.failWithDetail)(`Invalid JSON: ${JSON.stringify(newValue)}`, 'error');
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
_editProperty(key, value, state) {
|
|
222
|
-
for (const rule of this._rules) {
|
|
223
|
-
const ruleResult = rule.editProperty(key, value, state);
|
|
224
|
-
if (ruleResult.isSuccess() || (ruleResult.detail !== 'inapplicable')) {
|
|
225
|
-
return ruleResult;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
229
|
-
}
|
|
230
|
-
_editValue(value, state) {
|
|
231
|
-
for (const rule of this._rules) {
|
|
232
|
-
const ruleResult = rule.editValue(value, state);
|
|
233
|
-
if (ruleResult.isSuccess() || (ruleResult.detail !== 'inapplicable')) {
|
|
234
|
-
return ruleResult;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
238
|
-
}
|
|
239
|
-
_finalizeAndMerge(target, state) {
|
|
240
|
-
const deferred = state.deferred;
|
|
241
|
-
if (deferred.length > 0) {
|
|
242
|
-
for (const rule of this._rules) {
|
|
243
|
-
const ruleResult = rule.finalizeProperties(deferred, state);
|
|
244
|
-
if (ruleResult.isSuccess()) {
|
|
245
|
-
return this.mergeObjectsInPlaceWithContext(state.context, target, ruleResult.value).withFailureDetail('error');
|
|
246
|
-
}
|
|
247
|
-
else if (ruleResult.detail === 'ignore') {
|
|
248
|
-
(0, ts_utils_1.succeedWithDetail)(target, 'edited');
|
|
249
|
-
}
|
|
250
|
-
else if (ruleResult.detail !== 'inapplicable') {
|
|
251
|
-
return (0, ts_utils_1.failWithDetail)(ruleResult.message, ruleResult.detail);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
return (0, ts_utils_1.succeedWithDetail)(target, 'edited');
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
exports.JsonEditor = JsonEditor;
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29uRWRpdG9yL2pzb25FZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsbUNBS2lCO0FBQ2pCLDRDQVV1QjtBQUd2QixzQ0FBeUc7QUFJekcsdURBQW9EO0FBRXBEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVU7SUFVbkIsWUFBc0IsT0FBb0MsRUFBRSxLQUF3QjtRQUNoRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxLQUFLLE9BQU87UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFvQyxFQUFFLEtBQXdCO1FBQy9FLE9BQU8sSUFBQSx3QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBMkI7UUFDckQsT0FB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LEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNKO0FBNVBELGdDQTRQQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENvbmRpdGlvbmFsSnNvbkVkaXRvclJ1bGUsXG4gICAgTXVsdGlWYWx1ZUpzb25FZGl0b3JSdWxlLFxuICAgIFJlZmVyZW5jZUpzb25FZGl0b3JSdWxlLFxuICAgIFRlbXBsYXRlZEpzb25FZGl0b3JSdWxlLFxufSBmcm9tICcuL3J1bGVzJztcbmltcG9ydCB7XG4gICAgRGV0YWlsZWRSZXN1bHQsXG4gICAgUmVzdWx0LFxuICAgIGNhcHR1cmVSZXN1bHQsXG4gICAgZmFpbCxcbiAgICBmYWlsV2l0aERldGFpbCxcbiAgICBtYXBEZXRhaWxlZFJlc3VsdHMsXG4gICAgbWFwUmVzdWx0cyxcbiAgICBzdWNjZWVkLFxuICAgIHN1Y2NlZWRXaXRoRGV0YWlsLFxufSBmcm9tICdAZmd2L3RzLXV0aWxzJztcblxuaW1wb3J0IHsgSUpzb25DbG9uZUVkaXRvciwgSnNvbkVkaXRGYWlsdXJlUmVhc29uLCBKc29uRWRpdG9yT3B0aW9ucywgSnNvbkVkaXRvclZhbGlkYXRpb25PcHRpb25zLCBKc29uUHJvcGVydHlFZGl0RmFpbHVyZVJlYXNvbiB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblZhbHVlLCBpc0pzb25BcnJheSwgaXNKc29uT2JqZWN0LCBpc0pzb25QcmltaXRpdmUgfSBmcm9tICcuLi9jb21tb24nO1xuXG5pbXBvcnQgeyBKc29uQ29udGV4dCB9IGZyb20gJy4uL2pzb25Db250ZXh0JztcbmltcG9ydCB7IEpzb25FZGl0b3JSdWxlIH0gZnJvbSAnLi9qc29uRWRpdG9yUnVsZSc7XG5pbXBvcnQgeyBKc29uRWRpdG9yU3RhdGUgfSBmcm9tICcuL2pzb25FZGl0b3JTdGF0ZSc7XG5cbi8qKlxuICogVGhlIEpzb25FZGl0b3IgY2FuIGJlIHVzZWQgdG8gZWRpdCBKU09OIG9iamVjdHMgaW4gcGxhY2Ugb3IgdG8gY2xvbmUgYW55IEpTT04gdmFsdWUsXG4gKiBhcHBseWluZyBhIGRlZmF1bHQgY29udGV4dCBhbmQgb3B0aW9uYWwgc2V0IG9mIGVkaXRvciBydWxlcyB0aGF0IHdlcmUgc3VwcGxpZWQgYXRcbiAqIGluaXRpYWxpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSnNvbkVkaXRvciBpbXBsZW1lbnRzIElKc29uQ2xvbmVFZGl0b3Ige1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIHByb3RlY3RlZCBzdGF0aWMgX2RlZmF1bHQ/OiBKc29uRWRpdG9yO1xuXG4gICAgLyoqXG4gICAgICogRnVsbCBzZXQgb2YgQHNlZSBKc29uRWRpdG9yT3B0aW9ucyBpbiBlZmZlY3QgZm9yIHRoaXMgcnVsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3B0aW9uczogSnNvbkVkaXRvck9wdGlvbnM7XG4gICAgcHJvdGVjdGVkIF9ydWxlczogSnNvbkVkaXRvclJ1bGVbXTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihvcHRpb25zPzogUGFydGlhbDxKc29uRWRpdG9yT3B0aW9ucz4sIHJ1bGVzPzogSnNvbkVkaXRvclJ1bGVbXSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBKc29uRWRpdG9yLl9nZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKS5vclRocm93KCk7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXMgfHwgSnNvbkVkaXRvci5nZXREZWZhdWx0UnVsZXModGhpcy5vcHRpb25zKS5vclRocm93KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBzaW5nbGV0b24gQHNlZSBKc29uRWRpdG9yIGZvciBzaW1wbGUgdXNlLiBBcHBsaWVzIGFsbCBydWxlc1xuICAgICAqIGJ1dCB3aXRoIG5vIGRlZmF1bHQgY29udGV4dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCBkZWZhdWx0KCk6IEpzb25FZGl0b3Ige1xuICAgICAgICBpZiAoIUpzb25FZGl0b3IuX2RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXREZWZhdWx0UnVsZXMoKS5vckRlZmF1bHQoKTtcbiAgICAgICAgICAgIEpzb25FZGl0b3IuX2RlZmF1bHQgPSBuZXcgSnNvbkVkaXRvcih1bmRlZmluZWQsIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSnNvbkVkaXRvci5fZGVmYXVsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEBzZWUgSnNvbkVkaXRvclxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gYW4gY29udGV4dCBmb3IgdGhpcyBlZGl0b3JcbiAgICAgKiBAcGFyYW0gcnVsZXMgT3B0aW9uYWwgc2V0IG9mIHJ1bGVzIHVzZWQgYnkgdGhpcyBlZGl0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShvcHRpb25zPzogUGFydGlhbDxKc29uRWRpdG9yT3B0aW9ucz4sIHJ1bGVzPzogSnNvbkVkaXRvclJ1bGVbXSk6IFJlc3VsdDxKc29uRWRpdG9yPiB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlUmVzdWx0KCgpID0+IG5ldyBKc29uRWRpdG9yKG9wdGlvbnMsIHJ1bGVzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGVmYXVsdCBzZXQgb2YgcnVsZXMgdG8gYmUgYXBwbGllZCBmb3IgYSBnaXZlbiBzZXQgb2Ygb3B0aW9ucy5cbiAgICAgKiBCeSBkZWZhdWx0LCBhbGwgYXZhaWxhYmxlIHJ1bGVzICh0ZW1wbGF0ZXMsIGNvbmRpdGlvbmFscywgbXVsdGktdmFsdWUgYW5kIHJlZmVyZW5jZXMpXG4gICAgICogYXJlIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgdXNlZCB0byBpbml0aWFsaXplIGFsbCBydWxlc1xuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGVmYXVsdFJ1bGVzKG9wdGlvbnM/OiBKc29uRWRpdG9yT3B0aW9ucyk6IFJlc3VsdDxKc29uRWRpdG9yUnVsZVtdPiB7XG4gICAgICAgIHJldHVybiBtYXBSZXN1bHRzPEpzb25FZGl0b3JSdWxlPihbXG4gICAgICAgICAgICBUZW1wbGF0ZWRKc29uRWRpdG9yUnVsZS5jcmVhdGUob3B0aW9ucyksXG4gICAgICAgICAgICBDb25kaXRpb25hbEpzb25FZGl0b3JSdWxlLmNyZWF0ZShvcHRpb25zKSxcbiAgICAgICAgICAgIE11bHRpVmFsdWVKc29uRWRpdG9yUnVsZS5jcmVhdGUob3B0aW9ucyksXG4gICAgICAgICAgICBSZWZlcmVuY2VKc29uRWRpdG9yUnVsZS5jcmVhdGUob3B0aW9ucyksXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGF0aWMgX2dldERlZmF1bHRPcHRpb25zKG9wdGlvbnM/OiBQYXJ0aWFsPEpzb25FZGl0b3JPcHRpb25zPik6IFJlc3VsdDxKc29uRWRpdG9yT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBjb250ZXh0OiBKc29uQ29udGV4dHx1bmRlZmluZWQgPSBvcHRpb25zPy5jb250ZXh0O1xuICAgICAgICBsZXQgdmFsaWRhdGlvbjogSnNvbkVkaXRvclZhbGlkYXRpb25PcHRpb25zfHVuZGVmaW5lZCA9IG9wdGlvbnM/LnZhbGlkYXRpb247XG4gICAgICAgIGlmICh2YWxpZGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgb25JbnZhbGlkUHJvcGVydHlOYW1lOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIG9uSW52YWxpZFByb3BlcnR5VmFsdWU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgb25VbmRlZmluZWRQcm9wZXJ0eVZhbHVlOiAnaWdub3JlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoeyBjb250ZXh0LCB2YWxpZGF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyBhIHN1cHBsaWVkIHNvdXJjZSBvYmplY3QgaW50byBhIHN1cHBsaWVkIHRhcmdldCwgdXBkYXRpbmcgdGhlIHRhcmdldCBvYmplY3QuXG4gICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBiZSB1cGRhdGVkXG4gICAgICogQHBhcmFtIHNyYyBUaGUgc291cmNlIG9iamVjdCB0byBiZSBtZXJnZWRcbiAgICAgKiBAcGFyYW0gcnVudGltZUNvbnRleHQgQW4gb3B0aW9uYWwgQHNlZSBKc29uQ29udGV4dCBzdXBwbHlpbmcgdmFyaWFibGVzIGFuZCByZWZlcmVuY2VzXG4gICAgICovXG4gICAgcHVibGljIG1lcmdlT2JqZWN0SW5QbGFjZSh0YXJnZXQ6IEpzb25PYmplY3QsIHNyYzogSnNvbk9iamVjdCwgcnVudGltZUNvbnRleHQ/OiBKc29uQ29udGV4dCk6IFJlc3VsdDxKc29uT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IEpzb25FZGl0b3JTdGF0ZSh0aGlzLCB0aGlzLm9wdGlvbnMsIHJ1bnRpbWVDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lcmdlT2JqZWN0SW5QbGFjZSh0YXJnZXQsIHNyYywgc3RhdGUpLm9uU3VjY2VzcygobWVyZ2VkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmluYWxpemVBbmRNZXJnZShtZXJnZWQsIHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIG11bHRpcGxlIHN1cHBsaWVkIHNvdXJjZSBvYmplY3RzIGludG8gYSBzdXBwbGllZCB0YXJnZXQsIHVwZGF0aW5nIHRoZSB0YXJnZXRcbiAgICAgKiBvYmplY3QgYW5kIHVzaW5nIHRoZSBkZWZhdWx0IGNvbnRleHQgc3VwcGxpZWQgYXQgY3JlYXRpb24gdGltZS5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IHRvIGJlIHVwZGF0ZWRcbiAgICAgKiBAcGFyYW0gc3JjT2JqZWN0cyBPYmplY3RzIHRvIGJlIG1lcmdlZCBpbnRvIHRoZSB0YXJnZXQgb2JqZWN0LCBpbiB0aGUgb3JkZXIgc3VwcGxpZWQuXG4gICAgICovXG4gICAgcHVibGljIG1lcmdlT2JqZWN0c0luUGxhY2UodGFyZ2V0OiBKc29uT2JqZWN0LCBzcmNPYmplY3RzOiBKc29uT2JqZWN0W10pOiBSZXN1bHQ8SnNvbk9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZU9iamVjdHNJblBsYWNlV2l0aENvbnRleHQodGhpcy5vcHRpb25zLmNvbnRleHQsIHRhcmdldCwgc3JjT2JqZWN0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIG11bHRpcGxlIHN1cHBsaWVkIHNvdXJjZSBvYmplY3RzIGludG8gYSBzdXBwbGllZCB0YXJnZXQsIHVwZGF0aW5nIHRoZSB0YXJnZXRcbiAgICAgKiBvYmplY3QgYW5kIHVzaW5nIGFuIG9wdGlvbmFsIGNvbnRleHQgc3VwcGxpZWQgaW4gdGhlIGNhbGwuXG4gICAgICogQHBhcmFtIGNvbnRleHQgQW4gb3B0aW9uYWwgQHNlZSBKc29uQ29udGV4dCBzdXBwbHlpbmcgdmFyaWFibGVzIGFuZCByZWZlcmVuY2VzXG4gICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBiZSB1cGRhdGVkXG4gICAgICogQHBhcmFtIHNyY09iamVjdHMgT2JqZWN0cyB0byBiZSBtZXJnZWQgaW50byB0aGUgdGFyZ2V0IG9iamVjdCwgaW4gdGhlIG9yZGVyIHN1cHBsaWVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBtZXJnZU9iamVjdHNJblBsYWNlV2l0aENvbnRleHQoY29udGV4dDogSnNvbkNvbnRleHR8dW5kZWZpbmVkLCBiYXNlOiBKc29uT2JqZWN0LCBzcmNPYmplY3RzOiBKc29uT2JqZWN0W10pOiBSZXN1bHQ8SnNvbk9iamVjdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNyYyBvZiBzcmNPYmplY3RzKSB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMubWVyZ2VPYmplY3RJblBsYWNlKGJhc2UsIHNyYywgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAobWVyZ2VSZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VSZXN1bHQud2l0aEZhaWx1cmVEZXRhaWwoJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKGJhc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZXAgY2xvbmVzIGEgc3VwcGxpZWQgSlNPTiB2YWx1ZSwgYXBwbHlpbmcgYWxsIGVkaXRvciBydWxlcyBhbmQgYSBkZWZhdWx0XG4gICAgICogb3Igb3B0aW9uYWxseSBzdXBwbGllZCBjb250ZXh0XG4gICAgICogQHBhcmFtIHNyYyBUaGUgQHNlZSBKc29uVmFsdWUgdG8gYmUgY2xvbmVkXG4gICAgICogQHBhcmFtIGNvbnRleHQgQW4gb3B0aW9uYWwgQHNlZSBKc29uQ29udGV4dCBzdXBwbHlpbmcgdmFyaWFibGVzIGFuZCByZWZlcmVuY2VzXG4gICAgICovXG4gICAgcHVibGljIGNsb25lKHNyYzogSnNvblZhbHVlLCBjb250ZXh0PzogSnNvbkNvbnRleHQpOiBEZXRhaWxlZFJlc3VsdDxKc29uVmFsdWUsIEpzb25FZGl0RmFpbHVyZVJlYXNvbj4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IG5ldyBKc29uRWRpdG9yU3RhdGUodGhpcywgdGhpcy5vcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgbGV0IHZhbHVlID0gc3JjO1xuICAgICAgICBsZXQgdmFsdWVSZXN1bHQgPSB0aGlzLl9lZGl0VmFsdWUoc3JjLCBzdGF0ZSk7XG5cbiAgICAgICAgd2hpbGUgKHZhbHVlUmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlUmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgdmFsdWVSZXN1bHQgPSB0aGlzLl9lZGl0VmFsdWUodmFsdWUsIHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodmFsdWVSZXN1bHQuZGV0YWlsID09PSAnZXJyb3InKSB8fCAodmFsdWVSZXN1bHQuZGV0YWlsID09PSAnaWdub3JlJykpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb25QcmltaXRpdmUodmFsdWUpIHx8ICh2YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkV2l0aERldGFpbCh2YWx1ZSwgJ2VkaXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzSnNvbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lcmdlT2JqZWN0SW5QbGFjZSh7fSwgdmFsdWUsIHN0YXRlLmNvbnRleHQpLndpdGhGYWlsdXJlRGV0YWlsKCdlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzSnNvbkFycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb25lQXJyYXkodmFsdWUsIHN0YXRlLmNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5mYWlsVmFsaWRhdGlvbigndW5kZWZpbmVkUHJvcGVydHlWYWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZS5mYWlsVmFsaWRhdGlvbignaW52YWxpZFByb3BlcnR5VmFsdWUnLCBgQ2Fubm90IGNvbnZlcnQgaW52YWxpZCBKU09OOiBcIiR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfVwiYCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9tZXJnZU9iamVjdEluUGxhY2UodGFyZ2V0OiBKc29uT2JqZWN0LCBzcmM6IEpzb25PYmplY3QsIHN0YXRlOiBKc29uRWRpdG9yU3RhdGUpOiBSZXN1bHQ8SnNvbk9iamVjdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcmMpIHtcbiAgICAgICAgICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BSZXN1bHQgPSB0aGlzLl9lZGl0UHJvcGVydHkoa2V5LCBzcmNba2V5XSwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wUmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wUmVzdWx0LmRldGFpbCA9PT0gJ2RlZmVycmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZGVmZXIocHJvcFJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMuX21lcmdlT2JqZWN0SW5QbGFjZSh0YXJnZXQsIHByb3BSZXN1bHQudmFsdWUsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZVJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wUmVzdWx0LmRldGFpbCA9PT0gJ2luYXBwbGljYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVSZXN1bHQgPSB0aGlzLmNsb25lKHNyY1trZXldLCBzdGF0ZS5jb250ZXh0KS5vblN1Y2Nlc3MoKGNsb25lZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lcmdlQ2xvbmVkUHJvcGVydHkodGFyZ2V0LCBrZXksIGNsb25lZCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVSZXN1bHQuaXNGYWlsdXJlKCkgJiYgKHZhbHVlUmVzdWx0LmRldGFpbCA9PT0gJ2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke2tleX06ICR7dmFsdWVSZXN1bHQubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wUmVzdWx0LmRldGFpbCAhPT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7a2V5fTogJHtwcm9wUmVzdWx0Lm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7a2V5fTogQ2Fubm90IG1lcmdlIGluaGVyaXRlZCBwcm9wZXJ0aWVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2Nsb25lQXJyYXkoc3JjOiBKc29uQXJyYXksIGNvbnRleHQ/OiBKc29uQ29udGV4dCk6IERldGFpbGVkUmVzdWx0PEpzb25BcnJheSwgSnNvbkVkaXRGYWlsdXJlUmVhc29uPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBzcmMubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSh2LCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1hcERldGFpbGVkUmVzdWx0czxKc29uVmFsdWUsIEpzb25FZGl0RmFpbHVyZVJlYXNvbj4ocmVzdWx0cywgWydpZ25vcmUnXSkub25TdWNjZXNzKChjb252ZXJ0ZWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKGNvbnZlcnRlZCk7XG4gICAgICAgIH0pLndpdGhGYWlsdXJlRGV0YWlsKCdlcnJvcicpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbWVyZ2VDbG9uZWRQcm9wZXJ0eSh0YXJnZXQ6IEpzb25PYmplY3QsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogSnNvblZhbHVlLCBzdGF0ZTogSnNvbkVkaXRvclN0YXRlKTogRGV0YWlsZWRSZXN1bHQ8SnNvblZhbHVlLCBKc29uRWRpdEZhaWx1cmVSZWFzb24+IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0YXJnZXRba2V5XTtcblxuICAgICAgICAvLyBtZXJnZSBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgY2xvbmUgc28gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gICAgICAgIC8vIHNpbmNlIGNsb25lIGl0c2VsZiB3aWxsIGhhdmUgZmFpbGVkXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gICAgICAgIGlmIChpc0pzb25QcmltaXRpdmUobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKG5ld1ZhbHVlLCAnZWRpdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNKc29uT2JqZWN0KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGlzSnNvbk9iamVjdChleGlzdGluZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXJnZU9iamVjdEluUGxhY2UoZXhpc3RpbmcsIG5ld1ZhbHVlLCBzdGF0ZS5jb250ZXh0KS53aXRoRmFpbHVyZURldGFpbCgnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbmV3VmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZFdpdGhEZXRhaWwobmV3VmFsdWUsICdlZGl0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0pzb25BcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc0pzb25BcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IGV4aXN0aW5nLmNvbmNhdCguLi5uZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKHRhcmdldFtrZXldLCAnZWRpdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKG5ld1ZhbHVlLCAnZWRpdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwoYEludmFsaWQgSlNPTjogJHtKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSl9YCwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2VkaXRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSwgc3RhdGU6IEpzb25FZGl0b3JTdGF0ZSk6IERldGFpbGVkUmVzdWx0PEpzb25PYmplY3QsIEpzb25Qcm9wZXJ0eUVkaXRGYWlsdXJlUmVhc29uPiB7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLl9ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlc3VsdCA9IHJ1bGUuZWRpdFByb3BlcnR5KGtleSwgdmFsdWUsIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChydWxlUmVzdWx0LmlzU3VjY2VzcygpIHx8IChydWxlUmVzdWx0LmRldGFpbCAhPT0gJ2luYXBwbGljYWJsZScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWxXaXRoRGV0YWlsKCdpbmFwcGxpY2FibGUnLCAnaW5hcHBsaWNhYmxlJyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9lZGl0VmFsdWUodmFsdWU6IEpzb25WYWx1ZSwgc3RhdGU6IEpzb25FZGl0b3JTdGF0ZSk6IERldGFpbGVkUmVzdWx0PEpzb25WYWx1ZSwgSnNvbkVkaXRGYWlsdXJlUmVhc29uPiB7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLl9ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlc3VsdCA9IHJ1bGUuZWRpdFZhbHVlKHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgICAgICBpZiAocnVsZVJlc3VsdC5pc1N1Y2Nlc3MoKSB8fCAocnVsZVJlc3VsdC5kZXRhaWwgIT09ICdpbmFwcGxpY2FibGUnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCgnaW5hcHBsaWNhYmxlJywgJ2luYXBwbGljYWJsZScpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmluYWxpemVBbmRNZXJnZSh0YXJnZXQ6IEpzb25PYmplY3QsIHN0YXRlOiBKc29uRWRpdG9yU3RhdGUpOiBEZXRhaWxlZFJlc3VsdDxKc29uT2JqZWN0LCBKc29uRWRpdEZhaWx1cmVSZWFzb24+IHtcbiAgICAgICAgY29uc3QgZGVmZXJyZWQgPSBzdGF0ZS5kZWZlcnJlZDtcbiAgICAgICAgaWYgKGRlZmVycmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLl9ydWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVSZXN1bHQgPSBydWxlLmZpbmFsaXplUHJvcGVydGllcyhkZWZlcnJlZCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChydWxlUmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lcmdlT2JqZWN0c0luUGxhY2VXaXRoQ29udGV4dChzdGF0ZS5jb250ZXh0LCB0YXJnZXQsIHJ1bGVSZXN1bHQudmFsdWUpLndpdGhGYWlsdXJlRGV0YWlsKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlUmVzdWx0LmRldGFpbCA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZFdpdGhEZXRhaWwodGFyZ2V0LCAnZWRpdGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJ1bGVSZXN1bHQuZGV0YWlsICE9PSAnaW5hcHBsaWNhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwocnVsZVJlc3VsdC5tZXNzYWdlLCBydWxlUmVzdWx0LmRldGFpbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkV2l0aERldGFpbCh0YXJnZXQsICdlZGl0ZWQnKTtcbiAgICB9XG59XG5cbiJdfQ==
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { DetailedResult } from '@fgv/ts-utils';
|
|
2
|
-
import { JsonEditFailureReason, JsonPropertyEditFailureReason } from './common';
|
|
3
|
-
import { JsonObject, JsonValue } from '../common';
|
|
4
|
-
import { JsonEditorState } from './jsonEditorState';
|
|
5
|
-
export interface JsonEditorRule {
|
|
6
|
-
/**
|
|
7
|
-
* Called by a JSON editor to possibly edit one of the properties being merged into a target object.
|
|
8
|
-
* @param key The key of the property to be edited
|
|
9
|
-
* @param value The value of the property to be edited
|
|
10
|
-
* @param state Editor state which applies to the edit
|
|
11
|
-
* @returns If the property was edited, returns Success with a JSON object containing the edited results
|
|
12
|
-
* and with detail 'edited'. If this property should be deferred for later consideration or merg, Succeeds
|
|
13
|
-
* with detail 'deferred' and an JsonObject to be finalized. If the rule does not affect this property,
|
|
14
|
-
* fails with detail 'inapplicable'. If an error occurred while processing the error, returns Failure with
|
|
15
|
-
* detail 'error'.
|
|
16
|
-
*/
|
|
17
|
-
editProperty(key: string, value: JsonValue, state: JsonEditorState): DetailedResult<JsonObject, JsonPropertyEditFailureReason>;
|
|
18
|
-
/**
|
|
19
|
-
* Called by a JSON editor to possibly edit a property value or array element
|
|
20
|
-
* @param value The value to be edited
|
|
21
|
-
* @param state Editor state which applies to the edit
|
|
22
|
-
* @returns Returns success with the JsonValue to be inserted, with detail 'edited' if the value was
|
|
23
|
-
* edited. Returns failure with 'inapplicable' if the rule does not affect this value. Fails with
|
|
24
|
-
* detail 'ignore' if the value is to be ignored, or with 'error' if an error occurs.
|
|
25
|
-
*/
|
|
26
|
-
editValue(value: JsonValue, state: JsonEditorState): DetailedResult<JsonValue, JsonEditFailureReason>;
|
|
27
|
-
/**
|
|
28
|
-
* Called for each rule after all properties have been merged. Any properties that were deferred
|
|
29
|
-
* during the initial edit pass are supplied as input.
|
|
30
|
-
* @param deferred Any objects that were deferred during the first edit pass
|
|
31
|
-
* @param state Editor state which applies to the edit
|
|
32
|
-
* @returns On successful return, any returned objects are merged in order and finalization
|
|
33
|
-
* is stopped. Finalization is also stopped on Failure with detail 'ignore.' On failure
|
|
34
|
-
* with detail 'inapplicable', finalization continues with the next rule. Fails with an
|
|
35
|
-
* error detail 'error' and an informative message if an error occurs.
|
|
36
|
-
*/
|
|
37
|
-
finalizeProperties(deferred: JsonObject[], state: JsonEditorState): DetailedResult<JsonObject[], JsonEditFailureReason>;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Default base implementation of JsonEditor rule returns inapplicable for all operations so that
|
|
41
|
-
* derived classes need only implement the operations they actually support.
|
|
42
|
-
*/
|
|
43
|
-
export declare class JsonEditorRuleBase implements JsonEditorRule {
|
|
44
|
-
editProperty(_key: string, _value: JsonValue, _state: JsonEditorState): DetailedResult<JsonObject, JsonPropertyEditFailureReason>;
|
|
45
|
-
editValue(_value: JsonValue, _state: JsonEditorState): DetailedResult<JsonValue, JsonEditFailureReason>;
|
|
46
|
-
finalizeProperties(_deferred: JsonObject[], _state: JsonEditorState): DetailedResult<JsonObject[], JsonEditFailureReason>;
|
|
47
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2020 Erik Fortune
|
|
4
|
-
*
|
|
5
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
* in the Software without restriction, including without limitation the rights
|
|
8
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
* furnished to do so, subject to the following conditions:
|
|
11
|
-
*
|
|
12
|
-
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
* copies or substantial portions of the Software.
|
|
14
|
-
*
|
|
15
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
* SOFTWARE.
|
|
22
|
-
*/
|
|
23
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.JsonEditorRuleBase = void 0;
|
|
25
|
-
const ts_utils_1 = require("@fgv/ts-utils");
|
|
26
|
-
/**
|
|
27
|
-
* Default base implementation of JsonEditor rule returns inapplicable for all operations so that
|
|
28
|
-
* derived classes need only implement the operations they actually support.
|
|
29
|
-
*/
|
|
30
|
-
class JsonEditorRuleBase {
|
|
31
|
-
// istanbul ignore next
|
|
32
|
-
editProperty(_key, _value, _state) {
|
|
33
|
-
// istanbul ignore next
|
|
34
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
35
|
-
}
|
|
36
|
-
editValue(_value, _state) {
|
|
37
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
38
|
-
}
|
|
39
|
-
finalizeProperties(_deferred, _state) {
|
|
40
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.JsonEditorRuleBase = JsonEditorRuleBase;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkVkaXRvclJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNvbkVkaXRvci9qc29uRWRpdG9yUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUFFSCw0Q0FBK0Q7QUE0Qy9EOzs7R0FHRztBQUNILE1BQWEsa0JBQWtCO0lBQzNCLHVCQUF1QjtJQUNoQixZQUFZLENBQUMsSUFBWSxFQUFFLE1BQWlCLEVBQUUsTUFBdUI7UUFDeEUsdUJBQXVCO1FBQ3ZCLE9BQU8sSUFBQSx5QkFBYyxFQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQWlCLEVBQUUsTUFBdUI7UUFDdkQsT0FBTyxJQUFBLHlCQUFjLEVBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxTQUF1QixFQUFFLE1BQXVCO1FBQ3RFLE9BQU8sSUFBQSx5QkFBYyxFQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0o7QUFkRCxnREFjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBEZXRhaWxlZFJlc3VsdCwgZmFpbFdpdGhEZXRhaWwgfSBmcm9tICdAZmd2L3RzLXV0aWxzJztcbmltcG9ydCB7IEpzb25FZGl0RmFpbHVyZVJlYXNvbiwgSnNvblByb3BlcnR5RWRpdEZhaWx1cmVSZWFzb24gfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBKc29uVmFsdWUgfSBmcm9tICcuLi9jb21tb24nO1xuXG5pbXBvcnQgeyBKc29uRWRpdG9yU3RhdGUgfSBmcm9tICcuL2pzb25FZGl0b3JTdGF0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkVkaXRvclJ1bGUge1xuICAgIC8qKlxuICAgICAqIENhbGxlZCBieSBhIEpTT04gZWRpdG9yIHRvIHBvc3NpYmx5IGVkaXQgb25lIG9mIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIG1lcmdlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGVkaXRlZFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGVkaXRlZFxuICAgICAqIEBwYXJhbSBzdGF0ZSBFZGl0b3Igc3RhdGUgd2hpY2ggYXBwbGllcyB0byB0aGUgZWRpdFxuICAgICAqIEByZXR1cm5zIElmIHRoZSBwcm9wZXJ0eSB3YXMgZWRpdGVkLCByZXR1cm5zIFN1Y2Nlc3Mgd2l0aCBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVkaXRlZCByZXN1bHRzXG4gICAgICogYW5kIHdpdGggZGV0YWlsICdlZGl0ZWQnLiBJZiB0aGlzIHByb3BlcnR5IHNob3VsZCBiZSBkZWZlcnJlZCBmb3IgbGF0ZXIgY29uc2lkZXJhdGlvbiBvciBtZXJnLCBTdWNjZWVkc1xuICAgICAqIHdpdGggZGV0YWlsICdkZWZlcnJlZCcgYW5kIGFuIEpzb25PYmplY3QgdG8gYmUgZmluYWxpemVkLiAgSWYgdGhlIHJ1bGUgZG9lcyBub3QgYWZmZWN0IHRoaXMgcHJvcGVydHksXG4gICAgICogZmFpbHMgd2l0aCBkZXRhaWwgJ2luYXBwbGljYWJsZScuIElmIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGVycm9yLCByZXR1cm5zIEZhaWx1cmUgd2l0aFxuICAgICAqIGRldGFpbCAnZXJyb3InLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGVkaXRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSwgc3RhdGU6IEpzb25FZGl0b3JTdGF0ZSk6IERldGFpbGVkUmVzdWx0PEpzb25PYmplY3QsIEpzb25Qcm9wZXJ0eUVkaXRGYWlsdXJlUmVhc29uPjtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBieSBhIEpTT04gZWRpdG9yIHRvIHBvc3NpYmx5IGVkaXQgYSBwcm9wZXJ0eSB2YWx1ZSBvciBhcnJheSBlbGVtZW50XG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBlZGl0ZWRcbiAgICAgKiBAcGFyYW0gc3RhdGUgRWRpdG9yIHN0YXRlIHdoaWNoIGFwcGxpZXMgdG8gdGhlIGVkaXRcbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHN1Y2Nlc3Mgd2l0aCB0aGUgSnNvblZhbHVlIHRvIGJlIGluc2VydGVkLCB3aXRoIGRldGFpbCAnZWRpdGVkJyBpZiB0aGUgdmFsdWUgd2FzXG4gICAgICogZWRpdGVkLiAgUmV0dXJucyBmYWlsdXJlIHdpdGggJ2luYXBwbGljYWJsZScgaWYgdGhlIHJ1bGUgZG9lcyBub3QgYWZmZWN0IHRoaXMgdmFsdWUuICBGYWlscyB3aXRoXG4gICAgICogZGV0YWlsICdpZ25vcmUnIGlmIHRoZSB2YWx1ZSBpcyB0byBiZSBpZ25vcmVkLCBvciB3aXRoICdlcnJvcicgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqL1xuICAgIGVkaXRWYWx1ZSh2YWx1ZTogSnNvblZhbHVlLCBzdGF0ZTogSnNvbkVkaXRvclN0YXRlKTogRGV0YWlsZWRSZXN1bHQ8SnNvblZhbHVlLCBKc29uRWRpdEZhaWx1cmVSZWFzb24+O1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGZvciBlYWNoIHJ1bGUgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgaGF2ZSBiZWVuIG1lcmdlZC4gIEFueSBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBkZWZlcnJlZFxuICAgICAqIGR1cmluZyB0aGUgaW5pdGlhbCBlZGl0IHBhc3MgYXJlIHN1cHBsaWVkIGFzIGlucHV0LlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZCBBbnkgb2JqZWN0cyB0aGF0IHdlcmUgZGVmZXJyZWQgZHVyaW5nIHRoZSBmaXJzdCBlZGl0IHBhc3NcbiAgICAgKiBAcGFyYW0gc3RhdGUgRWRpdG9yIHN0YXRlIHdoaWNoIGFwcGxpZXMgdG8gdGhlIGVkaXRcbiAgICAgKiBAcmV0dXJucyBPbiBzdWNjZXNzZnVsIHJldHVybiwgYW55IHJldHVybmVkIG9iamVjdHMgYXJlIG1lcmdlZCBpbiBvcmRlciBhbmQgZmluYWxpemF0aW9uXG4gICAgICogaXMgc3RvcHBlZC4gRmluYWxpemF0aW9uIGlzIGFsc28gc3RvcHBlZCBvbiBGYWlsdXJlIHdpdGggZGV0YWlsICdpZ25vcmUuJyBPbiBmYWlsdXJlXG4gICAgICogd2l0aCBkZXRhaWwgJ2luYXBwbGljYWJsZScsIGZpbmFsaXphdGlvbiBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBydWxlLiBGYWlscyB3aXRoIGFuXG4gICAgICogZXJyb3IgZGV0YWlsICdlcnJvcicgYW5kIGFuIGluZm9ybWF0aXZlIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqL1xuICAgIGZpbmFsaXplUHJvcGVydGllcyhkZWZlcnJlZDogSnNvbk9iamVjdFtdLCBzdGF0ZTogSnNvbkVkaXRvclN0YXRlKTogRGV0YWlsZWRSZXN1bHQ8SnNvbk9iamVjdFtdLCBKc29uRWRpdEZhaWx1cmVSZWFzb24+O1xufVxuXG4vKipcbiAqIERlZmF1bHQgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBKc29uRWRpdG9yIHJ1bGUgcmV0dXJucyBpbmFwcGxpY2FibGUgZm9yIGFsbCBvcGVyYXRpb25zIHNvIHRoYXRcbiAqIGRlcml2ZWQgY2xhc3NlcyBuZWVkIG9ubHkgaW1wbGVtZW50IHRoZSBvcGVyYXRpb25zIHRoZXkgYWN0dWFsbHkgc3VwcG9ydC5cbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25FZGl0b3JSdWxlQmFzZSBpbXBsZW1lbnRzIEpzb25FZGl0b3JSdWxlIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIHB1YmxpYyBlZGl0UHJvcGVydHkoX2tleTogc3RyaW5nLCBfdmFsdWU6IEpzb25WYWx1ZSwgX3N0YXRlOiBKc29uRWRpdG9yU3RhdGUpOiBEZXRhaWxlZFJlc3VsdDxKc29uT2JqZWN0LCBKc29uUHJvcGVydHlFZGl0RmFpbHVyZVJlYXNvbj4ge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwoJ2luYXBwbGljYWJsZScsICdpbmFwcGxpY2FibGUnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdFZhbHVlKF92YWx1ZTogSnNvblZhbHVlLCBfc3RhdGU6IEpzb25FZGl0b3JTdGF0ZSk6IERldGFpbGVkUmVzdWx0PEpzb25WYWx1ZSwgSnNvbkVkaXRGYWlsdXJlUmVhc29uPiB7XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCgnaW5hcHBsaWNhYmxlJywgJ2luYXBwbGljYWJsZScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5hbGl6ZVByb3BlcnRpZXMoX2RlZmVycmVkOiBKc29uT2JqZWN0W10sIF9zdGF0ZTogSnNvbkVkaXRvclN0YXRlKTogRGV0YWlsZWRSZXN1bHQ8SnNvbk9iamVjdFtdLCBKc29uRWRpdEZhaWx1cmVSZWFzb24+IHtcbiAgICAgICAgcmV0dXJuIGZhaWxXaXRoRGV0YWlsKCdpbmFwcGxpY2FibGUnLCAnaW5hcHBsaWNhYmxlJyk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { DetailedFailure, Result } from '@fgv/ts-utils';
|
|
2
|
-
import { IJsonCloneEditor, JsonEditFailureReason, JsonEditorOptions, JsonEditorValidationOptions, JsonEditorValidationRules } from './common';
|
|
3
|
-
import { JsonContext, JsonReferenceMap, TemplateVars, VariableValue } from '../jsonContext';
|
|
4
|
-
import { JsonObject } from '../common';
|
|
5
|
-
export declare class JsonEditorState {
|
|
6
|
-
protected static _nextId: number;
|
|
7
|
-
readonly editor: IJsonCloneEditor;
|
|
8
|
-
readonly options: JsonEditorOptions;
|
|
9
|
-
protected readonly _deferred: JsonObject[];
|
|
10
|
-
protected readonly _id: number;
|
|
11
|
-
constructor(editor: IJsonCloneEditor, baseOptions: JsonEditorOptions, runtimeContext?: JsonContext);
|
|
12
|
-
get context(): JsonContext | undefined;
|
|
13
|
-
get deferred(): JsonObject[];
|
|
14
|
-
protected static _getEffectiveOptions(options: JsonEditorOptions, context?: JsonContext): Result<JsonEditorOptions>;
|
|
15
|
-
defer(obj: JsonObject): void;
|
|
16
|
-
getVars(defaultContext?: JsonContext): TemplateVars | undefined;
|
|
17
|
-
getRefs(defaultContext?: JsonContext): JsonReferenceMap | undefined;
|
|
18
|
-
getContext(defaultContext?: JsonContext): JsonContext | undefined;
|
|
19
|
-
extendContext(baseContext: JsonContext | undefined, add: {
|
|
20
|
-
vars?: VariableValue[];
|
|
21
|
-
refs?: JsonReferenceMap[];
|
|
22
|
-
}): Result<JsonContext | undefined>;
|
|
23
|
-
failValidation<T = JsonObject>(rule: JsonEditorValidationRules, message?: string, validation?: JsonEditorValidationOptions): DetailedFailure<T, JsonEditFailureReason>;
|
|
24
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2020 Erik Fortune
|
|
4
|
-
*
|
|
5
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
* in the Software without restriction, including without limitation the rights
|
|
8
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
* furnished to do so, subject to the following conditions:
|
|
11
|
-
*
|
|
12
|
-
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
* copies or substantial portions of the Software.
|
|
14
|
-
*
|
|
15
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
* SOFTWARE.
|
|
22
|
-
*/
|
|
23
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.JsonEditorState = void 0;
|
|
25
|
-
const ts_utils_1 = require("@fgv/ts-utils");
|
|
26
|
-
const contextHelpers_1 = require("../contextHelpers");
|
|
27
|
-
class JsonEditorState {
|
|
28
|
-
constructor(editor, baseOptions, runtimeContext) {
|
|
29
|
-
this._deferred = [];
|
|
30
|
-
this.editor = editor;
|
|
31
|
-
this.options = JsonEditorState._getEffectiveOptions(baseOptions, runtimeContext).orThrow();
|
|
32
|
-
this._id = JsonEditorState._nextId++;
|
|
33
|
-
}
|
|
34
|
-
get context() { return this.options.context; }
|
|
35
|
-
get deferred() {
|
|
36
|
-
return this._deferred;
|
|
37
|
-
}
|
|
38
|
-
static _getEffectiveOptions(options, context) {
|
|
39
|
-
if (!context) {
|
|
40
|
-
return (0, ts_utils_1.succeed)(options);
|
|
41
|
-
}
|
|
42
|
-
return contextHelpers_1.JsonContextHelper.mergeContext(options.context, context).onSuccess((merged) => {
|
|
43
|
-
return (0, ts_utils_1.succeed)({ context: merged, validation: options.validation });
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
defer(obj) {
|
|
47
|
-
this._deferred.push(obj);
|
|
48
|
-
}
|
|
49
|
-
getVars(defaultContext) {
|
|
50
|
-
var _a, _b;
|
|
51
|
-
return (_b = (_a = this.options.context) === null || _a === void 0 ? void 0 : _a.vars) !== null && _b !== void 0 ? _b : defaultContext === null || defaultContext === void 0 ? void 0 : defaultContext.vars;
|
|
52
|
-
}
|
|
53
|
-
getRefs(defaultContext) {
|
|
54
|
-
var _a, _b;
|
|
55
|
-
return (_b = (_a = this.options.context) === null || _a === void 0 ? void 0 : _a.refs) !== null && _b !== void 0 ? _b : defaultContext === null || defaultContext === void 0 ? void 0 : defaultContext.refs;
|
|
56
|
-
}
|
|
57
|
-
getContext(defaultContext) {
|
|
58
|
-
return contextHelpers_1.JsonContextHelper.mergeContext(defaultContext, this.options.context).orDefault();
|
|
59
|
-
}
|
|
60
|
-
extendContext(baseContext, add) {
|
|
61
|
-
const context = this.getContext(baseContext);
|
|
62
|
-
return contextHelpers_1.JsonContextHelper.extendContext(context, add);
|
|
63
|
-
}
|
|
64
|
-
failValidation(rule, message, validation) {
|
|
65
|
-
let detail = 'error';
|
|
66
|
-
const effective = validation !== null && validation !== void 0 ? validation : this.options.validation;
|
|
67
|
-
switch (rule) {
|
|
68
|
-
case 'invalidPropertyName':
|
|
69
|
-
detail = (effective.onInvalidPropertyName !== 'ignore') ? 'error' : 'inapplicable';
|
|
70
|
-
break;
|
|
71
|
-
case 'invalidPropertyValue':
|
|
72
|
-
detail = (effective.onInvalidPropertyValue !== 'ignore') ? 'error' : 'ignore';
|
|
73
|
-
break;
|
|
74
|
-
case 'undefinedPropertyValue':
|
|
75
|
-
detail = (effective.onUndefinedPropertyValue !== 'error') ? 'ignore' : 'error';
|
|
76
|
-
// istanbul ignore next
|
|
77
|
-
message = message !== null && message !== void 0 ? message : 'Cannot convert undefined to JSON';
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
// istanbul ignore next
|
|
81
|
-
return (0, ts_utils_1.failWithDetail)(message !== null && message !== void 0 ? message : rule, detail);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
exports.JsonEditorState = JsonEditorState;
|
|
85
|
-
JsonEditorState._nextId = 0;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkVkaXRvclN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25FZGl0b3IvanNvbkVkaXRvclN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7OztBQUVILDRDQUFpRjtBQUlqRixzREFBc0Q7QUFHdEQsTUFBYSxlQUFlO0lBU3hCLFlBQW1CLE1BQXdCLEVBQUUsV0FBOEIsRUFBRSxjQUE0QjtRQUh0RixjQUFTLEdBQWlCLEVBQUUsQ0FBQztRQUk1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELElBQVcsT0FBTyxLQUE0QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RSxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUEwQixFQUFFLE9BQXFCO1FBQ25GLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPLElBQUEsa0JBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sa0NBQWlCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakYsT0FBTyxJQUFBLGtCQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBZTtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sT0FBTyxDQUFDLGNBQTRCOztRQUN2QyxPQUFPLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sMENBQUUsSUFBSSxtQ0FBSSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsSUFBSSxDQUFDO0lBQzlELENBQUM7SUFFTSxPQUFPLENBQUMsY0FBNEI7O1FBQ3ZDLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTywwQ0FBRSxJQUFJLG1DQUFJLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxjQUE0QjtRQUMxQyxPQUFPLGtDQUFpQixDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1RixDQUFDO0lBRU0sYUFBYSxDQUFDLFdBQWtDLEVBQUUsR0FBMEQ7UUFDL0csTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxPQUFPLGtDQUFpQixDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLGNBQWMsQ0FDakIsSUFBK0IsRUFDL0IsT0FBZ0IsRUFDaEIsVUFBd0M7UUFFeEMsSUFBSSxNQUFNLEdBQWtDLE9BQU8sQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxVQUFVLGFBQVYsVUFBVSxjQUFWLFVBQVUsR0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN4RCxRQUFRLElBQUksRUFBRTtZQUNWLEtBQUsscUJBQXFCO2dCQUN0QixNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUNuRixNQUFNO1lBQ1YsS0FBSyxzQkFBc0I7Z0JBQ3ZCLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQzlFLE1BQU07WUFDVixLQUFLLHdCQUF3QjtnQkFDekIsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLHdCQUF3QixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDL0UsdUJBQXVCO2dCQUN2QixPQUFPLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksa0NBQWtDLENBQUM7Z0JBQ3hELE1BQU07U0FDYjtRQUNELHVCQUF1QjtRQUN2QixPQUFPLElBQUEseUJBQWMsRUFBQyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7QUF6RUwsMENBMEVDO0FBekVvQix1QkFBTyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBEZXRhaWxlZEZhaWx1cmUsIFJlc3VsdCwgZmFpbFdpdGhEZXRhaWwsIHN1Y2NlZWQgfSBmcm9tICdAZmd2L3RzLXV0aWxzJztcbmltcG9ydCB7IElKc29uQ2xvbmVFZGl0b3IsIEpzb25FZGl0RmFpbHVyZVJlYXNvbiwgSnNvbkVkaXRvck9wdGlvbnMsIEpzb25FZGl0b3JWYWxpZGF0aW9uT3B0aW9ucywgSnNvbkVkaXRvclZhbGlkYXRpb25SdWxlcywgSnNvblByb3BlcnR5RWRpdEZhaWx1cmVSZWFzb24gfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBKc29uQ29udGV4dCwgSnNvblJlZmVyZW5jZU1hcCwgVGVtcGxhdGVWYXJzLCBWYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi4vanNvbkNvbnRleHQnO1xuXG5pbXBvcnQgeyBKc29uQ29udGV4dEhlbHBlciB9IGZyb20gJy4uL2NvbnRleHRIZWxwZXJzJztcbmltcG9ydCB7IEpzb25PYmplY3QgfSBmcm9tICcuLi9jb21tb24nO1xuXG5leHBvcnQgY2xhc3MgSnNvbkVkaXRvclN0YXRlIHtcbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9uZXh0SWQgPSAwO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvcjogSUpzb25DbG9uZUVkaXRvcjtcblxuICAgIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBKc29uRWRpdG9yT3B0aW9ucztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RlZmVycmVkOiBKc29uT2JqZWN0W10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2lkOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZWRpdG9yOiBJSnNvbkNsb25lRWRpdG9yLCBiYXNlT3B0aW9uczogSnNvbkVkaXRvck9wdGlvbnMsIHJ1bnRpbWVDb250ZXh0PzogSnNvbkNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IEpzb25FZGl0b3JTdGF0ZS5fZ2V0RWZmZWN0aXZlT3B0aW9ucyhiYXNlT3B0aW9ucywgcnVudGltZUNvbnRleHQpLm9yVGhyb3coKTtcbiAgICAgICAgdGhpcy5faWQgPSBKc29uRWRpdG9yU3RhdGUuX25leHRJZCsrO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBKc29uQ29udGV4dHx1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5vcHRpb25zLmNvbnRleHQ7IH1cblxuICAgIHB1YmxpYyBnZXQgZGVmZXJyZWQoKTogSnNvbk9iamVjdFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmVycmVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGF0aWMgX2dldEVmZmVjdGl2ZU9wdGlvbnMob3B0aW9uczogSnNvbkVkaXRvck9wdGlvbnMsIGNvbnRleHQ/OiBKc29uQ29udGV4dCk6IFJlc3VsdDxKc29uRWRpdG9yT3B0aW9ucz4ge1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKc29uQ29udGV4dEhlbHBlci5tZXJnZUNvbnRleHQob3B0aW9ucy5jb250ZXh0LCBjb250ZXh0KS5vblN1Y2Nlc3MoKG1lcmdlZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoeyBjb250ZXh0OiBtZXJnZWQsIHZhbGlkYXRpb246IG9wdGlvbnMudmFsaWRhdGlvbiB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlZmVyKG9iajogSnNvbk9iamVjdCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZWZlcnJlZC5wdXNoKG9iaik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhcnMoZGVmYXVsdENvbnRleHQ/OiBKc29uQ29udGV4dCk6IFRlbXBsYXRlVmFyc3x1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbnRleHQ/LnZhcnMgPz8gZGVmYXVsdENvbnRleHQ/LnZhcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlZnMoZGVmYXVsdENvbnRleHQ/OiBKc29uQ29udGV4dCk6IEpzb25SZWZlcmVuY2VNYXB8dW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb250ZXh0Py5yZWZzID8/IGRlZmF1bHRDb250ZXh0Py5yZWZzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0KGRlZmF1bHRDb250ZXh0PzogSnNvbkNvbnRleHQpOiBKc29uQ29udGV4dHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gSnNvbkNvbnRleHRIZWxwZXIubWVyZ2VDb250ZXh0KGRlZmF1bHRDb250ZXh0LCB0aGlzLm9wdGlvbnMuY29udGV4dCkub3JEZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4dGVuZENvbnRleHQoYmFzZUNvbnRleHQ6IEpzb25Db250ZXh0fHVuZGVmaW5lZCwgYWRkOiB7IHZhcnM/OiBWYXJpYWJsZVZhbHVlW10sIHJlZnM/OiBKc29uUmVmZXJlbmNlTWFwW10gfSk6IFJlc3VsdDxKc29uQ29udGV4dHx1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChiYXNlQ29udGV4dCk7XG4gICAgICAgIHJldHVybiBKc29uQ29udGV4dEhlbHBlci5leHRlbmRDb250ZXh0KGNvbnRleHQsIGFkZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZhaWxWYWxpZGF0aW9uPFQ9SnNvbk9iamVjdD4oXG4gICAgICAgIHJ1bGU6IEpzb25FZGl0b3JWYWxpZGF0aW9uUnVsZXMsXG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICAgIHZhbGlkYXRpb24/OiBKc29uRWRpdG9yVmFsaWRhdGlvbk9wdGlvbnMsXG4gICAgKTogRGV0YWlsZWRGYWlsdXJlPFQsIEpzb25FZGl0RmFpbHVyZVJlYXNvbj4ge1xuICAgICAgICBsZXQgZGV0YWlsOiBKc29uUHJvcGVydHlFZGl0RmFpbHVyZVJlYXNvbiA9ICdlcnJvcic7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZSA9IHZhbGlkYXRpb24gPz8gdGhpcy5vcHRpb25zLnZhbGlkYXRpb247XG4gICAgICAgIHN3aXRjaCAocnVsZSkge1xuICAgICAgICAgICAgY2FzZSAnaW52YWxpZFByb3BlcnR5TmFtZSc6XG4gICAgICAgICAgICAgICAgZGV0YWlsID0gKGVmZmVjdGl2ZS5vbkludmFsaWRQcm9wZXJ0eU5hbWUgIT09ICdpZ25vcmUnKSA/ICdlcnJvcicgOiAnaW5hcHBsaWNhYmxlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ludmFsaWRQcm9wZXJ0eVZhbHVlJzpcbiAgICAgICAgICAgICAgICBkZXRhaWwgPSAoZWZmZWN0aXZlLm9uSW52YWxpZFByb3BlcnR5VmFsdWUgIT09ICdpZ25vcmUnKSA/ICdlcnJvcicgOiAnaWdub3JlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZFByb3BlcnR5VmFsdWUnOlxuICAgICAgICAgICAgICAgIGRldGFpbCA9IChlZmZlY3RpdmUub25VbmRlZmluZWRQcm9wZXJ0eVZhbHVlICE9PSAnZXJyb3InKSA/ICdpZ25vcmUnIDogJ2Vycm9yJztcbiAgICAgICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlID8/ICdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgdG8gSlNPTic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgcmV0dXJuIGZhaWxXaXRoRGV0YWlsKG1lc3NhZ2UgPz8gcnVsZSwgZGV0YWlsKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { DetailedResult, Result } from '@fgv/ts-utils';
|
|
2
|
-
import { JsonEditFailureReason, JsonEditorOptions, JsonPropertyEditFailureReason } from '../common';
|
|
3
|
-
import { JsonObject, JsonValue } from '../../common';
|
|
4
|
-
import { JsonEditorRuleBase } from '../jsonEditorRule';
|
|
5
|
-
import { JsonEditorState } from '../jsonEditorState';
|
|
6
|
-
/**
|
|
7
|
-
* Returned by the _tryMatch method of the @see ConditionalJsonEditorRule
|
|
8
|
-
* to indicate whether a successful match was due to a matching condition
|
|
9
|
-
* or a default value.
|
|
10
|
-
*/
|
|
11
|
-
export interface ConditionalJsonKeyResult extends JsonObject {
|
|
12
|
-
matchType: 'default' | 'match' | 'unconditional';
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* On a successful match, the @see ConditionalJsonEditorRule stores a
|
|
16
|
-
* ConditionalJsonDeferredObject describing the matching result, to
|
|
17
|
-
* be resolved at finalization time.
|
|
18
|
-
*/
|
|
19
|
-
export interface ConditionalJsonDeferredObject extends ConditionalJsonKeyResult {
|
|
20
|
-
value: JsonValue;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Configuration options for the Conditional JSON editor rule
|
|
24
|
-
*/
|
|
25
|
-
export interface ConditionalJsonRuleOptions extends Partial<JsonEditorOptions> {
|
|
26
|
-
/**
|
|
27
|
-
* If true (default) then properties with unconditional names
|
|
28
|
-
* (which start with !) are flattened.
|
|
29
|
-
*/
|
|
30
|
-
flattenUnconditionalValues?: boolean;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* The Conditional JSON editor rule evaluates properties with conditional keys,
|
|
34
|
-
* omitting non-matching keys and merging keys that match, or default keys only
|
|
35
|
-
* if no other keys match.
|
|
36
|
-
*
|
|
37
|
-
* The default syntax for a conditional key is:
|
|
38
|
-
* "?value1=value2" - matches if value1 and value2 are the same, is ignored otherwise.
|
|
39
|
-
* "?value" - matches if value is a non-empty, non-whitespace string. Is ignored otherwise.
|
|
40
|
-
* "?default" - matches only if no other conditional blocks in the same object were matched
|
|
41
|
-
*/
|
|
42
|
-
export declare class ConditionalJsonEditorRule extends JsonEditorRuleBase {
|
|
43
|
-
protected _options?: ConditionalJsonRuleOptions;
|
|
44
|
-
/**
|
|
45
|
-
* Creates a new @see ConditionalJsonEditorRule
|
|
46
|
-
* @param options Optional configuration options used for this rule
|
|
47
|
-
*/
|
|
48
|
-
constructor(options?: ConditionalJsonRuleOptions);
|
|
49
|
-
/**
|
|
50
|
-
* Creates a new @see ConditionalJsonEditorRule
|
|
51
|
-
* @param options Optional configuration options used for this rule
|
|
52
|
-
*/
|
|
53
|
-
static create(options?: ConditionalJsonRuleOptions): Result<ConditionalJsonEditorRule>;
|
|
54
|
-
/**
|
|
55
|
-
* Evaluates a property for conditional application.
|
|
56
|
-
* @param key The key of the property to be considered
|
|
57
|
-
* @param value The value of the property to be considered
|
|
58
|
-
* @param state The editor state for the object being edited
|
|
59
|
-
* @returns Returns Success with detail 'deferred' and a @see ConditionalJsonDeferredObject
|
|
60
|
-
* for a matching, default or unconditional key. Fails with detail 'ignore' for a
|
|
61
|
-
* non-matching conditional and with detail 'error' if an error occurs. Otherwise
|
|
62
|
-
* fails with detail 'inapplicable'.
|
|
63
|
-
*/
|
|
64
|
-
editProperty(key: string, value: JsonValue, state: JsonEditorState): DetailedResult<JsonObject, JsonPropertyEditFailureReason>;
|
|
65
|
-
/**
|
|
66
|
-
* Finalizes any deferred conditional properties. If the only deferred property is
|
|
67
|
-
* default, that property is emitted. Otherwise all matching properties are emitted.
|
|
68
|
-
* @param finalized The deferred properties to be considered for merge
|
|
69
|
-
* @param _state The editor state for the object being edited
|
|
70
|
-
*/
|
|
71
|
-
finalizeProperties(finalized: JsonObject[], _state: JsonEditorState): DetailedResult<JsonObject[], JsonEditFailureReason>;
|
|
72
|
-
/**
|
|
73
|
-
* Determines if a given property key is conditional. Derived classes can override this
|
|
74
|
-
* method to use a different format for conditional properties.
|
|
75
|
-
* @param key The key of the property to consider.
|
|
76
|
-
* @param state The editor state of the object being edited.
|
|
77
|
-
* @returns Success with detail 'deferred' and a @see ConditionalJsonKeyResult describing the
|
|
78
|
-
* match for a default or matching conditional property. Fails with detail 'ignore' for
|
|
79
|
-
* a non-matching conditional property. Fails with detail 'error' if an error occurs
|
|
80
|
-
* or with detail 'inapplicable' if the key does not represent a conditional property.
|
|
81
|
-
*/
|
|
82
|
-
protected _tryParseCondition(key: string, state: JsonEditorState): DetailedResult<ConditionalJsonKeyResult, JsonPropertyEditFailureReason>;
|
|
83
|
-
protected _compare(left: string, right: string, operator: string): boolean;
|
|
84
|
-
}
|