@omriashke/dynamico-core 0.1.4 → 0.1.6
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 +4 -0
- package/dist/bookPreview.d.ts.map +1 -1
- package/dist/bookPreview.js.map +1 -1
- package/dist/defaultProps.d.ts +4 -0
- package/dist/defaultProps.d.ts.map +1 -0
- package/dist/defaultProps.js +21 -0
- package/dist/defaultProps.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/packageScope.d.ts +6 -0
- package/dist/packageScope.d.ts.map +1 -1
- package/dist/packageScope.js +91 -29
- package/dist/packageScope.js.map +1 -1
- package/package.json +1 -1
- package/src/bookPreview.ts +4 -0
- package/src/defaultProps.ts +22 -0
- package/src/index.ts +1 -0
- package/src/packageScope.ts +108 -28
package/dist/bookPreview.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ import type { PropsSchema } from "./types.js";
|
|
|
2
2
|
export type BookPreviewJson = Record<string, unknown>;
|
|
3
3
|
export interface BookPreviewConfig {
|
|
4
4
|
fixtures?: Record<string, BookPreviewJson>;
|
|
5
|
+
/** Registry components wrapping every preview (outermost last). */
|
|
6
|
+
providers?: string[];
|
|
7
|
+
/** Fallback scope keys when the registry has no cached host scope. */
|
|
8
|
+
scopeKeys?: string[];
|
|
5
9
|
entries?: BookPreviewEntry[];
|
|
6
10
|
/** Legacy alias — normalized to `entries`. */
|
|
7
11
|
stories?: BookPreviewEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookPreview.d.ts","sourceRoot":"","sources":["../src/bookPreview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAC9C;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC1D,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAElF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GACxC,eAAe,CAuBjB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAwBD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,iBAAiB,GAAG,iBAAiB,CAGpF;AAED,2FAA2F;AAC3F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,MAAM,GACpB,kBAAkB,EAAE,CAYtB;AA+ED,sFAAsF;AACtF,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,MAAM,GACpB,2BAA2B,CAgB7B"}
|
|
1
|
+
{"version":3,"file":"bookPreview.d.ts","sourceRoot":"","sources":["../src/bookPreview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAC9C;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC1D,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAElF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GACxC,eAAe,CAuBjB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAwBD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,iBAAiB,GAAG,iBAAiB,CAGpF;AAED,2FAA2F;AAC3F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,MAAM,GACpB,kBAAkB,EAAE,CAYtB;AA+ED,sFAAsF;AACtF,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,MAAM,GACpB,2BAA2B,CAgB7B"}
|
package/dist/bookPreview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookPreview.js","sourceRoot":"","sources":["../src/bookPreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"bookPreview.js","sourceRoot":"","sources":["../src/bookPreview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultProps.d.ts","sourceRoot":"","sources":["../src/defaultProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAY9C,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ7F"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const DEFAULTS = {
|
|
2
|
+
string: () => "",
|
|
3
|
+
number: () => 0,
|
|
4
|
+
boolean: () => false,
|
|
5
|
+
object: () => ({}),
|
|
6
|
+
array: () => [],
|
|
7
|
+
function: () => () => undefined,
|
|
8
|
+
any: () => undefined,
|
|
9
|
+
};
|
|
10
|
+
/** Minimal props bag for automatic push-time render smoke tests. */
|
|
11
|
+
export function generateDefaultProps(schema) {
|
|
12
|
+
if (!schema)
|
|
13
|
+
return {};
|
|
14
|
+
const props = {};
|
|
15
|
+
for (const [key, field] of Object.entries(schema)) {
|
|
16
|
+
const factory = DEFAULTS[field.type] ?? DEFAULTS.any;
|
|
17
|
+
props[key] = factory();
|
|
18
|
+
}
|
|
19
|
+
return props;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=defaultProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultProps.js","sourceRoot":"","sources":["../src/defaultProps.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAkC;IAC9C,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;IAChB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;IACpB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IAClB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;IACf,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS;IAC/B,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;CACrB,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAI,CAAC;QACtD,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { Registry } from "./registry.js";
|
|
|
3
3
|
export { loadModule } from "./loader.js";
|
|
4
4
|
export { createRemoteSource, type RemoteSourceOptions } from "./sources/remote.js";
|
|
5
5
|
export { validateProps, type PropsValidationResult } from "./propsSchema.js";
|
|
6
|
+
export { generateDefaultProps } from "./defaultProps.js";
|
|
6
7
|
export { collectBookPreviewPropSets, normalizeBookPreviewConfig, resolveBookFixtures, resolveBookPropValues, validateBookPreviewsForComponent, type BookPreviewBlock, type BookPreviewConfig, type BookPreviewEntry, type BookPreviewPropSet, type BookPreviewValidationResult, } from "./bookPreview.js";
|
|
7
8
|
export { createRuntime, type RuntimeAPI, type CreateRuntimeOptions, type DynamicoProviderProps, type DynamicComponentProps, } from "./react/createRuntime.js";
|
|
8
9
|
export { createPackageScope, createPackageScopeFromNames, type PackageScopeOptions, } from "./packageScope.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,gCAAgC,EAChC,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,GACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gCAAgC,EAChC,KAAK,0BAA0B,EAC/B,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,gCAAgC,EAChC,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,GACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gCAAgC,EAChC,KAAK,0BAA0B,EAC/B,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { Registry } from "./registry.js";
|
|
|
2
2
|
export { loadModule } from "./loader.js";
|
|
3
3
|
export { createRemoteSource } from "./sources/remote.js";
|
|
4
4
|
export { validateProps } from "./propsSchema.js";
|
|
5
|
+
export { generateDefaultProps } from "./defaultProps.js";
|
|
5
6
|
export { collectBookPreviewPropSets, normalizeBookPreviewConfig, resolveBookFixtures, resolveBookPropValues, validateBookPreviewsForComponent, } from "./bookPreview.js";
|
|
6
7
|
export { createRuntime, } from "./react/createRuntime.js";
|
|
7
8
|
export { createPackageScope, createPackageScopeFromNames, } from "./packageScope.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAA4B,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,aAAa,EAA8B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,gCAAgC,GAMjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,GAKd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAE5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gCAAgC,GAGjC,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAA4B,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,aAAa,EAA8B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,gCAAgC,GAMjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,GAKd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAE5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gCAAgC,GAGjC,MAAM,qBAAqB,CAAC"}
|
package/dist/packageScope.d.ts
CHANGED
|
@@ -4,12 +4,18 @@ export interface PackageScopeOptions {
|
|
|
4
4
|
components: readonly string[];
|
|
5
5
|
/** Synchronous exports merged into the package (Colors, useTheme, theme tokens, …). */
|
|
6
6
|
values?: Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* After a component loads, copy named exports onto the package root.
|
|
9
|
+
* e.g. `{ ThemeProvider: ['useTheme', 'useAppTheme'] }`
|
|
10
|
+
*/
|
|
11
|
+
reexports?: Record<string, readonly string[]>;
|
|
7
12
|
}
|
|
8
13
|
/**
|
|
9
14
|
* Synthetic npm-like scope module backed by the Dynamico registry.
|
|
10
15
|
*
|
|
11
16
|
* - `values` are available synchronously (data + hooks shared with ThemeProvider).
|
|
12
17
|
* - `components` are lazy React wrappers that load/render registry entries.
|
|
18
|
+
* - Subscribes to the source WebSocket so registry pushes hot-swap live in the host.
|
|
13
19
|
*/
|
|
14
20
|
export declare function createPackageScope(source: Source, getScope: () => Scope, options: PackageScopeOptions): Record<string, unknown>;
|
|
15
21
|
export declare function createPackageScopeFromNames(source: Source, getScope: () => Scope, componentNames: readonly string[], values?: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageScope.d.ts","sourceRoot":"","sources":["../src/packageScope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"packageScope.d.ts","sourceRoot":"","sources":["../src/packageScope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CAC/C;AAYD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KAAK,EACrB,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyHzB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KAAK,EACrB,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB"}
|
package/dist/packageScope.js
CHANGED
|
@@ -1,60 +1,122 @@
|
|
|
1
|
+
import { createElement, useSyncExternalStore } from "react";
|
|
1
2
|
import { loadModule } from "./loader.js";
|
|
2
3
|
/**
|
|
3
4
|
* Synthetic npm-like scope module backed by the Dynamico registry.
|
|
4
5
|
*
|
|
5
6
|
* - `values` are available synchronously (data + hooks shared with ThemeProvider).
|
|
6
7
|
* - `components` are lazy React wrappers that load/render registry entries.
|
|
8
|
+
* - Subscribes to the source WebSocket so registry pushes hot-swap live in the host.
|
|
7
9
|
*/
|
|
8
10
|
export function createPackageScope(source, getScope, options) {
|
|
9
|
-
const { components, values = {} } = options;
|
|
11
|
+
const { components, values = {}, reexports = {} } = options;
|
|
12
|
+
const componentSet = new Set(components);
|
|
10
13
|
const modules = new Map();
|
|
11
|
-
const
|
|
14
|
+
const pkg = { ...values, __esModule: true };
|
|
15
|
+
const getState = (name) => {
|
|
12
16
|
let state = modules.get(name);
|
|
13
17
|
if (!state) {
|
|
14
|
-
state = {};
|
|
18
|
+
state = { revision: 0, listeners: new Set() };
|
|
15
19
|
modules.set(name, state);
|
|
16
20
|
}
|
|
17
|
-
|
|
21
|
+
return state;
|
|
22
|
+
};
|
|
23
|
+
const subscribe = (name, listener) => {
|
|
24
|
+
const state = getState(name);
|
|
25
|
+
state.listeners.add(listener);
|
|
26
|
+
return () => {
|
|
27
|
+
state.listeners.delete(listener);
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
const getRevision = (name) => getState(name).revision;
|
|
31
|
+
const notify = (name) => {
|
|
32
|
+
const state = modules.get(name);
|
|
33
|
+
if (state)
|
|
34
|
+
for (const listener of state.listeners)
|
|
35
|
+
listener();
|
|
36
|
+
// A dependency update may change what an already-mounted parent renders.
|
|
37
|
+
for (const [otherName, other] of modules) {
|
|
38
|
+
if (otherName === name)
|
|
39
|
+
continue;
|
|
40
|
+
if (other.listeners.size === 0)
|
|
41
|
+
continue;
|
|
42
|
+
for (const listener of other.listeners)
|
|
43
|
+
listener();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
let makeLazy;
|
|
47
|
+
const requireRelative = (specifier) => {
|
|
48
|
+
const base = specifier
|
|
49
|
+
.replace(/^\.+\//, "")
|
|
50
|
+
.replace(/\.[tj]sx?$/, "")
|
|
51
|
+
.split("/")
|
|
52
|
+
.pop();
|
|
53
|
+
if (!base)
|
|
54
|
+
throw new Error(`dynamico: cannot resolve '${specifier}'`);
|
|
55
|
+
ensureLoaded(base);
|
|
56
|
+
const dep = modules.get(base)?.factory;
|
|
57
|
+
return dep ?? { default: makeLazy(base) };
|
|
58
|
+
};
|
|
59
|
+
const ingest = (name, module) => {
|
|
60
|
+
const state = getState(name);
|
|
61
|
+
if (module.error || !module.code) {
|
|
62
|
+
state.factory = undefined;
|
|
63
|
+
state.revision += 1;
|
|
64
|
+
notify(name);
|
|
18
65
|
return;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
throw new Error(`dynamico: cannot resolve '${rel}'`);
|
|
32
|
-
ensureLoaded(base);
|
|
33
|
-
const dep = modules.get(base)?.factory;
|
|
34
|
-
return dep ?? { default: makeLazy(base) };
|
|
35
|
-
});
|
|
36
|
-
state.factory = factory;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
state.factory = undefined;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const factory = loadModule(module.code, getScope(), requireRelative);
|
|
69
|
+
state.factory = factory;
|
|
70
|
+
state.revision += 1;
|
|
71
|
+
const extra = reexports[name];
|
|
72
|
+
if (extra) {
|
|
73
|
+
for (const key of extra) {
|
|
74
|
+
const exported = factory[key];
|
|
75
|
+
if (exported !== undefined)
|
|
76
|
+
pkg[key] = exported;
|
|
77
|
+
}
|
|
40
78
|
}
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
state.factory = undefined;
|
|
82
|
+
state.revision += 1;
|
|
83
|
+
}
|
|
84
|
+
notify(name);
|
|
85
|
+
};
|
|
86
|
+
const ensureLoaded = (name) => {
|
|
87
|
+
const state = getState(name);
|
|
88
|
+
if (state.factory !== undefined || state.loading)
|
|
89
|
+
return;
|
|
90
|
+
state.loading = source
|
|
91
|
+
.fetch(name)
|
|
92
|
+
.then((module) => {
|
|
93
|
+
ingest(name, module);
|
|
94
|
+
})
|
|
95
|
+
.finally(() => {
|
|
96
|
+
state.loading = undefined;
|
|
41
97
|
});
|
|
42
98
|
};
|
|
43
|
-
|
|
99
|
+
source.subscribe(({ module }) => {
|
|
100
|
+
if (componentSet.has(module.name)) {
|
|
101
|
+
ingest(module.name, module);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
makeLazy = (name) => {
|
|
44
105
|
ensureLoaded(name);
|
|
45
106
|
const Lazy = (props) => {
|
|
46
|
-
const
|
|
107
|
+
const revision = useSyncExternalStore((cb) => subscribe(name, cb), () => getRevision(name), () => getRevision(name));
|
|
108
|
+
void revision;
|
|
109
|
+
const factory = getState(name).factory;
|
|
47
110
|
if (!factory)
|
|
48
111
|
return null;
|
|
49
112
|
const target = factory.default ?? factory[name];
|
|
50
113
|
if (typeof target !== "function")
|
|
51
114
|
return null;
|
|
52
|
-
return target
|
|
115
|
+
return createElement(target, props);
|
|
53
116
|
};
|
|
54
117
|
Object.defineProperty(Lazy, "name", { value: `PackageScope(${name})` });
|
|
55
118
|
return Lazy;
|
|
56
119
|
};
|
|
57
|
-
const pkg = { ...values, __esModule: true };
|
|
58
120
|
for (const name of components) {
|
|
59
121
|
pkg[name] = makeLazy(name);
|
|
60
122
|
}
|
package/dist/packageScope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageScope.js","sourceRoot":"","sources":["../src/packageScope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"packageScope.js","sourceRoot":"","sources":["../src/packageScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAsB,MAAM,OAAO,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwBzC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,QAAqB,EACrB,OAA4B;IAE5B,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,MAAM,GAAG,GAA4B,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAErE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAe,EAAE;QAC7C,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,QAAoB,EAAgB,EAAE;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAEtE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAQ,EAAE;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK;YAAE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;gBAAE,QAAQ,EAAE,CAAC;QAC9D,yEAAyE;QACzE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACzC,IAAI,SAAS,KAAK,IAAI;gBAAE,SAAS;YACjC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;gBAAE,SAAS;YACzC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;gBAAE,QAAQ,EAAE,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,QAAyC,CAAC;IAE9C,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAW,EAAE;QACrD,MAAM,IAAI,GAAG,SAAS;aACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;aACzB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,GAAG,CAAC,CAAC;QACtE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QACvC,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,MAAsB,EAAQ,EAAE;QAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1B,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,eAAe,CAGlE,CAAC;YACF,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,QAAQ,KAAK,SAAS;wBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1B,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO;QACzD,KAAK,CAAC,OAAO,GAAG,MAAM;aACnB,KAAK,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,GAAG,CAAC,IAAY,EAAiB,EAAE;QACzC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,IAAI,GAAkB,CAAC,KAAK,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,oBAAoB,CACnC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,EAC3B,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EACvB,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CACxB,CAAC;YACF,KAAK,QAAQ,CAAC;YACd,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACvC,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,OAAO,MAAM,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO,aAAa,CAAC,MAAgD,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,gBAAgB,IAAI,GAAG,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAc,EACd,QAAqB,EACrB,cAAiC,EACjC,MAAgC;IAEhC,OAAO,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;AACtF,CAAC"}
|
package/package.json
CHANGED
package/src/bookPreview.ts
CHANGED
|
@@ -5,6 +5,10 @@ export type BookPreviewJson = Record<string, unknown>;
|
|
|
5
5
|
|
|
6
6
|
export interface BookPreviewConfig {
|
|
7
7
|
fixtures?: Record<string, BookPreviewJson>;
|
|
8
|
+
/** Registry components wrapping every preview (outermost last). */
|
|
9
|
+
providers?: string[];
|
|
10
|
+
/** Fallback scope keys when the registry has no cached host scope. */
|
|
11
|
+
scopeKeys?: string[];
|
|
8
12
|
entries?: BookPreviewEntry[];
|
|
9
13
|
/** Legacy alias — normalized to `entries`. */
|
|
10
14
|
stories?: BookPreviewEntry[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PropsSchema } from "./types.js";
|
|
2
|
+
|
|
3
|
+
const DEFAULTS: Record<string, () => unknown> = {
|
|
4
|
+
string: () => "",
|
|
5
|
+
number: () => 0,
|
|
6
|
+
boolean: () => false,
|
|
7
|
+
object: () => ({}),
|
|
8
|
+
array: () => [],
|
|
9
|
+
function: () => () => undefined,
|
|
10
|
+
any: () => undefined,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/** Minimal props bag for automatic push-time render smoke tests. */
|
|
14
|
+
export function generateDefaultProps(schema: PropsSchema | undefined): Record<string, unknown> {
|
|
15
|
+
if (!schema) return {};
|
|
16
|
+
const props: Record<string, unknown> = {};
|
|
17
|
+
for (const [key, field] of Object.entries(schema)) {
|
|
18
|
+
const factory = DEFAULTS[field.type] ?? DEFAULTS.any!;
|
|
19
|
+
props[key] = factory();
|
|
20
|
+
}
|
|
21
|
+
return props;
|
|
22
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { Registry } from "./registry.js";
|
|
|
20
20
|
export { loadModule } from "./loader.js";
|
|
21
21
|
export { createRemoteSource, type RemoteSourceOptions } from "./sources/remote.js";
|
|
22
22
|
export { validateProps, type PropsValidationResult } from "./propsSchema.js";
|
|
23
|
+
export { generateDefaultProps } from "./defaultProps.js";
|
|
23
24
|
export {
|
|
24
25
|
collectBookPreviewPropSets,
|
|
25
26
|
normalizeBookPreviewConfig,
|
package/src/packageScope.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createElement, useSyncExternalStore, type ComponentType } from "react";
|
|
2
|
+
import type { CompiledModule, Scope, Source } from "./types.js";
|
|
2
3
|
import { loadModule } from "./loader.js";
|
|
3
4
|
|
|
4
5
|
export interface PackageScopeOptions {
|
|
@@ -6,6 +7,11 @@ export interface PackageScopeOptions {
|
|
|
6
7
|
components: readonly string[];
|
|
7
8
|
/** Synchronous exports merged into the package (Colors, useTheme, theme tokens, …). */
|
|
8
9
|
values?: Record<string, unknown>;
|
|
10
|
+
/**
|
|
11
|
+
* After a component loads, copy named exports onto the package root.
|
|
12
|
+
* e.g. `{ ThemeProvider: ['useTheme', 'useAppTheme'] }`
|
|
13
|
+
*/
|
|
14
|
+
reexports?: Record<string, readonly string[]>;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
type LazyComponent = (props: Record<string, unknown>) => unknown;
|
|
@@ -13,6 +19,9 @@ type LazyComponent = (props: Record<string, unknown>) => unknown;
|
|
|
13
19
|
interface ModuleState {
|
|
14
20
|
factory?: Record<string, unknown>;
|
|
15
21
|
loading?: Promise<void>;
|
|
22
|
+
/** Bumped on every ingest so useSyncExternalStore subscribers re-render. */
|
|
23
|
+
revision: number;
|
|
24
|
+
listeners: Set<() => void>;
|
|
16
25
|
}
|
|
17
26
|
|
|
18
27
|
/**
|
|
@@ -20,58 +29,129 @@ interface ModuleState {
|
|
|
20
29
|
*
|
|
21
30
|
* - `values` are available synchronously (data + hooks shared with ThemeProvider).
|
|
22
31
|
* - `components` are lazy React wrappers that load/render registry entries.
|
|
32
|
+
* - Subscribes to the source WebSocket so registry pushes hot-swap live in the host.
|
|
23
33
|
*/
|
|
24
34
|
export function createPackageScope(
|
|
25
35
|
source: Source,
|
|
26
36
|
getScope: () => Scope,
|
|
27
37
|
options: PackageScopeOptions,
|
|
28
38
|
): Record<string, unknown> {
|
|
29
|
-
const { components, values = {} } = options;
|
|
39
|
+
const { components, values = {}, reexports = {} } = options;
|
|
40
|
+
const componentSet = new Set(components);
|
|
30
41
|
const modules = new Map<string, ModuleState>();
|
|
42
|
+
const pkg: Record<string, unknown> = { ...values, __esModule: true };
|
|
31
43
|
|
|
32
|
-
const
|
|
44
|
+
const getState = (name: string): ModuleState => {
|
|
33
45
|
let state = modules.get(name);
|
|
34
46
|
if (!state) {
|
|
35
|
-
state = {};
|
|
47
|
+
state = { revision: 0, listeners: new Set() };
|
|
36
48
|
modules.set(name, state);
|
|
37
49
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
return state;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const subscribe = (name: string, listener: () => void): (() => void) => {
|
|
54
|
+
const state = getState(name);
|
|
55
|
+
state.listeners.add(listener);
|
|
56
|
+
return () => {
|
|
57
|
+
state.listeners.delete(listener);
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const getRevision = (name: string): number => getState(name).revision;
|
|
62
|
+
|
|
63
|
+
const notify = (name: string): void => {
|
|
64
|
+
const state = modules.get(name);
|
|
65
|
+
if (state) for (const listener of state.listeners) listener();
|
|
66
|
+
// A dependency update may change what an already-mounted parent renders.
|
|
67
|
+
for (const [otherName, other] of modules) {
|
|
68
|
+
if (otherName === name) continue;
|
|
69
|
+
if (other.listeners.size === 0) continue;
|
|
70
|
+
for (const listener of other.listeners) listener();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
let makeLazy: (name: string) => LazyComponent;
|
|
75
|
+
|
|
76
|
+
const requireRelative = (specifier: string): unknown => {
|
|
77
|
+
const base = specifier
|
|
78
|
+
.replace(/^\.+\//, "")
|
|
79
|
+
.replace(/\.[tj]sx?$/, "")
|
|
80
|
+
.split("/")
|
|
81
|
+
.pop();
|
|
82
|
+
if (!base) throw new Error(`dynamico: cannot resolve '${specifier}'`);
|
|
83
|
+
ensureLoaded(base);
|
|
84
|
+
const dep = modules.get(base)?.factory;
|
|
85
|
+
return dep ?? { default: makeLazy(base) };
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const ingest = (name: string, module: CompiledModule): void => {
|
|
89
|
+
const state = getState(name);
|
|
90
|
+
if (module.error || !module.code) {
|
|
91
|
+
state.factory = undefined;
|
|
92
|
+
state.revision += 1;
|
|
93
|
+
notify(name);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const factory = loadModule(module.code, getScope(), requireRelative) as Record<
|
|
98
|
+
string,
|
|
99
|
+
unknown
|
|
100
|
+
>;
|
|
101
|
+
state.factory = factory;
|
|
102
|
+
state.revision += 1;
|
|
103
|
+
const extra = reexports[name];
|
|
104
|
+
if (extra) {
|
|
105
|
+
for (const key of extra) {
|
|
106
|
+
const exported = factory[key];
|
|
107
|
+
if (exported !== undefined) pkg[key] = exported;
|
|
108
|
+
}
|
|
57
109
|
}
|
|
58
|
-
}
|
|
110
|
+
} catch {
|
|
111
|
+
state.factory = undefined;
|
|
112
|
+
state.revision += 1;
|
|
113
|
+
}
|
|
114
|
+
notify(name);
|
|
59
115
|
};
|
|
60
116
|
|
|
61
|
-
const
|
|
117
|
+
const ensureLoaded = (name: string): void => {
|
|
118
|
+
const state = getState(name);
|
|
119
|
+
if (state.factory !== undefined || state.loading) return;
|
|
120
|
+
state.loading = source
|
|
121
|
+
.fetch(name)
|
|
122
|
+
.then((module) => {
|
|
123
|
+
ingest(name, module);
|
|
124
|
+
})
|
|
125
|
+
.finally(() => {
|
|
126
|
+
state.loading = undefined;
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
source.subscribe(({ module }) => {
|
|
131
|
+
if (componentSet.has(module.name)) {
|
|
132
|
+
ingest(module.name, module);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
makeLazy = (name: string): LazyComponent => {
|
|
62
137
|
ensureLoaded(name);
|
|
63
138
|
const Lazy: LazyComponent = (props) => {
|
|
64
|
-
const
|
|
139
|
+
const revision = useSyncExternalStore(
|
|
140
|
+
(cb) => subscribe(name, cb),
|
|
141
|
+
() => getRevision(name),
|
|
142
|
+
() => getRevision(name),
|
|
143
|
+
);
|
|
144
|
+
void revision;
|
|
145
|
+
const factory = getState(name).factory;
|
|
65
146
|
if (!factory) return null;
|
|
66
147
|
const target = factory.default ?? factory[name];
|
|
67
148
|
if (typeof target !== "function") return null;
|
|
68
|
-
return (target as
|
|
149
|
+
return createElement(target as ComponentType<Record<string, unknown>>, props);
|
|
69
150
|
};
|
|
70
151
|
Object.defineProperty(Lazy, "name", { value: `PackageScope(${name})` });
|
|
71
152
|
return Lazy;
|
|
72
153
|
};
|
|
73
154
|
|
|
74
|
-
const pkg: Record<string, unknown> = { ...values, __esModule: true };
|
|
75
155
|
for (const name of components) {
|
|
76
156
|
pkg[name] = makeLazy(name);
|
|
77
157
|
}
|