@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.
@@ -1,3 +1,5 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
1
3
  import { Is } from "../utils/is.js";
2
4
  /**
3
5
  * Class to help with arrays.
@@ -1 +1 @@
1
- {"version":3,"file":"arrayHelper.js","sourceRoot":"","sources":["../../../src/helpers/arrayHelper.ts"],"names":[],"mappings":"AAGA,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,KAAmC;QAEnC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,CAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;CACD","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { ObjectOrArray } from \"../types/objectOrArray.js\";\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\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tpublic static fromObjectOrArray<T = unknown>(value: undefined): undefined;\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>(value: ObjectOrArray<T>): T[];\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: ObjectOrArray<T> | undefined\n\t): T[] | undefined {\n\t\tif (Is.empty(value)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (Is.array<T>(value)) {\n\t\t\treturn value;\n\t\t}\n\t\treturn [value];\n\t}\n}\n"]}
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 set the property from.
197
- * @param property The property to set
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 partial object.
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) && Is.arrayValue(keys)) {
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 obj;
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 partial object.
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 = { ...obj };
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":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,YAAY;IACxB;;OAEG;IACI,MAAM,CAAU,UAAU,kBAAkC;IAEnE;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAI,GAAkB,EAAE,SAAkB,KAAK;QACnE,IAAI,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjF,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,SAAS,CAAI,KAAoC;QAC9D,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,SAAyB,CAAC;QAClC,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACtF,CAAC;IACF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAI,GAAM;QAC5B,IAAI,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,SAAc,CAAC;QACvB,CAAC;QACD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAA2B,IAAO,EAAE,IAAO;QAC7D,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAU,CAAC;QAC1C,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAU,CAAC;QAC1C,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACvD,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzF,CAAC;qBAAM,CAAC;oBACP,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrD,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAkB,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAI,IAAO,EAAE,IAAO,EAAE,mBAA6B;QACrE,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAc,GAAY,EAAE,QAAgB;QACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,SAAS,GAAY,GAAG,CAAC;QAC7B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,gDAAgD;YAChD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE5C,IAAI,UAAU,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEtD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;oBAC/D,8EAA8E;oBAC9E,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACP,6CAA6C;oBAC7C,OAAO,SAAS,CAAC;gBAClB,CAAC;YACF,CAAC;iBAAM,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,sDAAsD;gBACtD,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;QAED,OAAO,SAAc,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CAAC,GAAY,EAAE,QAAgB,EAAE,KAAc;QACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,SAAS,GAAY,GAAG,CAAC;QAC7B,IAAI,SAAkB,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE9B,gDAAgD;YAChD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExE,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,qCAAqC;gBACrC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;oBACrB,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;wBACzB,SAAS,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;oBAC/B,CAAC;yBAAM,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;wBACjC,SAAS,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;oBAC/B,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,qBAAqB,EAAE;4BACtE,QAAQ;4BACR,KAAK,EAAE,UAAU;yBACjB,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;qBAAM,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpF,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,SAAS,GAAG,SAAS,CAAC;gBACtB,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1B,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;qBAAM,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;gBAED,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzB,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxD,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEpF,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;wBACzB,SAAS,GAAG,EAAE,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACP,SAAS,GAAG,EAAE,CAAC;oBAChB,CAAC;oBAED,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC1B,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;oBACjC,CAAC;yBAAM,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;wBAChC,SAAS,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;oBACnC,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CAAC,GAAY,EAAE,QAAgB;QAC1D,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,eAAe,CAC5B,GAAY,EACZ,aAAgC,EAChC,mBAA4B,IAAI;QAEhC,IAAI,MAAqB,CAAC;QAE1B,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAEzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,KAAK,YAAY,CAAC,WAAW,CAAI,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClD,IAAI,gBAAgB,EAAE,CAAC;oBACtB,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,IAAI,CAAI,GAAkB,EAAE,IAAkB;QAC3D,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QAED,OAAO,GAAiB,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,IAAI,CAAI,GAAkB,EAAE,IAAkB;QAC3D,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QAED,OAAO,GAAiB,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAClB,GAAkB,EAClB,IAAkB;QAElB,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAe,EAAE,CAAC;YAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;YAChD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACF,CAAC;YAED,OAAO;gBACN,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,8DAA8D;IACvD,MAAM,CAAC,UAAU,CAAC,GAAQ;QAChC,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,8DAA8D;IACvD,MAAM,CAAC,YAAY,CAAC,GAAQ;QAClC,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,qBAAqB,CAClC,GAAM,EACN,OAA6D;QAE7D,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,IAAI,IAAI,CAAC;YACzD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC;YAChD,MAAM,MAAM,GAA8B,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzF,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrE,CAAC;YACF,CAAC;YACD,OAAO,MAAW,CAAC;QACpB,CAAC;aAAM,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,GAAQ,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC","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":"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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 * 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 set the property from.
62
- * @param property The property to set
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 partial object.
77
+ * @returns The picked object, or undefined if the input was undefined.
78
78
  */
79
- static pick<T>(obj: T | undefined, keys?: (keyof T)[]): Partial<T>;
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 partial object.
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 split<T>(obj: T | undefined, keys?: (keyof T)[]): {
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
- Convert an object or array to an array.
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
- ##### Type Parameters
51
+ #### Type Parameters
60
52
 
61
- ###### T
53
+ ##### T
62
54
 
63
55
  `T` = `unknown`
64
56
 
65
- ##### Parameters
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
- ###### value
59
+ ##### value
94
60
 
95
- [`ObjectOrArray`](../type-aliases/ObjectOrArray.md)\<`T`\>
61
+ `T` \| `T`[] \| `undefined`
96
62
 
97
63
  The object or array to convert.
98
64
 
99
- ##### Returns
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 set the property from.
279
+ The object to delete the property from.
280
280
 
281
281
  ##### property
282
282
 
283
283
  `string`
284
284
 
285
- The property to set
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?`): `Partial`\<`T`\>
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
- keyof `T`[]
359
+ readonly `K`[]
356
360
 
357
361
  The property keys to pick.
358
362
 
359
363
  #### Returns
360
364
 
361
- `Partial`\<`T`\>
365
+ `T` *extends* `undefined` ? `undefined` : `Pick`\<`T`, `K`\>
362
366
 
363
- The partial object.
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?`): `Partial`\<`T`\>
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
- #### Parameters
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
- The partial object.
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 split.
393
+ The object to omit the properties from.
420
394
 
421
- ##### keys?
395
+ ##### keys
422
396
 
423
- keyof `T`[]
397
+ readonly `K`[]
424
398
 
425
- The property keys to split.
399
+ The property keys to omit.
426
400
 
427
401
  #### Returns
428
402
 
429
- `object`
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
- > **omitted**: `Partial`\<`T`\> \| `undefined`
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.38",
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.38",
17
+ "@twin.org/nameof": "0.0.3-next.39",
18
18
  "intl-messageformat": "11.2.4",
19
19
  "rfc6902": "5.2.0"
20
20
  },