jsonschema-key-compression 1.7.0 → 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 (46) 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 +161 -25
  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 +39 -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/lib/compress.d.ts +3 -1
  21. package/dist/lib/compress.js +167 -32
  22. package/dist/lib/compress.js.map +1 -1
  23. package/dist/lib/create-compressed-json-schema.d.ts +9 -0
  24. package/dist/lib/create-compressed-json-schema.js +136 -27
  25. package/dist/lib/create-compressed-json-schema.js.map +1 -1
  26. package/dist/lib/create-compression-table.d.ts +7 -1
  27. package/dist/lib/create-compression-table.js +61 -35
  28. package/dist/lib/create-compression-table.js.map +1 -1
  29. package/dist/lib/decompress.js +42 -25
  30. package/dist/lib/decompress.js.map +1 -1
  31. package/dist/lib/enum-compression.d.ts +35 -0
  32. package/dist/lib/enum-compression.js +223 -0
  33. package/dist/lib/enum-compression.js.map +1 -0
  34. package/dist/lib/index.d.ts +1 -1
  35. package/dist/lib/index.js.map +1 -1
  36. package/dist/lib/types.d.ts +11 -0
  37. package/dist/lib/util.js +3 -3
  38. package/dist/lib/util.js.map +1 -1
  39. package/package.json +9 -7
  40. package/src/compress.ts +183 -33
  41. package/src/create-compressed-json-schema.ts +158 -35
  42. package/src/create-compression-table.ts +59 -31
  43. package/src/decompress.ts +40 -27
  44. package/src/enum-compression.ts +240 -0
  45. package/src/index.ts +1 -0
  46. 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,25 +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 = {};
19
- var keys = Object.keys(obj);
20
- for (var index = 0; index < keys.length; index++) {
21
- var key = keys[index];
22
- var compressedKey = compressedAndFlaggedKey(table, key);
23
- var value = compressObject(table, obj[key]);
24
- ret[compressedKey] = value;
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;
25
43
  }
26
- return ret;
27
44
  }
45
+ return ret;
28
46
  }
29
- exports.compressObject = compressObject;
30
47
  /**
31
48
  * transform an object-path
32
49
  * into its compressed version
@@ -42,32 +59,52 @@ function compressedPath(table, path) {
42
59
  return compressedKey;
43
60
  }).join('.');
44
61
  }
45
- exports.compressedPath = compressedPath;
46
62
  function throwErrorIfCompressionFlagUsed(table, key) {
47
63
  if (key.startsWith(table.compressionFlag)) {
48
64
  throw new Error('cannot compress objects that start with the compression-flag: ' +
49
65
  table.compressionFlag + ' on key ' + key);
50
66
  }
51
67
  }
52
- 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
+ }
53
87
  function compressedAndFlaggedKey(table, key) {
54
88
  throwErrorIfCompressionFlagUsed(table, key);
55
89
  /**
56
90
  * keys could be array-accessors like myArray[4]
57
- * we have to split and read 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.
58
94
  */
59
- var splitSquaredBrackets = key.split('[');
60
- var plainKey = splitSquaredBrackets.shift();
61
- var compressedKey = table.compressedToUncompressed.get(plainKey);
62
- if (!compressedKey) {
63
- 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;
64
100
  }
65
- else {
66
- var readdSquared = splitSquaredBrackets.length ? '[' + splitSquaredBrackets.join('[') : '';
67
- return table.compressionFlag + compressedKey + readdSquared;
101
+ var plainKey = key.slice(0, bracketIndex);
102
+ var flaggedKey = flaggedKeys.get(plainKey);
103
+ if (!flaggedKey) {
104
+ return key;
68
105
  }
106
+ return flaggedKey + key.slice(bracketIndex);
69
107
  }
70
- exports.compressedAndFlaggedKey = compressedAndFlaggedKey;
71
108
  /**
72
109
  * compress a mango-query
73
110
  * so that it can be used to find documents
@@ -117,36 +154,134 @@ function compressQuery(table, query) {
117
154
  }
118
155
  return ret;
119
156
  }
120
- 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
+ }
121
224
  /**
122
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.
123
228
  */
124
- function compressQuerySelector(table, selector) {
229
+ function compressQuerySelector(table, selector, enumValues) {
125
230
  if (Array.isArray(selector)) {
126
- return selector.map(function (item) { return compressQuerySelector(table, item); });
231
+ return selector.map(function (item) { return compressQuerySelector(table, item, enumValues); });
127
232
  }
128
233
  else if (selector instanceof RegExp) {
129
234
  return selector;
130
235
  }
131
236
  else if (typeof selector === 'object' && selector !== null) {
132
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
+ }
133
246
  Object.keys(selector).forEach(function (key) {
247
+ if (regexIndexes_1 && (key === '$regex' || key === '$options')) {
248
+ return;
249
+ }
134
250
  var useKey;
251
+ var useEnumValues;
135
252
  if (key.startsWith('$')) {
136
253
  // operator
137
254
  useKey = key;
255
+ useEnumValues = ENUM_VALUE_OPERATORS.indexOf(key) === -1 ? undefined : enumValues;
138
256
  }
139
257
  else {
140
258
  // property path
141
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);
142
270
  }
143
- ret_1[useKey] = compressQuerySelector(table, selector[key]);
144
271
  });
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
+ }
145
278
  return ret_1;
146
279
  }
147
280
  else {
281
+ if (enumValues) {
282
+ return (0, enum_compression_1.compressEnumValue)(enumValues, selector);
283
+ }
148
284
  return selector;
149
285
  }
150
286
  }
151
- exports.compressQuerySelector = compressQuerySelector;
152
287
  //# sourceMappingURL=compress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/compress.ts"],"names":[],"mappings":";;;AAMA;;;GAGG;AACH,SAAgB,cAAc,CAC1B,KAAuB,EACvB,GAAoB;IAEpB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;SACnD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,QAAQ;QACR,OAAO,GAAG;aACL,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,EAA3B,CAA2B,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACJ,SAAS;QACT,IAAM,GAAG,GAAoB,EAAE,CAAC;QAChC,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/C,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,IAAM,aAAa,GAAG,uBAAuB,CACzC,KAAK,EACL,GAAU,CACb,CAAC;YACF,IAAM,KAAK,GAAG,cAAc,CACxB,KAAK,EACL,GAAG,CAAC,GAAU,CAAC,CAClB,CAAC;YACF,GAAG,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AACL,CAAC;AA3BD,wCA2BC;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;AAbD,wCAaC;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;AAVD,0EAUC;AAED,SAAgB,uBAAuB,CACnC,KAAuB,EACvB,GAAW;IAEX,+BAA+B,CAC3B,KAAK,EACL,GAAG,CACN,CAAC;IACF;;;OAGG;IACH,IAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAY,CAAC;IACxD,IAAM,aAAa,GAAG,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,OAAO,KAAK,CAAC,eAAe,GAAG,aAAa,GAAG,YAAY,CAAC;IAChE,CAAC;AACL,CAAC;AArBD,0DAqBC;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;AA3DD,sCA2DC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACjC,KAAuB,EACvB,QAAa;IAEb,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAlC,CAAkC,CAAC,CAAC;IACpE,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,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;YAC7B,IAAI,MAAM,CAAC;YACX,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,WAAW;gBACX,MAAM,GAAG,GAAG,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACJ,gBAAgB;gBAChB,MAAM,GAAG,cAAc,CACnB,KAAK,EACL,GAAG,CACN,CAAC;YACN,CAAC;YACD,KAAG,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAC/B,KAAK,EACL,QAAQ,CAAC,GAAG,CAAC,CAChB,CAAC;QACN,CAAC,CAAC,CAAC;QACH,OAAO,KAAG,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,OAAO,QAAQ,CAAC;IACpB,CAAC;AACL,CAAC;AA/BD,sDA+BC"}
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/compress.ts"],"names":[],"mappings":"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"}
@@ -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,CAAC;QAC1C,IAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,MAAM,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,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;QAC5B,CAAC;aAAM,CAAC;YACJ,IAAM,QAAQ,GAAG,0BAA0B,CACvC,gBAAgB,EAChB,MAAM,CAAC,KAAK,CACf,CAAC;YACF,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC5B,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,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,CAAC;YAClB,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;QACxF,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,iCAAiC;QACjC,OAAO,MAAM,CAAC;IAClB,CAAC;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.