@fgv/ts-json 1.9.6 → 2.0.2-alpha.0

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