@omriashke/dynamico-core 0.1.9 → 0.1.12
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/bookPreview.d.ts +3 -0
- package/dist/bookPreview.d.ts.map +1 -1
- package/dist/bookPreview.js +5 -0
- package/dist/bookPreview.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/esbuildFlatten.d.ts +15 -0
- package/dist/esbuildFlatten.d.ts.map +1 -0
- package/dist/esbuildFlatten.js +39 -0
- package/dist/esbuildFlatten.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +2 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +51 -14
- package/dist/loader.js.map +1 -1
- package/dist/node/bookConfig.d.ts +13 -0
- package/dist/node/bookConfig.d.ts.map +1 -0
- package/dist/node/bookConfig.js +54 -0
- package/dist/node/bookConfig.js.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +2 -0
- package/dist/node/index.js.map +1 -0
- package/dist/packageScope.d.ts.map +1 -1
- package/dist/packageScope.js +15 -7
- package/dist/packageScope.js.map +1 -1
- package/dist/propsSchema.d.ts +2 -0
- package/dist/propsSchema.d.ts.map +1 -1
- package/dist/propsSchema.js +36 -0
- package/dist/propsSchema.js.map +1 -1
- package/dist/react/createRuntime.d.ts.map +1 -1
- package/dist/react/createRuntime.js +3 -21
- package/dist/react/createRuntime.js.map +1 -1
- package/dist/react/useRegistryModule.d.ts +4 -0
- package/dist/react/useRegistryModule.d.ts.map +1 -0
- package/dist/react/useRegistryModule.js +8 -0
- package/dist/react/useRegistryModule.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +52 -5
- package/dist/registry.js.map +1 -1
- package/dist/registryModule.d.ts.map +1 -1
- package/dist/registryModule.js +13 -2
- package/dist/registryModule.js.map +1 -1
- package/dist/relativeRequires.d.ts +12 -0
- package/dist/relativeRequires.d.ts.map +1 -1
- package/dist/relativeRequires.js +33 -0
- package/dist/relativeRequires.js.map +1 -1
- package/dist/sources/remote.d.ts +14 -8
- package/dist/sources/remote.d.ts.map +1 -1
- package/dist/sources/remote.js +73 -19
- package/dist/sources/remote.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -8
- package/src/bookPreview.ts +7 -0
- package/src/constants.ts +9 -0
- package/src/esbuildFlatten.ts +47 -0
- package/src/index.ts +22 -2
- package/src/loader.ts +42 -14
- package/src/node/bookConfig.ts +63 -0
- package/src/node/index.ts +9 -0
- package/src/packageScope.ts +15 -7
- package/src/propsSchema.ts +35 -0
- package/src/react/createRuntime.tsx +3 -16
- package/src/react/useRegistryModule.ts +15 -0
- package/src/registry.ts +58 -5
- package/src/registryModule.ts +12 -3
- package/src/relativeRequires.ts +48 -0
- package/src/sources/remote.ts +79 -26
- package/src/types.ts +6 -0
- package/LICENSE +0 -184
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Registry } from "../registry.js";
|
|
4
|
+
import { resolveModuleDefault } from "../loader.js";
|
|
4
5
|
import { validateProps } from "../propsSchema.js";
|
|
5
6
|
export function createRuntime(defaultScope, options = {}) {
|
|
6
7
|
const Ctx = React.createContext(null);
|
|
@@ -98,27 +99,8 @@ export function createRuntime(defaultScope, options = {}) {
|
|
|
98
99
|
return { DynamicoProvider, DynamicComponent, useDynamico, useScope };
|
|
99
100
|
}
|
|
100
101
|
function pickDefault(factory) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (!factory || typeof factory !== "object")
|
|
104
|
-
return undefined;
|
|
105
|
-
if ("default" in factory) {
|
|
106
|
-
const desc = Object.getOwnPropertyDescriptor(factory, "default");
|
|
107
|
-
if (desc?.get && !desc.set) {
|
|
108
|
-
try {
|
|
109
|
-
const fromGetter = desc.get.call(factory);
|
|
110
|
-
if (typeof fromGetter === "function")
|
|
111
|
-
return fromGetter;
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
/* fall through */
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
const d = factory.default;
|
|
118
|
-
if (typeof d === "function")
|
|
119
|
-
return d;
|
|
120
|
-
}
|
|
121
|
-
return undefined;
|
|
102
|
+
const d = resolveModuleDefault(factory);
|
|
103
|
+
return typeof d === "function" ? d : undefined;
|
|
122
104
|
}
|
|
123
105
|
function defaultErrorView(error) {
|
|
124
106
|
// Renderer-agnostic: plain text node so it works on both DOM and RN.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRuntime.js","sourceRoot":"","sources":["../../src/react/createRuntime.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"createRuntime.js","sourceRoot":"","sources":["../../src/react/createRuntime.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RegistryModuleSubscription } from "../registryModule.js";
|
|
2
|
+
/** React hook factory — re-renders when a registry data module (e.g. Colors) is pushed. */
|
|
3
|
+
export declare function createUseRegistryModule<T extends Record<string, unknown>>(subscription: RegistryModuleSubscription<T>): () => T;
|
|
4
|
+
//# sourceMappingURL=useRegistryModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRegistryModule.d.ts","sourceRoot":"","sources":["../../src/react/useRegistryModule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvE,YAAY,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAC1C,MAAM,CAAC,CAQT"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
/** React hook factory — re-renders when a registry data module (e.g. Colors) is pushed. */
|
|
3
|
+
export function createUseRegistryModule(subscription) {
|
|
4
|
+
return function useRegistryModule() {
|
|
5
|
+
return useSyncExternalStore(subscription.subscribe, subscription.getSnapshot, subscription.getSnapshot);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=useRegistryModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRegistryModule.js","sourceRoot":"","sources":["../../src/react/useRegistryModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAG7C,2FAA2F;AAC3F,MAAM,UAAU,uBAAuB,CACrC,YAA2C;IAE3C,OAAO,SAAS,iBAAiB;QAC/B,OAAO,oBAAoB,CACzB,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,WAAW,CACzB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -14,7 +14,12 @@ export declare class Registry {
|
|
|
14
14
|
private listeners;
|
|
15
15
|
private anyListeners;
|
|
16
16
|
private inflight;
|
|
17
|
+
/** WS push cache — modules are ingested only when ensure() or a subscriber asks. */
|
|
18
|
+
private moduleCache;
|
|
19
|
+
private watchReleases;
|
|
17
20
|
constructor(source: Source, scope: Scope);
|
|
21
|
+
/** Re-ingest a WS push when the component is already loaded or has active subscribers. */
|
|
22
|
+
private shouldIngestOnPush;
|
|
18
23
|
/** Replace or extend the current scope (rare; typically set once). */
|
|
19
24
|
setScope(scope: Scope): void;
|
|
20
25
|
/**
|
|
@@ -51,6 +56,14 @@ export declare class Registry {
|
|
|
51
56
|
/**
|
|
52
57
|
* Take a CompiledModule from the source, evaluate it (or record a compile
|
|
53
58
|
* error), update the entry, and notify listeners.
|
|
59
|
+
*
|
|
60
|
+
* Same-version deduplication: if the current entry already carries this
|
|
61
|
+
* exact version (and has no error), skip re-evaluation entirely. This is the
|
|
62
|
+
* primary guard against the WebSocket connect-replay pattern where the server
|
|
63
|
+
* immediately pushes the current module for every watched component on every
|
|
64
|
+
* (re)connect — without this, each push produces a brand-new JS function
|
|
65
|
+
* object and React unmounts+remounts the entire component tree even though
|
|
66
|
+
* nothing changed, causing visible flicker and lost interaction state.
|
|
54
67
|
*/
|
|
55
68
|
private ingestAsync;
|
|
56
69
|
private notify;
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACb,gBAAgB,EAChB,KAAK,EACL,MAAM,EAEP,MAAM,YAAY,CAAC;AAIpB;;;;;;;GAOG;AACH,qBAAa,QAAQ;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACb,gBAAgB,EAChB,KAAK,EACL,MAAM,EAEP,MAAM,YAAY,CAAC;AAIpB;;;;;;;GAOG;AACH,qBAAa,QAAQ;IAUjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,KAAK;IAVf,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAA6C;IAC7D,oFAAoF;IACpF,OAAO,CAAC,WAAW,CAA0D;IAC7E,OAAO,CAAC,aAAa,CAAiC;gBAGnC,MAAM,EAAE,MAAM,EACvB,KAAK,EAAE,KAAK;IAiBtB,0FAA0F;IAC1F,OAAO,CAAC,kBAAkB;IAQ1B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5B;;;;OAIG;IACH,QAAQ,IAAI,KAAK;IAIjB,gDAAgD;IAChD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI7C;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAelD,qDAAqD;IACrD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IA0B/D,kEAAkE;IAClE,YAAY,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAOpD;;;;;;;;;OASG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAezC,OAAO,CAAC,WAAW,CAA8C;IAEjE,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAoCrB;;;;;;;;;;;OAWG;YACW,WAAW;IA8DzB,OAAO,CAAC,MAAM;CAoBf"}
|
package/dist/registry.js
CHANGED
|
@@ -16,11 +16,30 @@ export class Registry {
|
|
|
16
16
|
this.listeners = new Map();
|
|
17
17
|
this.anyListeners = new Set();
|
|
18
18
|
this.inflight = new Map();
|
|
19
|
+
/** WS push cache — modules are ingested only when ensure() or a subscriber asks. */
|
|
20
|
+
this.moduleCache = new Map();
|
|
21
|
+
this.watchReleases = new Map();
|
|
19
22
|
this.lazyProxies = new Map();
|
|
20
23
|
this.source.subscribe(({ module }) => {
|
|
21
|
-
|
|
24
|
+
if (module.removed) {
|
|
25
|
+
this.moduleCache.delete(module.name);
|
|
26
|
+
if (this.entries.has(module.name) || (this.listeners.get(module.name)?.size ?? 0) > 0) {
|
|
27
|
+
void this.ingestAsync(module.name, module);
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.moduleCache.set(module.name, module);
|
|
32
|
+
if (this.shouldIngestOnPush(module.name)) {
|
|
33
|
+
void this.ingestAsync(module.name, module);
|
|
34
|
+
}
|
|
22
35
|
});
|
|
23
36
|
}
|
|
37
|
+
/** Re-ingest a WS push when the component is already loaded or has active subscribers. */
|
|
38
|
+
shouldIngestOnPush(name) {
|
|
39
|
+
return (this.entries.has(name) ||
|
|
40
|
+
(this.listeners.get(name)?.size ?? 0) > 0 ||
|
|
41
|
+
this.inflight.has(name));
|
|
42
|
+
}
|
|
24
43
|
/** Replace or extend the current scope (rare; typically set once). */
|
|
25
44
|
setScope(scope) {
|
|
26
45
|
this.scope = scope;
|
|
@@ -48,8 +67,8 @@ export class Registry {
|
|
|
48
67
|
const pending = this.inflight.get(name);
|
|
49
68
|
if (pending)
|
|
50
69
|
return pending;
|
|
51
|
-
const
|
|
52
|
-
|
|
70
|
+
const cached = this.moduleCache.get(name);
|
|
71
|
+
const p = (cached ? Promise.resolve(cached) : this.source.fetch(name))
|
|
53
72
|
.then((module) => this.ingestAsync(name, module))
|
|
54
73
|
.finally(() => {
|
|
55
74
|
this.inflight.delete(name);
|
|
@@ -64,11 +83,23 @@ export class Registry {
|
|
|
64
83
|
set = new Set();
|
|
65
84
|
this.listeners.set(name, set);
|
|
66
85
|
}
|
|
86
|
+
const wasEmpty = set.size === 0;
|
|
67
87
|
set.add(listener);
|
|
88
|
+
if (wasEmpty && this.source.watch) {
|
|
89
|
+
this.watchReleases.set(name, this.source.watch(name));
|
|
90
|
+
}
|
|
91
|
+
const cached = this.moduleCache.get(name);
|
|
92
|
+
if (cached && !this.entries.has(name) && !this.inflight.has(name)) {
|
|
93
|
+
void this.ingestAsync(name, cached);
|
|
94
|
+
}
|
|
68
95
|
return () => {
|
|
69
96
|
set.delete(listener);
|
|
70
|
-
if (set.size === 0)
|
|
97
|
+
if (set.size === 0) {
|
|
71
98
|
this.listeners.delete(name);
|
|
99
|
+
const release = this.watchReleases.get(name);
|
|
100
|
+
release?.();
|
|
101
|
+
this.watchReleases.delete(name);
|
|
102
|
+
}
|
|
72
103
|
};
|
|
73
104
|
}
|
|
74
105
|
/** Subscribe to all changes (used internally / for debugging). */
|
|
@@ -136,8 +167,10 @@ export class Registry {
|
|
|
136
167
|
if (typeof prop !== "string")
|
|
137
168
|
return undefined;
|
|
138
169
|
const resolved = registry.resolveExport(name, prop);
|
|
139
|
-
if (resolved !== undefined)
|
|
170
|
+
if (resolved !== undefined) {
|
|
171
|
+
delete target[prop];
|
|
140
172
|
return resolved;
|
|
173
|
+
}
|
|
141
174
|
if (prop in target)
|
|
142
175
|
return target[prop];
|
|
143
176
|
const c = make(prop);
|
|
@@ -152,8 +185,22 @@ export class Registry {
|
|
|
152
185
|
/**
|
|
153
186
|
* Take a CompiledModule from the source, evaluate it (or record a compile
|
|
154
187
|
* error), update the entry, and notify listeners.
|
|
188
|
+
*
|
|
189
|
+
* Same-version deduplication: if the current entry already carries this
|
|
190
|
+
* exact version (and has no error), skip re-evaluation entirely. This is the
|
|
191
|
+
* primary guard against the WebSocket connect-replay pattern where the server
|
|
192
|
+
* immediately pushes the current module for every watched component on every
|
|
193
|
+
* (re)connect — without this, each push produces a brand-new JS function
|
|
194
|
+
* object and React unmounts+remounts the entire component tree even though
|
|
195
|
+
* nothing changed, causing visible flicker and lost interaction state.
|
|
155
196
|
*/
|
|
156
197
|
async ingestAsync(name, module) {
|
|
198
|
+
if (!module.removed && !module.error) {
|
|
199
|
+
const current = this.entries.get(name);
|
|
200
|
+
if (current && !current.error && current.version === module.version) {
|
|
201
|
+
return current;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
157
204
|
if (module.removed) {
|
|
158
205
|
this.entries.delete(name);
|
|
159
206
|
this.lazyProxies.delete(name);
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,OAAO,QAAQ;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registryModule.d.ts","sourceRoot":"","sources":["../src/registryModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,CAAC;IACrB,iEAAiE;IACjE,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAsBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChF,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KAAK,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GACV,0BAA0B,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"registryModule.d.ts","sourceRoot":"","sources":["../src/registryModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,CAAC;IACrB,iEAAiE;IACjE,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAsBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChF,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KAAK,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GACV,0BAA0B,CAAC,CAAC,CAAC,CA+D/B"}
|
package/dist/registryModule.js
CHANGED
|
@@ -25,6 +25,7 @@ function mergePalette(defaults, next) {
|
|
|
25
25
|
export function createRegistryModuleSubscription(source, getScope, name, defaults) {
|
|
26
26
|
let snapshot = { ...defaults };
|
|
27
27
|
const listeners = new Set();
|
|
28
|
+
let watchRelease;
|
|
28
29
|
const notify = () => {
|
|
29
30
|
for (const listener of listeners)
|
|
30
31
|
listener();
|
|
@@ -67,11 +68,21 @@ export function createRegistryModuleSubscription(source, getScope, name, default
|
|
|
67
68
|
void reload();
|
|
68
69
|
}
|
|
69
70
|
});
|
|
70
|
-
void reload();
|
|
71
71
|
return {
|
|
72
72
|
subscribe(listener) {
|
|
73
73
|
listeners.add(listener);
|
|
74
|
-
|
|
74
|
+
if (listeners.size === 1) {
|
|
75
|
+
if (source.watch)
|
|
76
|
+
watchRelease = source.watch(name);
|
|
77
|
+
void reload();
|
|
78
|
+
}
|
|
79
|
+
return () => {
|
|
80
|
+
listeners.delete(listener);
|
|
81
|
+
if (listeners.size === 0) {
|
|
82
|
+
watchRelease?.();
|
|
83
|
+
watchRelease = undefined;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
75
86
|
},
|
|
76
87
|
getSnapshot: () => snapshot,
|
|
77
88
|
proxy,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registryModule.js","sourceRoot":"","sources":["../src/registryModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYzC,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAgC;IACvE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,GAA8B,CAAC;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAgC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAoC,QAAW,EAAE,IAA6B;IACjG,MAAM,GAAG,GAAG,EAAE,GAAG,QAAQ,EAA6B,CAAC;IACvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,GAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAc,EACd,QAAqB,EACrB,IAAY,EACZ,QAAW;IAEX,IAAI,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAO,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"registryModule.js","sourceRoot":"","sources":["../src/registryModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
|
+
import type { Diagnostic } from "./types.js";
|
|
1
2
|
/** Map a relative require specifier to the flat registry component name (basename). */
|
|
2
3
|
export declare function resolveRelativeComponentName(specifier: string): string | null;
|
|
3
4
|
/** Collect relative require() specifiers from compiled CommonJS output. */
|
|
4
5
|
export declare function extractRelativeRequires(code: string): string[];
|
|
5
6
|
/** Registry component names referenced by relative imports in compiled code. */
|
|
6
7
|
export declare function collectRelativeComponentDeps(code: string, componentName?: string): string[];
|
|
8
|
+
export interface RelativeImportValidation {
|
|
9
|
+
ok: boolean;
|
|
10
|
+
message?: string;
|
|
11
|
+
diagnostics?: Diagnostic[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Reject relative imports that resolve to registry names not in the manifest.
|
|
15
|
+
* Local utility files should be bundled at compile time; any remaining relative
|
|
16
|
+
* require() must target another registered component.
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateRelativeImports(code: string, registered: ReadonlySet<string>, componentName?: string): RelativeImportValidation;
|
|
7
19
|
//# sourceMappingURL=relativeRequires.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relativeRequires.d.ts","sourceRoot":"","sources":["../src/relativeRequires.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAa9D;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ3F"}
|
|
1
|
+
{"version":3,"file":"relativeRequires.d.ts","sourceRoot":"","sources":["../src/relativeRequires.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,uFAAuF;AACvF,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAa9D;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ3F;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,wBAAwB,CA6B1B"}
|
package/dist/relativeRequires.js
CHANGED
|
@@ -37,4 +37,37 @@ export function collectRelativeComponentDeps(code, componentName) {
|
|
|
37
37
|
}
|
|
38
38
|
return [...deps];
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Reject relative imports that resolve to registry names not in the manifest.
|
|
42
|
+
* Local utility files should be bundled at compile time; any remaining relative
|
|
43
|
+
* require() must target another registered component.
|
|
44
|
+
*/
|
|
45
|
+
export function validateRelativeImports(code, registered, componentName) {
|
|
46
|
+
const unresolved = [];
|
|
47
|
+
for (const specifier of extractRelativeRequires(code)) {
|
|
48
|
+
const base = resolveRelativeComponentName(specifier);
|
|
49
|
+
if (!base)
|
|
50
|
+
continue;
|
|
51
|
+
if (base === componentName)
|
|
52
|
+
continue;
|
|
53
|
+
if (!registered.has(base))
|
|
54
|
+
unresolved.push(specifier);
|
|
55
|
+
}
|
|
56
|
+
if (unresolved.length === 0)
|
|
57
|
+
return { ok: true };
|
|
58
|
+
const lines = unresolved.map((spec) => ` ${spec} → registry component '${resolveRelativeComponentName(spec)}' is not registered`);
|
|
59
|
+
const message = `relative import(s) must target a registered component or a local file bundled into this module:\n` +
|
|
60
|
+
`${lines.join("\n")}\n` +
|
|
61
|
+
`Push the dependency as its own component, move helpers into this file, ` +
|
|
62
|
+
`import from host scope (e.g. @newscast/utils-app-ui), or colocate as ./sibling.ts (auto-bundled).`;
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
message,
|
|
66
|
+
diagnostics: unresolved.map((spec) => ({
|
|
67
|
+
severity: "error",
|
|
68
|
+
message: `unregistered relative import '${spec}'`,
|
|
69
|
+
code: "RELATIVE_IMPORT",
|
|
70
|
+
})),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
40
73
|
//# sourceMappingURL=relativeRequires.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relativeRequires.js","sourceRoot":"","sources":["../src/relativeRequires.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relativeRequires.js","sourceRoot":"","sources":["../src/relativeRequires.ts"],"names":[],"mappings":"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"}
|
package/dist/sources/remote.d.ts
CHANGED
|
@@ -13,21 +13,27 @@ export interface RemoteSourceOptions {
|
|
|
13
13
|
/**
|
|
14
14
|
* Headers to send on every request. Called on each HTTP fetch and on each
|
|
15
15
|
* WebSocket reconnect, so the function can return a freshly-rotated token.
|
|
16
|
-
*
|
|
17
|
-
* - HTTP: merged into the `Authorization: ...` / `x-api-key: ...` request headers.
|
|
18
|
-
* - WebSocket: passed as `new WebSocket(url, undefined, { headers })`. This
|
|
19
|
-
* works on React Native (which extends the standard constructor); browsers
|
|
20
|
-
* silently ignore it because the spec doesn't allow custom WS handshake
|
|
21
|
-
* headers. For browsers behind authenticated reverse proxies, use a
|
|
22
|
-
* query-string token in `wsUrl` or front the registry with cookie auth.
|
|
23
16
|
*/
|
|
24
17
|
headers?: () => Record<string, string>;
|
|
18
|
+
/**
|
|
19
|
+
* Enable WebSocket live-reload. When the server pushes a module update the
|
|
20
|
+
* client re-evaluates it and re-renders the component.
|
|
21
|
+
*
|
|
22
|
+
* Same-version pushes (e.g. on reconnect the server replays the current
|
|
23
|
+
* module) are deduplicated in the registry and are no-ops — no re-eval, no
|
|
24
|
+
* new function identity, no remount. Only a genuinely new version triggers
|
|
25
|
+
* a re-render.
|
|
26
|
+
*
|
|
27
|
+
* @default true
|
|
28
|
+
*/
|
|
29
|
+
webSocket?: boolean;
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
27
32
|
* Talks to @omriashke/dynamico-registry (or any compatible server).
|
|
28
33
|
*
|
|
29
34
|
* GET {url}/component/:name -> CompiledModule (initial fetch)
|
|
30
|
-
* WS {wsUrl}/subscribe -> stream
|
|
35
|
+
* WS {wsUrl}/subscribe -> filtered push stream; client sends
|
|
36
|
+
* `{ op: "watch", names: [...] }`
|
|
31
37
|
*/
|
|
32
38
|
export declare function createRemoteSource(options: RemoteSourceOptions): Source;
|
|
33
39
|
//# sourceMappingURL=remote.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/sources/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,MAAM,EAAgB,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,kGAAkG;IAClG,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/sources/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,MAAM,EAAgB,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,kGAAkG;IAClG,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAsLvE"}
|
package/dist/sources/remote.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Talks to @omriashke/dynamico-registry (or any compatible server).
|
|
3
3
|
*
|
|
4
4
|
* GET {url}/component/:name -> CompiledModule (initial fetch)
|
|
5
|
-
* WS {wsUrl}/subscribe -> stream
|
|
5
|
+
* WS {wsUrl}/subscribe -> filtered push stream; client sends
|
|
6
|
+
* `{ op: "watch", names: [...] }`
|
|
6
7
|
*/
|
|
7
8
|
export function createRemoteSource(options) {
|
|
8
9
|
const fetchImpl = options.fetch ??
|
|
@@ -20,26 +21,51 @@ export function createRemoteSource(options) {
|
|
|
20
21
|
const httpUrl = options.url.replace(/\/$/, "");
|
|
21
22
|
const wsUrl = options.wsUrl ?? httpUrl.replace(/^http/, "ws") + "/subscribe";
|
|
22
23
|
const listeners = new Set();
|
|
24
|
+
const watchedNames = new Set();
|
|
25
|
+
const watchRefCounts = new Map();
|
|
23
26
|
let socket = null;
|
|
24
27
|
let disposed = false;
|
|
28
|
+
let pendingWatchSync = false;
|
|
25
29
|
const reconnectMs = options.reconnectMs ?? 1000;
|
|
30
|
+
const useWebSocket = options.webSocket !== false;
|
|
31
|
+
const WS_OPEN = WSCtor.OPEN ?? 1;
|
|
32
|
+
const WS_CONNECTING = WSCtor.CONNECTING ?? 0;
|
|
33
|
+
function pushWatchSet() {
|
|
34
|
+
if (!useWebSocket || watchedNames.size === 0)
|
|
35
|
+
return;
|
|
36
|
+
if (!socket || socket.readyState !== WS_OPEN) {
|
|
37
|
+
pendingWatchSync = true;
|
|
38
|
+
connect();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
pendingWatchSync = false;
|
|
42
|
+
try {
|
|
43
|
+
socket.send(JSON.stringify({ op: "watch", names: [...watchedNames] }));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
/* ignore */
|
|
47
|
+
}
|
|
48
|
+
}
|
|
26
49
|
function connect() {
|
|
27
|
-
if (disposed)
|
|
50
|
+
if (disposed || !useWebSocket || watchedNames.size === 0)
|
|
28
51
|
return;
|
|
52
|
+
if (socket && (socket.readyState === WS_OPEN || socket.readyState === WS_CONNECTING)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
29
55
|
try {
|
|
30
56
|
const hdrs = options.headers?.();
|
|
31
|
-
// RN's WebSocket constructor accepts a third {headers} arg that lets us
|
|
32
|
-
// attach Bearer / x-api-key tokens to the upgrade request. The standard
|
|
33
|
-
// browser WebSocket ignores extra constructor args, so this is a no-op
|
|
34
|
-
// there (use cookies / a query-string token instead).
|
|
35
57
|
socket = hdrs
|
|
36
58
|
? new WSCtor(wsUrl, undefined, { headers: hdrs })
|
|
37
59
|
: new WSCtor(wsUrl);
|
|
38
60
|
}
|
|
39
|
-
catch
|
|
61
|
+
catch {
|
|
40
62
|
scheduleReconnect();
|
|
41
63
|
return;
|
|
42
64
|
}
|
|
65
|
+
socket.onopen = () => {
|
|
66
|
+
if (pendingWatchSync || watchedNames.size > 0)
|
|
67
|
+
pushWatchSet();
|
|
68
|
+
};
|
|
43
69
|
socket.onmessage = (ev) => {
|
|
44
70
|
try {
|
|
45
71
|
const data = typeof ev.data === "string"
|
|
@@ -69,11 +95,44 @@ export function createRemoteSource(options) {
|
|
|
69
95
|
};
|
|
70
96
|
}
|
|
71
97
|
function scheduleReconnect() {
|
|
72
|
-
if (disposed)
|
|
98
|
+
if (disposed || !useWebSocket || watchedNames.size === 0)
|
|
73
99
|
return;
|
|
74
100
|
setTimeout(connect, reconnectMs);
|
|
75
101
|
}
|
|
76
|
-
|
|
102
|
+
function watch(name) {
|
|
103
|
+
if (!useWebSocket)
|
|
104
|
+
return () => undefined;
|
|
105
|
+
const next = (watchRefCounts.get(name) ?? 0) + 1;
|
|
106
|
+
watchRefCounts.set(name, next);
|
|
107
|
+
if (next === 1) {
|
|
108
|
+
watchedNames.add(name);
|
|
109
|
+
pushWatchSet();
|
|
110
|
+
}
|
|
111
|
+
let released = false;
|
|
112
|
+
return () => {
|
|
113
|
+
if (released)
|
|
114
|
+
return;
|
|
115
|
+
released = true;
|
|
116
|
+
const count = (watchRefCounts.get(name) ?? 1) - 1;
|
|
117
|
+
if (count <= 0) {
|
|
118
|
+
watchRefCounts.delete(name);
|
|
119
|
+
watchedNames.delete(name);
|
|
120
|
+
pushWatchSet();
|
|
121
|
+
if (watchedNames.size === 0) {
|
|
122
|
+
try {
|
|
123
|
+
socket?.close();
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
/* noop */
|
|
127
|
+
}
|
|
128
|
+
socket = null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
watchRefCounts.set(name, count);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
77
136
|
return {
|
|
78
137
|
async fetch(name) {
|
|
79
138
|
const init = options.headers
|
|
@@ -98,15 +157,7 @@ export function createRemoteSource(options) {
|
|
|
98
157
|
listeners.delete(listener);
|
|
99
158
|
};
|
|
100
159
|
},
|
|
101
|
-
|
|
102
|
-
* Tell the registry what bare specifiers the host's scope exposes. The
|
|
103
|
-
* registry uses this to validate that every component's imports resolve
|
|
104
|
-
* against something the host actually provides — so a typo or a forgotten
|
|
105
|
-
* scope entry is caught at push time, not at navigation time.
|
|
106
|
-
*
|
|
107
|
-
* Best-effort: failures (network, 5xx, server doesn't support /scope) are
|
|
108
|
-
* silently swallowed; they don't block the app from running.
|
|
109
|
-
*/
|
|
160
|
+
watch,
|
|
110
161
|
async reportScope(keys, reportedBy) {
|
|
111
162
|
try {
|
|
112
163
|
const baseHeaders = options.headers?.() ?? {};
|
|
@@ -117,17 +168,20 @@ export function createRemoteSource(options) {
|
|
|
117
168
|
});
|
|
118
169
|
}
|
|
119
170
|
catch {
|
|
120
|
-
/* best-effort
|
|
171
|
+
/* best-effort */
|
|
121
172
|
}
|
|
122
173
|
},
|
|
123
174
|
dispose() {
|
|
124
175
|
disposed = true;
|
|
176
|
+
watchedNames.clear();
|
|
177
|
+
watchRefCounts.clear();
|
|
125
178
|
try {
|
|
126
179
|
socket?.close();
|
|
127
180
|
}
|
|
128
181
|
catch {
|
|
129
182
|
/* noop */
|
|
130
183
|
}
|
|
184
|
+
socket = null;
|
|
131
185
|
},
|
|
132
186
|
};
|
|
133
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/sources/remote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/sources/remote.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -79,6 +79,12 @@ export interface Source {
|
|
|
79
79
|
fetch(name: string): Promise<CompiledModule>;
|
|
80
80
|
/** Subscribe to updates for any component. Returns unsubscribe fn. */
|
|
81
81
|
subscribe(listener: (update: SourceUpdate) => void): () => void;
|
|
82
|
+
/**
|
|
83
|
+
* Subscribe to live WebSocket updates for a component. Ref-counted; the
|
|
84
|
+
* socket connects lazily on the first watch and only receives pushes for
|
|
85
|
+
* watched names. Returns a release function.
|
|
86
|
+
*/
|
|
87
|
+
watch?(name: string): () => void;
|
|
82
88
|
/** Optional disposal hook. */
|
|
83
89
|
dispose?(): void;
|
|
84
90
|
/**
|