@squiz/dx-common-lib 1.21.1-alpha.34 → 1.21.1-alpha.39

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 (47) hide show
  1. package/.npm/_logs/{2023-03-22T06_38_33_713Z-debug-0.log → 2023-03-23T06_44_58_392Z-debug-0.log} +16 -16
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.js +1 -0
  4. package/lib/index.js.map +1 -1
  5. package/lib/json-order/index.d.ts +6 -0
  6. package/lib/json-order/index.js +11 -0
  7. package/lib/json-order/index.js.map +1 -0
  8. package/lib/json-order/key.d.ts +2 -0
  9. package/lib/json-order/key.js +44 -0
  10. package/lib/json-order/key.js.map +1 -0
  11. package/lib/json-order/key.spec.d.ts +1 -0
  12. package/lib/json-order/key.spec.js +40 -0
  13. package/lib/json-order/key.spec.js.map +1 -0
  14. package/lib/json-order/models.d.ts +7 -0
  15. package/lib/json-order/models.js +3 -0
  16. package/lib/json-order/models.js.map +1 -0
  17. package/lib/json-order/order.d.ts +11 -0
  18. package/lib/json-order/order.js +75 -0
  19. package/lib/json-order/order.js.map +1 -0
  20. package/lib/json-order/order.spec.d.ts +1 -0
  21. package/lib/json-order/order.spec.js +191 -0
  22. package/lib/json-order/order.spec.js.map +1 -0
  23. package/lib/json-order/parse.d.ts +11 -0
  24. package/lib/json-order/parse.js +47 -0
  25. package/lib/json-order/parse.js.map +1 -0
  26. package/lib/json-order/parse.spec.d.ts +1 -0
  27. package/lib/json-order/parse.spec.js +260 -0
  28. package/lib/json-order/parse.spec.js.map +1 -0
  29. package/lib/json-order/stringify.d.ts +12 -0
  30. package/lib/json-order/stringify.js +20 -0
  31. package/lib/json-order/stringify.js.map +1 -0
  32. package/lib/json-order/stringify.spec.d.ts +1 -0
  33. package/lib/json-order/stringify.spec.js +123 -0
  34. package/lib/json-order/stringify.spec.js.map +1 -0
  35. package/package.json +8 -5
  36. package/src/index.ts +1 -0
  37. package/src/json-order/index.ts +6 -0
  38. package/src/json-order/key.spec.ts +39 -0
  39. package/src/json-order/key.ts +40 -0
  40. package/src/json-order/models.ts +8 -0
  41. package/src/json-order/order.spec.ts +251 -0
  42. package/src/json-order/order.ts +95 -0
  43. package/src/json-order/parse.spec.ts +302 -0
  44. package/src/json-order/parse.ts +59 -0
  45. package/src/json-order/stringify.spec.ts +170 -0
  46. package/src/json-order/stringify.ts +17 -0
  47. package/tsconfig.tsbuildinfo +1 -1
@@ -1,10 +1,10 @@
1
1
  0 verbose cli /usr/local/bin/node /usr/local/bin/npm
2
2
  1 info using npm@9.5.0
3
3
  2 info using node@v18.15.0
4
- 3 timing npm:load:whichnode Completed in 2ms
4
+ 3 timing npm:load:whichnode Completed in 1ms
5
5
  4 timing config:load:defaults Completed in 2ms
6
- 5 timing config:load:file:/usr/local/lib/node_modules/npm/npmrc Completed in 0ms
7
- 6 timing config:load:builtin Completed in 0ms
6
+ 5 timing config:load:file:/usr/local/lib/node_modules/npm/npmrc Completed in 1ms
7
+ 6 timing config:load:builtin Completed in 1ms
8
8
  7 timing config:load:cli Completed in 2ms
9
9
  8 timing config:load:env Completed in 2ms
10
10
  9 info found workspace root at /builds/developer-experience/cmp
@@ -13,25 +13,25 @@
13
13
  12 timing config:load:file:/root/.npmrc Completed in 1ms
14
14
  13 timing config:load:user Completed in 1ms
15
15
  14 timing config:load:file:/usr/local/etc/npmrc Completed in 0ms
16
- 15 timing config:load:global Completed in 0ms
17
- 16 timing config:load:setEnvs Completed in 2ms
16
+ 15 timing config:load:global Completed in 1ms
17
+ 16 timing config:load:setEnvs Completed in 1ms
18
18
  17 timing config:load Completed in 30ms
19
19
  18 timing npm:load:configload Completed in 30ms
20
- 19 timing npm:load:mkdirpcache Completed in 0ms
21
- 20 timing npm:load:mkdirplogs Completed in 0ms
20
+ 19 timing npm:load:mkdirpcache Completed in 4ms
21
+ 20 timing npm:load:mkdirplogs Completed in 1ms
22
22
  21 verbose title npm run compile
23
23
  22 verbose argv "run" "compile" "--"
24
- 23 timing npm:load:setTitle Completed in 2ms
25
- 24 timing config:load:flatten Completed in 4ms
26
- 25 timing npm:load:display Completed in 5ms
27
- 26 verbose logfile logs-max:10 dir:/builds/developer-experience/cmp/packages/dx-common-lib/.npm/_logs/2023-03-22T06_38_33_713Z-
28
- 27 verbose logfile /builds/developer-experience/cmp/packages/dx-common-lib/.npm/_logs/2023-03-22T06_38_33_713Z-debug-0.log
29
- 28 timing npm:load:logFile Completed in 3ms
24
+ 23 timing npm:load:setTitle Completed in 1ms
25
+ 24 timing config:load:flatten Completed in 5ms
26
+ 25 timing npm:load:display Completed in 6ms
27
+ 26 verbose logfile logs-max:10 dir:/builds/developer-experience/cmp/packages/dx-common-lib/.npm/_logs/2023-03-23T06_44_58_392Z-
28
+ 27 verbose logfile /builds/developer-experience/cmp/packages/dx-common-lib/.npm/_logs/2023-03-23T06_44_58_392Z-debug-0.log
29
+ 28 timing npm:load:logFile Completed in 8ms
30
30
  29 timing npm:load:timers Completed in 0ms
31
31
  30 timing npm:load:configScope Completed in 0ms
32
- 31 timing npm:load Completed in 43ms
32
+ 31 timing npm:load Completed in 52ms
33
33
  32 silly logfile done cleaning log files
34
- 33 timing command:run Completed in 3174ms
34
+ 33 timing command:run Completed in 3871ms
35
35
  34 verbose exit 0
36
- 35 timing npm Completed in 3230ms
36
+ 35 timing npm Completed in 3941ms
37
37
  36 info ok
package/lib/index.d.ts CHANGED
@@ -11,3 +11,4 @@ export * from './api-key-validation/getApiKeyService';
11
11
  export * from './server-utils/apiKeyMiddleware';
12
12
  export * from './cache';
13
13
  export * from './formatted-text/formattedTextToHtmlString';
14
+ export * from './json-order';
package/lib/index.js CHANGED
@@ -27,4 +27,5 @@ __exportStar(require("./api-key-validation/getApiKeyService"), exports);
27
27
  __exportStar(require("./server-utils/apiKeyMiddleware"), exports);
28
28
  __exportStar(require("./cache"), exports);
29
29
  __exportStar(require("./formatted-text/formattedTextToHtmlString"), exports);
30
+ __exportStar(require("./json-order"), exports);
30
31
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,0CAAwB;AACxB,yCAAuB;AACvB,qDAAmC;AACnC,iEAA+C;AAC/C,+DAA6C;AAC7C,+EAA6D;AAC7D,+EAA6D;AAC7D,gFAA8D;AAC9D,wEAAsD;AACtD,kEAAgD;AAChD,0CAAwB;AACxB,6EAA2D"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,0CAAwB;AACxB,yCAAuB;AACvB,qDAAmC;AACnC,iEAA+C;AAC/C,+DAA6C;AAC7C,+EAA6D;AAC7D,+EAA6D;AAC7D,gFAA8D;AAC9D,wEAAsD;AACtD,kEAAgD;AAChD,0CAAwB;AACxB,6EAA2D;AAC3D,+CAA6B"}
@@ -0,0 +1,6 @@
1
+ export { PropertyMap } from './models';
2
+ export declare const jsonOrder: {
3
+ order: <T extends object>(sourceObject: T, map: import("./models").PropertyMap | null, separator?: string) => T;
4
+ parse: <T_1 extends object>(jsonString: string, prefix?: string, separator?: string) => import("./models").OrderedParseResult<T_1>;
5
+ stringify: (sourceObject: object, map: import("./models").PropertyMap | null, separator?: string, space?: number | undefined) => string;
6
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.jsonOrder = void 0;
7
+ const order_1 = __importDefault(require("./order"));
8
+ const parse_1 = __importDefault(require("./parse"));
9
+ const stringify_1 = __importDefault(require("./stringify"));
10
+ exports.jsonOrder = { order: order_1.default, parse: parse_1.default, stringify: stringify_1.default };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/json-order/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,oDAA4B;AAC5B,4DAAoC;AAGvB,QAAA,SAAS,GAAG,EAAE,KAAK,EAAL,eAAK,EAAE,KAAK,EAAL,eAAK,EAAE,SAAS,EAAT,mBAAS,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const escapeKey: (key: string, separator: string) => string;
2
+ export declare const splitKey: (key: string, separator: string) => Array<string>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.splitKey = exports.escapeKey = void 0;
7
+ const escape_string_regexp_1 = __importDefault(require("escape-string-regexp"));
8
+ const escapeKey = (key, separator) => {
9
+ const stringsToEscape = ['\\', separator];
10
+ const pattern = stringsToEscape.map((string) => (0, escape_string_regexp_1.default)(string)).join('|');
11
+ return key.replace(new RegExp(`(${pattern})`, 'g'), '\\$1');
12
+ };
13
+ exports.escapeKey = escapeKey;
14
+ const splitKey = (key, separator) => {
15
+ // if key doesn't have any escape sequence avoid iterating through the characters.
16
+ if (key.indexOf('\\') < 0) {
17
+ return key.split(separator);
18
+ }
19
+ const parts = [];
20
+ let currentPart = '';
21
+ let isLiteral = false;
22
+ for (let index = 0; index < key.length; index++) {
23
+ const character = key[index];
24
+ if (isLiteral) {
25
+ currentPart += character;
26
+ isLiteral = false;
27
+ }
28
+ else if (character === '\\') {
29
+ isLiteral = true;
30
+ }
31
+ else if (character === separator[0] && key.substr(index, separator.length) === separator) {
32
+ parts.push(currentPart);
33
+ currentPart = '';
34
+ index += separator.length - 1;
35
+ }
36
+ else {
37
+ currentPart += character;
38
+ }
39
+ }
40
+ parts.push(currentPart);
41
+ return parts;
42
+ };
43
+ exports.splitKey = splitKey;
44
+ //# sourceMappingURL=key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/json-order/key.ts"],"names":[],"mappings":";;;;;;AAAA,gFAAsD;AAE/C,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAU,EAAE;IAClE,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,8BAAkB,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtF,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC;AALW,QAAA,SAAS,aAKpB;AAEK,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAiB,EAAE;IACxE,kFAAkF;IAClF,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACzB,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KAC7B;IAED,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,SAAS,EAAE;YACb,WAAW,IAAI,SAAS,CAAC;YACzB,SAAS,GAAG,KAAK,CAAC;SACnB;aAAM,IAAI,SAAS,KAAK,IAAI,EAAE;YAC7B,SAAS,GAAG,IAAI,CAAC;SAClB;aAAM,IAAI,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YAC1F,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,WAAW,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B;aAAM;YACL,WAAW,IAAI,SAAS,CAAC;SAC1B;KACF;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAExB,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AA9BW,QAAA,QAAQ,YA8BnB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const key_1 = require("./key");
4
+ describe('escapeKey()', () => {
5
+ it.each([
6
+ ['key does not contain a separator or slash', 'object_property_name', '~', 'object_property_name'],
7
+ ['key contains the separator character', 'object~property~name', '~', 'object\\~property\\~name'],
8
+ [
9
+ 'key contains the separator character, using a multi-character separator',
10
+ 'object$$property$$name',
11
+ '$$',
12
+ 'object\\$$property\\$$name',
13
+ ],
14
+ ['key contains the escape character', 'object\\property\\name', '~', 'object\\\\property\\\\name'],
15
+ ])('handles when %s', (description, key, separator, expected) => {
16
+ expect((0, key_1.escapeKey)(key, separator)).toEqual(expected);
17
+ });
18
+ });
19
+ describe('splitKey()', () => {
20
+ it.each([
21
+ ['key does not contain any escape sequences', 'object~property~name', '~', ['object', 'property', 'name']],
22
+ [
23
+ 'key does not contain any escape sequences, using a multi-character separator',
24
+ 'object$$property$$name',
25
+ '$$',
26
+ ['object', 'property', 'name'],
27
+ ],
28
+ ['key contains an escaped separator', 'object~property\\~name', '~', ['object', 'property~name']],
29
+ [
30
+ 'keys contains an escaped separator, using a multi-character separator',
31
+ 'object$$property\\$$name',
32
+ '$$',
33
+ ['object', 'property$$name'],
34
+ ],
35
+ ['it contains an escaped slash', 'object~property\\\\name', '~', ['object', 'property\\name']],
36
+ ])('handles when %s', (description, key, separator, expected) => {
37
+ expect((0, key_1.splitKey)(key, separator)).toEqual(expected);
38
+ });
39
+ });
40
+ //# sourceMappingURL=key.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.spec.js","sourceRoot":"","sources":["../../src/json-order/key.spec.ts"],"names":[],"mappings":";;AAAA,+BAA4C;AAE5C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,2CAA2C,EAAE,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,CAAC;QAClG,CAAC,sCAAsC,EAAE,sBAAsB,EAAE,GAAG,EAAE,0BAA0B,CAAC;QACjG;YACE,yEAAyE;YACzE,wBAAwB;YACxB,IAAI;YACJ,4BAA4B;SAC7B;QACD,CAAC,mCAAmC,EAAE,wBAAwB,EAAE,GAAG,EAAE,4BAA4B,CAAC;KACnG,CAAC,CAAC,iBAAiB,EAAE,CAAC,WAAmB,EAAE,GAAW,EAAE,SAAiB,EAAE,QAAgB,EAAE,EAAE;QAC9F,MAAM,CAAC,IAAA,eAAS,EAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,2CAA2C,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1G;YACE,8EAA8E;YAC9E,wBAAwB;YACxB,IAAI;YACJ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;SAC/B;QACD,CAAC,mCAAmC,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACjG;YACE,uEAAuE;YACvE,0BAA0B;YAC1B,IAAI;YACJ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAC7B;QACD,CAAC,8BAA8B,EAAE,yBAAyB,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;KAC/F,CAAC,CAAC,iBAAiB,EAAE,CAAC,WAAmB,EAAE,GAAW,EAAE,SAAiB,EAAE,QAAuB,EAAE,EAAE;QACrG,MAAM,CAAC,IAAA,cAAQ,EAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface PropertyMap {
2
+ [key: string]: Array<string>;
3
+ }
4
+ export interface OrderedParseResult<T> {
5
+ object: T;
6
+ map: PropertyMap;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/json-order/models.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { PropertyMap } from './models';
2
+ /**
3
+ * Duplicate a JS object but containing a particular property order
4
+ *
5
+ * @param sourceObject an object with the properties in any order
6
+ * @param map the `PropertyMap` generated by the `parse` method
7
+ * @param separator a non-empty `string` that controls what the key separator is in the generated map. Defaults to `~`.
8
+ * @returns the source object ordered as per the map
9
+ */
10
+ declare const order: <T extends object>(sourceObject: T, map: PropertyMap | null, separator?: string) => T;
11
+ export default order;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep"));
7
+ const key_1 = require("./key");
8
+ const getProperty = (obj, key, separator) => {
9
+ let exists = true;
10
+ const value = (0, key_1.splitKey)(key, separator)
11
+ .slice(1)
12
+ .reduce((o, x) => {
13
+ exists = o && x in o;
14
+ if (!exists) {
15
+ return undefined;
16
+ }
17
+ return o[x];
18
+ }, obj);
19
+ return { exists, value };
20
+ };
21
+ const setProperty = (obj, key, value, separator) => {
22
+ (0, key_1.splitKey)(key, separator)
23
+ .slice(1)
24
+ .reduce((o, x, idx, src) => {
25
+ if (idx === src.length - 1) {
26
+ const valueToSet = Array.isArray(value) ? (0, lodash_clonedeep_1.default)(value).map((p) => (typeof p === 'object' ? {} : p)) : value;
27
+ o[x] = valueToSet;
28
+ }
29
+ return o[x];
30
+ }, obj);
31
+ };
32
+ const copyProperty = (sourceObject, resultObject, propertyPath, separator) => {
33
+ const result = getProperty(sourceObject, propertyPath, separator);
34
+ if (result.exists) {
35
+ setProperty(resultObject, propertyPath, result.value, separator);
36
+ }
37
+ };
38
+ /**
39
+ * Duplicate a JS object but containing a particular property order
40
+ *
41
+ * @param sourceObject an object with the properties in any order
42
+ * @param map the `PropertyMap` generated by the `parse` method
43
+ * @param separator a non-empty `string` that controls what the key separator is in the generated map. Defaults to `~`.
44
+ * @returns the source object ordered as per the map
45
+ */
46
+ const order = (sourceObject, map, separator = '~') => {
47
+ if (separator.length < 1) {
48
+ throw new Error('Separator should not be an empty string.');
49
+ }
50
+ else if (separator === '\\') {
51
+ throw new Error('Separator cannot be "\\".');
52
+ }
53
+ if (!map) {
54
+ return sourceObject;
55
+ }
56
+ const mapKeys = Object.keys(map);
57
+ const prefixLength = (mapKeys[0] && mapKeys[0].length) || 0;
58
+ const resultObject = {};
59
+ mapKeys.forEach((mk) => {
60
+ const childKeys = map[mk];
61
+ // Remove prefix
62
+ const parentKey = mk.substr(prefixLength);
63
+ const parent = getProperty(sourceObject, parentKey, separator);
64
+ if (parent.exists) {
65
+ // Set a default value for the property
66
+ const defaultValue = Array.isArray(parent.value) ? parent.value : {};
67
+ setProperty(resultObject, parentKey, defaultValue, separator);
68
+ // Fetch value from source and set on output
69
+ childKeys.forEach((key) => copyProperty(sourceObject, resultObject, `${parentKey}${separator}${(0, key_1.escapeKey)(key, separator)}`, separator));
70
+ }
71
+ });
72
+ return resultObject;
73
+ };
74
+ exports.default = order;
75
+ //# sourceMappingURL=order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/json-order/order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const order_1 = __importDefault(require("./order"));
7
+ describe('order()', () => {
8
+ const expectObject = (obj, map, res) => expect(JSON.stringify((0, order_1.default)(obj, map, '.'))).toBe(res);
9
+ it('returns nothing for a blank JSON string', () => expectObject({}, {}, '{}'));
10
+ it('throws error if separator is an empty string', () => {
11
+ expect(() => (0, order_1.default)({}, {}, '')).toThrowError('Separator should not be an empty string.');
12
+ });
13
+ it('throws error if separator is a slash', () => {
14
+ expect(() => (0, order_1.default)({}, {}, '\\')).toThrowError('Separator cannot be "\\".');
15
+ });
16
+ it('ignores properties not found in source', () => expectObject({}, { $: ['a'] }, '{}'));
17
+ it('returns regular json string if map is undefined', () => expectObject({ a: '1', b: '2' }, null, '{"a":"1","b":"2"}'));
18
+ it('ignores properties not found in map', () => expectObject({ a: '1', b: '2' }, { $: ['b'] }, '{"b":"2"}'));
19
+ it('returns first level object properties in order', () => expectObject({ a: 2, b: 1 }, { $: ['b', 'a'] }, '{"b":1,"a":2}'));
20
+ it('returns first level array value in order', () => expectObject({ a: ['2', 1, true] }, { $: ['a'] }, '{"a":["2",1,true]}'));
21
+ it('returns nested [array] > [object] properties in expected order', () => expectObject({ a: [1, { c: '3', d: '2' }] }, { $: ['a'], '$.a.1': ['d', 'c'] }, '{"a":[1,{"d":"2","c":"3"}]}'));
22
+ it('ignores nested [array] > [object] properties partially not found in map', () => expectObject({ a: [1, { b: 2, c: 3 }, 4] }, { $: ['a'], '$.a.1': ['c'] }, '{"a":[1,{"c":3},4]}'));
23
+ it('ignores nested [array] > [object] properties not found in map', () => expectObject({ a: [1, { b: 2, c: 3 }, 4] }, { $: ['a'] }, '{"a":[1,{},4]}'));
24
+ it('handles multi-character prefix', () => {
25
+ expect((0, order_1.default)({
26
+ a: {
27
+ b: {
28
+ c: 3,
29
+ d: 4,
30
+ },
31
+ e: {
32
+ f: 4,
33
+ g: 5,
34
+ },
35
+ h: 6,
36
+ },
37
+ i: 7,
38
+ }, {
39
+ ab: ['i', 'a'],
40
+ 'ab.a': ['e', 'h', 'b'],
41
+ 'ab.a.e': ['g', 'f'],
42
+ 'ab.a.b': ['d', 'c'],
43
+ }, '.')).toEqual({ i: 7, a: { e: { g: 5, f: 4 }, h: 6, b: { d: 4, c: 3 } } });
44
+ });
45
+ it('handles multi-character separator', () => {
46
+ expect((0, order_1.default)({
47
+ a: {
48
+ b: {
49
+ c: 3,
50
+ d: 4,
51
+ },
52
+ e: {
53
+ f: 4,
54
+ g: 5,
55
+ },
56
+ h: 6,
57
+ },
58
+ i: 7,
59
+ }, {
60
+ $: ['i', 'a'],
61
+ '$~|a': ['e', 'h', 'b'],
62
+ '$~|a~|e': ['g', 'f'],
63
+ '$~|a~|b': ['d', 'c'],
64
+ }, '~|')).toEqual({ i: 7, a: { e: { g: 5, f: 4 }, h: 6, b: { d: 4, c: 3 } } });
65
+ });
66
+ it('returns nested [object] > [object] properties in expected order', () => expectObject({
67
+ a: {
68
+ b: {
69
+ c: 3,
70
+ d: 4,
71
+ },
72
+ e: {
73
+ f: 4,
74
+ g: 5,
75
+ },
76
+ h: 6,
77
+ },
78
+ i: 7,
79
+ }, {
80
+ $: ['i', 'a'],
81
+ '$.a': ['e', 'h', 'b'],
82
+ '$.a.e': ['g', 'f'],
83
+ '$.a.b': ['d', 'c'],
84
+ }, '{"i":7,"a":{"e":{"g":5,"f":4},"h":6,"b":{"d":4,"c":3}}}'));
85
+ it('returns nested [object] > [array] > [object] > [array] > [object] properties in expected order', () => expectObject({
86
+ a: {
87
+ b: [
88
+ 8,
89
+ {
90
+ c: 9,
91
+ d: [
92
+ {
93
+ e: 12,
94
+ f: {
95
+ g: true,
96
+ h: 'h',
97
+ },
98
+ },
99
+ 10,
100
+ ],
101
+ },
102
+ 11,
103
+ ],
104
+ },
105
+ i: 7,
106
+ }, {
107
+ $: ['i', 'a'],
108
+ '$.a': ['b'],
109
+ '$.a.b.1': ['d', 'c'],
110
+ '$.a.b.1.d.0': ['f', 'e'],
111
+ '$.a.b.1.d.0.f': ['h', 'g'],
112
+ }, '{"i":7,"a":{"b":[8,{"d":[{"f":{"h":"h","g":true},"e":12},10],"c":9},11]}}'));
113
+ it('handles keys with no name', () => {
114
+ expectObject({
115
+ '': {
116
+ b: 'str',
117
+ a: 'str',
118
+ c: 'str',
119
+ },
120
+ }, {
121
+ $: [''],
122
+ '$.': ['c', 'b', 'a'],
123
+ }, '{"":{"c":"str","b":"str","a":"str"}}');
124
+ });
125
+ it('handles escape sequences in the object', () => {
126
+ expectObject({
127
+ '.a': {
128
+ b: { t: 'str' },
129
+ c: { u: 'str' },
130
+ a: { s: 'str' },
131
+ },
132
+ '\\': {
133
+ a: { v: 'str' },
134
+ },
135
+ '\\.': {
136
+ a: { w: 'str' },
137
+ b: { x: 'str' },
138
+ },
139
+ '.': {
140
+ b: { y: 'str' },
141
+ a: { z: 'str' },
142
+ },
143
+ }, {
144
+ $: ['.', '\\.', '\\', '.a'],
145
+ '$.\\.': ['a', 'b'],
146
+ '$.\\..a': ['z'],
147
+ '$.\\..b': ['y'],
148
+ '$.\\\\\\.': ['b', 'a'],
149
+ '$.\\\\\\..b': ['x'],
150
+ '$.\\\\\\..a': ['w'],
151
+ '$.\\\\': ['a'],
152
+ '$.\\\\.a': ['v'],
153
+ '$.\\.a': ['c', 'b', 'a'],
154
+ '$.\\.a.c': ['u'],
155
+ '$.\\.a.b': ['t'],
156
+ '$.\\.a.a': ['s'],
157
+ }, '{".":{"a":{"z":"str"},"b":{"y":"str"}},' +
158
+ '"\\\\.":{"b":{"x":"str"},"a":{"w":"str"}},' +
159
+ '"\\\\":{"a":{"v":"str"}},' +
160
+ '".a":{"c":{"u":"str"},"b":{"t":"str"},"a":{"s":"str"}}}');
161
+ });
162
+ it('handles escape sequences in child properties of the object', () => {
163
+ expectObject({
164
+ property: {
165
+ '..': { '.': 4, '..': 3 },
166
+ '.': { '..': 0, '...': 2, '.': 1 },
167
+ '...': { '.': 5 },
168
+ },
169
+ }, {
170
+ $: ['property'],
171
+ '$.property': ['.', '..', '...'],
172
+ '$.property.\\.': ['..', '.', '...'],
173
+ '$.property.\\.\\.': ['..', '.'],
174
+ '$.property.\\.\\.\\.': ['.'],
175
+ }, '{"property":{".":{"..":0,".":1,"...":2},"..":{"..":3,".":4},"...":{".":5}}}');
176
+ });
177
+ it('numeric key order defined in map is lost', () => {
178
+ // Numeric keys aren't ordered per map but instead appear first in ascending order.
179
+ // See: https://tc39.es/ecma262/#sec-ordinaryownpropertykeys
180
+ expectObject({
181
+ 4: 'str',
182
+ a: 'str',
183
+ 3: 'str',
184
+ b: 'str',
185
+ 2: 'str',
186
+ }, {
187
+ $: ['a', '4', 'b', '3', '2'],
188
+ }, '{"2":"str","3":"str","4":"str","a":"str","b":"str"}');
189
+ });
190
+ });
191
+ //# sourceMappingURL=order.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.spec.js","sourceRoot":"","sources":["../../src/json-order/order.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { OrderedParseResult } from './models';
2
+ /**
3
+ * Parse a JSON string and generate a map
4
+ *
5
+ * @param jsonString a json string
6
+ * @param prefix a non-empty `string` that controls what the key prefix value is in the generated map. Defaults to `$`.
7
+ * @param separator a non-empty `string` that controls what the key separator is in the generated map. Defaults to `~`.
8
+ * @returns an object containing the parsed `object: T` and the `map: PropertyMap`
9
+ */
10
+ declare const parse: <T extends object>(jsonString: string, prefix?: string, separator?: string) => OrderedParseResult<T>;
11
+ export default parse;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const key_1 = require("./key");
4
+ const traverseObject = (obj, map, parentKey, separator) => {
5
+ const childKeys = Object.keys(obj);
6
+ if (childKeys.length === 0) {
7
+ return;
8
+ }
9
+ // Ignore storing keys for arrays
10
+ if (!Array.isArray(obj)) {
11
+ map[`${parentKey}`] = childKeys;
12
+ }
13
+ childKeys.forEach((childKey) => {
14
+ const value = obj[childKey];
15
+ if (value !== null && typeof value === 'object') {
16
+ traverseObject(value, map, `${parentKey}${separator}${(0, key_1.escapeKey)(childKey, separator)}`, separator);
17
+ }
18
+ });
19
+ };
20
+ /**
21
+ * Parse a JSON string and generate a map
22
+ *
23
+ * @param jsonString a json string
24
+ * @param prefix a non-empty `string` that controls what the key prefix value is in the generated map. Defaults to `$`.
25
+ * @param separator a non-empty `string` that controls what the key separator is in the generated map. Defaults to `~`.
26
+ * @returns an object containing the parsed `object: T` and the `map: PropertyMap`
27
+ */
28
+ const parse = (jsonString, prefix = '$', separator = '~') => {
29
+ if (prefix.length < 1) {
30
+ throw new Error('Prefix should not be an empty string.');
31
+ }
32
+ if (separator.length < 1) {
33
+ throw new Error('Separator should not be an empty string.');
34
+ }
35
+ else if (separator === '\\') {
36
+ throw new Error('Separator cannot be "\\".');
37
+ }
38
+ const obj = JSON.parse(jsonString);
39
+ const map = {};
40
+ traverseObject(obj, map, (0, key_1.escapeKey)(prefix, separator), separator);
41
+ return {
42
+ object: obj,
43
+ map,
44
+ };
45
+ };
46
+ exports.default = parse;
47
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/json-order/parse.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAGlC,MAAM,cAAc,GAAG,CACrB,GAAM,EACN,GAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,OAAO;KACR;IAED,iCAAiC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACvB,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;KACjC;IAED,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC/C,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,GAAG,IAAA,eAAS,EAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACpG;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,KAAK,GAAG,CAAmB,UAAkB,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG,EAAyB,EAAE;IAC3G,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC1D;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;SAAM,IAAI,SAAS,KAAK,IAAI,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;IAED,MAAM,GAAG,GAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAA,eAAS,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAClE,OAAO;QACL,MAAM,EAAE,GAAG;QACX,GAAG;KACJ,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,KAAK,CAAC"}
@@ -0,0 +1 @@
1
+ export {};