@twin.org/core 0.0.4-next.9 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/index.js +3 -0
- package/dist/es/index.js.map +1 -1
- package/dist/es/models/IDuration.js +4 -0
- package/dist/es/models/IDuration.js.map +1 -0
- package/dist/es/models/coerceType.js +5 -1
- package/dist/es/models/coerceType.js.map +1 -1
- package/dist/es/types/duration.js +184 -0
- package/dist/es/types/duration.js.map +1 -0
- package/dist/es/types/durationRegExp.js +4 -0
- package/dist/es/types/durationRegExp.js.map +1 -0
- package/dist/es/types/url.js +1 -0
- package/dist/es/types/url.js.map +1 -1
- package/dist/es/utils/coerce.js +24 -0
- package/dist/es/utils/coerce.js.map +1 -1
- package/dist/es/utils/guards.js +12 -0
- package/dist/es/utils/guards.js.map +1 -1
- package/dist/es/utils/is.js +56 -7
- package/dist/es/utils/is.js.map +1 -1
- package/dist/es/utils/mutex.js +49 -8
- package/dist/es/utils/mutex.js.map +1 -1
- package/dist/es/utils/sharedObjectBuffer.js +4 -1
- package/dist/es/utils/sharedObjectBuffer.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/models/IDuration.d.ts +45 -0
- package/dist/types/models/coerceType.d.ts +4 -0
- package/dist/types/types/duration.d.ts +29 -0
- package/dist/types/types/durationRegExp.d.ts +1 -0
- package/dist/types/types/url.d.ts +1 -0
- package/dist/types/utils/coerce.d.ts +9 -0
- package/dist/types/utils/guards.d.ts +9 -0
- package/dist/types/utils/is.d.ts +7 -0
- package/dist/types/utils/mutex.d.ts +12 -1
- package/docs/changelog.md +271 -0
- package/docs/reference/classes/Coerce.md +24 -0
- package/docs/reference/classes/Duration.md +88 -0
- package/docs/reference/classes/Guards.md +36 -0
- package/docs/reference/classes/Is.md +22 -0
- package/docs/reference/classes/Mutex.md +39 -1
- package/docs/reference/classes/ObjectHelper.md +8 -0
- package/docs/reference/classes/Url.md +4 -0
- package/docs/reference/index.md +3 -0
- package/docs/reference/interfaces/IDuration.md +83 -0
- package/docs/reference/variables/CoerceType.md +6 -0
- package/docs/reference/variables/DURATION_REG_EXP.md +3 -0
- package/locales/en.json +4 -2
- package/package.json +3 -3
package/dist/es/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export * from "./helpers/randomHelper.js";
|
|
|
29
29
|
export * from "./helpers/stringHelper.js";
|
|
30
30
|
export * from "./helpers/uint8ArrayHelper.js";
|
|
31
31
|
export * from "./models/coerceType.js";
|
|
32
|
+
export * from "./models/IDuration.js";
|
|
32
33
|
export * from "./models/compressionType.js";
|
|
33
34
|
export * from "./models/healthStatus.js";
|
|
34
35
|
export * from "./models/IComponent.js";
|
|
@@ -49,6 +50,8 @@ export * from "./models/IValidationFailure.js";
|
|
|
49
50
|
export * from "./models/mutexMessageTypes.js";
|
|
50
51
|
export * from "./models/sharedObjectBufferMessageTypes.js";
|
|
51
52
|
export * from "./types/bitString.js";
|
|
53
|
+
export * from "./types/duration.js";
|
|
54
|
+
export * from "./types/durationRegExp.js";
|
|
52
55
|
export * from "./types/objectOrArray.js";
|
|
53
56
|
export * from "./types/singleOccurrenceArray.js";
|
|
54
57
|
export * from "./types/singleOccurrenceArrayDepthHelper.js";
|
package/dist/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./encoding/base32.js\";\nexport * from \"./encoding/base58.js\";\nexport * from \"./encoding/base64.js\";\nexport * from \"./encoding/base64Url.js\";\nexport * from \"./errors/alreadyExistsError.js\";\nexport * from \"./errors/baseError.js\";\nexport * from \"./errors/conflictError.js\";\nexport * from \"./errors/generalError.js\";\nexport * from \"./errors/guardError.js\";\nexport * from \"./errors/notFoundError.js\";\nexport * from \"./errors/notImplementedError.js\";\nexport * from \"./errors/notSupportedError.js\";\nexport * from \"./errors/unauthorizedError.js\";\nexport * from \"./errors/unprocessableError.js\";\nexport * from \"./errors/validationError.js\";\nexport * from \"./factories/componentFactory.js\";\nexport * from \"./factories/factory.js\";\nexport * from \"./helpers/arrayHelper.js\";\nexport * from \"./helpers/envHelper.js\";\nexport * from \"./helpers/errorHelper.js\";\nexport * from \"./helpers/filenameHelper.js\";\nexport * from \"./helpers/hexHelper.js\";\nexport * from \"./helpers/jsonHelper.js\";\nexport * from \"./helpers/numberHelper.js\";\nexport * from \"./helpers/objectHelper.js\";\nexport * from \"./helpers/randomHelper.js\";\nexport * from \"./helpers/stringHelper.js\";\nexport * from \"./helpers/uint8ArrayHelper.js\";\nexport * from \"./models/coerceType.js\";\nexport * from \"./models/compressionType.js\";\nexport * from \"./models/healthStatus.js\";\nexport * from \"./models/IComponent.js\";\nexport * from \"./models/IError.js\";\nexport * from \"./models/IHealth.js\";\nexport * from \"./models/II18nShared.js\";\nexport * from \"./models/IKeyValue.js\";\nexport * from \"./models/ILabelledValue.js\";\nexport * from \"./models/ILocale.js\";\nexport * from \"./models/ILocaleDictionary.js\";\nexport * from \"./models/ILocalesIndex.js\";\nexport * from \"./models/IMutexWorkerMessage.js\";\nexport * from \"./models/IPatchOperation.js\";\nexport * from \"./models/ISharedObjectBufferOptions.js\";\nexport * from \"./models/ISharedObjectBufferWorkerMessage.js\";\nexport * from \"./models/IUrlParts.js\";\nexport * from \"./models/IValidationFailure.js\";\nexport * from \"./models/mutexMessageTypes.js\";\nexport * from \"./models/sharedObjectBufferMessageTypes.js\";\nexport * from \"./types/bitString.js\";\nexport * from \"./types/objectOrArray.js\";\nexport * from \"./types/singleOccurrenceArray.js\";\nexport * from \"./types/singleOccurrenceArrayDepthHelper.js\";\nexport * from \"./types/url.js\";\nexport * from \"./types/urn.js\";\nexport * from \"./utils/asyncCache.js\";\nexport * from \"./utils/coerce.js\";\nexport * from \"./utils/compression.js\";\nexport * from \"./utils/converter.js\";\nexport * from \"./utils/guards.js\";\nexport * from \"./utils/i18n.js\";\nexport * from \"./utils/is.js\";\nexport * from \"./utils/mutex.js\";\nexport * from \"./utils/sharedObjectBuffer.js\";\nexport * from \"./utils/sharedStore.js\";\nexport * from \"./utils/validation.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./encoding/base32.js\";\nexport * from \"./encoding/base58.js\";\nexport * from \"./encoding/base64.js\";\nexport * from \"./encoding/base64Url.js\";\nexport * from \"./errors/alreadyExistsError.js\";\nexport * from \"./errors/baseError.js\";\nexport * from \"./errors/conflictError.js\";\nexport * from \"./errors/generalError.js\";\nexport * from \"./errors/guardError.js\";\nexport * from \"./errors/notFoundError.js\";\nexport * from \"./errors/notImplementedError.js\";\nexport * from \"./errors/notSupportedError.js\";\nexport * from \"./errors/unauthorizedError.js\";\nexport * from \"./errors/unprocessableError.js\";\nexport * from \"./errors/validationError.js\";\nexport * from \"./factories/componentFactory.js\";\nexport * from \"./factories/factory.js\";\nexport * from \"./helpers/arrayHelper.js\";\nexport * from \"./helpers/envHelper.js\";\nexport * from \"./helpers/errorHelper.js\";\nexport * from \"./helpers/filenameHelper.js\";\nexport * from \"./helpers/hexHelper.js\";\nexport * from \"./helpers/jsonHelper.js\";\nexport * from \"./helpers/numberHelper.js\";\nexport * from \"./helpers/objectHelper.js\";\nexport * from \"./helpers/randomHelper.js\";\nexport * from \"./helpers/stringHelper.js\";\nexport * from \"./helpers/uint8ArrayHelper.js\";\nexport * from \"./models/coerceType.js\";\nexport * from \"./models/IDuration.js\";\nexport * from \"./models/compressionType.js\";\nexport * from \"./models/healthStatus.js\";\nexport * from \"./models/IComponent.js\";\nexport * from \"./models/IError.js\";\nexport * from \"./models/IHealth.js\";\nexport * from \"./models/II18nShared.js\";\nexport * from \"./models/IKeyValue.js\";\nexport * from \"./models/ILabelledValue.js\";\nexport * from \"./models/ILocale.js\";\nexport * from \"./models/ILocaleDictionary.js\";\nexport * from \"./models/ILocalesIndex.js\";\nexport * from \"./models/IMutexWorkerMessage.js\";\nexport * from \"./models/IPatchOperation.js\";\nexport * from \"./models/ISharedObjectBufferOptions.js\";\nexport * from \"./models/ISharedObjectBufferWorkerMessage.js\";\nexport * from \"./models/IUrlParts.js\";\nexport * from \"./models/IValidationFailure.js\";\nexport * from \"./models/mutexMessageTypes.js\";\nexport * from \"./models/sharedObjectBufferMessageTypes.js\";\nexport * from \"./types/bitString.js\";\nexport * from \"./types/duration.js\";\nexport * from \"./types/durationRegExp.js\";\nexport * from \"./types/objectOrArray.js\";\nexport * from \"./types/singleOccurrenceArray.js\";\nexport * from \"./types/singleOccurrenceArrayDepthHelper.js\";\nexport * from \"./types/url.js\";\nexport * from \"./types/urn.js\";\nexport * from \"./utils/asyncCache.js\";\nexport * from \"./utils/coerce.js\";\nexport * from \"./utils/compression.js\";\nexport * from \"./utils/converter.js\";\nexport * from \"./utils/guards.js\";\nexport * from \"./utils/i18n.js\";\nexport * from \"./utils/is.js\";\nexport * from \"./utils/mutex.js\";\nexport * from \"./utils/sharedObjectBuffer.js\";\nexport * from \"./utils/sharedStore.js\";\nexport * from \"./utils/validation.js\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IDuration.js","sourceRoot":"","sources":["../../../src/models/IDuration.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * Represents a duration broken down into its component parts.\n */\nexport interface IDuration {\n\t/**\n\t * The number of years.\n\t */\n\tyears: number;\n\n\t/**\n\t * The number of months.\n\t */\n\tmonths: number;\n\n\t/**\n\t * The number of weeks.\n\t */\n\tweeks: number;\n\n\t/**\n\t * The number of days.\n\t */\n\tdays: number;\n\n\t/**\n\t * The number of hours.\n\t */\n\thours: number;\n\n\t/**\n\t * The number of minutes.\n\t */\n\tminutes: number;\n\n\t/**\n\t * The number of seconds.\n\t */\n\tseconds: number;\n\n\t/**\n\t * The number of milliseconds.\n\t */\n\tmilliseconds?: number;\n\n\t/**\n\t * The number of microseconds.\n\t */\n\tmicroseconds?: number;\n\n\t/**\n\t * The number of nanoseconds.\n\t */\n\tnanoseconds?: number;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coerceType.js","sourceRoot":"","sources":["../../../src/models/coerceType.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AAEvC;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM;IAEZ;;OAEG;IACH,QAAQ,EAAE,UAAU;IAEpB;;OAEG;IACH,IAAI,EAAE,MAAM;IAEZ;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,UAAU,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"coerceType.js","sourceRoot":"","sources":["../../../src/models/coerceType.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AAEvC;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM;IAEZ;;OAEG;IACH,QAAQ,EAAE,UAAU;IAEpB;;OAEG;IACH,IAAI,EAAE,MAAM;IAEZ;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,UAAU,EAAE,YAAY;IAExB;;OAEG;IACH,QAAQ,EAAE,UAAU;CACX,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The types the extracted data can be coerced to.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const CoerceType = {\n\t/**\n\t * String.\n\t */\n\tString: \"string\",\n\n\t/**\n\t * Number.\n\t */\n\tNumber: \"number\",\n\n\t/**\n\t * Integer.\n\t */\n\tInteger: \"integer\",\n\n\t/**\n\t * Boolean.\n\t */\n\tBoolean: \"boolean\",\n\n\t/**\n\t * Big Integer.\n\t */\n\tBigInt: \"bigint\",\n\n\t/**\n\t * Date.\n\t */\n\tDate: \"date\",\n\n\t/**\n\t * Date Time.\n\t */\n\tDateTime: \"datetime\",\n\n\t/**\n\t * Time.\n\t */\n\tTime: \"time\",\n\n\t/**\n\t * Object.\n\t */\n\tObject: \"object\",\n\n\t/**\n\t * Uint8Array.\n\t */\n\tUint8Array: \"uint8array\",\n\n\t/**\n\t * Duration in seconds.\n\t */\n\tDuration: \"duration\"\n} as const;\n\n/**\n * The types the extracted data can be coerced to.\n */\nexport type CoerceType = (typeof CoerceType)[keyof typeof CoerceType];\n"]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { DURATION_REG_EXP } from "./durationRegExp.js";
|
|
2
|
+
import { Guards } from "../utils/guards.js";
|
|
3
|
+
/**
|
|
4
|
+
* Helper methods for working with ISO 8601 durations.
|
|
5
|
+
*/
|
|
6
|
+
export class Duration {
|
|
7
|
+
/**
|
|
8
|
+
* Runtime name for the class.
|
|
9
|
+
*/
|
|
10
|
+
static CLASS_NAME = "Duration";
|
|
11
|
+
/**
|
|
12
|
+
* Parse an ISO 8601 duration string into its component parts.
|
|
13
|
+
* @param value The string to parse.
|
|
14
|
+
* @returns The parsed duration, or undefined if the string is not a valid ISO 8601 duration.
|
|
15
|
+
*/
|
|
16
|
+
static parse(value) {
|
|
17
|
+
const match = DURATION_REG_EXP.exec(value);
|
|
18
|
+
if (!match?.slice(2).some(Boolean)) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const sign = match[1] === "-" ? -1 : 1;
|
|
22
|
+
const secondsValue = match[8] ?? "0";
|
|
23
|
+
const [secondsIntegerPart, secondsFractionPart] = secondsValue.split(".");
|
|
24
|
+
const fractionPadded = `${secondsFractionPart ?? ""}000000000`.slice(0, 9);
|
|
25
|
+
const milliseconds = Number.parseInt(fractionPadded.slice(0, 3), 10);
|
|
26
|
+
const microseconds = Number.parseInt(fractionPadded.slice(3, 6), 10);
|
|
27
|
+
const nanoseconds = Number.parseInt(fractionPadded.slice(6, 9), 10);
|
|
28
|
+
const duration = {
|
|
29
|
+
years: Duration.applySign(Number(match[2] ?? 0), sign),
|
|
30
|
+
months: Duration.applySign(Number(match[3] ?? 0), sign),
|
|
31
|
+
weeks: Duration.applySign(Number(match[4] ?? 0), sign),
|
|
32
|
+
days: Duration.applySign(Number(match[5] ?? 0), sign),
|
|
33
|
+
hours: Duration.applySign(Number(match[6] ?? 0), sign),
|
|
34
|
+
minutes: Duration.applySign(Number(match[7] ?? 0), sign),
|
|
35
|
+
seconds: Duration.applySign(Number(secondsIntegerPart ?? 0), sign)
|
|
36
|
+
};
|
|
37
|
+
if (milliseconds !== 0) {
|
|
38
|
+
duration.milliseconds = milliseconds * sign;
|
|
39
|
+
}
|
|
40
|
+
if (microseconds !== 0) {
|
|
41
|
+
duration.microseconds = microseconds * sign;
|
|
42
|
+
}
|
|
43
|
+
if (nanoseconds !== 0) {
|
|
44
|
+
duration.nanoseconds = nanoseconds * sign;
|
|
45
|
+
}
|
|
46
|
+
return duration;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Convert a duration object to an ISO 8601 duration string.
|
|
50
|
+
* @param duration The duration to convert.
|
|
51
|
+
* @returns The ISO 8601 duration string (e.g. "P1Y2M3DT4H5M6S").
|
|
52
|
+
*/
|
|
53
|
+
static toString(duration) {
|
|
54
|
+
Guards.object(Duration.CLASS_NAME, "duration", duration);
|
|
55
|
+
const sign = Duration.resolveSign(duration);
|
|
56
|
+
const dateParts = [];
|
|
57
|
+
const absYears = Duration.absolute(duration.years);
|
|
58
|
+
if (absYears !== 0) {
|
|
59
|
+
dateParts.push(`${absYears}Y`);
|
|
60
|
+
}
|
|
61
|
+
const absMonths = Duration.absolute(duration.months);
|
|
62
|
+
if (absMonths !== 0) {
|
|
63
|
+
dateParts.push(`${absMonths}M`);
|
|
64
|
+
}
|
|
65
|
+
const absWeeks = Duration.absolute(duration.weeks);
|
|
66
|
+
if (absWeeks !== 0) {
|
|
67
|
+
dateParts.push(`${absWeeks}W`);
|
|
68
|
+
}
|
|
69
|
+
const absDays = Duration.absolute(duration.days);
|
|
70
|
+
if (absDays !== 0) {
|
|
71
|
+
dateParts.push(`${absDays}D`);
|
|
72
|
+
}
|
|
73
|
+
const timeParts = [];
|
|
74
|
+
const absHours = Duration.absolute(duration.hours);
|
|
75
|
+
if (absHours !== 0) {
|
|
76
|
+
timeParts.push(`${absHours}H`);
|
|
77
|
+
}
|
|
78
|
+
const absMinutes = Duration.absolute(duration.minutes);
|
|
79
|
+
if (absMinutes !== 0) {
|
|
80
|
+
timeParts.push(`${absMinutes}M`);
|
|
81
|
+
}
|
|
82
|
+
const secondFraction = Duration.formatSecondFraction(Duration.absolute(duration.milliseconds), Duration.absolute(duration.microseconds), Duration.absolute(duration.nanoseconds));
|
|
83
|
+
const absSeconds = Duration.absolute(duration.seconds);
|
|
84
|
+
if (absSeconds !== 0 || secondFraction !== undefined) {
|
|
85
|
+
timeParts.push(secondFraction === undefined ? `${absSeconds}S` : `${absSeconds}.${secondFraction}S`);
|
|
86
|
+
}
|
|
87
|
+
if (dateParts.length === 0 && timeParts.length === 0) {
|
|
88
|
+
return "PT0S";
|
|
89
|
+
}
|
|
90
|
+
const timeSection = timeParts.length > 0 ? `T${timeParts.join("")}` : "";
|
|
91
|
+
const prefix = sign < 0 ? "-" : "";
|
|
92
|
+
return `${prefix}P${dateParts.join("")}${timeSection}`;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Convert a duration object to total seconds.
|
|
96
|
+
* Year and month components use the average values 365.25 days and 30.4375 days.
|
|
97
|
+
* @param duration The duration to convert.
|
|
98
|
+
* @returns The total number of seconds.
|
|
99
|
+
*/
|
|
100
|
+
static toSeconds(duration) {
|
|
101
|
+
Guards.object(Duration.CLASS_NAME, "duration", duration);
|
|
102
|
+
const years = duration.years * 31_557_600;
|
|
103
|
+
const months = duration.months * 2_629_800;
|
|
104
|
+
const weeks = duration.weeks * 604_800;
|
|
105
|
+
const days = duration.days * 86_400;
|
|
106
|
+
const hours = duration.hours * 3_600;
|
|
107
|
+
const minutes = duration.minutes * 60;
|
|
108
|
+
const milliseconds = (duration.milliseconds ?? 0) / 1_000;
|
|
109
|
+
const microseconds = (duration.microseconds ?? 0) / 1_000_000;
|
|
110
|
+
const nanoseconds = (duration.nanoseconds ?? 0) / 1_000_000_000;
|
|
111
|
+
return (years +
|
|
112
|
+
months +
|
|
113
|
+
weeks +
|
|
114
|
+
days +
|
|
115
|
+
hours +
|
|
116
|
+
minutes +
|
|
117
|
+
duration.seconds +
|
|
118
|
+
milliseconds +
|
|
119
|
+
microseconds +
|
|
120
|
+
nanoseconds);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Resolve a common sign for all non-zero components.
|
|
124
|
+
* @param duration The duration.
|
|
125
|
+
* @returns -1 for negative, 1 for positive, 0 for zero.
|
|
126
|
+
* @internal
|
|
127
|
+
*/
|
|
128
|
+
static resolveSign(duration) {
|
|
129
|
+
const fields = [
|
|
130
|
+
duration.years,
|
|
131
|
+
duration.months,
|
|
132
|
+
duration.weeks,
|
|
133
|
+
duration.days,
|
|
134
|
+
duration.hours,
|
|
135
|
+
duration.minutes,
|
|
136
|
+
duration.seconds,
|
|
137
|
+
duration.milliseconds,
|
|
138
|
+
duration.microseconds,
|
|
139
|
+
duration.nanoseconds
|
|
140
|
+
];
|
|
141
|
+
for (const field of fields) {
|
|
142
|
+
const v = field ?? 0;
|
|
143
|
+
if (v !== 0) {
|
|
144
|
+
return v < 0 ? -1 : 1;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Format the sub-second components as a 9-digit fractional second string.
|
|
151
|
+
* @param milliseconds The milliseconds component.
|
|
152
|
+
* @param microseconds The microseconds component.
|
|
153
|
+
* @param nanoseconds The nanoseconds component.
|
|
154
|
+
* @returns The formatted fraction without a leading dot.
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
static formatSecondFraction(milliseconds, microseconds, nanoseconds) {
|
|
158
|
+
if (milliseconds === 0 && microseconds === 0 && nanoseconds === 0) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
const fraction = `${(milliseconds % 1000).toString().padStart(3, "0")}${(microseconds % 1000).toString().padStart(3, "0")}${(nanoseconds % 1000).toString().padStart(3, "0")}`;
|
|
162
|
+
return fraction.replace(/0+$/u, "");
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Normalize a numeric value to its absolute magnitude.
|
|
166
|
+
* @param value The value.
|
|
167
|
+
* @returns The absolute value, defaulting undefined to 0.
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
170
|
+
static absolute(value) {
|
|
171
|
+
return Math.abs(value ?? 0);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Apply a global sign while normalizing zero values.
|
|
175
|
+
* @param value The value.
|
|
176
|
+
* @param sign The sign.
|
|
177
|
+
* @returns The signed value with zero normalized to +0.
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
180
|
+
static applySign(value, sign) {
|
|
181
|
+
return value === 0 ? 0 : value * sign;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../../src/types/duration.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { nameof } from \"@twin.org/nameof\";\nimport { DURATION_REG_EXP } from \"./durationRegExp.js\";\nimport type { IDuration } from \"../models/IDuration.js\";\nimport { Guards } from \"../utils/guards.js\";\n\n/**\n * Helper methods for working with ISO 8601 durations.\n */\nexport class Duration {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<Duration>();\n\n\t/**\n\t * Parse an ISO 8601 duration string into its component parts.\n\t * @param value The string to parse.\n\t * @returns The parsed duration, or undefined if the string is not a valid ISO 8601 duration.\n\t */\n\tpublic static parse(value: string): IDuration | undefined {\n\t\tconst match = DURATION_REG_EXP.exec(value);\n\t\tif (!match?.slice(2).some(Boolean)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst sign = match[1] === \"-\" ? -1 : 1;\n\t\tconst secondsValue = match[8] ?? \"0\";\n\t\tconst [secondsIntegerPart, secondsFractionPart] = secondsValue.split(\".\");\n\t\tconst fractionPadded = `${secondsFractionPart ?? \"\"}000000000`.slice(0, 9);\n\t\tconst milliseconds = Number.parseInt(fractionPadded.slice(0, 3), 10);\n\t\tconst microseconds = Number.parseInt(fractionPadded.slice(3, 6), 10);\n\t\tconst nanoseconds = Number.parseInt(fractionPadded.slice(6, 9), 10);\n\n\t\tconst duration: IDuration = {\n\t\t\tyears: Duration.applySign(Number(match[2] ?? 0), sign),\n\t\t\tmonths: Duration.applySign(Number(match[3] ?? 0), sign),\n\t\t\tweeks: Duration.applySign(Number(match[4] ?? 0), sign),\n\t\t\tdays: Duration.applySign(Number(match[5] ?? 0), sign),\n\t\t\thours: Duration.applySign(Number(match[6] ?? 0), sign),\n\t\t\tminutes: Duration.applySign(Number(match[7] ?? 0), sign),\n\t\t\tseconds: Duration.applySign(Number(secondsIntegerPart ?? 0), sign)\n\t\t};\n\n\t\tif (milliseconds !== 0) {\n\t\t\tduration.milliseconds = milliseconds * sign;\n\t\t}\n\t\tif (microseconds !== 0) {\n\t\t\tduration.microseconds = microseconds * sign;\n\t\t}\n\t\tif (nanoseconds !== 0) {\n\t\t\tduration.nanoseconds = nanoseconds * sign;\n\t\t}\n\n\t\treturn duration;\n\t}\n\n\t/**\n\t * Convert a duration object to an ISO 8601 duration string.\n\t * @param duration The duration to convert.\n\t * @returns The ISO 8601 duration string (e.g. \"P1Y2M3DT4H5M6S\").\n\t */\n\tpublic static toString(duration: IDuration): string {\n\t\tGuards.object<IDuration>(Duration.CLASS_NAME, nameof(duration), duration);\n\t\tconst sign = Duration.resolveSign(duration);\n\t\tconst dateParts: string[] = [];\n\t\tconst absYears = Duration.absolute(duration.years);\n\t\tif (absYears !== 0) {\n\t\t\tdateParts.push(`${absYears}Y`);\n\t\t}\n\t\tconst absMonths = Duration.absolute(duration.months);\n\t\tif (absMonths !== 0) {\n\t\t\tdateParts.push(`${absMonths}M`);\n\t\t}\n\t\tconst absWeeks = Duration.absolute(duration.weeks);\n\t\tif (absWeeks !== 0) {\n\t\t\tdateParts.push(`${absWeeks}W`);\n\t\t}\n\t\tconst absDays = Duration.absolute(duration.days);\n\t\tif (absDays !== 0) {\n\t\t\tdateParts.push(`${absDays}D`);\n\t\t}\n\n\t\tconst timeParts: string[] = [];\n\t\tconst absHours = Duration.absolute(duration.hours);\n\t\tif (absHours !== 0) {\n\t\t\ttimeParts.push(`${absHours}H`);\n\t\t}\n\t\tconst absMinutes = Duration.absolute(duration.minutes);\n\t\tif (absMinutes !== 0) {\n\t\t\ttimeParts.push(`${absMinutes}M`);\n\t\t}\n\t\tconst secondFraction = Duration.formatSecondFraction(\n\t\t\tDuration.absolute(duration.milliseconds),\n\t\t\tDuration.absolute(duration.microseconds),\n\t\t\tDuration.absolute(duration.nanoseconds)\n\t\t);\n\t\tconst absSeconds = Duration.absolute(duration.seconds);\n\t\tif (absSeconds !== 0 || secondFraction !== undefined) {\n\t\t\ttimeParts.push(\n\t\t\t\tsecondFraction === undefined ? `${absSeconds}S` : `${absSeconds}.${secondFraction}S`\n\t\t\t);\n\t\t}\n\n\t\tif (dateParts.length === 0 && timeParts.length === 0) {\n\t\t\treturn \"PT0S\";\n\t\t}\n\n\t\tconst timeSection = timeParts.length > 0 ? `T${timeParts.join(\"\")}` : \"\";\n\t\tconst prefix = sign < 0 ? \"-\" : \"\";\n\t\treturn `${prefix}P${dateParts.join(\"\")}${timeSection}`;\n\t}\n\n\t/**\n\t * Convert a duration object to total seconds.\n\t * Year and month components use the average values 365.25 days and 30.4375 days.\n\t * @param duration The duration to convert.\n\t * @returns The total number of seconds.\n\t */\n\tpublic static toSeconds(duration: IDuration): number {\n\t\tGuards.object<IDuration>(Duration.CLASS_NAME, nameof(duration), duration);\n\t\tconst years = duration.years * 31_557_600;\n\t\tconst months = duration.months * 2_629_800;\n\t\tconst weeks = duration.weeks * 604_800;\n\t\tconst days = duration.days * 86_400;\n\t\tconst hours = duration.hours * 3_600;\n\t\tconst minutes = duration.minutes * 60;\n\t\tconst milliseconds = (duration.milliseconds ?? 0) / 1_000;\n\t\tconst microseconds = (duration.microseconds ?? 0) / 1_000_000;\n\t\tconst nanoseconds = (duration.nanoseconds ?? 0) / 1_000_000_000;\n\t\treturn (\n\t\t\tyears +\n\t\t\tmonths +\n\t\t\tweeks +\n\t\t\tdays +\n\t\t\thours +\n\t\t\tminutes +\n\t\t\tduration.seconds +\n\t\t\tmilliseconds +\n\t\t\tmicroseconds +\n\t\t\tnanoseconds\n\t\t);\n\t}\n\n\t/**\n\t * Resolve a common sign for all non-zero components.\n\t * @param duration The duration.\n\t * @returns -1 for negative, 1 for positive, 0 for zero.\n\t * @internal\n\t */\n\tprivate static resolveSign(duration: IDuration): number {\n\t\tconst fields = [\n\t\t\tduration.years,\n\t\t\tduration.months,\n\t\t\tduration.weeks,\n\t\t\tduration.days,\n\t\t\tduration.hours,\n\t\t\tduration.minutes,\n\t\t\tduration.seconds,\n\t\t\tduration.milliseconds,\n\t\t\tduration.microseconds,\n\t\t\tduration.nanoseconds\n\t\t];\n\t\tfor (const field of fields) {\n\t\t\tconst v = field ?? 0;\n\t\t\tif (v !== 0) {\n\t\t\t\treturn v < 0 ? -1 : 1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Format the sub-second components as a 9-digit fractional second string.\n\t * @param milliseconds The milliseconds component.\n\t * @param microseconds The microseconds component.\n\t * @param nanoseconds The nanoseconds component.\n\t * @returns The formatted fraction without a leading dot.\n\t * @internal\n\t */\n\tprivate static formatSecondFraction(\n\t\tmilliseconds: number,\n\t\tmicroseconds: number,\n\t\tnanoseconds: number\n\t): string | undefined {\n\t\tif (milliseconds === 0 && microseconds === 0 && nanoseconds === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst fraction = `${(milliseconds % 1000).toString().padStart(3, \"0\")}${(microseconds % 1000).toString().padStart(3, \"0\")}${(nanoseconds % 1000).toString().padStart(3, \"0\")}`;\n\t\treturn fraction.replace(/0+$/u, \"\");\n\t}\n\n\t/**\n\t * Normalize a numeric value to its absolute magnitude.\n\t * @param value The value.\n\t * @returns The absolute value, defaulting undefined to 0.\n\t * @internal\n\t */\n\tprivate static absolute(value: number | undefined): number {\n\t\treturn Math.abs(value ?? 0);\n\t}\n\n\t/**\n\t * Apply a global sign while normalizing zero values.\n\t * @param value The value.\n\t * @param sign The sign.\n\t * @returns The signed value with zero normalized to +0.\n\t * @internal\n\t */\n\tprivate static applySign(value: number, sign: number): number {\n\t\treturn value === 0 ? 0 : value * sign;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Copyright 2026 IOTA Stiftung.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
3
|
+
export const DURATION_REG_EXP = /^([+-])?P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/;
|
|
4
|
+
//# sourceMappingURL=durationRegExp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durationRegExp.js","sourceRoot":"","sources":["../../../src/types/durationRegExp.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAC5B,qKAAqK,CAAC","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport const DURATION_REG_EXP =\n\t/^([+-])?P(?:(\\d+(?:\\.\\d+)?)Y)?(?:(\\d+(?:\\.\\d+)?)M)?(?:(\\d+(?:\\.\\d+)?)W)?(?:(\\d+(?:\\.\\d+)?)D)?(?:T(?:(\\d+(?:\\.\\d+)?)H)?(?:(\\d+(?:\\.\\d+)?)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$/;\n"]}
|
package/dist/es/types/url.js
CHANGED
package/dist/es/types/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/types/url.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,GAAG;IACf;;OAEG;IACI,MAAM,CAAU,UAAU,SAAyB;IAE1D;;;OAGG;IACK,SAAS,CAAY;IAE7B
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/types/url.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 { GuardError } from \"../errors/guardError.js\";\nimport type { IUrlParts } from \"../models/IUrlParts.js\";\nimport type { IValidationFailure } from \"../models/IValidationFailure.js\";\nimport { Coerce } from \"../utils/coerce.js\";\nimport { Guards } from \"../utils/guards.js\";\nimport { Is } from \"../utils/is.js\";\n\n/**\n * Class to help with urls.\n */\nexport class Url {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<Url>();\n\n\t/**\n\t * The internal representation of the url.\n\t * @internal\n\t */\n\tprivate _urlParts: IUrlParts;\n\n\t/**\n\t * Create a new instance of Url.\n\t * @param url The url string.\n\t * @throws GuardError if the url is not valid.\n\t */\n\tconstructor(url: string) {\n\t\tGuards.stringValue(Url.CLASS_NAME, nameof(url), url);\n\n\t\ttry {\n\t\t\tconst u = new URL(url);\n\t\t\tthis._urlParts = Url.fromURLToParts(u);\n\t\t} catch {\n\t\t\tthrow new GuardError(Url.CLASS_NAME, \"guard.url\", \"url\", url);\n\t\t}\n\t}\n\n\t/**\n\t * Try and parse a string into the url parts.\n\t * @param url The url to parse.\n\t * @returns The formatted url or undefined if the value is not a url.\n\t */\n\tpublic static tryParseExact(url: unknown): Url | undefined {\n\t\tif (!Is.stringValue(url)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// By constructing a new standard URL class this will\n\t\t\t// validate the format\n\t\t\tconst u = new URL(url);\n\t\t\treturn Url.fromParts(Url.fromURLToParts(u));\n\t\t} catch {}\n\t}\n\n\t/**\n\t * Parse a string into the url parts.\n\t * @param source The source of the error.\n\t * @param property The name of the property.\n\t * @param value The url to parse.\n\t * @throws GuardError If the value does not match the assertion.\n\t */\n\tpublic static guard(source: string, property: string, value: unknown): asserts value is string {\n\t\tGuards.stringValue(source, property, value);\n\n\t\tconst result = Url.tryParseExact(value);\n\n\t\tif (!result) {\n\t\t\tthrow new GuardError(source, \"guard.url\", property, value);\n\t\t}\n\t}\n\n\t/**\n\t * Validate a string as a Url.\n\t * @param property Throw an exception if the url property is invalid.\n\t * @param value The url to parse.\n\t * @param failures The list of failures to add to.\n\t * @param fieldNameResource The optional human readable name for the field as an i18 resource.\n\t * @returns The formatted url.\n\t */\n\tpublic static validate(\n\t\tproperty: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[],\n\t\tfieldNameResource?: string\n\t): value is Url {\n\t\tif (!Is.stringValue(value)) {\n\t\t\tfailures.push({\n\t\t\t\tproperty,\n\t\t\t\treason: \"validation.beNotEmpty\",\n\t\t\t\tproperties: { fieldName: fieldNameResource ?? \"validation.defaultFieldName\", value }\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\tconst result = Url.tryParseExact(value);\n\n\t\tif (Is.undefined(result)) {\n\t\t\tfailures.push({\n\t\t\t\tproperty,\n\t\t\t\treason: \"validation.beUrl\",\n\t\t\t\tproperties: { fieldName: fieldNameResource ?? \"validation.defaultFieldName\", value }\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Construct a url from a URL.\n\t * @param url The url to construct from.\n\t * @returns The formatted url.\n\t */\n\tpublic static fromURLToParts(url: URL): IUrlParts {\n\t\treturn {\n\t\t\tschema: url.protocol.replace(/:$/, \"\"),\n\t\t\thost: url.hostname,\n\t\t\tport: Coerce.number(url.port),\n\t\t\tpath: url.pathname,\n\t\t\tparams: Is.stringValue(url.search) ? url.search.replace(/^\\?/, \"\") : undefined,\n\t\t\thash: Is.stringValue(url.hash) ? url.hash.replace(/^#/, \"\") : undefined\n\t\t};\n\t}\n\n\t/**\n\t * Construct a url from valid parts.\n\t * @param urlParts The url to create the parts from.\n\t * @returns The formatted url.\n\t */\n\tpublic static fromParts(urlParts: IUrlParts): Url {\n\t\tconst u = new Url(\"http://dummy\");\n\t\tu._urlParts = urlParts;\n\t\treturn u;\n\t}\n\n\t/**\n\t * Get the parts of the url.\n\t * @returns The parts of the url.\n\t */\n\tpublic parts(): IUrlParts {\n\t\treturn this._urlParts;\n\t}\n\n\t/**\n\t * Convert the parts in to a full string.\n\t * @returns The formatted url.\n\t */\n\tpublic toString(): string {\n\t\tconst parts: string[] = [this._urlParts.schema, \"://\", this._urlParts.host];\n\t\tif (Is.number(this._urlParts.port)) {\n\t\t\tparts.push(`:${this._urlParts.port}`);\n\t\t}\n\t\tif (Is.stringValue(this._urlParts.path)) {\n\t\t\tparts.push(this._urlParts.path);\n\t\t}\n\t\tif (Is.stringValue(this._urlParts.params)) {\n\t\t\tparts.push(`?${this._urlParts.params}`);\n\t\t}\n\t\tif (Is.stringValue(this._urlParts.hash)) {\n\t\t\tparts.push(`#${this._urlParts.hash}`);\n\t\t}\n\t\treturn parts.join(\"\");\n\t}\n}\n"]}
|
package/dist/es/utils/coerce.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { Converter } from "./converter.js";
|
|
4
4
|
import { Is } from "./is.js";
|
|
5
5
|
import { CoerceType } from "../models/coerceType.js";
|
|
6
|
+
import { Duration } from "../types/duration.js";
|
|
6
7
|
/**
|
|
7
8
|
* Coerce an object from one type to another.
|
|
8
9
|
*/
|
|
@@ -186,6 +187,27 @@ export class Coerce {
|
|
|
186
187
|
}
|
|
187
188
|
}
|
|
188
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Coerce the value to a duration object.
|
|
192
|
+
* Accepts an IDuration object, ISO 8601 duration strings (e.g. "PT1H", "P1Y2M3DT4H5M6S"),
|
|
193
|
+
* or numeric values already expressed as seconds (stored in the seconds field).
|
|
194
|
+
* @param value The value to coerce.
|
|
195
|
+
* @returns The duration object, or undefined if the value cannot be coerced.
|
|
196
|
+
*/
|
|
197
|
+
static duration(value) {
|
|
198
|
+
if (Is.undefined(value)) {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
if (Is.duration(value) && !Is.string(value)) {
|
|
202
|
+
return value;
|
|
203
|
+
}
|
|
204
|
+
if (Is.number(value)) {
|
|
205
|
+
return { years: 0, months: 0, weeks: 0, days: 0, hours: 0, minutes: 0, seconds: value };
|
|
206
|
+
}
|
|
207
|
+
if (Is.stringValue(value)) {
|
|
208
|
+
return Duration.parse(value);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
189
211
|
/**
|
|
190
212
|
* Coerce the value to an object.
|
|
191
213
|
* @param value The value to coerce.
|
|
@@ -251,6 +273,8 @@ export class Coerce {
|
|
|
251
273
|
return Coerce.object(value);
|
|
252
274
|
case CoerceType.Uint8Array:
|
|
253
275
|
return Coerce.uint8Array(value);
|
|
276
|
+
case CoerceType.Duration:
|
|
277
|
+
return Coerce.duration(value);
|
|
254
278
|
default:
|
|
255
279
|
return value;
|
|
256
280
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../../src/utils/coerce.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Converter } from \"./converter.js\";\nimport { Is } from \"./is.js\";\nimport { CoerceType } from \"../models/coerceType.js\";\n\n/**\n * Coerce an object from one type to another.\n */\nexport class Coerce {\n\t/**\n\t * Coerce the value to a string.\n\t * @param value The value to coerce.\n\t * @returns The coerced string, or undefined if the value cannot be coerced.\n\t */\n\tpublic static string(value: unknown): string | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn value.toString();\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value ? \"true\" : \"false\";\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value.toISOString();\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a number.\n\t * @param value The value to coerce.\n\t * @returns The coerced number, or undefined if the value cannot be coerced.\n\t */\n\tpublic static number(value: unknown): number | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst parsed = Number.parseFloat(value);\n\t\t\tif (Is.number(parsed)) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value ? 1 : 0;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value.getTime();\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to an integer.\n\t * @param value The value to coerce.\n\t * @returns The coerced integer, or undefined if the value cannot be coerced.\n\t */\n\tpublic static integer(value: unknown): number | undefined {\n\t\tconst num = Coerce.number(value);\n\t\tif (!Is.undefined(num)) {\n\t\t\treturn Math.trunc(num);\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a bigint.\n\t * @param value The value to coerce.\n\t * @returns The coerced bigint, or undefined if the value cannot be coerced.\n\t */\n\tpublic static bigint(value: unknown): bigint | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.bigint(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn BigInt(value);\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst parsed = Number.parseFloat(value);\n\t\t\tif (Is.integer(parsed)) {\n\t\t\t\treturn BigInt(parsed);\n\t\t\t}\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value ? 1n : 0n;\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a boolean.\n\t * @param value The value to coerce.\n\t * @returns The coerced boolean, or undefined if the value cannot be coerced.\n\t */\n\tpublic static boolean(value: unknown): boolean | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\t// eslint-disable-next-line no-unneeded-ternary\n\t\t\treturn value ? true : false;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tif (/true/i.test(value)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (/false/i.test(value)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a date.\n\t * @param value The value to coerce.\n\t * @returns The coerced date, or undefined if the value cannot be coerced.\n\t */\n\tpublic static date(value: unknown): Date | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn new Date(value);\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tif (!Number.isNaN(dt.getTime())) {\n\t\t\t\tconst utc = Date.UTC(dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate());\n\t\t\t\treturn new Date(utc);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a date/time.\n\t * @param value The value to coerce.\n\t * @returns The coerced date/time, or undefined if the value cannot be coerced.\n\t */\n\tpublic static dateTime(value: unknown): Date | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn new Date(value);\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tif (!Number.isNaN(dt.getTime())) {\n\t\t\t\tconst utc = Date.UTC(\n\t\t\t\t\tdt.getUTCFullYear(),\n\t\t\t\t\tdt.getUTCMonth(),\n\t\t\t\t\tdt.getUTCDate(),\n\t\t\t\t\tdt.getUTCHours(),\n\t\t\t\t\tdt.getUTCMinutes(),\n\t\t\t\t\tdt.getUTCSeconds(),\n\t\t\t\t\tdt.getUTCMilliseconds()\n\t\t\t\t);\n\t\t\t\treturn new Date(utc);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a time.\n\t * @param value The value to coerce.\n\t * @returns The coerced time, or undefined if the value cannot be coerced.\n\t */\n\tpublic static time(value: unknown): Date | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tdt.setFullYear(1970, 0, 1);\n\t\t\treturn dt;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tif (!Number.isNaN(dt.getTime())) {\n\t\t\t\tconst utc = Date.UTC(\n\t\t\t\t\t1970,\n\t\t\t\t\t0,\n\t\t\t\t\t1,\n\t\t\t\t\tdt.getUTCHours(),\n\t\t\t\t\tdt.getUTCMinutes(),\n\t\t\t\t\tdt.getUTCSeconds(),\n\t\t\t\t\tdt.getUTCMilliseconds()\n\t\t\t\t);\n\t\t\t\treturn new Date(utc);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to an object.\n\t * @param value The value to coerce.\n\t * @returns The coerced object, or undefined if the value cannot be coerced.\n\t */\n\tpublic static object<T = unknown>(value: unknown): T | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.object<T>(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.stringValue(value)) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(value) as T;\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a Uint8Array.\n\t * @param value The value to coerce.\n\t * @returns The coerced Uint8Array, or undefined if the value cannot be coerced.\n\t */\n\tpublic static uint8Array(value: unknown): Uint8Array | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tif (Is.stringHex(value.toLowerCase(), true)) {\n\t\t\t\treturn Converter.hexToBytes(value.toLowerCase());\n\t\t\t}\n\t\t\tif (Is.stringBase64(value)) {\n\t\t\t\treturn Converter.base64ToBytes(value);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerces a value based on the coercion type.\n\t * @param value The value to coerce.\n\t * @param type The coercion type to perform.\n\t * @returns The coerced value.\n\t */\n\tpublic static byType(value: unknown, type?: CoerceType): unknown {\n\t\tswitch (type) {\n\t\t\tcase CoerceType.String:\n\t\t\t\treturn Coerce.string(value);\n\t\t\tcase CoerceType.Number:\n\t\t\t\treturn Coerce.number(value);\n\t\t\tcase CoerceType.Integer:\n\t\t\t\treturn Coerce.integer(value);\n\t\t\tcase CoerceType.BigInt:\n\t\t\t\treturn Coerce.bigint(value);\n\t\t\tcase CoerceType.Boolean:\n\t\t\t\treturn Coerce.boolean(value);\n\t\t\tcase CoerceType.Date:\n\t\t\t\treturn Coerce.date(value);\n\t\t\tcase CoerceType.DateTime:\n\t\t\t\treturn Coerce.dateTime(value);\n\t\t\tcase CoerceType.Time:\n\t\t\t\treturn Coerce.time(value);\n\t\t\tcase CoerceType.Object:\n\t\t\t\treturn Coerce.object(value);\n\t\t\tcase CoerceType.Uint8Array:\n\t\t\t\treturn Coerce.uint8Array(value);\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../../src/utils/coerce.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Converter } from \"./converter.js\";\nimport { Is } from \"./is.js\";\nimport { CoerceType } from \"../models/coerceType.js\";\nimport type { IDuration } from \"../models/IDuration.js\";\nimport { Duration } from \"../types/duration.js\";\n\n/**\n * Coerce an object from one type to another.\n */\nexport class Coerce {\n\t/**\n\t * Coerce the value to a string.\n\t * @param value The value to coerce.\n\t * @returns The coerced string, or undefined if the value cannot be coerced.\n\t */\n\tpublic static string(value: unknown): string | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn value.toString();\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value ? \"true\" : \"false\";\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value.toISOString();\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a number.\n\t * @param value The value to coerce.\n\t * @returns The coerced number, or undefined if the value cannot be coerced.\n\t */\n\tpublic static number(value: unknown): number | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst parsed = Number.parseFloat(value);\n\t\t\tif (Is.number(parsed)) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value ? 1 : 0;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value.getTime();\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to an integer.\n\t * @param value The value to coerce.\n\t * @returns The coerced integer, or undefined if the value cannot be coerced.\n\t */\n\tpublic static integer(value: unknown): number | undefined {\n\t\tconst num = Coerce.number(value);\n\t\tif (!Is.undefined(num)) {\n\t\t\treturn Math.trunc(num);\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a bigint.\n\t * @param value The value to coerce.\n\t * @returns The coerced bigint, or undefined if the value cannot be coerced.\n\t */\n\tpublic static bigint(value: unknown): bigint | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.bigint(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn BigInt(value);\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst parsed = Number.parseFloat(value);\n\t\t\tif (Is.integer(parsed)) {\n\t\t\t\treturn BigInt(parsed);\n\t\t\t}\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value ? 1n : 0n;\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a boolean.\n\t * @param value The value to coerce.\n\t * @returns The coerced boolean, or undefined if the value cannot be coerced.\n\t */\n\tpublic static boolean(value: unknown): boolean | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.boolean(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\t// eslint-disable-next-line no-unneeded-ternary\n\t\t\treturn value ? true : false;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tif (/true/i.test(value)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (/false/i.test(value)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a date.\n\t * @param value The value to coerce.\n\t * @returns The coerced date, or undefined if the value cannot be coerced.\n\t */\n\tpublic static date(value: unknown): Date | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn new Date(value);\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tif (!Number.isNaN(dt.getTime())) {\n\t\t\t\tconst utc = Date.UTC(dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate());\n\t\t\t\treturn new Date(utc);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a date/time.\n\t * @param value The value to coerce.\n\t * @returns The coerced date/time, or undefined if the value cannot be coerced.\n\t */\n\tpublic static dateTime(value: unknown): Date | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn new Date(value);\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tif (!Number.isNaN(dt.getTime())) {\n\t\t\t\tconst utc = Date.UTC(\n\t\t\t\t\tdt.getUTCFullYear(),\n\t\t\t\t\tdt.getUTCMonth(),\n\t\t\t\t\tdt.getUTCDate(),\n\t\t\t\t\tdt.getUTCHours(),\n\t\t\t\t\tdt.getUTCMinutes(),\n\t\t\t\t\tdt.getUTCSeconds(),\n\t\t\t\t\tdt.getUTCMilliseconds()\n\t\t\t\t);\n\t\t\t\treturn new Date(utc);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a time.\n\t * @param value The value to coerce.\n\t * @returns The coerced time, or undefined if the value cannot be coerced.\n\t */\n\tpublic static time(value: unknown): Date | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.date(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tdt.setFullYear(1970, 0, 1);\n\t\t\treturn dt;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tconst dt = new Date(value);\n\t\t\tif (!Number.isNaN(dt.getTime())) {\n\t\t\t\tconst utc = Date.UTC(\n\t\t\t\t\t1970,\n\t\t\t\t\t0,\n\t\t\t\t\t1,\n\t\t\t\t\tdt.getUTCHours(),\n\t\t\t\t\tdt.getUTCMinutes(),\n\t\t\t\t\tdt.getUTCSeconds(),\n\t\t\t\t\tdt.getUTCMilliseconds()\n\t\t\t\t);\n\t\t\t\treturn new Date(utc);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a duration object.\n\t * Accepts an IDuration object, ISO 8601 duration strings (e.g. \"PT1H\", \"P1Y2M3DT4H5M6S\"),\n\t * or numeric values already expressed as seconds (stored in the seconds field).\n\t * @param value The value to coerce.\n\t * @returns The duration object, or undefined if the value cannot be coerced.\n\t */\n\tpublic static duration(value: unknown): IDuration | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (Is.duration(value) && !Is.string(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.number(value)) {\n\t\t\treturn { years: 0, months: 0, weeks: 0, days: 0, hours: 0, minutes: 0, seconds: value };\n\t\t}\n\t\tif (Is.stringValue(value)) {\n\t\t\treturn Duration.parse(value);\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to an object.\n\t * @param value The value to coerce.\n\t * @returns The coerced object, or undefined if the value cannot be coerced.\n\t */\n\tpublic static object<T = unknown>(value: unknown): T | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.object<T>(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.stringValue(value)) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(value) as T;\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\t/**\n\t * Coerce the value to a Uint8Array.\n\t * @param value The value to coerce.\n\t * @returns The coerced Uint8Array, or undefined if the value cannot be coerced.\n\t */\n\tpublic static uint8Array(value: unknown): Uint8Array | undefined {\n\t\tif (Is.undefined(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Is.string(value)) {\n\t\t\tif (Is.stringHex(value.toLowerCase(), true)) {\n\t\t\t\treturn Converter.hexToBytes(value.toLowerCase());\n\t\t\t}\n\t\t\tif (Is.stringBase64(value)) {\n\t\t\t\treturn Converter.base64ToBytes(value);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Coerces a value based on the coercion type.\n\t * @param value The value to coerce.\n\t * @param type The coercion type to perform.\n\t * @returns The coerced value.\n\t */\n\tpublic static byType(value: unknown, type?: CoerceType): unknown {\n\t\tswitch (type) {\n\t\t\tcase CoerceType.String:\n\t\t\t\treturn Coerce.string(value);\n\t\t\tcase CoerceType.Number:\n\t\t\t\treturn Coerce.number(value);\n\t\t\tcase CoerceType.Integer:\n\t\t\t\treturn Coerce.integer(value);\n\t\t\tcase CoerceType.BigInt:\n\t\t\t\treturn Coerce.bigint(value);\n\t\t\tcase CoerceType.Boolean:\n\t\t\t\treturn Coerce.boolean(value);\n\t\t\tcase CoerceType.Date:\n\t\t\t\treturn Coerce.date(value);\n\t\t\tcase CoerceType.DateTime:\n\t\t\t\treturn Coerce.dateTime(value);\n\t\t\tcase CoerceType.Time:\n\t\t\t\treturn Coerce.time(value);\n\t\t\tcase CoerceType.Object:\n\t\t\t\treturn Coerce.object(value);\n\t\t\tcase CoerceType.Uint8Array:\n\t\t\t\treturn Coerce.uint8Array(value);\n\t\t\tcase CoerceType.Duration:\n\t\t\t\treturn Coerce.duration(value);\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n"]}
|
package/dist/es/utils/guards.js
CHANGED
|
@@ -417,5 +417,17 @@ export class Guards {
|
|
|
417
417
|
throw new GuardError(source, "guard.uuidV7", property, value);
|
|
418
418
|
}
|
|
419
419
|
}
|
|
420
|
+
/**
|
|
421
|
+
* Is the property a valid ISO 8601 duration string or IDuration object.
|
|
422
|
+
* @param source The source of the error.
|
|
423
|
+
* @param property The name of the property.
|
|
424
|
+
* @param value The value to test.
|
|
425
|
+
* @throws GuardError If the value does not match the assertion.
|
|
426
|
+
*/
|
|
427
|
+
static duration(source, property, value) {
|
|
428
|
+
if (!Is.duration(value)) {
|
|
429
|
+
throw new GuardError(source, "guard.duration", property, value);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
420
432
|
}
|
|
421
433
|
//# sourceMappingURL=guards.js.map
|