@did-btcr2/common 2.2.2 → 3.1.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/dist/cjs/canonicalization.js +68 -56
- package/dist/cjs/canonicalization.js.map +1 -1
- package/dist/cjs/constants.js +17 -12
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/errors.js +20 -3
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.js +5 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/json-patch.js +98 -0
- package/dist/cjs/json-patch.js.map +1 -0
- package/dist/cjs/logger.js +46 -12
- package/dist/cjs/logger.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/date.js +123 -0
- package/dist/cjs/utils/date.js.map +1 -0
- package/dist/cjs/utils/json.js +280 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/set.js +23 -0
- package/dist/cjs/utils/set.js.map +1 -0
- package/dist/cjs/utils/string.js +55 -0
- package/dist/cjs/utils/string.js.map +1 -0
- package/dist/esm/canonicalization.js +68 -56
- package/dist/esm/canonicalization.js.map +1 -1
- package/dist/esm/constants.js +17 -12
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/errors.js +20 -3
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.js +5 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/json-patch.js +98 -0
- package/dist/esm/json-patch.js.map +1 -0
- package/dist/esm/logger.js +46 -12
- package/dist/esm/logger.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/date.js +123 -0
- package/dist/esm/utils/date.js.map +1 -0
- package/dist/esm/utils/json.js +280 -0
- package/dist/esm/utils/json.js.map +1 -0
- package/dist/esm/utils/set.js +23 -0
- package/dist/esm/utils/set.js.map +1 -0
- package/dist/esm/utils/string.js +55 -0
- package/dist/esm/utils/string.js.map +1 -0
- package/dist/types/canonicalization.d.ts +40 -31
- package/dist/types/canonicalization.d.ts.map +1 -1
- package/dist/types/constants.d.ts +6 -9
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/errors.d.ts +14 -3
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interfaces.d.ts +2 -273
- package/dist/types/interfaces.d.ts.map +1 -1
- package/dist/types/json-patch.d.ts +47 -0
- package/dist/types/json-patch.d.ts.map +1 -0
- package/dist/types/logger.d.ts +31 -8
- package/dist/types/logger.d.ts.map +1 -1
- package/dist/types/types.d.ts +12 -4
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/date.d.ts +39 -0
- package/dist/types/utils/date.d.ts.map +1 -0
- package/dist/types/utils/json.d.ts +89 -0
- package/dist/types/utils/json.d.ts.map +1 -0
- package/dist/types/utils/set.d.ts +14 -0
- package/dist/types/utils/set.d.ts.map +1 -0
- package/dist/types/utils/string.d.ts +39 -0
- package/dist/types/utils/string.d.ts.map +1 -0
- package/package.json +3 -4
- package/src/canonicalization.ts +81 -64
- package/src/constants.ts +19 -13
- package/src/errors.ts +25 -3
- package/src/index.ts +5 -5
- package/src/interfaces.ts +2 -302
- package/src/json-patch.ts +103 -0
- package/src/logger.ts +59 -27
- package/src/types.ts +12 -6
- package/src/utils/date.ts +130 -0
- package/src/utils/json.ts +315 -0
- package/src/utils/set.ts +23 -0
- package/src/utils/string.ts +59 -0
- package/dist/cjs/exts.js +0 -189
- package/dist/cjs/exts.js.map +0 -1
- package/dist/cjs/patch.js +0 -163
- package/dist/cjs/patch.js.map +0 -1
- package/dist/esm/exts.js +0 -189
- package/dist/esm/exts.js.map +0 -1
- package/dist/esm/patch.js +0 -163
- package/dist/esm/patch.js.map +0 -1
- package/dist/types/exts.d.ts +0 -90
- package/dist/types/exts.d.ts.map +0 -1
- package/dist/types/patch.d.ts +0 -63
- package/dist/types/patch.d.ts.map +0 -1
- package/src/exts.ts +0 -310
- package/src/patch.ts +0 -181
- package/src/rdf-canonize.d.ts +0 -6
package/dist/esm/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAE7C,MAAM,CAAN,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,kCAA2B,CAAA;IAC3B,gCAAyB,CAAA;IACzB,oBAAa,CAAA;AACf,CAAC,EAJW,GAAG,KAAH,GAAG,QAId;AAID,MAAM,CAAC,MAAM,QAAQ,GAAI,OAAO,CAAC,GAAG,CAAC,QAAgB,IAAI,GAAG,CAAC,WAAW,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,GAAyB;IACvC,WAAW,EAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;IAC1D,IAAI,EAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;IACtC,UAAU,EAAI,CAAC,OAAO,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAiC;IACjD,KAAK,EAAM,KAAK,CAAC,KAAK;IACtB,KAAK,EAAM,KAAK,CAAC,GAAG;IACpB,IAAI,EAAO,KAAK,CAAC,IAAI;IACrB,GAAG,EAAQ,KAAK,CAAC,IAAI;IACrB,IAAI,EAAO,KAAK,CAAC,MAAM;IACvB,QAAQ,EAAG,KAAK,CAAC,OAAO;CACzB,CAAC;AAEF;;GAEG;AACH,oCAAoC;AACpC,MAAM,aAAa,GAAiC;IAClD,KAAK,EAAM,OAAO;IAClB,KAAK,EAAM,OAAO;IAClB,IAAI,EAAO,MAAM;IACjB,GAAG,EAAQ,KAAK;IAChB,IAAI,EAAO,MAAM;IACjB,QAAQ,EAAG,MAAM;CAClB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAqDA,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACvB,8BAAW,CAAA;IACX,wCAAqB,CAAA;AACzB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AACD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,wBAAO,CAAA;IACP,wBAAO,CAAA;AACX,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AACD,MAAM,CAAN,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC3B,mEAAW,CAAA;IACX,iEAAU,CAAA;IACV,mEAAW,CAAA;IACX,qEAAY,CAAA;IACZ,qEAAY,CAAA;IACZ,uEAAa,CAAA;AACjB,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,QAO9B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for date-related operations.
|
|
3
|
+
* @name DateUtils
|
|
4
|
+
* @class DateUtils
|
|
5
|
+
*/
|
|
6
|
+
export class DateUtils {
|
|
7
|
+
/**
|
|
8
|
+
* Render an ISO 8601 UTC timestamp without fractional seconds.
|
|
9
|
+
* @param {Date} [date=new Date()] - The date to format.
|
|
10
|
+
* @returns {string} The formatted date string.
|
|
11
|
+
*/
|
|
12
|
+
static toISOStringNonFractional(date = new Date()) {
|
|
13
|
+
const time = date.getTime();
|
|
14
|
+
if (Number.isNaN(time)) {
|
|
15
|
+
throw new Error(`Invalid date: ${date}`);
|
|
16
|
+
}
|
|
17
|
+
return date.toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Unix timestamp in seconds (integer).
|
|
21
|
+
* @param {Date} [date=new Date()] - The date to convert.
|
|
22
|
+
* @returns {number} The Unix timestamp in seconds.
|
|
23
|
+
*/
|
|
24
|
+
static toUnixSeconds(date = new Date()) {
|
|
25
|
+
const time = date.getTime();
|
|
26
|
+
if (Number.isNaN(time)) {
|
|
27
|
+
throw new Error(`Invalid date: ${date}`);
|
|
28
|
+
}
|
|
29
|
+
return Math.floor(date.getTime() / 1000);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate if a string is a valid UTC date string.
|
|
33
|
+
* @param {string} dateString - The date string to validate.
|
|
34
|
+
* @returns {boolean} True if valid, otherwise false.
|
|
35
|
+
* @throws {Error} If the date string is invalid.
|
|
36
|
+
*/
|
|
37
|
+
static dateStringToTimestamp(dateString) {
|
|
38
|
+
const date = new Date(dateString);
|
|
39
|
+
if (Number.isNaN(date.getTime())) {
|
|
40
|
+
return new Date(0);
|
|
41
|
+
}
|
|
42
|
+
return date;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert a blocktime (Unix timestamp in seconds) to a Date object.
|
|
46
|
+
* @param {number} blocktime - The blocktime in seconds.
|
|
47
|
+
* @returns {Date} The corresponding Date object.
|
|
48
|
+
*/
|
|
49
|
+
static blocktimeToTimestamp(blocktime) {
|
|
50
|
+
return new Date(blocktime * 1000);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validates an XMLSCHEMA11-2 dateTime string.
|
|
54
|
+
* Format: [-]YYYY-MM-DDThh:mm:ss[.fractional][Z|(+|-)hh:mm]
|
|
55
|
+
*
|
|
56
|
+
* @see https://www.w3.org/TR/xmlschema11-2/#dateTime
|
|
57
|
+
*/
|
|
58
|
+
static isValidXsdDateTime(value) {
|
|
59
|
+
// Empty or undefined value is not a valid dateTime
|
|
60
|
+
if (!value)
|
|
61
|
+
return false;
|
|
62
|
+
// Regex for XML Schema dateTime:
|
|
63
|
+
// - Optional leading minus for BCE years
|
|
64
|
+
// - Year: 4+ digits
|
|
65
|
+
// - Month: 01-12
|
|
66
|
+
// - Day: 01-31 (further validated below)
|
|
67
|
+
// - T separator
|
|
68
|
+
// - Hour: 00-23 (24:00:00 is valid end-of-day per spec)
|
|
69
|
+
// - Minute: 00-59
|
|
70
|
+
// - Second: 00-59 (with optional fractional part)
|
|
71
|
+
// - Timezone: Z or (+|-)hh:mm
|
|
72
|
+
const xsdDateTimeRegex = /^-?(\d{4,})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|[+-]\d{2}:\d{2})?$/;
|
|
73
|
+
const match = value.match(xsdDateTimeRegex);
|
|
74
|
+
if (!match)
|
|
75
|
+
return false;
|
|
76
|
+
const [, y, m, d, H, M, S, , tz] = match;
|
|
77
|
+
const year = parseInt(y, 10);
|
|
78
|
+
const month = parseInt(m, 10);
|
|
79
|
+
const day = parseInt(d, 10);
|
|
80
|
+
const hour = parseInt(H, 10);
|
|
81
|
+
const minute = parseInt(M, 10);
|
|
82
|
+
const second = parseInt(S, 10);
|
|
83
|
+
// Year 0000 is not valid in XML Schema (no year zero)
|
|
84
|
+
if (year === 0)
|
|
85
|
+
return false;
|
|
86
|
+
// Month: 1-12
|
|
87
|
+
if (month < 1 || month > 12)
|
|
88
|
+
return false;
|
|
89
|
+
// Day: validate against month (and leap year for February)
|
|
90
|
+
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
91
|
+
const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
|
|
92
|
+
const maxDay = month === 2 && isLeapYear ? 29 : daysInMonth[month - 1];
|
|
93
|
+
if (day < 1 || day > maxDay)
|
|
94
|
+
return false;
|
|
95
|
+
// Hour: 00-23, or 24:00:00 exactly (end-of-day)
|
|
96
|
+
if (hour === 24) {
|
|
97
|
+
if (minute !== 0 || second !== 0)
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
else if (hour > 23) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
// Minute: 00-59
|
|
104
|
+
if (minute > 59)
|
|
105
|
+
return false;
|
|
106
|
+
// Second: 00-59 (leap second 60 is debatable; XML Schema doesn't explicitly allow it)
|
|
107
|
+
if (second > 59)
|
|
108
|
+
return false;
|
|
109
|
+
// Validate timezone offset if present
|
|
110
|
+
if (tz && tz !== 'Z') {
|
|
111
|
+
const tzMatch = tz.match(/^[+-](\d{2}):(\d{2})$/);
|
|
112
|
+
if (tzMatch) {
|
|
113
|
+
const tzHour = parseInt(tzMatch[1], 10);
|
|
114
|
+
const tzMin = parseInt(tzMatch[2], 10);
|
|
115
|
+
if (tzHour > 14 || (tzHour === 14 && tzMin !== 0) || tzMin > 59) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for working with JSON data.
|
|
3
|
+
* @name JSONUtils
|
|
4
|
+
* @class JSONUtils
|
|
5
|
+
*/
|
|
6
|
+
export class JSONUtils {
|
|
7
|
+
/**
|
|
8
|
+
* Check if a value is a JSON object (not an array, not null, and has Object prototype).
|
|
9
|
+
* @param {unknown} value - The value to check.
|
|
10
|
+
* @returns {boolean} True if the value is a JSON object.
|
|
11
|
+
*/
|
|
12
|
+
static isObject(value) {
|
|
13
|
+
if (value === null || typeof value !== 'object')
|
|
14
|
+
return false;
|
|
15
|
+
if (Array.isArray(value))
|
|
16
|
+
return false;
|
|
17
|
+
const proto = Object.getPrototypeOf(value);
|
|
18
|
+
return proto === Object.prototype || proto === null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if a value is a parsable JSON string.
|
|
22
|
+
* @param {unknown} value - The value to check.
|
|
23
|
+
* @returns {boolean} True if the value is a parsable JSON string.
|
|
24
|
+
*/
|
|
25
|
+
static isParsable(value) {
|
|
26
|
+
if (typeof value !== 'string')
|
|
27
|
+
return false;
|
|
28
|
+
try {
|
|
29
|
+
JSON.parse(value);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if a value is an unprototyped object (i.e., Object.create(null)).
|
|
38
|
+
* @param {unknown} value - The value to check.
|
|
39
|
+
* @returns {boolean} True if the value is an unprototyped object.
|
|
40
|
+
*/
|
|
41
|
+
static isUnprototyped(value) {
|
|
42
|
+
if (value === null || typeof value !== 'object')
|
|
43
|
+
return false;
|
|
44
|
+
return Object.getPrototypeOf(value) === null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Normalize a JSON value by stripping prototypes from all objects within it.
|
|
48
|
+
* @param {T} value - The JSON value to normalize.
|
|
49
|
+
* @returns {Prototyped} The normalized JSON value.
|
|
50
|
+
*/
|
|
51
|
+
static normalize(value) {
|
|
52
|
+
return this.cloneInternal(value, { stripPrototypes: true });
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Shallow copy of a JSON object.
|
|
56
|
+
* @param {T extends JSONObject} value - The JSON object to copy.
|
|
57
|
+
* @returns {T} The copied JSON object.
|
|
58
|
+
*/
|
|
59
|
+
static copy(value) {
|
|
60
|
+
return { ...value };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Deep clone a JSON value.
|
|
64
|
+
* @param {T} value - The JSON value to clone.
|
|
65
|
+
* @returns {T} The cloned JSON value.
|
|
66
|
+
*/
|
|
67
|
+
static clone(value) {
|
|
68
|
+
if (typeof structuredClone === 'function') {
|
|
69
|
+
return structuredClone(value);
|
|
70
|
+
}
|
|
71
|
+
return this.cloneInternal(value);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Deep clone a JSON value, replacing strings that match a pattern.
|
|
75
|
+
* @param {T} value - The JSON value to clone.
|
|
76
|
+
* @param {RegExp} pattern - The regex pattern to match strings.
|
|
77
|
+
* @param {string} replacement - The replacement string.
|
|
78
|
+
* @returns {T} The cloned JSON value with replacements.
|
|
79
|
+
*/
|
|
80
|
+
static cloneReplace(value, pattern, replacement) {
|
|
81
|
+
return this.cloneInternal(value, {
|
|
82
|
+
transform: (candidate) => typeof candidate === 'string'
|
|
83
|
+
? candidate.replace(pattern, replacement)
|
|
84
|
+
: candidate
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Deep equality check between two values.
|
|
89
|
+
* @param {unknown} a - The first value to compare.
|
|
90
|
+
* @param {unknown} b - The second value to compare.
|
|
91
|
+
* @param {WeakMap<object, object>} seen - A WeakMap to track seen object pairs for circular reference detection.
|
|
92
|
+
* @returns {boolean} True if the values are deeply equal.
|
|
93
|
+
*/
|
|
94
|
+
static deepEqual(a, b, seen = new WeakMap(), depth = 0) {
|
|
95
|
+
if (depth > 1024) {
|
|
96
|
+
throw new Error('Maximum comparison depth exceeded');
|
|
97
|
+
}
|
|
98
|
+
if (Object.is(a, b))
|
|
99
|
+
return true;
|
|
100
|
+
if (typeof a !== typeof b)
|
|
101
|
+
return false;
|
|
102
|
+
if (a === null || b === null)
|
|
103
|
+
return false;
|
|
104
|
+
if (typeof a !== 'object')
|
|
105
|
+
return false;
|
|
106
|
+
if (seen.get(a) === b)
|
|
107
|
+
return true;
|
|
108
|
+
seen.set(a, b);
|
|
109
|
+
if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
|
|
110
|
+
const viewA = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
|
|
111
|
+
const viewB = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
|
|
112
|
+
if (viewA.byteLength !== viewB.byteLength)
|
|
113
|
+
return false;
|
|
114
|
+
for (let i = 0; i < viewA.byteLength; i++) {
|
|
115
|
+
if (viewA[i] !== viewB[i])
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
if (a instanceof Date && b instanceof Date) {
|
|
121
|
+
return a.getTime() === b.getTime();
|
|
122
|
+
}
|
|
123
|
+
if (a instanceof Set && b instanceof Set) {
|
|
124
|
+
if (a.size !== b.size)
|
|
125
|
+
return false;
|
|
126
|
+
for (const itemA of a) {
|
|
127
|
+
let matched = false;
|
|
128
|
+
for (const itemB of b) {
|
|
129
|
+
if (this.deepEqual(itemA, itemB, seen, depth + 1)) {
|
|
130
|
+
matched = true;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!matched)
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
if (a instanceof Map && b instanceof Map) {
|
|
140
|
+
if (a.size !== b.size)
|
|
141
|
+
return false;
|
|
142
|
+
for (const [keyA, valueA] of a) {
|
|
143
|
+
let matched = false;
|
|
144
|
+
if (b.has(keyA)) {
|
|
145
|
+
matched = this.deepEqual(valueA, b.get(keyA), seen, depth + 1);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
for (const [keyB, valueB] of b) {
|
|
149
|
+
if (this.deepEqual(keyA, keyB, seen, depth + 1)
|
|
150
|
+
&& this.deepEqual(valueA, valueB, seen, depth + 1)) {
|
|
151
|
+
matched = true;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (!matched)
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
162
|
+
if (a.length !== b.length)
|
|
163
|
+
return false;
|
|
164
|
+
for (let i = 0; i < a.length; i++) {
|
|
165
|
+
if (!this.deepEqual(a[i], b[i], seen, depth + 1))
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
const keysA = Object.keys(a);
|
|
171
|
+
const keysB = Object.keys(b);
|
|
172
|
+
if (keysA.length !== keysB.length)
|
|
173
|
+
return false;
|
|
174
|
+
for (const key of keysA) {
|
|
175
|
+
if (!Object.prototype.hasOwnProperty.call(b, key))
|
|
176
|
+
return false;
|
|
177
|
+
if (!this.deepEqual(a[key], b[key], seen, depth + 1))
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Delete specified keys from a JSON value.
|
|
184
|
+
* @param {T} value - The JSON value to process.
|
|
185
|
+
* @param {Array<string | number | symbol>} keys - The keys to delete.
|
|
186
|
+
* @returns {T} The JSON value with specified keys deleted.
|
|
187
|
+
*/
|
|
188
|
+
static deleteKeys(value, keys) {
|
|
189
|
+
const keySet = new Set(keys.map(key => typeof key === 'number' ? key.toString() : key));
|
|
190
|
+
const walk = (candidate) => {
|
|
191
|
+
if (Array.isArray(candidate)) {
|
|
192
|
+
return candidate.map(item => walk(item));
|
|
193
|
+
}
|
|
194
|
+
if (candidate && typeof candidate === 'object') {
|
|
195
|
+
const result = Array.isArray(candidate) ? [] : {};
|
|
196
|
+
for (const key of Object.keys(candidate)) {
|
|
197
|
+
if (keySet.has(key))
|
|
198
|
+
continue;
|
|
199
|
+
result[key] = walk(candidate[key]);
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
return candidate;
|
|
204
|
+
};
|
|
205
|
+
return walk(value);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Sanitize a JSON value by removing undefined values from objects and arrays.
|
|
209
|
+
* @param {T} value - The JSON value to sanitize.
|
|
210
|
+
* @returns {T} The sanitized JSON value.
|
|
211
|
+
*/
|
|
212
|
+
static sanitize(value) {
|
|
213
|
+
const walk = (candidate) => {
|
|
214
|
+
if (Array.isArray(candidate)) {
|
|
215
|
+
return candidate.map(item => walk(item));
|
|
216
|
+
}
|
|
217
|
+
if (candidate && typeof candidate === 'object') {
|
|
218
|
+
const result = {};
|
|
219
|
+
for (const [key, val] of Object.entries(candidate)) {
|
|
220
|
+
const sanitized = walk(val);
|
|
221
|
+
if (sanitized !== undefined) {
|
|
222
|
+
result[key] = sanitized;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
return candidate;
|
|
228
|
+
};
|
|
229
|
+
return walk(value);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Internal function to clone JSON values with options.
|
|
233
|
+
* @param {T} value - The value to clone.
|
|
234
|
+
* @param {CloneOptions} options - The cloning options.
|
|
235
|
+
* @param {WeakMap<object, any>} seen - A WeakMap to track seen objects for circular reference detection.
|
|
236
|
+
* @returns {any} The cloned value.
|
|
237
|
+
*/
|
|
238
|
+
static cloneInternal(value, options = {}, seen = new WeakMap(), depth = 0) {
|
|
239
|
+
if (depth > 1024) {
|
|
240
|
+
throw new Error('Maximum clone depth exceeded');
|
|
241
|
+
}
|
|
242
|
+
const transformed = options.transform ? options.transform(value) : value;
|
|
243
|
+
if (transformed !== value)
|
|
244
|
+
return transformed;
|
|
245
|
+
if (typeof value !== 'object' || value === null) {
|
|
246
|
+
return transformed;
|
|
247
|
+
}
|
|
248
|
+
if (seen.has(value)) {
|
|
249
|
+
throw new Error('Cannot clone circular structure');
|
|
250
|
+
}
|
|
251
|
+
// Handle arrays and typed arrays
|
|
252
|
+
if (Array.isArray(value)) {
|
|
253
|
+
const clone = [];
|
|
254
|
+
seen.set(value, clone);
|
|
255
|
+
for (const item of value) {
|
|
256
|
+
clone.push(this.cloneInternal(item, options, seen, depth + 1));
|
|
257
|
+
}
|
|
258
|
+
return clone;
|
|
259
|
+
}
|
|
260
|
+
// Handle ArrayBuffer views (typed arrays, DataView)
|
|
261
|
+
if (ArrayBuffer.isView(value)) {
|
|
262
|
+
if (value instanceof DataView) {
|
|
263
|
+
return new DataView(value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength));
|
|
264
|
+
}
|
|
265
|
+
if (typeof value.slice === 'function') {
|
|
266
|
+
return value.slice();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (value instanceof Date) {
|
|
270
|
+
return new Date(value.getTime());
|
|
271
|
+
}
|
|
272
|
+
const result = options.stripPrototypes ? {} : Object.create(Object.getPrototypeOf(value));
|
|
273
|
+
seen.set(value, result);
|
|
274
|
+
for (const key of Object.keys(value)) {
|
|
275
|
+
result[key] = this.cloneInternal(value[key], options, seen, depth + 1);
|
|
276
|
+
}
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for set operations.
|
|
3
|
+
* @name SetUtils
|
|
4
|
+
* @class SetUtils
|
|
5
|
+
*/
|
|
6
|
+
export class SetUtils {
|
|
7
|
+
/**
|
|
8
|
+
* Compute the set difference without mutating the inputs.
|
|
9
|
+
* @param {Set<T>} left - The left set.
|
|
10
|
+
* @param {Set<T>} right - The right set.
|
|
11
|
+
* @returns {Set<T>} A new set containing elements in `left` that are not in `right`.
|
|
12
|
+
*/
|
|
13
|
+
static difference(left, right) {
|
|
14
|
+
const result = new Set();
|
|
15
|
+
for (const value of left) {
|
|
16
|
+
if (!right.has(value)) {
|
|
17
|
+
result.add(value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/utils/set.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACnB;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAI,IAAY,EAAE,KAAa;QAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class string-related operations.
|
|
3
|
+
* @name StringUtils
|
|
4
|
+
* @class StringUtils
|
|
5
|
+
*/
|
|
6
|
+
export class StringUtils {
|
|
7
|
+
/**
|
|
8
|
+
* Escape special characters in a string for use in a regular expression.
|
|
9
|
+
* @param {string} value - The string to escape.
|
|
10
|
+
* @returns {string} The escaped string.
|
|
11
|
+
*/
|
|
12
|
+
static escapeRegExp(value) {
|
|
13
|
+
return value.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convert a camelCase string to snake_case.
|
|
17
|
+
* @param {string} value - The camelCase string to convert.
|
|
18
|
+
* @returns {string} The converted snake_case string.
|
|
19
|
+
*/
|
|
20
|
+
static toSnake(value) {
|
|
21
|
+
return value
|
|
22
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
23
|
+
.toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert a string to SNAKE_SCREAMING_CASE.
|
|
27
|
+
* @param {string} value - The string to convert.
|
|
28
|
+
* @returns {string} The converted SNAKE_SCREAMING_CASE string.
|
|
29
|
+
*/
|
|
30
|
+
static toSnakeScream(value) {
|
|
31
|
+
return this.toSnake(value).toUpperCase();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Remove the last character from a string.
|
|
35
|
+
* @param {string} value - The string to chop.
|
|
36
|
+
* @returns {string} The chopped string.
|
|
37
|
+
*/
|
|
38
|
+
static chop(value) {
|
|
39
|
+
return value.length > 0 ? value.slice(0, -1) : '';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Replace the end of a string if it matches a given pattern.
|
|
43
|
+
* @param {string} value - The string to modify.
|
|
44
|
+
* @param {string | RegExp} pattern - The pattern to match at the end of the string.
|
|
45
|
+
* @param {string} [replacement=''] - The replacement string.
|
|
46
|
+
* @returns {string} The modified string.
|
|
47
|
+
*/
|
|
48
|
+
static replaceEnd(value, pattern, replacement = '') {
|
|
49
|
+
const regex = pattern instanceof RegExp
|
|
50
|
+
? new RegExp(pattern.source.endsWith('$') ? pattern.source : `${pattern.source}$`, pattern.flags.replace(/g/g, ''))
|
|
51
|
+
: new RegExp(`${this.escapeRegExp(pattern)}$`);
|
|
52
|
+
return value.replace(regex, replacement);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/utils/string.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,KAAa;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,KAAK;aACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;aACtC,WAAW,EAAE,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,KAAa;QACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,OAAwB,EAAE,cAAsB,EAAE;QACjF,MAAM,KAAK,GAAG,OAAO,YAAY,MAAM;YACrC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnH,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEjD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF"}
|