@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.
Files changed (127) hide show
  1. package/dist/ts-json.d.ts +1826 -0
  2. package/dist/tsdoc-metadata.json +11 -0
  3. package/lib/index.d.ts +5 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +42 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/packlets/context/compositeJsonMap.d.ts +60 -0
  8. package/lib/packlets/context/compositeJsonMap.d.ts.map +1 -0
  9. package/lib/packlets/context/compositeJsonMap.js +105 -0
  10. package/lib/packlets/context/compositeJsonMap.js.map +1 -0
  11. package/lib/packlets/context/contextHelpers.d.ts +116 -0
  12. package/lib/packlets/context/contextHelpers.d.ts.map +1 -0
  13. package/lib/packlets/context/contextHelpers.js +191 -0
  14. package/lib/packlets/context/contextHelpers.js.map +1 -0
  15. package/lib/packlets/context/index.d.ts +4 -0
  16. package/lib/packlets/context/index.d.ts.map +1 -0
  17. package/lib/packlets/context/index.js +31 -0
  18. package/lib/packlets/context/index.js.map +1 -0
  19. package/lib/packlets/context/jsonContext.d.ts +84 -0
  20. package/lib/packlets/context/jsonContext.d.ts.map +1 -0
  21. package/lib/packlets/context/jsonContext.js +41 -0
  22. package/lib/packlets/context/jsonContext.js.map +1 -0
  23. package/lib/packlets/converters/converters.d.ts +54 -0
  24. package/lib/packlets/converters/converters.d.ts.map +1 -0
  25. package/lib/packlets/converters/converters.js +105 -0
  26. package/lib/packlets/converters/converters.js.map +1 -0
  27. package/lib/packlets/converters/file.d.ts +83 -0
  28. package/lib/packlets/converters/file.d.ts.map +1 -0
  29. package/lib/packlets/converters/file.js +162 -0
  30. package/lib/packlets/converters/file.js.map +1 -0
  31. package/lib/packlets/converters/index.d.ts +5 -0
  32. package/lib/packlets/converters/index.d.ts.map +1 -0
  33. package/lib/packlets/converters/index.js +56 -0
  34. package/lib/packlets/converters/index.js.map +1 -0
  35. package/lib/packlets/converters/jsonConverter.d.ts +276 -0
  36. package/lib/packlets/converters/jsonConverter.d.ts.map +1 -0
  37. package/lib/packlets/converters/jsonConverter.js +310 -0
  38. package/lib/packlets/converters/jsonConverter.js.map +1 -0
  39. package/lib/packlets/editor/common.d.ts +67 -0
  40. package/lib/packlets/editor/common.d.ts.map +1 -0
  41. package/lib/packlets/editor/common.js +3 -0
  42. package/lib/packlets/editor/common.js.map +1 -0
  43. package/lib/packlets/editor/index.d.ts +8 -0
  44. package/lib/packlets/editor/index.d.ts.map +1 -0
  45. package/{jsonEditor → lib/packlets/editor}/index.js +15 -9
  46. package/lib/packlets/editor/index.js.map +1 -0
  47. package/lib/packlets/editor/jsonEditor.d.ts +155 -0
  48. package/lib/packlets/editor/jsonEditor.d.ts.map +1 -0
  49. package/lib/packlets/editor/jsonEditor.js +332 -0
  50. package/lib/packlets/editor/jsonEditor.js.map +1 -0
  51. package/lib/packlets/editor/jsonEditorRule.d.ts +64 -0
  52. package/lib/packlets/editor/jsonEditorRule.d.ts.map +1 -0
  53. package/lib/packlets/editor/jsonEditorRule.js +54 -0
  54. package/lib/packlets/editor/jsonEditorRule.js.map +1 -0
  55. package/lib/packlets/editor/jsonEditorState.d.ts +125 -0
  56. package/lib/packlets/editor/jsonEditorState.d.ts.map +1 -0
  57. package/lib/packlets/editor/jsonEditorState.js +177 -0
  58. package/lib/packlets/editor/jsonEditorState.js.map +1 -0
  59. package/lib/packlets/editor/jsonReferenceMap.d.ts +303 -0
  60. package/lib/packlets/editor/jsonReferenceMap.d.ts.map +1 -0
  61. package/lib/packlets/editor/jsonReferenceMap.js +324 -0
  62. package/lib/packlets/editor/jsonReferenceMap.js.map +1 -0
  63. package/lib/packlets/editor/rules/conditional.d.ts +107 -0
  64. package/lib/packlets/editor/rules/conditional.d.ts.map +1 -0
  65. package/lib/packlets/editor/rules/conditional.js +167 -0
  66. package/lib/packlets/editor/rules/conditional.js.map +1 -0
  67. package/{jsonEditor → lib/packlets/editor}/rules/index.d.ts +1 -0
  68. package/lib/packlets/editor/rules/index.d.ts.map +1 -0
  69. package/lib/packlets/editor/rules/index.js +42 -0
  70. package/lib/packlets/editor/rules/index.js.map +1 -0
  71. package/lib/packlets/editor/rules/multivalue.d.ts +94 -0
  72. package/lib/packlets/editor/rules/multivalue.d.ts.map +1 -0
  73. package/lib/packlets/editor/rules/multivalue.js +141 -0
  74. package/lib/packlets/editor/rules/multivalue.js.map +1 -0
  75. package/lib/packlets/editor/rules/references.d.ts +69 -0
  76. package/lib/packlets/editor/rules/references.d.ts.map +1 -0
  77. package/lib/packlets/editor/rules/references.js +159 -0
  78. package/lib/packlets/editor/rules/references.js.map +1 -0
  79. package/lib/packlets/editor/rules/templates.d.ts +74 -0
  80. package/lib/packlets/editor/rules/templates.d.ts.map +1 -0
  81. package/lib/packlets/editor/rules/templates.js +127 -0
  82. package/lib/packlets/editor/rules/templates.js.map +1 -0
  83. package/lib/packlets/json/common.d.ts +85 -0
  84. package/lib/packlets/json/common.d.ts.map +1 -0
  85. package/lib/packlets/json/common.js +123 -0
  86. package/lib/packlets/json/common.js.map +1 -0
  87. package/lib/packlets/json/index.d.ts +2 -0
  88. package/lib/packlets/json/index.d.ts.map +1 -0
  89. package/lib/packlets/json/index.js +39 -0
  90. package/lib/packlets/json/index.js.map +1 -0
  91. package/package.json +58 -49
  92. package/common.d.ts +0 -58
  93. package/common.js +0 -116
  94. package/compositeJsonMap.d.ts +0 -47
  95. package/compositeJsonMap.js +0 -97
  96. package/contextHelpers.d.ts +0 -21
  97. package/contextHelpers.js +0 -101
  98. package/converters.d.ts +0 -37
  99. package/converters.js +0 -92
  100. package/file.d.ts +0 -60
  101. package/file.js +0 -140
  102. package/index.d.ts +0 -10
  103. package/index.js +0 -62
  104. package/jsonContext.d.ts +0 -74
  105. package/jsonContext.js +0 -40
  106. package/jsonConverter.d.ts +0 -229
  107. package/jsonConverter.js +0 -292
  108. package/jsonEditor/common.d.ts +0 -36
  109. package/jsonEditor/common.js +0 -3
  110. package/jsonEditor/index.d.ts +0 -5
  111. package/jsonEditor/jsonEditor.d.ts +0 -74
  112. package/jsonEditor/jsonEditor.js +0 -259
  113. package/jsonEditor/jsonEditorRule.d.ts +0 -47
  114. package/jsonEditor/jsonEditorRule.js +0 -44
  115. package/jsonEditor/jsonEditorState.d.ts +0 -24
  116. package/jsonEditor/jsonEditorState.js +0 -86
  117. package/jsonEditor/rules/conditional.d.ts +0 -84
  118. package/jsonEditor/rules/conditional.js +0 -146
  119. package/jsonEditor/rules/index.js +0 -21
  120. package/jsonEditor/rules/multivalue.d.ts +0 -78
  121. package/jsonEditor/rules/multivalue.js +0 -129
  122. package/jsonEditor/rules/references.d.ts +0 -62
  123. package/jsonEditor/rules/references.js +0 -158
  124. package/jsonEditor/rules/templates.d.ts +0 -56
  125. package/jsonEditor/rules/templates.js +0 -115
  126. package/jsonReferenceMap.d.ts +0 -138
  127. package/jsonReferenceMap.js +0 -202
@@ -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
- }