@common-stack/client-core 8.4.1-alpha.0 → 8.6.1-alpha.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/lib/connector/ScopedContainer.d.ts +2 -4
- package/lib/connector/ScopedContainer.js +64 -24
- package/lib/connector/ScopedContainer.js.map +1 -1
- package/lib/helpers/attachDeprecatedLogger.d.ts +27 -0
- package/lib/helpers/attachDeprecatedLogger.js +48 -0
- package/lib/helpers/attachDeprecatedLogger.js.map +1 -0
- package/lib/helpers/index.d.ts +1 -0
- package/lib/index.js +1 -1
- package/package.json +2 -2
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { Container, interfaces } from 'inversify';
|
|
2
2
|
export type RegisterScopedDependenciesAction = (container: Container) => void;
|
|
3
3
|
export declare class ScopedContainer {
|
|
4
|
-
private static _dependencyRegistrations;
|
|
5
|
-
private static _globalContainer;
|
|
6
|
-
private static readonly _containerInstances;
|
|
7
4
|
/**
|
|
8
5
|
* Options object to use when creating a new container for a
|
|
9
6
|
* scope ID.
|
|
10
7
|
*/
|
|
11
|
-
static scopedContainerOptions: interfaces.ContainerOptions;
|
|
8
|
+
static get scopedContainerOptions(): interfaces.ContainerOptions;
|
|
9
|
+
static set scopedContainerOptions(value: interfaces.ContainerOptions);
|
|
12
10
|
/**
|
|
13
11
|
* A function to register global dependencies.
|
|
14
12
|
* This creates a global container instance, which enables truly
|
|
@@ -1,14 +1,54 @@
|
|
|
1
1
|
import {Container}from'inversify';/* eslint-disable no-underscore-dangle */
|
|
2
2
|
const DEFAULT_SCOPE_ID = '__default__';
|
|
3
|
+
/**
|
|
4
|
+
* Shared state backed by globalThis.
|
|
5
|
+
*
|
|
6
|
+
* Bundlers like Vite can create separate module instances when the same class is imported
|
|
7
|
+
* via both a barrel export (`@common-stack/client-core`) and a deep path
|
|
8
|
+
* (`@common-stack/client-core/lib/connector/ScopedContainer.js`). Each module copy gets
|
|
9
|
+
* its own static class properties, so `registerGlobalDependencies()` writes to one
|
|
10
|
+
* instance while `ScopedContainer.for()` reads from another — causing
|
|
11
|
+
* "No matching bindings found for serviceIdentifier: Symbol(Logger)" errors.
|
|
12
|
+
*
|
|
13
|
+
* To protect against this, all mutable state is stored on globalThis so every copy
|
|
14
|
+
* of ScopedContainer (regardless of how many module instances the bundler creates)
|
|
15
|
+
* shares the same containers, registrations, and global parent.
|
|
16
|
+
*
|
|
17
|
+
* IMPORTANT: Always import ScopedContainer from the barrel '@common-stack/client-core',
|
|
18
|
+
* never from '@common-stack/client-core/lib/connector/ScopedContainer.js'.
|
|
19
|
+
* See: https://vitejs.dev/guide/dep-pre-bundling#monorepos-and-linked-dependencies
|
|
20
|
+
*/
|
|
21
|
+
const globalRef = (typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : global);
|
|
22
|
+
const GLOBAL_KEY = '__SCOPED_CONTAINER_STATE__';
|
|
23
|
+
// Initialize shared state once; all subsequent module loads reuse it.
|
|
24
|
+
if (!globalRef[GLOBAL_KEY]) {
|
|
25
|
+
globalRef[GLOBAL_KEY] = {
|
|
26
|
+
dependencyRegistrations: [],
|
|
27
|
+
globalContainer: null,
|
|
28
|
+
containerInstances: {},
|
|
29
|
+
scopedContainerOptions: undefined,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.warn('[ScopedContainer] ⚠️ Duplicate ScopedContainer module detected! ' +
|
|
34
|
+
'This usually means ScopedContainer is imported via both a barrel export and a deep path. ' +
|
|
35
|
+
"Always import from '@common-stack/client-core', never from " +
|
|
36
|
+
"'@common-stack/client-core/lib/connector/ScopedContainer.js'. " +
|
|
37
|
+
'State is shared via globalThis so the app will still work, but please fix the import.');
|
|
38
|
+
}
|
|
39
|
+
// Convenience accessor — all static methods read/write through this.
|
|
40
|
+
const sharedState = globalRef[GLOBAL_KEY];
|
|
3
41
|
class ScopedContainer {
|
|
4
|
-
static _dependencyRegistrations = [];
|
|
5
|
-
static _globalContainer;
|
|
6
|
-
static _containerInstances = {};
|
|
7
42
|
/**
|
|
8
43
|
* Options object to use when creating a new container for a
|
|
9
44
|
* scope ID.
|
|
10
45
|
*/
|
|
11
|
-
static scopedContainerOptions
|
|
46
|
+
static get scopedContainerOptions() {
|
|
47
|
+
return sharedState.scopedContainerOptions;
|
|
48
|
+
}
|
|
49
|
+
static set scopedContainerOptions(value) {
|
|
50
|
+
sharedState.scopedContainerOptions = value;
|
|
51
|
+
}
|
|
12
52
|
/**
|
|
13
53
|
* A function to register global dependencies.
|
|
14
54
|
* This creates a global container instance, which enables truly
|
|
@@ -24,13 +64,13 @@ class ScopedContainer {
|
|
|
24
64
|
* })();
|
|
25
65
|
*/
|
|
26
66
|
static registerGlobalDependencies(fn) {
|
|
27
|
-
if (!
|
|
28
|
-
|
|
29
|
-
fn(
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
throw new Error('Global dependencies have already been registered');
|
|
67
|
+
if (!sharedState.globalContainer) {
|
|
68
|
+
sharedState.globalContainer = new Container(sharedState.scopedContainerOptions);
|
|
69
|
+
fn(sharedState.globalContainer);
|
|
33
70
|
}
|
|
71
|
+
// Note: If global container already exists, we silently skip.
|
|
72
|
+
// This prevents hydration mismatches when the client re-executes
|
|
73
|
+
// module code that calls registerGlobalDependencies during SSR/hydration.
|
|
34
74
|
}
|
|
35
75
|
/**
|
|
36
76
|
* Returns a @see Container that is unique to the specified scope.
|
|
@@ -41,10 +81,10 @@ class ScopedContainer {
|
|
|
41
81
|
* @returns A @see Container that is unique to the specified scope.
|
|
42
82
|
*/
|
|
43
83
|
static for(scopeId = DEFAULT_SCOPE_ID) {
|
|
44
|
-
let container =
|
|
84
|
+
let container = sharedState.containerInstances[scopeId];
|
|
45
85
|
if (!container) {
|
|
46
86
|
container = this.makeNewContainer();
|
|
47
|
-
|
|
87
|
+
sharedState.containerInstances[scopeId] = container;
|
|
48
88
|
}
|
|
49
89
|
return container;
|
|
50
90
|
}
|
|
@@ -54,7 +94,7 @@ class ScopedContainer {
|
|
|
54
94
|
* @returns True if a container exists for the specified scope, false otherwise.
|
|
55
95
|
*/
|
|
56
96
|
static isExist(scopeId = DEFAULT_SCOPE_ID) {
|
|
57
|
-
return !!
|
|
97
|
+
return !!sharedState.containerInstances[scopeId];
|
|
58
98
|
}
|
|
59
99
|
/**
|
|
60
100
|
* Unbinds the @see Container (i.e. container.unbindAll()) and removes
|
|
@@ -62,17 +102,17 @@ class ScopedContainer {
|
|
|
62
102
|
* @param scopeId
|
|
63
103
|
*/
|
|
64
104
|
static remove(scopeId = DEFAULT_SCOPE_ID) {
|
|
65
|
-
const container =
|
|
105
|
+
const container = sharedState.containerInstances[scopeId];
|
|
66
106
|
if (!container)
|
|
67
107
|
return;
|
|
68
108
|
container.unbindAll();
|
|
69
|
-
delete
|
|
109
|
+
delete sharedState.containerInstances[scopeId];
|
|
70
110
|
}
|
|
71
111
|
/**
|
|
72
112
|
* Runs the @method remove method on all instances.
|
|
73
113
|
*/
|
|
74
114
|
static removeAll() {
|
|
75
|
-
Object.keys(
|
|
115
|
+
Object.keys(sharedState.containerInstances).forEach((key) => this.remove(key));
|
|
76
116
|
}
|
|
77
117
|
/**
|
|
78
118
|
* Registers dependencies that should be tied to a scope,
|
|
@@ -93,20 +133,20 @@ class ScopedContainer {
|
|
|
93
133
|
* })();
|
|
94
134
|
*/
|
|
95
135
|
static registerScopedDependencies(fn) {
|
|
96
|
-
|
|
136
|
+
sharedState.dependencyRegistrations.push(fn);
|
|
97
137
|
return this;
|
|
98
138
|
}
|
|
99
139
|
static makeNewContainer() {
|
|
100
|
-
const container = this.ensureGlobalContainer().createChild(
|
|
101
|
-
|
|
140
|
+
const container = this.ensureGlobalContainer().createChild(sharedState.scopedContainerOptions);
|
|
141
|
+
sharedState.dependencyRegistrations.forEach((action) => action(container));
|
|
102
142
|
return container;
|
|
103
143
|
}
|
|
104
144
|
static ensureGlobalContainer() {
|
|
105
|
-
if (!
|
|
106
|
-
const container = new Container(
|
|
107
|
-
|
|
108
|
-
|
|
145
|
+
if (!sharedState.globalContainer) {
|
|
146
|
+
const container = new Container(sharedState.scopedContainerOptions);
|
|
147
|
+
sharedState.globalContainer = container;
|
|
148
|
+
sharedState.dependencyRegistrations.forEach((action) => action(container));
|
|
109
149
|
}
|
|
110
|
-
return
|
|
150
|
+
return sharedState.globalContainer;
|
|
111
151
|
}
|
|
112
152
|
}export{ScopedContainer};//# sourceMappingURL=ScopedContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScopedContainer.js","sources":["../../src/connector/ScopedContainer.ts"],"sourcesContent":[null],"names":[],"mappings":"kCAAA;AAGA,MAAM,gBAAgB,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ScopedContainer.js","sources":["../../src/connector/ScopedContainer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CdmLogger } from '@cdm-logger/core';
|
|
2
|
+
import type { Container } from 'inversify';
|
|
3
|
+
/**
|
|
4
|
+
* Attaches a **non-enumerable, lazy** `logger` getter to the given context object.
|
|
5
|
+
*
|
|
6
|
+
* Why non-enumerable?
|
|
7
|
+
* - `JSON.stringify()` skips non-enumerable properties → no serialization into HTML
|
|
8
|
+
* - Spread / `Object.keys()` won't copy it → no accidental inclusion in hydration payload
|
|
9
|
+
* - React won't see it when diffing props → no hydration mismatch
|
|
10
|
+
*
|
|
11
|
+
* The getter resolves the logger from the Inversify container on first access,
|
|
12
|
+
* prints a one-time deprecation warning, and returns the logger instance.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const context = { container, apolloClient };
|
|
17
|
+
* attachDeprecatedLogger(context, container);
|
|
18
|
+
* // Old code still works:
|
|
19
|
+
* context.logger.info('hello'); // ⚠️ prints deprecation warning once
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @param target – The context object to augment (mutated in place).
|
|
23
|
+
* @param container – The Inversify container that has `ClientTypes.Logger` bound.
|
|
24
|
+
*/
|
|
25
|
+
export declare function attachDeprecatedLogger<T extends object>(target: T, container: Container): T & {
|
|
26
|
+
logger?: CdmLogger.ILogger;
|
|
27
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import {ClientTypes}from'@common-stack/core';let _warnedOnce = false;
|
|
2
|
+
/**
|
|
3
|
+
* Attaches a **non-enumerable, lazy** `logger` getter to the given context object.
|
|
4
|
+
*
|
|
5
|
+
* Why non-enumerable?
|
|
6
|
+
* - `JSON.stringify()` skips non-enumerable properties → no serialization into HTML
|
|
7
|
+
* - Spread / `Object.keys()` won't copy it → no accidental inclusion in hydration payload
|
|
8
|
+
* - React won't see it when diffing props → no hydration mismatch
|
|
9
|
+
*
|
|
10
|
+
* The getter resolves the logger from the Inversify container on first access,
|
|
11
|
+
* prints a one-time deprecation warning, and returns the logger instance.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const context = { container, apolloClient };
|
|
16
|
+
* attachDeprecatedLogger(context, container);
|
|
17
|
+
* // Old code still works:
|
|
18
|
+
* context.logger.info('hello'); // ⚠️ prints deprecation warning once
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @param target – The context object to augment (mutated in place).
|
|
22
|
+
* @param container – The Inversify container that has `ClientTypes.Logger` bound.
|
|
23
|
+
*/
|
|
24
|
+
function attachDeprecatedLogger(target, container) {
|
|
25
|
+
let cachedLogger;
|
|
26
|
+
Object.defineProperty(target, 'logger', {
|
|
27
|
+
configurable: true,
|
|
28
|
+
enumerable: false, // ← invisible to JSON.stringify / Object.keys / spread
|
|
29
|
+
get() {
|
|
30
|
+
if (!_warnedOnce) {
|
|
31
|
+
_warnedOnce = true;
|
|
32
|
+
// eslint-disable-next-line no-console
|
|
33
|
+
console.warn('[DEPRECATED] Accessing "logger" from context/clientService is deprecated and will be ' +
|
|
34
|
+
'removed in a future release. Use container.get(ClientTypes.Logger) instead.');
|
|
35
|
+
}
|
|
36
|
+
if (!cachedLogger) {
|
|
37
|
+
try {
|
|
38
|
+
cachedLogger = container.get(ClientTypes.Logger);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Logger not yet bound – return undefined
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return cachedLogger;
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
return target;
|
|
48
|
+
}export{attachDeprecatedLogger};//# sourceMappingURL=attachDeprecatedLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachDeprecatedLogger.js","sources":["../../src/helpers/attachDeprecatedLogger.ts"],"sourcesContent":[null],"names":[],"mappings":"6CAIA,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;AAqBG;AACa,SAAA,sBAAsB,CAClC,MAAS,EACT,SAAoB,EAAA;AAEpB,IAAA,IAAI,YAA2C,CAAC;AAEhD,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;AACpC,QAAA,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,GAAG,GAAA;YACC,IAAI,CAAC,WAAW,EAAE;gBACd,WAAW,GAAG,IAAI,CAAC;;gBAEnB,OAAO,CAAC,IAAI,CACR,uFAAuF;AACnF,oBAAA,6EAA6E,CACpF,CAAC;aACL;YACD,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,IAAI;oBACA,YAAY,GAAG,SAAS,CAAC,GAAG,CAAoB,WAAW,CAAC,MAAM,CAAC,CAAC;iBACvE;AAAC,gBAAA,MAAM;;iBAEP;aACJ;AACD,YAAA,OAAO,YAAY,CAAC;SACvB;AACJ,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,MAA4C,CAAC;AACxD"}
|
package/lib/helpers/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{logger}from'./logger/logger.js';export{AbstractFeature,featureCatalog}from'./connector/AbstractConnector.js';export{ScopedContainer}from'./connector/ScopedContainer.js';export{REDUX_PERSIST_KEY}from'./constants/constants.js';export{apolloClientHelper}from'./helpers/apollo-client-test-helper.js';export{StateMachineRegistry,stateMachineRegistry}from'./xstate/StateMachineRegistry.js';export{ClientTypes,ElectronTypes}from'@common-stack/core';//# sourceMappingURL=index.js.map
|
|
1
|
+
export{logger}from'./logger/logger.js';export{AbstractFeature,featureCatalog}from'./connector/AbstractConnector.js';export{ScopedContainer}from'./connector/ScopedContainer.js';export{REDUX_PERSIST_KEY}from'./constants/constants.js';export{apolloClientHelper}from'./helpers/apollo-client-test-helper.js';export{attachDeprecatedLogger}from'./helpers/attachDeprecatedLogger.js';export{StateMachineRegistry,stateMachineRegistry}from'./xstate/StateMachineRegistry.js';export{ClientTypes,ElectronTypes}from'@common-stack/core';//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@common-stack/client-core",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.6.1-alpha.0",
|
|
4
4
|
"description": "common core for higher packages to depend on",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"publishConfig": {
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "1e6e8a053e94e4f5c54d7364d73395127f8b843a",
|
|
38
38
|
"typescript": {
|
|
39
39
|
"definition": "lib/index.d.ts"
|
|
40
40
|
}
|