@squiz/dx-common-lib 1.21.1-alpha.7 → 1.22.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.
- package/.npm/_logs/2023-03-29T01_26_08_740Z-debug-0.log +37 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/json-order/index.d.ts +6 -0
- package/lib/json-order/index.js +11 -0
- package/lib/json-order/index.js.map +1 -0
- package/lib/json-order/key.d.ts +2 -0
- package/lib/json-order/key.js +44 -0
- package/lib/json-order/key.js.map +1 -0
- package/lib/json-order/key.spec.d.ts +1 -0
- package/lib/json-order/key.spec.js +40 -0
- package/lib/json-order/key.spec.js.map +1 -0
- package/lib/json-order/models.d.ts +7 -0
- package/lib/json-order/models.js +3 -0
- package/lib/json-order/models.js.map +1 -0
- package/lib/json-order/order.d.ts +11 -0
- package/lib/json-order/order.js +75 -0
- package/lib/json-order/order.js.map +1 -0
- package/lib/json-order/order.spec.d.ts +1 -0
- package/lib/json-order/order.spec.js +191 -0
- package/lib/json-order/order.spec.js.map +1 -0
- package/lib/json-order/parse.d.ts +11 -0
- package/lib/json-order/parse.js +47 -0
- package/lib/json-order/parse.js.map +1 -0
- package/lib/json-order/parse.spec.d.ts +1 -0
- package/lib/json-order/parse.spec.js +260 -0
- package/lib/json-order/parse.spec.js.map +1 -0
- package/lib/json-order/stringify.d.ts +12 -0
- package/lib/json-order/stringify.js +20 -0
- package/lib/json-order/stringify.js.map +1 -0
- package/lib/json-order/stringify.spec.d.ts +1 -0
- package/lib/json-order/stringify.spec.js +123 -0
- package/lib/json-order/stringify.spec.js.map +1 -0
- package/lib/server-utils/errorMiddleware.js +1 -0
- package/lib/server-utils/errorMiddleware.js.map +1 -1
- package/lib/server-utils/errorMiddleware.spec.js +1 -0
- package/lib/server-utils/errorMiddleware.spec.js.map +1 -1
- package/package.json +9 -6
- package/src/index.ts +1 -0
- package/src/json-order/index.ts +6 -0
- package/src/json-order/key.spec.ts +39 -0
- package/src/json-order/key.ts +40 -0
- package/src/json-order/models.ts +8 -0
- package/src/json-order/order.spec.ts +251 -0
- package/src/json-order/order.ts +95 -0
- package/src/json-order/parse.spec.ts +302 -0
- package/src/json-order/parse.ts +59 -0
- package/src/json-order/stringify.spec.ts +170 -0
- package/src/json-order/stringify.ts +17 -0
- package/src/server-utils/errorMiddleware.spec.ts +1 -0
- package/src/server-utils/errorMiddleware.ts +2 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/.npm/_logs/2023-03-08T00_07_18_460Z-debug-0.log +0 -39
@@ -0,0 +1,37 @@
|
|
1
|
+
0 verbose cli /usr/local/bin/node /usr/local/bin/npm
|
2
|
+
1 info using npm@9.5.0
|
3
|
+
2 info using node@v18.15.0
|
4
|
+
3 timing npm:load:whichnode Completed in 1ms
|
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 1ms
|
8
|
+
7 timing config:load:cli Completed in 1ms
|
9
|
+
8 timing config:load:env Completed in 1ms
|
10
|
+
9 info found workspace root at /builds/developer-experience/cmp
|
11
|
+
10 timing config:load:file:/builds/developer-experience/cmp/.npmrc Completed in 0ms
|
12
|
+
11 timing config:load:project Completed in 19ms
|
13
|
+
12 timing config:load:file:/root/.npmrc Completed in 1ms
|
14
|
+
13 timing config:load:user Completed in 1ms
|
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 1ms
|
18
|
+
17 timing config:load Completed in 28ms
|
19
|
+
18 timing npm:load:configload Completed in 28ms
|
20
|
+
19 timing npm:load:mkdirpcache Completed in 0ms
|
21
|
+
20 timing npm:load:mkdirplogs Completed in 1ms
|
22
|
+
21 verbose title npm run compile
|
23
|
+
22 verbose argv "run" "compile" "--"
|
24
|
+
23 timing npm:load:setTitle Completed in 1ms
|
25
|
+
24 timing config:load:flatten Completed in 4ms
|
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-29T01_26_08_740Z-
|
28
|
+
27 verbose logfile /builds/developer-experience/cmp/packages/dx-common-lib/.npm/_logs/2023-03-29T01_26_08_740Z-debug-0.log
|
29
|
+
28 timing npm:load:logFile Completed in 4ms
|
30
|
+
29 timing npm:load:timers Completed in 0ms
|
31
|
+
30 timing npm:load:configScope Completed in 0ms
|
32
|
+
31 timing npm:load Completed in 42ms
|
33
|
+
32 silly logfile done cleaning log files
|
34
|
+
33 timing command:run Completed in 5560ms
|
35
|
+
34 verbose exit 0
|
36
|
+
35 timing npm Completed in 5616ms
|
37
|
+
36 info ok
|
package/lib/index.d.ts
CHANGED
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,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 @@
|
|
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":";;;;;AAAA,wEAAyC;AACzC,+BAA4C;AAQ5C,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,SAAiB,EAAa,EAAE;IAC7E,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,MAAM,KAAK,GAAG,IAAA,cAAQ,EAAC,GAAG,EAAE,SAAS,CAAC;SACnC,KAAK,CAAC,CAAC,CAAC;SACR,MAAM,CAAC,CAAC,CAAsB,EAAE,CAAS,EAAE,EAAE;QAC5C,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,EAAE,GAAG,CAAC,CAAC;IAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,KAAa,EAAE,SAAiB,EAAE,EAAE;IACjF,IAAA,cAAQ,EAAC,GAAG,EAAE,SAAS,CAAC;SACrB,KAAK,CAAC,CAAC,CAAC;SACR,MAAM,CAAC,CAAC,CAAsB,EAAE,CAAS,EAAE,GAAW,EAAE,GAAkB,EAAU,EAAE;QACrF,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAS,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAChH,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;SACnB;QAED,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,EAAE,GAAG,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAE,YAAoB,EAAE,YAAoB,EAAE,SAAiB,EAAE,EAAE;IAC3G,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;KAClE;AACH,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,KAAK,GAAG,CAAmB,YAAe,EAAE,GAAuB,EAAE,SAAS,GAAG,GAAG,EAAK,EAAE;IAC/F,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,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,YAAY,CAAC;KACrB;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACrB,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,gBAAgB;QAChB,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAE/D,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,uCAAuC;YACvC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAE9D,4CAA4C;YAC5C,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACxB,YAAY,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,SAAS,GAAG,SAAS,GAAG,IAAA,eAAS,EAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAC5G,CAAC;SACH;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,YAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,kBAAe,KAAK,CAAC"}
|
@@ -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 {};
|