@igo2/utils 18.0.1-next.1 → 18.0.1
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/esm2022/igo2-utils.mjs +5 -0
- package/esm2022/lib/base64.mjs +85 -0
- package/esm2022/lib/cache.utils.mjs +10 -0
- package/esm2022/lib/change.interface.mjs +7 -0
- package/esm2022/lib/change.mjs +87 -0
- package/esm2022/lib/clipboard.mjs +52 -0
- package/esm2022/lib/compression/compressedData.interface.mjs +2 -0
- package/esm2022/lib/compression/compression.utils.mjs +124 -0
- package/esm2022/lib/compression/index.mjs +3 -0
- package/esm2022/lib/date.utils.mjs +10 -0
- package/esm2022/lib/dom.utils.mjs +16 -0
- package/esm2022/lib/files/excel.mjs +37 -0
- package/esm2022/lib/files/file.mjs +45 -0
- package/esm2022/lib/files/index.mjs +3 -0
- package/esm2022/lib/index.mjs +19 -0
- package/esm2022/lib/number-utils.mjs +7 -0
- package/esm2022/lib/object-utils.mjs +249 -0
- package/esm2022/lib/strenum.mjs +8 -0
- package/esm2022/lib/string-utils.mjs +115 -0
- package/esm2022/lib/theme.utils.mjs +23 -0
- package/esm2022/lib/tree/index.mjs +2 -0
- package/esm2022/lib/tree/tree.mjs +208 -0
- package/esm2022/lib/user-agent.mjs +3 -0
- package/esm2022/lib/uuid.mjs +8 -0
- package/esm2022/lib/watcher.mjs +37 -0
- package/esm2022/public_api.mjs +5 -0
- package/fesm2022/igo2-utils.mjs.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/* eslint-disable no-prototype-builtins */
|
|
2
|
+
export class ObjectUtils {
|
|
3
|
+
static resolve(obj, key) {
|
|
4
|
+
const keysArray = key.replace(/\[/g, '.').replace(/\]/g, '').split('.');
|
|
5
|
+
let current = obj;
|
|
6
|
+
while (keysArray.length) {
|
|
7
|
+
if (typeof current !== 'object') {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
current = current[keysArray.shift()];
|
|
11
|
+
}
|
|
12
|
+
return current;
|
|
13
|
+
}
|
|
14
|
+
static isObject(item) {
|
|
15
|
+
return (item &&
|
|
16
|
+
typeof item === 'object' &&
|
|
17
|
+
!Array.isArray(item) &&
|
|
18
|
+
item !== null &&
|
|
19
|
+
!(item instanceof Date));
|
|
20
|
+
}
|
|
21
|
+
static mergeDeep(target, source, ignoreUndefined = false) {
|
|
22
|
+
const output = Object.assign({}, target);
|
|
23
|
+
if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {
|
|
24
|
+
Object.keys(source)
|
|
25
|
+
.filter((key) => !ignoreUndefined || source[key] !== undefined)
|
|
26
|
+
.forEach((key) => {
|
|
27
|
+
if (ObjectUtils.isObject(source[key])) {
|
|
28
|
+
if (!(key in target)) {
|
|
29
|
+
Object.assign(output, { [key]: source[key] });
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
output[key] = ObjectUtils.mergeDeep(target[key], source[key], ignoreUndefined);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
Object.assign(output, { [key]: source[key] });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
static copyDeep(src) {
|
|
43
|
+
const target = Array.isArray(src) ? [] : {};
|
|
44
|
+
for (const prop in src) {
|
|
45
|
+
if (src.hasOwnProperty(prop)) {
|
|
46
|
+
const value = src[prop];
|
|
47
|
+
if (value && typeof value === 'object') {
|
|
48
|
+
target[prop] = this.copyDeep(value);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
target[prop] = value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return target;
|
|
56
|
+
}
|
|
57
|
+
static removeDuplicateCaseInsensitive(obj) {
|
|
58
|
+
const summaryCapitalizeObject = {};
|
|
59
|
+
const capitalizeObject = {};
|
|
60
|
+
const upperCaseCount = [];
|
|
61
|
+
for (const property in obj) {
|
|
62
|
+
if (obj.hasOwnProperty(property)) {
|
|
63
|
+
const upperCaseProperty = property.toUpperCase();
|
|
64
|
+
if (!summaryCapitalizeObject.hasOwnProperty(upperCaseProperty)) {
|
|
65
|
+
summaryCapitalizeObject[upperCaseProperty] = [
|
|
66
|
+
{ [property]: obj[property] }
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
summaryCapitalizeObject[upperCaseProperty].push({
|
|
71
|
+
[property]: obj[property]
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// counting the number of uppercase lettersMna
|
|
75
|
+
upperCaseCount.push({
|
|
76
|
+
key: property,
|
|
77
|
+
count: property.replace(/[^A-Z]/g, '').length
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const capitalizedProperty in summaryCapitalizeObject) {
|
|
82
|
+
if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
|
|
83
|
+
if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
|
|
84
|
+
const capitalizedPropertyObject = summaryCapitalizeObject[capitalizedProperty];
|
|
85
|
+
if (capitalizedPropertyObject.length === 1) {
|
|
86
|
+
// for single params (no duplicates)
|
|
87
|
+
const singlePossibility = capitalizedPropertyObject[0];
|
|
88
|
+
capitalizeObject[capitalizedProperty] =
|
|
89
|
+
singlePossibility[Object.keys(singlePossibility)[0]];
|
|
90
|
+
}
|
|
91
|
+
else if (capitalizedPropertyObject.length > 1) {
|
|
92
|
+
// defining the closest to lowercase property
|
|
93
|
+
const paramClosestToLowercase = upperCaseCount
|
|
94
|
+
.filter((f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase())
|
|
95
|
+
.reduce((prev, current) => {
|
|
96
|
+
return prev.y < current.y ? prev : current;
|
|
97
|
+
});
|
|
98
|
+
capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =
|
|
99
|
+
obj[paramClosestToLowercase.key];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const property in obj) {
|
|
105
|
+
if (obj.hasOwnProperty(property)) {
|
|
106
|
+
delete obj[property];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
for (const property in capitalizeObject) {
|
|
110
|
+
if (capitalizeObject.hasOwnProperty(property)) {
|
|
111
|
+
obj[property] = capitalizeObject[property];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
static removeUndefined(obj) {
|
|
116
|
+
const output = {};
|
|
117
|
+
if (ObjectUtils.isObject(obj)) {
|
|
118
|
+
Object.keys(obj)
|
|
119
|
+
.filter((key) => obj[key] !== undefined)
|
|
120
|
+
.forEach((key) => {
|
|
121
|
+
if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {
|
|
122
|
+
output[key] = ObjectUtils.removeUndefined(obj[key]);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
output[key] = obj[key];
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return output;
|
|
129
|
+
}
|
|
130
|
+
if (Array.isArray(obj)) {
|
|
131
|
+
return obj.map((o) => ObjectUtils.removeUndefined(o));
|
|
132
|
+
}
|
|
133
|
+
return obj;
|
|
134
|
+
}
|
|
135
|
+
static removeNull(obj) {
|
|
136
|
+
const output = {};
|
|
137
|
+
if (ObjectUtils.isObject(obj)) {
|
|
138
|
+
Object.keys(obj)
|
|
139
|
+
.filter((key) => obj[key] !== null)
|
|
140
|
+
.forEach((key) => {
|
|
141
|
+
if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {
|
|
142
|
+
output[key] = ObjectUtils.removeNull(obj[key]);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
output[key] = obj[key];
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return output;
|
|
149
|
+
}
|
|
150
|
+
if (Array.isArray(obj)) {
|
|
151
|
+
return obj.map((o) => ObjectUtils.removeNull(o));
|
|
152
|
+
}
|
|
153
|
+
return obj;
|
|
154
|
+
}
|
|
155
|
+
static naturalCompare(a, b, direction = 'asc', nullsFirst) {
|
|
156
|
+
if (direction === 'desc') {
|
|
157
|
+
b = [a, (a = b)][0];
|
|
158
|
+
}
|
|
159
|
+
// nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'
|
|
160
|
+
// nullsFirst = true : always first
|
|
161
|
+
// nullsFirst = false : always end
|
|
162
|
+
if (a === null ||
|
|
163
|
+
a === '' ||
|
|
164
|
+
a === undefined ||
|
|
165
|
+
b === null ||
|
|
166
|
+
b === '' ||
|
|
167
|
+
b === undefined) {
|
|
168
|
+
const nullScore = a === b
|
|
169
|
+
? 0
|
|
170
|
+
: a === undefined
|
|
171
|
+
? 3
|
|
172
|
+
: b === undefined
|
|
173
|
+
? -3
|
|
174
|
+
: a === null
|
|
175
|
+
? 2
|
|
176
|
+
: b === null
|
|
177
|
+
? -2
|
|
178
|
+
: a === ''
|
|
179
|
+
? 1
|
|
180
|
+
: -1;
|
|
181
|
+
if (direction === 'desc') {
|
|
182
|
+
return nullsFirst !== false ? nullScore : nullScore * -1;
|
|
183
|
+
}
|
|
184
|
+
return nullsFirst === true ? nullScore * -1 : nullScore;
|
|
185
|
+
}
|
|
186
|
+
const ax = [];
|
|
187
|
+
const bx = [];
|
|
188
|
+
a = '' + a;
|
|
189
|
+
b = '' + b;
|
|
190
|
+
a.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
|
|
191
|
+
ax.push([$1 || Infinity, $2 || '']);
|
|
192
|
+
});
|
|
193
|
+
b.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
|
|
194
|
+
bx.push([$1 || Infinity, $2 || '']);
|
|
195
|
+
});
|
|
196
|
+
while (ax.length && bx.length) {
|
|
197
|
+
const an = ax.shift();
|
|
198
|
+
const bn = bx.shift();
|
|
199
|
+
const nn = an[0] - bn[0] || an[1].localeCompare(bn[1]);
|
|
200
|
+
if (nn) {
|
|
201
|
+
return nn;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return ax.length - bx.length;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Return true if two object are equivalent.
|
|
208
|
+
* Objects are considered equivalent if they have the same properties and
|
|
209
|
+
* if all of their properties (first-level only) share the same value.
|
|
210
|
+
* @param obj1 First object
|
|
211
|
+
* @param obj2 Second object
|
|
212
|
+
* @returns Whether two objects arer equivalent
|
|
213
|
+
*/
|
|
214
|
+
static objectsAreEquivalent(obj1, obj2) {
|
|
215
|
+
if (obj1 === obj2) {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
const obj1Props = Object.getOwnPropertyNames(obj1);
|
|
219
|
+
const obj2Props = Object.getOwnPropertyNames(obj2);
|
|
220
|
+
if (obj1Props.length !== obj2Props.length) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
for (const prop of obj1Props) {
|
|
224
|
+
if (obj1[prop] !== obj2[prop]) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Return a new object with an array of keys removed
|
|
232
|
+
* @param obj Source object
|
|
233
|
+
* @param keys Keys to remove
|
|
234
|
+
* @returns A new object
|
|
235
|
+
*/
|
|
236
|
+
static removeKeys(obj, keys) {
|
|
237
|
+
const newObj = Object.keys(obj)
|
|
238
|
+
.filter((key) => keys.indexOf(key) < 0)
|
|
239
|
+
.reduce((_obj, key) => {
|
|
240
|
+
_obj[key] = obj[key];
|
|
241
|
+
return _obj;
|
|
242
|
+
}, {});
|
|
243
|
+
return newObj;
|
|
244
|
+
}
|
|
245
|
+
static isEmpty(obj) {
|
|
246
|
+
return Object.keys(obj).length === 0;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdXRpbHMvc3JjL2xpYi9vYmplY3QtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMENBQTBDO0FBQzFDLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBVyxFQUFFLEdBQVc7UUFDckMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEUsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sQ0FDTCxJQUFJO1lBQ0osT0FBTyxJQUFJLEtBQUssUUFBUTtZQUN4QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3BCLElBQUksS0FBSyxJQUFJO1lBQ2IsQ0FBQyxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUNkLE1BQWMsRUFDZCxNQUFjLEVBQ2QsZUFBZSxHQUFHLEtBQUs7UUFFdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7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O2dCQUM5QixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVcsRUFBRSxJQUFjO1FBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQzVCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFVCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdFV0aWxzIHtcbiAgc3RhdGljIHJlc29sdmUob2JqOiBvYmplY3QsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBrZXlzQXJyYXkgPSBrZXkucmVwbGFjZSgvXFxbL2csICcuJykucmVwbGFjZSgvXFxdL2csICcnKS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIHdoaWxlIChrZXlzQXJyYXkubGVuZ3RoKSB7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtrZXlzQXJyYXkuc2hpZnQoKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBzdGF0aWMgaXNPYmplY3QoaXRlbTogb2JqZWN0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0gJiZcbiAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkoaXRlbSkgJiZcbiAgICAgIGl0ZW0gIT09IG51bGwgJiZcbiAgICAgICEoaXRlbSBpbnN0YW5jZW9mIERhdGUpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBtZXJnZURlZXAoXG4gICAgdGFyZ2V0OiBvYmplY3QsXG4gICAgc291cmNlOiBvYmplY3QsXG4gICAgaWdub3JlVW5kZWZpbmVkID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBjb25zdCBvdXRwdXQgPSBPYmplY3QuYXNzaWduKHt9LCB0YXJnZXQpO1xuICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdCh0YXJnZXQpICYmIE9iamVjdFV0aWxzLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSlcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiAhaWdub3JlVW5kZWZpbmVkIHx8IHNvdXJjZVtrZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qoc291cmNlW2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoIShrZXkgaW4gdGFyZ2V0KSkge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG91dHB1dCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXRwdXRba2V5XSA9IE9iamVjdFV0aWxzLm1lcmdlRGVlcChcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSxcbiAgICAgICAgICAgICAgICBzb3VyY2Vba2V5XSxcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmRlZmluZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBzdGF0aWMgY29weURlZXAoc3JjKTogYW55IHtcbiAgICBjb25zdCB0YXJnZXQgPSBBcnJheS5pc0FycmF5KHNyYykgPyBbXSA6IHt9O1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcbiAgICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzcmNbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdGhpcy5jb3B5RGVlcCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIHN0YXRpYyByZW1vdmVEdXBsaWNhdGVDYXNlSW5zZW5zaXRpdmUob2JqOiBvYmplY3QpIHtcbiAgICBjb25zdCBzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdCA9IHt9O1xuICAgIGNvbnN0IGNhcGl0YWxpemVPYmplY3QgPSB7fTtcbiAgICBjb25zdCB1cHBlckNhc2VDb3VudCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgIGNvbnN0IHVwcGVyQ2FzZVByb3BlcnR5ID0gcHJvcGVydHkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKCFzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eSh1cHBlckNhc2VQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdFt1cHBlckNhc2VQcm9wZXJ0eV0gPSBbXG4gICAgICAgICAgICB7IFtwcm9wZXJ0eV06IG9ialtwcm9wZXJ0eV0gfVxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VtbWFyeUNhcGl0YWxpemVPYmplY3RbdXBwZXJDYXNlUHJvcGVydHldLnB1c2goe1xuICAgICAgICAgICAgW3Byb3BlcnR5XTogb2JqW3Byb3BlcnR5XVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdXBwZXJjYXNlIGxldHRlcnNNbmFcbiAgICAgICAgdXBwZXJDYXNlQ291bnQucHVzaCh7XG4gICAgICAgICAga2V5OiBwcm9wZXJ0eSxcbiAgICAgICAgICBjb3VudDogcHJvcGVydHkucmVwbGFjZSgvW15BLVpdL2csICcnKS5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2FwaXRhbGl6ZWRQcm9wZXJ0eSBpbiBzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdCkge1xuICAgICAgaWYgKHN1bW1hcnlDYXBpdGFsaXplT2JqZWN0Lmhhc093blByb3BlcnR5KGNhcGl0YWxpemVkUHJvcGVydHkpKSB7XG4gICAgICAgIGlmIChzdW1tYXJ5Q2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eShjYXBpdGFsaXplZFByb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnN0IGNhcGl0YWxpemVkUHJvcGVydHlPYmplY3QgPVxuICAgICAgICAgICAgc3VtbWFyeUNhcGl0YWxpemVPYmplY3RbY2FwaXRhbGl6ZWRQcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKGNhcGl0YWxpemVkUHJvcGVydHlPYmplY3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBmb3Igc2luZ2xlIHBhcmFtcyAobm8gZHVwbGljYXRlcylcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVBvc3NpYmlsaXR5ID0gY2FwaXRhbGl6ZWRQcm9wZXJ0eU9iamVjdFswXTtcbiAgICAgICAgICAgIGNhcGl0YWxpemVPYmplY3RbY2FwaXRhbGl6ZWRQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICBzaW5nbGVQb3NzaWJpbGl0eVtPYmplY3Qua2V5cyhzaW5nbGVQb3NzaWJpbGl0eSlbMF1dO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2FwaXRhbGl6ZWRQcm9wZXJ0eU9iamVjdC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyBkZWZpbmluZyB0aGUgY2xvc2VzdCB0byBsb3dlcmNhc2UgcHJvcGVydHlcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtQ2xvc2VzdFRvTG93ZXJjYXNlID0gdXBwZXJDYXNlQ291bnRcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZikgPT4gZi5rZXkudG9Mb3dlckNhc2UoKSA9PT0gY2FwaXRhbGl6ZWRQcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2LnkgPCBjdXJyZW50LnkgPyBwcmV2IDogY3VycmVudDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXBpdGFsaXplT2JqZWN0W3BhcmFtQ2xvc2VzdFRvTG93ZXJjYXNlLmtleS50b1VwcGVyQ2FzZSgpXSA9XG4gICAgICAgICAgICAgIG9ialtwYXJhbUNsb3Nlc3RUb0xvd2VyY2FzZS5rZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgZGVsZXRlIG9ialtwcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBjYXBpdGFsaXplT2JqZWN0KSB7XG4gICAgICBpZiAoY2FwaXRhbGl6ZU9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IGNhcGl0YWxpemVPYmplY3RbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyByZW1vdmVVbmRlZmluZWQob2JqOiBvYmplY3QpOiBhbnkge1xuICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChvYmopKSB7XG4gICAgICBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4gb2JqW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChvYmpba2V5XSkgfHwgQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKG9ialtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmoubWFwKChvKSA9PiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQobykpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBzdGF0aWMgcmVtb3ZlTnVsbChvYmo6IG9iamVjdCk6IGFueSB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgaWYgKE9iamVjdFV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBvYmpba2V5XSAhPT0gbnVsbClcbiAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChvYmpba2V5XSkgfHwgQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gT2JqZWN0VXRpbHMucmVtb3ZlTnVsbChvYmpba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICByZXR1cm4gb2JqLm1hcCgobykgPT4gT2JqZWN0VXRpbHMucmVtb3ZlTnVsbChvKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHN0YXRpYyBuYXR1cmFsQ29tcGFyZShhLCBiLCBkaXJlY3Rpb24gPSAnYXNjJywgbnVsbHNGaXJzdD86IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgIGIgPSBbYSwgKGEgPSBiKV1bMF07XG4gICAgfVxuXG4gICAgLy8gbnVsbHNGaXJzdCA9IHVuZGVmaW5lZCA6IGVuZCBpZiBkaXJlY3Rpb24gPSAnYXNjJywgZmlyc3QgaWYgZGlyZWN0aW9uID0gJ2Rlc2MnXG4gICAgLy8gbnVsbHNGaXJzdCA9IHRydWUgOiBhbHdheXMgZmlyc3RcbiAgICAvLyBudWxsc0ZpcnN0ID0gZmFsc2UgOiBhbHdheXMgZW5kXG4gICAgaWYgKFxuICAgICAgYSA9PT0gbnVsbCB8fFxuICAgICAgYSA9PT0gJycgfHxcbiAgICAgIGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgYiA9PT0gbnVsbCB8fFxuICAgICAgYiA9PT0gJycgfHxcbiAgICAgIGIgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgbnVsbFNjb3JlID1cbiAgICAgICAgYSA9PT0gYlxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogYSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDNcbiAgICAgICAgICAgIDogYiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gLTNcbiAgICAgICAgICAgICAgOiBhID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgICAgOiBiID09PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IC0yXG4gICAgICAgICAgICAgICAgICA6IGEgPT09ICcnXG4gICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIHJldHVybiBudWxsc0ZpcnN0ICE9PSBmYWxzZSA/IG51bGxTY29yZSA6IG51bGxTY29yZSAqIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxzRmlyc3QgPT09IHRydWUgPyBudWxsU2NvcmUgKiAtMSA6IG51bGxTY29yZTtcbiAgICB9XG5cbiAgICBjb25zdCBheCA9IFtdO1xuICAgIGNvbnN0IGJ4ID0gW107XG4gICAgYSA9ICcnICsgYTtcbiAgICBiID0gJycgKyBiO1xuXG4gICAgYS5yZXBsYWNlKC8oXFxkKyl8KFxcRCspL2csIChfLCAkMSwgJDIpID0+IHtcbiAgICAgIGF4LnB1c2goWyQxIHx8IEluZmluaXR5LCAkMiB8fCAnJ10pO1xuICAgIH0pO1xuXG4gICAgYi5yZXBsYWNlKC8oXFxkKyl8KFxcRCspL2csIChfLCAkMSwgJDIpID0+IHtcbiAgICAgIGJ4LnB1c2goWyQxIHx8IEluZmluaXR5LCAkMiB8fCAnJ10pO1xuICAgIH0pO1xuXG4gICAgd2hpbGUgKGF4Lmxlbmd0aCAmJiBieC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFuID0gYXguc2hpZnQoKTtcbiAgICAgIGNvbnN0IGJuID0gYnguc2hpZnQoKTtcbiAgICAgIGNvbnN0IG5uID0gYW5bMF0gLSBiblswXSB8fCBhblsxXS5sb2NhbGVDb21wYXJlKGJuWzFdKTtcbiAgICAgIGlmIChubikge1xuICAgICAgICByZXR1cm4gbm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4Lmxlbmd0aCAtIGJ4Lmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0d28gb2JqZWN0IGFyZSBlcXVpdmFsZW50LlxuICAgKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMgYW5kXG4gICAqIGlmIGFsbCBvZiB0aGVpciBwcm9wZXJ0aWVzIChmaXJzdC1sZXZlbCBvbmx5KSBzaGFyZSB0aGUgc2FtZSB2YWx1ZS5cbiAgICogQHBhcmFtIG9iajEgRmlyc3Qgb2JqZWN0XG4gICAqIEBwYXJhbSBvYmoyIFNlY29uZCBvYmplY3RcbiAgICogQHJldHVybnMgV2hldGhlciB0d28gb2JqZWN0cyBhcmVyIGVxdWl2YWxlbnRcbiAgICovXG4gIHN0YXRpYyBvYmplY3RzQXJlRXF1aXZhbGVudChvYmoxOiBvYmplY3QsIG9iajI6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGlmIChvYmoxID09PSBvYmoyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBvYmoxUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmoxKTtcbiAgICBjb25zdCBvYmoyUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmoyKTtcbiAgICBpZiAob2JqMVByb3BzLmxlbmd0aCAhPT0gb2JqMlByb3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBvYmoxUHJvcHMpIHtcbiAgICAgIGlmIChvYmoxW3Byb3BdICE9PSBvYmoyW3Byb3BdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBuZXcgb2JqZWN0IHdpdGggYW4gYXJyYXkgb2Yga2V5cyByZW1vdmVkXG4gICAqIEBwYXJhbSBvYmogU291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0ga2V5cyBLZXlzIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyBBIG5ldyBvYmplY3RcbiAgICovXG4gIHN0YXRpYyByZW1vdmVLZXlzKG9iajogb2JqZWN0LCBrZXlzOiBzdHJpbmdbXSk6IG9iamVjdCB7XG4gICAgY29uc3QgbmV3T2JqID0gT2JqZWN0LmtleXMob2JqKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXlzLmluZGV4T2Yoa2V5KSA8IDApXG4gICAgICAucmVkdWNlKChfb2JqLCBrZXkpID0+IHtcbiAgICAgICAgX29ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgIHJldHVybiBfb2JqO1xuICAgICAgfSwge30pO1xuXG4gICAgcmV0dXJuIG5ld09iajtcbiAgfVxuXG4gIHN0YXRpYyBpc0VtcHR5KG9iajogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Utility function to create a K:V from a list of strings */
|
|
2
|
+
export function strEnum(o) {
|
|
3
|
+
return o.reduce((res, key) => {
|
|
4
|
+
res[key] = key;
|
|
5
|
+
return res;
|
|
6
|
+
}, Object.create(null));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvc3RyZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLE9BQU8sQ0FBbUIsQ0FBTTtJQUM5QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDM0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgSzpWIGZyb20gYSBsaXN0IG9mIHN0cmluZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJFbnVtPFQgZXh0ZW5kcyBzdHJpbmc+KG86IFRbXSk6IHsgW0sgaW4gVF06IEsgfSB7XG4gIHJldHVybiBvLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcbiAgICByZXNba2V5XSA9IGtleTtcbiAgICByZXR1cm4gcmVzO1xuICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export class StringUtils {
|
|
2
|
+
static diff(s1, s2, p = 4) {
|
|
3
|
+
if (!s1 && !s2) {
|
|
4
|
+
return '';
|
|
5
|
+
}
|
|
6
|
+
if (!s1) {
|
|
7
|
+
return '<span class="inserted">' + s2 + '</span>';
|
|
8
|
+
}
|
|
9
|
+
if (!s2) {
|
|
10
|
+
return '<span class="deleted">' + s1 + '</span>';
|
|
11
|
+
}
|
|
12
|
+
s1 = s1.toString();
|
|
13
|
+
s2 = s2.toString();
|
|
14
|
+
const changeData = StringUtils.getChanges(s1, s2, '', p);
|
|
15
|
+
const nextS = s2.slice(changeData.mtc.length + changeData.ins.length + changeData.sbs.length); // remaining part of "s"
|
|
16
|
+
const nextThis = s1.slice(changeData.mtc.length + changeData.del.length + changeData.sbs.length); // remaining part of "this"
|
|
17
|
+
let result = ''; // the glorious result
|
|
18
|
+
if (changeData.del.length > 0) {
|
|
19
|
+
changeData.del = '<span class="deleted">' + changeData.del + '</span>';
|
|
20
|
+
}
|
|
21
|
+
if (changeData.ins.length > 0) {
|
|
22
|
+
changeData.ins = '<span class="inserted">' + changeData.ins + '</span>';
|
|
23
|
+
}
|
|
24
|
+
result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;
|
|
25
|
+
result +=
|
|
26
|
+
nextThis !== '' || nextS !== ''
|
|
27
|
+
? StringUtils.diff(nextThis, nextS, p)
|
|
28
|
+
: '';
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
static getMatchingSubstring(s, l, m) {
|
|
32
|
+
// returns the first matching substring in-between the two strings
|
|
33
|
+
let i = 0;
|
|
34
|
+
let match = false;
|
|
35
|
+
const slen = s.length;
|
|
36
|
+
const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object
|
|
37
|
+
while (i < slen) {
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
39
|
+
l[i] === s[i]
|
|
40
|
+
? match
|
|
41
|
+
? (o.sbs += s[i]) // o.sbs holds the matching substring itsef
|
|
42
|
+
: ((match = true), (o.fis = i), (o.sbs = s[i]))
|
|
43
|
+
: match
|
|
44
|
+
? (i = slen) // stop after the first found substring
|
|
45
|
+
: // eslint-disable-next-line no-self-assign
|
|
46
|
+
(i = i);
|
|
47
|
+
++i;
|
|
48
|
+
}
|
|
49
|
+
return o;
|
|
50
|
+
}
|
|
51
|
+
static getChanges(s1, s2, m, p) {
|
|
52
|
+
const isThisLonger = s1.length >= s1.length ? true : false;
|
|
53
|
+
let [longer, shorter] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring
|
|
54
|
+
let bi = 0; // base index designating the index of first mismacthing character in both strings
|
|
55
|
+
while (shorter[bi] === longer[bi] && bi < shorter.length) {
|
|
56
|
+
++bi;
|
|
57
|
+
} // make bi the index of first mismatching character
|
|
58
|
+
longer = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array
|
|
59
|
+
shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character
|
|
60
|
+
const len = longer.length; // length of the longer string
|
|
61
|
+
let cd = {
|
|
62
|
+
fis: shorter.length, // the index of matching string in the shorter string
|
|
63
|
+
fil: len, // the index of matching string in the longer string
|
|
64
|
+
sbs: '', // the matching substring itself
|
|
65
|
+
mtc: m + s2.slice(0, bi)
|
|
66
|
+
}; // if exists mtc holds the matching string at the front
|
|
67
|
+
let sub = { sbs: '' }; // returned substring per 1 character rotation of the longer string
|
|
68
|
+
if (shorter !== '') {
|
|
69
|
+
for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {
|
|
70
|
+
// rc -> rotate count, p -> precision factor
|
|
71
|
+
sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(longer, rc), cd.mtc); // rotate longer string 1 char and get substring
|
|
72
|
+
sub.fil =
|
|
73
|
+
rc < len - sub.fis
|
|
74
|
+
? sub.fis + rc // mismatch is longer than the mismatch in short
|
|
75
|
+
: sub.fis - len + rc; // mismatch is shorter than the mismatch in short
|
|
76
|
+
if (sub.sbs.length > cd.sbs.length) {
|
|
77
|
+
cd = sub; // only keep the one with the longest substring.
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring
|
|
82
|
+
[cd.del, cd.ins] = isThisLonger
|
|
83
|
+
? [longer.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]
|
|
84
|
+
: [shorter.slice(0, cd.fis), longer.slice(0, cd.fil).join('')];
|
|
85
|
+
return cd.del.indexOf(' ') === -1 ||
|
|
86
|
+
cd.ins.indexOf(' ') === -1 ||
|
|
87
|
+
cd.del === '' ||
|
|
88
|
+
cd.ins === '' ||
|
|
89
|
+
cd.sbs === ''
|
|
90
|
+
? cd
|
|
91
|
+
: StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);
|
|
92
|
+
}
|
|
93
|
+
static rotateArray(array, n) {
|
|
94
|
+
const len = array.length;
|
|
95
|
+
const res = new Array(array.length);
|
|
96
|
+
if (n % len === 0) {
|
|
97
|
+
return array.slice();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
for (let i = 0; i < len; i++) {
|
|
101
|
+
res[i] = array[(i + (len + (n % len))) % len];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return res;
|
|
105
|
+
}
|
|
106
|
+
static isValidNumber(value) {
|
|
107
|
+
return !isNaN(Number(value));
|
|
108
|
+
}
|
|
109
|
+
static isOctalNumber(value) {
|
|
110
|
+
return (StringUtils.isValidNumber(value) &&
|
|
111
|
+
value.startsWith('0') &&
|
|
112
|
+
value.length > 1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdXRpbHMvc3JjL2xpYi9zdHJpbmctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVc7SUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU8seUJBQXlCLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsT0FBTyx3QkFBd0IsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ25ELENBQUM7UUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUNwQixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDdEUsQ0FBQyxDQUFDLHdCQUF3QjtRQUMzQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxD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QUMsTUFBTSxHQUFHLENBQUMsQ0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTdHJpbmdVdGlscyB7XG4gIHN0YXRpYyBkaWZmKHMxOiBzdHJpbmcsIHMyOiBzdHJpbmcsIHAgPSA0KTogc3RyaW5nIHtcbiAgICBpZiAoIXMxICYmICFzMikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAoIXMxKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwiaW5zZXJ0ZWRcIj4nICsgczIgKyAnPC9zcGFuPic7XG4gICAgfVxuICAgIGlmICghczIpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJkZWxldGVkXCI+JyArIHMxICsgJzwvc3Bhbj4nO1xuICAgIH1cbiAgICBzMSA9IHMxLnRvU3RyaW5nKCk7XG4gICAgczIgPSBzMi50b1N0cmluZygpO1xuICAgIGNvbnN0IGNoYW5nZURhdGEgPSBTdHJpbmdVdGlscy5nZXRDaGFuZ2VzKHMxLCBzMiwgJycsIHApO1xuICAgIGNvbnN0IG5leHRTID0gczIuc2xpY2UoXG4gICAgICBjaGFuZ2VEYXRhLm10Yy5sZW5ndGggKyBjaGFuZ2VEYXRhLmlucy5sZW5ndGggKyBjaGFuZ2VEYXRhLnNicy5sZW5ndGhcbiAgICApOyAvLyByZW1haW5pbmcgcGFydCBvZiBcInNcIlxuICAgIGNvbnN0IG5leHRUaGlzID0gczEuc2xpY2UoXG4gICAgICBjaGFuZ2VEYXRhLm10Yy5sZW5ndGggKyBjaGFuZ2VEYXRhLmRlbC5sZW5ndGggKyBjaGFuZ2VEYXRhLnNicy5sZW5ndGhcbiAgICApOyAvLyByZW1haW5pbmcgcGFydCBvZiBcInRoaXNcIlxuICAgIGxldCByZXN1bHQgPSAnJzsgLy8gdGhlIGdsb3Jpb3VzIHJlc3VsdFxuICAgIGlmIChjaGFuZ2VEYXRhLmRlbC5sZW5ndGggPiAwKSB7XG4gICAgICBjaGFuZ2VEYXRhLmRlbCA9ICc8c3BhbiBjbGFzcz1cImRlbGV0ZWRcIj4nICsgY2hhbmdlRGF0YS5kZWwgKyAnPC9zcGFuPic7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VEYXRhLmlucy5sZW5ndGggPiAwKSB7XG4gICAgICBjaGFuZ2VEYXRhLmlucyA9ICc8c3BhbiBjbGFzcz1cImluc2VydGVkXCI+JyArIGNoYW5nZURhdGEuaW5zICsgJzwvc3Bhbj4nO1xuICAgIH1cbiAgICByZXN1bHQgPSBjaGFuZ2VEYXRhLm10YyArIGNoYW5nZURhdGEuZGVsICsgY2hhbmdlRGF0YS5pbnMgKyBjaGFuZ2VEYXRhLnNicztcbiAgICByZXN1bHQgKz1cbiAgICAgIG5leHRUaGlzICE9PSAnJyB8fCBuZXh0UyAhPT0gJydcbiAgICAgICAgPyBTdHJpbmdVdGlscy5kaWZmKG5leHRUaGlzLCBuZXh0UywgcClcbiAgICAgICAgOiAnJztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TWF0Y2hpbmdTdWJzdHJpbmcocywgbCwgbSkge1xuICAgIC8vIHJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YnN0cmluZyBpbi1iZXR3ZWVuIHRoZSB0d28gc3RyaW5nc1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBzbGVuID0gcy5sZW5ndGg7XG4gICAgY29uc3QgbyA9IHsgZmlzOiBzbGVuLCBtdGM6IG0sIHNiczogJycgfTsgLy8gdGVtcG9yYXJ5IG9iamVjdCB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgY2QgKGNoYW5nZSBkYXRhKSBvYmplY3RcblxuICAgIHdoaWxlIChpIDwgc2xlbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIGxbaV0gPT09IHNbaV1cbiAgICAgICAgPyBtYXRjaFxuICAgICAgICAgID8gKG8uc2JzICs9IHNbaV0pIC8vIG8uc2JzIGhvbGRzIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcgaXRzZWZcbiAgICAgICAgICA6ICgobWF0Y2ggPSB0cnVlKSwgKG8uZmlzID0gaSksIChvLnNicyA9IHNbaV0pKVxuICAgICAgICA6IG1hdGNoXG4gICAgICAgICAgPyAoaSA9IHNsZW4pIC8vIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGZvdW5kIHN1YnN0cmluZ1xuICAgICAgICAgIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgICAgICAgICAoaSA9IGkpO1xuICAgICAgKytpO1xuICAgIH1cbiAgICByZXR1cm4gbztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldENoYW5nZXMoczEsIHMyLCBtLCBwKSB7XG4gICAgY29uc3QgaXNUaGlzTG9uZ2VyID0gczEubGVuZ3RoID49IHMxLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICBsZXQgW2xvbmdlciwgc2hvcnRlcl0gPSBpc1RoaXNMb25nZXIgPyBbczEsIHMyXSA6IFtzMiwgczFdOyAvLyBhc3NpZ25tZW50IG9mIGxvbmdlciBhbmQgc2hvcnRlciBieSBlczYgZGVzdHJ1Y3R1cmluZ1xuICAgIGxldCBiaSA9IDA7IC8vIGJhc2UgaW5kZXggZGVzaWduYXRpbmcgdGhlIGluZGV4IG9mIGZpcnN0IG1pc21hY3RoaW5nIGNoYXJhY3RlciBpbiBib3RoIHN0cmluZ3NcblxuICAgIHdoaWxlIChzaG9ydGVyW2JpXSA9PT0gbG9uZ2VyW2JpXSAmJiBiaSA8IHNob3J0ZXIubGVuZ3RoKSB7XG4gICAgICArK2JpO1xuICAgIH0gLy8gbWFrZSBiaSB0aGUgaW5kZXggb2YgZmlyc3QgbWlzbWF0Y2hpbmcgY2hhcmFjdGVyXG4gICAgbG9uZ2VyID0gbG9uZ2VyLnNwbGl0KCcnKS5zbGljZShiaSk7IC8vIGFzIHRoZSBsb25nZXIgc3RyaW5nIHdpbGwgYmUgcm90YXRlZCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhcnJheVxuICAgIHNob3J0ZXIgPSBzaG9ydGVyLnNsaWNlKGJpKTsgLy8gc2hvcnRlciBhbmQgbG9uZ2VyIG5vdyBzdGFydHMgZnJvbSB0aGUgZmlyc3QgbWlzbWF0Y2hpbmcgY2hhcmFjdGVyXG5cbiAgICBjb25zdCBsZW4gPSBsb25nZXIubGVuZ3RoOyAvLyBsZW5ndGggb2YgdGhlIGxvbmdlciBzdHJpbmdcbiAgICBsZXQgY2Q6IGFueSA9IHtcbiAgICAgIGZpczogc2hvcnRlci5sZW5ndGgsIC8vIHRoZSBpbmRleCBvZiBtYXRjaGluZyBzdHJpbmcgaW4gdGhlIHNob3J0ZXIgc3RyaW5nXG4gICAgICBmaWw6IGxlbiwgLy8gdGhlIGluZGV4IG9mIG1hdGNoaW5nIHN0cmluZyBpbiB0aGUgbG9uZ2VyIHN0cmluZ1xuICAgICAgc2JzOiAnJywgLy8gdGhlIG1hdGNoaW5nIHN1YnN0cmluZyBpdHNlbGZcbiAgICAgIG10YzogbSArIHMyLnNsaWNlKDAsIGJpKVxuICAgIH07IC8vIGlmIGV4aXN0cyBtdGMgaG9sZHMgdGhlIG1hdGNoaW5nIHN0cmluZyBhdCB0aGUgZnJvbnRcbiAgICBsZXQgc3ViOiBhbnkgPSB7IHNiczogJycgfTsgLy8gcmV0dXJuZWQgc3Vic3RyaW5nIHBlciAxIGNoYXJhY3RlciByb3RhdGlvbiBvZiB0aGUgbG9uZ2VyIHN0cmluZ1xuXG4gICAgaWYgKHNob3J0ZXIgIT09ICcnKSB7XG4gICAgICBmb3IgKGxldCByYyA9IDA7IHJjIDwgbGVuICYmIHN1Yi5zYnMubGVuZ3RoIDwgcDsgcmMrKykge1xuICAgICAgICAvLyByYyAtPiByb3RhdGUgY291bnQsIHAgLT4gcHJlY2lzaW9uIGZhY3RvclxuICAgICAgICBzdWIgPSBTdHJpbmdVdGlscy5nZXRNYXRjaGluZ1N1YnN0cmluZyhcbiAgICAgICAgICBzaG9ydGVyLFxuICAgICAgICAgIFN0cmluZ1V0aWxzLnJvdGF0ZUFycmF5KGxvbmdlciwgcmMpLFxuICAgICAgICAgIGNkLm10Y1xuICAgICAgICApOyAvLyByb3RhdGUgbG9uZ2VyIHN0cmluZyAxIGNoYXIgYW5kIGdldCBzdWJzdHJpbmdcbiAgICAgICAgc3ViLmZpbCA9XG4gICAgICAgICAgcmMgPCBsZW4gLSBzdWIuZmlzXG4gICAgICAgICAgICA/IHN1Yi5maXMgKyByYyAvLyBtaXNtYXRjaCBpcyBsb25nZXIgdGhhbiB0aGUgbWlzbWF0Y2ggaW4gc2hvcnRcbiAgICAgICAgICAgIDogc3ViLmZpcyAtIGxlbiArIHJjOyAvLyBtaXNtYXRjaCBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pc21hdGNoIGluIHNob3J0XG4gICAgICAgIGlmIChzdWIuc2JzLmxlbmd0aCA+IGNkLnNicy5sZW5ndGgpIHtcbiAgICAgICAgICBjZCA9IHN1YjsgLy8gb25seSBrZWVwIHRoZSBvbmUgd2l0aCB0aGUgbG9uZ2VzdCBzdWJzdHJpbmcuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gaW5zZXJ0IHRoZSBtaXNtYXRjaGluZyBkZWxldGUgc3Vic3J0IGFuZCBpbnNlcnQgc3Vic3RyIHRvIHRoZSBjZCBvYmplY3QgYW5kIGF0dGFjaCB0aGUgcHJldmlvdXMgc3Vic3RyaW5nXG4gICAgW2NkLmRlbCwgY2QuaW5zXSA9IGlzVGhpc0xvbmdlclxuICAgICAgPyBbbG9uZ2VyLnNsaWNlKDAsIGNkLmZpbCkuam9pbignJyksIHNob3J0ZXIuc2xpY2UoMCwgY2QuZmlzKV1cbiAgICAgIDogW3Nob3J0ZXIuc2xpY2UoMCwgY2QuZmlzKSwgbG9uZ2VyLnNsaWNlKDAsIGNkLmZpbCkuam9pbignJyldO1xuICAgIHJldHVybiBjZC5kZWwuaW5kZXhPZignICcpID09PSAtMSB8fFxuICAgICAgY2QuaW5zLmluZGV4T2YoJyAnKSA9PT0gLTEgfHxcbiAgICAgIGNkLmRlbCA9PT0gJycgfHxcbiAgICAgIGNkLmlucyA9PT0gJycgfHxcbiAgICAgIGNkLnNicyA9PT0gJydcbiAgICAgID8gY2RcbiAgICAgIDogU3RyaW5nVXRpbHMuZ2V0Q2hhbmdlcyhjZC5kZWwsIGNkLmlucywgY2QubXRjLCBwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJvdGF0ZUFycmF5KGFycmF5LCBuKSB7XG4gICAgY29uc3QgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheShhcnJheS5sZW5ndGgpO1xuICAgIGlmIChuICUgbGVuID09PSAwKSB7XG4gICAgICByZXR1cm4gYXJyYXkuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICByZXNbaV0gPSBhcnJheVsoaSArIChsZW4gKyAobiAlIGxlbikpKSAlIGxlbl07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZE51bWJlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyBpc09jdGFsTnVtYmVyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoJzAnKSAmJlxuICAgICAgdmFsdWUubGVuZ3RoID4gMVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DomUtils } from './dom.utils';
|
|
2
|
+
const PATH_PREBUILT_THEMES = 'assets/igo2/core/theming/prebuilt-themes';
|
|
3
|
+
const LINK_ID = 'theme-styles';
|
|
4
|
+
export function loadTheme(doc, themeName, path = PATH_PREBUILT_THEMES) {
|
|
5
|
+
const src = `${path}/${themeName}.css`;
|
|
6
|
+
const head = doc.getElementsByTagName('head')[0];
|
|
7
|
+
const themeLink = doc.getElementById(LINK_ID);
|
|
8
|
+
if (themeLink) {
|
|
9
|
+
themeLink.href = src;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
createHtmlLink(doc, src, head);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function createHtmlLink(doc, src, parent) {
|
|
16
|
+
const element = DomUtils.create(doc, 'link', {
|
|
17
|
+
id: LINK_ID,
|
|
18
|
+
rel: 'stylesheet',
|
|
19
|
+
href: src
|
|
20
|
+
});
|
|
21
|
+
parent.appendChild(element);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlscy9zcmMvbGliL3RoZW1lLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxvQkFBb0IsR0FBRywwQ0FBMEMsQ0FBQztBQUN4RSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7QUFFL0IsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsR0FBYSxFQUNiLFNBQWlCLEVBQ2pCLE9BQWUsb0JBQW9CO0lBRW5DLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLFNBQVMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQztJQUVqRSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDTixjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQWEsRUFBRSxHQUFXLEVBQUUsTUFBbUI7SUFDckUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO1FBQzNDLEVBQUUsRUFBRSxPQUFPO1FBQ1gsR0FBRyxFQUFFLFlBQVk7UUFDakIsSUFBSSxFQUFFLEdBQUc7S0FDVixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21VdGlscyB9IGZyb20gJy4vZG9tLnV0aWxzJztcblxuY29uc3QgUEFUSF9QUkVCVUlMVF9USEVNRVMgPSAnYXNzZXRzL2lnbzIvY29yZS90aGVtaW5nL3ByZWJ1aWx0LXRoZW1lcyc7XG5jb25zdCBMSU5LX0lEID0gJ3RoZW1lLXN0eWxlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVGhlbWUoXG4gIGRvYzogRG9jdW1lbnQsXG4gIHRoZW1lTmFtZTogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcgPSBQQVRIX1BSRUJVSUxUX1RIRU1FU1xuKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGAke3BhdGh9LyR7dGhlbWVOYW1lfS5jc3NgO1xuICBjb25zdCBoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbiAgY29uc3QgdGhlbWVMaW5rID0gZG9jLmdldEVsZW1lbnRCeUlkKExJTktfSUQpIGFzIEhUTUxMaW5rRWxlbWVudDtcblxuICBpZiAodGhlbWVMaW5rKSB7XG4gICAgdGhlbWVMaW5rLmhyZWYgPSBzcmM7XG4gIH0gZWxzZSB7XG4gICAgY3JlYXRlSHRtbExpbmsoZG9jLCBzcmMsIGhlYWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUh0bWxMaW5rKGRvYzogRG9jdW1lbnQsIHNyYzogc3RyaW5nLCBwYXJlbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBEb21VdGlscy5jcmVhdGUoZG9jLCAnbGluaycsIHtcbiAgICBpZDogTElOS19JRCxcbiAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICBocmVmOiBzcmNcbiAgfSk7XG4gIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './tree';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlscy9zcmMvbGliL3RyZWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RyZWUnO1xuIl19
|