@twin.org/core 0.0.4-next.1 → 0.0.4-next.11

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.
Files changed (101) hide show
  1. package/dist/es/encoding/base64.js +2 -1
  2. package/dist/es/encoding/base64.js.map +1 -1
  3. package/dist/es/errors/conflictError.js +1 -1
  4. package/dist/es/errors/conflictError.js.map +1 -1
  5. package/dist/es/errors/generalError.js +1 -1
  6. package/dist/es/errors/generalError.js.map +1 -1
  7. package/dist/es/errors/notImplementedError.js +1 -1
  8. package/dist/es/errors/notImplementedError.js.map +1 -1
  9. package/dist/es/errors/validationError.js +1 -1
  10. package/dist/es/errors/validationError.js.map +1 -1
  11. package/dist/es/factories/factory.js +9 -0
  12. package/dist/es/factories/factory.js.map +1 -1
  13. package/dist/es/helpers/arrayHelper.js +1 -1
  14. package/dist/es/helpers/arrayHelper.js.map +1 -1
  15. package/dist/es/helpers/errorHelper.js +1 -1
  16. package/dist/es/helpers/errorHelper.js.map +1 -1
  17. package/dist/es/helpers/jsonHelper.js +1 -1
  18. package/dist/es/helpers/jsonHelper.js.map +1 -1
  19. package/dist/es/helpers/objectHelper.js +2 -2
  20. package/dist/es/helpers/objectHelper.js.map +1 -1
  21. package/dist/es/helpers/stringHelper.js +2 -2
  22. package/dist/es/helpers/stringHelper.js.map +1 -1
  23. package/dist/es/index.js +4 -0
  24. package/dist/es/index.js.map +1 -1
  25. package/dist/es/models/IComponent.js.map +1 -1
  26. package/dist/es/models/ILocale.js.map +1 -1
  27. package/dist/es/models/ISharedObjectBufferOptions.js +4 -0
  28. package/dist/es/models/ISharedObjectBufferOptions.js.map +1 -0
  29. package/dist/es/models/ISharedObjectBufferWorkerMessage.js +2 -0
  30. package/dist/es/models/ISharedObjectBufferWorkerMessage.js.map +1 -0
  31. package/dist/es/models/IValidationFailure.js.map +1 -1
  32. package/dist/es/models/sharedObjectBufferMessageTypes.js +13 -0
  33. package/dist/es/models/sharedObjectBufferMessageTypes.js.map +1 -0
  34. package/dist/es/utils/asyncCache.js +4 -1
  35. package/dist/es/utils/asyncCache.js.map +1 -1
  36. package/dist/es/utils/coerce.js +10 -20
  37. package/dist/es/utils/coerce.js.map +1 -1
  38. package/dist/es/utils/compression.js +1 -1
  39. package/dist/es/utils/compression.js.map +1 -1
  40. package/dist/es/utils/guards.js +36 -0
  41. package/dist/es/utils/guards.js.map +1 -1
  42. package/dist/es/utils/is.js +9 -9
  43. package/dist/es/utils/is.js.map +1 -1
  44. package/dist/es/utils/mutex.js +55 -17
  45. package/dist/es/utils/mutex.js.map +1 -1
  46. package/dist/es/utils/sharedObjectBuffer.js +305 -0
  47. package/dist/es/utils/sharedObjectBuffer.js.map +1 -0
  48. package/dist/es/utils/sharedStore.js +2 -2
  49. package/dist/es/utils/sharedStore.js.map +1 -1
  50. package/dist/types/errors/conflictError.d.ts +1 -1
  51. package/dist/types/errors/generalError.d.ts +1 -1
  52. package/dist/types/errors/notImplementedError.d.ts +1 -1
  53. package/dist/types/errors/validationError.d.ts +1 -1
  54. package/dist/types/factories/factory.d.ts +6 -0
  55. package/dist/types/helpers/arrayHelper.d.ts +1 -1
  56. package/dist/types/helpers/errorHelper.d.ts +1 -1
  57. package/dist/types/helpers/jsonHelper.d.ts +1 -1
  58. package/dist/types/helpers/objectHelper.d.ts +2 -2
  59. package/dist/types/helpers/stringHelper.d.ts +2 -2
  60. package/dist/types/index.d.ts +4 -0
  61. package/dist/types/models/IComponent.d.ts +2 -2
  62. package/dist/types/models/ILocale.d.ts +1 -1
  63. package/dist/types/models/ISharedObjectBufferOptions.d.ts +17 -0
  64. package/dist/types/models/ISharedObjectBufferWorkerMessage.d.ts +29 -0
  65. package/dist/types/models/IValidationFailure.d.ts +1 -1
  66. package/dist/types/models/sharedObjectBufferMessageTypes.d.ts +13 -0
  67. package/dist/types/utils/asyncCache.d.ts +1 -8
  68. package/dist/types/utils/coerce.d.ts +10 -20
  69. package/dist/types/utils/compression.d.ts +1 -1
  70. package/dist/types/utils/guards.d.ts +24 -0
  71. package/dist/types/utils/is.d.ts +9 -9
  72. package/dist/types/utils/sharedObjectBuffer.d.ts +74 -0
  73. package/dist/types/utils/sharedStore.d.ts +2 -2
  74. package/docs/changelog.md +242 -0
  75. package/docs/reference/classes/ArrayHelper.md +1 -1
  76. package/docs/reference/classes/AsyncCache.md +1 -1
  77. package/docs/reference/classes/Coerce.md +10 -50
  78. package/docs/reference/classes/Compression.md +1 -1
  79. package/docs/reference/classes/ConflictError.md +1 -1
  80. package/docs/reference/classes/ErrorHelper.md +1 -1
  81. package/docs/reference/classes/Factory.md +28 -0
  82. package/docs/reference/classes/GeneralError.md +1 -1
  83. package/docs/reference/classes/Guards.md +108 -0
  84. package/docs/reference/classes/Is.md +9 -9
  85. package/docs/reference/classes/JsonHelper.md +1 -1
  86. package/docs/reference/classes/NotImplementedError.md +1 -1
  87. package/docs/reference/classes/ObjectHelper.md +2 -2
  88. package/docs/reference/classes/SharedObjectBuffer.md +192 -0
  89. package/docs/reference/classes/SharedStore.md +2 -2
  90. package/docs/reference/classes/StringHelper.md +16 -13
  91. package/docs/reference/classes/ValidationError.md +1 -1
  92. package/docs/reference/index.md +5 -0
  93. package/docs/reference/interfaces/IComponent.md +2 -2
  94. package/docs/reference/interfaces/ILocale.md +1 -1
  95. package/docs/reference/interfaces/ISharedObjectBufferOptions.md +33 -0
  96. package/docs/reference/interfaces/ISharedObjectBufferWorkerMessage.md +44 -0
  97. package/docs/reference/interfaces/IValidationFailure.md +1 -1
  98. package/docs/reference/type-aliases/SharedObjectBufferMessageTypes.md +5 -0
  99. package/docs/reference/variables/SharedObjectBufferMessageTypes.md +13 -0
  100. package/locales/en.json +10 -2
  101. package/package.json +4 -4
@@ -6,71 +6,61 @@ export declare class Coerce {
6
6
  /**
7
7
  * Coerce the value to a string.
8
8
  * @param value The value to coerce.
9
- * @throws TypeError If the value can not be coerced.
10
- * @returns The value if it can be coerced.
9
+ * @returns The coerced string, or undefined if the value cannot be coerced.
11
10
  */
12
11
  static string(value: unknown): string | undefined;
13
12
  /**
14
13
  * Coerce the value to a number.
15
14
  * @param value The value to coerce.
16
- * @throws TypeError If the value can not be coerced.
17
- * @returns The value if it can be coerced.
15
+ * @returns The coerced number, or undefined if the value cannot be coerced.
18
16
  */
19
17
  static number(value: unknown): number | undefined;
20
18
  /**
21
19
  * Coerce the value to an integer.
22
20
  * @param value The value to coerce.
23
- * @throws TypeError If the value can not be coerced.
24
- * @returns The value if it can be coerced.
21
+ * @returns The coerced integer, or undefined if the value cannot be coerced.
25
22
  */
26
23
  static integer(value: unknown): number | undefined;
27
24
  /**
28
25
  * Coerce the value to a bigint.
29
26
  * @param value The value to coerce.
30
- * @throws TypeError If the value can not be coerced.
31
- * @returns The value if it can be coerced.
27
+ * @returns The coerced bigint, or undefined if the value cannot be coerced.
32
28
  */
33
29
  static bigint(value: unknown): bigint | undefined;
34
30
  /**
35
31
  * Coerce the value to a boolean.
36
32
  * @param value The value to coerce.
37
- * @throws TypeError If the value can not be coerced.
38
- * @returns The value if it can be coerced.
33
+ * @returns The coerced boolean, or undefined if the value cannot be coerced.
39
34
  */
40
35
  static boolean(value: unknown): boolean | undefined;
41
36
  /**
42
37
  * Coerce the value to a date.
43
38
  * @param value The value to coerce.
44
- * @throws TypeError If the value can not be coerced.
45
- * @returns The value if it can be coerced.
39
+ * @returns The coerced date, or undefined if the value cannot be coerced.
46
40
  */
47
41
  static date(value: unknown): Date | undefined;
48
42
  /**
49
43
  * Coerce the value to a date/time.
50
44
  * @param value The value to coerce.
51
- * @throws TypeError If the value can not be coerced.
52
- * @returns The value if it can be coerced.
45
+ * @returns The coerced date/time, or undefined if the value cannot be coerced.
53
46
  */
54
47
  static dateTime(value: unknown): Date | undefined;
55
48
  /**
56
49
  * Coerce the value to a time.
57
50
  * @param value The value to coerce.
58
- * @throws TypeError If the value can not be coerced.
59
- * @returns The value if it can be coerced.
51
+ * @returns The coerced time, or undefined if the value cannot be coerced.
60
52
  */
61
53
  static time(value: unknown): Date | undefined;
62
54
  /**
63
55
  * Coerce the value to an object.
64
56
  * @param value The value to coerce.
65
- * @throws TypeError If the value can not be coerced.
66
- * @returns The value if it can be coerced.
57
+ * @returns The coerced object, or undefined if the value cannot be coerced.
67
58
  */
68
59
  static object<T = unknown>(value: unknown): T | undefined;
69
60
  /**
70
61
  * Coerce the value to a Uint8Array.
71
62
  * @param value The value to coerce.
72
- * @throws TypeError If the value can not be coerced.
73
- * @returns The value if it can be coerced.
63
+ * @returns The coerced Uint8Array, or undefined if the value cannot be coerced.
74
64
  */
75
65
  static uint8Array(value: unknown): Uint8Array | undefined;
76
66
  /**
@@ -8,7 +8,7 @@ export declare class Compression {
8
8
  */
9
9
  static readonly CLASS_NAME: string;
10
10
  /**
11
- * Compress bytes using GZIP.
11
+ * Compress bytes using the specified compression type.
12
12
  * @param bytes The bytes to compress.
13
13
  * @param type The type of compression to use.
14
14
  * @returns The compressed bytes.
@@ -118,6 +118,30 @@ export declare class Guards {
118
118
  * @throws GuardError If the value does not match the assertion.
119
119
  */
120
120
  static date(source: string, property: string, value: unknown): asserts value is Date;
121
+ /**
122
+ * Is the property a date-only string (ISO 8601 date, no time component).
123
+ * @param source The source of the error.
124
+ * @param property The name of the property.
125
+ * @param value The value to test.
126
+ * @throws GuardError If the value does not match the assertion.
127
+ */
128
+ static dateString(source: string, property: string, value: unknown): asserts value is string;
129
+ /**
130
+ * Is the property a date-time string (ISO 8601 with T separator).
131
+ * @param source The source of the error.
132
+ * @param property The name of the property.
133
+ * @param value The value to test.
134
+ * @throws GuardError If the value does not match the assertion.
135
+ */
136
+ static dateTimeString(source: string, property: string, value: unknown): asserts value is string;
137
+ /**
138
+ * Is the property a time-only string (ISO 8601 time, no date component).
139
+ * @param source The source of the error.
140
+ * @param property The name of the property.
141
+ * @param value The value to test.
142
+ * @throws GuardError If the value does not match the assertion.
143
+ */
144
+ static timeString(source: string, property: string, value: unknown): asserts value is string;
121
145
  /**
122
146
  * Is the property a timestamp in milliseconds.
123
147
  * @param source The source of the error.
@@ -5,25 +5,25 @@ export declare class Is {
5
5
  /**
6
6
  * Is the property undefined.
7
7
  * @param value The value to test.
8
- * @returns True if the value is a empty.
8
+ * @returns True if the value is undefined.
9
9
  */
10
10
  static undefined(value: unknown): value is undefined;
11
11
  /**
12
12
  * Is the property null.
13
13
  * @param value The value to test.
14
- * @returns True if the value is a empty.
14
+ * @returns True if the value is null.
15
15
  */
16
16
  static null(value: unknown): value is null;
17
17
  /**
18
18
  * Is the property null or undefined.
19
19
  * @param value The value to test.
20
- * @returns True if the value is a empty.
20
+ * @returns True if the value is null or undefined.
21
21
  */
22
22
  static empty(value: unknown): value is undefined | null;
23
23
  /**
24
- * Is the property is not null or undefined.
24
+ * Is the property not null or undefined.
25
25
  * @param value The value to test.
26
- * @returns True if the value is a not empty.
26
+ * @returns True if the value is not null or undefined.
27
27
  */
28
28
  static notEmpty(value: unknown): boolean;
29
29
  /**
@@ -33,9 +33,9 @@ export declare class Is {
33
33
  */
34
34
  static string(value: unknown): value is string;
35
35
  /**
36
- * Is the value a string.
36
+ * Is the value a non-empty string.
37
37
  * @param value The value to test.
38
- * @returns True if the value is a string.
38
+ * @returns True if the value is a non-empty string.
39
39
  */
40
40
  static stringValue(value: unknown): value is string;
41
41
  /**
@@ -134,13 +134,13 @@ export declare class Is {
134
134
  /**
135
135
  * Is the value a timestamp in seconds.
136
136
  * @param value The value to test.
137
- * @returns True if the value is a date.
137
+ * @returns True if the value is a timestamp in seconds.
138
138
  */
139
139
  static timestampSeconds(value: unknown): value is number;
140
140
  /**
141
141
  * Is the value a timestamp in milliseconds.
142
142
  * @param value The value to test.
143
- * @returns True if the value is a date.
143
+ * @returns True if the value is a timestamp in milliseconds.
144
144
  */
145
145
  static timestampMilliseconds(value: unknown): value is number;
146
146
  /**
@@ -0,0 +1,74 @@
1
+ import type { ISharedObjectBufferOptions } from "../models/ISharedObjectBufferOptions.js";
2
+ /**
3
+ * Manages per-object SharedArrayBuffers that store objects as UTF-8 JSON.
4
+ * Buffer layout: 4-byte Int32 header (current data byte length) followed by the JSON-encoded object.
5
+ * Buffers are explicitly created with create and cached in SharedStore.
6
+ * On a worker thread an existing buffer is fetched via a MessagePort handshake
7
+ * (same protocol as Mutex) and cached locally.
8
+ * Buffers grow automatically when the payload exceeds capacity; when the payload drops well below
9
+ * capacity the buffer is replaced with a smaller one. The caller must hold the objectId-keyed Mutex
10
+ * around every read and write. The main thread's worker message handler must forward messages to
11
+ * both Mutex.handleWorkerMessage and SharedObjectBuffer.handleWorkerMessage.
12
+ */
13
+ export declare class SharedObjectBuffer {
14
+ /**
15
+ * Runtime name for the class.
16
+ */
17
+ static readonly CLASS_NAME: string;
18
+ /**
19
+ * Default payload capacity per object (1 MiB). The first caller that creates the buffer
20
+ * for an object determines its initial capacity; later callers that pass a different value
21
+ * are ignored.
22
+ */
23
+ static readonly DEFAULT_CAPACITY_BYTES: number;
24
+ /**
25
+ * Default upper bound for how large a buffer may grow (256 MiB).
26
+ * Override per-object via the maxCapacityBytes option on create.
27
+ */
28
+ static readonly MAX_CAPACITY_BYTES: number;
29
+ /**
30
+ * Create the buffer for the given objectId if it does not already exist.
31
+ * Must be called while holding Mutex.lock(objectId).
32
+ * @param objectId The object id that identifies the buffer.
33
+ * @param options Optional capacity configuration used when creating the buffer.
34
+ */
35
+ static create(objectId: string, options?: ISharedObjectBufferOptions): Promise<void>;
36
+ /**
37
+ * Read and decode the object stored for the given objectId.
38
+ * Must be called while holding Mutex.lock(objectId).
39
+ * @param objectId The object id that identifies the buffer.
40
+ * @returns The stored object, or undefined when nothing has been written yet.
41
+ */
42
+ static read<T>(objectId: string): Promise<T | undefined>;
43
+ /**
44
+ * Encode and write the object into the buffer for the given objectId.
45
+ * The buffer must already exist, usually by calling create first.
46
+ * When the encoded payload exceeds the current buffer capacity the buffer is grown
47
+ * in-place via SharedArrayBuffer.grow so every thread with a reference sees the
48
+ * new size without any pointer swap. When the payload is smaller than
49
+ * _SHRINK_THRESHOLD of the current capacity and the capacity exceeds
50
+ * DEFAULT_CAPACITY_BYTES, the buffer is replaced with a smaller one on the calling thread.
51
+ * Must be called while holding Mutex.lock(objectId).
52
+ * @param objectId The object id that identifies the buffer.
53
+ * @param value The object to persist.
54
+ */
55
+ static write<T>(objectId: string, value: T): Promise<void>;
56
+ /**
57
+ * Remove the stored object and release the buffer for the given objectId.
58
+ * The entry is deleted from the local cache so subsequent reads or writes will
59
+ * create or fetch a fresh buffer. Worker threads that have cached the old buffer
60
+ * reference continue using it until they restart or re-request via the worker protocol.
61
+ * Must be called while holding Mutex.lock(objectId).
62
+ * @param objectId The object id that identifies the buffer.
63
+ */
64
+ static remove(objectId: string): void;
65
+ /**
66
+ * Inspect a message from a worker thread and, if it is a SharedObjectBuffer
67
+ * buffer-fetch request, respond to it synchronously.
68
+ * Call this from the main thread's worker message handler alongside
69
+ * Mutex.handleWorkerMessage.
70
+ * @param msg The raw message received from the worker.
71
+ * @returns True if the message was a SharedObjectBuffer protocol message, false otherwise.
72
+ */
73
+ static handleWorkerMessage(msg: unknown): boolean;
74
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Provide a store for shared objects which can be accesses through multiple
3
- * instance loads of a packages.
2
+ * Provide a store for shared objects which can be accessed through multiple
3
+ * instance loads of a package.
4
4
  */
5
5
  export declare class SharedStore {
6
6
  /**
package/docs/changelog.md CHANGED
@@ -1,5 +1,247 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.4-next.11](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.10...core-v0.0.4-next.11) (2026-06-15)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * mutex locking ([d5af3c1](https://github.com/iotaledger/twin-framework/commit/d5af3c1e66070f86408ba1410809689c6d22958b))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/nameof bumped from 0.0.4-next.10 to 0.0.4-next.11
16
+ * devDependencies
17
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.10 to 0.0.4-next.11
18
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.10 to 0.0.4-next.11
19
+
20
+ ## [0.0.4-next.10](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.9...core-v0.0.4-next.10) (2026-06-15)
21
+
22
+
23
+ ### Features
24
+
25
+ * add context id features ([#206](https://github.com/iotaledger/twin-framework/issues/206)) ([ef0d4ee](https://github.com/iotaledger/twin-framework/commit/ef0d4ee11a4f5fc6cc6f52a4958ce905c04ee13b))
26
+ * add factory.createIfExists ([aad5a53](https://github.com/iotaledger/twin-framework/commit/aad5a53cef1b1c2e04344ea46244d41e371dff9b))
27
+ * add Factory.getFactory ([ad6cd2d](https://github.com/iotaledger/twin-framework/commit/ad6cd2d30351c145c70212f8cce1b66d5e8a5235))
28
+ * add guard.dateString ([#335](https://github.com/iotaledger/twin-framework/issues/335)) ([a26a166](https://github.com/iotaledger/twin-framework/commit/a26a166eb1f62ece05b2432730cb7354feacecfc))
29
+ * add guards arrayEndsWith and arrayStartsWith ([95d875e](https://github.com/iotaledger/twin-framework/commit/95d875ec8ccb4713c145fdde941d4cfedcec2ed3))
30
+ * add health method to components ([a88016d](https://github.com/iotaledger/twin-framework/commit/a88016d90d172413e5bc5238dc1b3e35f82fcc2c))
31
+ * add Is.class method ([4988205](https://github.com/iotaledger/twin-framework/commit/498820543e256a130b4888c958fe1d87ca865d7f))
32
+ * add isDefault option to factory registration ([a8a700b](https://github.com/iotaledger/twin-framework/commit/a8a700bb8ddaf7dd5097869a358b8fc5f7c40ce7))
33
+ * add mutex ([#316](https://github.com/iotaledger/twin-framework/issues/316)) ([1027e5a](https://github.com/iotaledger/twin-framework/commit/1027e5ac77aa9804178b4253abdeefd6f1c3d521))
34
+ * add objectHelper.split ([386830a](https://github.com/iotaledger/twin-framework/commit/386830a77f8e842a5b119be0983708e042c3b14b))
35
+ * add ObjectOrArray and ArrayHelper methods ([0ac9077](https://github.com/iotaledger/twin-framework/commit/0ac907764d64b38ad1b04b0e9c3027055b527559))
36
+ * add rsa cipher support ([7af6cc6](https://github.com/iotaledger/twin-framework/commit/7af6cc67512d3363bd4a2f2e87bd7733c2800147))
37
+ * add single occurrence array type ([e890e43](https://github.com/iotaledger/twin-framework/commit/e890e4399e75ae5097f3ad8b1007321cbb1ed4ac))
38
+ * add single occurrence array type ([#245](https://github.com/iotaledger/twin-framework/issues/245)) ([771dc78](https://github.com/iotaledger/twin-framework/commit/771dc78025b5546c9c9681be9494a76ab71171c6))
39
+ * add support for health i18n validation ([7a286dd](https://github.com/iotaledger/twin-framework/commit/7a286ddb0c1bfa498bf3a77126cd589042bad6de))
40
+ * add teardown to IComponent interface ([32c173c](https://github.com/iotaledger/twin-framework/commit/32c173cda115c20d3b4cee14b8a29cdc08e91555))
41
+ * add teardown to IComponent interface ([98ce864](https://github.com/iotaledger/twin-framework/commit/98ce8648e709310c4435de334825b381fb4e32cb))
42
+ * add typeName method to factory ([699fcbd](https://github.com/iotaledger/twin-framework/commit/699fcbd1168228401ddb81fdacb959b8cdc4206a))
43
+ * add uuidv7 support ([#219](https://github.com/iotaledger/twin-framework/issues/219)) ([916c657](https://github.com/iotaledger/twin-framework/commit/916c657d270ce99fafe554233739fdd9ca28635b))
44
+ * add zlib/deflate mime types detection ([72c472b](https://github.com/iotaledger/twin-framework/commit/72c472b5a35a973e7109336f5b6cdd84dbb8bbcb))
45
+ * adding link header helper ([#225](https://github.com/iotaledger/twin-framework/issues/225)) ([703c072](https://github.com/iotaledger/twin-framework/commit/703c0725aceac6b6ec0c4fa729ef832d12fb3fd7))
46
+ * additional nameof operators ([a5aab60](https://github.com/iotaledger/twin-framework/commit/a5aab60bf66a86f1b7ff8af7c4f044cb03706d50))
47
+ * additional RSA methods and async ([1fceee2](https://github.com/iotaledger/twin-framework/commit/1fceee2d1248a24a7620846025fcf906495c07f4))
48
+ * bump version ([c5354fa](https://github.com/iotaledger/twin-framework/commit/c5354fa906f4493c70f2642a9175a66780a10636))
49
+ * eslint migration to flat config ([74427d7](https://github.com/iotaledger/twin-framework/commit/74427d78d342167f7850e49ab87269326355befe))
50
+ * expand error params to accept properties ([032e9fd](https://github.com/iotaledger/twin-framework/commit/032e9fd1388e457cde32ca1005dfe014a5a9c077))
51
+ * factory create and integrity ([#235](https://github.com/iotaledger/twin-framework/issues/235)) ([9f98b99](https://github.com/iotaledger/twin-framework/commit/9f98b99daf46eb365346fae49cc4ffba63e74cb3))
52
+ * health status grouping ([5007c29](https://github.com/iotaledger/twin-framework/commit/5007c29fe4123fe56f754450b993dbe5dc32a057))
53
+ * improve async cache edge cases ([4e57a6e](https://github.com/iotaledger/twin-framework/commit/4e57a6ec4113533b0ea903eae7d469200fa1348c))
54
+ * improve base error data extraction ([dccc933](https://github.com/iotaledger/twin-framework/commit/dccc93361a1544b41db0e7c126ff90e858d87960))
55
+ * improve error display in CLI ([94b6ca8](https://github.com/iotaledger/twin-framework/commit/94b6ca8bdcfe3ca7671c4095b436ea7bddaae98e))
56
+ * improve error formatting ([#313](https://github.com/iotaledger/twin-framework/issues/313)) ([5a19623](https://github.com/iotaledger/twin-framework/commit/5a196231bcbf088bf9ba92a93b7478d3b8c5593f))
57
+ * improve Is.function and ModuleHelper.getModuleMethod signatures ([ecf968b](https://github.com/iotaledger/twin-framework/commit/ecf968b02934b3676be4bf7cd2d1e7f8e7af6ce2))
58
+ * improve Is.function definition to retain types ([f20b6b0](https://github.com/iotaledger/twin-framework/commit/f20b6b0dd16e74b75dc359be72b05989305c6410))
59
+ * improve signatures ([45a7d58](https://github.com/iotaledger/twin-framework/commit/45a7d58baa5b6abc8c0735656f393d402fabb4ad))
60
+ * improve signatures ([cdd24be](https://github.com/iotaledger/twin-framework/commit/cdd24be6fb898d33955b6f2f93c3ddbd73582269))
61
+ * improve signatures ([2041ae2](https://github.com/iotaledger/twin-framework/commit/2041ae214cbd8d472d5e8be8d3403cd06a114040))
62
+ * improve signatures ([d8a0ee1](https://github.com/iotaledger/twin-framework/commit/d8a0ee16542134a3f8b0653065239f42045125b4))
63
+ * improve signatures ([1d084c5](https://github.com/iotaledger/twin-framework/commit/1d084c58c7eb41ae50b0ce80ce57e48a22dd3102))
64
+ * improve signatures ([#287](https://github.com/iotaledger/twin-framework/issues/287)) ([c9f38f0](https://github.com/iotaledger/twin-framework/commit/c9f38f00e1cea8759e1105b41872a650c66c00f4))
65
+ * locales validation ([#197](https://github.com/iotaledger/twin-framework/issues/197)) ([55fdadb](https://github.com/iotaledger/twin-framework/commit/55fdadb13595ce0047f787bd1d4135d429a99f12))
66
+ * mutex safe usage in browser ([#339](https://github.com/iotaledger/twin-framework/issues/339)) ([02d409f](https://github.com/iotaledger/twin-framework/commit/02d409f211e91267964208d58a27f29791715086))
67
+ * nodeIdentity optional in IComponent methods ([c78dc17](https://github.com/iotaledger/twin-framework/commit/c78dc17f4357d3e1ae40e415f468d3eae13e81f4))
68
+ * propagate includeStackTrace on error conversion ([8471cbb](https://github.com/iotaledger/twin-framework/commit/8471cbb71f8fc98247a0e92126c438c1a8b04d9b))
69
+ * propagate includeStackTrace on error conversion ([818337d](https://github.com/iotaledger/twin-framework/commit/818337d50d14bf5a7e8b3204649aa7527115cca9))
70
+ * relocate core packages from tools ([bcab8f3](https://github.com/iotaledger/twin-framework/commit/bcab8f3160442ea4fcaf442947462504f3d6a17d))
71
+ * shared object buffer ([#355](https://github.com/iotaledger/twin-framework/issues/355)) ([70d82ea](https://github.com/iotaledger/twin-framework/commit/70d82ea8f43f01aa840ae90ee0b1f23b064a07c6))
72
+ * simplify factory options ([7f85a85](https://github.com/iotaledger/twin-framework/commit/7f85a8553dd3008364e8e1104f2e6f6b6595d77e))
73
+ * simplify StringHelper signature ([0390403](https://github.com/iotaledger/twin-framework/commit/039040344952f91ee3c671249bc0e1c8f3b38e17))
74
+ * support indexed properties set in objects ([b9c001d](https://github.com/iotaledger/twin-framework/commit/b9c001dc4614f6ff7486f4370735a553613d823a))
75
+ * typescript 6 update ([1d10f31](https://github.com/iotaledger/twin-framework/commit/1d10f31e6516ec622773f45e88af82fe749b384a))
76
+ * update dependencies ([4da77ab](https://github.com/iotaledger/twin-framework/commit/4da77ab30f499e52825ac5a76f51436ceb59c26e))
77
+ * update dependencies ([f3bd015](https://github.com/iotaledger/twin-framework/commit/f3bd015efd169196b7e0335f5cab876ba6ca1d75))
78
+ * urn random switched to using uuidv7 ([606c9a2](https://github.com/iotaledger/twin-framework/commit/606c9a2ed68a10fc7fc2bc5f93388c1b71033154))
79
+ * urn random switched to using uuidv7 ([6a29f8b](https://github.com/iotaledger/twin-framework/commit/6a29f8bd573d06992b7eaa027b1daf4c2a2e1e85))
80
+ * use cause instead of inner for errors ([1f4acc4](https://github.com/iotaledger/twin-framework/commit/1f4acc4d7a6b71a134d9547da9bf40de1e1e49da))
81
+
82
+
83
+ ### Bug Fixes
84
+
85
+ * async thread lock ([97a96a5](https://github.com/iotaledger/twin-framework/commit/97a96a57f60c7b45a0ccbbfa1c43199b6e7512f9))
86
+ * ensure __decorate is defined for decorators ([103a563](https://github.com/iotaledger/twin-framework/commit/103a563ce01ebdef6240d2e590e7b026e8692684))
87
+ * improve exception handling in asyncCache ([c81b29b](https://github.com/iotaledger/twin-framework/commit/c81b29b660b152d2f0757d323430287e6491bf59))
88
+ * improve jsdoc comments ([f7c8e43](https://github.com/iotaledger/twin-framework/commit/f7c8e43fab9803dffa6461950d5b9979e25bcd24))
89
+ * linting ([b77511d](https://github.com/iotaledger/twin-framework/commit/b77511de8781707088b1beb4c92f12d7d6e0fd5f))
90
+ * pick non iterable keys ([399399a](https://github.com/iotaledger/twin-framework/commit/399399abfb8947c4eb235df527532ffe186986b3))
91
+ * prevent TOCTOU race in Mutex.getOrFetchLock for concurrent async callers ([#343](https://github.com/iotaledger/twin-framework/issues/343)) ([5238ad1](https://github.com/iotaledger/twin-framework/commit/5238ad1a68e24c69162204b02030c6686c15e9f4))
92
+ * remove misleading undefined from AsyncCache return type ([05b3291](https://github.com/iotaledger/twin-framework/commit/05b32914e03a63c7daf7b77952a2ebedb7ca7f6b))
93
+
94
+
95
+ ### Dependencies
96
+
97
+ * The following workspace dependencies were updated
98
+ * dependencies
99
+ * @twin.org/nameof bumped from 0.0.4-next.9 to 0.0.4-next.10
100
+ * devDependencies
101
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.9 to 0.0.4-next.10
102
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.9 to 0.0.4-next.10
103
+
104
+ ## [0.0.4-next.9](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.8...core-v0.0.4-next.9) (2026-06-15)
105
+
106
+
107
+ ### Features
108
+
109
+ * shared object buffer ([#355](https://github.com/iotaledger/twin-framework/issues/355)) ([70d82ea](https://github.com/iotaledger/twin-framework/commit/70d82ea8f43f01aa840ae90ee0b1f23b064a07c6))
110
+
111
+
112
+ ### Bug Fixes
113
+
114
+ * linting ([b77511d](https://github.com/iotaledger/twin-framework/commit/b77511de8781707088b1beb4c92f12d7d6e0fd5f))
115
+
116
+
117
+ ### Dependencies
118
+
119
+ * The following workspace dependencies were updated
120
+ * dependencies
121
+ * @twin.org/nameof bumped from 0.0.4-next.8 to 0.0.4-next.9
122
+ * devDependencies
123
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.8 to 0.0.4-next.9
124
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.8 to 0.0.4-next.9
125
+
126
+ ## [0.0.4-next.8](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.7...core-v0.0.4-next.8) (2026-06-10)
127
+
128
+
129
+ ### Miscellaneous Chores
130
+
131
+ * **core:** Synchronize repo versions
132
+
133
+
134
+ ### Dependencies
135
+
136
+ * The following workspace dependencies were updated
137
+ * dependencies
138
+ * @twin.org/nameof bumped from 0.0.4-next.7 to 0.0.4-next.8
139
+ * devDependencies
140
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.7 to 0.0.4-next.8
141
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.7 to 0.0.4-next.8
142
+
143
+ ## [0.0.4-next.7](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.6...core-v0.0.4-next.7) (2026-06-10)
144
+
145
+
146
+ ### Features
147
+
148
+ * add Factory.getFactory ([ad6cd2d](https://github.com/iotaledger/twin-framework/commit/ad6cd2d30351c145c70212f8cce1b66d5e8a5235))
149
+
150
+
151
+ ### Dependencies
152
+
153
+ * The following workspace dependencies were updated
154
+ * dependencies
155
+ * @twin.org/nameof bumped from 0.0.4-next.6 to 0.0.4-next.7
156
+ * devDependencies
157
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.6 to 0.0.4-next.7
158
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.6 to 0.0.4-next.7
159
+
160
+ ## [0.0.4-next.6](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.5...core-v0.0.4-next.6) (2026-06-05)
161
+
162
+
163
+ ### Miscellaneous Chores
164
+
165
+ * **core:** Synchronize repo versions
166
+
167
+
168
+ ### Dependencies
169
+
170
+ * The following workspace dependencies were updated
171
+ * dependencies
172
+ * @twin.org/nameof bumped from 0.0.4-next.5 to 0.0.4-next.6
173
+ * devDependencies
174
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.5 to 0.0.4-next.6
175
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.5 to 0.0.4-next.6
176
+
177
+ ## [0.0.4-next.5](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.4...core-v0.0.4-next.5) (2026-06-04)
178
+
179
+
180
+ ### Miscellaneous Chores
181
+
182
+ * **core:** Synchronize repo versions
183
+
184
+
185
+ ### Dependencies
186
+
187
+ * The following workspace dependencies were updated
188
+ * dependencies
189
+ * @twin.org/nameof bumped from 0.0.4-next.4 to 0.0.4-next.5
190
+ * devDependencies
191
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.4 to 0.0.4-next.5
192
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.4 to 0.0.4-next.5
193
+
194
+ ## [0.0.4-next.4](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.3...core-v0.0.4-next.4) (2026-06-02)
195
+
196
+
197
+ ### Bug Fixes
198
+
199
+ * prevent TOCTOU race in Mutex.getOrFetchLock for concurrent async callers ([#343](https://github.com/iotaledger/twin-framework/issues/343)) ([5238ad1](https://github.com/iotaledger/twin-framework/commit/5238ad1a68e24c69162204b02030c6686c15e9f4))
200
+
201
+
202
+ ### Dependencies
203
+
204
+ * The following workspace dependencies were updated
205
+ * dependencies
206
+ * @twin.org/nameof bumped from 0.0.4-next.3 to 0.0.4-next.4
207
+ * devDependencies
208
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.3 to 0.0.4-next.4
209
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.3 to 0.0.4-next.4
210
+
211
+ ## [0.0.4-next.3](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.2...core-v0.0.4-next.3) (2026-05-28)
212
+
213
+
214
+ ### Features
215
+
216
+ * mutex safe usage in browser ([#339](https://github.com/iotaledger/twin-framework/issues/339)) ([02d409f](https://github.com/iotaledger/twin-framework/commit/02d409f211e91267964208d58a27f29791715086))
217
+
218
+
219
+ ### Dependencies
220
+
221
+ * The following workspace dependencies were updated
222
+ * dependencies
223
+ * @twin.org/nameof bumped from 0.0.4-next.2 to 0.0.4-next.3
224
+ * devDependencies
225
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.2 to 0.0.4-next.3
226
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.2 to 0.0.4-next.3
227
+
228
+ ## [0.0.4-next.2](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.1...core-v0.0.4-next.2) (2026-05-28)
229
+
230
+
231
+ ### Features
232
+
233
+ * add guard.dateString ([#335](https://github.com/iotaledger/twin-framework/issues/335)) ([a26a166](https://github.com/iotaledger/twin-framework/commit/a26a166eb1f62ece05b2432730cb7354feacecfc))
234
+
235
+
236
+ ### Dependencies
237
+
238
+ * The following workspace dependencies were updated
239
+ * dependencies
240
+ * @twin.org/nameof bumped from 0.0.4-next.1 to 0.0.4-next.2
241
+ * devDependencies
242
+ * @twin.org/nameof-transformer bumped from 0.0.4-next.1 to 0.0.4-next.2
243
+ * @twin.org/nameof-vitest-plugin bumped from 0.0.4-next.1 to 0.0.4-next.2
244
+
3
245
  ## [0.0.4-next.1](https://github.com/iotaledger/twin-framework/compare/core-v0.0.4-next.0...core-v0.0.4-next.1) (2026-05-27)
4
246
 
5
247
 
@@ -38,7 +38,7 @@ The second array.
38
38
 
39
39
  `boolean`
40
40
 
41
- True if both arrays are empty of have the same values.
41
+ True if both arrays are empty or have the same values.
42
42
 
43
43
  ***
44
44
 
@@ -125,7 +125,7 @@ The TTL of the entry in the cache in milliseconds. Defaults to 1000 (1 second).
125
125
 
126
126
  `Promise`\<`void`\>
127
127
 
128
- Nothing.
128
+ A promise that resolves when the entry has been stored.
129
129
 
130
130
  ***
131
131
 
@@ -32,11 +32,7 @@ The value to coerce.
32
32
 
33
33
  `string` \| `undefined`
34
34
 
35
- The value if it can be coerced.
36
-
37
- #### Throws
38
-
39
- TypeError If the value can not be coerced.
35
+ The coerced string, or undefined if the value cannot be coerced.
40
36
 
41
37
  ***
42
38
 
@@ -58,11 +54,7 @@ The value to coerce.
58
54
 
59
55
  `number` \| `undefined`
60
56
 
61
- The value if it can be coerced.
62
-
63
- #### Throws
64
-
65
- TypeError If the value can not be coerced.
57
+ The coerced number, or undefined if the value cannot be coerced.
66
58
 
67
59
  ***
68
60
 
@@ -84,11 +76,7 @@ The value to coerce.
84
76
 
85
77
  `number` \| `undefined`
86
78
 
87
- The value if it can be coerced.
88
-
89
- #### Throws
90
-
91
- TypeError If the value can not be coerced.
79
+ The coerced integer, or undefined if the value cannot be coerced.
92
80
 
93
81
  ***
94
82
 
@@ -110,11 +98,7 @@ The value to coerce.
110
98
 
111
99
  `bigint` \| `undefined`
112
100
 
113
- The value if it can be coerced.
114
-
115
- #### Throws
116
-
117
- TypeError If the value can not be coerced.
101
+ The coerced bigint, or undefined if the value cannot be coerced.
118
102
 
119
103
  ***
120
104
 
@@ -136,11 +120,7 @@ The value to coerce.
136
120
 
137
121
  `boolean` \| `undefined`
138
122
 
139
- The value if it can be coerced.
140
-
141
- #### Throws
142
-
143
- TypeError If the value can not be coerced.
123
+ The coerced boolean, or undefined if the value cannot be coerced.
144
124
 
145
125
  ***
146
126
 
@@ -162,11 +142,7 @@ The value to coerce.
162
142
 
163
143
  `Date` \| `undefined`
164
144
 
165
- The value if it can be coerced.
166
-
167
- #### Throws
168
-
169
- TypeError If the value can not be coerced.
145
+ The coerced date, or undefined if the value cannot be coerced.
170
146
 
171
147
  ***
172
148
 
@@ -188,11 +164,7 @@ The value to coerce.
188
164
 
189
165
  `Date` \| `undefined`
190
166
 
191
- The value if it can be coerced.
192
-
193
- #### Throws
194
-
195
- TypeError If the value can not be coerced.
167
+ The coerced date/time, or undefined if the value cannot be coerced.
196
168
 
197
169
  ***
198
170
 
@@ -214,11 +186,7 @@ The value to coerce.
214
186
 
215
187
  `Date` \| `undefined`
216
188
 
217
- The value if it can be coerced.
218
-
219
- #### Throws
220
-
221
- TypeError If the value can not be coerced.
189
+ The coerced time, or undefined if the value cannot be coerced.
222
190
 
223
191
  ***
224
192
 
@@ -246,11 +214,7 @@ The value to coerce.
246
214
 
247
215
  `T` \| `undefined`
248
216
 
249
- The value if it can be coerced.
250
-
251
- #### Throws
252
-
253
- TypeError If the value can not be coerced.
217
+ The coerced object, or undefined if the value cannot be coerced.
254
218
 
255
219
  ***
256
220
 
@@ -272,11 +236,7 @@ The value to coerce.
272
236
 
273
237
  `Uint8Array`\<`ArrayBufferLike`\> \| `undefined`
274
238
 
275
- The value if it can be coerced.
276
-
277
- #### Throws
278
-
279
- TypeError If the value can not be coerced.
239
+ The coerced Uint8Array, or undefined if the value cannot be coerced.
280
240
 
281
241
  ***
282
242