@field/cascade 0.10.0 → 0.12.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 (229) hide show
  1. package/AGENTS.md +25 -5
  2. package/ARCHITECTURE.md +5 -4
  3. package/CHANGELOG.md +382 -0
  4. package/README.md +1 -2
  5. package/dist/assets/AgentPanel-1JugFjE4.css +1 -0
  6. package/dist/assets/AgentPanel-BDL5MddA.js +5 -0
  7. package/dist/assets/{CodeEditor-DSZBpzdy.js → CodeEditor-C-xYG-Wn.js} +120 -120
  8. package/dist/assets/CodePanel-CtXd50m6.js +2 -0
  9. package/dist/assets/CookInfoPanel-B3NMhKJF.css +1 -0
  10. package/dist/assets/CookInfoPanel-DG4_TRsX.js +2 -0
  11. package/dist/assets/CustomNodeDialog-CHfZUs-r.js +1 -0
  12. package/dist/assets/DefinitionNode-CaRTXQ_b.js +1 -0
  13. package/dist/assets/DefinitionPanel-C3CxZY9r.js +1 -0
  14. package/dist/assets/DefinitionPanel-VNLnAiQD.css +1 -0
  15. package/dist/assets/OpenGraphDialog-BLdr6k_q.js +1 -0
  16. package/dist/assets/ProjectSettings-ZnvmIAir.js +2 -0
  17. package/dist/assets/{SettingsDialog-p25h3tj0.js → SettingsDialog-CBX3Wa87.js} +1 -1
  18. package/dist/assets/TimelinePanel-CDeR0arY.css +1 -0
  19. package/dist/assets/TimelinePanel-CWgnFH1e.js +1 -0
  20. package/dist/assets/{VersionHistoryDialog-DzFLUotB.js → VersionHistoryDialog-BOSoW1R-.js} +1 -1
  21. package/dist/assets/assert-BO2_erPD.js +1 -0
  22. package/dist/assets/assert-hvykGCnP.js +1 -0
  23. package/dist/assets/builder-BmBKcDix.js +1 -0
  24. package/dist/assets/camera-DFF7YA3F.js +1 -0
  25. package/dist/assets/checks-DAvyO9Gf.js +1 -0
  26. package/dist/assets/contactSheet-N1NcaWxw.js +2 -0
  27. package/dist/assets/{core-BICrEt0y.js → core-DB-MkGjj.js} +3 -4
  28. package/dist/assets/coreTypes-DtnDATZ7.js +1 -0
  29. package/dist/assets/{cssMode-D7TXw57I.js → cssMode-DPVckSOc.js} +1 -1
  30. package/dist/assets/definitions-B227e7f_.js +1 -0
  31. package/dist/assets/definitions-D0WOUJd7.js +1 -0
  32. package/dist/assets/{editor.api-DvkCO3ko.js → editor.api-Dkutg_Z1.js} +1 -1
  33. package/dist/assets/expressions-X-Z-GrgW.js +5 -0
  34. package/dist/assets/file-DAL6IfjV.js +1 -0
  35. package/dist/assets/filters-D3k1LRMa.js +1 -0
  36. package/dist/assets/{freemarker2-BA2lxsF1.js → freemarker2-CLiLKk3B.js} +1 -1
  37. package/dist/assets/generators-BhDxRAFC.js +1 -0
  38. package/dist/assets/geo-BsMImJIJ.js +1 -0
  39. package/dist/assets/geo-C4YngDob.js +2 -0
  40. package/dist/assets/{handlebars-BcDiyPd8.js → handlebars-CcD3aMeL.js} +1 -1
  41. package/dist/assets/{html-C7O4TyhX.js → html-DvZWGfqb.js} +1 -1
  42. package/dist/assets/{htmlMode-WaDGF3Mj.js → htmlMode-DUD3VaoN.js} +1 -1
  43. package/dist/assets/image-0SfH-snh.js +1 -0
  44. package/dist/assets/image-Ck-RdGU4.js +2 -0
  45. package/dist/assets/index-BWnrmIB9.js +137 -0
  46. package/dist/assets/index-DIaxEONI.css +1 -0
  47. package/dist/assets/io-BGmt2g0D.js +1 -0
  48. package/dist/assets/{javascript-CpIEK7tz.js → javascript-Cap2ahgh.js} +1 -1
  49. package/dist/assets/{jsonMode-B2FltW0f.js → jsonMode-B0uLjp9C.js} +1 -1
  50. package/dist/assets/{liquid-CN6FFHZE.js → liquid-CnxwhfLn.js} +1 -1
  51. package/dist/assets/{lspLanguageFeatures-QhV9XtLp.js → lspLanguageFeatures-Dn9hlKX6.js} +1 -1
  52. package/dist/assets/math-GeULS-sk.js +1 -0
  53. package/dist/assets/{mdx-DE89pafV.js → mdx-BV3jbrVa.js} +1 -1
  54. package/dist/assets/pop-KMF_qloi.js +1 -0
  55. package/dist/assets/preload-helper-Czpn1I53.js +1 -0
  56. package/dist/assets/{python-ByTllTB9.js → python-CGyFk4XK.js} +1 -1
  57. package/dist/assets/{razor-USYlRRCE.js → razor-CQfzX3-N.js} +1 -1
  58. package/dist/assets/remap-5SjXQU-q.js +1 -0
  59. package/dist/assets/renderMarkdown-ork0Oir7.js +67 -0
  60. package/dist/assets/studioImages-CAyH-0Pl.js +1 -0
  61. package/dist/assets/text-ZpX7qNkx.js +2 -0
  62. package/dist/assets/time-P_OiBhcf.js +1 -0
  63. package/dist/assets/{tsMode-BXpN8iUz.js → tsMode-BOeXzO9H.js} +1 -1
  64. package/dist/assets/{typescript-DInBjGQQ.js → typescript-J1SnE_Tu.js} +1 -1
  65. package/dist/assets/{workers-C7Ye5B7D.js → workers-CYwwTiVF.js} +1 -1
  66. package/dist/assets/{xml-U0Uocqyo.js → xml-DnPRNzK9.js} +1 -1
  67. package/dist/assets/{yaml-CBw_PVYf.js → yaml-BmmYBNa9.js} +1 -1
  68. package/dist/cli/DefinitionNode-P7AA4TAU.js +15 -0
  69. package/dist/cli/Graph-OB6EWSGL.js +2975 -0
  70. package/dist/cli/assert-GROGQNCQ.js +25 -0
  71. package/dist/cli/checks-3WB44XBL.js +189 -0
  72. package/dist/cli/chunk-2JEU3MGB.js +1125 -0
  73. package/dist/cli/chunk-2KXB47FP.js +115 -0
  74. package/dist/cli/chunk-3RXL5GHB.js +816 -0
  75. package/dist/cli/chunk-53LGFPWX.js +138 -0
  76. package/dist/cli/chunk-5ORUQ6ES.js +267 -0
  77. package/dist/cli/chunk-73S4JZXK.js +336 -0
  78. package/dist/cli/chunk-7QE2ZNSN.js +121 -0
  79. package/dist/cli/chunk-BP7UKF36.js +376 -0
  80. package/dist/cli/chunk-BPODRH52.js +201 -0
  81. package/dist/cli/chunk-BZ63XQ3I.js +1301 -0
  82. package/dist/cli/chunk-CKS2FQWR.js +89 -0
  83. package/dist/cli/chunk-CO22XHNG.js +593 -0
  84. package/dist/cli/chunk-CTPLRSWF.js +2197 -0
  85. package/dist/cli/chunk-DEQSEFFH.js +153 -0
  86. package/dist/cli/chunk-EU4ZFZ7Y.js +122 -0
  87. package/dist/cli/chunk-EZRWJ4G2.js +104 -0
  88. package/dist/cli/chunk-FWMSGKEH.js +71 -0
  89. package/dist/cli/chunk-G23A2BZZ.js +705 -0
  90. package/dist/cli/chunk-GRIN2DDP.js +1465 -0
  91. package/dist/cli/chunk-HFHWYL55.js +139 -0
  92. package/dist/cli/chunk-HSNOBIVT.js +263 -0
  93. package/dist/cli/chunk-ICH7N5PN.js +26 -0
  94. package/dist/cli/chunk-J7VK7MNF.js +418 -0
  95. package/dist/cli/chunk-JVOCK5W4.js +83 -0
  96. package/dist/cli/chunk-KBGUO27Q.js +15 -0
  97. package/dist/cli/chunk-KH4MUBKF.js +1551 -0
  98. package/dist/cli/chunk-L6B6FUQP.js +330 -0
  99. package/dist/cli/chunk-LTXWBXOM.js +438 -0
  100. package/dist/cli/chunk-MI5JLQYA.js +220 -0
  101. package/dist/cli/chunk-MP653A5O.js +3766 -0
  102. package/dist/cli/chunk-NJFMDXHR.js +320 -0
  103. package/dist/cli/chunk-OM6BEME6.js +267 -0
  104. package/dist/cli/chunk-OWWBYLHC.js +136 -0
  105. package/dist/cli/chunk-QQPA2ZHH.js +273 -0
  106. package/dist/cli/chunk-RUU3YWXU.js +99 -0
  107. package/dist/cli/chunk-RXDIMXN5.js +98 -0
  108. package/dist/cli/chunk-ST6LROUG.js +267 -0
  109. package/dist/cli/chunk-TJW67QSI.js +225 -0
  110. package/dist/cli/chunk-WD62JIP6.js +118 -0
  111. package/dist/cli/chunk-WGKPJZDY.js +364 -0
  112. package/dist/cli/chunk-X4WKAOQP.js +634 -0
  113. package/dist/cli/chunk-X566FWBV.js +156 -0
  114. package/dist/cli/chunk-YH637PDL.js +317 -0
  115. package/dist/cli/chunk-ZL4JTG5Y.js +37 -0
  116. package/dist/cli/chunk-ZSCUZE6I.js +112 -0
  117. package/dist/cli/cliCommands-JJN5Z3ZC.js +3470 -0
  118. package/dist/cli/commands-PHYFYA3F.js +1374 -0
  119. package/dist/cli/contactSheet-2PQVRUFW.js +11 -0
  120. package/dist/cli/definitions-BPOPW52L.js +32 -0
  121. package/dist/cli/doctorCommand-ORWQRNYP.js +106 -0
  122. package/dist/cli/edit-S5KEQ5RA.js +28 -0
  123. package/dist/cli/editorCommands-NFR32JOY.js +41 -0
  124. package/dist/cli/encode-ICPEPMH5.js +17 -0
  125. package/dist/cli/file-3HTQHPYQ.js +41 -0
  126. package/dist/cli/filters-6ODFWYK4.js +379 -0
  127. package/dist/cli/frames-LSAUBZ7P.js +16 -0
  128. package/dist/cli/generators-YU7GB4MD.js +210 -0
  129. package/dist/cli/geo-6ZPGKZRU.js +43 -0
  130. package/dist/cli/graphCommands-EOUOBOIJ.js +184 -0
  131. package/dist/cli/graphFile-YTGJB5F5.js +292 -0
  132. package/dist/cli/headlessCanvas-ENRHC7GS.js +16 -0
  133. package/dist/cli/helpCommand-PULH6ZYB.js +157 -0
  134. package/dist/cli/image-TXELZZK5.js +55 -0
  135. package/dist/cli/index.js +100 -30756
  136. package/dist/cli/math-RSYRQ3C6.js +16 -0
  137. package/dist/cli/mcp-JVZFQOEX.js +164 -0
  138. package/dist/cli/parity-X6DEH2DV.js +334 -0
  139. package/dist/cli/pop-B7SIIYKN.js +39 -0
  140. package/dist/cli/project-VYGIA7JX.js +12 -0
  141. package/dist/cli/projectDefinition-F3D7UIHJ.js +27 -0
  142. package/dist/cli/projectRuntime-2Q4JKEH3.js +55 -0
  143. package/dist/cli/registerStandardNodes-BXJCB6E4.js +744 -0
  144. package/dist/cli/render-PT4MWI6U.js +438 -0
  145. package/dist/cli/runCommand-HNPQVZMS.js +198 -0
  146. package/dist/cli/runner-5XPXVW7J.js +43 -0
  147. package/dist/cli/runtime/image.ts +302 -0
  148. package/dist/cli/runtime/io.ts +78 -0
  149. package/dist/cli/runtime/stage.ts +4 -1
  150. package/dist/cli/share-MHF6TNRK.js +166 -0
  151. package/dist/cli/stageCache-TY2BFZJR.js +15 -0
  152. package/dist/cli/stageRunner-KY2EJP7X.js +10 -0
  153. package/dist/cli/text-MB3EKR4H.js +126 -0
  154. package/dist/cli/verbs-PI2JH5FI.js +19 -0
  155. package/dist/cli/webBuild-WPPMGGW7.js +44 -0
  156. package/dist/contracts/capabilities.d.ts +18 -1
  157. package/dist/contracts/color.d.ts +8 -0
  158. package/dist/contracts/color.js +23 -0
  159. package/dist/contracts/definition.d.ts +10 -0
  160. package/dist/contracts/documentFormat.d.ts +18 -0
  161. package/dist/contracts/documentFormat.js +195 -0
  162. package/dist/contracts/editor.d.ts +17 -0
  163. package/dist/contracts/index.d.ts +1 -0
  164. package/dist/contracts/index.js +1 -0
  165. package/dist/contracts/schema.d.ts +1 -1
  166. package/dist/contracts/schema.js +1 -0
  167. package/dist/contracts/validate.js +11 -1
  168. package/dist/contracts/values.d.ts +24 -0
  169. package/dist/image.d.ts +156 -0
  170. package/dist/image.js +161 -0
  171. package/dist/index.html +8 -2
  172. package/dist/io.d.ts +29 -0
  173. package/dist/io.js +40 -0
  174. package/dist/player/app.js +3 -2
  175. package/dist/player/editor.js +35 -9
  176. package/dist/player/editorEngine.js +3 -2
  177. package/dist/runtime/builtins/assert/checks.d.ts +18 -0
  178. package/dist/runtime/builtins/assert/checks.js +207 -0
  179. package/dist/runtime/builtins/assert/definitions.d.ts +130 -0
  180. package/dist/runtime/builtins/assert/definitions.js +54 -0
  181. package/dist/runtime/builtins/assert/index.d.ts +152 -0
  182. package/dist/runtime/builtins/assert/index.js +36 -0
  183. package/dist/runtime/builtins/image/contactSheet.d.ts +64 -0
  184. package/dist/runtime/builtins/image/contactSheet.js +150 -0
  185. package/dist/runtime/builtins/image/definitions.d.ts +950 -0
  186. package/dist/runtime/builtins/image/definitions.js +343 -0
  187. package/dist/runtime/builtins/image/file.d.ts +8 -0
  188. package/dist/runtime/builtins/image/file.js +37 -0
  189. package/dist/runtime/builtins/image/filters.d.ts +8 -0
  190. package/dist/runtime/builtins/image/filters.js +394 -0
  191. package/dist/runtime/builtins/image/generators.d.ts +7 -0
  192. package/dist/runtime/builtins/image/generators.js +144 -0
  193. package/dist/runtime/builtins/image/index.d.ts +952 -0
  194. package/dist/runtime/builtins/image/index.js +44 -0
  195. package/dist/runtime/builtins/image/io.d.ts +100 -0
  196. package/dist/runtime/builtins/image/io.js +142 -0
  197. package/dist/runtime/builtins/image/planar.d.ts +55 -0
  198. package/dist/runtime/builtins/image/planar.js +274 -0
  199. package/dist/runtime/builtins/image/simplex.d.ts +22 -0
  200. package/dist/runtime/builtins/image/simplex.js +92 -0
  201. package/dist/runtime/builtins/image/text.d.ts +4 -0
  202. package/dist/runtime/builtins/image/text.js +141 -0
  203. package/dist/runtime/builtins/index.d.ts +3 -0
  204. package/dist/runtime/builtins/index.js +7 -0
  205. package/dist/runtime/gpu.d.ts +25 -0
  206. package/dist/runtime/gpu.js +40 -0
  207. package/dist/runtime/runtime.d.ts +2 -0
  208. package/dist/runtime/runtime.js +268 -44
  209. package/dist/runtime/types.d.ts +30 -0
  210. package/dist/stage.js +4 -1
  211. package/doc/CLI_REFERENCE.md +91 -2
  212. package/doc/EDITOR_EXPORT.md +37 -2
  213. package/doc/MCP.md +18 -1
  214. package/doc/NODE_REFERENCE.md +424 -10
  215. package/doc/PROJECT_AUTHORING.md +222 -7
  216. package/package.json +19 -4
  217. package/dist/assets/CodePanel-sY6sZa7B.js +0 -2
  218. package/dist/assets/CustomNodeDialog-BRKnqZhp.js +0 -1
  219. package/dist/assets/ExportDialog-C7dVGua4.js +0 -358
  220. package/dist/assets/ExportDialog-DOq0flMV.css +0 -1
  221. package/dist/assets/OpenGraphDialog-ZsgL-iwr.js +0 -1
  222. package/dist/assets/ProjectSettings-Cw17nNe3.js +0 -2
  223. package/dist/assets/definitions-DUww2Rt-.js +0 -1
  224. package/dist/assets/geo-C2RHOVHC.js +0 -1
  225. package/dist/assets/image-DR4oeyJB.js +0 -2062
  226. package/dist/assets/index-7vae6YFC.css +0 -1
  227. package/dist/assets/index-DyvDC6pS.js +0 -219
  228. package/dist/assets/math-DaDEgWKt.js +0 -1
  229. package/dist/assets/pop-pLH7L0PW.js +0 -1
@@ -0,0 +1,330 @@
1
+ // packages/contracts/src/bundle.ts
2
+ function bundleFieldType(definition) {
3
+ if (!definition) return "any";
4
+ return typeof definition === "string" ? definition : definition.type;
5
+ }
6
+ function bundleSchemasCompatible(output, input) {
7
+ return !output || !input || output === input;
8
+ }
9
+ function isBundleValue(value) {
10
+ if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
11
+ const prototype = Object.getPrototypeOf(value);
12
+ return prototype === Object.prototype || prototype === null;
13
+ }
14
+ function selectBundleFields(value, fields) {
15
+ if (!isBundleValue(value)) return value;
16
+ const selected = {};
17
+ for (const field of fields)
18
+ if (Object.prototype.hasOwnProperty.call(value, field)) selected[field] = value[field];
19
+ return Object.freeze(selected);
20
+ }
21
+ function suggestName(name, candidates) {
22
+ let best;
23
+ let bestDistance = Infinity;
24
+ const lower = name.toLowerCase();
25
+ for (const candidate of candidates) {
26
+ const distance = editDistance(lower, candidate.toLowerCase());
27
+ if (distance < bestDistance) {
28
+ best = candidate;
29
+ bestDistance = distance;
30
+ }
31
+ }
32
+ if (best === void 0) return void 0;
33
+ const limit = Math.max(1, Math.floor(Math.max(name.length, best.length) / 3));
34
+ return bestDistance <= limit ? best : void 0;
35
+ }
36
+ function unknownFieldMessage(field, known, where) {
37
+ const suggestion = suggestName(field, known);
38
+ return `${where} reads unknown bundle field "${field}"` + (suggestion ? ` \u2014 did you mean "${suggestion}"?` : "") + (known.length ? ` (fields: ${known.join(", ")})` : " (the bundle declares no fields)");
39
+ }
40
+ function bundleValueProblem(value, fields) {
41
+ if (value === void 0 || value === null) return null;
42
+ if (!isBundleValue(value)) return "a bundle must be a plain object of fields";
43
+ if (!fields) return null;
44
+ const known = Object.keys(fields);
45
+ for (const key of Object.keys(value))
46
+ if (!Object.prototype.hasOwnProperty.call(fields, key)) {
47
+ const suggestion = suggestName(key, known);
48
+ return `sets undeclared bundle field "${key}"` + (suggestion ? ` \u2014 did you mean "${suggestion}"?` : "") + ` (declared: ${known.join(", ") || "none"})`;
49
+ }
50
+ return null;
51
+ }
52
+ function editDistance(a, b) {
53
+ const previous = Array.from({ length: b.length + 1 }, (_, i) => i);
54
+ for (let i = 1; i <= a.length; i++) {
55
+ let diagonal = previous[0];
56
+ previous[0] = i;
57
+ for (let j = 1; j <= b.length; j++) {
58
+ const above = previous[j];
59
+ previous[j] = Math.min(
60
+ previous[j] + 1,
61
+ previous[j - 1] + 1,
62
+ diagonal + (a[i - 1] === b[j - 1] ? 0 : 1)
63
+ );
64
+ diagonal = above;
65
+ }
66
+ }
67
+ return previous[b.length];
68
+ }
69
+
70
+ // packages/runtime/src/gpu.ts
71
+ var HOST_SCOPE = "\0host";
72
+ var MISSING_DEVICE = "The gpu capability was used before its device was ready \u2014 the host must await ensure() before a cook.";
73
+ var DISPOSED = "The gpu capability has been disposed.";
74
+ function isGpuHost(value) {
75
+ return !!value && typeof value.ensure === "function" && typeof value.forNode === "function" && typeof value.dispose === "function";
76
+ }
77
+ function createGpuHost(options) {
78
+ let active = null;
79
+ let starting = null;
80
+ let disposal = null;
81
+ let disposed = false;
82
+ const caches = /* @__PURE__ */ new Map();
83
+ const retiring = /* @__PURE__ */ new Set();
84
+ const retirementErrors = [];
85
+ function dropCaches() {
86
+ const errors = [];
87
+ const scopes = [...caches.values()];
88
+ caches.clear();
89
+ for (const entries of scopes) {
90
+ for (const entry of entries.values()) {
91
+ try {
92
+ entry.destroy?.(entry.value);
93
+ } catch (error) {
94
+ errors.push(error);
95
+ }
96
+ }
97
+ }
98
+ return errors;
99
+ }
100
+ async function release(acquired, destroyDevice) {
101
+ if (acquired.released) return [];
102
+ acquired.released = true;
103
+ const errors = [];
104
+ if (destroyDevice) {
105
+ try {
106
+ acquired.device.destroy();
107
+ } catch (error) {
108
+ errors.push(error);
109
+ }
110
+ }
111
+ try {
112
+ await acquired.release?.();
113
+ } catch (error) {
114
+ errors.push(error);
115
+ }
116
+ return errors;
117
+ }
118
+ function throwCleanupErrors(errors) {
119
+ if (errors.length === 1) throw errors[0];
120
+ if (errors.length > 1) {
121
+ const combined = new Error("GPU host cleanup failed");
122
+ Object.assign(combined, { errors });
123
+ throw combined;
124
+ }
125
+ }
126
+ function watchLoss(acquired) {
127
+ void acquired.device.lost.then(() => {
128
+ if (disposed || active !== acquired) return;
129
+ active = null;
130
+ retirementErrors.push(...dropCaches());
131
+ const cleanup = release(acquired, false).then((errors) => {
132
+ retirementErrors.push(...errors);
133
+ });
134
+ retiring.add(cleanup);
135
+ void cleanup.finally(() => retiring.delete(cleanup));
136
+ }).catch(() => {
137
+ });
138
+ }
139
+ async function start() {
140
+ const result = await options.acquire();
141
+ const acquired = {
142
+ device: result.device,
143
+ info: {
144
+ vendor: result.info?.vendor ?? "",
145
+ architecture: result.info?.architecture ?? "",
146
+ device: result.info?.device ?? "",
147
+ description: result.info?.description ?? ""
148
+ },
149
+ limits: readGpuLimits(result.limits),
150
+ release: result.release,
151
+ released: false
152
+ };
153
+ if (disposed) {
154
+ const errors = await release(acquired, true);
155
+ throwCleanupErrors(errors);
156
+ throw new Error(DISPOSED);
157
+ }
158
+ active = acquired;
159
+ watchLoss(acquired);
160
+ }
161
+ const host = {
162
+ get device() {
163
+ if (!active) throw new Error(MISSING_DEVICE);
164
+ return active.device;
165
+ },
166
+ get adapterInfo() {
167
+ if (!active) throw new Error(MISSING_DEVICE);
168
+ return active.info;
169
+ },
170
+ get limits() {
171
+ return active?.limits ?? {};
172
+ },
173
+ cache(key, create, destroy) {
174
+ return host.forNode(HOST_SCOPE).cache(key, create, destroy);
175
+ },
176
+ async ensure() {
177
+ if (disposed) throw new Error(DISPOSED);
178
+ if (active) return;
179
+ if (!starting) {
180
+ const attempt = start();
181
+ const tracked = attempt.finally(() => {
182
+ if (starting === tracked) starting = null;
183
+ });
184
+ starting = tracked;
185
+ }
186
+ await starting;
187
+ },
188
+ forNode(nodeId) {
189
+ return {
190
+ get device() {
191
+ if (!active) throw new Error(MISSING_DEVICE);
192
+ return active.device;
193
+ },
194
+ get adapterInfo() {
195
+ if (!active) throw new Error(MISSING_DEVICE);
196
+ return active.info;
197
+ },
198
+ get limits() {
199
+ return active?.limits ?? {};
200
+ },
201
+ cache(key, create, destroy) {
202
+ if (!active) throw new Error(MISSING_DEVICE);
203
+ let entries = caches.get(nodeId);
204
+ if (!entries) {
205
+ entries = /* @__PURE__ */ new Map();
206
+ caches.set(nodeId, entries);
207
+ }
208
+ const existing = entries.get(key);
209
+ if (existing) return existing.value;
210
+ const value = create(active.device);
211
+ entries.set(key, {
212
+ value,
213
+ destroy
214
+ });
215
+ return value;
216
+ }
217
+ };
218
+ },
219
+ dispose() {
220
+ disposal ??= performDispose();
221
+ return disposal;
222
+ }
223
+ };
224
+ async function performDispose() {
225
+ disposed = true;
226
+ const errors = dropCaches();
227
+ const pending = starting;
228
+ if (pending) {
229
+ try {
230
+ await pending;
231
+ } catch (error) {
232
+ if (!(error instanceof Error && error.message === DISPOSED))
233
+ errors.push(error);
234
+ }
235
+ }
236
+ const acquired = active;
237
+ active = null;
238
+ if (acquired) errors.push(...await release(acquired, true));
239
+ await Promise.all([...retiring]);
240
+ errors.push(...retirementErrors);
241
+ retirementErrors.length = 0;
242
+ throwCleanupErrors(errors);
243
+ }
244
+ return host;
245
+ }
246
+ async function requestDeviceWithAdapterLimits(adapter) {
247
+ const requiredLimits = readGpuLimits(adapter.limits);
248
+ try {
249
+ return await adapter.requestDevice({ requiredLimits });
250
+ } catch {
251
+ return adapter.requestDevice();
252
+ }
253
+ }
254
+ function gpuLimitShortfall(label, required, gpu) {
255
+ if (!required) return null;
256
+ const short = [];
257
+ for (const [name, wanted] of Object.entries(required)) {
258
+ const have = gpu.limits[name];
259
+ const fits = have !== void 0 && (name.startsWith("min") ? have <= wanted : have >= wanted);
260
+ if (!fits) short.push(`${name} ${wanted} (this GPU: ${have ?? "not reported"})`);
261
+ }
262
+ if (!short.length) return null;
263
+ const adapter = gpu.adapterInfo.description || gpu.adapterInfo.device || gpu.adapterInfo.vendor || "this adapter";
264
+ return `${label} needs GPU limits ${adapter} does not allow: ${short.join(", ")}.`;
265
+ }
266
+ function readGpuLimits(source) {
267
+ if (!source || typeof source !== "object") return {};
268
+ const names = new Set(Object.keys(source));
269
+ for (let cursor = Object.getPrototypeOf(source); cursor && cursor !== Object.prototype; cursor = Object.getPrototypeOf(cursor)) {
270
+ for (const key of Object.getOwnPropertyNames(cursor)) {
271
+ if (key !== "constructor") names.add(key);
272
+ }
273
+ }
274
+ const limits = {};
275
+ for (const key of names) {
276
+ const value = source[key];
277
+ if (typeof value === "number") limits[key] = value;
278
+ }
279
+ return limits;
280
+ }
281
+
282
+ // packages/runtime/src/seed.ts
283
+ var DEFAULT_GRAPH_SEED = 0;
284
+ function graphSeed(document) {
285
+ const value = document?.seed;
286
+ return typeof value === "number" && Number.isInteger(value) ? value >>> 0 : DEFAULT_GRAPH_SEED;
287
+ }
288
+ function nodeSeed(seedOfGraph, nodeId) {
289
+ const text = `${seedOfGraph >>> 0}:${nodeId}`;
290
+ let hash = 2166136261;
291
+ for (let index = 0; index < text.length; index++) {
292
+ hash ^= text.charCodeAt(index);
293
+ hash = Math.imul(hash, 16777619);
294
+ }
295
+ hash ^= hash >>> 16;
296
+ hash = Math.imul(hash, 2246822507);
297
+ hash ^= hash >>> 13;
298
+ hash = Math.imul(hash, 3266489909);
299
+ hash ^= hash >>> 16;
300
+ return hash >>> 0;
301
+ }
302
+ function seededRandom(seed) {
303
+ let state = seed >>> 0;
304
+ return () => {
305
+ state = state + 1831565813 >>> 0;
306
+ let value = state;
307
+ value = Math.imul(value ^ value >>> 15, value | 1);
308
+ value ^= value + Math.imul(value ^ value >>> 7, value | 61);
309
+ return ((value ^ value >>> 14) >>> 0) / 4294967296;
310
+ };
311
+ }
312
+
313
+ export {
314
+ bundleFieldType,
315
+ bundleSchemasCompatible,
316
+ isBundleValue,
317
+ selectBundleFields,
318
+ suggestName,
319
+ unknownFieldMessage,
320
+ bundleValueProblem,
321
+ isGpuHost,
322
+ createGpuHost,
323
+ requestDeviceWithAdapterLimits,
324
+ gpuLimitShortfall,
325
+ DEFAULT_GRAPH_SEED,
326
+ graphSeed,
327
+ nodeSeed,
328
+ seededRandom
329
+ };
330
+ //# sourceMappingURL=chunk-L6B6FUQP.js.map