jsonschema-key-compression 1.6.1 → 2.0.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 (49) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +65 -5
  3. package/dist/es/compress.d.ts +3 -1
  4. package/dist/es/compress.js +164 -26
  5. package/dist/es/compress.js.map +1 -1
  6. package/dist/es/create-compressed-json-schema.d.ts +9 -0
  7. package/dist/es/create-compressed-json-schema.js +136 -26
  8. package/dist/es/create-compressed-json-schema.js.map +1 -1
  9. package/dist/es/create-compression-table.d.ts +7 -1
  10. package/dist/es/create-compression-table.js +56 -30
  11. package/dist/es/create-compression-table.js.map +1 -1
  12. package/dist/es/decompress.js +41 -21
  13. package/dist/es/decompress.js.map +1 -1
  14. package/dist/es/enum-compression.d.ts +35 -0
  15. package/dist/es/enum-compression.js +217 -0
  16. package/dist/es/enum-compression.js.map +1 -0
  17. package/dist/es/index.d.ts +1 -1
  18. package/dist/es/index.js.map +1 -1
  19. package/dist/es/types.d.ts +11 -0
  20. package/dist/es/util.d.ts +1 -1
  21. package/dist/es/util.js.map +1 -1
  22. package/dist/lib/compress.d.ts +3 -1
  23. package/dist/lib/compress.js +170 -33
  24. package/dist/lib/compress.js.map +1 -1
  25. package/dist/lib/create-compressed-json-schema.d.ts +9 -0
  26. package/dist/lib/create-compressed-json-schema.js +136 -27
  27. package/dist/lib/create-compressed-json-schema.js.map +1 -1
  28. package/dist/lib/create-compression-table.d.ts +7 -1
  29. package/dist/lib/create-compression-table.js +61 -35
  30. package/dist/lib/create-compression-table.js.map +1 -1
  31. package/dist/lib/decompress.js +44 -25
  32. package/dist/lib/decompress.js.map +1 -1
  33. package/dist/lib/enum-compression.d.ts +35 -0
  34. package/dist/lib/enum-compression.js +223 -0
  35. package/dist/lib/enum-compression.js.map +1 -0
  36. package/dist/lib/index.d.ts +1 -1
  37. package/dist/lib/index.js.map +1 -1
  38. package/dist/lib/types.d.ts +11 -0
  39. package/dist/lib/util.d.ts +1 -1
  40. package/dist/lib/util.js +3 -3
  41. package/dist/lib/util.js.map +1 -1
  42. package/package.json +14 -12
  43. package/src/compress.ts +184 -34
  44. package/src/create-compressed-json-schema.ts +158 -35
  45. package/src/create-compression-table.ts +59 -31
  46. package/src/decompress.ts +42 -27
  47. package/src/enum-compression.ts +240 -0
  48. package/src/index.ts +1 -0
  49. package/src/types.d.ts +11 -0
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compressQuerySelector = exports.compressQuery = exports.compressedAndFlaggedKey = exports.throwErrorIfCompressionFlagUsed = exports.compressedPath = exports.compressObject = void 0;
3
+ exports.compressObject = compressObject;
4
+ exports.compressedPath = compressedPath;
5
+ exports.throwErrorIfCompressionFlagUsed = throwErrorIfCompressionFlagUsed;
6
+ exports.compressedAndFlaggedKey = compressedAndFlaggedKey;
7
+ exports.compressQuery = compressQuery;
8
+ exports.compressQuerySelector = compressQuerySelector;
9
+ var enum_compression_1 = require("./enum-compression");
4
10
  /**
5
11
  * compress the keys of an object via the compression-table
6
12
  * @recursive
@@ -8,23 +14,36 @@ exports.compressQuerySelector = exports.compressQuery = exports.compressedAndFla
8
14
  function compressObject(table, obj) {
9
15
  if (typeof obj !== 'object' || obj === null)
10
16
  return obj;
11
- else if (Array.isArray(obj)) {
17
+ if (Array.isArray(obj)) {
12
18
  // array
13
- return obj
14
- .map(function (item) { return compressObject(table, item); });
19
+ var retArray = new Array(obj.length);
20
+ for (var index = 0; index < obj.length; index++) {
21
+ var item = obj[index];
22
+ // primitives do not need a recursive call
23
+ retArray[index] = (typeof item === 'object' && item !== null) ? compressObject(table, item) : item;
24
+ }
25
+ return retArray;
15
26
  }
16
- else {
17
- // object
18
- var ret_1 = {};
19
- Object.keys(obj).forEach(function (key) {
20
- var compressedKey = compressedAndFlaggedKey(table, key);
21
- var value = compressObject(table, obj[key]);
22
- ret_1[compressedKey] = value;
23
- });
24
- return ret_1;
27
+ // object
28
+ var ret = {};
29
+ var keys = Object.keys(obj);
30
+ var enumCompression = table.enumCompression;
31
+ for (var index = 0; index < keys.length; index++) {
32
+ var key = keys[index];
33
+ var value = obj[key];
34
+ var enumValues = enumCompression && enumCompression.get(key);
35
+ if (enumValues && (typeof value === 'string' || Array.isArray(value))) {
36
+ ret[compressedAndFlaggedKey(table, key)] = (0, enum_compression_1.compressEnumValue)(enumValues, value);
37
+ }
38
+ else {
39
+ // primitives do not need a recursive call
40
+ ret[compressedAndFlaggedKey(table, key)] = (typeof value === 'object' && value !== null) ?
41
+ compressObject(table, value) :
42
+ value;
43
+ }
25
44
  }
45
+ return ret;
26
46
  }
27
- exports.compressObject = compressObject;
28
47
  /**
29
48
  * transform an object-path
30
49
  * into its compressed version
@@ -40,32 +59,52 @@ function compressedPath(table, path) {
40
59
  return compressedKey;
41
60
  }).join('.');
42
61
  }
43
- exports.compressedPath = compressedPath;
44
62
  function throwErrorIfCompressionFlagUsed(table, key) {
45
63
  if (key.startsWith(table.compressionFlag)) {
46
64
  throw new Error('cannot compress objects that start with the compression-flag: ' +
47
65
  table.compressionFlag + ' on key ' + key);
48
66
  }
49
67
  }
50
- exports.throwErrorIfCompressionFlagUsed = throwErrorIfCompressionFlagUsed;
68
+ /**
69
+ * Cache of the flagged compressed keys per table,
70
+ * so that the flag does not have to be concatenated on each use.
71
+ * The cache is keyed by the table object, so a table must not be
72
+ * mutated after it has been used for compression.
73
+ */
74
+ var flaggedKeysCache = new WeakMap();
75
+ function getFlaggedKeys(table) {
76
+ var flaggedKeys = flaggedKeysCache.get(table);
77
+ if (!flaggedKeys) {
78
+ var newFlaggedKeys_1 = new Map();
79
+ table.compressedToUncompressed.forEach(function (compressedKey, key) {
80
+ newFlaggedKeys_1.set(key, table.compressionFlag + compressedKey);
81
+ });
82
+ flaggedKeysCache.set(table, newFlaggedKeys_1);
83
+ flaggedKeys = newFlaggedKeys_1;
84
+ }
85
+ return flaggedKeys;
86
+ }
51
87
  function compressedAndFlaggedKey(table, key) {
52
88
  throwErrorIfCompressionFlagUsed(table, key);
53
89
  /**
54
90
  * keys could be array-accessors like myArray[4]
55
- * we have to split and readd the squared brackets value
91
+ * so the part before the squared bracket is looked up
92
+ * and the bracket part is re-added.
93
+ * Most keys have no bracket, so the plain lookup is the fast path.
56
94
  */
57
- var splitSquaredBrackets = key.split('[');
58
- key = splitSquaredBrackets.shift();
59
- var compressedKey = table.compressedToUncompressed.get(key);
60
- if (!compressedKey) {
61
- return key;
95
+ var flaggedKeys = getFlaggedKeys(table);
96
+ var bracketIndex = key.indexOf('[');
97
+ if (bracketIndex === -1) {
98
+ var directFlaggedKey = flaggedKeys.get(key);
99
+ return directFlaggedKey ? directFlaggedKey : key;
62
100
  }
63
- else {
64
- var readdSquared = splitSquaredBrackets.length ? '[' + splitSquaredBrackets.join('[') : '';
65
- return table.compressionFlag + compressedKey + readdSquared;
101
+ var plainKey = key.slice(0, bracketIndex);
102
+ var flaggedKey = flaggedKeys.get(plainKey);
103
+ if (!flaggedKey) {
104
+ return key;
66
105
  }
106
+ return flaggedKey + key.slice(bracketIndex);
67
107
  }
68
- exports.compressedAndFlaggedKey = compressedAndFlaggedKey;
69
108
  /**
70
109
  * compress a mango-query
71
110
  * so that it can be used to find documents
@@ -115,36 +154,134 @@ function compressQuery(table, query) {
115
154
  }
116
155
  return ret;
117
156
  }
118
- exports.compressQuery = compressQuery;
157
+ /**
158
+ * Operators whose value is a document-value and therefore
159
+ * has to be enum-compressed like the documents themselves.
160
+ * Any other operator, like $type or $mod, gets its value unchanged.
161
+ */
162
+ var ENUM_VALUE_OPERATORS = [
163
+ '$eq',
164
+ '$ne',
165
+ '$gt',
166
+ '$gte',
167
+ '$lt',
168
+ '$lte',
169
+ '$in',
170
+ '$nin',
171
+ '$all',
172
+ '$not',
173
+ '$elemMatch'
174
+ ];
175
+ /**
176
+ * Returns the enum of the property that the path points to,
177
+ * or undefined when that property is not enum-compressed.
178
+ */
179
+ function enumValuesOfPath(table, path) {
180
+ var enumCompression = table.enumCompression;
181
+ if (!enumCompression) {
182
+ return undefined;
183
+ }
184
+ var splitted = path.split('.');
185
+ var lastKey = splitted[splitted.length - 1];
186
+ var bracketIndex = lastKey.indexOf('[');
187
+ if (bracketIndex !== -1) {
188
+ lastKey = lastKey.slice(0, bracketIndex);
189
+ }
190
+ return enumCompression.get(lastKey);
191
+ }
192
+ /**
193
+ * A regular expression cannot run on the compressed number of an enum-value,
194
+ * so it is resolved up front into the indexes of the matching enum-values.
195
+ */
196
+ function enumIndexesOfRegex(enumValues, pattern, options) {
197
+ var source;
198
+ var flags;
199
+ if (pattern instanceof RegExp) {
200
+ source = pattern.source;
201
+ flags = (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '');
202
+ }
203
+ else {
204
+ source = String(pattern);
205
+ flags = '';
206
+ }
207
+ if (typeof options === 'string') {
208
+ flags = options;
209
+ }
210
+ /**
211
+ * The global flags make .test() stateful
212
+ * and are meaningless for a full check of a single value.
213
+ */
214
+ flags = flags.replace(/[gy]/g, '');
215
+ var regex = new RegExp(source, flags);
216
+ var indexes = [];
217
+ for (var i = 0; i < enumValues.length; i++) {
218
+ if (regex.test(enumValues[i])) {
219
+ indexes.push(i);
220
+ }
221
+ }
222
+ return indexes;
223
+ }
119
224
  /**
120
225
  * @recursive
226
+ * @param enumValues The enum of the property that the selector belongs to,
227
+ * so that the compared values can be enum-compressed.
121
228
  */
122
- function compressQuerySelector(table, selector) {
229
+ function compressQuerySelector(table, selector, enumValues) {
123
230
  if (Array.isArray(selector)) {
124
- return selector.map(function (item) { return compressQuerySelector(table, item); });
231
+ return selector.map(function (item) { return compressQuerySelector(table, item, enumValues); });
125
232
  }
126
233
  else if (selector instanceof RegExp) {
127
234
  return selector;
128
235
  }
129
236
  else if (typeof selector === 'object' && selector !== null) {
130
- var ret_2 = {};
237
+ var ret_1 = {};
238
+ /**
239
+ * $regex and its $options are replaced by a single $in
240
+ * with the indexes of the matching enum-values.
241
+ */
242
+ var regexIndexes_1;
243
+ if (enumValues && typeof selector['$regex'] !== 'undefined') {
244
+ regexIndexes_1 = enumIndexesOfRegex(enumValues, selector['$regex'], selector['$options']);
245
+ }
131
246
  Object.keys(selector).forEach(function (key) {
247
+ if (regexIndexes_1 && (key === '$regex' || key === '$options')) {
248
+ return;
249
+ }
132
250
  var useKey;
251
+ var useEnumValues;
133
252
  if (key.startsWith('$')) {
134
253
  // operator
135
254
  useKey = key;
255
+ useEnumValues = ENUM_VALUE_OPERATORS.indexOf(key) === -1 ? undefined : enumValues;
136
256
  }
137
257
  else {
138
258
  // property path
139
259
  useKey = compressedPath(table, key);
260
+ useEnumValues = enumValuesOfPath(table, key);
261
+ }
262
+ var value = selector[key];
263
+ if (useEnumValues && value instanceof RegExp) {
264
+ ret_1[useKey] = {
265
+ $in: enumIndexesOfRegex(useEnumValues, value, undefined)
266
+ };
267
+ }
268
+ else {
269
+ ret_1[useKey] = compressQuerySelector(table, value, useEnumValues);
140
270
  }
141
- ret_2[useKey] = compressQuerySelector(table, selector[key]);
142
271
  });
143
- return ret_2;
272
+ if (regexIndexes_1) {
273
+ var alreadyIn_1 = ret_1['$in'];
274
+ ret_1['$in'] = Array.isArray(alreadyIn_1) ?
275
+ regexIndexes_1.filter(function (index) { return alreadyIn_1.includes(index); }) :
276
+ regexIndexes_1;
277
+ }
278
+ return ret_1;
144
279
  }
145
280
  else {
281
+ if (enumValues) {
282
+ return (0, enum_compression_1.compressEnumValue)(enumValues, selector);
283
+ }
146
284
  return selector;
147
285
  }
148
286
  }
149
- exports.compressQuerySelector = compressQuerySelector;
150
287
  //# sourceMappingURL=compress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/compress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/compress.ts"],"names":[],"mappings":";;AAYA,wCAiCC;AASD,wCAaC;AAED,0EAUC;AAsBD,0DA0BC;AAQD,sCA2DC;AAmFD,sDAsEC;AArVD,uDAAuD;AAEvD;;;GAGG;AACH,SAAgB,cAAc,CAC1B,KAAuB,EACvB,GAAoB;IAEpB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,QAAQ;QACR,IAAM,QAAQ,GAA8B,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9C,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,0CAA0C;YAC1C,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9G,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,SAAS;IACT,IAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAW,CAAC;QAClC,IAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;QACpD,IAAM,UAAU,GAAG,eAAe,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,UAAU,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,IAAA,oCAAiB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACJ,0CAA0C;YAC1C,GAAG,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;gBACtF,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9B,KAAK,CAAC;QACd,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAC1B,KAAuB,EACvB,IAAY;IAEZ,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,QAAQ;SACV,GAAG,CAAC,UAAA,MAAM;QACP,IAAM,aAAa,GAAG,uBAAuB,CACzC,KAAK,EACL,MAAM,CACT,CAAC;QACF,OAAO,aAAa,CAAC;IACzB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,+BAA+B,CAC3C,KAAuB,EACvB,GAAW;IAEX,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACX,gEAAgE;YAChE,KAAK,CAAC,eAAe,GAAG,UAAU,GAAG,GAAG,CAC3C,CAAC;IACN,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,IAAM,gBAAgB,GAAmD,IAAI,OAAO,EAAE,CAAC;AACvF,SAAS,cAAc,CAAC,KAAuB;IAC3C,IAAI,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,IAAM,gBAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QACtD,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAC,aAAa,EAAE,GAAG;YACtD,gBAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAc,CAAC,CAAC;QAC5C,WAAW,GAAG,gBAAc,CAAC;IACjC,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,SAAgB,uBAAuB,CACnC,KAAuB,EACvB,GAAW;IAEX,+BAA+B,CAC3B,KAAK,EACL,GAAG,CACN,CAAC;IACF;;;;;OAKG;IACH,IAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,IAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,CAAC;IACD,IAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5C,IAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,GAAG,CAAC;IACf,CAAC;IACD,OAAO,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAChD,CAAC;AAGD;;;;GAIG;AACH,SAAgB,aAAa,CACzB,KAAuB,EACvB,KAAiB;IAEjB,IAAM,GAAG,GAAe;QACpB,QAAQ,EAAE,qBAAqB,CAC3B,KAAK,EACL,KAAK,CAAC,QAAQ,CACjB;KACJ,CAAC;IACF,IAAI,KAAK,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACtC,IAAI,KAAK,CAAC,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAEzC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;aACpB,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,cAAc,CACxB,KAAK,EACL,KAAK,CACR,EAHa,CAGb,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,GAAI,KAAK,CAAC,IAAc,CAAC,GAAG,CAAC,UAAC,IAAkB;gBACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACtC,IAAI,QAAQ,EAAE,CAAC;wBACX,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC;oBACD,IAAI,eAAe,GAAG,cAAc,CAChC,KAAK,EACL,IAAI,CACP,CAAC;oBACF,IAAI,QAAQ,EAAE,CAAC;wBACX,eAAe,GAAG,GAAG,GAAG,eAAe,CAAC;oBAC5C,CAAC;oBACD,OAAO,eAAe,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACJ,OAAO,qBAAqB,CACxB,KAAK,EACL,IAAI,CACP,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,IAAM,gBAAc,GAAQ,EAAE,CAAC;YAC/B,qDAAqD;YACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;gBAC/B,IAAM,SAAS,GAAI,KAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAM,eAAe,GAAG,cAAc,CAClC,KAAK,EACL,GAAG,CACN,CAAC;gBACF,gBAAc,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,GAAG,gBAAc,CAAC;QAC9B,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,IAAM,oBAAoB,GAAa;IACnC,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,YAAY;CACf,CAAC;AAEF;;;GAGG;AACH,SAAS,gBAAgB,CACrB,KAAuB,EACvB,IAAY;IAEZ,IAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAW,CAAC;IACtD,IAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACvB,UAAoB,EACpB,OAAY,EACZ,OAAY;IAEZ,IAAI,MAAc,CAAC;IACnB,IAAI,KAAa,CAAC;IAClB,IAAI,OAAO,YAAY,MAAM,EAAE,CAAC;QAC5B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACxB,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,GAAG,EAAE,CAAC;IACf,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9B,KAAK,GAAG,OAAO,CAAC;IACpB,CAAC;IACD;;;OAGG;IACH,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,IAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAW,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CACjC,KAAuB,EACvB,QAAa,EACb,UAAqB;IAErB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,EAA9C,CAA8C,CAAC,CAAC;IAChF,CAAC;SAAM,IAAI,QAAQ,YAAY,MAAM,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC;IACpB,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3D,IAAM,KAAG,GAAQ,EAAE,CAAC;QACpB;;;WAGG;QACH,IAAI,cAAkC,CAAC;QACvC,IAAI,UAAU,IAAI,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,WAAW,EAAE,CAAC;YAC1D,cAAY,GAAG,kBAAkB,CAC7B,UAAU,EACV,QAAQ,CAAC,QAAQ,CAAC,EAClB,QAAQ,CAAC,UAAU,CAAC,CACvB,CAAC;QACN,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;YAC7B,IAAI,cAAY,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,CAAC,EAAE,CAAC;gBAC3D,OAAO;YACX,CAAC;YACD,IAAI,MAAM,CAAC;YACX,IAAI,aAAa,CAAC;YAClB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,WAAW;gBACX,MAAM,GAAG,GAAG,CAAC;gBACb,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YACtF,CAAC;iBAAM,CAAC;gBACJ,gBAAgB;gBAChB,MAAM,GAAG,cAAc,CACnB,KAAK,EACL,GAAG,CACN,CAAC;gBACF,aAAa,GAAG,gBAAgB,CAC5B,KAAK,EACL,GAAG,CACN,CAAC;YACN,CAAC;YACD,IAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,aAAa,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBAC3C,KAAG,CAAC,MAAM,CAAC,GAAG;oBACV,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,KAAK,EAAE,SAAS,CAAC;iBAC3D,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,KAAG,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAC/B,KAAK,EACL,KAAK,EACL,aAAa,CAChB,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,cAAY,EAAE,CAAC;YACf,IAAM,WAAS,GAAG,KAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,KAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,WAAS,CAAC,CAAC,CAAC;gBACnC,cAAY,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,WAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAzB,CAAyB,CAAC,CAAC,CAAC;gBACzD,cAAY,CAAC;QACrB,CAAC;QACD,OAAO,KAAG,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,IAAA,oCAAiB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -1,2 +1,11 @@
1
1
  import type { JsonSchema, CompressionTable } from './types';
2
+ /**
3
+ * Transforms the schema so that it describes the compressed objects.
4
+ * It recurses into all keywords that can contain sub-schemas,
5
+ * independent of the 'type' field. This mirrors how compressObject() works,
6
+ * which compresses every key that is known to the compression-table,
7
+ * wherever the key occurs in the document. For example a nullable nested object
8
+ * has type: ['object', 'null'] and its properties must still be compressed,
9
+ * and properties inside of oneOf/anyOf/allOf must be compressed as well.
10
+ */
2
11
  export declare function createCompressedJsonSchema(compressionTable: CompressionTable, schema: JsonSchema): JsonSchema;
@@ -1,42 +1,151 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCompressedJsonSchema = void 0;
3
+ exports.createCompressedJsonSchema = createCompressedJsonSchema;
4
4
  var util_1 = require("./util");
5
5
  var compress_1 = require("./compress");
6
+ /**
7
+ * A value that is enum-compressed is stored as the index of the value,
8
+ * so the type of the property changes from string to number.
9
+ */
10
+ function toNumberType(type) {
11
+ if (!type) {
12
+ return type;
13
+ }
14
+ if (Array.isArray(type)) {
15
+ return type.map(function (single) { return single === 'string' ? 'number' : single; });
16
+ }
17
+ return type === 'string' ? 'number' : type;
18
+ }
19
+ /**
20
+ * Replaces the enum-values of an enum-compressed property
21
+ * by the indexes that the compressed documents contain.
22
+ * The enum can sit at the property itself or at the items of an array-property.
23
+ * @recursive
24
+ */
25
+ function compressEnumOfSchema(schema, enumValues) {
26
+ var ret = schema;
27
+ if (Array.isArray(schema.enum)) {
28
+ ret = (0, util_1.flatClone)(schema);
29
+ ret.enum = enumValues.map(function (_value, index) { return index; });
30
+ ret.type = toNumberType(schema.type);
31
+ }
32
+ var items = ret.items;
33
+ if (items && !Array.isArray(items) && Array.isArray(items.enum)) {
34
+ if (ret === schema) {
35
+ ret = (0, util_1.flatClone)(schema);
36
+ }
37
+ ret.items = compressEnumOfSchema(items, enumValues);
38
+ }
39
+ return ret;
40
+ }
41
+ /**
42
+ * Transforms the schema so that it describes the compressed objects.
43
+ * It recurses into all keywords that can contain sub-schemas,
44
+ * independent of the 'type' field. This mirrors how compressObject() works,
45
+ * which compresses every key that is known to the compression-table,
46
+ * wherever the key occurs in the document. For example a nullable nested object
47
+ * has type: ['object', 'null'] and its properties must still be compressed,
48
+ * and properties inside of oneOf/anyOf/allOf must be compressed as well.
49
+ */
6
50
  function createCompressedJsonSchema(compressionTable, schema) {
7
- if (schema.type === 'array' && schema.items) {
8
- var cloned = (0, util_1.flatClone)(schema);
51
+ var hasNested = schema.items ||
52
+ schema.additionalItems ||
53
+ schema.properties ||
54
+ schema.patternProperties ||
55
+ schema.required ||
56
+ schema.allOf ||
57
+ schema.anyOf ||
58
+ schema.oneOf ||
59
+ schema.not ||
60
+ schema.dependencies ||
61
+ schema.definitions ||
62
+ schema.enum;
63
+ if (!hasNested) {
64
+ // no deeper fields in the schema
65
+ return schema;
66
+ }
67
+ var cloned = (0, util_1.flatClone)(schema);
68
+ var enumCompression = compressionTable.enumCompression;
69
+ var compressSchema = function (subSchema) { return createCompressedJsonSchema(compressionTable, subSchema); };
70
+ var compressKey = function (key) { return (0, compress_1.compressedPath)(compressionTable, key); };
71
+ var compressSchemaMap = function (schemaMap, compressKeys) {
72
+ var ret = {};
73
+ // do not use Object.entries, it is transpiled shitty
74
+ Object.keys(schemaMap).forEach(function (key) {
75
+ var useKey = compressKeys ? compressKey(key) : key;
76
+ var subSchema = compressSchema(schemaMap[key]);
77
+ /**
78
+ * Only real property names can be enum-compressed,
79
+ * the keys of patternProperties and definitions are no property names.
80
+ */
81
+ var enumValues = (compressKeys && enumCompression) ? enumCompression.get(key) : undefined;
82
+ ret[useKey] = enumValues ? compressEnumOfSchema(subSchema, enumValues) : subSchema;
83
+ });
84
+ return ret;
85
+ };
86
+ if (schema.items) {
9
87
  if (Array.isArray(schema.items)) {
10
- var newItems = schema.items.map(function (item) { return createCompressedJsonSchema(compressionTable, item); });
11
- cloned.items = newItems;
88
+ cloned.items = schema.items.map(compressSchema);
12
89
  }
13
90
  else {
14
- var newItems = createCompressedJsonSchema(compressionTable, schema.items);
15
- cloned.items = newItems;
91
+ cloned.items = compressSchema(schema.items);
16
92
  }
17
- return cloned;
18
93
  }
19
- else if (schema.type === 'object' && schema.properties) {
20
- var cloned = (0, util_1.flatClone)(schema);
21
- // compress all property names
22
- var newProperties_1 = {};
23
- // do not use Object.entries, it is transpiled shitty
24
- Object.keys(schema.properties).forEach(function (key) {
25
- var property = schema.properties[key];
26
- var compressedKey = (0, compress_1.compressedPath)(compressionTable, key);
27
- newProperties_1[compressedKey] = createCompressedJsonSchema(compressionTable, property);
94
+ if (schema.additionalItems && typeof schema.additionalItems === 'object') {
95
+ cloned.additionalItems = compressSchema(schema.additionalItems);
96
+ }
97
+ // compress all property names
98
+ if (schema.properties) {
99
+ cloned.properties = compressSchemaMap(schema.properties, true);
100
+ }
101
+ // the patterns are not property names, only the sub-schemas are compressed
102
+ if (schema.patternProperties) {
103
+ cloned.patternProperties = compressSchemaMap(schema.patternProperties, false);
104
+ }
105
+ // also compress the required array
106
+ if (schema.required) {
107
+ cloned.required = schema.required.map(compressKey);
108
+ }
109
+ if (schema.allOf) {
110
+ cloned.allOf = schema.allOf.map(compressSchema);
111
+ }
112
+ if (schema.anyOf) {
113
+ cloned.anyOf = schema.anyOf.map(compressSchema);
114
+ }
115
+ if (schema.oneOf) {
116
+ cloned.oneOf = schema.oneOf.map(compressSchema);
117
+ }
118
+ if (schema.not) {
119
+ cloned.not = compressSchema(schema.not);
120
+ }
121
+ /**
122
+ * dependencies are keyed by property name
123
+ * and contain either a list of property names
124
+ * or a sub-schema
125
+ */
126
+ if (schema.dependencies) {
127
+ var dependencies_1 = schema.dependencies;
128
+ var newDependencies_1 = {};
129
+ Object.keys(dependencies_1).forEach(function (key) {
130
+ var dependency = dependencies_1[key];
131
+ newDependencies_1[compressKey(key)] = Array.isArray(dependency) ?
132
+ dependency.map(compressKey) :
133
+ compressSchema(dependency);
28
134
  });
29
- cloned.properties = newProperties_1;
30
- // also compress the required array
31
- if (cloned.required) {
32
- cloned.required = cloned.required.map(function (key) { return (0, compress_1.compressedPath)(compressionTable, key); });
33
- }
34
- return cloned;
135
+ cloned.dependencies = newDependencies_1;
35
136
  }
36
- else {
37
- // no deeper fields in the schema
38
- return schema;
137
+ // definition names are not property names, only the sub-schemas are compressed
138
+ if (schema.definitions) {
139
+ cloned.definitions = compressSchemaMap(schema.definitions, false);
140
+ }
141
+ /**
142
+ * enum values are document fragments,
143
+ * so object values contain property names that must be compressed.
144
+ * Primitive values are returned unchanged by compressObject().
145
+ */
146
+ if (schema.enum) {
147
+ cloned.enum = schema.enum.map(function (value) { return (0, compress_1.compressObject)(compressionTable, value); });
39
148
  }
149
+ return cloned;
40
150
  }
41
- exports.createCompressedJsonSchema = createCompressedJsonSchema;
42
151
  //# sourceMappingURL=create-compressed-json-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-compressed-json-schema.js","sourceRoot":"","sources":["../../src/create-compressed-json-schema.ts"],"names":[],"mappings":";;;AAIA,+BAAmC;AACnC,uCAA4C;AAE5C,SAAgB,0BAA0B,CACtC,gBAAkC,EAClC,MAAkB;IAElB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE;QACzC,IAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,MAAM,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC7B,IAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,0BAA0B,CAChE,gBAAgB,EAChB,IAAI,CACP,EAHyC,CAGzC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;SAC3B;aAAM;YACH,IAAM,QAAQ,GAAG,0BAA0B,CACvC,gBAAgB,EAChB,MAAM,CAAC,KAAK,CACf,CAAC;YACF,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;SAC3B;QACD,OAAO,MAAM,CAAC;KACjB;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE;QACtD,IAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,MAAM,CAAC,CAAC;QAEjC,8BAA8B;QAC9B,IAAM,eAAa,GAEf,EAAE,CAAC;QACP,qDAAqD;QACrD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;YACtC,IAAM,QAAQ,GAAI,MAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACjD,IAAM,aAAa,GAAG,IAAA,yBAAc,EAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YAC5D,eAAa,CAAC,aAAa,CAAC,GAAG,0BAA0B,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,GAAG,eAAa,CAAC;QAElC,mCAAmC;QACnC,IAAI,MAAM,CAAC,QAAQ,EAAE;YACjB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAA,yBAAc,EAAC,gBAAgB,EAAE,GAAG,CAAC,EAArC,CAAqC,CAAC,CAAC;SACvF;QAED,OAAO,MAAM,CAAC;KACjB;SAAM;QACH,iCAAiC;QACjC,OAAO,MAAM,CAAC;KACjB;AACL,CAAC;AA7CD,gEA6CC"}
1
+ {"version":3,"file":"create-compressed-json-schema.js","sourceRoot":"","sources":["../../src/create-compressed-json-schema.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,13 @@ import type { CompressionTable, JsonSchema, TableType } from './types';
6
6
  * compression-flag, an error will be thrown.
7
7
  */
8
8
  export declare const DEFAULT_COMPRESSION_FLAG = "|";
9
- export declare function createCompressionTable(schema: JsonSchema, compressionFlag?: string, ignoreProperties?: string[]): CompressionTable;
9
+ /**
10
+ * @param compressEnums If true, the values of string-enums are compressed
11
+ * into the index of the value inside of the enum.
12
+ * This changes the stored format, so it is opt-in
13
+ * to keep already compressed data readable.
14
+ */
15
+ export declare function createCompressionTable(schema: JsonSchema, compressionFlag?: string, ignoreProperties?: string[], compressEnums?: boolean): CompressionTable;
10
16
  /**
11
17
  * Returns a list of all property names that occur in the schema.
12
18
  * @returns Set of strings to ensure uniqueness.