@cadenza.io/service 2.18.3 → 2.19.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.
Files changed (50) hide show
  1. package/README.md +258 -0
  2. package/dist/Cadenza-DCMs7q97.d.mts +1666 -0
  3. package/dist/Cadenza-DCMs7q97.d.ts +1666 -0
  4. package/dist/browser/chunk-4XOTT2KM.mjs +31 -0
  5. package/dist/browser/chunk-4XOTT2KM.mjs.map +1 -0
  6. package/dist/browser/index.js +12256 -4810
  7. package/dist/browser/index.js.map +1 -1
  8. package/dist/browser/index.mjs +14687 -7257
  9. package/dist/browser/index.mjs.map +1 -1
  10. package/dist/browser/nuxt/index.js +166 -0
  11. package/dist/browser/nuxt/index.js.map +1 -0
  12. package/dist/browser/nuxt/index.mjs +121 -0
  13. package/dist/browser/nuxt/index.mjs.map +1 -0
  14. package/dist/browser/react/index.js +179 -0
  15. package/dist/browser/react/index.js.map +1 -0
  16. package/dist/browser/react/index.mjs +140 -0
  17. package/dist/browser/react/index.mjs.map +1 -0
  18. package/dist/browser/vue/index.js +178 -0
  19. package/dist/browser/vue/index.js.map +1 -0
  20. package/dist/browser/vue/index.mjs +140 -0
  21. package/dist/browser/vue/index.mjs.map +1 -0
  22. package/dist/chunk-DBCS4XXY.mjs +31 -0
  23. package/dist/chunk-DBCS4XXY.mjs.map +1 -0
  24. package/dist/index.d.mts +244 -22953
  25. package/dist/index.d.ts +244 -22953
  26. package/dist/index.js +19425 -10960
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +19308 -10894
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/nuxt/index.d.mts +42 -0
  31. package/dist/nuxt/index.d.ts +42 -0
  32. package/dist/nuxt/index.js +173 -0
  33. package/dist/nuxt/index.js.map +1 -0
  34. package/dist/nuxt/index.mjs +121 -0
  35. package/dist/nuxt/index.mjs.map +1 -0
  36. package/dist/react/index.d.mts +52 -0
  37. package/dist/react/index.d.ts +52 -0
  38. package/dist/react/index.js +188 -0
  39. package/dist/react/index.js.map +1 -0
  40. package/dist/react/index.mjs +140 -0
  41. package/dist/react/index.mjs.map +1 -0
  42. package/dist/runtimeProjectionState-CitON2P3.d.mts +6 -0
  43. package/dist/runtimeProjectionState-CitON2P3.d.ts +6 -0
  44. package/dist/vue/index.d.mts +48 -0
  45. package/dist/vue/index.d.ts +48 -0
  46. package/dist/vue/index.js +187 -0
  47. package/dist/vue/index.js.map +1 -0
  48. package/dist/vue/index.mjs +140 -0
  49. package/dist/vue/index.mjs.map +1 -0
  50. package/package.json +62 -6
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/nuxt/index.ts
21
+ var nuxt_exports = {};
22
+ __export(nuxt_exports, {
23
+ defineCadenzaNuxtRuntimePlugin: () => defineCadenzaNuxtRuntimePlugin,
24
+ useCadenzaProjectionState: () => useCadenzaProjectionState,
25
+ useCadenzaRuntime: () => useCadenzaRuntime,
26
+ useCadenzaRuntimeReady: () => useCadenzaRuntimeReady
27
+ });
28
+ module.exports = __toCommonJS(nuxt_exports);
29
+
30
+ // src/frontend/runtimeProjectionState.ts
31
+ function cloneProjectionState(value) {
32
+ if (Array.isArray(value)) {
33
+ return value.map((item) => cloneProjectionState(item));
34
+ }
35
+ if (value && typeof value === "object") {
36
+ return Object.fromEntries(
37
+ Object.entries(value).map(([key, nested]) => [
38
+ key,
39
+ cloneProjectionState(nested)
40
+ ])
41
+ );
42
+ }
43
+ return value;
44
+ }
45
+ function resolveInitialProjectionState(value) {
46
+ const resolved = typeof value === "function" ? value() : value;
47
+ return cloneProjectionState(resolved);
48
+ }
49
+ function createProjectionRuntimeSnapshot(runtimeState, initialProjectionState) {
50
+ return {
51
+ ready: runtimeState?.ready ?? false,
52
+ projectionState: runtimeState?.projectionState ?? resolveInitialProjectionState(initialProjectionState)
53
+ };
54
+ }
55
+
56
+ // src/nuxt/index.ts
57
+ var DEFAULT_HYDRATION_STATE_KEY = "cadenza-hydration";
58
+ var RUNTIME_PROJECTION_STATE_KEY = "__cadenza_runtime_projection_state__";
59
+ var RUNTIME_HOLDER_KEY = "__CADENZA_NUXT_RUNTIME_HOLDER__";
60
+ function getRuntimeHolder() {
61
+ const globalRecord = globalThis;
62
+ if (!globalRecord[RUNTIME_HOLDER_KEY]) {
63
+ globalRecord[RUNTIME_HOLDER_KEY] = {};
64
+ }
65
+ return globalRecord[RUNTIME_HOLDER_KEY];
66
+ }
67
+ function resolveBootstrapUrl(bootstrapUrl, runtimeConfig) {
68
+ return typeof bootstrapUrl === "function" ? bootstrapUrl(runtimeConfig) : bootstrapUrl;
69
+ }
70
+ function defineCadenzaNuxtRuntimePlugin(options) {
71
+ return () => {
72
+ const {
73
+ cadenza,
74
+ service,
75
+ bootstrapUrl,
76
+ hydrationStateKey,
77
+ initialProjectionState,
78
+ commands,
79
+ ...actorOptions
80
+ } = options;
81
+ const runtimeConfig = useRuntimeConfig();
82
+ const hydration = useState(
83
+ hydrationStateKey ?? DEFAULT_HYDRATION_STATE_KEY,
84
+ () => ({
85
+ initialInquiryResults: {}
86
+ })
87
+ );
88
+ const browserRuntimeOptions = {
89
+ ...actorOptions,
90
+ initialProjectionState,
91
+ service: {
92
+ ...service,
93
+ bootstrap: {
94
+ url: resolveBootstrapUrl(bootstrapUrl, runtimeConfig)
95
+ },
96
+ hydration: hydration.value
97
+ }
98
+ };
99
+ const projectionState = useState(
100
+ RUNTIME_PROJECTION_STATE_KEY,
101
+ () => createProjectionRuntimeSnapshot(void 0, initialProjectionState)
102
+ );
103
+ const holder = getRuntimeHolder();
104
+ if (!holder.runtime) {
105
+ holder.runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);
106
+ }
107
+ holder.unsubscribe?.();
108
+ holder.unsubscribe = holder.runtime.subscribe((runtimeState) => {
109
+ projectionState.value = createProjectionRuntimeSnapshot(
110
+ runtimeState,
111
+ initialProjectionState
112
+ );
113
+ });
114
+ projectionState.value = createProjectionRuntimeSnapshot(
115
+ holder.runtime.getRuntimeState(),
116
+ initialProjectionState
117
+ );
118
+ if (!holder.providedRuntime) {
119
+ const runtimeCommands = commands ? commands({
120
+ cadenza,
121
+ runtime: holder.runtime
122
+ }) : {};
123
+ holder.providedRuntime = {
124
+ actor: holder.runtime.actor,
125
+ actorHandle: holder.runtime,
126
+ waitUntilReady: holder.runtime.waitUntilReady,
127
+ inquire: holder.runtime.inquire,
128
+ getRuntimeState: holder.runtime.getRuntimeState,
129
+ subscribe: holder.runtime.subscribe,
130
+ commands: runtimeCommands
131
+ };
132
+ }
133
+ return {
134
+ provide: {
135
+ cadenzaRuntime: holder.providedRuntime
136
+ }
137
+ };
138
+ };
139
+ }
140
+ function useCadenzaRuntime() {
141
+ return useNuxtApp().$cadenzaRuntime;
142
+ }
143
+ function useCadenzaProjectionState() {
144
+ return useState(
145
+ RUNTIME_PROJECTION_STATE_KEY,
146
+ () => ({
147
+ ready: false,
148
+ projectionState: {}
149
+ })
150
+ );
151
+ }
152
+ function useCadenzaRuntimeReady() {
153
+ const readyState = {};
154
+ Object.defineProperty(readyState, "__v_isRef", {
155
+ value: true,
156
+ enumerable: false
157
+ });
158
+ Object.defineProperty(readyState, "value", {
159
+ get() {
160
+ return useCadenzaProjectionState().value.ready;
161
+ },
162
+ enumerable: true
163
+ });
164
+ return readyState;
165
+ }
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/nuxt/index.ts","../../../src/frontend/runtimeProjectionState.ts"],"sourcesContent":["import type CadenzaService from \"../Cadenza\";\nimport type {\n BrowserRuntimeActorHandle,\n BrowserRuntimeActorOptions,\n BrowserRuntimeServiceOptions,\n BrowserRuntimeProjectionBinding,\n} from \"../frontend/createBrowserRuntimeActor\";\nimport {\n createProjectionRuntimeSnapshot,\n type ProjectionRuntimeSnapshot,\n} from \"../frontend/runtimeProjectionState\";\nimport type { HydrationOptions } from \"../utils/bootstrap\";\n\ntype StateLike<T> = {\n value: T;\n};\n\ntype ComputedLike<T> = {\n readonly value: T;\n};\n\ntype RefLike<T> = {\n readonly value: T;\n readonly __v_isRef: true;\n};\n\ntype NuxtPluginSetup = () => { provide?: Record<string, unknown> } | void;\n\ndeclare function useState<T>(key: string, init: () => T): StateLike<T>;\ndeclare function useRuntimeConfig(): Record<string, any>;\ndeclare function useNuxtApp(): Record<string, any>;\n\nexport interface CadenzaNuxtRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> extends ProjectionRuntimeSnapshot<TProjectionState> {}\n\nexport interface CadenzaNuxtRuntime<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> {\n actor: BrowserRuntimeActorHandle<TProjectionState>[\"actor\"];\n actorHandle: BrowserRuntimeActorHandle<TProjectionState>;\n waitUntilReady: BrowserRuntimeActorHandle<TProjectionState>[\"waitUntilReady\"];\n inquire: BrowserRuntimeActorHandle<TProjectionState>[\"inquire\"];\n getRuntimeState: BrowserRuntimeActorHandle<TProjectionState>[\"getRuntimeState\"];\n subscribe: BrowserRuntimeActorHandle<TProjectionState>[\"subscribe\"];\n commands: TCommands;\n}\n\nexport interface CadenzaNuxtRuntimeOptions<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> extends Omit<\n BrowserRuntimeActorOptions<TProjectionState>,\n \"service\" | \"initialProjectionState\"\n > {\n cadenza: typeof CadenzaService;\n service: Omit<BrowserRuntimeServiceOptions, \"bootstrap\" | \"hydration\">;\n bootstrapUrl: string | ((config: Record<string, any>) => string);\n hydrationStateKey?: string;\n initialProjectionState: TProjectionState | (() => TProjectionState);\n commands?: (context: {\n cadenza: typeof CadenzaService;\n runtime: BrowserRuntimeActorHandle<TProjectionState>;\n }) => TCommands;\n}\n\ntype NuxtRuntimeHolder<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> = {\n runtime?: BrowserRuntimeActorHandle<TProjectionState>;\n unsubscribe?: () => void;\n providedRuntime?: CadenzaNuxtRuntime<TProjectionState, TCommands>;\n};\n\nconst DEFAULT_HYDRATION_STATE_KEY = \"cadenza-hydration\";\nconst RUNTIME_PROJECTION_STATE_KEY = \"__cadenza_runtime_projection_state__\";\nconst RUNTIME_HOLDER_KEY = \"__CADENZA_NUXT_RUNTIME_HOLDER__\";\n\nfunction getRuntimeHolder<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any>,\n>(): NuxtRuntimeHolder<TProjectionState, TCommands> {\n const globalRecord = globalThis as Record<string, unknown>;\n if (!globalRecord[RUNTIME_HOLDER_KEY]) {\n globalRecord[RUNTIME_HOLDER_KEY] = {};\n }\n\n return globalRecord[RUNTIME_HOLDER_KEY] as NuxtRuntimeHolder<\n TProjectionState,\n TCommands\n >;\n}\n\nfunction resolveBootstrapUrl(\n bootstrapUrl: string | ((config: Record<string, any>) => string),\n runtimeConfig: Record<string, any>,\n): string {\n return typeof bootstrapUrl === \"function\"\n ? bootstrapUrl(runtimeConfig)\n : bootstrapUrl;\n}\n\nexport function defineCadenzaNuxtRuntimePlugin<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n>(options: CadenzaNuxtRuntimeOptions<TProjectionState, TCommands>): NuxtPluginSetup {\n return () => {\n const {\n cadenza,\n service,\n bootstrapUrl,\n hydrationStateKey,\n initialProjectionState,\n commands,\n ...actorOptions\n } = options;\n const runtimeConfig = useRuntimeConfig();\n const hydration = useState<HydrationOptions>(\n hydrationStateKey ?? DEFAULT_HYDRATION_STATE_KEY,\n () => ({\n initialInquiryResults: {},\n }),\n );\n const browserRuntimeOptions: BrowserRuntimeActorOptions<TProjectionState> = {\n ...actorOptions,\n initialProjectionState,\n service: {\n ...service,\n bootstrap: {\n url: resolveBootstrapUrl(bootstrapUrl, runtimeConfig),\n },\n hydration: hydration.value,\n },\n };\n const projectionState = useState<CadenzaNuxtRuntimeState<TProjectionState>>(\n RUNTIME_PROJECTION_STATE_KEY,\n () => createProjectionRuntimeSnapshot(undefined, initialProjectionState),\n );\n const holder = getRuntimeHolder<TProjectionState, TCommands>();\n\n if (!holder.runtime) {\n holder.runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);\n }\n\n holder.unsubscribe?.();\n holder.unsubscribe = holder.runtime.subscribe((runtimeState) => {\n projectionState.value = createProjectionRuntimeSnapshot(\n runtimeState,\n initialProjectionState,\n );\n });\n projectionState.value = createProjectionRuntimeSnapshot(\n holder.runtime.getRuntimeState(),\n initialProjectionState,\n );\n\n if (!holder.providedRuntime) {\n const runtimeCommands = commands\n ? commands({\n cadenza,\n runtime: holder.runtime,\n })\n : ({} as TCommands);\n\n holder.providedRuntime = {\n actor: holder.runtime.actor,\n actorHandle: holder.runtime,\n waitUntilReady: holder.runtime.waitUntilReady,\n inquire: holder.runtime.inquire,\n getRuntimeState: holder.runtime.getRuntimeState,\n subscribe: holder.runtime.subscribe,\n commands: runtimeCommands,\n };\n }\n\n return {\n provide: {\n cadenzaRuntime: holder.providedRuntime,\n },\n };\n };\n}\n\nexport function useCadenzaRuntime<\n TRuntime extends CadenzaNuxtRuntime<any, any> = CadenzaNuxtRuntime<any, any>,\n>(): TRuntime {\n return (useNuxtApp() as { $cadenzaRuntime: TRuntime }).$cadenzaRuntime;\n}\n\nexport function useCadenzaProjectionState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): StateLike<CadenzaNuxtRuntimeState<TProjectionState>> {\n return useState<CadenzaNuxtRuntimeState<TProjectionState>>(\n RUNTIME_PROJECTION_STATE_KEY,\n () => ({\n ready: false,\n projectionState: {} as TProjectionState,\n }),\n );\n}\n\nexport function useCadenzaRuntimeReady(): ComputedLike<boolean> {\n const readyState = {} as RefLike<boolean>;\n Object.defineProperty(readyState, \"__v_isRef\", {\n value: true,\n enumerable: false,\n });\n Object.defineProperty(readyState, \"value\", {\n get() {\n return useCadenzaProjectionState().value.ready;\n },\n enumerable: true,\n });\n return readyState;\n}\n\nexport type { BrowserRuntimeProjectionBinding };\n","import type { BrowserRuntimeActorRuntimeState } from \"./createBrowserRuntimeActor\";\n\nexport interface ProjectionRuntimeSnapshot<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> {\n ready: boolean;\n projectionState: TProjectionState;\n}\n\nexport function cloneProjectionState<TProjectionState>(\n value: TProjectionState,\n): TProjectionState {\n if (Array.isArray(value)) {\n return value.map((item) => cloneProjectionState(item)) as TProjectionState;\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, nested]) => [\n key,\n cloneProjectionState(nested),\n ]),\n ) as TProjectionState;\n }\n\n return value;\n}\n\nexport function resolveInitialProjectionState<\n TProjectionState extends Record<string, any>,\n>(value: TProjectionState | (() => TProjectionState)): TProjectionState {\n const resolved =\n typeof value === \"function\"\n ? (value as () => TProjectionState)()\n : value;\n return cloneProjectionState(resolved);\n}\n\nexport function createProjectionRuntimeSnapshot<\n TProjectionState extends Record<string, any>,\n>(\n runtimeState: BrowserRuntimeActorRuntimeState<TProjectionState> | undefined,\n initialProjectionState: TProjectionState | (() => TProjectionState),\n): ProjectionRuntimeSnapshot<TProjectionState> {\n return {\n ready: runtimeState?.ready ?? false,\n projectionState:\n runtimeState?.projectionState ??\n resolveInitialProjectionState(initialProjectionState),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACSO,SAAS,qBACd,OACkB;AAClB,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS,qBAAqB,IAAI,CAAC;AAAA,EACvD;AAEA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,KAAgC,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM;AAAA,QACtE;AAAA,QACA,qBAAqB,MAAM;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,8BAEd,OAAsE;AACtE,QAAM,WACJ,OAAO,UAAU,aACZ,MAAiC,IAClC;AACN,SAAO,qBAAqB,QAAQ;AACtC;AAEO,SAAS,gCAGd,cACA,wBAC6C;AAC7C,SAAO;AAAA,IACL,OAAO,cAAc,SAAS;AAAA,IAC9B,iBACE,cAAc,mBACd,8BAA8B,sBAAsB;AAAA,EACxD;AACF;;;AD0BA,IAAM,8BAA8B;AACpC,IAAM,+BAA+B;AACrC,IAAM,qBAAqB;AAE3B,SAAS,mBAG2C;AAClD,QAAM,eAAe;AACrB,MAAI,CAAC,aAAa,kBAAkB,GAAG;AACrC,iBAAa,kBAAkB,IAAI,CAAC;AAAA,EACtC;AAEA,SAAO,aAAa,kBAAkB;AAIxC;AAEA,SAAS,oBACP,cACA,eACQ;AACR,SAAO,OAAO,iBAAiB,aAC3B,aAAa,aAAa,IAC1B;AACN;AAEO,SAAS,+BAGd,SAAkF;AAClF,SAAO,MAAM;AACX,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,UAAM,gBAAgB,iBAAiB;AACvC,UAAM,YAAY;AAAA,MAChB,qBAAqB;AAAA,MACrB,OAAO;AAAA,QACL,uBAAuB,CAAC;AAAA,MAC1B;AAAA,IACF;AACA,UAAM,wBAAsE;AAAA,MAC1E,GAAG;AAAA,MACH;AAAA,MACA,SAAS;AAAA,QACP,GAAG;AAAA,QACH,WAAW;AAAA,UACT,KAAK,oBAAoB,cAAc,aAAa;AAAA,QACtD;AAAA,QACA,WAAW,UAAU;AAAA,MACvB;AAAA,IACF;AACA,UAAM,kBAAkB;AAAA,MACtB;AAAA,MACA,MAAM,gCAAgC,QAAW,sBAAsB;AAAA,IACzE;AACA,UAAM,SAAS,iBAA8C;AAE7D,QAAI,CAAC,OAAO,SAAS;AACnB,aAAO,UAAU,QAAQ,0BAA0B,qBAAqB;AAAA,IAC1E;AAEA,WAAO,cAAc;AACrB,WAAO,cAAc,OAAO,QAAQ,UAAU,CAAC,iBAAiB;AAC9D,sBAAgB,QAAQ;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AACD,oBAAgB,QAAQ;AAAA,MACtB,OAAO,QAAQ,gBAAgB;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,iBAAiB;AAC3B,YAAM,kBAAkB,WACpB,SAAS;AAAA,QACP;AAAA,QACA,SAAS,OAAO;AAAA,MAClB,CAAC,IACA,CAAC;AAEN,aAAO,kBAAkB;AAAA,QACvB,OAAO,OAAO,QAAQ;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,gBAAgB,OAAO,QAAQ;AAAA,QAC/B,SAAS,OAAO,QAAQ;AAAA,QACxB,iBAAiB,OAAO,QAAQ;AAAA,QAChC,WAAW,OAAO,QAAQ;AAAA,QAC1B,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP,gBAAgB,OAAO;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,oBAEF;AACZ,SAAQ,WAAW,EAAoC;AACzD;AAEO,SAAS,4BAE0C;AACxD,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,iBAAiB,CAAC;AAAA,IACpB;AAAA,EACF;AACF;AAEO,SAAS,yBAAgD;AAC9D,QAAM,aAAa,CAAC;AACpB,SAAO,eAAe,YAAY,aAAa;AAAA,IAC7C,OAAO;AAAA,IACP,YAAY;AAAA,EACd,CAAC;AACD,SAAO,eAAe,YAAY,SAAS;AAAA,IACzC,MAAM;AACJ,aAAO,0BAA0B,EAAE,MAAM;AAAA,IAC3C;AAAA,IACA,YAAY;AAAA,EACd,CAAC;AACD,SAAO;AACT;","names":[]}
@@ -0,0 +1,121 @@
1
+ import {
2
+ createProjectionRuntimeSnapshot
3
+ } from "../chunk-4XOTT2KM.mjs";
4
+
5
+ // src/nuxt/index.ts
6
+ var DEFAULT_HYDRATION_STATE_KEY = "cadenza-hydration";
7
+ var RUNTIME_PROJECTION_STATE_KEY = "__cadenza_runtime_projection_state__";
8
+ var RUNTIME_HOLDER_KEY = "__CADENZA_NUXT_RUNTIME_HOLDER__";
9
+ function getRuntimeHolder() {
10
+ const globalRecord = globalThis;
11
+ if (!globalRecord[RUNTIME_HOLDER_KEY]) {
12
+ globalRecord[RUNTIME_HOLDER_KEY] = {};
13
+ }
14
+ return globalRecord[RUNTIME_HOLDER_KEY];
15
+ }
16
+ function resolveBootstrapUrl(bootstrapUrl, runtimeConfig) {
17
+ return typeof bootstrapUrl === "function" ? bootstrapUrl(runtimeConfig) : bootstrapUrl;
18
+ }
19
+ function defineCadenzaNuxtRuntimePlugin(options) {
20
+ return () => {
21
+ const {
22
+ cadenza,
23
+ service,
24
+ bootstrapUrl,
25
+ hydrationStateKey,
26
+ initialProjectionState,
27
+ commands,
28
+ ...actorOptions
29
+ } = options;
30
+ const runtimeConfig = useRuntimeConfig();
31
+ const hydration = useState(
32
+ hydrationStateKey ?? DEFAULT_HYDRATION_STATE_KEY,
33
+ () => ({
34
+ initialInquiryResults: {}
35
+ })
36
+ );
37
+ const browserRuntimeOptions = {
38
+ ...actorOptions,
39
+ initialProjectionState,
40
+ service: {
41
+ ...service,
42
+ bootstrap: {
43
+ url: resolveBootstrapUrl(bootstrapUrl, runtimeConfig)
44
+ },
45
+ hydration: hydration.value
46
+ }
47
+ };
48
+ const projectionState = useState(
49
+ RUNTIME_PROJECTION_STATE_KEY,
50
+ () => createProjectionRuntimeSnapshot(void 0, initialProjectionState)
51
+ );
52
+ const holder = getRuntimeHolder();
53
+ if (!holder.runtime) {
54
+ holder.runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);
55
+ }
56
+ holder.unsubscribe?.();
57
+ holder.unsubscribe = holder.runtime.subscribe((runtimeState) => {
58
+ projectionState.value = createProjectionRuntimeSnapshot(
59
+ runtimeState,
60
+ initialProjectionState
61
+ );
62
+ });
63
+ projectionState.value = createProjectionRuntimeSnapshot(
64
+ holder.runtime.getRuntimeState(),
65
+ initialProjectionState
66
+ );
67
+ if (!holder.providedRuntime) {
68
+ const runtimeCommands = commands ? commands({
69
+ cadenza,
70
+ runtime: holder.runtime
71
+ }) : {};
72
+ holder.providedRuntime = {
73
+ actor: holder.runtime.actor,
74
+ actorHandle: holder.runtime,
75
+ waitUntilReady: holder.runtime.waitUntilReady,
76
+ inquire: holder.runtime.inquire,
77
+ getRuntimeState: holder.runtime.getRuntimeState,
78
+ subscribe: holder.runtime.subscribe,
79
+ commands: runtimeCommands
80
+ };
81
+ }
82
+ return {
83
+ provide: {
84
+ cadenzaRuntime: holder.providedRuntime
85
+ }
86
+ };
87
+ };
88
+ }
89
+ function useCadenzaRuntime() {
90
+ return useNuxtApp().$cadenzaRuntime;
91
+ }
92
+ function useCadenzaProjectionState() {
93
+ return useState(
94
+ RUNTIME_PROJECTION_STATE_KEY,
95
+ () => ({
96
+ ready: false,
97
+ projectionState: {}
98
+ })
99
+ );
100
+ }
101
+ function useCadenzaRuntimeReady() {
102
+ const readyState = {};
103
+ Object.defineProperty(readyState, "__v_isRef", {
104
+ value: true,
105
+ enumerable: false
106
+ });
107
+ Object.defineProperty(readyState, "value", {
108
+ get() {
109
+ return useCadenzaProjectionState().value.ready;
110
+ },
111
+ enumerable: true
112
+ });
113
+ return readyState;
114
+ }
115
+ export {
116
+ defineCadenzaNuxtRuntimePlugin,
117
+ useCadenzaProjectionState,
118
+ useCadenzaRuntime,
119
+ useCadenzaRuntimeReady
120
+ };
121
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/nuxt/index.ts"],"sourcesContent":["import type CadenzaService from \"../Cadenza\";\nimport type {\n BrowserRuntimeActorHandle,\n BrowserRuntimeActorOptions,\n BrowserRuntimeServiceOptions,\n BrowserRuntimeProjectionBinding,\n} from \"../frontend/createBrowserRuntimeActor\";\nimport {\n createProjectionRuntimeSnapshot,\n type ProjectionRuntimeSnapshot,\n} from \"../frontend/runtimeProjectionState\";\nimport type { HydrationOptions } from \"../utils/bootstrap\";\n\ntype StateLike<T> = {\n value: T;\n};\n\ntype ComputedLike<T> = {\n readonly value: T;\n};\n\ntype RefLike<T> = {\n readonly value: T;\n readonly __v_isRef: true;\n};\n\ntype NuxtPluginSetup = () => { provide?: Record<string, unknown> } | void;\n\ndeclare function useState<T>(key: string, init: () => T): StateLike<T>;\ndeclare function useRuntimeConfig(): Record<string, any>;\ndeclare function useNuxtApp(): Record<string, any>;\n\nexport interface CadenzaNuxtRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> extends ProjectionRuntimeSnapshot<TProjectionState> {}\n\nexport interface CadenzaNuxtRuntime<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> {\n actor: BrowserRuntimeActorHandle<TProjectionState>[\"actor\"];\n actorHandle: BrowserRuntimeActorHandle<TProjectionState>;\n waitUntilReady: BrowserRuntimeActorHandle<TProjectionState>[\"waitUntilReady\"];\n inquire: BrowserRuntimeActorHandle<TProjectionState>[\"inquire\"];\n getRuntimeState: BrowserRuntimeActorHandle<TProjectionState>[\"getRuntimeState\"];\n subscribe: BrowserRuntimeActorHandle<TProjectionState>[\"subscribe\"];\n commands: TCommands;\n}\n\nexport interface CadenzaNuxtRuntimeOptions<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> extends Omit<\n BrowserRuntimeActorOptions<TProjectionState>,\n \"service\" | \"initialProjectionState\"\n > {\n cadenza: typeof CadenzaService;\n service: Omit<BrowserRuntimeServiceOptions, \"bootstrap\" | \"hydration\">;\n bootstrapUrl: string | ((config: Record<string, any>) => string);\n hydrationStateKey?: string;\n initialProjectionState: TProjectionState | (() => TProjectionState);\n commands?: (context: {\n cadenza: typeof CadenzaService;\n runtime: BrowserRuntimeActorHandle<TProjectionState>;\n }) => TCommands;\n}\n\ntype NuxtRuntimeHolder<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> = {\n runtime?: BrowserRuntimeActorHandle<TProjectionState>;\n unsubscribe?: () => void;\n providedRuntime?: CadenzaNuxtRuntime<TProjectionState, TCommands>;\n};\n\nconst DEFAULT_HYDRATION_STATE_KEY = \"cadenza-hydration\";\nconst RUNTIME_PROJECTION_STATE_KEY = \"__cadenza_runtime_projection_state__\";\nconst RUNTIME_HOLDER_KEY = \"__CADENZA_NUXT_RUNTIME_HOLDER__\";\n\nfunction getRuntimeHolder<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any>,\n>(): NuxtRuntimeHolder<TProjectionState, TCommands> {\n const globalRecord = globalThis as Record<string, unknown>;\n if (!globalRecord[RUNTIME_HOLDER_KEY]) {\n globalRecord[RUNTIME_HOLDER_KEY] = {};\n }\n\n return globalRecord[RUNTIME_HOLDER_KEY] as NuxtRuntimeHolder<\n TProjectionState,\n TCommands\n >;\n}\n\nfunction resolveBootstrapUrl(\n bootstrapUrl: string | ((config: Record<string, any>) => string),\n runtimeConfig: Record<string, any>,\n): string {\n return typeof bootstrapUrl === \"function\"\n ? bootstrapUrl(runtimeConfig)\n : bootstrapUrl;\n}\n\nexport function defineCadenzaNuxtRuntimePlugin<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n>(options: CadenzaNuxtRuntimeOptions<TProjectionState, TCommands>): NuxtPluginSetup {\n return () => {\n const {\n cadenza,\n service,\n bootstrapUrl,\n hydrationStateKey,\n initialProjectionState,\n commands,\n ...actorOptions\n } = options;\n const runtimeConfig = useRuntimeConfig();\n const hydration = useState<HydrationOptions>(\n hydrationStateKey ?? DEFAULT_HYDRATION_STATE_KEY,\n () => ({\n initialInquiryResults: {},\n }),\n );\n const browserRuntimeOptions: BrowserRuntimeActorOptions<TProjectionState> = {\n ...actorOptions,\n initialProjectionState,\n service: {\n ...service,\n bootstrap: {\n url: resolveBootstrapUrl(bootstrapUrl, runtimeConfig),\n },\n hydration: hydration.value,\n },\n };\n const projectionState = useState<CadenzaNuxtRuntimeState<TProjectionState>>(\n RUNTIME_PROJECTION_STATE_KEY,\n () => createProjectionRuntimeSnapshot(undefined, initialProjectionState),\n );\n const holder = getRuntimeHolder<TProjectionState, TCommands>();\n\n if (!holder.runtime) {\n holder.runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);\n }\n\n holder.unsubscribe?.();\n holder.unsubscribe = holder.runtime.subscribe((runtimeState) => {\n projectionState.value = createProjectionRuntimeSnapshot(\n runtimeState,\n initialProjectionState,\n );\n });\n projectionState.value = createProjectionRuntimeSnapshot(\n holder.runtime.getRuntimeState(),\n initialProjectionState,\n );\n\n if (!holder.providedRuntime) {\n const runtimeCommands = commands\n ? commands({\n cadenza,\n runtime: holder.runtime,\n })\n : ({} as TCommands);\n\n holder.providedRuntime = {\n actor: holder.runtime.actor,\n actorHandle: holder.runtime,\n waitUntilReady: holder.runtime.waitUntilReady,\n inquire: holder.runtime.inquire,\n getRuntimeState: holder.runtime.getRuntimeState,\n subscribe: holder.runtime.subscribe,\n commands: runtimeCommands,\n };\n }\n\n return {\n provide: {\n cadenzaRuntime: holder.providedRuntime,\n },\n };\n };\n}\n\nexport function useCadenzaRuntime<\n TRuntime extends CadenzaNuxtRuntime<any, any> = CadenzaNuxtRuntime<any, any>,\n>(): TRuntime {\n return (useNuxtApp() as { $cadenzaRuntime: TRuntime }).$cadenzaRuntime;\n}\n\nexport function useCadenzaProjectionState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): StateLike<CadenzaNuxtRuntimeState<TProjectionState>> {\n return useState<CadenzaNuxtRuntimeState<TProjectionState>>(\n RUNTIME_PROJECTION_STATE_KEY,\n () => ({\n ready: false,\n projectionState: {} as TProjectionState,\n }),\n );\n}\n\nexport function useCadenzaRuntimeReady(): ComputedLike<boolean> {\n const readyState = {} as RefLike<boolean>;\n Object.defineProperty(readyState, \"__v_isRef\", {\n value: true,\n enumerable: false,\n });\n Object.defineProperty(readyState, \"value\", {\n get() {\n return useCadenzaProjectionState().value.ready;\n },\n enumerable: true,\n });\n return readyState;\n}\n\nexport type { BrowserRuntimeProjectionBinding };\n"],"mappings":";;;;;AA4EA,IAAM,8BAA8B;AACpC,IAAM,+BAA+B;AACrC,IAAM,qBAAqB;AAE3B,SAAS,mBAG2C;AAClD,QAAM,eAAe;AACrB,MAAI,CAAC,aAAa,kBAAkB,GAAG;AACrC,iBAAa,kBAAkB,IAAI,CAAC;AAAA,EACtC;AAEA,SAAO,aAAa,kBAAkB;AAIxC;AAEA,SAAS,oBACP,cACA,eACQ;AACR,SAAO,OAAO,iBAAiB,aAC3B,aAAa,aAAa,IAC1B;AACN;AAEO,SAAS,+BAGd,SAAkF;AAClF,SAAO,MAAM;AACX,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,UAAM,gBAAgB,iBAAiB;AACvC,UAAM,YAAY;AAAA,MAChB,qBAAqB;AAAA,MACrB,OAAO;AAAA,QACL,uBAAuB,CAAC;AAAA,MAC1B;AAAA,IACF;AACA,UAAM,wBAAsE;AAAA,MAC1E,GAAG;AAAA,MACH;AAAA,MACA,SAAS;AAAA,QACP,GAAG;AAAA,QACH,WAAW;AAAA,UACT,KAAK,oBAAoB,cAAc,aAAa;AAAA,QACtD;AAAA,QACA,WAAW,UAAU;AAAA,MACvB;AAAA,IACF;AACA,UAAM,kBAAkB;AAAA,MACtB;AAAA,MACA,MAAM,gCAAgC,QAAW,sBAAsB;AAAA,IACzE;AACA,UAAM,SAAS,iBAA8C;AAE7D,QAAI,CAAC,OAAO,SAAS;AACnB,aAAO,UAAU,QAAQ,0BAA0B,qBAAqB;AAAA,IAC1E;AAEA,WAAO,cAAc;AACrB,WAAO,cAAc,OAAO,QAAQ,UAAU,CAAC,iBAAiB;AAC9D,sBAAgB,QAAQ;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AACD,oBAAgB,QAAQ;AAAA,MACtB,OAAO,QAAQ,gBAAgB;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,iBAAiB;AAC3B,YAAM,kBAAkB,WACpB,SAAS;AAAA,QACP;AAAA,QACA,SAAS,OAAO;AAAA,MAClB,CAAC,IACA,CAAC;AAEN,aAAO,kBAAkB;AAAA,QACvB,OAAO,OAAO,QAAQ;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,gBAAgB,OAAO,QAAQ;AAAA,QAC/B,SAAS,OAAO,QAAQ;AAAA,QACxB,iBAAiB,OAAO,QAAQ;AAAA,QAChC,WAAW,OAAO,QAAQ;AAAA,QAC1B,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP,gBAAgB,OAAO;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,oBAEF;AACZ,SAAQ,WAAW,EAAoC;AACzD;AAEO,SAAS,4BAE0C;AACxD,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,iBAAiB,CAAC;AAAA,IACpB;AAAA,EACF;AACF;AAEO,SAAS,yBAAgD;AAC9D,QAAM,aAAa,CAAC;AACpB,SAAO,eAAe,YAAY,aAAa;AAAA,IAC7C,OAAO;AAAA,IACP,YAAY;AAAA,EACd,CAAC;AACD,SAAO,eAAe,YAAY,SAAS;AAAA,IACzC,MAAM;AACJ,aAAO,0BAA0B,EAAE,MAAM;AAAA,IAC3C;AAAA,IACA,YAAY;AAAA,EACd,CAAC;AACD,SAAO;AACT;","names":[]}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/react/index.ts
21
+ var react_exports = {};
22
+ __export(react_exports, {
23
+ CadenzaRuntimeProvider: () => CadenzaRuntimeProvider,
24
+ createCadenzaReactRuntime: () => createCadenzaReactRuntime,
25
+ useCadenzaProjectionSelector: () => useCadenzaProjectionSelector,
26
+ useCadenzaProjectionState: () => useCadenzaProjectionState,
27
+ useCadenzaRuntime: () => useCadenzaRuntime,
28
+ useCadenzaRuntimeReady: () => useCadenzaRuntimeReady
29
+ });
30
+ module.exports = __toCommonJS(react_exports);
31
+ var import_react = require("react");
32
+
33
+ // src/frontend/runtimeProjectionState.ts
34
+ function cloneProjectionState(value) {
35
+ if (Array.isArray(value)) {
36
+ return value.map((item) => cloneProjectionState(item));
37
+ }
38
+ if (value && typeof value === "object") {
39
+ return Object.fromEntries(
40
+ Object.entries(value).map(([key, nested]) => [
41
+ key,
42
+ cloneProjectionState(nested)
43
+ ])
44
+ );
45
+ }
46
+ return value;
47
+ }
48
+ function resolveInitialProjectionState(value) {
49
+ const resolved = typeof value === "function" ? value() : value;
50
+ return cloneProjectionState(resolved);
51
+ }
52
+ function createProjectionRuntimeSnapshot(runtimeState, initialProjectionState) {
53
+ return {
54
+ ready: runtimeState?.ready ?? false,
55
+ projectionState: runtimeState?.projectionState ?? resolveInitialProjectionState(initialProjectionState)
56
+ };
57
+ }
58
+
59
+ // src/react/index.ts
60
+ var DEFAULT_SELECTOR_EQUALITY = Object.is;
61
+ var CadenzaRuntimeContext = (0, import_react.createContext)(
62
+ null
63
+ );
64
+ function resolveBootstrapUrl(bootstrapUrl) {
65
+ return typeof bootstrapUrl === "function" ? bootstrapUrl() : bootstrapUrl;
66
+ }
67
+ function resolveHydrationOptions(hydration) {
68
+ if (!hydration) {
69
+ return void 0;
70
+ }
71
+ return typeof hydration === "function" ? hydration() : hydration;
72
+ }
73
+ function getRequiredRuntime() {
74
+ const runtime = (0, import_react.useContext)(CadenzaRuntimeContext);
75
+ if (!runtime) {
76
+ throw new Error(
77
+ "CadenzaRuntimeProvider is required before using React Cadenza runtime hooks."
78
+ );
79
+ }
80
+ return runtime;
81
+ }
82
+ function createCadenzaReactRuntime(options) {
83
+ const {
84
+ cadenza,
85
+ service,
86
+ bootstrapUrl,
87
+ hydration,
88
+ initialProjectionState,
89
+ commands,
90
+ ...actorOptions
91
+ } = options;
92
+ const browserRuntimeOptions = {
93
+ ...actorOptions,
94
+ initialProjectionState,
95
+ service: {
96
+ ...service,
97
+ bootstrap: {
98
+ url: resolveBootstrapUrl(bootstrapUrl)
99
+ },
100
+ hydration: resolveHydrationOptions(hydration)
101
+ }
102
+ };
103
+ const runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);
104
+ let snapshot = createProjectionRuntimeSnapshot(
105
+ runtime.getRuntimeState(),
106
+ initialProjectionState
107
+ );
108
+ const runtimeCommands = commands ? commands({
109
+ cadenza,
110
+ runtime
111
+ }) : {};
112
+ return {
113
+ actor: runtime.actor,
114
+ actorHandle: runtime,
115
+ waitUntilReady: runtime.waitUntilReady,
116
+ inquire: runtime.inquire,
117
+ getRuntimeState: runtime.getRuntimeState,
118
+ subscribe: (listener) => runtime.subscribe((runtimeState) => {
119
+ snapshot = createProjectionRuntimeSnapshot(
120
+ runtimeState,
121
+ initialProjectionState
122
+ );
123
+ listener(runtimeState);
124
+ }),
125
+ getSnapshot: () => snapshot,
126
+ commands: runtimeCommands
127
+ };
128
+ }
129
+ function CadenzaRuntimeProvider({ runtime, children }) {
130
+ return (0, import_react.createElement)(CadenzaRuntimeContext.Provider, {
131
+ value: runtime,
132
+ children
133
+ });
134
+ }
135
+ function useCadenzaRuntime() {
136
+ return getRequiredRuntime();
137
+ }
138
+ function useCadenzaProjectionState() {
139
+ const runtime = getRequiredRuntime();
140
+ return (0, import_react.useSyncExternalStore)(
141
+ runtime.subscribe,
142
+ runtime.getSnapshot,
143
+ runtime.getSnapshot
144
+ );
145
+ }
146
+ function useCadenzaSnapshotSelector(selector, isEqual = DEFAULT_SELECTOR_EQUALITY) {
147
+ const runtime = getRequiredRuntime();
148
+ const selectionCacheRef = (0, import_react.useRef)({
149
+ hasValue: false,
150
+ value: void 0
151
+ });
152
+ const getSelectedSnapshot = () => {
153
+ const nextValue = selector(runtime.getSnapshot());
154
+ const cached = selectionCacheRef.current;
155
+ if (cached.hasValue && isEqual(cached.value, nextValue)) {
156
+ return cached.value;
157
+ }
158
+ selectionCacheRef.current = {
159
+ hasValue: true,
160
+ value: nextValue
161
+ };
162
+ return nextValue;
163
+ };
164
+ return (0, import_react.useSyncExternalStore)(
165
+ runtime.subscribe,
166
+ getSelectedSnapshot,
167
+ getSelectedSnapshot
168
+ );
169
+ }
170
+ function useCadenzaProjectionSelector(selector, isEqual = DEFAULT_SELECTOR_EQUALITY) {
171
+ return useCadenzaSnapshotSelector(
172
+ (snapshot) => selector(snapshot.projectionState),
173
+ isEqual
174
+ );
175
+ }
176
+ function useCadenzaRuntimeReady() {
177
+ return useCadenzaSnapshotSelector((snapshot) => snapshot.ready);
178
+ }
179
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/react/index.ts","../../../src/frontend/runtimeProjectionState.ts"],"sourcesContent":["import {\n createContext,\n createElement,\n useContext,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type CadenzaService from \"../Cadenza\";\nimport type {\n BrowserRuntimeActorHandle,\n BrowserRuntimeActorOptions,\n BrowserRuntimeProjectionBinding,\n BrowserRuntimeServiceOptions,\n} from \"../frontend/createBrowserRuntimeActor\";\nimport {\n createProjectionRuntimeSnapshot,\n type ProjectionRuntimeSnapshot,\n} from \"../frontend/runtimeProjectionState\";\nimport type { HydrationOptions } from \"../utils/bootstrap\";\n\nexport interface CadenzaReactRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> extends ProjectionRuntimeSnapshot<TProjectionState> {}\n\nexport interface CadenzaReactRuntime<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> {\n actor: BrowserRuntimeActorHandle<TProjectionState>[\"actor\"];\n actorHandle: BrowserRuntimeActorHandle<TProjectionState>;\n waitUntilReady: BrowserRuntimeActorHandle<TProjectionState>[\"waitUntilReady\"];\n inquire: BrowserRuntimeActorHandle<TProjectionState>[\"inquire\"];\n getRuntimeState: BrowserRuntimeActorHandle<TProjectionState>[\"getRuntimeState\"];\n subscribe: BrowserRuntimeActorHandle<TProjectionState>[\"subscribe\"];\n getSnapshot: () => CadenzaReactRuntimeState<TProjectionState>;\n commands: TCommands;\n}\n\nexport interface CadenzaReactRuntimeOptions<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> extends Omit<\n BrowserRuntimeActorOptions<TProjectionState>,\n \"service\" | \"initialProjectionState\"\n > {\n cadenza: typeof CadenzaService;\n service: Omit<BrowserRuntimeServiceOptions, \"bootstrap\" | \"hydration\">;\n bootstrapUrl: string | (() => string);\n hydration?: HydrationOptions | (() => HydrationOptions);\n initialProjectionState: TProjectionState | (() => TProjectionState);\n commands?: (context: {\n cadenza: typeof CadenzaService;\n runtime: BrowserRuntimeActorHandle<TProjectionState>;\n }) => TCommands;\n}\n\nexport interface CadenzaRuntimeProviderProps<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n> {\n runtime: CadenzaReactRuntime<TProjectionState, TCommands>;\n children?: ReactNode;\n}\n\ntype EqualityComparator<TSelected> = (\n previous: TSelected,\n next: TSelected,\n) => boolean;\n\nconst DEFAULT_SELECTOR_EQUALITY = Object.is;\nconst CadenzaRuntimeContext = createContext<CadenzaReactRuntime<any, any> | null>(\n null,\n);\n\nfunction resolveBootstrapUrl(bootstrapUrl: string | (() => string)): string {\n return typeof bootstrapUrl === \"function\" ? bootstrapUrl() : bootstrapUrl;\n}\n\nfunction resolveHydrationOptions(\n hydration: HydrationOptions | (() => HydrationOptions) | undefined,\n): HydrationOptions | undefined {\n if (!hydration) {\n return undefined;\n }\n\n return typeof hydration === \"function\"\n ? (hydration as () => HydrationOptions)()\n : hydration;\n}\n\nfunction getRequiredRuntime<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any>,\n>(): CadenzaReactRuntime<TProjectionState, TCommands> {\n const runtime = useContext(CadenzaRuntimeContext);\n if (!runtime) {\n throw new Error(\n \"CadenzaRuntimeProvider is required before using React Cadenza runtime hooks.\",\n );\n }\n\n return runtime as CadenzaReactRuntime<TProjectionState, TCommands>;\n}\n\nexport function createCadenzaReactRuntime<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n>(options: CadenzaReactRuntimeOptions<TProjectionState, TCommands>) {\n const {\n cadenza,\n service,\n bootstrapUrl,\n hydration,\n initialProjectionState,\n commands,\n ...actorOptions\n } = options;\n const browserRuntimeOptions: BrowserRuntimeActorOptions<TProjectionState> = {\n ...actorOptions,\n initialProjectionState,\n service: {\n ...service,\n bootstrap: {\n url: resolveBootstrapUrl(bootstrapUrl),\n },\n hydration: resolveHydrationOptions(hydration),\n },\n };\n const runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);\n let snapshot = createProjectionRuntimeSnapshot(\n runtime.getRuntimeState(),\n initialProjectionState,\n );\n const runtimeCommands = commands\n ? commands({\n cadenza,\n runtime,\n })\n : ({} as TCommands);\n\n return {\n actor: runtime.actor,\n actorHandle: runtime,\n waitUntilReady: runtime.waitUntilReady,\n inquire: runtime.inquire,\n getRuntimeState: runtime.getRuntimeState,\n subscribe: (listener) =>\n runtime.subscribe((runtimeState) => {\n snapshot = createProjectionRuntimeSnapshot(\n runtimeState,\n initialProjectionState,\n );\n listener(runtimeState);\n }),\n getSnapshot: () => snapshot,\n commands: runtimeCommands,\n } satisfies CadenzaReactRuntime<TProjectionState, TCommands>;\n}\n\nexport function CadenzaRuntimeProvider<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n>({ runtime, children }: CadenzaRuntimeProviderProps<TProjectionState, TCommands>) {\n return createElement(CadenzaRuntimeContext.Provider, {\n value: runtime,\n children,\n });\n}\n\nexport function useCadenzaRuntime<\n TRuntime extends CadenzaReactRuntime<any, any> = CadenzaReactRuntime<any, any>,\n>(): TRuntime {\n return getRequiredRuntime<any, any>() as TRuntime;\n}\n\nexport function useCadenzaProjectionState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): CadenzaReactRuntimeState<TProjectionState> {\n const runtime = getRequiredRuntime<TProjectionState, Record<string, any>>();\n return useSyncExternalStore(\n runtime.subscribe,\n runtime.getSnapshot,\n runtime.getSnapshot,\n );\n}\n\nfunction useCadenzaSnapshotSelector<\n TProjectionState extends Record<string, any>,\n TSelected,\n>(\n selector: (snapshot: CadenzaReactRuntimeState<TProjectionState>) => TSelected,\n isEqual: EqualityComparator<TSelected> = DEFAULT_SELECTOR_EQUALITY,\n): TSelected {\n const runtime = getRequiredRuntime<TProjectionState, Record<string, any>>();\n const selectionCacheRef = useRef<{\n hasValue: boolean;\n value: TSelected;\n }>({\n hasValue: false,\n value: undefined as TSelected,\n });\n\n const getSelectedSnapshot = () => {\n const nextValue = selector(runtime.getSnapshot());\n const cached = selectionCacheRef.current;\n if (cached.hasValue && isEqual(cached.value, nextValue)) {\n return cached.value;\n }\n\n selectionCacheRef.current = {\n hasValue: true,\n value: nextValue,\n };\n return nextValue;\n };\n\n return useSyncExternalStore(\n runtime.subscribe,\n getSelectedSnapshot,\n getSelectedSnapshot,\n );\n}\n\nexport function useCadenzaProjectionSelector<\n TProjectionState extends Record<string, any> = Record<string, any>,\n TSelected = TProjectionState,\n>(\n selector: (state: TProjectionState) => TSelected,\n isEqual: EqualityComparator<TSelected> = DEFAULT_SELECTOR_EQUALITY,\n): TSelected {\n return useCadenzaSnapshotSelector<TProjectionState, TSelected>(\n (snapshot) => selector(snapshot.projectionState as TProjectionState),\n isEqual,\n );\n}\n\nexport function useCadenzaRuntimeReady(): boolean {\n return useCadenzaSnapshotSelector((snapshot) => snapshot.ready);\n}\n\nexport type { BrowserRuntimeProjectionBinding };\n","import type { BrowserRuntimeActorRuntimeState } from \"./createBrowserRuntimeActor\";\n\nexport interface ProjectionRuntimeSnapshot<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> {\n ready: boolean;\n projectionState: TProjectionState;\n}\n\nexport function cloneProjectionState<TProjectionState>(\n value: TProjectionState,\n): TProjectionState {\n if (Array.isArray(value)) {\n return value.map((item) => cloneProjectionState(item)) as TProjectionState;\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, nested]) => [\n key,\n cloneProjectionState(nested),\n ]),\n ) as TProjectionState;\n }\n\n return value;\n}\n\nexport function resolveInitialProjectionState<\n TProjectionState extends Record<string, any>,\n>(value: TProjectionState | (() => TProjectionState)): TProjectionState {\n const resolved =\n typeof value === \"function\"\n ? (value as () => TProjectionState)()\n : value;\n return cloneProjectionState(resolved);\n}\n\nexport function createProjectionRuntimeSnapshot<\n TProjectionState extends Record<string, any>,\n>(\n runtimeState: BrowserRuntimeActorRuntimeState<TProjectionState> | undefined,\n initialProjectionState: TProjectionState | (() => TProjectionState),\n): ProjectionRuntimeSnapshot<TProjectionState> {\n return {\n ready: runtimeState?.ready ?? false,\n projectionState:\n runtimeState?.projectionState ??\n resolveInitialProjectionState(initialProjectionState),\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,140 @@
1
+ import {
2
+ createProjectionRuntimeSnapshot
3
+ } from "../chunk-4XOTT2KM.mjs";
4
+
5
+ // src/react/index.ts
6
+ import {
7
+ createContext,
8
+ createElement,
9
+ useContext,
10
+ useRef,
11
+ useSyncExternalStore
12
+ } from "react";
13
+ var DEFAULT_SELECTOR_EQUALITY = Object.is;
14
+ var CadenzaRuntimeContext = createContext(
15
+ null
16
+ );
17
+ function resolveBootstrapUrl(bootstrapUrl) {
18
+ return typeof bootstrapUrl === "function" ? bootstrapUrl() : bootstrapUrl;
19
+ }
20
+ function resolveHydrationOptions(hydration) {
21
+ if (!hydration) {
22
+ return void 0;
23
+ }
24
+ return typeof hydration === "function" ? hydration() : hydration;
25
+ }
26
+ function getRequiredRuntime() {
27
+ const runtime = useContext(CadenzaRuntimeContext);
28
+ if (!runtime) {
29
+ throw new Error(
30
+ "CadenzaRuntimeProvider is required before using React Cadenza runtime hooks."
31
+ );
32
+ }
33
+ return runtime;
34
+ }
35
+ function createCadenzaReactRuntime(options) {
36
+ const {
37
+ cadenza,
38
+ service,
39
+ bootstrapUrl,
40
+ hydration,
41
+ initialProjectionState,
42
+ commands,
43
+ ...actorOptions
44
+ } = options;
45
+ const browserRuntimeOptions = {
46
+ ...actorOptions,
47
+ initialProjectionState,
48
+ service: {
49
+ ...service,
50
+ bootstrap: {
51
+ url: resolveBootstrapUrl(bootstrapUrl)
52
+ },
53
+ hydration: resolveHydrationOptions(hydration)
54
+ }
55
+ };
56
+ const runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);
57
+ let snapshot = createProjectionRuntimeSnapshot(
58
+ runtime.getRuntimeState(),
59
+ initialProjectionState
60
+ );
61
+ const runtimeCommands = commands ? commands({
62
+ cadenza,
63
+ runtime
64
+ }) : {};
65
+ return {
66
+ actor: runtime.actor,
67
+ actorHandle: runtime,
68
+ waitUntilReady: runtime.waitUntilReady,
69
+ inquire: runtime.inquire,
70
+ getRuntimeState: runtime.getRuntimeState,
71
+ subscribe: (listener) => runtime.subscribe((runtimeState) => {
72
+ snapshot = createProjectionRuntimeSnapshot(
73
+ runtimeState,
74
+ initialProjectionState
75
+ );
76
+ listener(runtimeState);
77
+ }),
78
+ getSnapshot: () => snapshot,
79
+ commands: runtimeCommands
80
+ };
81
+ }
82
+ function CadenzaRuntimeProvider({ runtime, children }) {
83
+ return createElement(CadenzaRuntimeContext.Provider, {
84
+ value: runtime,
85
+ children
86
+ });
87
+ }
88
+ function useCadenzaRuntime() {
89
+ return getRequiredRuntime();
90
+ }
91
+ function useCadenzaProjectionState() {
92
+ const runtime = getRequiredRuntime();
93
+ return useSyncExternalStore(
94
+ runtime.subscribe,
95
+ runtime.getSnapshot,
96
+ runtime.getSnapshot
97
+ );
98
+ }
99
+ function useCadenzaSnapshotSelector(selector, isEqual = DEFAULT_SELECTOR_EQUALITY) {
100
+ const runtime = getRequiredRuntime();
101
+ const selectionCacheRef = useRef({
102
+ hasValue: false,
103
+ value: void 0
104
+ });
105
+ const getSelectedSnapshot = () => {
106
+ const nextValue = selector(runtime.getSnapshot());
107
+ const cached = selectionCacheRef.current;
108
+ if (cached.hasValue && isEqual(cached.value, nextValue)) {
109
+ return cached.value;
110
+ }
111
+ selectionCacheRef.current = {
112
+ hasValue: true,
113
+ value: nextValue
114
+ };
115
+ return nextValue;
116
+ };
117
+ return useSyncExternalStore(
118
+ runtime.subscribe,
119
+ getSelectedSnapshot,
120
+ getSelectedSnapshot
121
+ );
122
+ }
123
+ function useCadenzaProjectionSelector(selector, isEqual = DEFAULT_SELECTOR_EQUALITY) {
124
+ return useCadenzaSnapshotSelector(
125
+ (snapshot) => selector(snapshot.projectionState),
126
+ isEqual
127
+ );
128
+ }
129
+ function useCadenzaRuntimeReady() {
130
+ return useCadenzaSnapshotSelector((snapshot) => snapshot.ready);
131
+ }
132
+ export {
133
+ CadenzaRuntimeProvider,
134
+ createCadenzaReactRuntime,
135
+ useCadenzaProjectionSelector,
136
+ useCadenzaProjectionState,
137
+ useCadenzaRuntime,
138
+ useCadenzaRuntimeReady
139
+ };
140
+ //# sourceMappingURL=index.mjs.map