@fgv/ts-json 1.9.6 → 2.0.1-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/{jsonEditor → lib/packlets/converters}/index.js +10 -10
  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/lib/packlets/editor/index.js +58 -0
  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 +333 -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 +160 -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 +57 -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
package/jsonConverter.js DELETED
@@ -1,292 +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.RichJsonConverter = exports.ConditionalJsonConverter = exports.TemplatedJsonConverter = exports.JsonConverter = exports.JsonEditorConverter = exports.converterOptionsToEditor = exports.contextFromConverterOptions = exports.mergeDefaultJsonConverterOptions = void 0;
25
- const ts_utils_1 = require("@fgv/ts-utils");
26
- const rules_1 = require("./jsonEditor/rules");
27
- const common_1 = require("./common");
28
- const jsonContext_1 = require("./jsonContext");
29
- const jsonEditor_1 = require("./jsonEditor/jsonEditor");
30
- /**
31
- * Merges an optionally supplied partial set of options with the default
32
- * converter options, producing a fully-resolved set of ConverterOptions
33
- * and taking all dynamic rules into account (e.g. template usage enabled
34
- * if variables are supplied and disabled if not)
35
- * @param partial An optional partial @see JsonConverterOptions to be merged
36
- */
37
- function mergeDefaultJsonConverterOptions(partial) {
38
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
39
- const haveVars = ((partial === null || partial === void 0 ? void 0 : partial.vars) !== undefined);
40
- const haveRefs = ((partial === null || partial === void 0 ? void 0 : partial.refs) !== undefined);
41
- const extender = (partial === null || partial === void 0 ? void 0 : partial.hasOwnProperty('extendVars')) ? partial.extendVars : jsonContext_1.defaultExtendVars;
42
- const haveExtender = (extender !== undefined);
43
- const namesDefault = ((_a = partial === null || partial === void 0 ? void 0 : partial.useNameTemplates) !== null && _a !== void 0 ? _a : haveVars);
44
- const conditionsDefault = ((_b = partial === null || partial === void 0 ? void 0 : partial.useConditionalNames) !== null && _b !== void 0 ? _b : namesDefault);
45
- const options = {
46
- useValueTemplates: (_c = partial === null || partial === void 0 ? void 0 : partial.useValueTemplates) !== null && _c !== void 0 ? _c : haveVars,
47
- useNameTemplates: namesDefault,
48
- useConditionalNames: conditionsDefault,
49
- flattenUnconditionalValues: (_d = partial === null || partial === void 0 ? void 0 : partial.flattenUnconditionalValues) !== null && _d !== void 0 ? _d : conditionsDefault,
50
- useMultiValueTemplateNames: (_e = partial === null || partial === void 0 ? void 0 : partial.useMultiValueTemplateNames) !== null && _e !== void 0 ? _e : (haveExtender && namesDefault),
51
- useReferences: (_f = partial === null || partial === void 0 ? void 0 : partial.useReferences) !== null && _f !== void 0 ? _f : haveRefs,
52
- onInvalidPropertyName: (_g = partial === null || partial === void 0 ? void 0 : partial.onInvalidPropertyName) !== null && _g !== void 0 ? _g : 'error',
53
- onInvalidPropertyValue: (_h = partial === null || partial === void 0 ? void 0 : partial.onInvalidPropertyValue) !== null && _h !== void 0 ? _h : 'error',
54
- onUndefinedPropertyValue: (_j = partial === null || partial === void 0 ? void 0 : partial.onUndefinedPropertyValue) !== null && _j !== void 0 ? _j : 'ignore',
55
- extendVars: extender,
56
- };
57
- if (partial === null || partial === void 0 ? void 0 : partial.vars) {
58
- options.vars = partial.vars;
59
- }
60
- if (partial === null || partial === void 0 ? void 0 : partial.refs) {
61
- options.refs = partial.refs;
62
- }
63
- return options;
64
- }
65
- exports.mergeDefaultJsonConverterOptions = mergeDefaultJsonConverterOptions;
66
- /**
67
- * Creates a new @see JsonContext using values supplied in an optional partial
68
- * @see JsonConverterOptions
69
- * @param partial Optional partial @see JsonConverterOptions used to populate the context
70
- */
71
- function contextFromConverterOptions(partial) {
72
- const context = {};
73
- if (partial === null || partial === void 0 ? void 0 : partial.vars) {
74
- context.vars = partial.vars;
75
- }
76
- if (partial === null || partial === void 0 ? void 0 : partial.refs) {
77
- context.refs = partial.refs;
78
- }
79
- if (partial === null || partial === void 0 ? void 0 : partial.hasOwnProperty('extendVars')) {
80
- context.extendVars = partial.extendVars;
81
- }
82
- return (context.vars || context.refs || context.extendVars) ? context : undefined;
83
- }
84
- exports.contextFromConverterOptions = contextFromConverterOptions;
85
- /**
86
- * Creates a new @see JsonEditor from an optionally supplied partial @see JsonConverterOptions.
87
- * Expands supplied options with default values and constructs an editor with
88
- * matching configuration and defined rules.
89
- * @param partial Optional partial @see JsonConverterOptions used to create the editor
90
- */
91
- function converterOptionsToEditor(partial) {
92
- const converterOptions = mergeDefaultJsonConverterOptions(partial);
93
- const context = contextFromConverterOptions(partial);
94
- const validation = {
95
- onInvalidPropertyName: converterOptions.onInvalidPropertyName,
96
- onInvalidPropertyValue: converterOptions.onInvalidPropertyValue,
97
- onUndefinedPropertyValue: converterOptions.onUndefinedPropertyValue,
98
- };
99
- const editorOptions = { context, validation };
100
- const rules = [];
101
- if (converterOptions.useNameTemplates || converterOptions.useValueTemplates) {
102
- const templateOptions = {
103
- ...editorOptions,
104
- useNameTemplates: converterOptions.useNameTemplates,
105
- useValueTemplates: converterOptions.useValueTemplates,
106
- };
107
- rules.push(new rules_1.TemplatedJsonEditorRule(templateOptions));
108
- }
109
- if (converterOptions.useConditionalNames || converterOptions.flattenUnconditionalValues) {
110
- const conditionalOptions = {
111
- ...editorOptions,
112
- flattenUnconditionalValues: converterOptions.flattenUnconditionalValues,
113
- };
114
- rules.push(new rules_1.ConditionalJsonEditorRule(conditionalOptions));
115
- }
116
- if (converterOptions.useMultiValueTemplateNames) {
117
- rules.push(new rules_1.MultiValueJsonEditorRule(editorOptions));
118
- }
119
- if (converterOptions.useReferences) {
120
- rules.push(new rules_1.ReferenceJsonEditorRule(editorOptions));
121
- }
122
- return jsonEditor_1.JsonEditor.create(editorOptions, rules);
123
- }
124
- exports.converterOptionsToEditor = converterOptionsToEditor;
125
- /**
126
- * A thin wrapper to allow an arbitrary @see JsonEditor to be used via the
127
- * ts-utils @see Converter pattern.
128
- */
129
- class JsonEditorConverter extends ts_utils_1.BaseConverter {
130
- /**
131
- * Constructs a new @see JsonEditorConverter which uses the supplied editor
132
- * @param editor
133
- */
134
- constructor(editor) {
135
- super((from, _self, context) => this._convert(from, context), editor.options.context);
136
- this.editor = editor;
137
- }
138
- /**
139
- * Constructs a new @see JsonEditorConverter which uses the supplied editor
140
- * @param editor
141
- */
142
- static createWithEditor(editor) {
143
- return (0, ts_utils_1.captureResult)(() => new JsonEditorConverter(editor));
144
- }
145
- /**
146
- * Gets a derived converter which fails if the resulting converted
147
- * @see JsonValue is not a @see JsonObject
148
- */
149
- object() {
150
- return this.map((jv) => {
151
- if (!(0, common_1.isJsonObject)(jv)) {
152
- return (0, ts_utils_1.fail)(`Cannot convert "${JSON.stringify(jv)}" to JSON object.`);
153
- }
154
- return (0, ts_utils_1.succeed)(jv);
155
- });
156
- }
157
- /**
158
- * Gets a derived converter which fails if the resulting converted
159
- * @see JsonValue is not a @see JsonArray
160
- */
161
- array() {
162
- return this.map((jv) => {
163
- if ((!Array.isArray(jv)) || (typeof jv !== 'object')) {
164
- return (0, ts_utils_1.fail)(`Cannot convert "${JSON.stringify(jv)}" to JSON array.`);
165
- }
166
- return (0, ts_utils_1.succeed)(jv);
167
- });
168
- }
169
- _convert(from, context) {
170
- return this.editor.clone(from, context);
171
- }
172
- }
173
- exports.JsonEditorConverter = JsonEditorConverter;
174
- /**
175
- * A ts-utils @see Converter from unknown to type-safe JSON, optionally rendering
176
- * any string property names or values using mustache with a supplied view.
177
- */
178
- class JsonConverter extends JsonEditorConverter {
179
- /**
180
- * Constructs a new JsonConverter with supplied or default options
181
- * @param options Optional options to configure the converter
182
- */
183
- constructor(options) {
184
- const editor = converterOptionsToEditor(options).orThrow();
185
- super(editor);
186
- }
187
- /**
188
- * Creates a new converter.
189
- * @param options Optional options to configure the converter
190
- * @returns Success with a new JsonConverter on success, or Failure with an
191
- * informative message if an error occurs.
192
- */
193
- static create(options) {
194
- return (0, ts_utils_1.captureResult)(() => new JsonConverter(options));
195
- }
196
- }
197
- exports.JsonConverter = JsonConverter;
198
- /**
199
- * A ts-utils @see Converter from unknown to type-safe JSON with mustache
200
- * template rendering and multi-value property name rules enabled regardless
201
- * of initial context.
202
- */
203
- class TemplatedJsonConverter extends JsonEditorConverter {
204
- /**
205
- * Constructs a new @see TemplatedJsonConverter with supplied or
206
- * default options
207
- * @param options Optional configuration or context for the converter
208
- */
209
- constructor(options) {
210
- options = { ...options, ...TemplatedJsonConverter.templateOptions };
211
- const editor = converterOptionsToEditor(options).orThrow();
212
- super(editor);
213
- }
214
- /**
215
- * Constructs a new @see TemplatedJsonConverter with supplied or
216
- * default options
217
- * @param options Optional configuration or context for the converter
218
- */
219
- static create(options) {
220
- return (0, ts_utils_1.captureResult)(() => new TemplatedJsonConverter(options));
221
- }
222
- }
223
- exports.TemplatedJsonConverter = TemplatedJsonConverter;
224
- TemplatedJsonConverter.templateOptions = {
225
- useNameTemplates: true,
226
- useValueTemplates: true,
227
- useMultiValueTemplateNames: true,
228
- useConditionalNames: false,
229
- flattenUnconditionalValues: false,
230
- };
231
- /**
232
- * A ts-utils @see Converter from unknown to type-safe JSON with mustache
233
- * template rendering, multi-value property name and conditional property
234
- * name rules enabled regardless of initial context.
235
- */
236
- class ConditionalJsonConverter extends JsonEditorConverter {
237
- /**
238
- * Constructs a new @see ConditionalJsonConverter with supplied or
239
- * default options
240
- * @param options Optional configuration or context for the converter
241
- */
242
- constructor(options) {
243
- options = { ...options, ...ConditionalJsonConverter.conditionalOptions };
244
- const editor = converterOptionsToEditor(options).orThrow();
245
- super(editor);
246
- }
247
- /**
248
- * Constructs a new @see ConditionalJsonConverter with supplied or
249
- * default options
250
- * @param options Optional configuration or context for the converter
251
- */
252
- static create(options) {
253
- return (0, ts_utils_1.captureResult)(() => new ConditionalJsonConverter(options));
254
- }
255
- }
256
- exports.ConditionalJsonConverter = ConditionalJsonConverter;
257
- ConditionalJsonConverter.conditionalOptions = {
258
- ...TemplatedJsonConverter.templateOptions,
259
- useConditionalNames: true,
260
- flattenUnconditionalValues: true,
261
- };
262
- /**
263
- * A ts-utils @see Converter from unknown to type-safe JSON with mustache
264
- * template rendering, multi-value property name, conditional property
265
- * name, and external reference rules enabled regardless of initial context.
266
- */
267
- class RichJsonConverter extends JsonEditorConverter {
268
- /**
269
- * Constructs a new @see RichJsonConverter with supplied or
270
- * default options
271
- * @param options Optional configuration or context for the converter
272
- */
273
- constructor(options) {
274
- options = { ...options, ...RichJsonConverter.richOptions };
275
- const editor = converterOptionsToEditor(options).orThrow();
276
- super(editor);
277
- }
278
- /**
279
- * Constructs a new @see RichJsonConverter with supplied or
280
- * default options
281
- * @param options Optional configuration or context for the converter
282
- */
283
- static create(options) {
284
- return (0, ts_utils_1.captureResult)(() => new RichJsonConverter(options));
285
- }
286
- }
287
- exports.RichJsonConverter = RichJsonConverter;
288
- RichJsonConverter.richOptions = {
289
- ...ConditionalJsonConverter.conditionalOptions,
290
- useReferences: true,
291
- };
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9qc29uQ29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7OztBQUVILDRDQU91QjtBQUN2Qiw4Q0FLNEI7QUFDNUIscUNBQTBFO0FBQzFFLCtDQU11QjtBQUV2Qix3REFBcUQ7QUErR3JEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGdDQUFnQyxDQUFDLE9BQXVDOztJQUNwRixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksTUFBSyxTQUFTLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksTUFBSyxTQUFTLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLCtCQUFpQixDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLG1DQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQzdELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxtQkFBbUIsbUNBQUksWUFBWSxDQUFDLENBQUM7SUFFekUsTUFBTSxPQUFPLEdBQXlCO1FBQ2xDLGlCQUFpQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGlCQUFpQixtQ0FBSSxRQUFRO1FBQ3pELGdCQUFnQixFQUFFLFlBQVk7UUFDOUIsbUJBQW1CLEVBQUUsaUJBQWlCO1FBQ3RDLDBCQUEwQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLDBCQUEwQixtQ0FBSSxpQkFBaUI7UUFDcEYsMEJBQTBCLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsMEJBQTBCLG1DQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQztRQUNqRyxhQUFhLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsYUFBYSxtQ0FBSSxRQUFRO1FBQ2pELHFCQUFxQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLHFCQUFxQixtQ0FBSSxPQUFPO1FBQ2hFLHNCQUFzQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLHNCQUFzQixtQ0FBSSxPQUFPO1FBQ2xFLHdCQUF3QixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLHdCQUF3QixtQ0FBSSxRQUFRO1FBQ3ZFLFVBQVUsRUFBRSxRQUFRO0tBQ3ZCLENBQUM7SUFDRixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLEVBQUU7UUFDZixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLEVBQUU7UUFDZixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7S0FDL0I7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBM0JELDRFQTJCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxPQUF1QztJQUMvRSxNQUFNLE9BQU8sR0FBZ0IsRUFBRSxDQUFDO0lBQ2hDLElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksRUFBRTtRQUNmLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztLQUMvQjtJQUNELElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksRUFBRTtRQUNmLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztLQUMvQjtJQUNELElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUN2QyxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7S0FDM0M7SUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdEYsQ0FBQztBQVpELGtFQVlDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxPQUF1QztJQUM1RSxNQUFNLGdCQUFnQixHQUFHLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sVUFBVSxHQUFHO1FBQ2YscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMscUJBQXFCO1FBQzdELHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLHNCQUFzQjtRQUMvRCx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyx3QkFBd0I7S0FDdEUsQ0FBQztJQUNGLE1BQU0sYUFBYSxHQUFzQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUVqRSxNQUFNLEtBQUssR0FBcUIsRUFBRSxDQUFDO0lBQ25DLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUU7UUFDekUsTUFBTSxlQUFlLEdBQUc7WUFDcEIsR0FBRyxhQUFhO1lBQ2hCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLGdCQUFnQjtZQUNuRCxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUI7U0FDeEQsQ0FBQztRQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSwrQkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0tBQzVEO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxtQkFBbUIsSUFBSSxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRTtRQUNyRixNQUFNLGtCQUFrQixHQUFHO1lBQ3ZCLEdBQUcsYUFBYTtZQUNoQiwwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQywwQkFBMEI7U0FDMUUsQ0FBQztRQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxpQ0FBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7S0FDakU7SUFDRCxJQUFJLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFO1FBQzdDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxnQ0FBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQzNEO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7UUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLCtCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDMUQ7SUFFRCxPQUFPLHVCQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBbENELDREQWtDQztBQUVEOzs7R0FHRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsd0JBQXFDO0lBRzFFOzs7T0FHRztJQUNILFlBQW1CLE1BQWtCO1FBQ2pDLEtBQUssQ0FDRCxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFDdEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQWtCO1FBQzdDLE9BQU8sSUFBQSx3QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sSUFBQSxlQUFJLEVBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDekU7WUFDRCxPQUFPLElBQUEsa0JBQU8sRUFBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUU7Z0JBQ2xELE9BQU8sSUFBQSxlQUFJLEVBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDeEU7WUFDRCxPQUFPLElBQUEsa0JBQU8sRUFBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxRQUFRLENBQUMsSUFBYSxFQUFFLE9BQXFCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0o7QUFwREQsa0RBb0RDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsbUJBQW1CO0lBQ2xEOzs7T0FHRztJQUNILFlBQW1CLE9BQXVDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQXVDO1FBQ3hELE9BQU8sSUFBQSx3QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUNKO0FBbkJELHNDQW1CQztBQUlEOzs7O0dBSUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLG1CQUFtQjtJQVMzRDs7OztPQUlHO0lBQ0gsWUFBbUIsT0FBZ0Q7UUFDL0QsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQWdEO1FBQ2pFLE9BQU8sSUFBQSx3QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDOztBQTNCTCx3REE0QkM7QUEzQjBCLHNDQUFlLEdBQWtDO0lBQ3BFLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QiwwQkFBMEIsRUFBRSxJQUFJO0lBQ2hDLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsMEJBQTBCLEVBQUUsS0FBSztDQUNwQyxDQUFDO0FBeUJOOzs7O0dBSUc7QUFDSCxNQUFhLHdCQUF5QixTQUFRLG1CQUFtQjtJQU83RDs7OztPQUlHO0lBQ0gsWUFBbUIsT0FBa0Q7UUFDakUsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBa0Q7UUFDbkUsT0FBTyxJQUFBLHdCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7O0FBekJMLDREQTBCQztBQXpCMEIsMkNBQWtCLEdBQWtDO0lBQ3ZFLEdBQUcsc0JBQXNCLENBQUMsZUFBZTtJQUN6QyxtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLDBCQUEwQixFQUFFLElBQUk7Q0FDbkMsQ0FBQztBQXlCTjs7OztHQUlHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxtQkFBbUI7SUFNdEQ7Ozs7T0FJRztJQUNILFlBQW1CLE9BQTJDO1FBQzFELE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUEyQztRQUM1RCxPQUFPLElBQUEsd0JBQWEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUF4QkwsOENBeUJDO0FBeEIwQiw2QkFBVyxHQUFrQztJQUNoRSxHQUFHLHdCQUF3QixDQUFDLGtCQUFrQjtJQUM5QyxhQUFhLEVBQUUsSUFBSTtDQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7XG4gICAgQmFzZUNvbnZlcnRlcixcbiAgICBDb252ZXJ0ZXIsXG4gICAgUmVzdWx0LFxuICAgIGNhcHR1cmVSZXN1bHQsXG4gICAgZmFpbCxcbiAgICBzdWNjZWVkLFxufSBmcm9tICdAZmd2L3RzLXV0aWxzJztcbmltcG9ydCB7XG4gICAgQ29uZGl0aW9uYWxKc29uRWRpdG9yUnVsZSxcbiAgICBNdWx0aVZhbHVlSnNvbkVkaXRvclJ1bGUsXG4gICAgUmVmZXJlbmNlSnNvbkVkaXRvclJ1bGUsXG4gICAgVGVtcGxhdGVkSnNvbkVkaXRvclJ1bGUsXG59IGZyb20gJy4vanNvbkVkaXRvci9ydWxlcyc7XG5pbXBvcnQgeyBKc29uQXJyYXksIEpzb25PYmplY3QsIEpzb25WYWx1ZSwgaXNKc29uT2JqZWN0IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBKc29uQ29udGV4dCxcbiAgICBKc29uUmVmZXJlbmNlTWFwLFxuICAgIFRlbXBsYXRlVmFycyxcbiAgICBUZW1wbGF0ZVZhcnNFeHRlbmRGdW5jdGlvbixcbiAgICBkZWZhdWx0RXh0ZW5kVmFycyxcbn0gZnJvbSAnLi9qc29uQ29udGV4dCc7XG5cbmltcG9ydCB7IEpzb25FZGl0b3IgfSBmcm9tICcuL2pzb25FZGl0b3IvanNvbkVkaXRvcic7XG5pbXBvcnQgeyBKc29uRWRpdG9yT3B0aW9ucyB9IGZyb20gJy4vanNvbkVkaXRvci9jb21tb24nO1xuaW1wb3J0IHsgSnNvbkVkaXRvclJ1bGUgfSBmcm9tICcuL2pzb25FZGl0b3IvanNvbkVkaXRvclJ1bGUnO1xuXG4vKipcbiAqIENvbnZlcnNpb24gb3B0aW9ucyBmb3IgSnNvbkNvbnZlcnRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Db252ZXJ0ZXJPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIGFuZCBpZiB0ZW1wbGF0ZSB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSxcbiAgICAgKiB0aGVuIHN0cmluZyBwcm9wZXJ0eSB2YWx1ZXMgd2lsbCBiZSByZW5kZXJlZCB1c2luZ1xuICAgICAqIG11c3RhY2hlIGFuZCB0aG9zZSB2YXJpYWJsZXMuIE90aGVyd2lzZSBzdHJpbmcgcHJvcGVydGllc1xuICAgICAqIGFyZSBjb3BpZWQgd2l0aG91dCBtb2RpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlIGlmIHZhcnMgYXJlIHN1cHBsaWVkIHdpdGggb3B0aW9ucyxcbiAgICAgKiBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgdXNlVmFsdWVUZW1wbGF0ZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIGFuZCBpZiB0ZW1wbGF0ZSB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSxcbiAgICAgKiB0aGVuIHN0cmluZyBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nXG4gICAgICogbXVzdGFjaGUgYW5kIHRob3NlIHZhcmlhYmxlcy4gT3RoZXJ3aXNlIHN0cmluZyBwcm9wZXJ0aWVzXG4gICAgICogYXJlIGNvcGllZCB3aXRob3V0IG1vZGlmaWNhdGlvbi5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgdmFycyBhcmUgc3VwcGxpZWQgd2l0aCBvcHRpb25zLFxuICAgICAqIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICB1c2VOYW1lVGVtcGxhdGVzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBhbmQgaWYgdGVtcGxhdGUgdmFyaWFibGVzIGFyZSBhdmFpbGFibGUsXG4gICAgICogdGhlbiBzdHJpbmcgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBjb25zaWRlcmVkIGZvclxuICAgICAqIGNvbmRpdGlvbmFscy5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgaXMgdG8gbWF0Y2ggdXNlTmFtZVRlbXBsYXRlc1xuICAgICAqL1xuICAgIHVzZUNvbmRpdGlvbmFsTmFtZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIChkZWZhdWx0KSB0aGVuIHByb3BlcnRpZXMgd2l0aCB1bmNvbmRpdGlvbmFsIG5hbWVzXG4gICAgICogKHdoaWNoIHN0YXJ0IHdpdGggISkgYXJlIGZsYXR0ZW5lZC5cbiAgICAgKi9cbiAgICBmbGF0dGVuVW5jb25kaXRpb25hbFZhbHVlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgYW5kIGlmIGJvdGggdGVtcGxhdGUgdmFyaWFibGVzIGFuZCBhXG4gICAgICogY29udGV4dCBkZXJpdmF0aW9uIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhlbiBwcm9wZXJ0aWVzXG4gICAgICogd2hpY2ggbWF0Y2ggdGhlIG11bHRpLXZhbHVlIG5hbWUgcGF0dGVybiB3aWxsIGJlIGV4cGFuZGVkLlxuICAgICAqIERlZmF1bHQgbWF0Y2hlcyB1c2VOYW1lVGVtcGxhdGVzLlxuICAgICAqXG4gICAgICogRGVmYXVsdCBpcyB0cnVlIHVubGVzcyBleHRlbmRWYXJzIGlzIGV4cGxpY2l0bHkgc2V0IHRvXG4gICAgICogdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIHVzZU11bHRpVmFsdWVUZW1wbGF0ZU5hbWVzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhcmlhYmxlcyAobXVzdGFjaGUgdmlldykgdXNlZCB0byByZW5kZXIgdGVtcGxhdGVkIHN0cmluZyBuYW1lc1xuICAgICAqIGFuZCBwcm9wZXJ0aWVzLiAgU2VlIHRoZSBtdXN0YWNoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIG11c3RhY2hlXG4gICAgICogc3ludGF4IGFuZCB0aGUgdGVtcGxhdGUgdmlldy5cbiAgICAgKi9cbiAgICB2YXJzPzogVGVtcGxhdGVWYXJzO1xuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gZXh0ZW5kIHZhcmlhYmxlcyBmb3IgY2hpbGRyZW4gb2YgYW4gYXJyYXkgbm9kZSBkdXJpbmdcbiAgICAgKiBleHBhbnNpb24uIERlZmF1bHQgaXMgdG8gdXNlIGEgYnVpbHQtaW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIHVubGVzc1xuICAgICAqIGV4dGVuZFZhcnMgaXMgZXhwbGljaXRseSBzZXQgdG8gdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIGV4dGVuZFZhcnM/OiBUZW1wbGF0ZVZhcnNFeHRlbmRGdW5jdGlvbjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgYW5kIGlmIGEgcmVmZXJlbmNlcyBtYXAgaXMgc3VwcGxpZWQsIHRoZW5cbiAgICAgKiByZWZlcmVuY2VzIGluIHRoZSBzb3VyY2Ugb2JqZWN0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aFxuICAgICAqIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgaXMgdHJ1ZSBpZiByZWZzIGFyZSBwcmVzZW50IGluIG9wdGlvbnMsIGZhbHNlXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHVzZVJlZmVyZW5jZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBvYmplY3QgbWFwIHVzZWQgdG8gaW5zZXJ0IGFueSByZWZlcmVuY2VzIGluIHRoZVxuICAgICAqIGNvbnZlcnRlZCBKU09OLlxuICAgICAqL1xuICAgIHJlZnM/OiBKc29uUmVmZXJlbmNlTWFwO1xuXG4gICAgLyoqXG4gICAgICogSWYgb25JbnZhbGlkUHJvcGVydHlOYW1lIGlzICdlcnJvcicgKGRlZmF1bHQpIHRoZW4gYW55IHByb3BlcnR5IG5hbWVcbiAgICAgKiB0aGF0IGlzIGludmFsaWQgYWZ0ZXIgdGVtcGxhdGUgcmVuZGVyaW5nIGNhdXNlcyBhbiBlcnJvciBhbmQgc3RvcHNcbiAgICAgKiBjb252ZXJzaW9uLiAgSWYgb25JbnZhbGlkUHJvcGVydHlOYW1lIGlzICdpZ25vcmUnLCB0aGVuIG5hbWVzIHdoaWNoXG4gICAgICogYXJlIGludmFsaWQgYWZ0ZXIgdGVtcGxhdGUgcmVuZGVyaW5nIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQuXG4gICAgICovXG4gICAgb25JbnZhbGlkUHJvcGVydHlOYW1lOiAnZXJyb3InfCdpZ25vcmUnO1xuXG4gICAgLyoqXG4gICAgICogSWYgb25JbnZhbGlkUHJvcGVydHlWYWx1ZSBpcyAnZXJyb3InIChkZWZhdWx0KSB0aGVuIGFueSBpbGxlZ2FsXG4gICAgICogcHJvcGVydHkgdmFsdWUgY2F1c2VzIGFuIGVycm9yIGFuZCBzdG9wcyBjb252ZXJzaW9uLiAgSWZcbiAgICAgKiBvbkludmFsaWRQcm9wZXJ0eVZhbHVlIGlzICdpZ25vcmUnIHRoZW4gYW55IGludmFsaWQgcHJvcGVydHlcbiAgICAgKiB2YWx1ZXMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gICAgICovXG4gICAgb25JbnZhbGlkUHJvcGVydHlWYWx1ZTogJ2Vycm9yJ3wnaWdub3JlJztcblxuICAgIC8qKlxuICAgICAqIElmIG9uVW5rbm93blByb3BlcnR5VmFsdWUgaXMgZXJyb3IsIHRoZW4gYW55IHByb3BlcnR5IHdpdGhcbiAgICAgKiB2YWx1ZSB1bmRlZmluZWQgd2lsbCBjYXVzZSBhbiBlcnJvciBhbmQgc3RvcCBjb252ZXJzaW9uLiAgSWZcbiAgICAgKiBvblVuZGVmaW5lZFByb3BlcnR5VmFsdWUgaXMgJ2lnbm9yZScgKGRlZmF1bHQpIHRoZW4gYW55XG4gICAgICogcHJvcGVydHkgd2l0aCB2YWx1ZSB1bmRlZmluZWQgaXMgc2lsZW50bHkgaWdub3JlZC5cbiAgICAgKi9cbiAgICBvblVuZGVmaW5lZFByb3BlcnR5VmFsdWU6ICdlcnJvcid8J2lnbm9yZSc7XG59XG5cbi8qKlxuICogTWVyZ2VzIGFuIG9wdGlvbmFsbHkgc3VwcGxpZWQgcGFydGlhbCBzZXQgb2Ygb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0XG4gKiBjb252ZXJ0ZXIgb3B0aW9ucywgcHJvZHVjaW5nIGEgZnVsbHktcmVzb2x2ZWQgc2V0IG9mIENvbnZlcnRlck9wdGlvbnNcbiAqIGFuZCB0YWtpbmcgYWxsIGR5bmFtaWMgcnVsZXMgaW50byBhY2NvdW50IChlLmcuIHRlbXBsYXRlIHVzYWdlIGVuYWJsZWRcbiAqIGlmIHZhcmlhYmxlcyBhcmUgc3VwcGxpZWQgYW5kIGRpc2FibGVkIGlmIG5vdClcbiAqIEBwYXJhbSBwYXJ0aWFsIEFuIG9wdGlvbmFsIHBhcnRpYWwgQHNlZSBKc29uQ29udmVydGVyT3B0aW9ucyB0byBiZSBtZXJnZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGVmYXVsdEpzb25Db252ZXJ0ZXJPcHRpb25zKHBhcnRpYWw/OiBQYXJ0aWFsPEpzb25Db252ZXJ0ZXJPcHRpb25zPik6IEpzb25Db252ZXJ0ZXJPcHRpb25zIHtcbiAgICBjb25zdCBoYXZlVmFycyA9IChwYXJ0aWFsPy52YXJzICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGhhdmVSZWZzID0gKHBhcnRpYWw/LnJlZnMgIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZXh0ZW5kZXIgPSBwYXJ0aWFsPy5oYXNPd25Qcm9wZXJ0eSgnZXh0ZW5kVmFycycpID8gcGFydGlhbC5leHRlbmRWYXJzIDogZGVmYXVsdEV4dGVuZFZhcnM7XG4gICAgY29uc3QgaGF2ZUV4dGVuZGVyID0gKGV4dGVuZGVyICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IG5hbWVzRGVmYXVsdCA9IChwYXJ0aWFsPy51c2VOYW1lVGVtcGxhdGVzID8/IGhhdmVWYXJzKTtcbiAgICBjb25zdCBjb25kaXRpb25zRGVmYXVsdCA9IChwYXJ0aWFsPy51c2VDb25kaXRpb25hbE5hbWVzID8/IG5hbWVzRGVmYXVsdCk7XG5cbiAgICBjb25zdCBvcHRpb25zOiBKc29uQ29udmVydGVyT3B0aW9ucyA9IHtcbiAgICAgICAgdXNlVmFsdWVUZW1wbGF0ZXM6IHBhcnRpYWw/LnVzZVZhbHVlVGVtcGxhdGVzID8/IGhhdmVWYXJzLFxuICAgICAgICB1c2VOYW1lVGVtcGxhdGVzOiBuYW1lc0RlZmF1bHQsXG4gICAgICAgIHVzZUNvbmRpdGlvbmFsTmFtZXM6IGNvbmRpdGlvbnNEZWZhdWx0LFxuICAgICAgICBmbGF0dGVuVW5jb25kaXRpb25hbFZhbHVlczogcGFydGlhbD8uZmxhdHRlblVuY29uZGl0aW9uYWxWYWx1ZXMgPz8gY29uZGl0aW9uc0RlZmF1bHQsXG4gICAgICAgIHVzZU11bHRpVmFsdWVUZW1wbGF0ZU5hbWVzOiBwYXJ0aWFsPy51c2VNdWx0aVZhbHVlVGVtcGxhdGVOYW1lcyA/PyAoaGF2ZUV4dGVuZGVyICYmIG5hbWVzRGVmYXVsdCksXG4gICAgICAgIHVzZVJlZmVyZW5jZXM6IHBhcnRpYWw/LnVzZVJlZmVyZW5jZXMgPz8gaGF2ZVJlZnMsXG4gICAgICAgIG9uSW52YWxpZFByb3BlcnR5TmFtZTogcGFydGlhbD8ub25JbnZhbGlkUHJvcGVydHlOYW1lID8/ICdlcnJvcicsXG4gICAgICAgIG9uSW52YWxpZFByb3BlcnR5VmFsdWU6IHBhcnRpYWw/Lm9uSW52YWxpZFByb3BlcnR5VmFsdWUgPz8gJ2Vycm9yJyxcbiAgICAgICAgb25VbmRlZmluZWRQcm9wZXJ0eVZhbHVlOiBwYXJ0aWFsPy5vblVuZGVmaW5lZFByb3BlcnR5VmFsdWUgPz8gJ2lnbm9yZScsXG4gICAgICAgIGV4dGVuZFZhcnM6IGV4dGVuZGVyLFxuICAgIH07XG4gICAgaWYgKHBhcnRpYWw/LnZhcnMpIHtcbiAgICAgICAgb3B0aW9ucy52YXJzID0gcGFydGlhbC52YXJzO1xuICAgIH1cbiAgICBpZiAocGFydGlhbD8ucmVmcykge1xuICAgICAgICBvcHRpb25zLnJlZnMgPSBwYXJ0aWFsLnJlZnM7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQHNlZSBKc29uQ29udGV4dCB1c2luZyB2YWx1ZXMgc3VwcGxpZWQgaW4gYW4gb3B0aW9uYWwgcGFydGlhbFxuICogQHNlZSBKc29uQ29udmVydGVyT3B0aW9uc1xuICogQHBhcmFtIHBhcnRpYWwgT3B0aW9uYWwgcGFydGlhbCBAc2VlIEpzb25Db252ZXJ0ZXJPcHRpb25zIHVzZWQgdG8gcG9wdWxhdGUgdGhlIGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHRGcm9tQ29udmVydGVyT3B0aW9ucyhwYXJ0aWFsPzogUGFydGlhbDxKc29uQ29udmVydGVyT3B0aW9ucz4pOiBKc29uQ29udGV4dHx1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbnRleHQ6IEpzb25Db250ZXh0ID0ge307XG4gICAgaWYgKHBhcnRpYWw/LnZhcnMpIHtcbiAgICAgICAgY29udGV4dC52YXJzID0gcGFydGlhbC52YXJzO1xuICAgIH1cbiAgICBpZiAocGFydGlhbD8ucmVmcykge1xuICAgICAgICBjb250ZXh0LnJlZnMgPSBwYXJ0aWFsLnJlZnM7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFsPy5oYXNPd25Qcm9wZXJ0eSgnZXh0ZW5kVmFycycpKSB7XG4gICAgICAgIGNvbnRleHQuZXh0ZW5kVmFycyA9IHBhcnRpYWwuZXh0ZW5kVmFycztcbiAgICB9XG4gICAgcmV0dXJuIChjb250ZXh0LnZhcnMgfHwgY29udGV4dC5yZWZzIHx8IGNvbnRleHQuZXh0ZW5kVmFycykgPyBjb250ZXh0IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQHNlZSBKc29uRWRpdG9yIGZyb20gYW4gb3B0aW9uYWxseSBzdXBwbGllZCBwYXJ0aWFsIEBzZWUgSnNvbkNvbnZlcnRlck9wdGlvbnMuXG4gKiBFeHBhbmRzIHN1cHBsaWVkIG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlcyBhbmQgY29uc3RydWN0cyBhbiBlZGl0b3Igd2l0aFxuICogbWF0Y2hpbmcgY29uZmlndXJhdGlvbiBhbmQgZGVmaW5lZCBydWxlcy5cbiAqIEBwYXJhbSBwYXJ0aWFsIE9wdGlvbmFsIHBhcnRpYWwgQHNlZSBKc29uQ29udmVydGVyT3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0ZXJPcHRpb25zVG9FZGl0b3IocGFydGlhbD86IFBhcnRpYWw8SnNvbkNvbnZlcnRlck9wdGlvbnM+KTogUmVzdWx0PEpzb25FZGl0b3I+IHtcbiAgICBjb25zdCBjb252ZXJ0ZXJPcHRpb25zID0gbWVyZ2VEZWZhdWx0SnNvbkNvbnZlcnRlck9wdGlvbnMocGFydGlhbCk7XG4gICAgY29uc3QgY29udGV4dCA9IGNvbnRleHRGcm9tQ29udmVydGVyT3B0aW9ucyhwYXJ0aWFsKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0ge1xuICAgICAgICBvbkludmFsaWRQcm9wZXJ0eU5hbWU6IGNvbnZlcnRlck9wdGlvbnMub25JbnZhbGlkUHJvcGVydHlOYW1lLFxuICAgICAgICBvbkludmFsaWRQcm9wZXJ0eVZhbHVlOiBjb252ZXJ0ZXJPcHRpb25zLm9uSW52YWxpZFByb3BlcnR5VmFsdWUsXG4gICAgICAgIG9uVW5kZWZpbmVkUHJvcGVydHlWYWx1ZTogY29udmVydGVyT3B0aW9ucy5vblVuZGVmaW5lZFByb3BlcnR5VmFsdWUsXG4gICAgfTtcbiAgICBjb25zdCBlZGl0b3JPcHRpb25zOiBKc29uRWRpdG9yT3B0aW9ucyA9IHsgY29udGV4dCwgdmFsaWRhdGlvbiB9O1xuXG4gICAgY29uc3QgcnVsZXM6IEpzb25FZGl0b3JSdWxlW10gPSBbXTtcbiAgICBpZiAoY29udmVydGVyT3B0aW9ucy51c2VOYW1lVGVtcGxhdGVzIHx8IGNvbnZlcnRlck9wdGlvbnMudXNlVmFsdWVUZW1wbGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZWRpdG9yT3B0aW9ucyxcbiAgICAgICAgICAgIHVzZU5hbWVUZW1wbGF0ZXM6IGNvbnZlcnRlck9wdGlvbnMudXNlTmFtZVRlbXBsYXRlcyxcbiAgICAgICAgICAgIHVzZVZhbHVlVGVtcGxhdGVzOiBjb252ZXJ0ZXJPcHRpb25zLnVzZVZhbHVlVGVtcGxhdGVzLFxuICAgICAgICB9O1xuICAgICAgICBydWxlcy5wdXNoKG5ldyBUZW1wbGF0ZWRKc29uRWRpdG9yUnVsZSh0ZW1wbGF0ZU9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKGNvbnZlcnRlck9wdGlvbnMudXNlQ29uZGl0aW9uYWxOYW1lcyB8fCBjb252ZXJ0ZXJPcHRpb25zLmZsYXR0ZW5VbmNvbmRpdGlvbmFsVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLmVkaXRvck9wdGlvbnMsXG4gICAgICAgICAgICBmbGF0dGVuVW5jb25kaXRpb25hbFZhbHVlczogY29udmVydGVyT3B0aW9ucy5mbGF0dGVuVW5jb25kaXRpb25hbFZhbHVlcyxcbiAgICAgICAgfTtcbiAgICAgICAgcnVsZXMucHVzaChuZXcgQ29uZGl0aW9uYWxKc29uRWRpdG9yUnVsZShjb25kaXRpb25hbE9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKGNvbnZlcnRlck9wdGlvbnMudXNlTXVsdGlWYWx1ZVRlbXBsYXRlTmFtZXMpIHtcbiAgICAgICAgcnVsZXMucHVzaChuZXcgTXVsdGlWYWx1ZUpzb25FZGl0b3JSdWxlKGVkaXRvck9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKGNvbnZlcnRlck9wdGlvbnMudXNlUmVmZXJlbmNlcykge1xuICAgICAgICBydWxlcy5wdXNoKG5ldyBSZWZlcmVuY2VKc29uRWRpdG9yUnVsZShlZGl0b3JPcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpzb25FZGl0b3IuY3JlYXRlKGVkaXRvck9wdGlvbnMsIHJ1bGVzKTtcbn1cblxuLyoqXG4gKiBBIHRoaW4gd3JhcHBlciB0byBhbGxvdyBhbiBhcmJpdHJhcnkgQHNlZSBKc29uRWRpdG9yIHRvIGJlIHVzZWQgdmlhIHRoZVxuICogdHMtdXRpbHMgQHNlZSBDb252ZXJ0ZXIgcGF0dGVybi5cbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25FZGl0b3JDb252ZXJ0ZXIgZXh0ZW5kcyBCYXNlQ29udmVydGVyPEpzb25WYWx1ZSwgSnNvbkNvbnRleHQ+IHtcbiAgICBwdWJsaWMgZWRpdG9yOiBKc29uRWRpdG9yO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBAc2VlIEpzb25FZGl0b3JDb252ZXJ0ZXIgd2hpY2ggdXNlcyB0aGUgc3VwcGxpZWQgZWRpdG9yXG4gICAgICogQHBhcmFtIGVkaXRvclxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihlZGl0b3I6IEpzb25FZGl0b3IpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICAoZnJvbSwgX3NlbGYsIGNvbnRleHQpID0+IHRoaXMuX2NvbnZlcnQoZnJvbSwgY29udGV4dCksXG4gICAgICAgICAgICBlZGl0b3Iub3B0aW9ucy5jb250ZXh0LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEBzZWUgSnNvbkVkaXRvckNvbnZlcnRlciB3aGljaCB1c2VzIHRoZSBzdXBwbGllZCBlZGl0b3JcbiAgICAgKiBAcGFyYW0gZWRpdG9yXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVXaXRoRWRpdG9yKGVkaXRvcjogSnNvbkVkaXRvcik6IFJlc3VsdDxKc29uRWRpdG9yQ29udmVydGVyPiB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlUmVzdWx0KCgpID0+IG5ldyBKc29uRWRpdG9yQ29udmVydGVyKGVkaXRvcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBkZXJpdmVkIGNvbnZlcnRlciB3aGljaCBmYWlscyBpZiB0aGUgcmVzdWx0aW5nIGNvbnZlcnRlZFxuICAgICAqIEBzZWUgSnNvblZhbHVlIGlzIG5vdCBhIEBzZWUgSnNvbk9iamVjdFxuICAgICAqL1xuICAgIHB1YmxpYyBvYmplY3QoKTogQ29udmVydGVyPEpzb25PYmplY3QsIEpzb25Db250ZXh0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcCgoanYpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNKc29uT2JqZWN0KGp2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGBDYW5ub3QgY29udmVydCBcIiR7SlNPTi5zdHJpbmdpZnkoanYpfVwiIHRvIEpTT04gb2JqZWN0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoanYpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgZGVyaXZlZCBjb252ZXJ0ZXIgd2hpY2ggZmFpbHMgaWYgdGhlIHJlc3VsdGluZyBjb252ZXJ0ZWRcbiAgICAgKiBAc2VlIEpzb25WYWx1ZSBpcyBub3QgYSBAc2VlIEpzb25BcnJheVxuICAgICAqL1xuICAgIHB1YmxpYyBhcnJheSgpOiBDb252ZXJ0ZXI8SnNvbkFycmF5LCBKc29uQ29udGV4dD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAoKGp2KSA9PiB7XG4gICAgICAgICAgICBpZiAoKCFBcnJheS5pc0FycmF5KGp2KSkgfHwgKHR5cGVvZiBqdiAhPT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYENhbm5vdCBjb252ZXJ0IFwiJHtKU09OLnN0cmluZ2lmeShqdil9XCIgdG8gSlNPTiBhcnJheS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKGp2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jb252ZXJ0KGZyb206IHVua25vd24sIGNvbnRleHQ/OiBKc29uQ29udGV4dCk6IFJlc3VsdDxKc29uVmFsdWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmNsb25lKGZyb20gYXMgSnNvblZhbHVlLCBjb250ZXh0KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSB0cy11dGlscyBAc2VlIENvbnZlcnRlciBmcm9tIHVua25vd24gdG8gdHlwZS1zYWZlIEpTT04sIG9wdGlvbmFsbHkgcmVuZGVyaW5nXG4gKiBhbnkgc3RyaW5nIHByb3BlcnR5IG5hbWVzIG9yIHZhbHVlcyB1c2luZyBtdXN0YWNoZSB3aXRoIGEgc3VwcGxpZWQgdmlldy5cbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25Db252ZXJ0ZXIgZXh0ZW5kcyBKc29uRWRpdG9yQ29udmVydGVyIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEpzb25Db252ZXJ0ZXIgd2l0aCBzdXBwbGllZCBvciBkZWZhdWx0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgY29udmVydGVyXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBQYXJ0aWFsPEpzb25Db252ZXJ0ZXJPcHRpb25zPikge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBjb252ZXJ0ZXJPcHRpb25zVG9FZGl0b3Iob3B0aW9ucykub3JUaHJvdygpO1xuICAgICAgICBzdXBlcihlZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29udmVydGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBjb252ZXJ0ZXJcbiAgICAgKiBAcmV0dXJucyBTdWNjZXNzIHdpdGggYSBuZXcgSnNvbkNvbnZlcnRlciBvbiBzdWNjZXNzLCBvciBGYWlsdXJlIHdpdGggYW5cbiAgICAgKiBpbmZvcm1hdGl2ZSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShvcHRpb25zPzogUGFydGlhbDxKc29uQ29udmVydGVyT3B0aW9ucz4pOiBSZXN1bHQ8SnNvbkNvbnZlcnRlcj4ge1xuICAgICAgICByZXR1cm4gY2FwdHVyZVJlc3VsdCgoKSA9PiBuZXcgSnNvbkNvbnZlcnRlcihvcHRpb25zKSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZWRKc29uQ29udmVydGVyT3B0aW9ucyA9IE9taXQ8SnNvbkNvbnZlcnRlck9wdGlvbnMsICd1c2VOYW1lVGVtcGxhdGVzJ3wndXNlVmFsdWVUZW1wbGF0ZXMnfCd1c2VNdWx0aVZhbHVlVGVtcGxhdGVOYW1lcyc+O1xuXG4vKipcbiAqIEEgdHMtdXRpbHMgQHNlZSBDb252ZXJ0ZXIgZnJvbSB1bmtub3duIHRvIHR5cGUtc2FmZSBKU09OIHdpdGggbXVzdGFjaGVcbiAqIHRlbXBsYXRlIHJlbmRlcmluZyBhbmQgbXVsdGktdmFsdWUgcHJvcGVydHkgbmFtZSBydWxlcyBlbmFibGVkIHJlZ2FyZGxlc3NcbiAqIG9mIGluaXRpYWwgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlZEpzb25Db252ZXJ0ZXIgZXh0ZW5kcyBKc29uRWRpdG9yQ29udmVydGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRlbXBsYXRlT3B0aW9uczogUGFydGlhbDxKc29uQ29udmVydGVyT3B0aW9ucz4gPSB7XG4gICAgICAgIHVzZU5hbWVUZW1wbGF0ZXM6IHRydWUsXG4gICAgICAgIHVzZVZhbHVlVGVtcGxhdGVzOiB0cnVlLFxuICAgICAgICB1c2VNdWx0aVZhbHVlVGVtcGxhdGVOYW1lczogdHJ1ZSxcbiAgICAgICAgdXNlQ29uZGl0aW9uYWxOYW1lczogZmFsc2UsXG4gICAgICAgIGZsYXR0ZW5VbmNvbmRpdGlvbmFsVmFsdWVzOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBAc2VlIFRlbXBsYXRlZEpzb25Db252ZXJ0ZXIgd2l0aCBzdXBwbGllZCBvclxuICAgICAqIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3IgY29udGV4dCBmb3IgdGhlIGNvbnZlcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUGFydGlhbDxUZW1wbGF0ZWRKc29uQ29udmVydGVyT3B0aW9ucz4pIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgLi4uVGVtcGxhdGVkSnNvbkNvbnZlcnRlci50ZW1wbGF0ZU9wdGlvbnMgfTtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gY29udmVydGVyT3B0aW9uc1RvRWRpdG9yKG9wdGlvbnMpLm9yVGhyb3coKTtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEBzZWUgVGVtcGxhdGVkSnNvbkNvbnZlcnRlciB3aXRoIHN1cHBsaWVkIG9yXG4gICAgICogZGVmYXVsdCBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvciBjb250ZXh0IGZvciB0aGUgY29udmVydGVyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUob3B0aW9ucz86IFBhcnRpYWw8VGVtcGxhdGVkSnNvbkNvbnZlcnRlck9wdGlvbnM+KTogUmVzdWx0PEpzb25Db252ZXJ0ZXI+IHtcbiAgICAgICAgcmV0dXJuIGNhcHR1cmVSZXN1bHQoKCkgPT4gbmV3IFRlbXBsYXRlZEpzb25Db252ZXJ0ZXIob3B0aW9ucykpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ29uZGl0aW9uYWxKc29uQ29udmVydGVyT3B0aW9ucyA9IE9taXQ8VGVtcGxhdGVkSnNvbkNvbnZlcnRlck9wdGlvbnMsICd1c2VDb25kaXRpb25hbE5hbWVzJz47XG5cbi8qKlxuICogQSB0cy11dGlscyBAc2VlIENvbnZlcnRlciBmcm9tIHVua25vd24gdG8gdHlwZS1zYWZlIEpTT04gd2l0aCBtdXN0YWNoZVxuICogdGVtcGxhdGUgcmVuZGVyaW5nLCBtdWx0aS12YWx1ZSBwcm9wZXJ0eSBuYW1lIGFuZCBjb25kaXRpb25hbCBwcm9wZXJ0eVxuICogbmFtZSBydWxlcyBlbmFibGVkIHJlZ2FyZGxlc3Mgb2YgaW5pdGlhbCBjb250ZXh0LlxuICovXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxKc29uQ29udmVydGVyIGV4dGVuZHMgSnNvbkVkaXRvckNvbnZlcnRlciB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBjb25kaXRpb25hbE9wdGlvbnM6IFBhcnRpYWw8SnNvbkNvbnZlcnRlck9wdGlvbnM+ID0ge1xuICAgICAgICAuLi5UZW1wbGF0ZWRKc29uQ29udmVydGVyLnRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgdXNlQ29uZGl0aW9uYWxOYW1lczogdHJ1ZSxcbiAgICAgICAgZmxhdHRlblVuY29uZGl0aW9uYWxWYWx1ZXM6IHRydWUsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQHNlZSBDb25kaXRpb25hbEpzb25Db252ZXJ0ZXIgd2l0aCBzdXBwbGllZCBvclxuICAgICAqIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3IgY29udGV4dCBmb3IgdGhlIGNvbnZlcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUGFydGlhbDxDb25kaXRpb25hbEpzb25Db252ZXJ0ZXJPcHRpb25zPikge1xuICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zLCAuLi5Db25kaXRpb25hbEpzb25Db252ZXJ0ZXIuY29uZGl0aW9uYWxPcHRpb25zIH07XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnZlcnRlck9wdGlvbnNUb0VkaXRvcihvcHRpb25zKS5vclRocm93KCk7XG4gICAgICAgIHN1cGVyKGVkaXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBAc2VlIENvbmRpdGlvbmFsSnNvbkNvbnZlcnRlciB3aXRoIHN1cHBsaWVkIG9yXG4gICAgICogZGVmYXVsdCBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvciBjb250ZXh0IGZvciB0aGUgY29udmVydGVyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUob3B0aW9ucz86IFBhcnRpYWw8Q29uZGl0aW9uYWxKc29uQ29udmVydGVyT3B0aW9ucz4pOiBSZXN1bHQ8SnNvbkNvbnZlcnRlcj4ge1xuICAgICAgICByZXR1cm4gY2FwdHVyZVJlc3VsdCgoKSA9PiBuZXcgQ29uZGl0aW9uYWxKc29uQ29udmVydGVyKG9wdGlvbnMpKTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFJpY2hKc29uQ29udmVydGVyT3B0aW9ucyA9IE9taXQ8Q29uZGl0aW9uYWxKc29uQ29udmVydGVyT3B0aW9ucywgJ3VzZVJlZmVyZW5jZXMnPjtcblxuLyoqXG4gKiBBIHRzLXV0aWxzIEBzZWUgQ29udmVydGVyIGZyb20gdW5rbm93biB0byB0eXBlLXNhZmUgSlNPTiB3aXRoIG11c3RhY2hlXG4gKiB0ZW1wbGF0ZSByZW5kZXJpbmcsIG11bHRpLXZhbHVlIHByb3BlcnR5IG5hbWUsIGNvbmRpdGlvbmFsIHByb3BlcnR5XG4gKiBuYW1lLCBhbmQgZXh0ZXJuYWwgcmVmZXJlbmNlIHJ1bGVzIGVuYWJsZWQgcmVnYXJkbGVzcyBvZiBpbml0aWFsIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSaWNoSnNvbkNvbnZlcnRlciBleHRlbmRzIEpzb25FZGl0b3JDb252ZXJ0ZXIge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgcmljaE9wdGlvbnM6IFBhcnRpYWw8SnNvbkNvbnZlcnRlck9wdGlvbnM+ID0ge1xuICAgICAgICAuLi5Db25kaXRpb25hbEpzb25Db252ZXJ0ZXIuY29uZGl0aW9uYWxPcHRpb25zLFxuICAgICAgICB1c2VSZWZlcmVuY2VzOiB0cnVlLFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEBzZWUgUmljaEpzb25Db252ZXJ0ZXIgd2l0aCBzdXBwbGllZCBvclxuICAgICAqIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3IgY29udGV4dCBmb3IgdGhlIGNvbnZlcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUGFydGlhbDxSaWNoSnNvbkNvbnZlcnRlck9wdGlvbnM+KSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLlJpY2hKc29uQ29udmVydGVyLnJpY2hPcHRpb25zIH07XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnZlcnRlck9wdGlvbnNUb0VkaXRvcihvcHRpb25zKS5vclRocm93KCk7XG4gICAgICAgIHN1cGVyKGVkaXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBAc2VlIFJpY2hKc29uQ29udmVydGVyIHdpdGggc3VwcGxpZWQgb3JcbiAgICAgKiBkZWZhdWx0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9yIGNvbnRleHQgZm9yIHRoZSBjb252ZXJ0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShvcHRpb25zPzogUGFydGlhbDxSaWNoSnNvbkNvbnZlcnRlck9wdGlvbnM+KTogUmVzdWx0PEpzb25Db252ZXJ0ZXI+IHtcbiAgICAgICAgcmV0dXJuIGNhcHR1cmVSZXN1bHQoKCkgPT4gbmV3IFJpY2hKc29uQ29udmVydGVyKG9wdGlvbnMpKTtcbiAgICB9XG59XG4iXX0=
@@ -1,36 +0,0 @@
1
- import { DetailedResult } from '@fgv/ts-utils';
2
- import { JsonContext } from '../jsonContext';
3
- import { JsonValue } from '../common';
4
- export type JsonEditFailureReason = 'ignore' | 'inapplicable' | 'edited' | 'error';
5
- export type JsonPropertyEditFailureReason = JsonEditFailureReason | 'deferred';
6
- export type JsonEditorValidationRules = 'invalidPropertyName' | 'invalidPropertyValue' | 'undefinedPropertyValue';
7
- export interface JsonEditorValidationOptions {
8
- /**
9
- * If onInvalidPropertyName is 'error' (default) then any property name
10
- * that is invalid after template rendering causes an error and stops
11
- * conversion. If onInvalidPropertyName is 'ignore', then names which
12
- * are invalid after template rendering are passed through unchanged.
13
- */
14
- onInvalidPropertyName: 'error' | 'ignore';
15
- /**
16
- * If onInvalidPropertyValue is 'error' (default) then any illegal
17
- * property value other than undefined causes an error and stops
18
- * conversion. If onInvalidPropertyValue is 'ignore' then any
19
- * invalid property values are silently ignored.
20
- */
21
- onInvalidPropertyValue: 'error' | 'ignore';
22
- /**
23
- * If onUnknownPropertyValue is error, then any property with
24
- * value undefined will cause an error and stop conversion. If
25
- * onUndefinedPropertyValue is 'ignore' (default) then any
26
- * property with value undefined is silently ignored.
27
- */
28
- onUndefinedPropertyValue: 'error' | 'ignore';
29
- }
30
- export interface JsonEditorOptions {
31
- context?: JsonContext;
32
- validation: JsonEditorValidationOptions;
33
- }
34
- export interface IJsonCloneEditor {
35
- clone(src: JsonValue, context?: JsonContext): DetailedResult<JsonValue, JsonEditFailureReason>;
36
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25FZGl0b3IvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IERldGFpbGVkUmVzdWx0IH0gZnJvbSAnQGZndi90cy11dGlscyc7XG5pbXBvcnQgeyBKc29uQ29udGV4dCB9IGZyb20gJy4uL2pzb25Db250ZXh0JztcbmltcG9ydCB7IEpzb25WYWx1ZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbmV4cG9ydCB0eXBlIEpzb25FZGl0RmFpbHVyZVJlYXNvbiA9ICdpZ25vcmUnfCdpbmFwcGxpY2FibGUnfCdlZGl0ZWQnfCdlcnJvcic7XG5leHBvcnQgdHlwZSBKc29uUHJvcGVydHlFZGl0RmFpbHVyZVJlYXNvbiA9IEpzb25FZGl0RmFpbHVyZVJlYXNvbnwnZGVmZXJyZWQnO1xuXG5leHBvcnQgdHlwZSBKc29uRWRpdG9yVmFsaWRhdGlvblJ1bGVzID0gJ2ludmFsaWRQcm9wZXJ0eU5hbWUnfCdpbnZhbGlkUHJvcGVydHlWYWx1ZSd8J3VuZGVmaW5lZFByb3BlcnR5VmFsdWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEpzb25FZGl0b3JWYWxpZGF0aW9uT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogSWYgb25JbnZhbGlkUHJvcGVydHlOYW1lIGlzICdlcnJvcicgKGRlZmF1bHQpIHRoZW4gYW55IHByb3BlcnR5IG5hbWVcbiAgICAgKiB0aGF0IGlzIGludmFsaWQgYWZ0ZXIgdGVtcGxhdGUgcmVuZGVyaW5nIGNhdXNlcyBhbiBlcnJvciBhbmQgc3RvcHNcbiAgICAgKiBjb252ZXJzaW9uLiAgSWYgb25JbnZhbGlkUHJvcGVydHlOYW1lIGlzICdpZ25vcmUnLCB0aGVuIG5hbWVzIHdoaWNoXG4gICAgICogYXJlIGludmFsaWQgYWZ0ZXIgdGVtcGxhdGUgcmVuZGVyaW5nIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQuXG4gICAgICovXG4gICAgb25JbnZhbGlkUHJvcGVydHlOYW1lOiAnZXJyb3InfCdpZ25vcmUnO1xuXG4gICAgLyoqXG4gICAgICogSWYgb25JbnZhbGlkUHJvcGVydHlWYWx1ZSBpcyAnZXJyb3InIChkZWZhdWx0KSB0aGVuIGFueSBpbGxlZ2FsXG4gICAgICogcHJvcGVydHkgdmFsdWUgb3RoZXIgdGhhbiB1bmRlZmluZWQgY2F1c2VzIGFuIGVycm9yIGFuZCBzdG9wc1xuICAgICAqIGNvbnZlcnNpb24uICBJZiBvbkludmFsaWRQcm9wZXJ0eVZhbHVlIGlzICdpZ25vcmUnIHRoZW4gYW55XG4gICAgICogaW52YWxpZCBwcm9wZXJ0eSB2YWx1ZXMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gICAgICovXG4gICAgb25JbnZhbGlkUHJvcGVydHlWYWx1ZTogJ2Vycm9yJ3wnaWdub3JlJztcblxuICAgIC8qKlxuICAgICAqIElmIG9uVW5rbm93blByb3BlcnR5VmFsdWUgaXMgZXJyb3IsIHRoZW4gYW55IHByb3BlcnR5IHdpdGhcbiAgICAgKiB2YWx1ZSB1bmRlZmluZWQgd2lsbCBjYXVzZSBhbiBlcnJvciBhbmQgc3RvcCBjb252ZXJzaW9uLiAgSWZcbiAgICAgKiBvblVuZGVmaW5lZFByb3BlcnR5VmFsdWUgaXMgJ2lnbm9yZScgKGRlZmF1bHQpIHRoZW4gYW55XG4gICAgICogcHJvcGVydHkgd2l0aCB2YWx1ZSB1bmRlZmluZWQgaXMgc2lsZW50bHkgaWdub3JlZC5cbiAgICAgKi9cbiAgICBvblVuZGVmaW5lZFByb3BlcnR5VmFsdWU6ICdlcnJvcid8J2lnbm9yZSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkVkaXRvck9wdGlvbnMge1xuICAgIGNvbnRleHQ/OiBKc29uQ29udGV4dDtcbiAgICB2YWxpZGF0aW9uOiBKc29uRWRpdG9yVmFsaWRhdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUpzb25DbG9uZUVkaXRvciB7XG4gICAgY2xvbmUoc3JjOiBKc29uVmFsdWUsIGNvbnRleHQ/OiBKc29uQ29udGV4dCk6IERldGFpbGVkUmVzdWx0PEpzb25WYWx1ZSwgSnNvbkVkaXRGYWlsdXJlUmVhc29uPjtcbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- export * from './common';
2
- export * from './jsonEditorRule';
3
- export * from './jsonEditor';
4
- export * from './jsonEditorState';
5
- export * as Rules from './rules';
@@ -1,74 +0,0 @@
1
- import { DetailedResult, Result } from '@fgv/ts-utils';
2
- import { IJsonCloneEditor, JsonEditFailureReason, JsonEditorOptions, JsonPropertyEditFailureReason } from './common';
3
- import { JsonArray, JsonObject, JsonValue } from '../common';
4
- import { JsonContext } from '../jsonContext';
5
- import { JsonEditorRule } from './jsonEditorRule';
6
- import { JsonEditorState } from './jsonEditorState';
7
- /**
8
- * The JsonEditor can be used to edit JSON objects in place or to clone any JSON value,
9
- * applying a default context and optional set of editor rules that were supplied at
10
- * initialization.
11
- */
12
- export declare class JsonEditor implements IJsonCloneEditor {
13
- protected static _default?: JsonEditor;
14
- /**
15
- * Full set of @see JsonEditorOptions in effect for this rule.
16
- */
17
- options: JsonEditorOptions;
18
- protected _rules: JsonEditorRule[];
19
- protected constructor(options?: Partial<JsonEditorOptions>, rules?: JsonEditorRule[]);
20
- /**
21
- * Default singleton @see JsonEditor for simple use. Applies all rules
22
- * but with no default context.
23
- */
24
- static get default(): JsonEditor;
25
- /**
26
- * Constructs a new @see JsonEditor
27
- * @param options Optional configuration an context for this editor
28
- * @param rules Optional set of rules used by this editor
29
- */
30
- static create(options?: Partial<JsonEditorOptions>, rules?: JsonEditorRule[]): Result<JsonEditor>;
31
- /**
32
- * Gets the default set of rules to be applied for a given set of options.
33
- * By default, all available rules (templates, conditionals, multi-value and references)
34
- * are applied.
35
- * @param options The options used to initialize all rules
36
- */
37
- static getDefaultRules(options?: JsonEditorOptions): Result<JsonEditorRule[]>;
38
- protected static _getDefaultOptions(options?: Partial<JsonEditorOptions>): Result<JsonEditorOptions>;
39
- /**
40
- * Merges a supplied source object into a supplied target, updating the target object.
41
- * @param target The target object to be updated
42
- * @param src The source object to be merged
43
- * @param runtimeContext An optional @see JsonContext supplying variables and references
44
- */
45
- mergeObjectInPlace(target: JsonObject, src: JsonObject, runtimeContext?: JsonContext): Result<JsonObject>;
46
- /**
47
- * Merges multiple supplied source objects into a supplied target, updating the target
48
- * object and using the default context supplied at creation time.
49
- * @param target The target object to be updated
50
- * @param srcObjects Objects to be merged into the target object, in the order supplied.
51
- */
52
- mergeObjectsInPlace(target: JsonObject, srcObjects: JsonObject[]): Result<JsonObject>;
53
- /**
54
- * Merges multiple supplied source objects into a supplied target, updating the target
55
- * object and using an optional context supplied in the call.
56
- * @param context An optional @see JsonContext supplying variables and references
57
- * @param target The target object to be updated
58
- * @param srcObjects Objects to be merged into the target object, in the order supplied.
59
- */
60
- mergeObjectsInPlaceWithContext(context: JsonContext | undefined, base: JsonObject, srcObjects: JsonObject[]): Result<JsonObject>;
61
- /**
62
- * Deep clones a supplied JSON value, applying all editor rules and a default
63
- * or optionally supplied context
64
- * @param src The @see JsonValue to be cloned
65
- * @param context An optional @see JsonContext supplying variables and references
66
- */
67
- clone(src: JsonValue, context?: JsonContext): DetailedResult<JsonValue, JsonEditFailureReason>;
68
- protected _mergeObjectInPlace(target: JsonObject, src: JsonObject, state: JsonEditorState): Result<JsonObject>;
69
- protected _cloneArray(src: JsonArray, context?: JsonContext): DetailedResult<JsonArray, JsonEditFailureReason>;
70
- protected _mergeClonedProperty(target: JsonObject, key: string, newValue: JsonValue, state: JsonEditorState): DetailedResult<JsonValue, JsonEditFailureReason>;
71
- protected _editProperty(key: string, value: JsonValue, state: JsonEditorState): DetailedResult<JsonObject, JsonPropertyEditFailureReason>;
72
- protected _editValue(value: JsonValue, state: JsonEditorState): DetailedResult<JsonValue, JsonEditFailureReason>;
73
- protected _finalizeAndMerge(target: JsonObject, state: JsonEditorState): DetailedResult<JsonObject, JsonEditFailureReason>;
74
- }