@twin.org/core 0.0.3-next.38 → 0.0.3-next.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.
- package/dist/es/helpers/arrayHelper.js +2 -0
- package/dist/es/helpers/arrayHelper.js.map +1 -1
- package/dist/es/helpers/objectHelper.js +8 -34
- package/dist/es/helpers/objectHelper.js.map +1 -1
- package/dist/es/helpers/stringHelper.js +11 -0
- package/dist/es/helpers/stringHelper.js.map +1 -1
- package/dist/types/helpers/arrayHelper.d.ts +1 -8
- package/dist/types/helpers/objectHelper.d.ts +6 -16
- package/dist/types/helpers/stringHelper.d.ts +6 -0
- package/docs/changelog.md +21 -0
- package/docs/reference/classes/ArrayHelper.md +8 -42
- package/docs/reference/classes/ObjectHelper.md +21 -55
- package/docs/reference/classes/StringHelper.md +22 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrayHelper.js","sourceRoot":"","sources":["../../../src/helpers/arrayHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arrayHelper.js","sourceRoot":"","sources":["../../../src/helpers/arrayHelper.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,WAAW;IACvB;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAC,IAAa,EAAE,IAAa;QACjD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACd,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,iBAAiB,CAC9B,KAA0B;QAE1B,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,SAAkD,CAAC;QAC3D,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,CAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAA8C,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,KAAK,CAA0C,CAAC;IACzD,CAAC;CACD","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is } from \"../utils/is.js\";\n\n/**\n * Class to help with arrays.\n */\nexport class ArrayHelper {\n\t/**\n\t * Do the two arrays match.\n\t * @param arr1 The first array.\n\t * @param arr2 The second array.\n\t * @returns True if both arrays are empty of have the same values.\n\t */\n\tpublic static matches(arr1: unknown, arr2: unknown): boolean {\n\t\tif (Is.empty(arr1) && Is.empty(arr2)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!((Is.array(arr1) && Is.array(arr2)) || (Is.typedArray(arr1) && Is.typedArray(arr2)))) {\n\t\t\treturn false;\n\t\t}\n\t\tif (arr1.length !== arr2.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < arr1.length; i++) {\n\t\t\tif (arr1[i] !== arr2[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Convert an object or array to an array.\n\t * @param value The object or array to convert.\n\t * @returns The array.\n\t */\n\tpublic static fromObjectOrArray<T = unknown>(\n\t\tvalue: T | T[] | undefined\n\t): T extends undefined ? undefined : T[] {\n\t\tif (Is.empty(value)) {\n\t\t\treturn undefined as T extends undefined ? undefined : T[];\n\t\t}\n\t\tif (Is.array<T>(value)) {\n\t\t\treturn value as T extends undefined ? undefined : T[];\n\t\t}\n\t\treturn [value] as T extends undefined ? undefined : T[];\n\t}\n}\n"]}
|
|
@@ -44,7 +44,7 @@ export class ObjectHelper {
|
|
|
44
44
|
/**
|
|
45
45
|
* Make a deep clone of an object.
|
|
46
46
|
* @param obj The object to clone.
|
|
47
|
-
* @returns The objects clone.
|
|
47
|
+
* @returns The objects clone, or undefined if the input was undefined.
|
|
48
48
|
*/
|
|
49
49
|
static clone(obj) {
|
|
50
50
|
if (Is.undefined(obj)) {
|
|
@@ -193,8 +193,8 @@ export class ObjectHelper {
|
|
|
193
193
|
}
|
|
194
194
|
/**
|
|
195
195
|
* Delete the property of an unknown object.
|
|
196
|
-
* @param obj The object to
|
|
197
|
-
* @param property The property to
|
|
196
|
+
* @param obj The object to delete the property from.
|
|
197
|
+
* @param property The property to delete.
|
|
198
198
|
*/
|
|
199
199
|
static propertyDelete(obj, property) {
|
|
200
200
|
if (Is.object(obj)) {
|
|
@@ -225,27 +225,27 @@ export class ObjectHelper {
|
|
|
225
225
|
* Pick a subset of properties from an object.
|
|
226
226
|
* @param obj The object to pick the properties from.
|
|
227
227
|
* @param keys The property keys to pick.
|
|
228
|
-
* @returns The
|
|
228
|
+
* @returns The picked object, or undefined if the input was undefined.
|
|
229
229
|
*/
|
|
230
230
|
static pick(obj, keys) {
|
|
231
|
-
if (Is.object(obj)
|
|
231
|
+
if (Is.object(obj)) {
|
|
232
232
|
const result = {};
|
|
233
233
|
for (const key of keys) {
|
|
234
234
|
result[key] = obj[key];
|
|
235
235
|
}
|
|
236
236
|
return result;
|
|
237
237
|
}
|
|
238
|
-
return
|
|
238
|
+
return undefined;
|
|
239
239
|
}
|
|
240
240
|
/**
|
|
241
241
|
* Omit a subset of properties from an object.
|
|
242
242
|
* @param obj The object to omit the properties from.
|
|
243
243
|
* @param keys The property keys to omit.
|
|
244
|
-
* @returns The
|
|
244
|
+
* @returns The object without the omitted keys, or undefined if the input was undefined.
|
|
245
245
|
*/
|
|
246
246
|
static omit(obj, keys) {
|
|
247
247
|
if (Is.object(obj) && Is.arrayValue(keys)) {
|
|
248
|
-
const result =
|
|
248
|
+
const result = ObjectHelper.clone(obj);
|
|
249
249
|
for (const key of keys) {
|
|
250
250
|
delete result[key];
|
|
251
251
|
}
|
|
@@ -253,32 +253,6 @@ export class ObjectHelper {
|
|
|
253
253
|
}
|
|
254
254
|
return obj;
|
|
255
255
|
}
|
|
256
|
-
/**
|
|
257
|
-
* Split an object into two with the specified keys.
|
|
258
|
-
* @param obj The object to split.
|
|
259
|
-
* @param keys The property keys to split.
|
|
260
|
-
* @returns The two partial objects.
|
|
261
|
-
*/
|
|
262
|
-
static split(obj, keys) {
|
|
263
|
-
if (Is.object(obj) && Is.array(keys)) {
|
|
264
|
-
const picked = {};
|
|
265
|
-
const omitted = {};
|
|
266
|
-
const allKeys = Object.keys(obj);
|
|
267
|
-
for (const key of allKeys) {
|
|
268
|
-
if (keys.includes(key)) {
|
|
269
|
-
picked[key] = obj[key];
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
omitted[key] = obj[key];
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return {
|
|
276
|
-
picked: Object.keys(picked).length > 0 ? picked : undefined,
|
|
277
|
-
omitted: Object.keys(omitted).length > 0 ? omitted : undefined
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
return { picked: obj, omitted: undefined };
|
|
281
|
-
}
|
|
282
256
|
/**
|
|
283
257
|
* Converter the non JSON primitives to extended types.
|
|
284
258
|
* @param obj The object to convert.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectHelper.js","sourceRoot":"","sources":["../../../src/helpers/objectHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { nameof } from \"@twin.org/nameof\";\nimport { JsonHelper } from \"./jsonHelper.js\";\nimport { GeneralError } from \"../errors/generalError.js\";\nimport { Converter } from \"../utils/converter.js\";\nimport { Is } from \"../utils/is.js\";\n\n/**\n * Class to help with objects.\n */\nexport class ObjectHelper {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ObjectHelper>();\n\n\t/**\n\t * Convert an object to bytes.\n\t * @param obj The object to convert.\n\t * @param format Format the JSON content.\n\t * @returns The object as bytes.\n\t */\n\tpublic static toBytes<T>(obj: T | undefined, format: boolean = false): Uint8Array {\n\t\tif (Is.undefined(obj)) {\n\t\t\treturn new Uint8Array();\n\t\t}\n\t\tconst json = format ? JSON.stringify(obj, undefined, \"\\t\") : JSON.stringify(obj);\n\n\t\treturn Converter.utf8ToBytes(json);\n\t}\n\n\t/**\n\t * Convert a bytes to an object.\n\t * @param bytes The bytes to convert to an object.\n\t * @returns The object.\n\t * @throws GeneralError if there was an error parsing the JSON.\n\t */\n\tpublic static fromBytes<T>(bytes: Uint8Array | undefined | null): T {\n\t\tif (Is.empty(bytes) || bytes.length === 0) {\n\t\t\treturn undefined as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\tconst utf8 = Converter.bytesToUtf8(bytes);\n\t\t\treturn JSON.parse(utf8) as T;\n\t\t} catch (err) {\n\t\t\tthrow new GeneralError(ObjectHelper.CLASS_NAME, \"failedBytesToJSON\", undefined, err);\n\t\t}\n\t}\n\n\t/**\n\t * Make a deep clone of an object.\n\t * @param obj The object to clone.\n\t * @returns The objects clone.\n\t */\n\tpublic static clone<T>(obj: T): T {\n\t\tif (Is.undefined(obj)) {\n\t\t\treturn undefined as T;\n\t\t}\n\t\treturn structuredClone(obj);\n\t}\n\n\t/**\n\t * Deep merge objects.\n\t * @param obj1 The first object to merge.\n\t * @param obj2 The second object to merge.\n\t * @returns The combined deep merge of the objects.\n\t */\n\tpublic static merge<T = unknown, U = unknown>(obj1: T, obj2: U): T & U {\n\t\tif (Is.empty(obj1)) {\n\t\t\treturn ObjectHelper.clone(obj2) as T & U;\n\t\t}\n\t\tif (Is.empty(obj2)) {\n\t\t\treturn ObjectHelper.clone(obj1) as T & U;\n\t\t}\n\n\t\tconst obj1Clone = ObjectHelper.clone(obj1);\n\n\t\tif (Is.object(obj1Clone) && Is.object(obj2)) {\n\t\t\tconst keys = Object.keys(obj2);\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (Is.object(obj1Clone[key]) && Is.object(obj2[key])) {\n\t\t\t\t\tObjectHelper.propertySet(obj1Clone, key, ObjectHelper.merge(obj1Clone[key], obj2[key]));\n\t\t\t\t} else {\n\t\t\t\t\tObjectHelper.propertySet(obj1Clone, key, obj2[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj1Clone as T & U;\n\t}\n\n\t/**\n\t * Does one object equal another.\n\t * @param obj1 The first object to compare.\n\t * @param obj2 The second object to compare.\n\t * @param strictPropertyOrder Should the properties be in the same order, defaults to true.\n\t * @returns True is the objects are equal.\n\t */\n\tpublic static equal<T>(obj1: T, obj2: T, strictPropertyOrder?: boolean): boolean {\n\t\tif (strictPropertyOrder ?? true) {\n\t\t\treturn JSON.stringify(obj1) === JSON.stringify(obj2);\n\t\t}\n\t\treturn JsonHelper.canonicalize(obj1) === JsonHelper.canonicalize(obj2);\n\t}\n\n\t/**\n\t * Get the property of an unknown object.\n\t * @param obj The object to get the property from.\n\t * @param property The property to get, can be separated by dots for nested path.\n\t * @returns The property.\n\t */\n\tpublic static propertyGet<T = unknown>(obj: unknown, property: string): T | undefined {\n\t\tconst pathParts = property.split(\".\");\n\n\t\tlet pathValue: unknown = obj;\n\t\tfor (const pathPart of pathParts) {\n\t\t\t// Is the path part numeric i.e. an array index.\n\t\t\tconst arrayMatch = /^(\\d+)$/.exec(pathPart);\n\n\t\t\tif (arrayMatch) {\n\t\t\t\tconst arrayIndex = Number.parseInt(arrayMatch[1], 10);\n\n\t\t\t\tif (Is.arrayValue(pathValue) && arrayIndex < pathValue.length) {\n\t\t\t\t\t// There is no prop name so this is a direct array index on the current object\n\t\t\t\t\tpathValue = pathValue[arrayIndex];\n\t\t\t\t} else {\n\t\t\t\t\t// Array index for non array object so return\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t} else if (Is.object(pathValue)) {\n\t\t\t\t// No array part in path so assume object sub property\n\t\t\t\tpathValue = pathValue[pathPart];\n\t\t\t} else {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn pathValue as T;\n\t}\n\n\t/**\n\t * Set the property of an unknown object.\n\t * @param obj The object to set the property from.\n\t * @param property The property to set.\n\t * @param value The value to set.\n\t * @throws GeneralError if the property target is not an object.\n\t */\n\tpublic static propertySet(obj: unknown, property: string, value: unknown): void {\n\t\tconst pathParts = property.split(\".\");\n\n\t\tlet pathValue: unknown = obj;\n\t\tlet parentObj: unknown;\n\t\tfor (let i = 0; i < pathParts.length; i++) {\n\t\t\tconst pathPart = pathParts[i];\n\n\t\t\t// Is the path part numeric i.e. an array index.\n\t\t\tconst arrayMatch = /^(\\d+)$/.exec(pathPart);\n\t\t\tconst arrayIndex = arrayMatch ? Number.parseInt(arrayMatch[1], 10) : -1;\n\n\t\t\tif (i === pathParts.length - 1) {\n\t\t\t\t// Last part of path so set the value\n\t\t\t\tif (arrayIndex >= 0) {\n\t\t\t\t\tif (Is.array(pathValue)) {\n\t\t\t\t\t\tpathValue[arrayIndex] = value;\n\t\t\t\t\t} else if (Is.object(pathValue)) {\n\t\t\t\t\t\tpathValue[arrayIndex] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new GeneralError(ObjectHelper.CLASS_NAME, \"cannotSetArrayIndex\", {\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tindex: arrayIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (Is.object(pathValue)) {\n\t\t\t\t\tpathValue[pathPart] = value;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new GeneralError(ObjectHelper.CLASS_NAME, \"cannotSetProperty\", { property });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tparentObj = pathValue;\n\t\t\t\tif (Is.object(pathValue)) {\n\t\t\t\t\tpathValue = pathValue[pathPart];\n\t\t\t\t} else if (Is.array(pathValue)) {\n\t\t\t\t\tpathValue = pathValue[arrayIndex];\n\t\t\t\t}\n\n\t\t\t\tif (Is.empty(pathValue)) {\n\t\t\t\t\tconst nextArrayMatch = /^(\\d+)$/.exec(pathParts[i + 1]);\n\t\t\t\t\tconst nextArrayIndex = nextArrayMatch ? Number.parseInt(nextArrayMatch[1], 10) : -1;\n\n\t\t\t\t\tif (nextArrayIndex >= 0) {\n\t\t\t\t\t\tpathValue = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpathValue = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Is.object(parentObj)) {\n\t\t\t\t\t\tparentObj[pathPart] = pathValue;\n\t\t\t\t\t} else if (Is.array(parentObj)) {\n\t\t\t\t\t\tparentObj[arrayIndex] = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Delete the property of an unknown object.\n\t * @param obj The object to set the property from.\n\t * @param property The property to set\n\t */\n\tpublic static propertyDelete(obj: unknown, property: string): void {\n\t\tif (Is.object(obj)) {\n\t\t\tdelete obj[property];\n\t\t}\n\t}\n\n\t/**\n\t * Extract a property from the object, providing alternative names.\n\t * @param obj The object to extract from.\n\t * @param propertyNames The possible names for the property.\n\t * @param removeProperties Remove the properties from the object, defaults to true.\n\t * @returns The property if available.\n\t */\n\tpublic static extractProperty<T>(\n\t\tobj: unknown,\n\t\tpropertyNames: string | string[],\n\t\tremoveProperties: boolean = true\n\t): T | undefined {\n\t\tlet retVal: T | undefined;\n\n\t\tif (Is.object(obj)) {\n\t\t\tconst names = Is.string(propertyNames) ? [propertyNames] : propertyNames;\n\n\t\t\tfor (const prop of names) {\n\t\t\t\tretVal ??= ObjectHelper.propertyGet<T>(obj, prop);\n\t\t\t\tif (removeProperties) {\n\t\t\t\t\tObjectHelper.propertyDelete(obj, prop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\t/**\n\t * Pick a subset of properties from an object.\n\t * @param obj The object to pick the properties from.\n\t * @param keys The property keys to pick.\n\t * @returns The partial object.\n\t */\n\tpublic static pick<T>(obj: T | undefined, keys?: (keyof T)[]): Partial<T> {\n\t\tif (Is.object(obj) && Is.arrayValue(keys)) {\n\t\t\tconst result: Partial<T> = {};\n\t\t\tfor (const key of keys) {\n\t\t\t\tresult[key] = obj[key];\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\treturn obj as Partial<T>;\n\t}\n\n\t/**\n\t * Omit a subset of properties from an object.\n\t * @param obj The object to omit the properties from.\n\t * @param keys The property keys to omit.\n\t * @returns The partial object.\n\t */\n\tpublic static omit<T>(obj: T | undefined, keys?: (keyof T)[]): Partial<T> {\n\t\tif (Is.object(obj) && Is.arrayValue(keys)) {\n\t\t\tconst result = { ...obj };\n\t\t\tfor (const key of keys) {\n\t\t\t\tdelete result[key];\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\treturn obj as Partial<T>;\n\t}\n\n\t/**\n\t * Split an object into two with the specified keys.\n\t * @param obj The object to split.\n\t * @param keys The property keys to split.\n\t * @returns The two partial objects.\n\t */\n\tpublic static split<T>(\n\t\tobj: T | undefined,\n\t\tkeys?: (keyof T)[]\n\t): { picked: Partial<T> | undefined; omitted: Partial<T> | undefined } {\n\t\tif (Is.object(obj) && Is.array(keys)) {\n\t\t\tconst picked: Partial<T> = {};\n\t\t\tconst omitted: Partial<T> = {};\n\n\t\t\tconst allKeys = Object.keys(obj) as (keyof T)[];\n\t\t\tfor (const key of allKeys) {\n\t\t\t\tif (keys.includes(key)) {\n\t\t\t\t\tpicked[key] = obj[key];\n\t\t\t\t} else {\n\t\t\t\t\tomitted[key] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tpicked: Object.keys(picked).length > 0 ? picked : undefined,\n\t\t\t\tomitted: Object.keys(omitted).length > 0 ? omitted : undefined\n\t\t\t};\n\t\t}\n\n\t\treturn { picked: obj, omitted: undefined };\n\t}\n\n\t/**\n\t * Converter the non JSON primitives to extended types.\n\t * @param obj The object to convert.\n\t * @returns The object with extended properties.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic static toExtended(obj: any): any {\n\t\tconst jsonExtended = JsonHelper.stringifyEx(obj);\n\t\treturn JSON.parse(jsonExtended);\n\t}\n\n\t/**\n\t * Converter the extended types to non JSON primitives.\n\t * @param obj The object to convert.\n\t * @returns The object with regular properties.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic static fromExtended(obj: any): any {\n\t\tconst jsonExtended = JsonHelper.stringifyEx(obj);\n\t\treturn JsonHelper.parseEx(jsonExtended);\n\t}\n\n\t/**\n\t * Remove empty properties from an object.\n\t * @param obj The object to remove the empty properties from.\n\t * @param options The options for the removal.\n\t * @param options.removeUndefined Remove undefined properties, defaults to true.\n\t * @param options.removeNull Remove null properties, defaults to false.\n\t * @returns The object with empty properties removed.\n\t */\n\tpublic static removeEmptyProperties<T = unknown>(\n\t\tobj: T,\n\t\toptions?: { removeUndefined?: boolean; removeNull?: boolean }\n\t): T {\n\t\tif (Is.object(obj)) {\n\t\t\tconst removeUndefined = options?.removeUndefined ?? true;\n\t\t\tconst removeNull = options?.removeNull ?? false;\n\t\t\tconst newObj: { [id: string]: unknown } = {};\n\t\t\tconst keys = Object.keys(obj);\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (!((removeUndefined && Is.undefined(obj[key])) || (removeNull && Is.null(obj[key])))) {\n\t\t\t\t\tnewObj[key] = ObjectHelper.removeEmptyProperties(obj[key], options);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn newObj as T;\n\t\t} else if (Is.array(obj)) {\n\t\t\tconst arr = [];\n\t\t\tfor (const element of obj) {\n\t\t\t\tarr.push(ObjectHelper.removeEmptyProperties(element, options));\n\t\t\t}\n\t\t\treturn arr as T;\n\t\t}\n\t\treturn obj;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"objectHelper.js","sourceRoot":"","sources":["../../../src/helpers/objectHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { nameof } from \"@twin.org/nameof\";\nimport { JsonHelper } from \"./jsonHelper.js\";\nimport { GeneralError } from \"../errors/generalError.js\";\nimport { Converter } from \"../utils/converter.js\";\nimport { Is } from \"../utils/is.js\";\n\n/**\n * Class to help with objects.\n */\nexport class ObjectHelper {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ObjectHelper>();\n\n\t/**\n\t * Convert an object to bytes.\n\t * @param obj The object to convert.\n\t * @param format Format the JSON content.\n\t * @returns The object as bytes.\n\t */\n\tpublic static toBytes<T>(obj: T | undefined, format: boolean = false): Uint8Array {\n\t\tif (Is.undefined(obj)) {\n\t\t\treturn new Uint8Array();\n\t\t}\n\t\tconst json = format ? JSON.stringify(obj, undefined, \"\\t\") : JSON.stringify(obj);\n\n\t\treturn Converter.utf8ToBytes(json);\n\t}\n\n\t/**\n\t * Convert a bytes to an object.\n\t * @param bytes The bytes to convert to an object.\n\t * @returns The object.\n\t * @throws GeneralError if there was an error parsing the JSON.\n\t */\n\tpublic static fromBytes<T>(bytes: Uint8Array | undefined | null): T {\n\t\tif (Is.empty(bytes) || bytes.length === 0) {\n\t\t\treturn undefined as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\tconst utf8 = Converter.bytesToUtf8(bytes);\n\t\t\treturn JSON.parse(utf8) as T;\n\t\t} catch (err) {\n\t\t\tthrow new GeneralError(ObjectHelper.CLASS_NAME, \"failedBytesToJSON\", undefined, err);\n\t\t}\n\t}\n\n\t/**\n\t * Make a deep clone of an object.\n\t * @param obj The object to clone.\n\t * @returns The objects clone.\n\t */\n\tpublic static clone<T>(obj: T): T;\n\t/**\n\t * Make a deep clone of an object.\n\t * @param obj The object to clone.\n\t * @returns The objects clone, or undefined if the input was undefined.\n\t */\n\tpublic static clone<T>(obj: T | undefined): T | undefined {\n\t\tif (Is.undefined(obj)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn structuredClone(obj);\n\t}\n\n\t/**\n\t * Deep merge objects.\n\t * @param obj1 The first object to merge.\n\t * @param obj2 The second object to merge.\n\t * @returns The combined deep merge of the objects.\n\t */\n\tpublic static merge<T = unknown, U = unknown>(obj1: T, obj2: U): T & U {\n\t\tif (Is.empty(obj1)) {\n\t\t\treturn ObjectHelper.clone(obj2) as T & U;\n\t\t}\n\t\tif (Is.empty(obj2)) {\n\t\t\treturn ObjectHelper.clone(obj1) as T & U;\n\t\t}\n\n\t\tconst obj1Clone = ObjectHelper.clone(obj1);\n\n\t\tif (Is.object(obj1Clone) && Is.object(obj2)) {\n\t\t\tconst keys = Object.keys(obj2);\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (Is.object(obj1Clone[key]) && Is.object(obj2[key])) {\n\t\t\t\t\tObjectHelper.propertySet(obj1Clone, key, ObjectHelper.merge(obj1Clone[key], obj2[key]));\n\t\t\t\t} else {\n\t\t\t\t\tObjectHelper.propertySet(obj1Clone, key, obj2[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj1Clone as T & U;\n\t}\n\n\t/**\n\t * Does one object equal another.\n\t * @param obj1 The first object to compare.\n\t * @param obj2 The second object to compare.\n\t * @param strictPropertyOrder Should the properties be in the same order, defaults to true.\n\t * @returns True is the objects are equal.\n\t */\n\tpublic static equal<T>(obj1: T, obj2: T, strictPropertyOrder?: boolean): boolean {\n\t\tif (strictPropertyOrder ?? true) {\n\t\t\treturn JSON.stringify(obj1) === JSON.stringify(obj2);\n\t\t}\n\t\treturn JsonHelper.canonicalize(obj1) === JsonHelper.canonicalize(obj2);\n\t}\n\n\t/**\n\t * Get the property of an unknown object.\n\t * @param obj The object to get the property from.\n\t * @param property The property to get, can be separated by dots for nested path.\n\t * @returns The property.\n\t */\n\tpublic static propertyGet<T = unknown>(obj: unknown, property: string): T | undefined {\n\t\tconst pathParts = property.split(\".\");\n\n\t\tlet pathValue: unknown = obj;\n\t\tfor (const pathPart of pathParts) {\n\t\t\t// Is the path part numeric i.e. an array index.\n\t\t\tconst arrayMatch = /^(\\d+)$/.exec(pathPart);\n\n\t\t\tif (arrayMatch) {\n\t\t\t\tconst arrayIndex = Number.parseInt(arrayMatch[1], 10);\n\n\t\t\t\tif (Is.arrayValue(pathValue) && arrayIndex < pathValue.length) {\n\t\t\t\t\t// There is no prop name so this is a direct array index on the current object\n\t\t\t\t\tpathValue = pathValue[arrayIndex];\n\t\t\t\t} else {\n\t\t\t\t\t// Array index for non array object so return\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t} else if (Is.object(pathValue)) {\n\t\t\t\t// No array part in path so assume object sub property\n\t\t\t\tpathValue = pathValue[pathPart];\n\t\t\t} else {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn pathValue as T;\n\t}\n\n\t/**\n\t * Set the property of an unknown object.\n\t * @param obj The object to set the property from.\n\t * @param property The property to set.\n\t * @param value The value to set.\n\t * @throws GeneralError if the property target is not an object.\n\t */\n\tpublic static propertySet(obj: unknown, property: string, value: unknown): void {\n\t\tconst pathParts = property.split(\".\");\n\n\t\tlet pathValue: unknown = obj;\n\t\tlet parentObj: unknown;\n\t\tfor (let i = 0; i < pathParts.length; i++) {\n\t\t\tconst pathPart = pathParts[i];\n\n\t\t\t// Is the path part numeric i.e. an array index.\n\t\t\tconst arrayMatch = /^(\\d+)$/.exec(pathPart);\n\t\t\tconst arrayIndex = arrayMatch ? Number.parseInt(arrayMatch[1], 10) : -1;\n\n\t\t\tif (i === pathParts.length - 1) {\n\t\t\t\t// Last part of path so set the value\n\t\t\t\tif (arrayIndex >= 0) {\n\t\t\t\t\tif (Is.array(pathValue)) {\n\t\t\t\t\t\tpathValue[arrayIndex] = value;\n\t\t\t\t\t} else if (Is.object(pathValue)) {\n\t\t\t\t\t\tpathValue[arrayIndex] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new GeneralError(ObjectHelper.CLASS_NAME, \"cannotSetArrayIndex\", {\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tindex: arrayIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (Is.object(pathValue)) {\n\t\t\t\t\tpathValue[pathPart] = value;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new GeneralError(ObjectHelper.CLASS_NAME, \"cannotSetProperty\", { property });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tparentObj = pathValue;\n\t\t\t\tif (Is.object(pathValue)) {\n\t\t\t\t\tpathValue = pathValue[pathPart];\n\t\t\t\t} else if (Is.array(pathValue)) {\n\t\t\t\t\tpathValue = pathValue[arrayIndex];\n\t\t\t\t}\n\n\t\t\t\tif (Is.empty(pathValue)) {\n\t\t\t\t\tconst nextArrayMatch = /^(\\d+)$/.exec(pathParts[i + 1]);\n\t\t\t\t\tconst nextArrayIndex = nextArrayMatch ? Number.parseInt(nextArrayMatch[1], 10) : -1;\n\n\t\t\t\t\tif (nextArrayIndex >= 0) {\n\t\t\t\t\t\tpathValue = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpathValue = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Is.object(parentObj)) {\n\t\t\t\t\t\tparentObj[pathPart] = pathValue;\n\t\t\t\t\t} else if (Is.array(parentObj)) {\n\t\t\t\t\t\tparentObj[arrayIndex] = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Delete the property of an unknown object.\n\t * @param obj The object to delete the property from.\n\t * @param property The property to delete.\n\t */\n\tpublic static propertyDelete(obj: unknown, property: string): void {\n\t\tif (Is.object(obj)) {\n\t\t\tdelete obj[property];\n\t\t}\n\t}\n\n\t/**\n\t * Extract a property from the object, providing alternative names.\n\t * @param obj The object to extract from.\n\t * @param propertyNames The possible names for the property.\n\t * @param removeProperties Remove the properties from the object, defaults to true.\n\t * @returns The property if available.\n\t */\n\tpublic static extractProperty<T>(\n\t\tobj: unknown,\n\t\tpropertyNames: string | string[],\n\t\tremoveProperties: boolean = true\n\t): T | undefined {\n\t\tlet retVal: T | undefined;\n\n\t\tif (Is.object(obj)) {\n\t\t\tconst names = Is.string(propertyNames) ? [propertyNames] : propertyNames;\n\n\t\t\tfor (const prop of names) {\n\t\t\t\tretVal ??= ObjectHelper.propertyGet<T>(obj, prop);\n\t\t\t\tif (removeProperties) {\n\t\t\t\t\tObjectHelper.propertyDelete(obj, prop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\t/**\n\t * Pick a subset of properties from an object.\n\t * @param obj The object to pick the properties from.\n\t * @param keys The property keys to pick.\n\t * @returns The picked object, or undefined if the input was undefined.\n\t */\n\tpublic static pick<T extends object, K extends keyof T>(\n\t\tobj: T | undefined,\n\t\tkeys: readonly K[]\n\t): T extends undefined ? undefined : Pick<T, K> {\n\t\tif (Is.object(obj)) {\n\t\t\tconst result = {} as Pick<T, K>;\n\t\t\tfor (const key of keys) {\n\t\t\t\tresult[key] = obj[key];\n\t\t\t}\n\t\t\treturn result as T extends undefined ? undefined : Pick<T, K>;\n\t\t}\n\n\t\treturn undefined as T extends undefined ? undefined : Pick<T, K>;\n\t}\n\n\t/**\n\t * Omit a subset of properties from an object.\n\t * @param obj The object to omit the properties from.\n\t * @param keys The property keys to omit.\n\t * @returns The object without the omitted keys, or undefined if the input was undefined.\n\t */\n\tpublic static omit<T, K extends keyof T>(\n\t\tobj: T | undefined,\n\t\tkeys: readonly K[]\n\t): T extends undefined ? undefined : Omit<T, K> {\n\t\tif (Is.object(obj) && Is.arrayValue(keys)) {\n\t\t\tconst result = ObjectHelper.clone(obj);\n\t\t\tfor (const key of keys) {\n\t\t\t\tdelete result[key];\n\t\t\t}\n\t\t\treturn result as T extends undefined ? undefined : Omit<T, K>;\n\t\t}\n\n\t\treturn obj as T extends undefined ? undefined : Omit<T, K>;\n\t}\n\n\t/**\n\t * Converter the non JSON primitives to extended types.\n\t * @param obj The object to convert.\n\t * @returns The object with extended properties.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic static toExtended(obj: any): any {\n\t\tconst jsonExtended = JsonHelper.stringifyEx(obj);\n\t\treturn JSON.parse(jsonExtended);\n\t}\n\n\t/**\n\t * Converter the extended types to non JSON primitives.\n\t * @param obj The object to convert.\n\t * @returns The object with regular properties.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic static fromExtended(obj: any): any {\n\t\tconst jsonExtended = JsonHelper.stringifyEx(obj);\n\t\treturn JsonHelper.parseEx(jsonExtended);\n\t}\n\n\t/**\n\t * Remove empty properties from an object.\n\t * @param obj The object to remove the empty properties from.\n\t * @param options The options for the removal.\n\t * @param options.removeUndefined Remove undefined properties, defaults to true.\n\t * @param options.removeNull Remove null properties, defaults to false.\n\t * @returns The object with empty properties removed.\n\t */\n\tpublic static removeEmptyProperties<T = unknown>(\n\t\tobj: T,\n\t\toptions?: { removeUndefined?: boolean; removeNull?: boolean }\n\t): T {\n\t\tif (Is.object(obj)) {\n\t\t\tconst removeUndefined = options?.removeUndefined ?? true;\n\t\t\tconst removeNull = options?.removeNull ?? false;\n\t\t\tconst newObj: { [id: string]: unknown } = {};\n\t\t\tconst keys = Object.keys(obj);\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (!((removeUndefined && Is.undefined(obj[key])) || (removeNull && Is.null(obj[key])))) {\n\t\t\t\t\tnewObj[key] = ObjectHelper.removeEmptyProperties(obj[key], options);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn newObj as T;\n\t\t} else if (Is.array(obj)) {\n\t\t\tconst arr = [];\n\t\t\tfor (const element of obj) {\n\t\t\t\tarr.push(ObjectHelper.removeEmptyProperties(element, options));\n\t\t\t}\n\t\t\treturn arr as T;\n\t\t}\n\t\treturn obj;\n\t}\n}\n"]}
|
|
@@ -29,6 +29,17 @@ export class StringHelper {
|
|
|
29
29
|
}
|
|
30
30
|
return value;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Trim both leading and trailing slashes from a string.
|
|
34
|
+
* @param value The value to trim.
|
|
35
|
+
* @returns The trimmed string or the original.
|
|
36
|
+
*/
|
|
37
|
+
static trimLeadingAndTrailingSlashes(value) {
|
|
38
|
+
if (Is.string(value)) {
|
|
39
|
+
return value.replace(/^\/+|\/+$/g, "");
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
32
43
|
/**
|
|
33
44
|
* Convert the input string to kebab case.
|
|
34
45
|
* @param input The input to convert.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringHelper.js","sourceRoot":"","sources":["../../../src/helpers/stringHelper.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,gCAAgC;AAChC,+BAA+B;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,YAAY;IACxB;;;;OAIG;IACI,MAAM,CAAC,mBAAmB,CAAC,KAAa;QAC9C,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,KAAa;QAC7C,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,uBAAgC,IAAI;QAC1E,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,oBAAoB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,uBAAgC,IAAI;QAC1E,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,oBAAoB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,uBAAgC,IAAI;QAC1E,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,oBAAoB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;iBAC5D,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,uBAAgC,IAAI;QAC3E,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,oBAAoB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;iBAC5D,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,uBAAgC,IAAI;QAC1E,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,oBAAoB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK;qBAChC,KAAK,CAAC,CAAC,CAAC;qBACR,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;qBAC5D,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,QAAQ,CAAC,KAAa,EAAE,uBAAgC,IAAI;QACzE,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,oBAAoB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,KAAa;QACtC,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,KAAa;QAChC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,CACN,KAAK;aACH,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;aAC1B,IAAI,EAAE;aACN,KAAK,CAAC,2DAA2D,CAAC,IAAI,EAAE,CAC1E,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACI,MAAM,CAAC,MAAM,CAAC,IAAgB;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;YAChB,mBAAmB;YACnB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,CAAC,EAAE,CAAC;gBAEJ,SAAS;YACV,CAAC;YAED,6BAA6B;YAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBACxC,iDAAiD;gBACjD,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,CAAC,IAAI,CAAC,CAAC;oBAEP,SAAS;gBACV,CAAC;qBAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YAED,kCAAkC;YAClC,kCAAkC;YAClC,IACC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;gBAChE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,CAAC;gBACF,CAAC,IAAI,CAAC,CAAC;gBAEP,SAAS;YACV,CAAC;YAED,kCAAkC;YAClC,kCAAkC;YAClC,IACC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC9E,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,CAAC;gBACF,CAAC,IAAI,CAAC,CAAC;gBAEP,SAAS;YACV,CAAC;YAED,uCAAuC;YACvC,kCAAkC;YAClC,uCAAuC;YACvC,IACC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;gBAChE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9D,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,CAAC;gBACF,CAAC,IAAI,CAAC,CAAC;gBAEP,SAAS;YACV,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;CACD","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-continue */\n/* eslint-disable no-bitwise */\nimport { Is } from \"../utils/is.js\";\n\n/**\n * Class to help with string.\n */\nexport class StringHelper {\n\t/**\n\t * Implementation signature for trimTrailingSlashes.\n\t * @param value The value to trim.\n\t * @returns The trimmed string or the original.\n\t */\n\tpublic static trimTrailingSlashes(value: string): string {\n\t\tif (Is.string(value)) {\n\t\t\treturn value.replace(/\\/+$/, \"\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Implementation signature for trimLeadingSlashes.\n\t * @param value The value to trim.\n\t * @returns The trimmed string or the original.\n\t */\n\tpublic static trimLeadingSlashes(value: string): string {\n\t\tif (Is.string(value)) {\n\t\t\treturn value.replace(/^\\/+/, \"\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Convert the input string to kebab case.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The kebab case version of the input.\n\t */\n\tpublic static kebabCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output).join(\"-\").toLowerCase();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Convert the input string to snake case.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The snake case version of the input.\n\t */\n\tpublic static snakeCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output).join(\"_\").toLowerCase();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Title case all the words.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The title case version of the input.\n\t */\n\tpublic static titleCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output)\n\t\t\t\t.map(w => `${w[0].toUpperCase()}${w.slice(1).toLowerCase()}`)\n\t\t\t\t.join(\" \");\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Pascal case all the words.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The pascal case version of the input.\n\t */\n\tpublic static pascalCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output)\n\t\t\t\t.map(w => `${w[0].toUpperCase()}${w.slice(1).toLowerCase()}`)\n\t\t\t\t.join(\"\");\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Camel case all the words.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The camel case version of the input.\n\t */\n\tpublic static camelCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\tconst words = StringHelper.words(output);\n\t\t\treturn words.length === 0\n\t\t\t\t? \"\"\n\t\t\t\t: `${words[0].toLowerCase()}${words\n\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t.map(w => `${w[0].toUpperCase()}${w.slice(1).toLowerCase()}`)\n\t\t\t\t\t\t.join(\"\")}`;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Convert the words to a path.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The path version of the input.\n\t */\n\tpublic static wordPath(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\tconst words = StringHelper.words(output);\n\t\t\treturn words.join(\"/\").toLowerCase();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Strip interface prefix if there is one.\n\t * @param input The input to strip.\n\t * @returns The input with any interface prefix stripped.\n\t */\n\tpublic static stripPrefix(input: string): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (/^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Split a string into words.\n\t * @param input The input to split.\n\t * @returns The string split into words.\n\t */\n\tpublic static words(input: string): string[] {\n\t\tif (!Is.stringValue(input)) {\n\t\t\treturn [];\n\t\t}\n\t\treturn (\n\t\t\tinput\n\t\t\t\t.replace(/([A-Z])/g, \" $1\")\n\t\t\t\t.trim()\n\t\t\t\t.match(/[^\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007F]+/g) ?? []\n\t\t);\n\t}\n\n\t/**\n\t * Check if a Node.js Buffer or Uint8Array is UTF-8.\n\t * Url https://tools.ietf.org/html/rfc3629\n\t * Source https://github.com/hcodes/isutf8\n\t * UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4.\n\t * UTF8-1 = %x00-7F.\n\t * UTF8-2 = %xC2-DF UTF8-tail.\n\t * UTF8-3 = %xE0 %xA0-BF UTF8-tail.\n\t * - %xE1-EC 2( UTF8-tail ).\n\t * - %xED %x80-9F UTF8-tail.\n\t * - %xEE-EF 2( UTF8-tail ).\n\t * UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ).\n\t * - %xF1-F3 3( UTF8-tail ).\n\t * - %xF4 %x80-8F 2( UTF8-tail ).\n\t * UTF8-tail = %x80-BF.\n\t * @param data The data to check.\n\t * @returns True if the data is utf8.\n\t */\n\tpublic static isUtf8(data: Uint8Array): boolean {\n\t\tif (!Is.uint8Array(data)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet i = 0;\n\t\tconst len = data.length;\n\n\t\twhile (i < len) {\n\t\t\t// UTF8-1 = %x00-7F\n\t\t\tif (data[i] <= 0x7f) {\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// UTF8-2 = %xC2-DF UTF8-tail\n\t\t\tif (data[i] >= 0xc2 && data[i] <= 0xdf) {\n\t\t\t\t// if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n\t\t\t\tif (data[i + 1] >> 6 === 2) {\n\t\t\t\t\ti += 2;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// UTF8-3 = %xE0 %xA0-BF UTF8-tail\n\t\t\t// UTF8-3 = %xED %x80-9F UTF8-tail\n\t\t\tif (\n\t\t\t\t((data[i] === 0xe0 && data[i + 1] >= 0xa0 && data[i + 1] <= 0xbf) ||\n\t\t\t\t\t(data[i] === 0xed && data[i + 1] >= 0x80 && data[i + 1] <= 0x9f)) &&\n\t\t\t\tdata[i + 2] >> 6 === 2\n\t\t\t) {\n\t\t\t\ti += 3;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// UTF8-3 = %xE1-EC 2( UTF8-tail )\n\t\t\t// UTF8-3 = %xEE-EF 2( UTF8-tail )\n\t\t\tif (\n\t\t\t\t((data[i] >= 0xe1 && data[i] <= 0xec) || (data[i] >= 0xee && data[i] <= 0xef)) &&\n\t\t\t\tdata[i + 1] >> 6 === 2 &&\n\t\t\t\tdata[i + 2] >> 6 === 2\n\t\t\t) {\n\t\t\t\ti += 3;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n\t\t\t// %xF1-F3 3( UTF8-tail )\n\t\t\t// %xF4 %x80-8F 2( UTF8-tail )\n\t\t\tif (\n\t\t\t\t((data[i] === 0xf0 && data[i + 1] >= 0x90 && data[i + 1] <= 0xbf) ||\n\t\t\t\t\t(data[i] >= 0xf1 && data[i] <= 0xf3 && data[i + 1] >> 6 === 2) ||\n\t\t\t\t\t(data[i] === 0xf4 && data[i + 1] >= 0x80 && data[i + 1] <= 0x8f)) &&\n\t\t\t\tdata[i + 2] >> 6 === 2 &&\n\t\t\t\tdata[i + 3] >> 6 === 2\n\t\t\t) {\n\t\t\t\ti += 4;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stringHelper.js","sourceRoot":"","sources":["../../../src/helpers/stringHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-continue */\n/* eslint-disable no-bitwise */\nimport { Is } from \"../utils/is.js\";\n\n/**\n * Class to help with string.\n */\nexport class StringHelper {\n\t/**\n\t * Implementation signature for trimTrailingSlashes.\n\t * @param value The value to trim.\n\t * @returns The trimmed string or the original.\n\t */\n\tpublic static trimTrailingSlashes(value: string): string {\n\t\tif (Is.string(value)) {\n\t\t\treturn value.replace(/\\/+$/, \"\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Implementation signature for trimLeadingSlashes.\n\t * @param value The value to trim.\n\t * @returns The trimmed string or the original.\n\t */\n\tpublic static trimLeadingSlashes(value: string): string {\n\t\tif (Is.string(value)) {\n\t\t\treturn value.replace(/^\\/+/, \"\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Trim both leading and trailing slashes from a string.\n\t * @param value The value to trim.\n\t * @returns The trimmed string or the original.\n\t */\n\tpublic static trimLeadingAndTrailingSlashes(value: string): string {\n\t\tif (Is.string(value)) {\n\t\t\treturn value.replace(/^\\/+|\\/+$/g, \"\");\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Convert the input string to kebab case.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The kebab case version of the input.\n\t */\n\tpublic static kebabCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output).join(\"-\").toLowerCase();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Convert the input string to snake case.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The snake case version of the input.\n\t */\n\tpublic static snakeCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output).join(\"_\").toLowerCase();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Title case all the words.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The title case version of the input.\n\t */\n\tpublic static titleCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output)\n\t\t\t\t.map(w => `${w[0].toUpperCase()}${w.slice(1).toLowerCase()}`)\n\t\t\t\t.join(\" \");\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Pascal case all the words.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The pascal case version of the input.\n\t */\n\tpublic static pascalCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn StringHelper.words(output)\n\t\t\t\t.map(w => `${w[0].toUpperCase()}${w.slice(1).toLowerCase()}`)\n\t\t\t\t.join(\"\");\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Camel case all the words.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The camel case version of the input.\n\t */\n\tpublic static camelCase(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\tconst words = StringHelper.words(output);\n\t\t\treturn words.length === 0\n\t\t\t\t? \"\"\n\t\t\t\t: `${words[0].toLowerCase()}${words\n\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t.map(w => `${w[0].toUpperCase()}${w.slice(1).toLowerCase()}`)\n\t\t\t\t\t\t.join(\"\")}`;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Convert the words to a path.\n\t * @param input The input to convert.\n\t * @param stripInterfacePrefix Strip interface prefixes.\n\t * @returns The path version of the input.\n\t */\n\tpublic static wordPath(input: string, stripInterfacePrefix: boolean = true): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (stripInterfacePrefix && /^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\tconst words = StringHelper.words(output);\n\t\t\treturn words.join(\"/\").toLowerCase();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Strip interface prefix if there is one.\n\t * @param input The input to strip.\n\t * @returns The input with any interface prefix stripped.\n\t */\n\tpublic static stripPrefix(input: string): string {\n\t\tif (Is.stringValue(input)) {\n\t\t\tlet output = input;\n\t\t\tif (/^I[A-Z]/.test(output)) {\n\t\t\t\toutput = output.slice(1);\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Split a string into words.\n\t * @param input The input to split.\n\t * @returns The string split into words.\n\t */\n\tpublic static words(input: string): string[] {\n\t\tif (!Is.stringValue(input)) {\n\t\t\treturn [];\n\t\t}\n\t\treturn (\n\t\t\tinput\n\t\t\t\t.replace(/([A-Z])/g, \" $1\")\n\t\t\t\t.trim()\n\t\t\t\t.match(/[^\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007F]+/g) ?? []\n\t\t);\n\t}\n\n\t/**\n\t * Check if a Node.js Buffer or Uint8Array is UTF-8.\n\t * Url https://tools.ietf.org/html/rfc3629\n\t * Source https://github.com/hcodes/isutf8\n\t * UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4.\n\t * UTF8-1 = %x00-7F.\n\t * UTF8-2 = %xC2-DF UTF8-tail.\n\t * UTF8-3 = %xE0 %xA0-BF UTF8-tail.\n\t * - %xE1-EC 2( UTF8-tail ).\n\t * - %xED %x80-9F UTF8-tail.\n\t * - %xEE-EF 2( UTF8-tail ).\n\t * UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ).\n\t * - %xF1-F3 3( UTF8-tail ).\n\t * - %xF4 %x80-8F 2( UTF8-tail ).\n\t * UTF8-tail = %x80-BF.\n\t * @param data The data to check.\n\t * @returns True if the data is utf8.\n\t */\n\tpublic static isUtf8(data: Uint8Array): boolean {\n\t\tif (!Is.uint8Array(data)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet i = 0;\n\t\tconst len = data.length;\n\n\t\twhile (i < len) {\n\t\t\t// UTF8-1 = %x00-7F\n\t\t\tif (data[i] <= 0x7f) {\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// UTF8-2 = %xC2-DF UTF8-tail\n\t\t\tif (data[i] >= 0xc2 && data[i] <= 0xdf) {\n\t\t\t\t// if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n\t\t\t\tif (data[i + 1] >> 6 === 2) {\n\t\t\t\t\ti += 2;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// UTF8-3 = %xE0 %xA0-BF UTF8-tail\n\t\t\t// UTF8-3 = %xED %x80-9F UTF8-tail\n\t\t\tif (\n\t\t\t\t((data[i] === 0xe0 && data[i + 1] >= 0xa0 && data[i + 1] <= 0xbf) ||\n\t\t\t\t\t(data[i] === 0xed && data[i + 1] >= 0x80 && data[i + 1] <= 0x9f)) &&\n\t\t\t\tdata[i + 2] >> 6 === 2\n\t\t\t) {\n\t\t\t\ti += 3;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// UTF8-3 = %xE1-EC 2( UTF8-tail )\n\t\t\t// UTF8-3 = %xEE-EF 2( UTF8-tail )\n\t\t\tif (\n\t\t\t\t((data[i] >= 0xe1 && data[i] <= 0xec) || (data[i] >= 0xee && data[i] <= 0xef)) &&\n\t\t\t\tdata[i + 1] >> 6 === 2 &&\n\t\t\t\tdata[i + 2] >> 6 === 2\n\t\t\t) {\n\t\t\t\ti += 3;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n\t\t\t// %xF1-F3 3( UTF8-tail )\n\t\t\t// %xF4 %x80-8F 2( UTF8-tail )\n\t\t\tif (\n\t\t\t\t((data[i] === 0xf0 && data[i + 1] >= 0x90 && data[i + 1] <= 0xbf) ||\n\t\t\t\t\t(data[i] >= 0xf1 && data[i] <= 0xf3 && data[i + 1] >> 6 === 2) ||\n\t\t\t\t\t(data[i] === 0xf4 && data[i + 1] >= 0x80 && data[i + 1] <= 0x8f)) &&\n\t\t\t\tdata[i + 2] >> 6 === 2 &&\n\t\t\t\tdata[i + 3] >> 6 === 2\n\t\t\t) {\n\t\t\t\ti += 4;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { ObjectOrArray } from "../types/objectOrArray.js";
|
|
2
1
|
/**
|
|
3
2
|
* Class to help with arrays.
|
|
4
3
|
*/
|
|
@@ -15,11 +14,5 @@ export declare class ArrayHelper {
|
|
|
15
14
|
* @param value The object or array to convert.
|
|
16
15
|
* @returns The array.
|
|
17
16
|
*/
|
|
18
|
-
static fromObjectOrArray<T = unknown>(value: undefined): undefined;
|
|
19
|
-
/**
|
|
20
|
-
* Convert an object or array to an array.
|
|
21
|
-
* @param value The object or array to convert.
|
|
22
|
-
* @returns The array.
|
|
23
|
-
*/
|
|
24
|
-
static fromObjectOrArray<T = unknown>(value: ObjectOrArray<T>): T[];
|
|
17
|
+
static fromObjectOrArray<T = unknown>(value: T | T[] | undefined): T extends undefined ? undefined : T[];
|
|
25
18
|
}
|
|
@@ -58,8 +58,8 @@ export declare class ObjectHelper {
|
|
|
58
58
|
static propertySet(obj: unknown, property: string, value: unknown): void;
|
|
59
59
|
/**
|
|
60
60
|
* Delete the property of an unknown object.
|
|
61
|
-
* @param obj The object to
|
|
62
|
-
* @param property The property to
|
|
61
|
+
* @param obj The object to delete the property from.
|
|
62
|
+
* @param property The property to delete.
|
|
63
63
|
*/
|
|
64
64
|
static propertyDelete(obj: unknown, property: string): void;
|
|
65
65
|
/**
|
|
@@ -74,26 +74,16 @@ export declare class ObjectHelper {
|
|
|
74
74
|
* Pick a subset of properties from an object.
|
|
75
75
|
* @param obj The object to pick the properties from.
|
|
76
76
|
* @param keys The property keys to pick.
|
|
77
|
-
* @returns The
|
|
77
|
+
* @returns The picked object, or undefined if the input was undefined.
|
|
78
78
|
*/
|
|
79
|
-
static pick<T>(obj: T | undefined, keys
|
|
79
|
+
static pick<T extends object, K extends keyof T>(obj: T | undefined, keys: readonly K[]): T extends undefined ? undefined : Pick<T, K>;
|
|
80
80
|
/**
|
|
81
81
|
* Omit a subset of properties from an object.
|
|
82
82
|
* @param obj The object to omit the properties from.
|
|
83
83
|
* @param keys The property keys to omit.
|
|
84
|
-
* @returns The
|
|
85
|
-
*/
|
|
86
|
-
static omit<T>(obj: T | undefined, keys?: (keyof T)[]): Partial<T>;
|
|
87
|
-
/**
|
|
88
|
-
* Split an object into two with the specified keys.
|
|
89
|
-
* @param obj The object to split.
|
|
90
|
-
* @param keys The property keys to split.
|
|
91
|
-
* @returns The two partial objects.
|
|
84
|
+
* @returns The object without the omitted keys, or undefined if the input was undefined.
|
|
92
85
|
*/
|
|
93
|
-
static
|
|
94
|
-
picked: Partial<T> | undefined;
|
|
95
|
-
omitted: Partial<T> | undefined;
|
|
96
|
-
};
|
|
86
|
+
static omit<T, K extends keyof T>(obj: T | undefined, keys: readonly K[]): T extends undefined ? undefined : Omit<T, K>;
|
|
97
87
|
/**
|
|
98
88
|
* Converter the non JSON primitives to extended types.
|
|
99
89
|
* @param obj The object to convert.
|
|
@@ -14,6 +14,12 @@ export declare class StringHelper {
|
|
|
14
14
|
* @returns The trimmed string or the original.
|
|
15
15
|
*/
|
|
16
16
|
static trimLeadingSlashes(value: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Trim both leading and trailing slashes from a string.
|
|
19
|
+
* @param value The value to trim.
|
|
20
|
+
* @returns The trimmed string or the original.
|
|
21
|
+
*/
|
|
22
|
+
static trimLeadingAndTrailingSlashes(value: string): string;
|
|
17
23
|
/**
|
|
18
24
|
* Convert the input string to kebab case.
|
|
19
25
|
* @param input The input to convert.
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.3-next.39](https://github.com/iotaledger/twin-framework/compare/core-v0.0.3-next.38...core-v0.0.3-next.39) (2026-05-13)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* improve signatures ([cdd24be](https://github.com/iotaledger/twin-framework/commit/cdd24be6fb898d33955b6f2f93c3ddbd73582269))
|
|
9
|
+
* improve signatures ([2041ae2](https://github.com/iotaledger/twin-framework/commit/2041ae214cbd8d472d5e8be8d3403cd06a114040))
|
|
10
|
+
* improve signatures ([d8a0ee1](https://github.com/iotaledger/twin-framework/commit/d8a0ee16542134a3f8b0653065239f42045125b4))
|
|
11
|
+
* improve signatures ([1d084c5](https://github.com/iotaledger/twin-framework/commit/1d084c58c7eb41ae50b0ce80ce57e48a22dd3102))
|
|
12
|
+
* improve signatures ([#287](https://github.com/iotaledger/twin-framework/issues/287)) ([c9f38f0](https://github.com/iotaledger/twin-framework/commit/c9f38f00e1cea8759e1105b41872a650c66c00f4))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Dependencies
|
|
16
|
+
|
|
17
|
+
* The following workspace dependencies were updated
|
|
18
|
+
* dependencies
|
|
19
|
+
* @twin.org/nameof bumped from 0.0.3-next.38 to 0.0.3-next.39
|
|
20
|
+
* devDependencies
|
|
21
|
+
* @twin.org/nameof-transformer bumped from 0.0.3-next.38 to 0.0.3-next.39
|
|
22
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.3-next.38 to 0.0.3-next.39
|
|
23
|
+
|
|
3
24
|
## [0.0.3-next.38](https://github.com/iotaledger/twin-framework/compare/core-v0.0.3-next.37...core-v0.0.3-next.38) (2026-05-11)
|
|
4
25
|
|
|
5
26
|
|
|
@@ -44,60 +44,26 @@ True if both arrays are empty of have the same values.
|
|
|
44
44
|
|
|
45
45
|
### fromObjectOrArray() {#fromobjectorarray}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
#### Param
|
|
50
|
-
|
|
51
|
-
The object or array to convert.
|
|
52
|
-
|
|
53
|
-
#### Call Signature
|
|
54
|
-
|
|
55
|
-
> `static` **fromObjectOrArray**\<`T`\>(`value`): `undefined`
|
|
47
|
+
> `static` **fromObjectOrArray**\<`T`\>(`value`): `T` *extends* `undefined` ? `undefined` : `T`[]
|
|
56
48
|
|
|
57
49
|
Convert an object or array to an array.
|
|
58
50
|
|
|
59
|
-
|
|
51
|
+
#### Type Parameters
|
|
60
52
|
|
|
61
|
-
|
|
53
|
+
##### T
|
|
62
54
|
|
|
63
55
|
`T` = `unknown`
|
|
64
56
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
###### value
|
|
68
|
-
|
|
69
|
-
`undefined`
|
|
70
|
-
|
|
71
|
-
The object or array to convert.
|
|
72
|
-
|
|
73
|
-
##### Returns
|
|
74
|
-
|
|
75
|
-
`undefined`
|
|
76
|
-
|
|
77
|
-
The array.
|
|
78
|
-
|
|
79
|
-
#### Call Signature
|
|
80
|
-
|
|
81
|
-
> `static` **fromObjectOrArray**\<`T`\>(`value`): `T`[]
|
|
82
|
-
|
|
83
|
-
Convert an object or array to an array.
|
|
84
|
-
|
|
85
|
-
##### Type Parameters
|
|
86
|
-
|
|
87
|
-
###### T
|
|
88
|
-
|
|
89
|
-
`T` = `unknown`
|
|
90
|
-
|
|
91
|
-
##### Parameters
|
|
57
|
+
#### Parameters
|
|
92
58
|
|
|
93
|
-
|
|
59
|
+
##### value
|
|
94
60
|
|
|
95
|
-
[`
|
|
61
|
+
`T` \| `T`[] \| `undefined`
|
|
96
62
|
|
|
97
63
|
The object or array to convert.
|
|
98
64
|
|
|
99
|
-
|
|
65
|
+
#### Returns
|
|
100
66
|
|
|
101
|
-
`T`[]
|
|
67
|
+
`T` *extends* `undefined` ? `undefined` : `T`[]
|
|
102
68
|
|
|
103
69
|
The array.
|
|
@@ -276,13 +276,13 @@ Delete the property of an unknown object.
|
|
|
276
276
|
|
|
277
277
|
`unknown`
|
|
278
278
|
|
|
279
|
-
The object to
|
|
279
|
+
The object to delete the property from.
|
|
280
280
|
|
|
281
281
|
##### property
|
|
282
282
|
|
|
283
283
|
`string`
|
|
284
284
|
|
|
285
|
-
The property to
|
|
285
|
+
The property to delete.
|
|
286
286
|
|
|
287
287
|
#### Returns
|
|
288
288
|
|
|
@@ -332,7 +332,7 @@ The property if available.
|
|
|
332
332
|
|
|
333
333
|
### pick() {#pick}
|
|
334
334
|
|
|
335
|
-
> `static` **pick**\<`T`\>(`obj`, `keys
|
|
335
|
+
> `static` **pick**\<`T`, `K`\>(`obj`, `keys`): `T` *extends* `undefined` ? `undefined` : `Pick`\<`T`, `K`\>
|
|
336
336
|
|
|
337
337
|
Pick a subset of properties from an object.
|
|
338
338
|
|
|
@@ -340,7 +340,11 @@ Pick a subset of properties from an object.
|
|
|
340
340
|
|
|
341
341
|
##### T
|
|
342
342
|
|
|
343
|
-
`T`
|
|
343
|
+
`T` *extends* `object`
|
|
344
|
+
|
|
345
|
+
##### K
|
|
346
|
+
|
|
347
|
+
`K` *extends* `string` \| `number` \| `symbol`
|
|
344
348
|
|
|
345
349
|
#### Parameters
|
|
346
350
|
|
|
@@ -350,23 +354,23 @@ Pick a subset of properties from an object.
|
|
|
350
354
|
|
|
351
355
|
The object to pick the properties from.
|
|
352
356
|
|
|
353
|
-
##### keys
|
|
357
|
+
##### keys
|
|
354
358
|
|
|
355
|
-
|
|
359
|
+
readonly `K`[]
|
|
356
360
|
|
|
357
361
|
The property keys to pick.
|
|
358
362
|
|
|
359
363
|
#### Returns
|
|
360
364
|
|
|
361
|
-
`
|
|
365
|
+
`T` *extends* `undefined` ? `undefined` : `Pick`\<`T`, `K`\>
|
|
362
366
|
|
|
363
|
-
The
|
|
367
|
+
The picked object, or undefined if the input was undefined.
|
|
364
368
|
|
|
365
369
|
***
|
|
366
370
|
|
|
367
371
|
### omit() {#omit}
|
|
368
372
|
|
|
369
|
-
> `static` **omit**\<`T`\>(`obj`, `keys
|
|
373
|
+
> `static` **omit**\<`T`, `K`\>(`obj`, `keys`): `T` *extends* `undefined` ? `undefined` : `Omit`\<`T`, `K`\>
|
|
370
374
|
|
|
371
375
|
Omit a subset of properties from an object.
|
|
372
376
|
|
|
@@ -376,39 +380,9 @@ Omit a subset of properties from an object.
|
|
|
376
380
|
|
|
377
381
|
`T`
|
|
378
382
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
##### obj
|
|
382
|
-
|
|
383
|
-
`T` \| `undefined`
|
|
384
|
-
|
|
385
|
-
The object to omit the properties from.
|
|
386
|
-
|
|
387
|
-
##### keys?
|
|
388
|
-
|
|
389
|
-
keyof `T`[]
|
|
390
|
-
|
|
391
|
-
The property keys to omit.
|
|
392
|
-
|
|
393
|
-
#### Returns
|
|
394
|
-
|
|
395
|
-
`Partial`\<`T`\>
|
|
383
|
+
##### K
|
|
396
384
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
***
|
|
400
|
-
|
|
401
|
-
### split() {#split}
|
|
402
|
-
|
|
403
|
-
> `static` **split**\<`T`\>(`obj`, `keys?`): `object`
|
|
404
|
-
|
|
405
|
-
Split an object into two with the specified keys.
|
|
406
|
-
|
|
407
|
-
#### Type Parameters
|
|
408
|
-
|
|
409
|
-
##### T
|
|
410
|
-
|
|
411
|
-
`T`
|
|
385
|
+
`K` *extends* `string` \| `number` \| `symbol`
|
|
412
386
|
|
|
413
387
|
#### Parameters
|
|
414
388
|
|
|
@@ -416,27 +390,19 @@ Split an object into two with the specified keys.
|
|
|
416
390
|
|
|
417
391
|
`T` \| `undefined`
|
|
418
392
|
|
|
419
|
-
The object to
|
|
393
|
+
The object to omit the properties from.
|
|
420
394
|
|
|
421
|
-
##### keys
|
|
395
|
+
##### keys
|
|
422
396
|
|
|
423
|
-
|
|
397
|
+
readonly `K`[]
|
|
424
398
|
|
|
425
|
-
The property keys to
|
|
399
|
+
The property keys to omit.
|
|
426
400
|
|
|
427
401
|
#### Returns
|
|
428
402
|
|
|
429
|
-
`
|
|
430
|
-
|
|
431
|
-
The two partial objects.
|
|
432
|
-
|
|
433
|
-
##### picked
|
|
434
|
-
|
|
435
|
-
> **picked**: `Partial`\<`T`\> \| `undefined`
|
|
436
|
-
|
|
437
|
-
##### omitted
|
|
403
|
+
`T` *extends* `undefined` ? `undefined` : `Omit`\<`T`, `K`\>
|
|
438
404
|
|
|
439
|
-
|
|
405
|
+
The object without the omitted keys, or undefined if the input was undefined.
|
|
440
406
|
|
|
441
407
|
***
|
|
442
408
|
|
|
@@ -58,6 +58,28 @@ The trimmed string or the original.
|
|
|
58
58
|
|
|
59
59
|
***
|
|
60
60
|
|
|
61
|
+
### trimLeadingAndTrailingSlashes() {#trimleadingandtrailingslashes}
|
|
62
|
+
|
|
63
|
+
> `static` **trimLeadingAndTrailingSlashes**(`value`): `string`
|
|
64
|
+
|
|
65
|
+
Trim both leading and trailing slashes from a string.
|
|
66
|
+
|
|
67
|
+
#### Parameters
|
|
68
|
+
|
|
69
|
+
##### value
|
|
70
|
+
|
|
71
|
+
`string`
|
|
72
|
+
|
|
73
|
+
The value to trim.
|
|
74
|
+
|
|
75
|
+
#### Returns
|
|
76
|
+
|
|
77
|
+
`string`
|
|
78
|
+
|
|
79
|
+
The trimmed string or the original.
|
|
80
|
+
|
|
81
|
+
***
|
|
82
|
+
|
|
61
83
|
### kebabCase() {#kebabcase}
|
|
62
84
|
|
|
63
85
|
> `static` **kebabCase**(`input`, `stripInterfacePrefix?`): `string`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/core",
|
|
3
|
-
"version": "0.0.3-next.
|
|
3
|
+
"version": "0.0.3-next.39",
|
|
4
4
|
"description": "Helper methods/classes for data type checking/validation/guarding/error handling",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"node": ">=20.0.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@twin.org/nameof": "0.0.3-next.
|
|
17
|
+
"@twin.org/nameof": "0.0.3-next.39",
|
|
18
18
|
"intl-messageformat": "11.2.4",
|
|
19
19
|
"rfc6902": "5.2.0"
|
|
20
20
|
},
|