@twin.org/context 0.9.0 → 0.9.1-next.10

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.
@@ -30,21 +30,29 @@ export class ContextIdStore {
30
30
  * @returns The storage.
31
31
  */
32
32
  static async getStorage() {
33
- let asyncHooksStore = SharedStore.get("asyncHooks");
34
- if (Is.empty(asyncHooksStore?.contextIds)) {
33
+ // get with the factory is invoked synchronously and stores the returned
34
+ // Promise before yielding, so concurrent callers always await the same
35
+ // AsyncLocalStorage instance regardless of how many module versions are loaded.
36
+ const stored = SharedStore.get("asyncHooks", async () => {
35
37
  try {
36
38
  const hooks = await import("node:async_hooks");
37
- asyncHooksStore = asyncHooksStore ?? {};
38
- asyncHooksStore.contextIds = new hooks.AsyncLocalStorage({
39
+ return new hooks.AsyncLocalStorage({
39
40
  name: "AsyncContextIdsStorage"
40
41
  });
41
42
  }
42
43
  catch (err) {
44
+ SharedStore.remove("asyncHooks");
43
45
  throw new GeneralError(ContextIdStore.CLASS_NAME, "asyncHooksNotAvailable", undefined, BaseError.fromError(err));
44
46
  }
45
- SharedStore.set("asyncHooks", asyncHooksStore);
47
+ });
48
+ // Back-compat with context@0.9.0: that version stored { contextIds: AsyncLocalStorage }
49
+ // (a plain wrapper object, not a Promise). Leave SharedStore untouched - upgrading to
50
+ // the Promise shape would cause old code to see no contextIds, create a second
51
+ // AsyncLocalStorage, and silently split context between versions.
52
+ if (!Is.promise(stored)) {
53
+ return stored.contextIds;
46
54
  }
47
- return asyncHooksStore.contextIds;
55
+ return stored;
48
56
  }
49
57
  }
50
58
  //# sourceMappingURL=contextIdStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contextIdStore.js","sourceRoot":"","sources":["../../../src/utils/contextIdStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI1E;;GAEG;AACH,MAAM,OAAO,cAAc;IAC1B;;OAEG;IACI,MAAM,CAAU,UAAU,oBAAoC;IAErE;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAc,UAAuB,EAAE,WAAoB;QACjF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,GAAG,CAAI,UAAU,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,aAAa;QAChC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,IAAI,eAAe,GAAG,WAAW,CAAC,GAAG,CACpC,YAAY,CACZ,CAAC;QAEF,IAAI,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC/C,eAAe,GAAG,eAAe,IAAI,EAAE,CAAC;gBACxC,eAAe,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAc;oBACrE,IAAI,EAAE,wBAAwB;iBAC9B,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,YAAY,CACrB,cAAc,CAAC,UAAU,EACzB,wBAAwB,EACxB,SAAS,EACT,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CACxB,CAAC;YACH,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,eAAe,CAAC,UAAU,CAAC;IACnC,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { AsyncLocalStorage } from \"node:async_hooks\";\nimport { BaseError, GeneralError, Is, SharedStore } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IContextIds } from \"../models/IContextIds.js\";\n\n/**\n * Class to maintain context ids and execute an async method.\n */\nexport class ContextIdStore {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ContextIdStore>();\n\n\t/**\n\t * Execute the method wrapped in the context.\n\t * @param contextIds The context IDs.\n\t * @param asyncMethod The async method to run.\n\t * @returns A promise that resolves with the result of the async method.\n\t */\n\tpublic static async run<T = unknown>(contextIds: IContextIds, asyncMethod: () => T): Promise<T> {\n\t\tconst storage = await ContextIdStore.getStorage();\n\t\treturn storage.run<T>(contextIds, asyncMethod);\n\t}\n\n\t/**\n\t * Get the context IDs.\n\t * @returns The context IDs.\n\t */\n\tpublic static async getContextIds(): Promise<IContextIds | undefined> {\n\t\tconst storage = await ContextIdStore.getStorage();\n\t\treturn storage.getStore();\n\t}\n\n\t/**\n\t * Get the storage and create it if it doesn't exist.\n\t * @returns The storage.\n\t */\n\tpublic static async getStorage(): Promise<AsyncLocalStorage<IContextIds>> {\n\t\tlet asyncHooksStore = SharedStore.get<{ contextIds?: AsyncLocalStorage<IContextIds> }>(\n\t\t\t\"asyncHooks\"\n\t\t);\n\n\t\tif (Is.empty(asyncHooksStore?.contextIds)) {\n\t\t\ttry {\n\t\t\t\tconst hooks = await import(\"node:async_hooks\");\n\t\t\t\tasyncHooksStore = asyncHooksStore ?? {};\n\t\t\t\tasyncHooksStore.contextIds = new hooks.AsyncLocalStorage<IContextIds>({\n\t\t\t\t\tname: \"AsyncContextIdsStorage\"\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tthrow new GeneralError(\n\t\t\t\t\tContextIdStore.CLASS_NAME,\n\t\t\t\t\t\"asyncHooksNotAvailable\",\n\t\t\t\t\tundefined,\n\t\t\t\t\tBaseError.fromError(err)\n\t\t\t\t);\n\t\t\t}\n\t\t\tSharedStore.set(\"asyncHooks\", asyncHooksStore);\n\t\t}\n\t\treturn asyncHooksStore.contextIds;\n\t}\n}\n"]}
1
+ {"version":3,"file":"contextIdStore.js","sourceRoot":"","sources":["../../../src/utils/contextIdStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI1E;;GAEG;AACH,MAAM,OAAO,cAAc;IAC1B;;OAEG;IACI,MAAM,CAAU,UAAU,oBAAoC;IAErE;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAc,UAAuB,EAAE,WAAoB;QACjF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,GAAG,CAAI,UAAU,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,aAAa;QAChC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,wEAAwE;QACxE,uEAAuE;QACvE,gFAAgF;QAChF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAE5B,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC/C,OAAO,IAAI,KAAK,CAAC,iBAAiB,CAAc;oBAC/C,IAAI,EAAE,wBAAwB;iBAC9B,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACjC,MAAM,IAAI,YAAY,CACrB,cAAc,CAAC,UAAU,EACzB,wBAAwB,EACxB,SAAS,EACT,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CACxB,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,wFAAwF;QACxF,sFAAsF;QACtF,+EAA+E;QAC/E,kEAAkE;QAClE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAiC,MAAM,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,UAAU,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { AsyncLocalStorage } from \"node:async_hooks\";\nimport { BaseError, GeneralError, Is, SharedStore } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IContextIds } from \"../models/IContextIds.js\";\n\n/**\n * Class to maintain context ids and execute an async method.\n */\nexport class ContextIdStore {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ContextIdStore>();\n\n\t/**\n\t * Execute the method wrapped in the context.\n\t * @param contextIds The context IDs.\n\t * @param asyncMethod The async method to run.\n\t * @returns A promise that resolves with the result of the async method.\n\t */\n\tpublic static async run<T = unknown>(contextIds: IContextIds, asyncMethod: () => T): Promise<T> {\n\t\tconst storage = await ContextIdStore.getStorage();\n\t\treturn storage.run<T>(contextIds, asyncMethod);\n\t}\n\n\t/**\n\t * Get the context IDs.\n\t * @returns The context IDs.\n\t */\n\tpublic static async getContextIds(): Promise<IContextIds | undefined> {\n\t\tconst storage = await ContextIdStore.getStorage();\n\t\treturn storage.getStore();\n\t}\n\n\t/**\n\t * Get the storage and create it if it doesn't exist.\n\t * @returns The storage.\n\t */\n\tpublic static async getStorage(): Promise<AsyncLocalStorage<IContextIds>> {\n\t\t// get with the factory is invoked synchronously and stores the returned\n\t\t// Promise before yielding, so concurrent callers always await the same\n\t\t// AsyncLocalStorage instance regardless of how many module versions are loaded.\n\t\tconst stored = SharedStore.get<\n\t\t\tPromise<AsyncLocalStorage<IContextIds>> | { contextIds: AsyncLocalStorage<IContextIds> }\n\t\t>(\"asyncHooks\", async () => {\n\t\t\ttry {\n\t\t\t\tconst hooks = await import(\"node:async_hooks\");\n\t\t\t\treturn new hooks.AsyncLocalStorage<IContextIds>({\n\t\t\t\t\tname: \"AsyncContextIdsStorage\"\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tSharedStore.remove(\"asyncHooks\");\n\t\t\t\tthrow new GeneralError(\n\t\t\t\t\tContextIdStore.CLASS_NAME,\n\t\t\t\t\t\"asyncHooksNotAvailable\",\n\t\t\t\t\tundefined,\n\t\t\t\t\tBaseError.fromError(err)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// Back-compat with context@0.9.0: that version stored { contextIds: AsyncLocalStorage }\n\t\t// (a plain wrapper object, not a Promise). Leave SharedStore untouched - upgrading to\n\t\t// the Promise shape would cause old code to see no contextIds, create a second\n\t\t// AsyncLocalStorage, and silently split context between versions.\n\t\tif (!Is.promise<AsyncLocalStorage<IContextIds>>(stored)) {\n\t\t\treturn stored.contextIds;\n\t\t}\n\t\treturn stored;\n\t}\n}\n"]}
package/docs/changelog.md CHANGED
@@ -1,5 +1,218 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.1-next.10](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.9...context-v0.9.1-next.10) (2026-07-20)
4
+
5
+
6
+ ### Miscellaneous Chores
7
+
8
+ * **context:** Synchronize repo versions
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/core bumped from 0.9.1-next.9 to 0.9.1-next.10
16
+ * @twin.org/nameof bumped from 0.9.1-next.9 to 0.9.1-next.10
17
+ * devDependencies
18
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.9 to 0.9.1-next.10
19
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.9 to 0.9.1-next.10
20
+ * @twin.org/validate-locales bumped from 0.9.1-next.9 to 0.9.1-next.10
21
+
22
+ ## [0.9.1-next.9](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.8...context-v0.9.1-next.9) (2026-07-20)
23
+
24
+
25
+ ### Miscellaneous Chores
26
+
27
+ * **context:** Synchronize repo versions
28
+
29
+
30
+ ### Dependencies
31
+
32
+ * The following workspace dependencies were updated
33
+ * dependencies
34
+ * @twin.org/core bumped from 0.9.1-next.8 to 0.9.1-next.9
35
+ * @twin.org/nameof bumped from 0.9.1-next.8 to 0.9.1-next.9
36
+ * devDependencies
37
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.8 to 0.9.1-next.9
38
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.8 to 0.9.1-next.9
39
+ * @twin.org/validate-locales bumped from 0.9.1-next.8 to 0.9.1-next.9
40
+
41
+ ## [0.9.1-next.8](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.7...context-v0.9.1-next.8) (2026-07-20)
42
+
43
+
44
+ ### Bug Fixes
45
+
46
+ * context id backwards compatibility ([#406](https://github.com/iotaledger/twin-framework/issues/406)) ([afab5fa](https://github.com/iotaledger/twin-framework/commit/afab5fa2a876b01736e117e4992536627837afde))
47
+
48
+
49
+ ### Dependencies
50
+
51
+ * The following workspace dependencies were updated
52
+ * dependencies
53
+ * @twin.org/core bumped from 0.9.1-next.7 to 0.9.1-next.8
54
+ * @twin.org/nameof bumped from 0.9.1-next.7 to 0.9.1-next.8
55
+ * devDependencies
56
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.7 to 0.9.1-next.8
57
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.7 to 0.9.1-next.8
58
+ * @twin.org/validate-locales bumped from 0.9.1-next.7 to 0.9.1-next.8
59
+
60
+ ## [0.9.1-next.7](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.6...context-v0.9.1-next.7) (2026-07-09)
61
+
62
+
63
+ ### Miscellaneous Chores
64
+
65
+ * **context:** Synchronize repo versions
66
+
67
+
68
+ ### Dependencies
69
+
70
+ * The following workspace dependencies were updated
71
+ * dependencies
72
+ * @twin.org/core bumped from 0.9.1-next.6 to 0.9.1-next.7
73
+ * @twin.org/nameof bumped from 0.9.1-next.6 to 0.9.1-next.7
74
+ * devDependencies
75
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.6 to 0.9.1-next.7
76
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.6 to 0.9.1-next.7
77
+ * @twin.org/validate-locales bumped from 0.9.1-next.6 to 0.9.1-next.7
78
+
79
+ ## [0.9.1-next.6](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.5...context-v0.9.1-next.6) (2026-07-03)
80
+
81
+
82
+ ### Miscellaneous Chores
83
+
84
+ * **context:** Synchronize repo versions
85
+
86
+
87
+ ### Dependencies
88
+
89
+ * The following workspace dependencies were updated
90
+ * dependencies
91
+ * @twin.org/core bumped from 0.9.1-next.5 to 0.9.1-next.6
92
+ * @twin.org/nameof bumped from 0.9.1-next.5 to 0.9.1-next.6
93
+ * devDependencies
94
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.5 to 0.9.1-next.6
95
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.5 to 0.9.1-next.6
96
+ * @twin.org/validate-locales bumped from 0.9.1-next.5 to 0.9.1-next.6
97
+
98
+ ## [0.9.1-next.5](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.4...context-v0.9.1-next.5) (2026-06-29)
99
+
100
+
101
+ ### Miscellaneous Chores
102
+
103
+ * **context:** Synchronize repo versions
104
+
105
+
106
+ ### Dependencies
107
+
108
+ * The following workspace dependencies were updated
109
+ * dependencies
110
+ * @twin.org/core bumped from 0.9.1-next.4 to 0.9.1-next.5
111
+ * @twin.org/nameof bumped from 0.9.1-next.4 to 0.9.1-next.5
112
+ * devDependencies
113
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.4 to 0.9.1-next.5
114
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.4 to 0.9.1-next.5
115
+ * @twin.org/validate-locales bumped from 0.9.1-next.4 to 0.9.1-next.5
116
+
117
+ ## [0.9.1-next.4](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.3...context-v0.9.1-next.4) (2026-06-26)
118
+
119
+
120
+ ### Miscellaneous Chores
121
+
122
+ * **context:** Synchronize repo versions
123
+
124
+
125
+ ### Dependencies
126
+
127
+ * The following workspace dependencies were updated
128
+ * dependencies
129
+ * @twin.org/core bumped from 0.9.1-next.3 to 0.9.1-next.4
130
+ * @twin.org/nameof bumped from 0.9.1-next.3 to 0.9.1-next.4
131
+ * devDependencies
132
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.3 to 0.9.1-next.4
133
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.3 to 0.9.1-next.4
134
+ * @twin.org/validate-locales bumped from 0.9.1-next.3 to 0.9.1-next.4
135
+
136
+ ## [0.9.1-next.3](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.2...context-v0.9.1-next.3) (2026-06-26)
137
+
138
+
139
+ ### Features
140
+
141
+ * add context id features ([#206](https://github.com/iotaledger/twin-framework/issues/206)) ([ef0d4ee](https://github.com/iotaledger/twin-framework/commit/ef0d4ee11a4f5fc6cc6f52a4958ce905c04ee13b))
142
+ * add user organization context key ([a3da436](https://github.com/iotaledger/twin-framework/commit/a3da4360451860052a508bdc147255a0b9ca8410))
143
+ * concurrency in SharedStore ([#388](https://github.com/iotaledger/twin-framework/issues/388)) ([0610198](https://github.com/iotaledger/twin-framework/commit/0610198ba482273c3f6ba918e34f5875a3659571))
144
+ * context id handler derives from component ([c868ec2](https://github.com/iotaledger/twin-framework/commit/c868ec21d3a576d4faa222bf130270a21936e50e))
145
+ * typescript 6 update ([1d10f31](https://github.com/iotaledger/twin-framework/commit/1d10f31e6516ec622773f45e88af82fe749b384a))
146
+ * update dependencies ([4da77ab](https://github.com/iotaledger/twin-framework/commit/4da77ab30f499e52825ac5a76f51436ceb59c26e))
147
+
148
+
149
+ ### Bug Fixes
150
+
151
+ * ensure __decorate is defined for decorators ([103a563](https://github.com/iotaledger/twin-framework/commit/103a563ce01ebdef6240d2e590e7b026e8692684))
152
+ * use singleton pattern for context storage ([c69f358](https://github.com/iotaledger/twin-framework/commit/c69f358e45361b45d4e46f19846cd5b8c99b0ccd))
153
+ * use singleton pattern for context storage ([5cc706a](https://github.com/iotaledger/twin-framework/commit/5cc706a2bbfc601fa3d00f3efd8b764052e9f91d))
154
+
155
+
156
+ ### Dependencies
157
+
158
+ * The following workspace dependencies were updated
159
+ * dependencies
160
+ * @twin.org/core bumped from 0.9.1-next.2 to 0.9.1-next.3
161
+ * @twin.org/nameof bumped from 0.9.1-next.2 to 0.9.1-next.3
162
+ * devDependencies
163
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.2 to 0.9.1-next.3
164
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.2 to 0.9.1-next.3
165
+ * @twin.org/validate-locales bumped from 0.9.1-next.2 to 0.9.1-next.3
166
+
167
+ ## [0.9.1-next.2](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.1...context-v0.9.1-next.2) (2026-06-26)
168
+
169
+
170
+ ### Features
171
+
172
+ * concurrency in SharedStore ([#388](https://github.com/iotaledger/twin-framework/issues/388)) ([0610198](https://github.com/iotaledger/twin-framework/commit/0610198ba482273c3f6ba918e34f5875a3659571))
173
+
174
+
175
+ ### Dependencies
176
+
177
+ * The following workspace dependencies were updated
178
+ * dependencies
179
+ * @twin.org/core bumped from 0.9.1-next.1 to 0.9.1-next.2
180
+ * @twin.org/nameof bumped from 0.9.1-next.1 to 0.9.1-next.2
181
+ * devDependencies
182
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.1 to 0.9.1-next.2
183
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.1 to 0.9.1-next.2
184
+ * @twin.org/validate-locales bumped from 0.9.1-next.1 to 0.9.1-next.2
185
+
186
+ ## [0.9.1-next.1](https://github.com/iotaledger/twin-framework/compare/context-v0.9.1-next.0...context-v0.9.1-next.1) (2026-06-25)
187
+
188
+
189
+ ### Features
190
+
191
+ * add context id features ([#206](https://github.com/iotaledger/twin-framework/issues/206)) ([ef0d4ee](https://github.com/iotaledger/twin-framework/commit/ef0d4ee11a4f5fc6cc6f52a4958ce905c04ee13b))
192
+ * add user organization context key ([a3da436](https://github.com/iotaledger/twin-framework/commit/a3da4360451860052a508bdc147255a0b9ca8410))
193
+ * context id handler derives from component ([c868ec2](https://github.com/iotaledger/twin-framework/commit/c868ec21d3a576d4faa222bf130270a21936e50e))
194
+ * typescript 6 update ([1d10f31](https://github.com/iotaledger/twin-framework/commit/1d10f31e6516ec622773f45e88af82fe749b384a))
195
+ * update dependencies ([4da77ab](https://github.com/iotaledger/twin-framework/commit/4da77ab30f499e52825ac5a76f51436ceb59c26e))
196
+
197
+
198
+ ### Bug Fixes
199
+
200
+ * ensure __decorate is defined for decorators ([103a563](https://github.com/iotaledger/twin-framework/commit/103a563ce01ebdef6240d2e590e7b026e8692684))
201
+ * use singleton pattern for context storage ([c69f358](https://github.com/iotaledger/twin-framework/commit/c69f358e45361b45d4e46f19846cd5b8c99b0ccd))
202
+ * use singleton pattern for context storage ([5cc706a](https://github.com/iotaledger/twin-framework/commit/5cc706a2bbfc601fa3d00f3efd8b764052e9f91d))
203
+
204
+
205
+ ### Dependencies
206
+
207
+ * The following workspace dependencies were updated
208
+ * dependencies
209
+ * @twin.org/core bumped from 0.9.1-next.0 to 0.9.1-next.1
210
+ * @twin.org/nameof bumped from 0.9.1-next.0 to 0.9.1-next.1
211
+ * devDependencies
212
+ * @twin.org/nameof-transformer bumped from 0.9.1-next.0 to 0.9.1-next.1
213
+ * @twin.org/nameof-vitest-plugin bumped from 0.9.1-next.0 to 0.9.1-next.1
214
+ * @twin.org/validate-locales bumped from next to 0.9.1-next.1
215
+
3
216
  ## [0.9.0](https://github.com/iotaledger/twin-framework/compare/context-v0.9.0...context-v0.9.0) (2026-06-22)
4
217
 
5
218
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/context",
3
- "version": "0.9.0",
3
+ "version": "0.9.1-next.10",
4
4
  "description": "Helper methods/classes for context handling",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,8 +14,8 @@
14
14
  "node": ">=20.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "@twin.org/core": "^0.9.0",
18
- "@twin.org/nameof": "^0.9.0"
17
+ "@twin.org/core": "0.9.1-next.10",
18
+ "@twin.org/nameof": "0.9.1-next.10"
19
19
  },
20
20
  "main": "./dist/es/index.js",
21
21
  "types": "./dist/types/index.d.ts",