@cadenza.io/service 2.18.2 → 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 +15295 -7234
  7. package/dist/browser/index.js.map +1 -1
  8. package/dist/browser/index.mjs +15279 -7234
  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 -22947
  25. package/dist/index.d.ts +244 -22947
  26. package/dist/index.js +19432 -10213
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +19382 -10214
  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 +64 -7
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/react/index.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"],"mappings":"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","names":[]}
@@ -0,0 +1,178 @@
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/vue/index.ts
21
+ var vue_exports = {};
22
+ __export(vue_exports, {
23
+ createCadenzaVueRuntime: () => createCadenzaVueRuntime,
24
+ useCadenzaProjectionSelector: () => useCadenzaProjectionSelector,
25
+ useCadenzaProjectionState: () => useCadenzaProjectionState,
26
+ useCadenzaRuntime: () => useCadenzaRuntime,
27
+ useCadenzaRuntimeReady: () => useCadenzaRuntimeReady,
28
+ useCadenzaRuntimeState: () => useCadenzaRuntimeState
29
+ });
30
+ module.exports = __toCommonJS(vue_exports);
31
+ var import_vue = require("vue");
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/vue/index.ts
60
+ var DEFAULT_SELECTOR_EQUALITY = Object.is;
61
+ var CADENZA_VUE_RUNTIME_KEY = /* @__PURE__ */ Symbol("CadenzaVueRuntime");
62
+ function resolveBootstrapUrl(bootstrapUrl) {
63
+ return typeof bootstrapUrl === "function" ? bootstrapUrl() : bootstrapUrl;
64
+ }
65
+ function resolveHydrationOptions(hydration) {
66
+ if (!hydration) {
67
+ return void 0;
68
+ }
69
+ return typeof hydration === "function" ? hydration() : hydration;
70
+ }
71
+ function getRequiredRuntime() {
72
+ const runtime = (0, import_vue.inject)(CADENZA_VUE_RUNTIME_KEY, null);
73
+ if (!runtime) {
74
+ throw new Error(
75
+ "Cadenza Vue runtime is not installed. Call app.use(runtime) before using Cadenza Vue composables."
76
+ );
77
+ }
78
+ return runtime;
79
+ }
80
+ function createCadenzaVueRuntime(options) {
81
+ const {
82
+ cadenza,
83
+ service,
84
+ bootstrapUrl,
85
+ hydration,
86
+ initialProjectionState,
87
+ commands,
88
+ ...actorOptions
89
+ } = options;
90
+ const browserRuntimeOptions = {
91
+ ...actorOptions,
92
+ initialProjectionState,
93
+ service: {
94
+ ...service,
95
+ bootstrap: {
96
+ url: resolveBootstrapUrl(bootstrapUrl)
97
+ },
98
+ hydration: resolveHydrationOptions(hydration)
99
+ }
100
+ };
101
+ const runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);
102
+ const snapshotRef = (0, import_vue.shallowRef)(
103
+ createProjectionRuntimeSnapshot(
104
+ runtime.getRuntimeState(),
105
+ initialProjectionState
106
+ )
107
+ );
108
+ const unsubscribe = runtime.subscribe((runtimeState) => {
109
+ snapshotRef.value = createProjectionRuntimeSnapshot(
110
+ runtimeState,
111
+ initialProjectionState
112
+ );
113
+ });
114
+ let disposed = false;
115
+ const runtimeCommands = commands ? commands({
116
+ cadenza,
117
+ runtime
118
+ }) : {};
119
+ const runtimeObject = {
120
+ actor: runtime.actor,
121
+ actorHandle: runtime,
122
+ waitUntilReady: runtime.waitUntilReady,
123
+ inquire: runtime.inquire,
124
+ getRuntimeState: runtime.getRuntimeState,
125
+ subscribe: runtime.subscribe,
126
+ snapshot: (0, import_vue.readonly)(snapshotRef),
127
+ projectionState: (0, import_vue.computed)(
128
+ () => snapshotRef.value.projectionState
129
+ ),
130
+ ready: (0, import_vue.computed)(() => snapshotRef.value.ready),
131
+ commands: runtimeCommands,
132
+ install(app) {
133
+ app.provide(CADENZA_VUE_RUNTIME_KEY, runtimeObject);
134
+ app.config.globalProperties.$cadenzaRuntime = runtimeObject;
135
+ },
136
+ dispose() {
137
+ if (disposed) {
138
+ return;
139
+ }
140
+ disposed = true;
141
+ unsubscribe();
142
+ }
143
+ };
144
+ return (0, import_vue.markRaw)(runtimeObject);
145
+ }
146
+ function useCadenzaRuntime() {
147
+ return getRequiredRuntime();
148
+ }
149
+ function useCadenzaRuntimeState() {
150
+ return getRequiredRuntime().snapshot;
151
+ }
152
+ function useCadenzaProjectionState() {
153
+ return getRequiredRuntime().projectionState;
154
+ }
155
+ function useCadenzaProjectionSelector(selector, isEqual = DEFAULT_SELECTOR_EQUALITY) {
156
+ const projectionState = useCadenzaProjectionState();
157
+ const selectedRef = (0, import_vue.shallowRef)(
158
+ selector(projectionState.value)
159
+ );
160
+ (0, import_vue.watch)(
161
+ projectionState,
162
+ (nextProjectionState) => {
163
+ const nextSelected = selector(nextProjectionState);
164
+ if (isEqual(selectedRef.value, nextSelected)) {
165
+ return;
166
+ }
167
+ selectedRef.value = nextSelected;
168
+ },
169
+ {
170
+ flush: "sync"
171
+ }
172
+ );
173
+ return (0, import_vue.readonly)(selectedRef);
174
+ }
175
+ function useCadenzaRuntimeReady() {
176
+ return getRequiredRuntime().ready;
177
+ }
178
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/vue/index.ts","../../../src/frontend/runtimeProjectionState.ts"],"sourcesContent":["import {\n computed,\n inject,\n markRaw,\n readonly,\n shallowRef,\n watch,\n type App,\n type ComputedRef,\n type InjectionKey,\n type ShallowRef,\n} from \"vue\";\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 CadenzaVueRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> extends ProjectionRuntimeSnapshot<TProjectionState> {}\n\nexport interface CadenzaVueRuntime<\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 snapshot: Readonly<ShallowRef<CadenzaVueRuntimeState<TProjectionState>>>;\n projectionState: ComputedRef<TProjectionState>;\n ready: ComputedRef<boolean>;\n commands: TCommands;\n install: (app: App) => void;\n dispose: () => void;\n}\n\nexport interface CadenzaVueRuntimeOptions<\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\ntype EqualityComparator<TSelected> = (\n previous: TSelected,\n next: TSelected,\n) => boolean;\n\nconst DEFAULT_SELECTOR_EQUALITY = Object.is;\nconst CADENZA_VUE_RUNTIME_KEY: InjectionKey<CadenzaVueRuntime<any, any>> =\n Symbol(\"CadenzaVueRuntime\");\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>(): CadenzaVueRuntime<TProjectionState, TCommands> {\n const runtime = inject(CADENZA_VUE_RUNTIME_KEY, null);\n if (!runtime) {\n throw new Error(\n \"Cadenza Vue runtime is not installed. Call app.use(runtime) before using Cadenza Vue composables.\",\n );\n }\n\n return runtime as CadenzaVueRuntime<TProjectionState, TCommands>;\n}\n\nexport function createCadenzaVueRuntime<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n>(options: CadenzaVueRuntimeOptions<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 const snapshotRef = shallowRef<CadenzaVueRuntimeState<TProjectionState>>(\n createProjectionRuntimeSnapshot(\n runtime.getRuntimeState(),\n initialProjectionState,\n ),\n );\n const unsubscribe = runtime.subscribe((runtimeState) => {\n snapshotRef.value = createProjectionRuntimeSnapshot(\n runtimeState,\n initialProjectionState,\n );\n });\n let disposed = false;\n const runtimeCommands = commands\n ? commands({\n cadenza,\n runtime,\n })\n : ({} as TCommands);\n const runtimeObject: CadenzaVueRuntime<TProjectionState, TCommands> = {\n actor: runtime.actor,\n actorHandle: runtime,\n waitUntilReady: runtime.waitUntilReady,\n inquire: runtime.inquire,\n getRuntimeState: runtime.getRuntimeState,\n subscribe: runtime.subscribe,\n snapshot: readonly(snapshotRef) as Readonly<\n ShallowRef<CadenzaVueRuntimeState<TProjectionState>>\n >,\n projectionState: computed(\n () => snapshotRef.value.projectionState as TProjectionState,\n ),\n ready: computed(() => snapshotRef.value.ready),\n commands: runtimeCommands,\n install(app: App) {\n app.provide(CADENZA_VUE_RUNTIME_KEY, runtimeObject);\n app.config.globalProperties.$cadenzaRuntime = runtimeObject;\n },\n dispose() {\n if (disposed) {\n return;\n }\n\n disposed = true;\n unsubscribe();\n },\n };\n\n return markRaw(runtimeObject) as CadenzaVueRuntime<TProjectionState, TCommands>;\n}\n\nexport function useCadenzaRuntime<\n TRuntime extends CadenzaVueRuntime<any, any> = CadenzaVueRuntime<any, any>,\n>(): TRuntime {\n return getRequiredRuntime<any, any>() as TRuntime;\n}\n\nexport function useCadenzaRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): Readonly<ShallowRef<CadenzaVueRuntimeState<TProjectionState>>> {\n return getRequiredRuntime<TProjectionState, Record<string, any>>().snapshot;\n}\n\nexport function useCadenzaProjectionState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): ComputedRef<TProjectionState> {\n return getRequiredRuntime<TProjectionState, Record<string, any>>()\n .projectionState as ComputedRef<TProjectionState>;\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): Readonly<ShallowRef<TSelected>> {\n const projectionState = useCadenzaProjectionState<TProjectionState>();\n const selectedRef = shallowRef<TSelected>(\n selector(projectionState.value as TProjectionState),\n );\n\n watch(\n projectionState,\n (nextProjectionState) => {\n const nextSelected = selector(nextProjectionState as TProjectionState);\n if (isEqual(selectedRef.value, nextSelected)) {\n return;\n }\n\n selectedRef.value = nextSelected;\n },\n {\n flush: \"sync\",\n },\n );\n\n return readonly(selectedRef) as Readonly<ShallowRef<TSelected>>;\n}\n\nexport function useCadenzaRuntimeReady(): ComputedRef<boolean> {\n return getRequiredRuntime<Record<string, any>, Record<string, any>>().ready;\n}\n\nexport type { BrowserRuntimeProjectionBinding };\n\ndeclare module \"vue\" {\n interface ComponentCustomProperties {\n $cadenzaRuntime: CadenzaVueRuntime<any, any>;\n }\n}\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/vue/index.ts
6
+ import {
7
+ computed,
8
+ inject,
9
+ markRaw,
10
+ readonly,
11
+ shallowRef,
12
+ watch
13
+ } from "vue";
14
+ var DEFAULT_SELECTOR_EQUALITY = Object.is;
15
+ var CADENZA_VUE_RUNTIME_KEY = /* @__PURE__ */ Symbol("CadenzaVueRuntime");
16
+ function resolveBootstrapUrl(bootstrapUrl) {
17
+ return typeof bootstrapUrl === "function" ? bootstrapUrl() : bootstrapUrl;
18
+ }
19
+ function resolveHydrationOptions(hydration) {
20
+ if (!hydration) {
21
+ return void 0;
22
+ }
23
+ return typeof hydration === "function" ? hydration() : hydration;
24
+ }
25
+ function getRequiredRuntime() {
26
+ const runtime = inject(CADENZA_VUE_RUNTIME_KEY, null);
27
+ if (!runtime) {
28
+ throw new Error(
29
+ "Cadenza Vue runtime is not installed. Call app.use(runtime) before using Cadenza Vue composables."
30
+ );
31
+ }
32
+ return runtime;
33
+ }
34
+ function createCadenzaVueRuntime(options) {
35
+ const {
36
+ cadenza,
37
+ service,
38
+ bootstrapUrl,
39
+ hydration,
40
+ initialProjectionState,
41
+ commands,
42
+ ...actorOptions
43
+ } = options;
44
+ const browserRuntimeOptions = {
45
+ ...actorOptions,
46
+ initialProjectionState,
47
+ service: {
48
+ ...service,
49
+ bootstrap: {
50
+ url: resolveBootstrapUrl(bootstrapUrl)
51
+ },
52
+ hydration: resolveHydrationOptions(hydration)
53
+ }
54
+ };
55
+ const runtime = cadenza.createBrowserRuntimeActor(browserRuntimeOptions);
56
+ const snapshotRef = shallowRef(
57
+ createProjectionRuntimeSnapshot(
58
+ runtime.getRuntimeState(),
59
+ initialProjectionState
60
+ )
61
+ );
62
+ const unsubscribe = runtime.subscribe((runtimeState) => {
63
+ snapshotRef.value = createProjectionRuntimeSnapshot(
64
+ runtimeState,
65
+ initialProjectionState
66
+ );
67
+ });
68
+ let disposed = false;
69
+ const runtimeCommands = commands ? commands({
70
+ cadenza,
71
+ runtime
72
+ }) : {};
73
+ const runtimeObject = {
74
+ actor: runtime.actor,
75
+ actorHandle: runtime,
76
+ waitUntilReady: runtime.waitUntilReady,
77
+ inquire: runtime.inquire,
78
+ getRuntimeState: runtime.getRuntimeState,
79
+ subscribe: runtime.subscribe,
80
+ snapshot: readonly(snapshotRef),
81
+ projectionState: computed(
82
+ () => snapshotRef.value.projectionState
83
+ ),
84
+ ready: computed(() => snapshotRef.value.ready),
85
+ commands: runtimeCommands,
86
+ install(app) {
87
+ app.provide(CADENZA_VUE_RUNTIME_KEY, runtimeObject);
88
+ app.config.globalProperties.$cadenzaRuntime = runtimeObject;
89
+ },
90
+ dispose() {
91
+ if (disposed) {
92
+ return;
93
+ }
94
+ disposed = true;
95
+ unsubscribe();
96
+ }
97
+ };
98
+ return markRaw(runtimeObject);
99
+ }
100
+ function useCadenzaRuntime() {
101
+ return getRequiredRuntime();
102
+ }
103
+ function useCadenzaRuntimeState() {
104
+ return getRequiredRuntime().snapshot;
105
+ }
106
+ function useCadenzaProjectionState() {
107
+ return getRequiredRuntime().projectionState;
108
+ }
109
+ function useCadenzaProjectionSelector(selector, isEqual = DEFAULT_SELECTOR_EQUALITY) {
110
+ const projectionState = useCadenzaProjectionState();
111
+ const selectedRef = shallowRef(
112
+ selector(projectionState.value)
113
+ );
114
+ watch(
115
+ projectionState,
116
+ (nextProjectionState) => {
117
+ const nextSelected = selector(nextProjectionState);
118
+ if (isEqual(selectedRef.value, nextSelected)) {
119
+ return;
120
+ }
121
+ selectedRef.value = nextSelected;
122
+ },
123
+ {
124
+ flush: "sync"
125
+ }
126
+ );
127
+ return readonly(selectedRef);
128
+ }
129
+ function useCadenzaRuntimeReady() {
130
+ return getRequiredRuntime().ready;
131
+ }
132
+ export {
133
+ createCadenzaVueRuntime,
134
+ useCadenzaProjectionSelector,
135
+ useCadenzaProjectionState,
136
+ useCadenzaRuntime,
137
+ useCadenzaRuntimeReady,
138
+ useCadenzaRuntimeState
139
+ };
140
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/vue/index.ts"],"sourcesContent":["import {\n computed,\n inject,\n markRaw,\n readonly,\n shallowRef,\n watch,\n type App,\n type ComputedRef,\n type InjectionKey,\n type ShallowRef,\n} from \"vue\";\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 CadenzaVueRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n> extends ProjectionRuntimeSnapshot<TProjectionState> {}\n\nexport interface CadenzaVueRuntime<\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 snapshot: Readonly<ShallowRef<CadenzaVueRuntimeState<TProjectionState>>>;\n projectionState: ComputedRef<TProjectionState>;\n ready: ComputedRef<boolean>;\n commands: TCommands;\n install: (app: App) => void;\n dispose: () => void;\n}\n\nexport interface CadenzaVueRuntimeOptions<\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\ntype EqualityComparator<TSelected> = (\n previous: TSelected,\n next: TSelected,\n) => boolean;\n\nconst DEFAULT_SELECTOR_EQUALITY = Object.is;\nconst CADENZA_VUE_RUNTIME_KEY: InjectionKey<CadenzaVueRuntime<any, any>> =\n Symbol(\"CadenzaVueRuntime\");\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>(): CadenzaVueRuntime<TProjectionState, TCommands> {\n const runtime = inject(CADENZA_VUE_RUNTIME_KEY, null);\n if (!runtime) {\n throw new Error(\n \"Cadenza Vue runtime is not installed. Call app.use(runtime) before using Cadenza Vue composables.\",\n );\n }\n\n return runtime as CadenzaVueRuntime<TProjectionState, TCommands>;\n}\n\nexport function createCadenzaVueRuntime<\n TProjectionState extends Record<string, any>,\n TCommands extends Record<string, any> = Record<string, never>,\n>(options: CadenzaVueRuntimeOptions<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 const snapshotRef = shallowRef<CadenzaVueRuntimeState<TProjectionState>>(\n createProjectionRuntimeSnapshot(\n runtime.getRuntimeState(),\n initialProjectionState,\n ),\n );\n const unsubscribe = runtime.subscribe((runtimeState) => {\n snapshotRef.value = createProjectionRuntimeSnapshot(\n runtimeState,\n initialProjectionState,\n );\n });\n let disposed = false;\n const runtimeCommands = commands\n ? commands({\n cadenza,\n runtime,\n })\n : ({} as TCommands);\n const runtimeObject: CadenzaVueRuntime<TProjectionState, TCommands> = {\n actor: runtime.actor,\n actorHandle: runtime,\n waitUntilReady: runtime.waitUntilReady,\n inquire: runtime.inquire,\n getRuntimeState: runtime.getRuntimeState,\n subscribe: runtime.subscribe,\n snapshot: readonly(snapshotRef) as Readonly<\n ShallowRef<CadenzaVueRuntimeState<TProjectionState>>\n >,\n projectionState: computed(\n () => snapshotRef.value.projectionState as TProjectionState,\n ),\n ready: computed(() => snapshotRef.value.ready),\n commands: runtimeCommands,\n install(app: App) {\n app.provide(CADENZA_VUE_RUNTIME_KEY, runtimeObject);\n app.config.globalProperties.$cadenzaRuntime = runtimeObject;\n },\n dispose() {\n if (disposed) {\n return;\n }\n\n disposed = true;\n unsubscribe();\n },\n };\n\n return markRaw(runtimeObject) as CadenzaVueRuntime<TProjectionState, TCommands>;\n}\n\nexport function useCadenzaRuntime<\n TRuntime extends CadenzaVueRuntime<any, any> = CadenzaVueRuntime<any, any>,\n>(): TRuntime {\n return getRequiredRuntime<any, any>() as TRuntime;\n}\n\nexport function useCadenzaRuntimeState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): Readonly<ShallowRef<CadenzaVueRuntimeState<TProjectionState>>> {\n return getRequiredRuntime<TProjectionState, Record<string, any>>().snapshot;\n}\n\nexport function useCadenzaProjectionState<\n TProjectionState extends Record<string, any> = Record<string, any>,\n>(): ComputedRef<TProjectionState> {\n return getRequiredRuntime<TProjectionState, Record<string, any>>()\n .projectionState as ComputedRef<TProjectionState>;\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): Readonly<ShallowRef<TSelected>> {\n const projectionState = useCadenzaProjectionState<TProjectionState>();\n const selectedRef = shallowRef<TSelected>(\n selector(projectionState.value as TProjectionState),\n );\n\n watch(\n projectionState,\n (nextProjectionState) => {\n const nextSelected = selector(nextProjectionState as TProjectionState);\n if (isEqual(selectedRef.value, nextSelected)) {\n return;\n }\n\n selectedRef.value = nextSelected;\n },\n {\n flush: \"sync\",\n },\n );\n\n return readonly(selectedRef) as Readonly<ShallowRef<TSelected>>;\n}\n\nexport function useCadenzaRuntimeReady(): ComputedRef<boolean> {\n return getRequiredRuntime<Record<string, any>, Record<string, any>>().ready;\n}\n\nexport type { BrowserRuntimeProjectionBinding };\n\ndeclare module \"vue\" {\n interface ComponentCustomProperties {\n $cadenzaRuntime: CadenzaVueRuntime<any, any>;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,31 @@
1
+ // src/frontend/runtimeProjectionState.ts
2
+ function cloneProjectionState(value) {
3
+ if (Array.isArray(value)) {
4
+ return value.map((item) => cloneProjectionState(item));
5
+ }
6
+ if (value && typeof value === "object") {
7
+ return Object.fromEntries(
8
+ Object.entries(value).map(([key, nested]) => [
9
+ key,
10
+ cloneProjectionState(nested)
11
+ ])
12
+ );
13
+ }
14
+ return value;
15
+ }
16
+ function resolveInitialProjectionState(value) {
17
+ const resolved = typeof value === "function" ? value() : value;
18
+ return cloneProjectionState(resolved);
19
+ }
20
+ function createProjectionRuntimeSnapshot(runtimeState, initialProjectionState) {
21
+ return {
22
+ ready: runtimeState?.ready ?? false,
23
+ projectionState: runtimeState?.projectionState ?? resolveInitialProjectionState(initialProjectionState)
24
+ };
25
+ }
26
+
27
+ export {
28
+ resolveInitialProjectionState,
29
+ createProjectionRuntimeSnapshot
30
+ };
31
+ //# sourceMappingURL=chunk-DBCS4XXY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/frontend/runtimeProjectionState.ts"],"sourcesContent":["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":";AASO,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;","names":[]}