@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.
- package/dist/ts-json.d.ts +1826 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +42 -0
- package/lib/index.js.map +1 -0
- package/lib/packlets/context/compositeJsonMap.d.ts +60 -0
- package/lib/packlets/context/compositeJsonMap.d.ts.map +1 -0
- package/lib/packlets/context/compositeJsonMap.js +105 -0
- package/lib/packlets/context/compositeJsonMap.js.map +1 -0
- package/lib/packlets/context/contextHelpers.d.ts +116 -0
- package/lib/packlets/context/contextHelpers.d.ts.map +1 -0
- package/lib/packlets/context/contextHelpers.js +191 -0
- package/lib/packlets/context/contextHelpers.js.map +1 -0
- package/lib/packlets/context/index.d.ts +4 -0
- package/lib/packlets/context/index.d.ts.map +1 -0
- package/lib/packlets/context/index.js +31 -0
- package/lib/packlets/context/index.js.map +1 -0
- package/lib/packlets/context/jsonContext.d.ts +84 -0
- package/lib/packlets/context/jsonContext.d.ts.map +1 -0
- package/lib/packlets/context/jsonContext.js +41 -0
- package/lib/packlets/context/jsonContext.js.map +1 -0
- package/lib/packlets/converters/converters.d.ts +54 -0
- package/lib/packlets/converters/converters.d.ts.map +1 -0
- package/lib/packlets/converters/converters.js +105 -0
- package/lib/packlets/converters/converters.js.map +1 -0
- package/lib/packlets/converters/file.d.ts +83 -0
- package/lib/packlets/converters/file.d.ts.map +1 -0
- package/lib/packlets/converters/file.js +162 -0
- package/lib/packlets/converters/file.js.map +1 -0
- package/lib/packlets/converters/index.d.ts +5 -0
- package/lib/packlets/converters/index.d.ts.map +1 -0
- package/{jsonEditor → lib/packlets/converters}/index.js +10 -10
- package/lib/packlets/converters/index.js.map +1 -0
- package/lib/packlets/converters/jsonConverter.d.ts +276 -0
- package/lib/packlets/converters/jsonConverter.d.ts.map +1 -0
- package/lib/packlets/converters/jsonConverter.js +310 -0
- package/lib/packlets/converters/jsonConverter.js.map +1 -0
- package/lib/packlets/editor/common.d.ts +67 -0
- package/lib/packlets/editor/common.d.ts.map +1 -0
- package/lib/packlets/editor/common.js +3 -0
- package/lib/packlets/editor/common.js.map +1 -0
- package/lib/packlets/editor/index.d.ts +8 -0
- package/lib/packlets/editor/index.d.ts.map +1 -0
- package/lib/packlets/editor/index.js +58 -0
- package/lib/packlets/editor/index.js.map +1 -0
- package/lib/packlets/editor/jsonEditor.d.ts +155 -0
- package/lib/packlets/editor/jsonEditor.d.ts.map +1 -0
- package/lib/packlets/editor/jsonEditor.js +333 -0
- package/lib/packlets/editor/jsonEditor.js.map +1 -0
- package/lib/packlets/editor/jsonEditorRule.d.ts +64 -0
- package/lib/packlets/editor/jsonEditorRule.d.ts.map +1 -0
- package/lib/packlets/editor/jsonEditorRule.js +54 -0
- package/lib/packlets/editor/jsonEditorRule.js.map +1 -0
- package/lib/packlets/editor/jsonEditorState.d.ts +125 -0
- package/lib/packlets/editor/jsonEditorState.d.ts.map +1 -0
- package/lib/packlets/editor/jsonEditorState.js +177 -0
- package/lib/packlets/editor/jsonEditorState.js.map +1 -0
- package/lib/packlets/editor/jsonReferenceMap.d.ts +303 -0
- package/lib/packlets/editor/jsonReferenceMap.d.ts.map +1 -0
- package/lib/packlets/editor/jsonReferenceMap.js +324 -0
- package/lib/packlets/editor/jsonReferenceMap.js.map +1 -0
- package/lib/packlets/editor/rules/conditional.d.ts +107 -0
- package/lib/packlets/editor/rules/conditional.d.ts.map +1 -0
- package/lib/packlets/editor/rules/conditional.js +167 -0
- package/lib/packlets/editor/rules/conditional.js.map +1 -0
- package/{jsonEditor → lib/packlets/editor}/rules/index.d.ts +1 -0
- package/lib/packlets/editor/rules/index.d.ts.map +1 -0
- package/lib/packlets/editor/rules/index.js +42 -0
- package/lib/packlets/editor/rules/index.js.map +1 -0
- package/lib/packlets/editor/rules/multivalue.d.ts +94 -0
- package/lib/packlets/editor/rules/multivalue.d.ts.map +1 -0
- package/lib/packlets/editor/rules/multivalue.js +141 -0
- package/lib/packlets/editor/rules/multivalue.js.map +1 -0
- package/lib/packlets/editor/rules/references.d.ts +69 -0
- package/lib/packlets/editor/rules/references.d.ts.map +1 -0
- package/lib/packlets/editor/rules/references.js +160 -0
- package/lib/packlets/editor/rules/references.js.map +1 -0
- package/lib/packlets/editor/rules/templates.d.ts +74 -0
- package/lib/packlets/editor/rules/templates.d.ts.map +1 -0
- package/lib/packlets/editor/rules/templates.js +127 -0
- package/lib/packlets/editor/rules/templates.js.map +1 -0
- package/lib/packlets/json/common.d.ts +85 -0
- package/lib/packlets/json/common.d.ts.map +1 -0
- package/lib/packlets/json/common.js +123 -0
- package/lib/packlets/json/common.js.map +1 -0
- package/lib/packlets/json/index.d.ts +2 -0
- package/lib/packlets/json/index.d.ts.map +1 -0
- package/lib/packlets/json/index.js +39 -0
- package/lib/packlets/json/index.js.map +1 -0
- package/package.json +57 -49
- package/common.d.ts +0 -58
- package/common.js +0 -116
- package/compositeJsonMap.d.ts +0 -47
- package/compositeJsonMap.js +0 -97
- package/contextHelpers.d.ts +0 -21
- package/contextHelpers.js +0 -101
- package/converters.d.ts +0 -37
- package/converters.js +0 -92
- package/file.d.ts +0 -60
- package/file.js +0 -140
- package/index.d.ts +0 -10
- package/index.js +0 -62
- package/jsonContext.d.ts +0 -74
- package/jsonContext.js +0 -40
- package/jsonConverter.d.ts +0 -229
- package/jsonConverter.js +0 -292
- package/jsonEditor/common.d.ts +0 -36
- package/jsonEditor/common.js +0 -3
- package/jsonEditor/index.d.ts +0 -5
- package/jsonEditor/jsonEditor.d.ts +0 -74
- package/jsonEditor/jsonEditor.js +0 -259
- package/jsonEditor/jsonEditorRule.d.ts +0 -47
- package/jsonEditor/jsonEditorRule.js +0 -44
- package/jsonEditor/jsonEditorState.d.ts +0 -24
- package/jsonEditor/jsonEditorState.js +0 -86
- package/jsonEditor/rules/conditional.d.ts +0 -84
- package/jsonEditor/rules/conditional.js +0 -146
- package/jsonEditor/rules/index.js +0 -21
- package/jsonEditor/rules/multivalue.d.ts +0 -78
- package/jsonEditor/rules/multivalue.js +0 -129
- package/jsonEditor/rules/references.d.ts +0 -62
- package/jsonEditor/rules/references.js +0 -158
- package/jsonEditor/rules/templates.d.ts +0 -56
- package/jsonEditor/rules/templates.js +0 -115
- package/jsonReferenceMap.d.ts +0 -138
- package/jsonReferenceMap.js +0 -202
|
@@ -1,158 +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.ReferenceJsonEditorRule = void 0;
|
|
25
|
-
const ts_utils_1 = require("@fgv/ts-utils");
|
|
26
|
-
const common_1 = require("../../common");
|
|
27
|
-
const jsonEditorRule_1 = require("../jsonEditorRule");
|
|
28
|
-
/**
|
|
29
|
-
* The Reference JSON editor rule replaces property keys or values that match
|
|
30
|
-
* some known object with a copy of that referenced object, formatted according
|
|
31
|
-
* to the current context.
|
|
32
|
-
*
|
|
33
|
-
* A property key is matched if it matches any known referenceable value.
|
|
34
|
-
* - If the value of the matched key is 'default', then the entire object is formatted
|
|
35
|
-
* with the current context, flattened and merged into the current object.
|
|
36
|
-
* - If the value of the matched key is some other string, then the entire
|
|
37
|
-
* object is formatted with the current context, and the child of the resulting
|
|
38
|
-
* object at the specified path is flattened and merged into the current object.
|
|
39
|
-
* - If the value of the matched key is an object, then the entire object is
|
|
40
|
-
* formatted with the current context extended to include any properties of
|
|
41
|
-
* that object, flattened, and merged into the current object.
|
|
42
|
-
* - It is an error if the referenced value is not an object.
|
|
43
|
-
*
|
|
44
|
-
* Any property, array or literal value is matched if it matches any known
|
|
45
|
-
* referenceable value. The referenced value is replaced by the referenced
|
|
46
|
-
* value, formatted using the current editor context.
|
|
47
|
-
*/
|
|
48
|
-
class ReferenceJsonEditorRule extends jsonEditorRule_1.JsonEditorRuleBase {
|
|
49
|
-
/**
|
|
50
|
-
* Creates a new @see ReferenceJsonEditorRule.
|
|
51
|
-
* @param options Optional configuration options for this rule
|
|
52
|
-
*/
|
|
53
|
-
constructor(options) {
|
|
54
|
-
super();
|
|
55
|
-
this._options = options;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Creates a new @see ReferenceJsonEditorRule.
|
|
59
|
-
* @param options Optional configuration options for this rule
|
|
60
|
-
*/
|
|
61
|
-
static create(options) {
|
|
62
|
-
return (0, ts_utils_1.captureResult)(() => new ReferenceJsonEditorRule(options));
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Evaluates a property for reference expansion.
|
|
66
|
-
* @param key The key of the property to be considered
|
|
67
|
-
* @param value The value of the property to be considered
|
|
68
|
-
* @param state The editor state for the object being edited
|
|
69
|
-
* @returns If the reference is successful, returns Success with a JsonObject to
|
|
70
|
-
* be flattened and merged into the current object. Fails with detail 'inapplicable'
|
|
71
|
-
* for non-reference keys or with detail 'error' if an error occurs.
|
|
72
|
-
*/
|
|
73
|
-
editProperty(key, value, state) {
|
|
74
|
-
var _a, _b;
|
|
75
|
-
// istanbul ignore next
|
|
76
|
-
const validation = (_a = this._options) === null || _a === void 0 ? void 0 : _a.validation;
|
|
77
|
-
// istanbul ignore next
|
|
78
|
-
const refs = state.getRefs((_b = this._options) === null || _b === void 0 ? void 0 : _b.context);
|
|
79
|
-
if (refs === null || refs === void 0 ? void 0 : refs.has(key)) {
|
|
80
|
-
// need to apply any rules to the value before we evaluate it
|
|
81
|
-
const cloneResult = state.editor.clone(value, state.context);
|
|
82
|
-
if (cloneResult.isSuccess()) {
|
|
83
|
-
value = cloneResult.value;
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
const message = `${key}: ${cloneResult.message}`;
|
|
87
|
-
return state.failValidation('invalidPropertyName', message, validation);
|
|
88
|
-
}
|
|
89
|
-
const contextResult = this._extendContext(state, value);
|
|
90
|
-
if (contextResult.isSuccess()) {
|
|
91
|
-
const objResult = refs.getJsonObject(key, contextResult.value);
|
|
92
|
-
// guarded by the has above so should never happen
|
|
93
|
-
// istanbul ignore else
|
|
94
|
-
if (objResult.isSuccess()) {
|
|
95
|
-
if ((typeof value !== 'string') || (value === 'default')) {
|
|
96
|
-
return (0, ts_utils_1.succeedWithDetail)(objResult.value, 'edited');
|
|
97
|
-
}
|
|
98
|
-
const pickResult = (0, common_1.pickJsonObject)(objResult.value, value);
|
|
99
|
-
if (pickResult.isFailure()) {
|
|
100
|
-
const message = `${key}: ${pickResult.message}`;
|
|
101
|
-
return state.failValidation('invalidPropertyName', message, validation);
|
|
102
|
-
}
|
|
103
|
-
return pickResult.withDetail('edited');
|
|
104
|
-
}
|
|
105
|
-
else if (objResult.detail !== 'unknown') {
|
|
106
|
-
const message = `${key}: ${objResult.message}`;
|
|
107
|
-
return state.failValidation('invalidPropertyName', message, validation);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
const message = `${key}: ${contextResult.message}`;
|
|
112
|
-
return state.failValidation('invalidPropertyName', message, validation);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Evaluates a property, array or literal value for reference replacement.
|
|
119
|
-
* @param value The value to be evaluated
|
|
120
|
-
* @param state The editor state for the object being edited
|
|
121
|
-
*/
|
|
122
|
-
editValue(value, state) {
|
|
123
|
-
var _a, _b, _c;
|
|
124
|
-
// istanbul ignore next
|
|
125
|
-
const refs = state.getRefs((_a = this._options) === null || _a === void 0 ? void 0 : _a.context);
|
|
126
|
-
if (refs && (typeof value === 'string')) {
|
|
127
|
-
// istanbul ignore next
|
|
128
|
-
const context = state.getContext((_b = this._options) === null || _b === void 0 ? void 0 : _b.context);
|
|
129
|
-
const result = refs.getJsonValue(value, context);
|
|
130
|
-
if (result.isSuccess()) {
|
|
131
|
-
return (0, ts_utils_1.succeedWithDetail)(result.value, 'edited');
|
|
132
|
-
}
|
|
133
|
-
else if (result.detail === 'error') {
|
|
134
|
-
return state.failValidation('invalidPropertyValue', result.message, (_c = this._options) === null || _c === void 0 ? void 0 : _c.validation);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Gets the template variables to use given the value of some property whose name matched a
|
|
141
|
-
* resource plus the base template context.
|
|
142
|
-
* @param supplied The string or object supplied in the source json
|
|
143
|
-
* @param baseVars The context in effect at the point of resolution
|
|
144
|
-
*/
|
|
145
|
-
_extendContext(state, supplied) {
|
|
146
|
-
var _a;
|
|
147
|
-
const add = {};
|
|
148
|
-
if ((0, common_1.isJsonObject)(supplied)) {
|
|
149
|
-
add.vars = Object.entries(supplied);
|
|
150
|
-
}
|
|
151
|
-
else if (typeof supplied !== 'string') {
|
|
152
|
-
return (0, ts_utils_1.fail)(`Invalid template path or context: "${JSON.stringify(supplied)}"`);
|
|
153
|
-
}
|
|
154
|
-
return state.extendContext((_a = this._options) === null || _a === void 0 ? void 0 : _a.context, add);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
exports.ReferenceJsonEditorRule = ReferenceJsonEditorRule;
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9qc29uRWRpdG9yL3J1bGVzL3JlZmVyZW5jZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsNENBQStHO0FBRS9HLHlDQUFtRjtBQUVuRixzREFBdUQ7QUFHdkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLG1DQUFrQjtJQUczRDs7O09BR0c7SUFDSCxZQUFtQixPQUEyQjtRQUMxQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQTJCO1FBQzVDLE9BQU8sSUFBQSx3QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxZQUFZLENBQUMsR0FBVyxFQUFFLEtBQWdCLEVBQUUsS0FBc0I7O1FBQ3JFLHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBRyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFVBQVUsQ0FBQztRQUM3Qyx1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQiw2REFBNkQ7WUFDN0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDekIsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDN0I7aUJBQ0k7Z0JBQ0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzNFO1lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0Qsa0RBQWtEO2dCQUNsRCx1QkFBdUI7Z0JBQ3ZCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUN2QixJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEVBQUU7d0JBQ3RELE9BQU8sSUFBQSw0QkFBaUIsRUFBb0MsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztxQkFDMUY7b0JBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBQSx1QkFBYyxFQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFELElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUN4QixNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2hELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7cUJBQzNFO29CQUNELE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDMUM7cUJBQ0ksSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtvQkFDckMsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMvQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUMzRTthQUNKO2lCQUNJO2dCQUNELE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzthQUMzRTtTQUNKO1FBQ0QsT0FBTyxJQUFBLHlCQUFjLEVBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLEtBQWdCLEVBQUUsS0FBc0I7O1FBQ3JELHVCQUF1QjtRQUN2QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsT0FBTyxDQUFDLENBQUM7UUFFbkQsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFBRTtZQUNyQyx1QkFBdUI7WUFDdkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNwQixPQUFPLElBQUEsNEJBQWlCLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNwRDtpQkFDSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFO2dCQUNoQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2xHO1NBQ0o7UUFDRCxPQUFPLElBQUEseUJBQWMsRUFBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sY0FBYyxDQUFDLEtBQXNCLEVBQUUsUUFBbUI7O1FBQ2hFLE1BQU0sR0FBRyxHQUE0QixFQUFFLENBQUM7UUFDeEMsSUFBSSxJQUFBLHFCQUFZLEVBQUMsUUFBUSxDQUFDLEVBQUU7WUFDeEIsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDbkMsT0FBTyxJQUFBLGVBQUksRUFBQyxzQ0FBc0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEY7UUFDRCxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNKO0FBakhELDBEQWlIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBEZXRhaWxlZFJlc3VsdCwgUmVzdWx0LCBjYXB0dXJlUmVzdWx0LCBmYWlsLCBmYWlsV2l0aERldGFpbCwgc3VjY2VlZFdpdGhEZXRhaWwgfSBmcm9tICdAZmd2L3RzLXV0aWxzJztcbmltcG9ydCB7IEpzb25FZGl0RmFpbHVyZVJlYXNvbiwgSnNvbkVkaXRvck9wdGlvbnMsIEpzb25Qcm9wZXJ0eUVkaXRGYWlsdXJlUmVhc29uIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEpzb25PYmplY3QsIEpzb25WYWx1ZSwgaXNKc29uT2JqZWN0LCBwaWNrSnNvbk9iamVjdCB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBKc29uQ29udGV4dCB9IGZyb20gJy4uLy4uL2pzb25Db250ZXh0JztcbmltcG9ydCB7IEpzb25FZGl0b3JSdWxlQmFzZSB9IGZyb20gJy4uL2pzb25FZGl0b3JSdWxlJztcbmltcG9ydCB7IEpzb25FZGl0b3JTdGF0ZSB9IGZyb20gJy4uL2pzb25FZGl0b3JTdGF0ZSc7XG5cbi8qKlxuICogVGhlIFJlZmVyZW5jZSBKU09OIGVkaXRvciBydWxlIHJlcGxhY2VzIHByb3BlcnR5IGtleXMgb3IgdmFsdWVzIHRoYXQgbWF0Y2hcbiAqIHNvbWUga25vd24gb2JqZWN0IHdpdGggYSBjb3B5IG9mIHRoYXQgcmVmZXJlbmNlZCBvYmplY3QsIGZvcm1hdHRlZCBhY2NvcmRpbmdcbiAqIHRvIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gKlxuICogQSBwcm9wZXJ0eSBrZXkgaXMgbWF0Y2hlZCBpZiBpdCBtYXRjaGVzIGFueSBrbm93biByZWZlcmVuY2VhYmxlIHZhbHVlLlxuICogLSBJZiB0aGUgdmFsdWUgb2YgdGhlIG1hdGNoZWQga2V5IGlzICdkZWZhdWx0JywgdGhlbiB0aGUgZW50aXJlIG9iamVjdCBpcyBmb3JtYXR0ZWRcbiAqICAgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0LCBmbGF0dGVuZWQgYW5kIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IG9iamVjdC5cbiAqIC0gSWYgdGhlIHZhbHVlIG9mIHRoZSBtYXRjaGVkIGtleSBpcyBzb21lIG90aGVyIHN0cmluZywgdGhlbiB0aGUgZW50aXJlXG4gKiAgIG9iamVjdCBpcyBmb3JtYXR0ZWQgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0LCBhbmQgdGhlIGNoaWxkIG9mIHRoZSByZXN1bHRpbmdcbiAqICAgb2JqZWN0IGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBpcyBmbGF0dGVuZWQgYW5kIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IG9iamVjdC5cbiAqIC0gSWYgdGhlIHZhbHVlIG9mIHRoZSBtYXRjaGVkIGtleSBpcyBhbiBvYmplY3QsIHRoZW4gdGhlIGVudGlyZSBvYmplY3QgaXNcbiAqICAgZm9ybWF0dGVkIHdpdGggdGhlIGN1cnJlbnQgY29udGV4dCBleHRlbmRlZCB0byBpbmNsdWRlIGFueSBwcm9wZXJ0aWVzIG9mXG4gKiAgIHRoYXQgb2JqZWN0LCBmbGF0dGVuZWQsIGFuZCBtZXJnZWQgaW50byB0aGUgY3VycmVudCBvYmplY3QuXG4gKiAtIEl0IGlzIGFuIGVycm9yIGlmIHRoZSByZWZlcmVuY2VkIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QuXG4gKlxuICogQW55IHByb3BlcnR5LCBhcnJheSBvciBsaXRlcmFsIHZhbHVlIGlzIG1hdGNoZWQgaWYgaXQgbWF0Y2hlcyBhbnkga25vd25cbiAqIHJlZmVyZW5jZWFibGUgdmFsdWUuIFRoZSByZWZlcmVuY2VkIHZhbHVlIGlzIHJlcGxhY2VkIGJ5IHRoZSByZWZlcmVuY2VkXG4gKiB2YWx1ZSwgZm9ybWF0dGVkIHVzaW5nIHRoZSBjdXJyZW50IGVkaXRvciBjb250ZXh0LlxuICovXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlSnNvbkVkaXRvclJ1bGUgZXh0ZW5kcyBKc29uRWRpdG9yUnVsZUJhc2Uge1xuICAgIHByb3RlY3RlZCBfb3B0aW9ucz86IEpzb25FZGl0b3JPcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBAc2VlIFJlZmVyZW5jZUpzb25FZGl0b3JSdWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBydWxlXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBKc29uRWRpdG9yT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEBzZWUgUmVmZXJlbmNlSnNvbkVkaXRvclJ1bGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHJ1bGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShvcHRpb25zPzogSnNvbkVkaXRvck9wdGlvbnMpOiBSZXN1bHQ8UmVmZXJlbmNlSnNvbkVkaXRvclJ1bGU+IHtcbiAgICAgICAgcmV0dXJuIGNhcHR1cmVSZXN1bHQoKCkgPT4gbmV3IFJlZmVyZW5jZUpzb25FZGl0b3JSdWxlKG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZXMgYSBwcm9wZXJ0eSBmb3IgcmVmZXJlbmNlIGV4cGFuc2lvbi5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGNvbnNpZGVyZWRcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBlZGl0b3Igc3RhdGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgZWRpdGVkXG4gICAgICogQHJldHVybnMgSWYgdGhlIHJlZmVyZW5jZSBpcyBzdWNjZXNzZnVsLCByZXR1cm5zIFN1Y2Nlc3Mgd2l0aCBhIEpzb25PYmplY3QgdG9cbiAgICAgKiBiZSBmbGF0dGVuZWQgYW5kIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IG9iamVjdC4gRmFpbHMgd2l0aCBkZXRhaWwgJ2luYXBwbGljYWJsZSdcbiAgICAgKiBmb3Igbm9uLXJlZmVyZW5jZSBrZXlzIG9yIHdpdGggZGV0YWlsICdlcnJvcicgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqL1xuICAgIHB1YmxpYyBlZGl0UHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBKc29uVmFsdWUsIHN0YXRlOiBKc29uRWRpdG9yU3RhdGUpOiBEZXRhaWxlZFJlc3VsdDxKc29uT2JqZWN0LCBKc29uUHJvcGVydHlFZGl0RmFpbHVyZVJlYXNvbj4ge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5fb3B0aW9ucz8udmFsaWRhdGlvbjtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgY29uc3QgcmVmcyA9IHN0YXRlLmdldFJlZnModGhpcy5fb3B0aW9ucz8uY29udGV4dCk7XG4gICAgICAgIGlmIChyZWZzPy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhcHBseSBhbnkgcnVsZXMgdG8gdGhlIHZhbHVlIGJlZm9yZSB3ZSBldmFsdWF0ZSBpdFxuICAgICAgICAgICAgY29uc3QgY2xvbmVSZXN1bHQgPSBzdGF0ZS5lZGl0b3IuY2xvbmUodmFsdWUsIHN0YXRlLmNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKGNsb25lUmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjbG9uZVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtrZXl9OiAke2Nsb25lUmVzdWx0Lm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuZmFpbFZhbGlkYXRpb24oJ2ludmFsaWRQcm9wZXJ0eU5hbWUnLCBtZXNzYWdlLCB2YWxpZGF0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dFJlc3VsdCA9IHRoaXMuX2V4dGVuZENvbnRleHQoc3RhdGUsIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb250ZXh0UmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUmVzdWx0ID0gcmVmcy5nZXRKc29uT2JqZWN0KGtleSwgY29udGV4dFJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gZ3VhcmRlZCBieSB0aGUgaGFzIGFib3ZlIHNvIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICAgICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICAgICAgICAgIGlmIChvYmpSZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB8fCAodmFsdWUgPT09ICdkZWZhdWx0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZWVkV2l0aERldGFpbDxKc29uT2JqZWN0LCBKc29uRWRpdEZhaWx1cmVSZWFzb24+KG9ialJlc3VsdC52YWx1ZSwgJ2VkaXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tSZXN1bHQgPSBwaWNrSnNvbk9iamVjdChvYmpSZXN1bHQudmFsdWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtrZXl9OiAke3BpY2tSZXN1bHQubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmZhaWxWYWxpZGF0aW9uKCdpbnZhbGlkUHJvcGVydHlOYW1lJywgbWVzc2FnZSwgdmFsaWRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQud2l0aERldGFpbCgnZWRpdGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9ialJlc3VsdC5kZXRhaWwgIT09ICd1bmtub3duJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7a2V5fTogJHtvYmpSZXN1bHQubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuZmFpbFZhbGlkYXRpb24oJ2ludmFsaWRQcm9wZXJ0eU5hbWUnLCBtZXNzYWdlLCB2YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7a2V5fTogJHtjb250ZXh0UmVzdWx0Lm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuZmFpbFZhbGlkYXRpb24oJ2ludmFsaWRQcm9wZXJ0eU5hbWUnLCBtZXNzYWdlLCB2YWxpZGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwoJ2luYXBwbGljYWJsZScsICdpbmFwcGxpY2FibGUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZXMgYSBwcm9wZXJ0eSwgYXJyYXkgb3IgbGl0ZXJhbCB2YWx1ZSBmb3IgcmVmZXJlbmNlIHJlcGxhY2VtZW50LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgZXZhbHVhdGVkXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBlZGl0b3Igc3RhdGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgZWRpdGVkXG4gICAgICovXG4gICAgcHVibGljIGVkaXRWYWx1ZSh2YWx1ZTogSnNvblZhbHVlLCBzdGF0ZTogSnNvbkVkaXRvclN0YXRlKTogRGV0YWlsZWRSZXN1bHQ8SnNvblZhbHVlLCBKc29uRWRpdEZhaWx1cmVSZWFzb24+IHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgY29uc3QgcmVmcyA9IHN0YXRlLmdldFJlZnModGhpcy5fb3B0aW9ucz8uY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlZnMgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHN0YXRlLmdldENvbnRleHQodGhpcy5fb3B0aW9ucz8uY29udGV4dCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZWZzLmdldEpzb25WYWx1ZSh2YWx1ZSwgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKHJlc3VsdC52YWx1ZSwgJ2VkaXRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmRldGFpbCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5mYWlsVmFsaWRhdGlvbignaW52YWxpZFByb3BlcnR5VmFsdWUnLCByZXN1bHQubWVzc2FnZSwgdGhpcy5fb3B0aW9ucz8udmFsaWRhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWxXaXRoRGV0YWlsKCdpbmFwcGxpY2FibGUnLCAnaW5hcHBsaWNhYmxlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGVtcGxhdGUgdmFyaWFibGVzIHRvIHVzZSBnaXZlbiB0aGUgdmFsdWUgb2Ygc29tZSBwcm9wZXJ0eSB3aG9zZSBuYW1lIG1hdGNoZWQgYVxuICAgICAqIHJlc291cmNlIHBsdXMgdGhlIGJhc2UgdGVtcGxhdGUgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gc3VwcGxpZWQgVGhlIHN0cmluZyBvciBvYmplY3Qgc3VwcGxpZWQgaW4gdGhlIHNvdXJjZSBqc29uXG4gICAgICogQHBhcmFtIGJhc2VWYXJzIFRoZSBjb250ZXh0IGluIGVmZmVjdCBhdCB0aGUgcG9pbnQgb2YgcmVzb2x1dGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZXh0ZW5kQ29udGV4dChzdGF0ZTogSnNvbkVkaXRvclN0YXRlLCBzdXBwbGllZDogSnNvblZhbHVlKTogUmVzdWx0PEpzb25Db250ZXh0fHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBhZGQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGlmIChpc0pzb25PYmplY3Qoc3VwcGxpZWQpKSB7XG4gICAgICAgICAgICBhZGQudmFycyA9IE9iamVjdC5lbnRyaWVzKHN1cHBsaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3VwcGxpZWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFpbChgSW52YWxpZCB0ZW1wbGF0ZSBwYXRoIG9yIGNvbnRleHQ6IFwiJHtKU09OLnN0cmluZ2lmeShzdXBwbGllZCl9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGUuZXh0ZW5kQ29udGV4dCh0aGlzLl9vcHRpb25zPy5jb250ZXh0LCBhZGQpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,56 +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
|
-
* Configuration options for the Templated JSON editor rule
|
|
8
|
-
*/
|
|
9
|
-
export interface TemplatedJsonRuleOptions extends Partial<JsonEditorOptions> {
|
|
10
|
-
/**
|
|
11
|
-
* If true (default) then templates in property names are rendered
|
|
12
|
-
*/
|
|
13
|
-
useNameTemplates?: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* If true (default) then templates in property values are rendered
|
|
16
|
-
*/
|
|
17
|
-
useValueTemplates?: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* The Templated JSON editor rule applies mustache rendering as appropriate
|
|
21
|
-
* to any keys or values in the object being edited.
|
|
22
|
-
*/
|
|
23
|
-
export declare class TemplatedJsonEditorRule extends JsonEditorRuleBase {
|
|
24
|
-
protected _options?: TemplatedJsonRuleOptions;
|
|
25
|
-
/**
|
|
26
|
-
* Creates a new @see TemplatedJsonEditorRule
|
|
27
|
-
* @param options Optional configuration options for this rule
|
|
28
|
-
*/
|
|
29
|
-
constructor(options?: TemplatedJsonRuleOptions);
|
|
30
|
-
/**
|
|
31
|
-
* Creates a new @see TemplatedJsonEditorRule
|
|
32
|
-
* @param options Optional configuration options for this rule
|
|
33
|
-
*/
|
|
34
|
-
static create(options?: TemplatedJsonRuleOptions): Result<TemplatedJsonEditorRule>;
|
|
35
|
-
/**
|
|
36
|
-
* Evaluates a property name for template rendering.
|
|
37
|
-
* @param key The key of the property to be considered
|
|
38
|
-
* @param value The value of the property to be considered
|
|
39
|
-
* @param state The editor state for the object being edited
|
|
40
|
-
* @returns Succeeds with detail 'edited' and an object to be flattened and merged
|
|
41
|
-
* if the key contained a template. Fails with detail 'error' if an error occurred
|
|
42
|
-
* or with detail 'inapplicable' if the property key does not contain a template
|
|
43
|
-
* or if name rendering is disabled.
|
|
44
|
-
*/
|
|
45
|
-
editProperty(key: string, value: JsonValue, state: JsonEditorState): DetailedResult<JsonObject, JsonPropertyEditFailureReason>;
|
|
46
|
-
/**
|
|
47
|
-
* Evaluates a property, array or literal value for template rendering
|
|
48
|
-
* @param value The value to be edited
|
|
49
|
-
* @param state The editor state for the object being edited
|
|
50
|
-
* @returns Succeeds with detail 'edited' if the value contained a template and was edited.
|
|
51
|
-
* Fails with 'ignore' if the rendered value should be ignored, with 'error' if an error occurs
|
|
52
|
-
* or with 'inapplicable' if the value was not a string with a template.
|
|
53
|
-
*/
|
|
54
|
-
editValue(value: JsonValue, state: JsonEditorState): DetailedResult<JsonValue, JsonEditFailureReason>;
|
|
55
|
-
protected _render(template: string, state: JsonEditorState): DetailedResult<string, JsonEditFailureReason>;
|
|
56
|
-
}
|
|
@@ -1,115 +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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
-
};
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.TemplatedJsonEditorRule = void 0;
|
|
28
|
-
const ts_utils_1 = require("@fgv/ts-utils");
|
|
29
|
-
const jsonEditorRule_1 = require("../jsonEditorRule");
|
|
30
|
-
const mustache_1 = __importDefault(require("mustache"));
|
|
31
|
-
/**
|
|
32
|
-
* The Templated JSON editor rule applies mustache rendering as appropriate
|
|
33
|
-
* to any keys or values in the object being edited.
|
|
34
|
-
*/
|
|
35
|
-
class TemplatedJsonEditorRule extends jsonEditorRule_1.JsonEditorRuleBase {
|
|
36
|
-
/**
|
|
37
|
-
* Creates a new @see TemplatedJsonEditorRule
|
|
38
|
-
* @param options Optional configuration options for this rule
|
|
39
|
-
*/
|
|
40
|
-
constructor(options) {
|
|
41
|
-
super();
|
|
42
|
-
this._options = options;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Creates a new @see TemplatedJsonEditorRule
|
|
46
|
-
* @param options Optional configuration options for this rule
|
|
47
|
-
*/
|
|
48
|
-
static create(options) {
|
|
49
|
-
return (0, ts_utils_1.captureResult)(() => new TemplatedJsonEditorRule(options));
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Evaluates a property name for template rendering.
|
|
53
|
-
* @param key The key of the property to be considered
|
|
54
|
-
* @param value The value of the property to be considered
|
|
55
|
-
* @param state The editor state for the object being edited
|
|
56
|
-
* @returns Succeeds with detail 'edited' and an object to be flattened and merged
|
|
57
|
-
* if the key contained a template. Fails with detail 'error' if an error occurred
|
|
58
|
-
* or with detail 'inapplicable' if the property key does not contain a template
|
|
59
|
-
* or if name rendering is disabled.
|
|
60
|
-
*/
|
|
61
|
-
editProperty(key, value, state) {
|
|
62
|
-
var _a, _b;
|
|
63
|
-
// istanbul ignore next
|
|
64
|
-
const validation = (_a = this._options) === null || _a === void 0 ? void 0 : _a.validation;
|
|
65
|
-
if (((_b = this._options) === null || _b === void 0 ? void 0 : _b.useNameTemplates) !== false) {
|
|
66
|
-
const result = this._render(key, state).onSuccess((newKey) => {
|
|
67
|
-
if (newKey.length < 1) {
|
|
68
|
-
return state.failValidation('invalidPropertyName', `Template "${key}" renders empty name.`);
|
|
69
|
-
}
|
|
70
|
-
const rtrn = {};
|
|
71
|
-
rtrn[newKey] = value;
|
|
72
|
-
return (0, ts_utils_1.succeedWithDetail)(rtrn, 'edited');
|
|
73
|
-
});
|
|
74
|
-
if ((result.isFailure() && result.detail === 'error')) {
|
|
75
|
-
const message = `Cannot render name ${key}: ${result.message}`;
|
|
76
|
-
return state.failValidation('invalidPropertyName', message, validation);
|
|
77
|
-
}
|
|
78
|
-
return result;
|
|
79
|
-
}
|
|
80
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Evaluates a property, array or literal value for template rendering
|
|
84
|
-
* @param value The value to be edited
|
|
85
|
-
* @param state The editor state for the object being edited
|
|
86
|
-
* @returns Succeeds with detail 'edited' if the value contained a template and was edited.
|
|
87
|
-
* Fails with 'ignore' if the rendered value should be ignored, with 'error' if an error occurs
|
|
88
|
-
* or with 'inapplicable' if the value was not a string with a template.
|
|
89
|
-
*/
|
|
90
|
-
editValue(value, state) {
|
|
91
|
-
var _a, _b;
|
|
92
|
-
if ((((_a = this._options) === null || _a === void 0 ? void 0 : _a.useValueTemplates) !== false) && (typeof value === 'string') && value.includes('{{')) {
|
|
93
|
-
const renderResult = this._render(value, state).onSuccess((newValue) => {
|
|
94
|
-
return (0, ts_utils_1.succeedWithDetail)(newValue, 'edited');
|
|
95
|
-
});
|
|
96
|
-
if (renderResult.isFailure() && (renderResult.detail === 'error')) {
|
|
97
|
-
const message = `Cannot render value: ${renderResult.message}`;
|
|
98
|
-
// istanbul ignore next
|
|
99
|
-
return state.failValidation('invalidPropertyValue', message, (_b = this._options) === null || _b === void 0 ? void 0 : _b.validation);
|
|
100
|
-
}
|
|
101
|
-
return renderResult;
|
|
102
|
-
}
|
|
103
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
104
|
-
}
|
|
105
|
-
_render(template, state) {
|
|
106
|
-
var _a;
|
|
107
|
-
const vars = state.getVars((_a = this._options) === null || _a === void 0 ? void 0 : _a.context);
|
|
108
|
-
if (vars && template.includes('{{')) {
|
|
109
|
-
return (0, ts_utils_1.captureResult)(() => mustache_1.default.render(template, vars)).withDetail('error', 'edited');
|
|
110
|
-
}
|
|
111
|
-
return (0, ts_utils_1.failWithDetail)('inapplicable', 'inapplicable');
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
exports.TemplatedJsonEditorRule = TemplatedJsonEditorRule;
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2pzb25FZGl0b3IvcnVsZXMvdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7Ozs7OztBQUVILDRDQUF5RztBQUd6RyxzREFBdUQ7QUFHdkQsd0RBQWdDO0FBZ0JoQzs7O0dBR0c7QUFDSCxNQUFhLHVCQUF3QixTQUFRLG1DQUFrQjtJQUczRDs7O09BR0c7SUFDSCxZQUFtQixPQUFrQztRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQWtDO1FBQ25ELE9BQU8sSUFBQSx3QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksWUFBWSxDQUFDLEdBQVcsRUFBRSxLQUFnQixFQUFFLEtBQXNCOztRQUNyRSx1QkFBdUI7UUFDdkIsTUFBTSxVQUFVLEdBQUcsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxVQUFVLENBQUM7UUFFN0MsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsZ0JBQWdCLE1BQUssS0FBSyxFQUFFO1lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNuQixPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsYUFBYSxHQUFHLHVCQUF1QixDQUFDLENBQUM7aUJBQy9GO2dCQUVELE1BQU0sSUFBSSxHQUFlLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDckIsT0FBTyxJQUFBLDRCQUFpQixFQUFvQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUU7Z0JBQ25ELE1BQU0sT0FBTyxHQUFHLHNCQUFzQixHQUFHLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMvRCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzNFO1lBQ0QsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFDRCxPQUFPLElBQUEseUJBQWMsRUFBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxTQUFTLENBQUMsS0FBZ0IsRUFBRSxLQUFzQjs7UUFDckQsSUFBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxpQkFBaUIsTUFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckcsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ25FLE9BQU8sSUFBQSw0QkFBaUIsRUFBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUU7Z0JBQy9ELE1BQU0sT0FBTyxHQUFHLHdCQUF3QixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9ELHVCQUF1QjtnQkFDdkIsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzNGO1lBQ0QsT0FBTyxZQUFZLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQUEseUJBQWMsRUFBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFnQixFQUFFLEtBQXNCOztRQUN0RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUEsd0JBQWEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzdGO1FBQ0QsT0FBTyxJQUFBLHlCQUFjLEVBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSjtBQXJGRCwwREFxRkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgRGV0YWlsZWRSZXN1bHQsIFJlc3VsdCwgY2FwdHVyZVJlc3VsdCwgZmFpbFdpdGhEZXRhaWwsIHN1Y2NlZWRXaXRoRGV0YWlsIH0gZnJvbSAnQGZndi90cy11dGlscyc7XG5pbXBvcnQgeyBKc29uRWRpdEZhaWx1cmVSZWFzb24sIEpzb25FZGl0b3JPcHRpb25zLCBKc29uUHJvcGVydHlFZGl0RmFpbHVyZVJlYXNvbiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBKc29uVmFsdWUgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgSnNvbkVkaXRvclJ1bGVCYXNlIH0gZnJvbSAnLi4vanNvbkVkaXRvclJ1bGUnO1xuaW1wb3J0IHsgSnNvbkVkaXRvclN0YXRlIH0gZnJvbSAnLi4vanNvbkVkaXRvclN0YXRlJztcblxuaW1wb3J0IE11c3RhY2hlIGZyb20gJ211c3RhY2hlJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBUZW1wbGF0ZWQgSlNPTiBlZGl0b3IgcnVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlZEpzb25SdWxlT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8SnNvbkVkaXRvck9wdGlvbnM+IHtcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIChkZWZhdWx0KSB0aGVuIHRlbXBsYXRlcyBpbiBwcm9wZXJ0eSBuYW1lcyBhcmUgcmVuZGVyZWRcbiAgICAgKi9cbiAgICB1c2VOYW1lVGVtcGxhdGVzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIChkZWZhdWx0KSB0aGVuIHRlbXBsYXRlcyBpbiBwcm9wZXJ0eSB2YWx1ZXMgYXJlIHJlbmRlcmVkXG4gICAgICovXG4gICAgdXNlVmFsdWVUZW1wbGF0ZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBUZW1wbGF0ZWQgSlNPTiBlZGl0b3IgcnVsZSBhcHBsaWVzIG11c3RhY2hlIHJlbmRlcmluZyBhcyBhcHByb3ByaWF0ZVxuICogdG8gYW55IGtleXMgb3IgdmFsdWVzIGluIHRoZSBvYmplY3QgYmVpbmcgZWRpdGVkLlxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVkSnNvbkVkaXRvclJ1bGUgZXh0ZW5kcyBKc29uRWRpdG9yUnVsZUJhc2Uge1xuICAgIHByb3RlY3RlZCBfb3B0aW9ucz86IFRlbXBsYXRlZEpzb25SdWxlT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQHNlZSBUZW1wbGF0ZWRKc29uRWRpdG9yUnVsZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBydWxlXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBUZW1wbGF0ZWRKc29uUnVsZU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBAc2VlIFRlbXBsYXRlZEpzb25FZGl0b3JSdWxlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHJ1bGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShvcHRpb25zPzogVGVtcGxhdGVkSnNvblJ1bGVPcHRpb25zKTogUmVzdWx0PFRlbXBsYXRlZEpzb25FZGl0b3JSdWxlPiB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlUmVzdWx0KCgpID0+IG5ldyBUZW1wbGF0ZWRKc29uRWRpdG9yUnVsZShvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZhbHVhdGVzIGEgcHJvcGVydHkgbmFtZSBmb3IgdGVtcGxhdGUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGNvbnNpZGVyZWRcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGVkaXRvciBzdGF0ZSBmb3IgdGhlIG9iamVjdCBiZWluZyBlZGl0ZWRcbiAgICAgKiBAcmV0dXJucyBTdWNjZWVkcyB3aXRoIGRldGFpbCAnZWRpdGVkJyBhbmQgYW4gb2JqZWN0IHRvIGJlIGZsYXR0ZW5lZCBhbmQgbWVyZ2VkXG4gICAgICogaWYgdGhlIGtleSBjb250YWluZWQgYSB0ZW1wbGF0ZS4gRmFpbHMgd2l0aCBkZXRhaWwgJ2Vycm9yJyBpZiBhbiBlcnJvciBvY2N1cnJlZFxuICAgICAqIG9yIHdpdGggZGV0YWlsICdpbmFwcGxpY2FibGUnIGlmIHRoZSBwcm9wZXJ0eSBrZXkgZG9lcyBub3QgY29udGFpbiBhIHRlbXBsYXRlXG4gICAgICogb3IgaWYgbmFtZSByZW5kZXJpbmcgaXMgZGlzYWJsZWQuXG4gICAgICovXG4gICAgcHVibGljIGVkaXRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSwgc3RhdGU6IEpzb25FZGl0b3JTdGF0ZSk6IERldGFpbGVkUmVzdWx0PEpzb25PYmplY3QsIEpzb25Qcm9wZXJ0eUVkaXRGYWlsdXJlUmVhc29uPiB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLl9vcHRpb25zPy52YWxpZGF0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zPy51c2VOYW1lVGVtcGxhdGVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcmVuZGVyKGtleSwgc3RhdGUpLm9uU3VjY2VzcygobmV3S2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0tleS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5mYWlsVmFsaWRhdGlvbignaW52YWxpZFByb3BlcnR5TmFtZScsIGBUZW1wbGF0ZSBcIiR7a2V5fVwiIHJlbmRlcnMgZW1wdHkgbmFtZS5gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBydHJuOiBKc29uT2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgcnRybltuZXdLZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsPEpzb25PYmplY3QsIEpzb25FZGl0RmFpbHVyZVJlYXNvbj4ocnRybiwgJ2VkaXRlZCcpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICgocmVzdWx0LmlzRmFpbHVyZSgpICYmIHJlc3VsdC5kZXRhaWwgPT09ICdlcnJvcicpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBDYW5ub3QgcmVuZGVyIG5hbWUgJHtrZXl9OiAke3Jlc3VsdC5tZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmZhaWxWYWxpZGF0aW9uKCdpbnZhbGlkUHJvcGVydHlOYW1lJywgbWVzc2FnZSwgdmFsaWRhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCgnaW5hcHBsaWNhYmxlJywgJ2luYXBwbGljYWJsZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlcyBhIHByb3BlcnR5LCBhcnJheSBvciBsaXRlcmFsIHZhbHVlIGZvciB0ZW1wbGF0ZSByZW5kZXJpbmdcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGVkaXRlZFxuICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgZWRpdG9yIHN0YXRlIGZvciB0aGUgb2JqZWN0IGJlaW5nIGVkaXRlZFxuICAgICAqIEByZXR1cm5zIFN1Y2NlZWRzIHdpdGggZGV0YWlsICdlZGl0ZWQnIGlmIHRoZSB2YWx1ZSBjb250YWluZWQgYSB0ZW1wbGF0ZSBhbmQgd2FzIGVkaXRlZC5cbiAgICAgKiBGYWlscyB3aXRoICdpZ25vcmUnIGlmIHRoZSByZW5kZXJlZCB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZCwgd2l0aCAnZXJyb3InIGlmIGFuIGVycm9yIG9jY3Vyc1xuICAgICAqIG9yIHdpdGggJ2luYXBwbGljYWJsZScgaWYgdGhlIHZhbHVlIHdhcyBub3QgYSBzdHJpbmcgd2l0aCBhIHRlbXBsYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBlZGl0VmFsdWUodmFsdWU6IEpzb25WYWx1ZSwgc3RhdGU6IEpzb25FZGl0b3JTdGF0ZSk6IERldGFpbGVkUmVzdWx0PEpzb25WYWx1ZSwgSnNvbkVkaXRGYWlsdXJlUmVhc29uPiB7XG4gICAgICAgIGlmICgodGhpcy5fb3B0aW9ucz8udXNlVmFsdWVUZW1wbGF0ZXMgIT09IGZhbHNlKSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgdmFsdWUuaW5jbHVkZXMoJ3t7JykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclJlc3VsdCA9IHRoaXMuX3JlbmRlcih2YWx1ZSwgc3RhdGUpLm9uU3VjY2VzcygobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VlZFdpdGhEZXRhaWwobmV3VmFsdWUsICdlZGl0ZWQnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyUmVzdWx0LmlzRmFpbHVyZSgpICYmIChyZW5kZXJSZXN1bHQuZGV0YWlsID09PSAnZXJyb3InKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ2Fubm90IHJlbmRlciB2YWx1ZTogJHtyZW5kZXJSZXN1bHQubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmZhaWxWYWxpZGF0aW9uKCdpbnZhbGlkUHJvcGVydHlWYWx1ZScsIG1lc3NhZ2UsIHRoaXMuX29wdGlvbnM/LnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlclJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwoJ2luYXBwbGljYWJsZScsICdpbmFwcGxpY2FibGUnKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JlbmRlcih0ZW1wbGF0ZTogc3RyaW5nLCBzdGF0ZTogSnNvbkVkaXRvclN0YXRlKTogRGV0YWlsZWRSZXN1bHQ8c3RyaW5nLCBKc29uRWRpdEZhaWx1cmVSZWFzb24+IHtcbiAgICAgICAgY29uc3QgdmFycyA9IHN0YXRlLmdldFZhcnModGhpcy5fb3B0aW9ucz8uY29udGV4dCk7XG4gICAgICAgIGlmICh2YXJzICYmIHRlbXBsYXRlLmluY2x1ZGVzKCd7eycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FwdHVyZVJlc3VsdCgoKSA9PiBNdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsIHZhcnMpKS53aXRoRGV0YWlsKCdlcnJvcicsICdlZGl0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwoJ2luYXBwbGljYWJsZScsICdpbmFwcGxpY2FibGUnKTtcbiAgICB9XG59XG4iXX0=
|
package/jsonReferenceMap.d.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { DetailedResult, Result } from '@fgv/ts-utils';
|
|
2
|
-
import { JsonContext, JsonReferenceMap, JsonReferenceMapFailureReason } from './jsonContext';
|
|
3
|
-
import { JsonObject, JsonValue } from './common';
|
|
4
|
-
import { JsonEditor } from './jsonEditor/jsonEditor';
|
|
5
|
-
export interface ReferenceMapKeyPolicyValidateOptions {
|
|
6
|
-
makeValid?: boolean;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Policy object responsible for validating or correcting
|
|
10
|
-
* keys in a reference map
|
|
11
|
-
*/
|
|
12
|
-
export declare class ReferenceMapKeyPolicy<T> {
|
|
13
|
-
protected readonly _defaultOptions?: ReferenceMapKeyPolicyValidateOptions;
|
|
14
|
-
protected readonly _isValid: (key: string, item?: T) => boolean;
|
|
15
|
-
constructor(options?: ReferenceMapKeyPolicyValidateOptions, isValid?: (key: string, item?: T) => boolean);
|
|
16
|
-
static defaultKeyPredicate(key: string): boolean;
|
|
17
|
-
isValid(key: string, item?: T): boolean;
|
|
18
|
-
validate(key: string, item?: T, _options?: ReferenceMapKeyPolicyValidateOptions): Result<string>;
|
|
19
|
-
validateItems(items: [string, T][], options?: ReferenceMapKeyPolicyValidateOptions): Result<[string, T][]>;
|
|
20
|
-
validateMap(map: Map<string, T>, options?: ReferenceMapKeyPolicyValidateOptions): Result<Map<string, T>>;
|
|
21
|
-
}
|
|
22
|
-
export declare class PrefixKeyPolicy<T> extends ReferenceMapKeyPolicy<T> {
|
|
23
|
-
readonly prefix: string;
|
|
24
|
-
constructor(prefix: string, options?: ReferenceMapKeyPolicyValidateOptions);
|
|
25
|
-
isValid(key: string, _item?: T): boolean;
|
|
26
|
-
validate(key: string, item?: T, options?: ReferenceMapKeyPolicyValidateOptions): Result<string>;
|
|
27
|
-
}
|
|
28
|
-
export type MapOrRecord<T> = Map<string, T> | Record<string, T>;
|
|
29
|
-
/**
|
|
30
|
-
* A SimpleJsonMap presents a view of a simple map of @see JsonValue
|
|
31
|
-
*/
|
|
32
|
-
export declare abstract class SimpleJsonMapBase<T> implements JsonReferenceMap {
|
|
33
|
-
protected readonly _keyPolicy: ReferenceMapKeyPolicy<T>;
|
|
34
|
-
protected readonly _values: Map<string, T>;
|
|
35
|
-
protected readonly _context?: JsonContext;
|
|
36
|
-
protected constructor(values?: MapOrRecord<T>, context?: JsonContext, keyPolicy?: ReferenceMapKeyPolicy<T>);
|
|
37
|
-
protected static _toMap<T>(values?: MapOrRecord<T>): Result<Map<string, T>>;
|
|
38
|
-
/**
|
|
39
|
-
* Determine if a key might be valid for this map but does not determine if key actually
|
|
40
|
-
* exists. Allows key range to be constrained.
|
|
41
|
-
* @param key key to be tested
|
|
42
|
-
* @returns true if the key is in the valid range, false otherwise.
|
|
43
|
-
*/
|
|
44
|
-
keyIsInRange(key: string): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Determines if an object with the specified key actually exists in the map.
|
|
47
|
-
* @param key key to be tested
|
|
48
|
-
* @returns true if an object with the specified key exists, false otherwise.
|
|
49
|
-
*/
|
|
50
|
-
has(key: string): boolean;
|
|
51
|
-
/**
|
|
52
|
-
* Gets a JSON object specified by key.
|
|
53
|
-
* @param key key of the object to be retrieved
|
|
54
|
-
* @param context optional @see JsonContext used to format the object
|
|
55
|
-
* @returns Success with the formatted object if successful. Failure with detail 'unknown'
|
|
56
|
-
* if no such object exists, or failure with detail 'error' if the object was found but
|
|
57
|
-
* could not be formatted.
|
|
58
|
-
*/
|
|
59
|
-
getJsonObject(key: string, context?: JsonContext): DetailedResult<JsonObject, JsonReferenceMapFailureReason>;
|
|
60
|
-
/**
|
|
61
|
-
* Gets a JSON value specified by key.
|
|
62
|
-
* @param key key of the object to be retrieved
|
|
63
|
-
* @param context Optional @see JsonContext used to format the value
|
|
64
|
-
* @returns Success with the formatted object if successful. Failure with detail 'unknown'
|
|
65
|
-
* if no such object exists, or failure with detail 'error' if the object was found but
|
|
66
|
-
* could not be formatted.
|
|
67
|
-
*/
|
|
68
|
-
abstract getJsonValue(key: string, context?: JsonContext): DetailedResult<JsonValue, JsonReferenceMapFailureReason>;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Initialization options for a @see SimpleJsonMap
|
|
72
|
-
*/
|
|
73
|
-
export interface SimpleJsonMapOptions {
|
|
74
|
-
keyPolicy?: ReferenceMapKeyPolicy<JsonValue>;
|
|
75
|
-
editor?: JsonEditor;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* A SimpleJsonMap presents a view of a simple map of @see JsonValue
|
|
79
|
-
*/
|
|
80
|
-
export declare class SimpleJsonMap extends SimpleJsonMapBase<JsonValue> {
|
|
81
|
-
protected _editor?: JsonEditor;
|
|
82
|
-
protected constructor(values?: MapOrRecord<JsonValue>, context?: JsonContext, options?: SimpleJsonMapOptions);
|
|
83
|
-
/**
|
|
84
|
-
* Creates a new @see SimpleJsonMap from the supplied objects
|
|
85
|
-
* @param values A string-keyed Map or Record of the @see JsonObject to be returned
|
|
86
|
-
* @param context Optional @see JsonContext used to format returned values
|
|
87
|
-
* @param options Optional @see SimpleJsonMapOptions for initialization
|
|
88
|
-
*/
|
|
89
|
-
static createSimple(values?: MapOrRecord<JsonValue>, context?: JsonContext, options?: SimpleJsonMapOptions): Result<SimpleJsonMap>;
|
|
90
|
-
/**
|
|
91
|
-
* Gets a JSON value specified by key.
|
|
92
|
-
* @param key key of the object to be retrieved
|
|
93
|
-
* @param context Optional @see JsonContext used to format the value
|
|
94
|
-
* @returns Success with the formatted object if successful. Failure with detail 'unknown'
|
|
95
|
-
* if no such object exists, or failure with detail 'error' if the object was found but
|
|
96
|
-
* could not be formatted.
|
|
97
|
-
*/
|
|
98
|
-
getJsonValue(key: string, context?: JsonContext): DetailedResult<JsonValue, JsonReferenceMapFailureReason>;
|
|
99
|
-
protected _clone(value: JsonValue, context?: JsonContext): DetailedResult<JsonValue, JsonReferenceMapFailureReason>;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Initialization options for a PrefixedJsonMap
|
|
103
|
-
*/
|
|
104
|
-
export interface KeyPrefixOptions {
|
|
105
|
-
/**
|
|
106
|
-
* Indicates whether the prefix should be added automatically as needed (default true)
|
|
107
|
-
*/
|
|
108
|
-
addPrefix?: boolean;
|
|
109
|
-
/**
|
|
110
|
-
* The prefix to be enforced
|
|
111
|
-
*/
|
|
112
|
-
prefix: string;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* A PrefixedJsonMap enforces a supplied prefix for all contained values, optionally
|
|
116
|
-
* adding the prefix as necessary (default true).
|
|
117
|
-
*/
|
|
118
|
-
export declare class PrefixedJsonMap extends SimpleJsonMap {
|
|
119
|
-
protected constructor(values?: MapOrRecord<JsonValue>, context?: JsonContext, options?: SimpleJsonMapOptions);
|
|
120
|
-
/**
|
|
121
|
-
* Creates a new @see PrefixedJsonMap from the supplied values
|
|
122
|
-
* @param prefix A string prefix to be enforced for and added to key names as necessary
|
|
123
|
-
* @param values A string-keyed Map or Record of the @see JsonValue to be returned
|
|
124
|
-
* @param context Optional @see JsonContext used to format returned values
|
|
125
|
-
* @param editor Optional @see JsonEditor used to format returned values
|
|
126
|
-
*/
|
|
127
|
-
static createPrefixed(prefix: string, values?: MapOrRecord<JsonValue>, context?: JsonContext, editor?: JsonEditor): Result<PrefixedJsonMap>;
|
|
128
|
-
/**
|
|
129
|
-
* Creates a new @see PrefixedJsonMap from the supplied values
|
|
130
|
-
* @param prefixOptions A KeyPrefixOptions indicating the prefix to enforce and whether that prefix should
|
|
131
|
-
* be added automatically if necessary (default true)
|
|
132
|
-
* @param values A string-keyed Map or record of the @see JsonValue to be returned
|
|
133
|
-
* @param context Optional @see JsonContext used to format returned values
|
|
134
|
-
* @param editor Optional @see JsonEditor used to format returned values
|
|
135
|
-
*/
|
|
136
|
-
static createPrefixed(prefixOptions: KeyPrefixOptions, values?: MapOrRecord<JsonValue>, context?: JsonContext, editor?: JsonEditor): Result<PrefixedJsonMap>;
|
|
137
|
-
protected static _toPolicy(prefixOptions: string | KeyPrefixOptions): ReferenceMapKeyPolicy<JsonValue>;
|
|
138
|
-
}
|