@powerhousedao/powerhouse-vetra-packages 6.2.2-dev.7 → 6.2.2-dev.70

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 (103) hide show
  1. package/dist/browser/assets/{entry-Cvoo4_c9.js → entry-BBghrmE1.js} +3 -2
  2. package/dist/browser/assets/{projection-entry-DVec8YRh.js → projection-entry-BtmaPdIp.js} +4 -4
  3. package/dist/browser/{linting-Dn6pXRkK.js → button-CuO8Gh3v.js} +20 -6
  4. package/dist/browser/button-CuO8Gh3v.js.map +1 -0
  5. package/dist/browser/{connect-KEU-HR3o.js → connect-DmCpI0kg.js} +916 -200
  6. package/dist/browser/connect-DmCpI0kg.js.map +1 -0
  7. package/dist/browser/{dist-CXoKspdx.js → dist-B4FWbuEM.js} +10 -2
  8. package/dist/browser/{dist-CXoKspdx.js.map → dist-B4FWbuEM.js.map} +1 -1
  9. package/dist/{node/dist-BeZaEP6S.mjs → browser/dist-BAJ5nRDl.js} +21 -2
  10. package/dist/browser/{dist-D8H48e8N.js.map → dist-BAJ5nRDl.js.map} +1 -1
  11. package/dist/browser/{dist-D5ra2aRj.js → dist-DfoAQf6g.js} +1617 -1293
  12. package/dist/browser/dist-DfoAQf6g.js.map +1 -0
  13. package/dist/browser/{document-drive-IdFV1QXL.js → document-drive-D6XhjHzr.js} +1184 -122
  14. package/dist/browser/document-drive-D6XhjHzr.js.map +1 -0
  15. package/dist/browser/document-models/index.js +1 -1
  16. package/dist/browser/{documents-D4ek7Ubv.js → documents-J_l59mSV.js} +5 -604
  17. package/dist/browser/documents-J_l59mSV.js.map +1 -0
  18. package/dist/browser/editor-C069kNOj.js +25 -0
  19. package/dist/browser/editor-C069kNOj.js.map +1 -0
  20. package/dist/browser/{editor-DiZF3ao3.js → editor-XlOiVjqp.js} +671 -236
  21. package/dist/browser/editor-XlOiVjqp.js.map +1 -0
  22. package/dist/browser/editors/document-model-editor/module.js +1 -1
  23. package/dist/browser/editors/generic-drive-explorer/index.js +5 -5
  24. package/dist/browser/editors/generic-drive-explorer/module.js +1 -1
  25. package/dist/{node/folder-view-Cy-QxsDg.mjs → browser/folder-view-B4b9Ik-G.js} +73 -46
  26. package/dist/browser/folder-view-B4b9Ik-G.js.map +1 -0
  27. package/dist/browser/{graphql-editor-ZLRO_8Ce.js → graphql-editor-BDze7_wI.js} +8 -7
  28. package/dist/browser/{graphql-editor-ZLRO_8Ce.js.map → graphql-editor-BDze7_wI.js.map} +1 -1
  29. package/dist/browser/{hooks-CORHBNHb.js → hooks-KKcNp2X0.js} +2 -2
  30. package/dist/browser/{hooks-CORHBNHb.js.map → hooks-KKcNp2X0.js.map} +1 -1
  31. package/dist/browser/index.js +378 -9
  32. package/dist/browser/index.js.map +1 -1
  33. package/dist/browser/{json-editor-DBuZ6gN7.js → json-editor-nI61gbA-.js} +4 -4
  34. package/dist/browser/{json-editor-DBuZ6gN7.js.map → json-editor-nI61gbA-.js.map} +1 -1
  35. package/dist/browser/{lib-C-f3izXz.js → lib-CE5V8jW5.js} +13 -4
  36. package/dist/browser/lib-CE5V8jW5.js.map +1 -0
  37. package/dist/browser/printer-CEYr4JOg.js +604 -0
  38. package/dist/browser/printer-CEYr4JOg.js.map +1 -0
  39. package/dist/browser/{schema-context-DY-GEGnY.js → schema-context-ZyeclQwy.js} +2 -2
  40. package/dist/browser/{schema-context-DY-GEGnY.js.map → schema-context-ZyeclQwy.js.map} +1 -1
  41. package/dist/browser/{state-schemas-BjQKM498.js → state-schemas-DvpLHgMU.js} +8 -18
  42. package/dist/browser/state-schemas-DvpLHgMU.js.map +1 -0
  43. package/dist/node/{linting-Dx50GuLN.mjs → button-Da7CxMn7.mjs} +20 -7
  44. package/dist/node/button-Da7CxMn7.mjs.map +1 -0
  45. package/dist/node/{connect-KcYZcy_Z.mjs → connect-BOwTtHRq.mjs} +916 -200
  46. package/dist/node/connect-BOwTtHRq.mjs.map +1 -0
  47. package/dist/node/{dist-DJEK2WVi.mjs → dist-CRrgpr8A.mjs} +1621 -1292
  48. package/dist/node/dist-CRrgpr8A.mjs.map +1 -0
  49. package/dist/{browser/dist-D8H48e8N.js → node/dist-CzYOpeXN.mjs} +21 -2
  50. package/dist/node/{dist-BeZaEP6S.mjs.map → dist-CzYOpeXN.mjs.map} +1 -1
  51. package/dist/node/{dist-fA4EItr0.mjs → dist-DT7jI9ol.mjs} +10 -2
  52. package/dist/node/{dist-fA4EItr0.mjs.map → dist-DT7jI9ol.mjs.map} +1 -1
  53. package/dist/node/{document-drive-C8hbqQ3C.mjs → document-drive-B65n0lIk.mjs} +1184 -122
  54. package/dist/node/document-drive-B65n0lIk.mjs.map +1 -0
  55. package/dist/node/document-models/index.mjs +1 -1
  56. package/dist/node/{documents-BFBPmyw1.mjs → documents-DCf53bzO.mjs} +3 -3
  57. package/dist/node/{documents-BFBPmyw1.mjs.map → documents-DCf53bzO.mjs.map} +1 -1
  58. package/dist/node/{editor-B1KhoF1f.mjs → editor-BGcLm6LA.mjs} +672 -237
  59. package/dist/node/editor-BGcLm6LA.mjs.map +1 -0
  60. package/dist/node/editor-DIiXhhl2.mjs +25 -0
  61. package/dist/node/editor-DIiXhhl2.mjs.map +1 -0
  62. package/dist/node/editors/document-model-editor/module.mjs +1 -1
  63. package/dist/node/editors/generic-drive-explorer/index.mjs +5 -5
  64. package/dist/node/editors/generic-drive-explorer/module.mjs +1 -1
  65. package/dist/{browser/folder-view-DMFqcJhc.js → node/folder-view-DyijTEeD.mjs} +73 -46
  66. package/dist/node/folder-view-DyijTEeD.mjs.map +1 -0
  67. package/dist/node/{graphql-DskHmkMe.mjs → graphql-BfAoPeWM.mjs} +2 -2
  68. package/dist/node/{graphql-DskHmkMe.mjs.map → graphql-BfAoPeWM.mjs.map} +1 -1
  69. package/dist/node/{graphql-editor-C5VLRqEf.mjs → graphql-editor-5YU1uHpd.mjs} +7 -7
  70. package/dist/node/{graphql-editor-C5VLRqEf.mjs.map → graphql-editor-5YU1uHpd.mjs.map} +1 -1
  71. package/dist/node/{hooks-DJrjfVaS.mjs → hooks-D0DcS3MV.mjs} +2 -2
  72. package/dist/node/{hooks-DJrjfVaS.mjs.map → hooks-D0DcS3MV.mjs.map} +1 -1
  73. package/dist/node/index.mjs +378 -9
  74. package/dist/node/index.mjs.map +1 -1
  75. package/dist/node/{json-editor-iI2s9a_4.mjs → json-editor-iuJkZEgS.mjs} +4 -4
  76. package/dist/node/{json-editor-iI2s9a_4.mjs.map → json-editor-iuJkZEgS.mjs.map} +1 -1
  77. package/dist/node/{main-D82dkD7g.mjs → main-B5JSm6Hi.mjs} +15 -6
  78. package/dist/node/main-B5JSm6Hi.mjs.map +1 -0
  79. package/dist/node/{schema-context-CX5ml_9t.mjs → schema-context-DL8jhi_d.mjs} +3 -3
  80. package/dist/node/{schema-context-CX5ml_9t.mjs.map → schema-context-DL8jhi_d.mjs.map} +1 -1
  81. package/dist/node/{state-schemas-Bl7nA8bB.mjs → state-schemas-DHQAxfto.mjs} +10 -20
  82. package/dist/{browser/state-schemas-BjQKM498.js.map → node/state-schemas-DHQAxfto.mjs.map} +1 -1
  83. package/package.json +8 -7
  84. package/dist/browser/connect-KEU-HR3o.js.map +0 -1
  85. package/dist/browser/dist-D5ra2aRj.js.map +0 -1
  86. package/dist/browser/document-drive-IdFV1QXL.js.map +0 -1
  87. package/dist/browser/documents-D4ek7Ubv.js.map +0 -1
  88. package/dist/browser/editor-DiZF3ao3.js.map +0 -1
  89. package/dist/browser/editor-SqNULDP-.js +0 -29
  90. package/dist/browser/editor-SqNULDP-.js.map +0 -1
  91. package/dist/browser/folder-view-DMFqcJhc.js.map +0 -1
  92. package/dist/browser/lib-C-f3izXz.js.map +0 -1
  93. package/dist/browser/linting-Dn6pXRkK.js.map +0 -1
  94. package/dist/node/connect-KcYZcy_Z.mjs.map +0 -1
  95. package/dist/node/dist-DJEK2WVi.mjs.map +0 -1
  96. package/dist/node/document-drive-C8hbqQ3C.mjs.map +0 -1
  97. package/dist/node/editor-B1KhoF1f.mjs.map +0 -1
  98. package/dist/node/editor-yBGEvMGD.mjs +0 -29
  99. package/dist/node/editor-yBGEvMGD.mjs.map +0 -1
  100. package/dist/node/folder-view-Cy-QxsDg.mjs.map +0 -1
  101. package/dist/node/linting-Dx50GuLN.mjs.map +0 -1
  102. package/dist/node/main-D82dkD7g.mjs.map +0 -1
  103. package/dist/node/state-schemas-Bl7nA8bB.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor-B1KhoF1f.mjs","names":["use","React","React","r","e","s","i","t","o","r","e","n.parse","n.parseAsync","n.$ZodError","z.string","z\n .string","z\n .object","z\n .union","z.url","z.literal","Label","React","React","LabelPrimitive.Root","React","zodResolver","z.object","z.object","z.string"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.4_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_c8c8fd2647f03197dbf56370d7498033/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../node_modules/.pnpm/clsx@2.0.0/node_modules/clsx/dist/clsx.mjs","../../../../node_modules/.pnpm/class-variance-authority@0.7.0/node_modules/class-variance-authority/dist/index.mjs","../../editors/document-model-editor/components/divider.tsx","../../../../node_modules/.pnpm/@hookform+resolvers@5.2.2_react-hook-form@7.71.2_react@19.2.6_/node_modules/@hookform/resolvers/dist/resolvers.mjs","../../../../node_modules/.pnpm/@hookform+resolvers@5.2.2_react-hook-form@7.71.2_react@19.2.6_/node_modules/@hookform/resolvers/zod/dist/zod.mjs","../../editors/document-model-editor/schemas/inputs.ts","../../editors/document-model-editor/context/form-context.ts","../../editors/document-model-editor/hooks/useFormField.ts","../../../../node_modules/.pnpm/@radix-ui+react-label@2.1.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_8d35ec453e0b59eefe06771bb1432577/node_modules/@radix-ui/react-label/dist/index.mjs","../../editors/document-model-editor/components/label.tsx","../../editors/document-model-editor/components/form.tsx","../../editors/document-model-editor/components/text-area.tsx","../../editors/document-model-editor/components/text-field.tsx","../../editors/document-model-editor/components/model-metadata-form.tsx","../../editors/document-model-editor/components/module-form.tsx","../../editors/document-model-editor/components/operation-form.tsx","../../editors/document-model-editor/components/operation-description-form.tsx","../../editors/document-model-editor/components/operation-error-form.tsx","../../editors/document-model-editor/components/operation-errors.tsx","../../editors/document-model-editor/components/operation.tsx","../../editors/document-model-editor/components/operations.tsx","../../editors/document-model-editor/components/module.tsx","../../editors/document-model-editor/components/modules.tsx","../../editors/document-model-editor/config.ts","../../editors/document-model-editor/hooks/useDocumentModelDocument.ts","../../editors/document-model-editor/editor.tsx"],"sourcesContent":["// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? \"\".concat(value) : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>{\n return (props)=>{\n var ref;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants , defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (ref = config.compoundVariants) === null || ref === void 0 ? void 0 : ref.reduce((acc, param1)=>{\n let { class: cvClass , className: cvClassName , ...compoundVariantOptions } = param1;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n};\n\n\n//# sourceMappingURL=index.mjs.map","import { twMerge } from \"tailwind-merge\";\n\ntype Props = {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n margin?: \"sm\" | \"md\" | \"lg\";\n};\nexport function Divider({ className, size = \"sm\", margin = \"md\" }: Props) {\n function getSize() {\n if (size === \"sm\") return \"h-px\";\n if (size === \"md\") return \"h-1\";\n return \"h-1.5\";\n }\n\n function getMargin() {\n if (margin === \"sm\") return \"my-4\";\n if (margin === \"md\") return \"my-6\";\n return \"my-8\";\n }\n\n const sizeClass = getSize();\n const marginClass = getMargin();\n return (\n <div\n className={twMerge(\"bg-secondary\", sizeClass, marginClass, className)}\n />\n );\n}\n","import{get as e,set as t}from\"react-hook-form\";const r=(t,r,o)=>{if(t&&\"reportValidity\"in t){const s=e(o,r);t.setCustomValidity(s&&s.message||\"\"),t.reportValidity()}},o=(e,t)=>{for(const o in t.fields){const s=t.fields[o];s&&s.ref&&\"reportValidity\"in s.ref?r(s.ref,o,e):s&&s.refs&&s.refs.forEach(t=>r(t,o,e))}},s=(r,s)=>{s.shouldUseNativeValidation&&o(r,s);const n={};for(const o in r){const f=e(s.fields,o),c=Object.assign(r[o]||{},{ref:f&&f.ref});if(i(s.names||Object.keys(r),o)){const r=Object.assign({},e(n,o));t(r,\"root\",c),t(n,o,r)}else t(n,o,c)}return n},i=(e,t)=>{const r=n(t);return e.some(e=>n(e).match(`^${r}\\\\.\\\\d+`))};function n(e){return e.replace(/\\]|\\[/g,\"\")}export{s as toNestErrors,o as validateFieldsNatively};\n//# sourceMappingURL=resolvers.mjs.map\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";import*as n from\"zod/v4/core\";function t(r,e){try{var o=r()}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function i(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"invalid_union\"===t.code&&t.errors.length>0){var u=t.errors[0][0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"invalid_union\"===t.code&&t.errors.forEach(function(e){return e.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function a(o,a,u){if(void 0===u&&(u={}),function(r){return\"_def\"in r&&\"object\"==typeof r._def&&\"typeName\"in r._def}(o))return function(n,i,c){try{return Promise.resolve(t(function(){return Promise.resolve(o[\"sync\"===u.mode?\"parse\":\"parseAsync\"](n,a)).then(function(e){return c.shouldUseNativeValidation&&r({},c),{errors:{},values:u.raw?Object.assign({},n):e}})},function(r){if(function(r){return Array.isArray(null==r?void 0:r.issues)}(r))return{values:{},errors:e(s(r.errors,!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode),c)};throw r}))}catch(r){return Promise.reject(r)}};if(function(r){return\"_zod\"in r&&\"object\"==typeof r._zod}(o))return function(s,c,f){try{return Promise.resolve(t(function(){return Promise.resolve((\"sync\"===u.mode?n.parse:n.parseAsync)(o,s,a)).then(function(e){return f.shouldUseNativeValidation&&r({},f),{errors:{},values:u.raw?Object.assign({},s):e}})},function(r){if(function(r){return r instanceof n.$ZodError}(r))return{values:{},errors:e(i(r.issues,!f.shouldUseNativeValidation&&\"all\"===f.criteriaMode),f)};throw r}))}catch(r){return Promise.reject(r)}};throw new Error(\"Invalid input: not a Zod schema\")}export{a as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import { z } from \"zod\";\nimport { snakeCase, constantCase } from \"change-case\";\n\nconst isUppercase = (value: string) => !/\\p{Ll}/u.test(value);\nconst isLowercase = (value: string) => !/\\p{Lu}/u.test(value);\n\nconst whitespaceRegex = /\\s+/g;\n\nexport function containsSpaces(s: string) {\n return whitespaceRegex.test(s);\n}\n\nexport function replaceSpaces(s: string) {\n return s.replace(whitespaceRegex, \"_\");\n}\n\ntype SchemaOptions = {\n required?: boolean;\n allowEmpty?: boolean;\n unique?: string[];\n};\n\nexport function createNameSchema(options: SchemaOptions = {}) {\n const { required = false, allowEmpty = false, unique = [] } = options;\n\n const baseSchema = allowEmpty ? z.string() : z.string().min(1);\n\n const uniqueRefinement = baseSchema.refine(\n (value) => {\n if (!value && allowEmpty) return true;\n return !unique\n .map((n) => n.toLowerCase())\n .includes(value.replace(/^\\s+|\\s+$/g, \"_\").toLowerCase());\n },\n { message: \"Item with this name already exists\" },\n );\n\n if (!required) {\n return unique.length > 0\n ? z\n .string()\n .optional()\n .refine(\n (value) => {\n if (value === undefined) return true;\n if (!value && allowEmpty) return true;\n return !unique\n .map((n) => n.toLowerCase())\n .includes(value.replace(/^\\s+|\\s+$/g, \"_\").toLowerCase());\n },\n { message: \"Item with this name already exists\" },\n )\n : z.string().optional();\n }\n\n return unique.length > 0 ? uniqueRefinement : baseSchema;\n}\n\nexport function createConstantCaseSchema(options: SchemaOptions = {}) {\n return createNameSchema(options)\n .transform((value) => (value ? value.toUpperCase() : value))\n .refine((value) => !value || isUppercase(value), {\n message: \"Must be uppercase\",\n });\n}\n\nexport function createLowercaseSnakeCaseSchema(options: SchemaOptions = {}) {\n return createNameSchema(options)\n .transform((value) => (value ? value.toLowerCase() : value))\n .refine((value) => !value || isLowercase(value), {\n message: \"Must be lowercase\",\n });\n}\n\nexport function toLowercaseSnakeCase(\n value: string,\n options: SchemaOptions = {},\n) {\n return createLowercaseSnakeCaseSchema(options).parse(\n snakeCase(value),\n ) as LowercaseSnakeCase;\n}\n\nexport function toConstantCase(value: string, options: SchemaOptions = {}) {\n return createConstantCaseSchema(options).parse(\n constantCase(value),\n ) as ConstantCase;\n}\n\nexport type SnakeCase = `${string}_${string}`;\nexport type LowercaseSnakeCase = Lowercase<SnakeCase>;\nexport type ConstantCase = Uppercase<SnakeCase>;\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport const AuthorSchema = z\n .object({\n name: createNameSchema({ allowEmpty: true }),\n website: z\n .union([z.url(), z.literal(\"\")])\n .optional()\n .default(\"\"),\n })\n .default({\n name: \"\",\n website: \"\",\n });\n","import React from \"react\";\nimport type { FieldValues, FieldPath } from \"react-hook-form\";\n\nexport type FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nexport const FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue,\n);\n\nexport type FormItemContextValue = {\n id: string;\n};\n\nexport const FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue,\n);\n","import React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { FormFieldContext, FormItemContext } from \"../context/form-context.js\";\n\nexport const useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport { cva } from \"class-variance-authority\";\nimport { twMerge } from \"tailwind-merge\";\n\nconst labelVariants = cva(\n \"text-sm leading-none font-medium peer-disabled:disabled-effect\",\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={twMerge(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport type * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { ControllerProps, FieldPath, FieldValues } from \"react-hook-form\";\nimport { Controller, FormProvider } from \"react-hook-form\";\nimport { FormFieldContext, FormItemContext } from \"../context/form-context.js\";\nimport { useFormField } from \"../hooks/useFormField.js\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Label } from \"./label.js\";\n\nconst Form = FormProvider;\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={className} {...props} />\n </FormItemContext.Provider>\n );\n});\nFormItem.displayName = \"FormItem\";\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n ref={ref}\n className={twMerge(error && \"text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n});\nFormLabel.displayName = \"FormLabel\";\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n});\nFormControl.displayName = \"FormControl\";\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={twMerge(\"text-sm text-foreground\", className)}\n {...props}\n />\n );\n});\nFormDescription.displayName = \"FormDescription\";\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error.message) : children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={twMerge(\"text-sm font-medium text-destructive\", className)}\n {...props}\n >\n {body}\n </p>\n );\n});\nFormMessage.displayName = \"FormMessage\";\n\nexport {\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};\n","import * as React from \"react\";\nimport { forwardRef, useCallback, useImperativeHandle, useRef } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nexport interface TextareaHandle {\n focus: () => void;\n element: HTMLTextAreaElement | null;\n}\n\nexport const Textarea = forwardRef<TextareaHandle, TextareaProps>(\n ({ className, ...props }, ref) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const adjustHeight = useCallback((textarea: HTMLTextAreaElement) => {\n textarea.style.height = \"auto\";\n const newHeight = Math.max(textarea.scrollHeight, textarea.offsetHeight);\n textarea.style.height = `${newHeight}px`;\n }, []);\n\n const handleInput = useCallback(\n (e: React.FormEvent<HTMLTextAreaElement>) => {\n adjustHeight(e.currentTarget);\n },\n [adjustHeight],\n );\n\n React.useEffect(() => {\n if (textareaRef.current) {\n adjustHeight(textareaRef.current);\n }\n }, [adjustHeight]);\n\n useImperativeHandle(ref, () => ({\n focus: () => textareaRef.current?.focus(),\n element: textareaRef.current,\n }));\n\n return (\n <textarea\n {...props}\n className={twMerge(\n \"min-h-10 w-full resize-none rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:disabled-effect\",\n className,\n )}\n ref={textareaRef}\n onInput={handleInput}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport type { FieldValues, Resolver } from \"react-hook-form\";\nimport { useForm } from \"react-hook-form\";\nimport { z } from \"zod\";\nimport { createNameSchema } from \"../schemas/inputs.js\";\nimport { compareStringsWithoutWhitespace } from \"../utils/helpers.js\";\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from \"./form.js\";\nimport type { TextareaHandle } from \"./text-area.js\";\nimport { Textarea } from \"./text-area.js\";\n\ntype TextFieldProps = {\n name: string;\n value: string | null | undefined;\n onSubmit: (value: string) => void;\n label?: string;\n placeholder?: string;\n className?: string;\n rows?: number;\n focusOnMount?: boolean;\n required?: boolean;\n allowEmpty?: boolean;\n unique?: string[];\n shouldReset?: boolean;\n onChange?: (value: string) => void;\n};\n\ntype TextFieldHandle = {\n focus: () => void;\n};\n\nexport const TextField = forwardRef<TextFieldHandle, TextFieldProps>(\n (\n {\n name,\n value,\n onSubmit,\n label,\n placeholder,\n unique,\n className = \"\",\n rows = 1,\n focusOnMount = false,\n required = false,\n allowEmpty = false,\n shouldReset = false,\n onChange,\n },\n ref,\n ) => {\n const textareaRef = useRef<TextareaHandle | null>(null);\n const id = useId();\n useEffect(() => {\n if (focusOnMount && textareaRef.current) {\n textareaRef.current.focus();\n }\n }, [focusOnMount]);\n\n const fieldSchema = z.object({\n [name]: createNameSchema({ required, allowEmpty, unique }),\n });\n\n const form = useForm({\n resolver: zodResolver(\n fieldSchema as unknown as Parameters<typeof zodResolver>[0],\n ) as Resolver<FieldValues>,\n defaultValues: {\n [name]: value ?? \"\",\n },\n });\n\n const handleSubmit = useCallback(\n (values: FieldValues) => {\n const newValue = values[name] as string | undefined;\n if (newValue === undefined || value === newValue) return;\n onSubmit(newValue);\n if (shouldReset) form.reset({ [name]: \"\" });\n },\n [name, value, onSubmit, form, shouldReset],\n );\n\n const handleBlur = useCallback(async () => {\n const currentValue = (form.getValues()[name] as string | undefined) ?? \"\";\n\n if (value === null || value === undefined) {\n if (!currentValue || currentValue.trim() === \"\") return;\n }\n\n if (compareStringsWithoutWhitespace(currentValue, value ?? \"\")) return;\n\n try {\n await form.trigger(); // Trigger validation\n if (form.formState.isValid) {\n await form.handleSubmit(handleSubmit)();\n }\n } catch (_e) {\n // Allow blur to proceed even if validation fails\n }\n }, [form, handleSubmit, name, value]);\n\n const onEnterKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n (e.target as HTMLTextAreaElement).blur();\n }\n },\n [],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n onChange?.(newValue);\n },\n [onChange],\n );\n\n useImperativeHandle(ref, () => ({\n focus: () => textareaRef.current?.focus(),\n }));\n\n useEffect(() => {\n form.reset({ [name]: value ?? \"\" });\n }, [form, name, value]);\n\n return (\n <Form {...form}>\n <FormField\n control={form.control}\n name={name}\n render={({ field }) => (\n <FormItem className=\"grid h-full grid-rows-[auto,1fr] gap-2 overflow-visible\">\n {!!label && (\n <FormLabel\n htmlFor={name}\n className=\"text-sm font-medium text-foreground\"\n >\n {label}\n </FormLabel>\n )}\n <FormControl>\n <Textarea\n {...field}\n id={id}\n name={name}\n ref={(node) => {\n if (node) {\n field.ref(node.element);\n textareaRef.current = node;\n }\n }}\n placeholder={placeholder}\n onBlur={() => void handleBlur()}\n onChange={(e) => {\n field.onChange(e);\n handleChange(e);\n }}\n onKeyDown={onEnterKeyDown}\n rows={rows}\n className={className}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </Form>\n );\n },\n);\n\nTextField.displayName = \"TextField\";\n","import { useCallback } from \"react\";\nimport { z } from \"zod\";\nimport type { Scope } from \"../types/documents.js\";\nimport {\n handleModelNameChange,\n makeInitialSchemaDoc,\n renameSchemaType,\n} from \"../utils/helpers.js\";\nimport { TextField } from \"./text-field.js\";\n\nexport const MetadataFormSchema = z.object({\n name: z.string(),\n documentType: z.string(),\n extension: z.string().optional().default(\"\"),\n description: z.string(),\n authorName: z.string(),\n authorWebsite: z.string(),\n});\n\nexport type MetadataFormValues = z.infer<typeof MetadataFormSchema>;\n\ntype Props = MetadataFormValues & {\n globalStateSchema: string;\n localStateSchema: string;\n setModelName: (name: string) => void;\n setModelId: (id: string) => void;\n setModelExtension: (extension: string) => void;\n setModelDescription: (description: string) => void;\n setAuthorName: (authorName: string) => void;\n setAuthorWebsite: (authorWebsite: string) => void;\n setStateSchema: (schema: string, scope: Scope) => void;\n};\n\nexport default function ModelMetadata(props: Props) {\n return (\n <div>\n <ModelNameForm {...props} />\n <div className=\"flex h-full flex-col gap-4\">\n <div className=\"grid flex-1 grid-cols-3 items-start gap-4\">\n <div className=\"col-span-2 flex h-full flex-col gap-4\">\n <div className=\"shrink-0\">\n <DocumentTypeForm {...props} />\n </div>\n <div className=\"min-h-0 flex-1\">\n <DescriptionForm {...props} />\n </div>\n </div>\n <div className=\"col-span-1 flex flex-col gap-4\">\n <AuthorNameForm {...props} />\n <AuthorWebsiteForm {...props} />\n <ModelExtensionForm {...props} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function ModelNameForm(props: Props) {\n const {\n name,\n globalStateSchema,\n localStateSchema,\n setModelName,\n setStateSchema,\n } = props;\n\n const onSubmit = useCallback(\n (newName: string) => {\n if (name === newName) {\n return;\n }\n setModelName(newName);\n\n const hasExistingSchema = !!globalStateSchema;\n\n if (!hasExistingSchema) {\n const initialSchemaDoc = makeInitialSchemaDoc(newName, \"global\");\n setStateSchema(initialSchemaDoc, \"global\");\n return;\n }\n const newSchema = renameSchemaType(\n globalStateSchema,\n name,\n newName,\n \"global\",\n );\n setStateSchema(newSchema, \"global\");\n\n if (localStateSchema) {\n const newLocalStateSchema = renameSchemaType(\n localStateSchema,\n name,\n newName,\n \"local\",\n );\n setStateSchema(newLocalStateSchema, \"local\");\n }\n handleModelNameChange({\n oldName: name,\n newName,\n globalStateSchema,\n localStateSchema,\n setStateSchema,\n });\n },\n [name, globalStateSchema, localStateSchema, setStateSchema, setModelName],\n );\n\n return (\n <TextField\n name=\"name\"\n value={name}\n onSubmit={onSubmit}\n placeholder=\"Model name\"\n className=\"border-none pl-0 text-xl font-bold text-foreground\"\n required\n focusOnMount\n />\n );\n}\n\nexport function DocumentTypeForm(props: Props) {\n const { documentType, setModelId } = props;\n\n return (\n <TextField\n label=\"Document Type *\"\n name=\"powerhouse/document-model\"\n value={documentType}\n onSubmit={setModelId}\n placeholder=\"Document Type\"\n required\n />\n );\n}\n\nexport function ModelExtensionForm(props: Props) {\n const { extension, setModelExtension } = props;\n\n return (\n <TextField\n name=\"extension\"\n value={extension}\n onSubmit={setModelExtension}\n label=\"Model Extension\"\n placeholder=\"Example .phdm\"\n allowEmpty\n />\n );\n}\n\nexport function DescriptionForm(props: Props) {\n const { description, setModelDescription } = props;\n\n return (\n <TextField\n name=\"description\"\n label=\"Model Description\"\n value={description}\n onSubmit={setModelDescription}\n placeholder=\"Describe your document to others\"\n allowEmpty\n className=\"h-full\"\n />\n );\n}\n\nexport function AuthorNameForm(props: Props) {\n const { authorName, setAuthorName } = props;\n\n return (\n <TextField\n name=\"authorName\"\n value={authorName}\n onSubmit={setAuthorName}\n label=\"Author Name\"\n placeholder=\"Username or organisation\"\n allowEmpty\n />\n );\n}\n\nexport function AuthorWebsiteForm(props: Props) {\n const { authorWebsite, setAuthorWebsite } = props;\n\n return (\n <TextField\n name=\"authorWebsite\"\n value={authorWebsite}\n label=\"Website URL\"\n onSubmit={(newAuthorWebsite) => {\n if (!!authorWebsite && !newAuthorWebsite) return;\n setAuthorWebsite(newAuthorWebsite);\n }}\n placeholder=\"https://www.powerhouse.inc/\"\n allowEmpty\n />\n );\n}\n","import type { ModuleSpecification } from \"@powerhousedao/shared/document-model\";\nimport { toLowercaseSnakeCase } from \"../schemas/inputs.js\";\nimport { TextField } from \"./text-field.js\";\n\ntype Props = {\n modules?: ModuleSpecification[];\n module?: ModuleSpecification;\n onAddModule: (name: string) => Promise<string | undefined>;\n updateModuleName: (id: string, name: string) => void;\n};\n\nexport function ModuleForm({\n module,\n onAddModule,\n updateModuleName,\n modules = [],\n}: Props) {\n const isEdit = !!module;\n const moduleNames = modules.map((m) => m.name);\n\n const handleSubmit = async (name: string) => {\n const formattedName = toLowercaseSnakeCase(name);\n if (!formattedName.length) return;\n\n if (isEdit) {\n if (formattedName !== module.name) {\n updateModuleName(module.id, formattedName);\n }\n } else {\n await onAddModule(formattedName);\n }\n };\n\n return (\n <TextField\n key={module?.id ?? \"new\"}\n name=\"name\"\n label={isEdit ? \"Module name *\" : \"Add module *\"}\n value={module?.name}\n onSubmit={(name) => void handleSubmit(name)}\n placeholder=\"Add module\"\n unique={moduleNames}\n shouldReset={!isEdit}\n required\n />\n );\n}\n","import type { ModuleSpecification } from \"@powerhousedao/shared/document-model\";\nimport { toConstantCase } from \"../schemas/inputs.js\";\nimport { TextField } from \"./text-field.js\";\n\ntype Props = {\n module: ModuleSpecification;\n operation?: ModuleSpecification[\"operations\"][number];\n focusOnMount?: boolean;\n allOperationNames: string[];\n onAddOperationAndInitialSchema: (\n moduleId: string,\n name: string,\n ) => Promise<string | undefined>;\n updateOperationName: (id: string, name: string) => void;\n deleteOperation: (id: string) => void;\n};\n\nexport function OperationForm({\n operation,\n module,\n focusOnMount,\n allOperationNames,\n onAddOperationAndInitialSchema,\n updateOperationName,\n deleteOperation,\n}: Props) {\n const isEdit = !!operation;\n\n const handleSubmit = async (name: string) => {\n if (isEdit && name === \"\") {\n deleteOperation(operation.id);\n return;\n }\n\n const formattedName = toConstantCase(name);\n\n if (isEdit) {\n if (formattedName !== operation.name) {\n updateOperationName(operation.id, formattedName);\n }\n } else {\n await onAddOperationAndInitialSchema(module.id, formattedName);\n }\n };\n\n const handleChange = (value: string) => {\n if (isEdit && value === \"\") {\n deleteOperation(operation.id);\n }\n };\n\n return (\n <TextField\n name=\"name\"\n value={operation?.name}\n label={isEdit ? \"Operation name *\" : \"Add operation *\"}\n onSubmit={(name) => void handleSubmit(name)}\n onChange={handleChange}\n placeholder=\"Add operation\"\n required={!isEdit}\n allowEmpty={!isEdit}\n shouldReset={!isEdit}\n focusOnMount={focusOnMount}\n unique={allOperationNames}\n />\n );\n}\n","import type { ModuleSpecification } from \"@powerhousedao/shared/document-model\";\nimport { useEffect, useRef } from \"react\";\nimport { TextField } from \"./text-field.js\";\n\ntype Props = {\n operation: ModuleSpecification[\"operations\"][number];\n focusOnMount?: boolean;\n setOperationDescription: (id: string, description: string) => void;\n};\n\nexport function OperationDescriptionForm({\n operation,\n focusOnMount,\n setOperationDescription,\n}: Props) {\n const textFieldRef = useRef<{ focus: () => void } | null>(null);\n\n useEffect(() => {\n if (focusOnMount && textFieldRef.current) {\n textFieldRef.current.focus();\n }\n }, [focusOnMount]);\n\n return (\n <TextField\n ref={textFieldRef}\n name=\"description\"\n value={operation.description}\n onSubmit={(newDescription) =>\n setOperationDescription(operation.id, newDescription)\n }\n label=\"Operation description\"\n allowEmpty\n placeholder=\"Operation Description\"\n />\n );\n}\n","import type {\n ModuleSpecification,\n OperationErrorSpecification,\n} from \"@powerhousedao/shared/document-model\";\nimport { pascalCase } from \"change-case\";\nimport { useRef } from \"react\";\nimport { TextField } from \"./text-field.js\";\n\ntype Props = {\n operation: ModuleSpecification[\"operations\"][number];\n error?: OperationErrorSpecification;\n focusOnMount?: boolean;\n onSubmit?: () => void;\n onAddOperationError: (\n operationId: string,\n errorName: string,\n ) => Promise<string | undefined>;\n deleteOperationError: (id: string) => void;\n setOperationErrorName: (\n operationId: string,\n errorId: string,\n name: string,\n ) => void;\n};\n\nexport function OperationErrorForm({\n operation,\n error,\n focusOnMount,\n onSubmit,\n onAddOperationError,\n deleteOperationError,\n setOperationErrorName,\n}: Props) {\n const textFieldRef = useRef<{ focus: () => void } | null>(null);\n const isEdit = !!error;\n const allOperationErrorNames = operation.errors\n .map((o) => o.name)\n .filter((n) => n !== null);\n\n const handleSubmit = (name: string) => {\n if (isEdit && name === \"\") {\n deleteOperationError(error.id);\n return;\n }\n\n const formattedName = pascalCase(name);\n\n if (isEdit) {\n setOperationErrorName(operation.id, error.id, formattedName);\n } else {\n void onAddOperationError(operation.id, formattedName);\n }\n onSubmit?.();\n };\n\n const handleChange = (value: string) => {\n if (isEdit && value === \"\") {\n deleteOperationError(error.id);\n }\n };\n\n return (\n <TextField\n ref={textFieldRef}\n name=\"name\"\n value={error?.name}\n onSubmit={handleSubmit}\n onChange={handleChange}\n placeholder=\"Add exception\"\n required={!isEdit}\n allowEmpty={!isEdit}\n shouldReset={!isEdit}\n unique={allOperationErrorNames}\n focusOnMount={focusOnMount}\n />\n );\n}\n","import type { ModuleSpecification } from \"@powerhousedao/shared/document-model\";\nimport { useCallback, useId, useState } from \"react\";\nimport { OperationErrorForm } from \"./operation-error-form.js\";\n\ntype Props = {\n operation: ModuleSpecification[\"operations\"][number];\n addOperationError: (\n operationId: string,\n errorName: string,\n ) => Promise<string | undefined>;\n deleteOperationError: (id: string) => void;\n setOperationErrorName: (\n operationId: string,\n errorId: string,\n name: string,\n ) => void;\n};\n\nexport function OperationErrors({\n operation,\n addOperationError,\n deleteOperationError,\n setOperationErrorName,\n}: Props) {\n const addErrorFormId = useId();\n const [shouldFocusAddForm, setShouldFocusAddForm] = useState(false);\n\n const onAddOperationError = useCallback(\n async (operationId: string, error: string) => {\n const errorId = await addOperationError(operationId, error);\n if (errorId) {\n setShouldFocusAddForm(true);\n }\n return errorId;\n },\n [addOperationError, setShouldFocusAddForm],\n );\n\n const onAddOperationErrorSubmit = useCallback(\n () => setShouldFocusAddForm(false),\n [setShouldFocusAddForm],\n );\n\n return (\n <ul className=\"ml-4 list-disc\">\n {operation.errors.map((error) => (\n <li key={error.id}>\n <OperationErrorForm\n error={error}\n operation={operation}\n onAddOperationError={onAddOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n />\n </li>\n ))}\n <li>\n <OperationErrorForm\n operation={operation}\n onAddOperationError={onAddOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n key={`${addErrorFormId}-${shouldFocusAddForm}`}\n focusOnMount={shouldFocusAddForm}\n onSubmit={onAddOperationErrorSubmit}\n />\n </li>\n </ul>\n );\n}\n","import type { ModuleSpecification } from \"@powerhousedao/shared/document-model\";\nimport { lazy, Suspense, useCallback } from \"react\";\nimport type { DocumentActionHandlers } from \"../types/documents.js\";\nimport { isEmptyOperationSchema } from \"../utils/helpers.js\";\nimport { ensureValidOperationSchemaInputName } from \"../utils/linting.js\";\nimport { OperationDescriptionForm } from \"./operation-description-form.js\";\nimport { OperationErrors } from \"./operation-errors.js\";\nimport { OperationForm } from \"./operation-form.js\";\nconst GraphqlEditor = lazy(() => import(\"./code-editors/graphql-editor.js\"));\nexport type WrappedHandlers = DocumentActionHandlers & {\n addOperationAndInitialSchema: (\n moduleId: string,\n name: string,\n ) => Promise<string | undefined>;\n};\ntype Props = {\n lastCreatedOperationId: string | null;\n operation: ModuleSpecification[\"operations\"][number];\n module: ModuleSpecification;\n allOperationNames: string[];\n onAddOperationAndInitialSchema: (\n moduleId: string,\n name: string,\n ) => Promise<string | undefined>;\n updateOperationName: (id: string, name: string) => void;\n deleteOperation: (id: string) => void;\n updateOperationSchema: (id: string, newDoc: string) => void;\n setOperationDescription: (id: string, description: string) => void;\n addOperationError: (\n operationId: string,\n errorName: string,\n ) => Promise<string | undefined>;\n deleteOperationError: (id: string) => void;\n setOperationErrorName: (\n operationId: string,\n errorId: string,\n name: string,\n ) => void;\n toggleNoInputRequired: (id: string, noInputRequired: boolean) => void;\n};\nexport function Operation(props: Props) {\n const {\n operation,\n module,\n allOperationNames,\n lastCreatedOperationId,\n onAddOperationAndInitialSchema,\n updateOperationName,\n deleteOperation,\n updateOperationSchema,\n setOperationDescription,\n addOperationError,\n deleteOperationError,\n setOperationErrorName,\n toggleNoInputRequired,\n } = props;\n\n const noInputRequired = isEmptyOperationSchema(operation.schema);\n\n const handleToggleNoInput = useCallback(\n (checked: boolean) => toggleNoInputRequired(operation.id, checked),\n [operation.id, toggleNoInputRequired],\n );\n\n const handleUpdateDocument = useCallback(\n (newDoc: string) => updateOperationSchema(operation.id, newDoc),\n [operation.id, updateOperationSchema],\n );\n\n const customLinter = useCallback(\n (doc: string) =>\n operation.name\n ? ensureValidOperationSchemaInputName(doc, operation.name)\n : [],\n [operation.name],\n );\n\n return (\n <div\n className=\"mt-4 grid grid-cols-2 gap-x-12\"\n style={{\n gridTemplateAreas: `\n \"left editor\"\n \"errors editor\"\n `,\n gridTemplateRows: \"auto 1fr\",\n }}\n >\n <div className=\"flex flex-col gap-2\" style={{ gridArea: \"left\" }}>\n <OperationForm\n operation={operation}\n onAddOperationAndInitialSchema={onAddOperationAndInitialSchema}\n updateOperationName={updateOperationName}\n deleteOperation={deleteOperation}\n module={module}\n allOperationNames={allOperationNames}\n />\n <OperationDescriptionForm\n operation={operation}\n focusOnMount={operation.id === lastCreatedOperationId}\n setOperationDescription={setOperationDescription}\n />\n </div>\n\n <div className=\"relative top-8\" style={{ gridArea: \"editor\" }}>\n <label className=\"mb-2 flex cursor-pointer items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={noInputRequired}\n onChange={(e) => handleToggleNoInput(e.target.checked)}\n className=\"size-4 rounded-sm border-border\"\n />\n <span className=\"text-sm text-foreground\">\n Operation with no inputs\n </span>\n </label>\n {!noInputRequired && (\n <Suspense>\n <GraphqlEditor\n doc={operation.schema ?? \"\"}\n updateDocumentInModel={handleUpdateDocument}\n customLinter={customLinter}\n />\n </Suspense>\n )}\n </div>\n\n <div style={{ gridArea: \"errors\" }}>\n <h3 className=\"my-2 text-sm font-medium text-foreground\">\n Reducer Exceptions\n </h3>\n <OperationErrors\n operation={operation}\n addOperationError={addOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n />\n </div>\n </div>\n );\n}\n","import { OperationForm } from \"./operation-form.js\";\nimport type { ModuleSpecification } from \"@powerhousedao/shared/document-model\";\nimport { useCallback, useId, useState } from \"react\";\nimport { Operation } from \"./operation.js\";\n\ntype Props = {\n module: ModuleSpecification;\n allOperations: ModuleSpecification[\"operations\"];\n shouldFocusNewOperation: boolean;\n updateOperationName: (id: string, name: string) => void;\n deleteOperation: (id: string) => void;\n addOperationAndInitialSchema: (\n moduleId: string,\n name: string,\n ) => Promise<string | undefined>;\n updateOperationSchema: (id: string, newDoc: string) => void;\n setOperationDescription: (id: string, description: string) => void;\n addOperationError: (\n operationId: string,\n errorName: string,\n ) => Promise<string | undefined>;\n deleteOperationError: (id: string) => void;\n setOperationErrorName: (\n operationId: string,\n errorId: string,\n name: string,\n ) => void;\n toggleNoInputRequired: (id: string, noInputRequired: boolean) => void;\n};\nexport function Operations({\n module,\n allOperations,\n shouldFocusNewOperation,\n updateOperationName,\n deleteOperation,\n addOperationAndInitialSchema,\n addOperationError,\n deleteOperationError,\n setOperationErrorName,\n updateOperationSchema,\n setOperationDescription,\n toggleNoInputRequired,\n}: Props) {\n const [lastCreatedOperationId, setLastCreatedOperationId] = useState<\n string | null\n >(null);\n const addOperationFormId = useId();\n const allOperationNames = allOperations\n .map((o) => o.name)\n .filter((n) => n !== null);\n\n const onAddOperationAndInitialSchema = useCallback(\n async (moduleId: string, name: string) => {\n const operationId = await addOperationAndInitialSchema(moduleId, name);\n if (operationId) {\n setLastCreatedOperationId(operationId);\n }\n return operationId;\n },\n [addOperationAndInitialSchema, setLastCreatedOperationId],\n );\n\n return (\n <div>\n {module.operations.map((operation) => (\n <div key={operation.id}>\n <Operation\n operation={operation}\n module={module}\n lastCreatedOperationId={lastCreatedOperationId}\n allOperationNames={allOperationNames}\n addOperationError={addOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n onAddOperationAndInitialSchema={onAddOperationAndInitialSchema}\n updateOperationName={updateOperationName}\n deleteOperation={deleteOperation}\n updateOperationSchema={updateOperationSchema}\n setOperationDescription={setOperationDescription}\n toggleNoInputRequired={toggleNoInputRequired}\n />\n </div>\n ))}\n <div className=\"mt-6 w-1/2 pr-6\">\n <OperationForm\n key={addOperationFormId}\n onAddOperationAndInitialSchema={onAddOperationAndInitialSchema}\n updateOperationName={updateOperationName}\n deleteOperation={deleteOperation}\n module={module}\n allOperationNames={allOperationNames}\n focusOnMount={shouldFocusNewOperation}\n />\n </div>\n </div>\n );\n}\n","import type { ModuleSpecification as TModule } from \"@powerhousedao/shared/document-model\";\nimport { ModuleForm } from \"./module-form.js\";\nimport { Operations } from \"./operations.js\";\ntype Props = {\n module?: TModule;\n modules?: TModule[];\n allOperations: TModule[\"operations\"];\n lastCreatedModuleId: string | null;\n onAddModule: (name: string) => Promise<string | undefined>;\n updateModuleName: (id: string, name: string) => void;\n deleteModule: (id: string) => void;\n updateOperationName: (id: string, name: string) => void;\n deleteOperation: (id: string) => void;\n addOperationAndInitialSchema: (\n moduleId: string,\n name: string,\n ) => Promise<string | undefined>;\n updateOperationSchema: (id: string, newDoc: string) => void;\n setOperationDescription: (id: string, description: string) => void;\n addOperationError: (\n operationId: string,\n errorName: string,\n ) => Promise<string | undefined>;\n deleteOperationError: (id: string) => void;\n setOperationErrorName: (\n operationId: string,\n errorId: string,\n name: string,\n ) => void;\n toggleNoInputRequired: (id: string, noInputRequired: boolean) => void;\n};\nexport function Module(props: Props) {\n const {\n module,\n modules,\n allOperations,\n lastCreatedModuleId,\n onAddModule,\n updateModuleName,\n deleteModule,\n updateOperationName,\n deleteOperation,\n addOperationAndInitialSchema,\n updateOperationSchema,\n setOperationDescription,\n addOperationError,\n deleteOperationError,\n setOperationErrorName,\n toggleNoInputRequired,\n } = props;\n return (\n <div className=\"relative rounded-3xl bg-muted p-6\">\n <div className=\"mb-2 w-1/2 pr-6\">\n <ModuleForm\n modules={modules}\n module={module}\n onAddModule={onAddModule}\n updateModuleName={updateModuleName}\n />\n {!!module && (\n <button\n aria-label=\"Delete module\"\n tabIndex={-1}\n className=\"absolute top-1 right-1 p-2 text-foreground transition-colors hover:hover-effect\"\n onClick={() => {\n deleteModule(module.id);\n }}\n >\n <svg className=\"size-6\" viewBox=\"0 0 24 24\" fill=\"currentcolor\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.9993 8.51506L15.4844 7L11.9994 10.4852L8.51497 7.00057L7 8.51562L10.4844 12.0003L7.00056 15.4843L8.51552 16.9994L11.9994 13.5153L15.4838 17L16.9988 15.4849L13.5144 12.0003L16.9993 8.51506Z\"\n />\n </svg>\n </button>\n )}\n </div>\n {!!module && (\n <Operations\n module={module}\n allOperations={allOperations}\n shouldFocusNewOperation={module.id === lastCreatedModuleId}\n updateOperationName={updateOperationName}\n deleteOperation={deleteOperation}\n addOperationAndInitialSchema={addOperationAndInitialSchema}\n updateOperationSchema={updateOperationSchema}\n setOperationDescription={setOperationDescription}\n addOperationError={addOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n toggleNoInputRequired={toggleNoInputRequired}\n />\n )}\n </div>\n );\n}\n","import type { ModuleSpecification as TModule } from \"@powerhousedao/shared/document-model\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { Module } from \"./module.js\";\n\ntype Props = {\n modules: TModule[];\n allOperations: TModule[\"operations\"];\n addModule: (name: string) => Promise<string | undefined>;\n updateModuleName: (id: string, name: string) => void;\n deleteModule: (id: string) => void;\n updateOperationName: (id: string, name: string) => void;\n deleteOperation: (id: string) => void;\n addOperationAndInitialSchema: (\n moduleId: string,\n name: string,\n ) => Promise<string | undefined>;\n updateOperationSchema: (id: string, newDoc: string) => void;\n setOperationDescription: (id: string, description: string) => void;\n addOperationError: (\n operationId: string,\n errorName: string,\n ) => Promise<string | undefined>;\n deleteOperationError: (id: string) => void;\n setOperationErrorName: (\n operationId: string,\n errorId: string,\n name: string,\n ) => void;\n toggleNoInputRequired: (id: string, noInputRequired: boolean) => void;\n};\nexport default function Modules({\n modules,\n allOperations,\n addModule,\n updateModuleName,\n deleteModule,\n updateOperationName,\n deleteOperation,\n addOperationAndInitialSchema,\n updateOperationSchema,\n setOperationDescription,\n addOperationError,\n deleteOperationError,\n setOperationErrorName,\n toggleNoInputRequired,\n}: Props) {\n const [lastCreatedModuleId, setLastCreatedModuleId] = useState<string | null>(\n null,\n );\n const focusTrapRef = useRef<HTMLDivElement>(null);\n\n const onAddModule = useCallback(\n async (name: string) => {\n const moduleId = await addModule(name);\n if (moduleId) {\n setLastCreatedModuleId(moduleId);\n focusTrapRef.current?.focus();\n }\n return moduleId;\n },\n [addModule, setLastCreatedModuleId],\n );\n\n return (\n <div className=\"flex flex-col gap-2\">\n {modules.map((module) => (\n <Module\n key={module.id}\n module={module}\n modules={modules}\n allOperations={allOperations}\n lastCreatedModuleId={lastCreatedModuleId}\n onAddModule={onAddModule}\n updateModuleName={updateModuleName}\n deleteModule={deleteModule}\n updateOperationName={updateOperationName}\n deleteOperation={deleteOperation}\n addOperationAndInitialSchema={addOperationAndInitialSchema}\n updateOperationSchema={updateOperationSchema}\n setOperationDescription={setOperationDescription}\n addOperationError={addOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n toggleNoInputRequired={toggleNoInputRequired}\n />\n ))}\n <Module\n key=\"add-module\"\n modules={modules}\n allOperations={allOperations}\n lastCreatedModuleId={lastCreatedModuleId}\n onAddModule={onAddModule}\n updateModuleName={updateModuleName}\n deleteModule={deleteModule}\n updateOperationName={updateOperationName}\n deleteOperation={deleteOperation}\n addOperationAndInitialSchema={addOperationAndInitialSchema}\n updateOperationSchema={updateOperationSchema}\n setOperationDescription={setOperationDescription}\n addOperationError={addOperationError}\n deleteOperationError={deleteOperationError}\n setOperationErrorName={setOperationErrorName}\n toggleNoInputRequired={toggleNoInputRequired}\n />\n {/* Focus trap to prevent tabbing out of the editor */}\n <div\n ref={focusTrapRef}\n tabIndex={0}\n className=\"size-0 overflow-hidden\"\n aria-hidden=\"true\"\n />\n </div>\n );\n}\n","import type { PHDocumentEditorConfig } from \"@powerhousedao/reactor-browser\";\n\nexport const editorConfig: PHDocumentEditorConfig = {\n isExternalControlsEnabled: false,\n};\n","import {\n useDocumentOfType,\n useSelectedDocumentOfType,\n} from \"@powerhousedao/reactor-browser\";\nimport type {\n DocumentModelAction,\n DocumentModelDocument,\n} from \"@powerhousedao/shared/document-model\";\n\nexport function useDocumentModelDocument(\n documentId: string | undefined | null,\n): ReturnType<\n typeof useDocumentOfType<DocumentModelDocument, DocumentModelAction>\n> {\n return useDocumentOfType<DocumentModelDocument, DocumentModelAction>(\n documentId,\n \"powerhouse/document-model\",\n );\n}\n\nexport function useSelectedDocumentModelDocument(): ReturnType<\n typeof useSelectedDocumentOfType<DocumentModelDocument, DocumentModelAction>\n> {\n return useSelectedDocumentOfType<DocumentModelDocument, DocumentModelAction>(\n \"powerhouse/document-model\",\n );\n}\n","import { DocumentToolbar } from \"@powerhousedao/design-system/connect\";\nimport {\n usePHToast,\n useSetPHDocumentEditorConfig,\n} from \"@powerhousedao/reactor-browser\";\nimport { pascalCase } from \"change-case\";\nimport { generateId } from \"@powerhousedao/shared/document-model\";\nimport {\n addModule,\n addOperation,\n addOperationError,\n deleteModule,\n deleteOperation,\n deleteOperationError,\n setAuthorName,\n setAuthorWebsite,\n setInitialState,\n setModelDescription,\n setModelExtension,\n setModelId,\n setModelName,\n setModuleName,\n setOperationDescription,\n setOperationErrorName,\n setOperationName,\n setOperationSchema,\n setStateSchema,\n} from \"@powerhousedao/shared/document-model\";\nimport { lazy, Suspense, useEffect, useRef, useState } from \"react\";\nimport { Divider } from \"./components/divider.js\";\nimport ModelMetadata from \"./components/model-metadata-form.js\";\nimport Modules from \"./components/modules.js\";\nimport { editorConfig } from \"./config.js\";\nimport { SchemaContextProvider } from \"./context/schema-context.js\";\nimport { useSelectedDocumentModelDocument } from \"./hooks/useDocumentModelDocument.js\";\nimport type { Scope } from \"./types/documents.js\";\nimport {\n compareStringsWithoutWhitespace,\n initializeModelSchema,\n makeEmptyOperationSchema,\n makeOperationInitialDoc,\n} from \"./utils/helpers.js\";\nconst StateSchemas = lazy(() => import(\"./components/state-schemas.js\"));\n\nexport default function Editor() {\n useSetPHDocumentEditorConfig(editorConfig);\n const toast = usePHToast();\n const [document, dispatch] = useSelectedDocumentModelDocument();\n const [scope, setScope] = useState<Scope>(\"global\");\n const documentNodeName = document.header.name;\n const {\n name: modelName,\n id: documentType,\n extension,\n description,\n author: { name: authorName, website: authorWebsite },\n } = document.state.global;\n const {\n state: {\n global: {\n schema: globalStateSchema,\n initialValue: globalStateInitialValue,\n },\n local: { schema: localStateSchema, initialValue: localStateInitialValue },\n },\n modules,\n } = document.state.global.specifications[0];\n const operations = modules.flatMap((module) => module.operations);\n const shouldSetInitialName = useRef(\n !modelName && !!documentNodeName && operations.length === 0,\n );\n\n useEffect(() => {\n if (!shouldSetInitialName.current || !documentNodeName) return;\n\n const initialSchemaDoc = initializeModelSchema(documentNodeName);\n const actions = [\n setModelName({ name: documentNodeName }),\n setStateSchema({ schema: initialSchemaDoc, scope: \"global\" }),\n ];\n dispatch(actions);\n shouldSetInitialName.current = false;\n }, [documentNodeName, dispatch]);\n\n const operationSchemasSdl = operations\n .flatMap((operation) => operation.schema ?? [])\n .join(\"\\n\");\n\n const handleSetModelId = (id: string) => {\n if (compareStringsWithoutWhitespace(id, documentType)) return;\n dispatch([setModelId({ id })]);\n };\n\n const handleSetModelDescription = (newDescription: string) => {\n if (compareStringsWithoutWhitespace(newDescription, description)) return;\n dispatch(setModelDescription({ description: newDescription }));\n };\n\n const handleSetModelExtension = (newExtension: string) => {\n if (compareStringsWithoutWhitespace(newExtension, extension)) return;\n dispatch(setModelExtension({ extension: newExtension }));\n };\n\n const handleSetModelName = (newName: string) => {\n if (compareStringsWithoutWhitespace(newName, modelName)) return;\n dispatch(setModelName({ name: newName }));\n };\n\n const handleSetAuthorName = (newAuthorName: string) => {\n if (compareStringsWithoutWhitespace(newAuthorName, authorName)) return;\n dispatch(setAuthorName({ authorName: newAuthorName }));\n };\n\n const handleSetAuthorWebsite = (newAuthorWebsite: string) => {\n if (compareStringsWithoutWhitespace(newAuthorWebsite, authorWebsite ?? \"\"))\n return;\n dispatch(setAuthorWebsite({ authorWebsite: newAuthorWebsite }));\n };\n\n const handleSetStateSchema = (newSchema: string, scope: Scope) => {\n const oldSchema = scope === \"global\" ? globalStateSchema : localStateSchema;\n if (compareStringsWithoutWhitespace(newSchema, oldSchema)) return;\n dispatch(setStateSchema({ schema: newSchema, scope }));\n };\n\n const handleSetInitialState = (newInitialValue: string, scope: Scope) => {\n const oldInitialValue =\n scope === \"global\" ? globalStateInitialValue : localStateInitialValue;\n if (compareStringsWithoutWhitespace(newInitialValue, oldInitialValue))\n return;\n dispatch(setInitialState({ initialValue: newInitialValue, scope }));\n };\n\n const handleAddModule = (name: string): Promise<string | undefined> => {\n return new Promise((resolve) => {\n try {\n if (\n modules.some((module) =>\n compareStringsWithoutWhitespace(module.name, name),\n )\n ) {\n resolve(undefined);\n return;\n }\n const id = generateId();\n dispatch(addModule({ id, name }));\n resolve(id);\n } catch (error) {\n console.error(\"Failed to add module:\", error);\n resolve(undefined);\n }\n });\n };\n\n const handleSetModuleName = (id: string, name: string) => {\n if (\n modules.some((module) =>\n compareStringsWithoutWhitespace(module.name, name),\n )\n )\n return;\n dispatch(setModuleName({ id, name }));\n };\n\n const handleDeleteModule = (id: string) => {\n dispatch(deleteModule({ id }));\n };\n\n const handleAddOperation = (\n moduleId: string,\n name: string,\n ): Promise<string | undefined> => {\n return new Promise((resolve) => {\n const id = generateId();\n dispatch(\n addOperation({ id, moduleId, name, scope }),\n (errors) => {\n if (errors.length > 0) {\n if (toast) {\n toast(errors[0].message, { type: \"connect-warning\" });\n }\n resolve(undefined);\n } else {\n resolve(id);\n }\n },\n () => resolve(id),\n );\n });\n };\n\n const handleSetOperationName = (id: string, name: string) => {\n dispatch(setOperationName({ id, name }), (errors) => {\n if (errors.length > 0 && toast) {\n toast(errors[0].message, { type: \"connect-warning\" });\n }\n });\n };\n\n const handleSetOperationSchema = (id: string, newSchema: string) => {\n const operation = operations.find((operation) => operation.id === id);\n if (\n operation?.schema &&\n compareStringsWithoutWhitespace(newSchema, operation.schema)\n )\n return;\n dispatch(setOperationSchema({ id, schema: newSchema }));\n };\n\n const handleToggleNoInputRequired = (\n id: string,\n noInputRequired: boolean,\n ) => {\n const operation = operations.find((op) => op.id === id);\n if (!operation?.name) return;\n\n if (noInputRequired) {\n dispatch(\n setOperationSchema({\n id,\n schema: makeEmptyOperationSchema(operation.name),\n }),\n );\n } else {\n dispatch(\n setOperationSchema({\n id,\n schema: makeOperationInitialDoc(operation.name),\n }),\n );\n }\n };\n\n const handleSetOperationDescription = (\n id: string,\n newDescription: string,\n ) => {\n const operationDescription =\n operations.find((operation) => operation.id === id)?.description ?? \"\";\n if (compareStringsWithoutWhitespace(operationDescription, newDescription))\n return;\n dispatch(setOperationDescription({ id, description: newDescription }));\n };\n\n const handleDeleteOperation = (id: string) => {\n dispatch(deleteOperation({ id }));\n };\n\n const handleAddOperationError = (\n operationId: string,\n errorName: string,\n ): Promise<string | undefined> => {\n return new Promise((resolve) => {\n try {\n const operation = operations.find(\n (operation) => operation.id === operationId,\n );\n const operationErrorNames =\n operation?.errors.map((error) => error.name).filter(Boolean) ?? [];\n if (\n operationErrorNames.some((name) =>\n compareStringsWithoutWhitespace(name, errorName),\n )\n ) {\n resolve(undefined);\n return;\n }\n const id = generateId();\n const errorCode = pascalCase(errorName);\n dispatch(addOperationError({ id, operationId, errorName, errorCode }));\n resolve(id);\n } catch (error) {\n console.error(\"Failed to add operation error:\", error);\n resolve(undefined);\n }\n });\n };\n\n const handleDeleteOperationError = (id: string) => {\n dispatch(deleteOperationError({ id }));\n };\n\n const handleSetOperationErrorName = (\n operationId: string,\n errorId: string,\n errorName: string,\n ) => {\n const operation = operations.find(\n (operation) => operation.id === operationId,\n );\n const operationErrorNames =\n operation?.errors.map((error) => error.name).filter(Boolean) ?? [];\n if (\n operationErrorNames.some((name) =>\n compareStringsWithoutWhitespace(name, errorName),\n )\n )\n return;\n dispatch(setOperationErrorName({ id: errorId, errorName }));\n };\n\n const addOperationAndInitialSchema = async (\n moduleId: string,\n name: string,\n ): Promise<string | undefined> => {\n try {\n const id = await handleAddOperation(moduleId, name);\n if (!id) return undefined;\n try {\n handleSetOperationSchema(id, makeOperationInitialDoc(name));\n return id;\n } catch (error) {\n console.error(\"Failed to update operation schema:\", error);\n return undefined;\n }\n } catch (error) {\n console.error(\"Failed to add operation and schema:\", error);\n return undefined;\n }\n };\n\n return (\n <main className=\"min-h-dvh bg-background p-6\">\n <DocumentToolbar />\n <SchemaContextProvider\n globalStateSchemaSdl={globalStateSchema}\n localStateSchemaSdl={localStateSchema}\n operationSchemasSdl={operationSchemasSdl}\n >\n <div className=\"mx-auto max-w-6xl px-4 pt-8\">\n <ModelMetadata\n name={modelName}\n documentType={documentType}\n extension={extension}\n description={description}\n authorName={authorName}\n authorWebsite={authorWebsite ?? \"\"}\n globalStateSchema={globalStateSchema}\n localStateSchema={localStateSchema}\n setModelId={handleSetModelId}\n setModelDescription={handleSetModelDescription}\n setModelExtension={handleSetModelExtension}\n setModelName={handleSetModelName}\n setAuthorName={handleSetAuthorName}\n setAuthorWebsite={handleSetAuthorWebsite}\n setStateSchema={handleSetStateSchema}\n />\n <Divider />\n <div>\n <Suspense>\n <StateSchemas\n modelName={modelName}\n globalStateSchema={globalStateSchema}\n globalStateInitialValue={globalStateInitialValue}\n localStateSchema={localStateSchema}\n localStateInitialValue={localStateInitialValue}\n setStateSchema={handleSetStateSchema}\n setInitialState={handleSetInitialState}\n currentScope={scope}\n onScopeChange={setScope}\n />\n </Suspense>\n <Divider />\n <h3 className=\"mb-6 text-lg text-foreground capitalize\">\n {scope} Operations\n </h3>\n <Modules\n modules={modules.map((module) => ({\n ...module,\n operations: module.operations.filter(\n (op) => op.scope === scope,\n ),\n }))}\n allOperations={operations}\n addModule={handleAddModule}\n updateModuleName={handleSetModuleName}\n deleteModule={handleDeleteModule}\n updateOperationName={handleSetOperationName}\n updateOperationSchema={handleSetOperationSchema}\n setOperationDescription={handleSetOperationDescription}\n deleteOperation={handleDeleteOperation}\n addOperationError={handleAddOperationError}\n deleteOperationError={handleDeleteOperationError}\n setOperationErrorName={handleSetOperationErrorName}\n addOperationAndInitialSchema={addOperationAndInitialSchema}\n toggleNoInputRequired={handleToggleNoInputRequired}\n />\n </div>\n </div>\n </SchemaContextProvider>\n </main>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3,5,6,10],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import "./document-drive-C8hbqQ3C.mjs";
2
- import { t as Breadcrumbs } from "./connect-KcYZcy_Z.mjs";
3
- import { k as useSetPHAppConfig } from "./dist-DJEK2WVi.mjs";
4
- import { i as CreateDocument, n as DriveLayout, t as FolderView } from "./folder-view-Cy-QxsDg.mjs";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- //#region editors/generic-drive-explorer/config.ts
7
- const editorConfig = {
8
- allowedDocumentTypes: [],
9
- isDragAndDropEnabled: true
10
- };
11
- //#endregion
12
- //#region editors/generic-drive-explorer/editor.tsx
13
- function Editor(props) {
14
- useSetPHAppConfig(editorConfig);
15
- const { className, children } = props;
16
- const showDocumentEditor = !!children;
17
- return /* @__PURE__ */ jsxs(DriveLayout, {
18
- className,
19
- children: [
20
- !showDocumentEditor && /* @__PURE__ */ jsx(DriveLayout.Header, { children: /* @__PURE__ */ jsx(Breadcrumbs, {}) }),
21
- showDocumentEditor ? children : /* @__PURE__ */ jsx(DriveLayout.Content, { children: /* @__PURE__ */ jsx(FolderView, {}) }),
22
- !showDocumentEditor && /* @__PURE__ */ jsx(DriveLayout.Footer, { children: /* @__PURE__ */ jsx(CreateDocument, {}) })
23
- ]
24
- });
25
- }
26
- //#endregion
27
- export { Editor as default };
28
-
29
- //# sourceMappingURL=editor-yBGEvMGD.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor-yBGEvMGD.mjs","names":[],"sources":["../../editors/generic-drive-explorer/config.ts","../../editors/generic-drive-explorer/editor.tsx"],"sourcesContent":["import type { PHAppConfig } from \"@powerhousedao/reactor-browser\";\n\nexport const editorConfig: PHAppConfig = {\n allowedDocumentTypes: [],\n isDragAndDropEnabled: true,\n};\n","import { Breadcrumbs } from \"@powerhousedao/design-system/connect\";\nimport { useSetPHAppConfig } from \"@powerhousedao/reactor-browser\";\nimport type { EditorProps } from \"@powerhousedao/shared/document-model\";\nimport { CreateDocument } from \"./components/create-document.js\";\nimport FolderView from \"./components/folder-view.js\";\nimport { DriveLayout } from \"./components/layout.js\";\nimport { editorConfig } from \"./config.js\";\n\nexport default function Editor(props: EditorProps) {\n useSetPHAppConfig(editorConfig);\n const { className, children } = props;\n const showDocumentEditor = !!children;\n\n return (\n <DriveLayout className={className}>\n {!showDocumentEditor && (\n <DriveLayout.Header>\n <Breadcrumbs />\n </DriveLayout.Header>\n )}\n {showDocumentEditor ? (\n children\n ) : (\n <DriveLayout.Content>\n <FolderView />\n </DriveLayout.Content>\n )}\n {!showDocumentEditor && (\n <DriveLayout.Footer>\n <CreateDocument />\n </DriveLayout.Footer>\n )}\n </DriveLayout>\n );\n}\n"],"mappings":";;;;;;AAEA,MAAa,eAA4B;CACvC,sBAAsB,EAAE;CACxB,sBAAsB;CACvB;;;ACGD,SAAwB,OAAO,OAAoB;AACjD,mBAAkB,aAAa;CAC/B,MAAM,EAAE,WAAW,aAAa;CAChC,MAAM,qBAAqB,CAAC,CAAC;AAE7B,QACE,qBAAC,aAAD;EAAwB;YAAxB;GACG,CAAC,sBACA,oBAAC,YAAY,QAAb,EAAA,UACE,oBAAC,aAAD,EAAe,CAAA,EACI,CAAA;GAEtB,qBACC,WAEA,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,YAAD,EAAc,CAAA,EACM,CAAA;GAEvB,CAAC,sBACA,oBAAC,YAAY,QAAb,EAAA,UACE,oBAAC,gBAAD,EAAkB,CAAA,EACC,CAAA;GAEX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"folder-view-Cy-QxsDg.mjs","names":[],"sources":["../../editors/generic-drive-explorer/components/create-document.tsx","../../editors/generic-drive-explorer/components/file-content-view.tsx","../../editors/generic-drive-explorer/components/layout.tsx","../../editors/generic-drive-explorer/components/folder-view.tsx"],"sourcesContent":["import { PowerhouseButton } from \"@powerhousedao/design-system\";\nimport {\n preloadEditorModule,\n showCreateDocumentModal,\n useAllowedDocumentModelModules,\n useDisabledEditors,\n useEditorModules,\n useUserPermissions,\n} from \"@powerhousedao/reactor-browser\";\nimport type {\n DocumentModelGlobalState,\n DocumentModelModule,\n} from \"@powerhousedao/shared/document-model\";\n\nfunction getDocumentSpec(doc: DocumentModelModule): DocumentModelGlobalState {\n return doc.documentModel.global;\n}\n\nexport function CreateDocument() {\n const { isAllowedToCreateDocuments } = useUserPermissions();\n // Respect Connect config: allowedDocumentTypes (allowlist) via the hook,\n // disabledEditors (denylist) subtracted below.\n const allowedDocumentModelModules = useAllowedDocumentModelModules();\n const editorModules = useEditorModules();\n const disabledEditors = useDisabledEditors() ?? [];\n // Drive containers are never documents-in-a-drive; hide them structurally so\n // this shared editor can't fail open when disabledEditors is unset.\n const DRIVE_CONTAINER_TYPES = [\n \"powerhouse/document-drive\",\n \"powerhouse/reactor-drive\",\n ];\n const visibleDocumentModelModules = allowedDocumentModelModules?.filter(\n (module) => {\n const id = module.documentModel.global.id;\n return (\n !DRIVE_CONTAINER_TYPES.includes(id) && !disabledEditors.includes(id)\n );\n },\n );\n const preloadEditorsForType = (documentType: string) =>\n editorModules\n ?.filter((editorModule) =>\n editorModule.documentTypes.includes(documentType),\n )\n .forEach((editorModule) => {\n void preloadEditorModule(editorModule);\n });\n if (!isAllowedToCreateDocuments) return null;\n return (\n <div className=\"px-6 py-4\">\n <h3 className=\"mb-3 text-xl font-bold text-foreground\">New document</h3>\n <div className=\"flex w-full flex-wrap gap-4\">\n {visibleDocumentModelModules?.map((doc) => {\n const spec = getDocumentSpec(doc);\n const versionLabel = doc.version ? ` v${doc.version}` : \"\";\n return (\n <PowerhouseButton\n key={`${spec.id}-v${doc.version ?? 1}`}\n color=\"light\"\n title={`${spec.name}${versionLabel}`}\n aria-description={spec.description}\n onMouseEnter={() => preloadEditorsForType(spec.id)}\n onFocus={() => preloadEditorsForType(spec.id)}\n onClick={() => showCreateDocumentModal(spec.id)}\n >\n <span className=\"text-sm\">\n {spec.name}\n {versionLabel}\n </span>\n </PowerhouseButton>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useWindowSize } from \"@powerhousedao/design-system\";\nimport { FileItem } from \"@powerhousedao/design-system/connect\";\nimport {\n isFileNodeKind,\n useNodesInSelectedDriveOrFolder,\n} from \"@powerhousedao/reactor-browser\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { FileNode } from \"@powerhousedao/shared/document-drive\";\nimport React, { useRef } from \"react\";\n\nconst GAP = 8;\nconst ITEM_WIDTH = 256;\nconst ITEM_HEIGHT = 48;\n\nconst USED_SPACE = 420;\n\nexport function FileContentView() {\n const parentRef = useRef(null);\n const windowSize = useWindowSize();\n const availableWidth = windowSize.innerWidth - USED_SPACE;\n const nodes = useNodesInSelectedDriveOrFolder();\n const fileNodes = nodes.filter((n) => isFileNodeKind(n));\n const columnCount = Math.floor(availableWidth / (ITEM_WIDTH + GAP)) || 1;\n const rowCount = Math.ceil(fileNodes.length / columnCount);\n\n const rowVirtualizer = useVirtualizer({\n count: rowCount,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => {\n if (index > 0) {\n return ITEM_HEIGHT + GAP;\n }\n return ITEM_HEIGHT;\n },\n overscan: 5,\n });\n\n const columnVirtualizer = useVirtualizer({\n horizontal: true,\n count: columnCount,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => {\n if (index > 0) {\n return ITEM_WIDTH + GAP;\n }\n return ITEM_WIDTH;\n },\n overscan: 5,\n });\n\n const getItemIndex = (rowIndex: number, columnIndex: number) =>\n rowIndex * columnCount + columnIndex;\n\n const getItem = (rowIndex: number, columnIndex: number): FileNode | null => {\n const index = getItemIndex(rowIndex, columnIndex);\n return fileNodes[index] || null;\n };\n\n if (fileNodes.length === 0) {\n return (\n <div className=\"mb-8 text-sm text-muted-foreground\">\n No documents or files 📄\n </div>\n );\n }\n\n const renderItem = (rowIndex: number, columnIndex: number) => {\n const fileNode = getItem(rowIndex, columnIndex);\n\n if (!fileNode) {\n return null;\n }\n\n return (\n <div\n style={{\n marginLeft: columnIndex === 0 ? 0 : GAP,\n }}\n >\n <FileItem key={fileNode.id} fileNode={fileNode} />\n </div>\n );\n };\n\n return (\n <div\n ref={parentRef}\n style={{\n width: `100%`,\n overflow: \"auto\",\n }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: `${columnVirtualizer.getTotalSize()}px`,\n position: \"relative\",\n }}\n >\n {rowVirtualizer.getVirtualItems().map((virtualRow) => (\n <React.Fragment key={virtualRow.key}>\n {columnVirtualizer.getVirtualItems().map((virtualColumn) => (\n <div\n key={virtualColumn.key}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n marginTop: virtualRow.index === 0 ? 0 : GAP,\n width: `${virtualColumn.size}px`,\n height: `${ITEM_HEIGHT}px`,\n overflow: \"hidden\",\n transform: `translateX(${virtualColumn.start}px) translateY(${virtualRow.start}px)`,\n }}\n >\n {renderItem(virtualRow.index, virtualColumn.index)}\n </div>\n ))}\n </React.Fragment>\n ))}\n </div>\n </div>\n );\n}\n","import { twMerge } from \"tailwind-merge\";\nimport type { BaseProps } from \"../utils/types.js\";\n\nexport function DriveLayout({ children, className, ...props }: BaseProps) {\n return (\n <DriveLayout.Container className={className} {...props}>\n {children}\n </DriveLayout.Container>\n );\n}\n\nDriveLayout.Container = function DriveLayoutContainer({\n children,\n className,\n containerProps,\n ...props\n}: BaseProps) {\n return (\n <div\n className={twMerge(\"flex grow flex-col overflow-auto\", className)}\n {...containerProps}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nDriveLayout.Header = function DriveLayoutHeader({\n children,\n className,\n containerProps,\n ...props\n}: BaseProps) {\n return (\n <div\n className={twMerge(\"flex-0\", className)}\n {...containerProps}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nDriveLayout.Content = function DriveLayoutContent({\n children,\n className,\n containerProps,\n ...props\n}: BaseProps) {\n return (\n <div\n className={twMerge(\"mb-5 flex-1 px-4\", className)}\n {...containerProps}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nDriveLayout.ContentSection = function DriveLayoutContentSection({\n title,\n children,\n className,\n containerProps,\n ...props\n}: BaseProps & { title?: string }) {\n return (\n <div className={twMerge(className)} {...containerProps} {...props}>\n {title && (\n <div className=\"mb-4 text-base font-semibold text-foreground\">\n {title}\n </div>\n )}\n <div className=\"flex flex-wrap gap-2\">{children}</div>\n </div>\n );\n};\n\nDriveLayout.Footer = function DriveLayoutFooter({\n children,\n className,\n containerProps,\n ...props\n}: BaseProps) {\n return (\n <div\n className={twMerge(\"flex-0\", className)}\n {...containerProps}\n {...props}\n >\n {children}\n </div>\n );\n};\n","import { FolderItem } from \"@powerhousedao/design-system/connect\";\nimport {\n isFolderNodeKind,\n useNodesInSelectedDriveOrFolder,\n} from \"@powerhousedao/reactor-browser\";\nimport { twMerge } from \"tailwind-merge\";\nimport { FileContentView } from \"./file-content-view.js\";\nimport { DriveLayout } from \"./layout.js\";\n\nexport function FolderView(props: { className?: string }) {\n const { className } = props;\n const nodes = useNodesInSelectedDriveOrFolder();\n const folderNodes = nodes.filter((n) => isFolderNodeKind(n));\n return (\n <div\n className={twMerge(\n \"rounded-md border-2 border-transparent p-2\",\n className,\n )}\n >\n <DriveLayout.ContentSection title=\"Folders\" className=\"mb-4\">\n {folderNodes.length > 0 ? (\n folderNodes.map((folderNode) => (\n <FolderItem key={folderNode.id} folderNode={folderNode} />\n ))\n ) : (\n <div className=\"mb-8 text-sm text-muted-foreground\">\n No documents or files 📄\n </div>\n )}\n </DriveLayout.ContentSection>\n <DriveLayout.ContentSection title=\"Documents and files\">\n <div className=\"w-full\">\n <FileContentView />\n </div>\n </DriveLayout.ContentSection>\n </div>\n );\n}\n\nexport default FolderView;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"linting-Dx50GuLN.mjs","names":["z.lazy","z.union","z.string","z.number","z.boolean","z.null","z.array","z.record","Kind","z.string","z.boolean","z.number","GraphQLError","Kind"],"sources":["../../../../node_modules/.pnpm/@powerhousedao+document-engineering@1.40.5_@types+express@4.17.25_@types+react-dom@19.2_75e28b6ec666f63b132a491ff3a6fdf7/node_modules/@powerhousedao/document-engineering/dist/src/scalars/graphql/utils.js","../../editors/document-model-editor/constants/graphql-kinds.ts","../../editors/document-model-editor/utils/helpers.ts","../../editors/document-model-editor/utils/linting.ts"],"sourcesContent":["import { z } from 'zod';\nimport { customScalars } from './scalars.js';\nexport const SerializableSchema = z.lazy(() => z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(SerializableSchema),\n z.record(z.string(), SerializableSchema),\n]));\nexport function isSerializable(value) {\n const result = SerializableSchema.safeParse(value);\n return result.success;\n}\nexport function getPHCustomScalarByTypeName(name) {\n const scalar = Object.values(customScalars).find((scalar) => scalar.config.name === name) ?? null;\n return scalar;\n}\n//# sourceMappingURL=utils.js.map","export const STRING_GQL_PRIMITIVE_NAME = \"String\";\nexport const BOOLEAN_GQL_PRIMITIVE_NAME = \"Boolean\";\nexport const INT_GQL_PRIMITIVE_NAME = \"Int\";\nexport const FLOAT_GQL_PRIMITIVE_NAME = \"Float\";\nexport const ID_GQL_PRIMITIVE_NAME = \"ID\";\n\nexport const gqlPrimitiveNodeNamesList = [\n STRING_GQL_PRIMITIVE_NAME,\n BOOLEAN_GQL_PRIMITIVE_NAME,\n INT_GQL_PRIMITIVE_NAME,\n FLOAT_GQL_PRIMITIVE_NAME,\n ID_GQL_PRIMITIVE_NAME,\n] as const;\n\nexport type GqlPrimitiveNodeNames = typeof gqlPrimitiveNodeNamesList;\nexport type GqlPrimitiveNodeName = GqlPrimitiveNodeNames[number];\n","import type { Serializable } from \"@powerhousedao/document-engineering/graphql\";\nimport { getPHCustomScalarByTypeName } from \"@powerhousedao/document-engineering/graphql\";\nimport { pascalCase } from \"change-case\";\nimport type {\n ASTNode,\n DefinitionNode,\n DocumentNode,\n EnumTypeDefinitionNode,\n FieldDefinitionNode,\n GraphQLInputType,\n GraphQLObjectType,\n GraphQLOutputType,\n GraphQLSchema,\n InputObjectTypeDefinitionNode,\n ListTypeNode,\n NamedTypeNode,\n NonNullTypeNode,\n ObjectTypeDefinitionNode,\n ScalarTypeDefinitionNode,\n TypeNode,\n UnionTypeDefinitionNode,\n} from \"graphql\";\nimport {\n buildASTSchema,\n getOperationAST,\n getVariableValues,\n GraphQLError,\n GraphQLInputObjectType,\n GraphQLList,\n GraphQLNonNull,\n isEnumType,\n isListType,\n isNonNullType,\n isObjectType,\n isScalarType,\n Kind,\n parse,\n print,\n visit,\n} from \"graphql\";\nimport { z } from \"zod\";\nimport type { GqlPrimitiveNodeName } from \"../constants/graphql-kinds.js\";\nimport {\n BOOLEAN_GQL_PRIMITIVE_NAME,\n FLOAT_GQL_PRIMITIVE_NAME,\n gqlPrimitiveNodeNamesList,\n ID_GQL_PRIMITIVE_NAME,\n INT_GQL_PRIMITIVE_NAME,\n STRING_GQL_PRIMITIVE_NAME,\n} from \"../constants/graphql-kinds.js\";\nimport { safeParseSdl } from \"../context/schema-context.js\";\nimport type { Scope } from \"../types/documents.js\";\n\nexport function makeStateSchemaNameForScope(modelName: string, scope: string) {\n const modelNamePascalCase = pascalCase(modelName);\n const scopePascalCase = pascalCase(scope);\n const name =\n scopePascalCase === \"Global\"\n ? `${modelNamePascalCase}State`\n : `${modelNamePascalCase}${scopePascalCase}State`;\n return name;\n}\n\nexport function makeInitialSchemaDoc(modelName: string, scope: string) {\n const name = makeStateSchemaNameForScope(modelName, scope);\n const stateSchemaSdl = `type ${name} {\n \"Add your ${scope} state fields here\"\n _placeholder: String\n}`;\n return stateSchemaSdl;\n}\n\nexport function makeOperationInitialDoc(name: string) {\n const inputSdl = `input ${pascalCase(name)}Input {\n \"Add your inputs here\"\n _placeholder: String\n}`;\n return inputSdl;\n}\n\nexport function makeEmptyOperationSchema(operationName: string): string {\n const pascalName = pascalCase(operationName);\n return `input ${pascalName}Input {\\n _empty: Boolean\\n}`;\n}\n\nexport function isEmptyOperationSchema(\n schema: string | null | undefined,\n): boolean {\n if (!schema) return false;\n // Check if schema only contains _empty: Boolean field\n return (\n /_empty:\\s*Boolean/.test(schema) &&\n !schema.replace(/_empty:\\s*Boolean/, \"\").match(/\\w+:\\s*\\w+/)\n );\n}\n\nexport function safeParseJsonRecord(json: string) {\n try {\n return JSON.parse(json) as Record<string, Serializable>;\n } catch (_error) {\n return null;\n }\n}\n\nexport function makeMinimalObjectForStateType(args: {\n sharedSchemaDocumentNode: DocumentNode;\n stateTypeDefinitionNode: ObjectTypeDefinitionNode;\n existingValue: string;\n}) {\n const { sharedSchemaDocumentNode, stateTypeDefinitionNode, existingValue } =\n args;\n const existingValueObject = safeParseJsonRecord(existingValue);\n if (!existingValueObject) {\n return existingValue;\n }\n const stateTypeDefinitionFields = stateTypeDefinitionNode.fields;\n if (!stateTypeDefinitionFields?.length) {\n return existingValue;\n }\n // Initialize visitedTypes with the root type to detect self-recursive types\n const visitedTypes = new Set<string>([stateTypeDefinitionNode.name.value]);\n const minimalObject = makeMinimalValuesForObjectFields({\n schemaDocumentNode: sharedSchemaDocumentNode,\n fieldDefinitionNodes: stateTypeDefinitionFields,\n existingValueObject,\n visitedTypes,\n });\n return JSON.stringify(minimalObject, null, 2);\n}\n\nexport function makeMinimalValuesForObjectFields(args: {\n schemaDocumentNode: DocumentNode;\n existingValueObject: Record<string, Serializable> | null;\n fieldDefinitionNodes: readonly FieldDefinitionNode[];\n visitedTypes?: Set<string>;\n}) {\n const {\n schemaDocumentNode,\n existingValueObject,\n fieldDefinitionNodes,\n visitedTypes,\n } = args;\n const newJson: Record<string, Serializable> = {};\n\n for (const astNode of fieldDefinitionNodes) {\n const fieldName = getASTNodeName(astNode);\n if (!fieldName) {\n continue;\n }\n const minimalValue = makeMinimalValueForASTNode({\n fieldName,\n astNode,\n schemaDocumentNode,\n existingValueObject,\n visitedTypes,\n });\n newJson[astNode.name.value] = minimalValue;\n }\n\n return newJson;\n}\n\nfunction makeMinimalValueForASTNode(args: {\n fieldName: string;\n astNode: ASTNode;\n schemaDocumentNode: DocumentNode;\n existingValueObject: Record<string, Serializable> | null;\n visitedTypes?: Set<string>;\n}): Serializable {\n const {\n fieldName,\n astNode,\n schemaDocumentNode,\n existingValueObject,\n visitedTypes,\n } = args;\n const existingFieldValue = existingValueObject?.[fieldName];\n let node: ASTNode | null = astNode;\n\n if (isFieldDefinitionNode(astNode)) {\n node = getASTNodeTypeNode(node);\n }\n const isNonNull = isNonNullNode(node);\n if (isNonNull) {\n node = getASTNodeTypeNode(node);\n }\n\n if (isListTypeNode(node)) {\n return makeMinimalValueForGqlListNode(\n node,\n existingFieldValue,\n isNonNull,\n schemaDocumentNode,\n visitedTypes,\n );\n }\n if (isGqlPrimitiveNode(node)) {\n return makeMinimalValueForGQLPrimitiveNode(\n node,\n existingFieldValue,\n isNonNull,\n );\n }\n\n const namedTypeDefinitionNode = getNamedTypeDefinitionNode(\n node,\n schemaDocumentNode,\n );\n\n if (isEnumTypeDefinitionNode(namedTypeDefinitionNode)) {\n return makeMinimalValueForGqlEnum(\n namedTypeDefinitionNode,\n existingFieldValue,\n isNonNull,\n );\n }\n if (isScalarTypeDefinitionNode(namedTypeDefinitionNode)) {\n return makeMinimalValueForGqlScalar(\n namedTypeDefinitionNode,\n existingFieldValue,\n isNonNull,\n );\n }\n if (isUnionTypeDefinitionNode(namedTypeDefinitionNode)) {\n return makeMinimalValueForGqlUnion(\n namedTypeDefinitionNode,\n existingFieldValue,\n schemaDocumentNode,\n existingValueObject,\n isNonNull,\n visitedTypes,\n );\n }\n if (isObjectTypeDefinitionNode(namedTypeDefinitionNode)) {\n return makeMinimalValueForGqlObject(\n namedTypeDefinitionNode,\n schemaDocumentNode,\n existingValueObject,\n existingFieldValue,\n isNonNull,\n visitedTypes,\n );\n }\n\n return existingFieldValue;\n}\n\nfunction isFieldDefinitionNode(\n astNodeTypeNode: ASTNode | null,\n): astNodeTypeNode is FieldDefinitionNode {\n if (!astNodeTypeNode) return false;\n return astNodeTypeNode.kind === Kind.FIELD_DEFINITION;\n}\n\nfunction isNonNullNode(astNode: ASTNode | null): astNode is NonNullTypeNode {\n if (!astNode) return false;\n return astNode.kind === Kind.NON_NULL_TYPE;\n}\n\nexport function isGqlPrimitiveNode(\n astNodeTypeNode: ASTNode | null,\n): astNodeTypeNode is NamedTypeNode {\n if (!astNodeTypeNode) return false;\n const name = getASTNodeName(astNodeTypeNode);\n return gqlPrimitiveNodeNamesList.includes(name as GqlPrimitiveNodeName);\n}\n\nfunction isListTypeNode(\n astNodeTypeNode: ASTNode | null,\n): astNodeTypeNode is ListTypeNode {\n if (!astNodeTypeNode) return false;\n return astNodeTypeNode.kind === Kind.LIST_TYPE;\n}\n\nfunction isEnumTypeDefinitionNode(\n definitionNode: DefinitionNode | null,\n): definitionNode is EnumTypeDefinitionNode {\n if (!definitionNode) return false;\n return definitionNode.kind === Kind.ENUM_TYPE_DEFINITION;\n}\n\nfunction isScalarTypeDefinitionNode(\n definitionNode: DefinitionNode | null,\n): definitionNode is ScalarTypeDefinitionNode {\n if (!definitionNode) return false;\n return definitionNode.kind === Kind.SCALAR_TYPE_DEFINITION;\n}\n\nfunction isUnionTypeDefinitionNode(\n definitionNode: DefinitionNode | null,\n): definitionNode is UnionTypeDefinitionNode {\n if (!definitionNode) return false;\n return definitionNode.kind === Kind.UNION_TYPE_DEFINITION;\n}\n\nfunction isObjectTypeDefinitionNode(\n definitionNode: DefinitionNode | null,\n): definitionNode is ObjectTypeDefinitionNode {\n if (!definitionNode) return false;\n return definitionNode.kind === Kind.OBJECT_TYPE_DEFINITION;\n}\n\nfunction getASTNodeName(astNode: ASTNode | null) {\n if (!astNode) {\n return null;\n }\n if (!(\"name\" in astNode)) {\n return null;\n }\n if (!astNode.name) {\n return null;\n }\n if (!(\"value\" in astNode.name)) {\n return null;\n }\n return astNode.name.value;\n}\n\nfunction getASTNodeTypeNode(astNode: ASTNode | null) {\n if (!astNode) {\n return null;\n }\n if (!(\"type\" in astNode)) {\n return null;\n }\n return astNode.type;\n}\n\nfunction makeMinimalValueForGQLPrimitiveNode(\n primitiveTypeNode: NamedTypeNode,\n existingFieldValue: Serializable,\n isNonNull: boolean,\n) {\n const name = getASTNodeName(primitiveTypeNode);\n if (!name) {\n return null;\n }\n switch (name) {\n case ID_GQL_PRIMITIVE_NAME: {\n if (z.string().safeParse(existingFieldValue).success) {\n return existingFieldValue;\n }\n return isNonNull ? \"placeholder-id\" : null;\n }\n case BOOLEAN_GQL_PRIMITIVE_NAME: {\n if (z.boolean().safeParse(existingFieldValue).success) {\n return existingFieldValue;\n }\n return isNonNull ? false : null;\n }\n case INT_GQL_PRIMITIVE_NAME: {\n if (z.number().safeParse(existingFieldValue).success) {\n return existingFieldValue;\n }\n return isNonNull ? 0 : null;\n }\n case FLOAT_GQL_PRIMITIVE_NAME: {\n if (z.number().safeParse(existingFieldValue).success) {\n return existingFieldValue;\n }\n return isNonNull ? 0.0 : null;\n }\n case STRING_GQL_PRIMITIVE_NAME: {\n if (z.string().safeParse(existingFieldValue).success) {\n return existingFieldValue;\n }\n return isNonNull ? \"\" : null;\n }\n }\n\n return isNonNull ? existingFieldValue : null;\n}\n\nfunction makeMinimalValueForGqlEnum(\n namedTypeDefinitionNode: EnumTypeDefinitionNode,\n existingFieldValue: Serializable,\n isNonNull: boolean,\n) {\n const enumValues =\n namedTypeDefinitionNode.values?.map((value) => value.name.value) ?? [];\n if (\n typeof existingFieldValue === \"string\" &&\n enumValues.includes(existingFieldValue)\n ) {\n return existingFieldValue;\n }\n if (isNonNull) {\n return enumValues[0];\n }\n return null;\n}\n\nfunction makeMinimalValueForGqlScalar(\n scalarTypeDefinitionNode: ScalarTypeDefinitionNode,\n existingFieldValue: Serializable,\n isNonNull: boolean,\n) {\n if (!isNonNull && !existingFieldValue) {\n return null;\n }\n const name = getASTNodeName(scalarTypeDefinitionNode);\n if (!name) {\n console.error(\n \"No name for scalar type definition node\",\n scalarTypeDefinitionNode,\n );\n return null;\n }\n const scalar = getPHCustomScalarByTypeName(name);\n if (!scalar) {\n return null;\n }\n const existingValueIsValid = scalar.schema.safeParse(existingFieldValue);\n if (existingValueIsValid.success) {\n return existingFieldValue;\n }\n if (!isNonNull) {\n return null;\n }\n const minimalValue = scalar.getDefaultValue?.();\n if (minimalValue) {\n return minimalValue;\n }\n return existingFieldValue;\n}\n\nfunction makeMinimalValueForGqlUnion(\n namedTypeDefinitionNode: UnionTypeDefinitionNode,\n existingFieldValue: Serializable,\n schemaDocumentNode: DocumentNode,\n existingValueObject: Record<string, Serializable> | null,\n isNonNull: boolean,\n visitedTypes?: Set<string>,\n) {\n if (!isNonNull && !existingFieldValue) {\n return null;\n }\n\n const types = namedTypeDefinitionNode.types;\n if (!types?.length) {\n return null;\n }\n\n const firstNamedTypeDefinitionNode = namedTypeDefinitionNode.types?.at(0);\n if (!firstNamedTypeDefinitionNode) {\n return null;\n }\n const firstNamedTypeObjectDefinitionNode = getNamedTypeDefinitionNode(\n firstNamedTypeDefinitionNode,\n schemaDocumentNode,\n );\n if (!isObjectTypeDefinitionNode(firstNamedTypeObjectDefinitionNode)) {\n return null;\n }\n return makeMinimalValueForGqlObject(\n firstNamedTypeObjectDefinitionNode,\n schemaDocumentNode,\n existingValueObject,\n existingFieldValue,\n isNonNull,\n visitedTypes,\n );\n}\n\nfunction makeMinimalValueForGqlListNode(\n listTypeNode: ListTypeNode,\n existingFieldValue: Serializable,\n isNonNull: boolean,\n schemaDocumentNode: DocumentNode,\n visitedTypes?: Set<string>,\n) {\n if (!isNonNull && !Array.isArray(existingFieldValue)) {\n return null;\n }\n if (isNonNull && !Array.isArray(existingFieldValue)) {\n return [];\n }\n\n // Process each array item recursively\n const arrayValue = existingFieldValue as Serializable[];\n return arrayValue.map((item, index) =>\n makeMinimalValueForASTNode({\n fieldName: String(index),\n astNode: listTypeNode.type,\n schemaDocumentNode,\n existingValueObject: { [index]: item },\n visitedTypes,\n }),\n );\n}\n\nfunction makeMinimalValueForGqlObject(\n objectTypeDefinitionNode: ObjectTypeDefinitionNode,\n schemaDocumentNode: DocumentNode,\n _existingValueObject: Record<string, Serializable> | null,\n existingFieldValue: Serializable,\n isNonNull: boolean,\n visitedTypes?: Set<string>,\n) {\n const typeName = objectTypeDefinitionNode.name.value;\n\n // Check for recursive types to prevent infinite recursion\n if (visitedTypes?.has(typeName)) {\n return null;\n }\n\n if (!isNonNull && !existingFieldValue) {\n return null;\n }\n const fields = objectTypeDefinitionNode.fields;\n if (!fields?.length) {\n return {};\n }\n\n // Track this type to detect cycles\n const newVisitedTypes = new Set(visitedTypes);\n newVisitedTypes.add(typeName);\n\n // Use existingFieldValue (the actual nested object) instead of existingValueObject (parent)\n const nestedExistingValue =\n existingFieldValue &&\n typeof existingFieldValue === \"object\" &&\n !Array.isArray(existingFieldValue)\n ? (existingFieldValue as Record<string, Serializable>)\n : null;\n return makeMinimalValuesForObjectFields({\n schemaDocumentNode,\n existingValueObject: nestedExistingValue,\n fieldDefinitionNodes: fields,\n visitedTypes: newVisitedTypes,\n });\n}\n\nfunction getNamedTypeDefinitionNode(\n astNodeTypeNode: ASTNode | null,\n schemaDocumentNode: DocumentNode,\n) {\n if (!astNodeTypeNode) {\n return null;\n }\n const name = getASTNodeName(astNodeTypeNode);\n if (!name) {\n return null;\n }\n const definitionNode = schemaDocumentNode.definitions.find(\n (def) => \"kind\" in def && \"name\" in def && def.name?.value === name,\n );\n if (!definitionNode) {\n return null;\n }\n return definitionNode;\n}\n\nfunction removeWhitespace(str: string) {\n return str.replace(/\\s+|\\\\n|\\\\t/g, \"\").toLowerCase();\n}\n\nexport function compareStringsWithoutWhitespace(\n str1: string | null | undefined,\n str2: string | null | undefined,\n) {\n if (\n str1 === null ||\n str2 === null ||\n str1 === undefined ||\n str2 === undefined\n )\n return false;\n return removeWhitespace(str1) === removeWhitespace(str2);\n}\n\nexport function renameSchemaType(\n sdl: string,\n oldName: string,\n newName: string,\n scope: Scope,\n): string {\n const typeSuffix = scope === \"global\" ? \"State\" : \"LocalState\";\n const oldTypeName = `${pascalCase(oldName)}${typeSuffix}`;\n const newTypeName = `${pascalCase(newName)}${typeSuffix}`;\n\n const ast = safeParseSdl(sdl);\n if (!ast) return sdl;\n\n const updatedAst = visit(ast, {\n ObjectTypeDefinition: (node) => {\n if (node.name.value === oldTypeName) {\n return {\n ...node,\n name: {\n ...node.name,\n value: newTypeName,\n },\n };\n }\n },\n });\n\n return print(updatedAst);\n}\n\nexport function initializeModelSchema(modelName: string) {\n const initialSchemaDoc = makeInitialSchemaDoc(modelName, \"global\");\n return initialSchemaDoc;\n}\n\nexport function updateModelSchemaNames(params: {\n oldName: string;\n newName: string;\n globalStateSchema: string;\n localStateSchema: string;\n setStateSchema: (schema: string, scope: Scope) => void;\n}) {\n const {\n oldName,\n newName,\n globalStateSchema,\n localStateSchema,\n setStateSchema,\n } = params;\n\n const newSchema = renameSchemaType(\n globalStateSchema,\n oldName,\n newName,\n \"global\",\n );\n setStateSchema(newSchema, \"global\");\n\n if (localStateSchema) {\n const newLocalStateSchema = renameSchemaType(\n localStateSchema,\n oldName,\n newName,\n \"local\",\n );\n setStateSchema(newLocalStateSchema, \"local\");\n }\n}\n\nexport function handleModelNameChange(params: {\n oldName: string;\n newName: string;\n globalStateSchema: string;\n localStateSchema: string;\n setStateSchema: (schema: string, scope: Scope) => void;\n}) {\n const { newName, globalStateSchema, setStateSchema } = params;\n\n const hasExistingSchema = !!globalStateSchema;\n\n if (!hasExistingSchema) {\n const initialSchemaDoc = initializeModelSchema(newName);\n setStateSchema(initialSchemaDoc, \"global\");\n return;\n }\n\n updateModelSchemaNames(params);\n}\n\n/**\n * Converts an output object type into an equivalent input object type.\n * Intended for structural validation of state objects.\n */\nexport function objectTypeToInputType(\n schema: GraphQLSchema,\n objectType: GraphQLObjectType,\n options?: {\n nameSuffix?: string;\n cache?: Map<string, GraphQLInputObjectType>;\n },\n): GraphQLInputObjectType {\n const suffix = options?.nameSuffix ?? \"Input\";\n const cache = options?.cache ?? new Map<string, GraphQLInputObjectType>();\n\n const inputTypeName = `${objectType.name}${suffix}`;\n\n if (cache.has(inputTypeName)) {\n return cache.get(inputTypeName)!;\n }\n\n const inputType = new GraphQLInputObjectType({\n name: inputTypeName,\n fields: () => {\n const fields = objectType.getFields();\n const inputFields: Record<string, { type: GraphQLInputType }> = {};\n\n for (const fieldName in fields) {\n const field = fields[fieldName];\n\n if (field.args.length > 0) {\n throw new Error(\n `Cannot convert field \"${objectType.name}.${fieldName}\" with arguments into input type`,\n );\n }\n\n inputFields[fieldName] = {\n type: outputTypeToInputType(schema, field.type, suffix, cache),\n };\n }\n\n return inputFields;\n },\n });\n\n cache.set(inputTypeName, inputType);\n return inputType;\n}\n\nfunction outputTypeToInputType(\n schema: GraphQLSchema,\n type: GraphQLOutputType,\n suffix: string,\n cache: Map<string, GraphQLInputObjectType>,\n): GraphQLInputType {\n if (isNonNullType(type)) {\n return new GraphQLNonNull(\n outputTypeToInputType(schema, type.ofType, suffix, cache),\n );\n }\n\n if (isListType(type)) {\n return new GraphQLList(\n outputTypeToInputType(schema, type.ofType, suffix, cache),\n );\n }\n\n if (isScalarType(type) || isEnumType(type)) {\n return type;\n }\n\n if (isObjectType(type)) {\n return objectTypeToInputType(schema, type, {\n nameSuffix: suffix,\n cache,\n });\n }\n\n throw new Error(`Unsupported output type: ${type.toString()}`);\n}\n\nexport function validateStateObject(\n sharedSchemaDocumentNode: DocumentNode,\n stateTypeDefinitionNode: ObjectTypeDefinitionNode,\n stateValue: string,\n): Error[] {\n let stateObjectJson: Record<string, unknown> | undefined;\n try {\n stateObjectJson = JSON.parse(stateValue) as Record<string, unknown>;\n } catch (error) {\n return [new Error(\"Invalid JSON object\", { cause: error })];\n }\n\n // 2) Build a quick index of type definitions from the shared schema\n const typeDefByName = indexTypeDefinitions(sharedSchemaDocumentNode);\n\n // Ensure the passed node exists in the shared schema (optional but helpful)\n const stateTypeName = stateTypeDefinitionNode.name.value;\n if (!typeDefByName.has(stateTypeName)) {\n return [\n new Error(\n `State type \"${stateTypeName}\" was not found in sharedSchemaDocumentNode`,\n ),\n ];\n }\n\n // 3) Generate input types needed to validate this state object\n const inputSuffix = \"Input\";\n const generatedInputDefs = generateInputTypesForObjectTree(\n stateTypeName,\n typeDefByName,\n inputSuffix,\n );\n\n // 4) Build a schema that includes the generated input types\n const augmentedDoc: DocumentNode = {\n ...sharedSchemaDocumentNode,\n definitions: [\n ...sharedSchemaDocumentNode.definitions,\n ...generatedInputDefs,\n ],\n };\n\n let schema;\n try {\n schema = buildASTSchema(augmentedDoc, { assumeValidSDL: false });\n } catch (e) {\n return [new Error(\"Failed to build schema from SDL\", { cause: e })];\n }\n\n // 5) Validate by coercing variables against the generated input type\n const inputTypeName = `${stateTypeName}${inputSuffix}`;\n const opDoc = parse(`query($v: ${inputTypeName}!) { __typename }`);\n const op = getOperationAST(opDoc);\n\n if (!op) {\n return [new Error(\"Failed to create validation operation AST\")];\n }\n\n const { errors } = getVariableValues(schema, op.variableDefinitions ?? [], {\n v: stateObjectJson,\n });\n\n // Detect recursive types first - these take priority over NON_NULL errors\n const recursiveTypeErrors = detectRecursiveTypes(\n stateTypeDefinitionNode,\n typeDefByName,\n );\n\n // Get the field names that have recursive types\n const recursiveFieldNames = new Set(recursiveTypeErrors.map((e) => e.field));\n\n const validationErrors = errors\n ? graphQLErrorsToStateValidationErrors(errors).filter((e) => {\n // Filter out NON_NULL errors caused by recursive types\n if (e instanceof StateValidationError && e.kind === \"NON_NULL\") {\n // Check if this error is in a path that starts with a recursive field\n const rootField = e.path[0];\n if (\n typeof rootField === \"string\" &&\n recursiveFieldNames.has(rootField)\n ) {\n return false;\n }\n }\n return true;\n })\n : [];\n\n // Add recursive type errors first (they have priority)\n validationErrors.unshift(...recursiveTypeErrors);\n\n const missingOptionalErrors = detectMissingOptionalFields(\n sharedSchemaDocumentNode,\n stateTypeDefinitionNode,\n stateObjectJson,\n );\n validationErrors.push(...missingOptionalErrors);\n\n return validationErrors;\n}\n\n/**\n * Indexes object/input/enum/scalar/interface/union type definition nodes by name.\n * Note: only AST definitions that have a \"name\" field are indexed.\n */\nfunction indexTypeDefinitions(doc: DocumentNode): Map<string, DefinitionNode> {\n const map = new Map<string, DefinitionNode>();\n\n for (const def of doc.definitions) {\n if (\n def.kind === Kind.OBJECT_TYPE_DEFINITION ||\n def.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION ||\n def.kind === Kind.ENUM_TYPE_DEFINITION ||\n def.kind === Kind.SCALAR_TYPE_DEFINITION ||\n def.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n def.kind === Kind.UNION_TYPE_DEFINITION ||\n def.kind === Kind.OBJECT_TYPE_EXTENSION ||\n def.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION ||\n def.kind === Kind.ENUM_TYPE_EXTENSION ||\n def.kind === Kind.INTERFACE_TYPE_EXTENSION ||\n def.kind === Kind.UNION_TYPE_EXTENSION\n ) {\n // Extensions also have names; we index them too (but see note below).\n // In production, you may want to merge extensions into base definitions.\n // For state validation, prefer definitions (not extensions) if both exist.\n const name = def.name.value;\n if (!map.has(name)) {\n map.set(name, def);\n }\n }\n }\n\n return map;\n}\n\n/**\n * Generates InputObjectTypeDefinitionNode(s) for a root object type and any nested\n * object types reachable via fields, converting object references to their *Input equivalents*.\n */\nfunction generateInputTypesForObjectTree(\n rootObjectTypeName: string,\n typeDefByName: Map<string, DefinitionNode>,\n inputSuffix: string,\n): InputObjectTypeDefinitionNode[] {\n const generated = new Map<string, InputObjectTypeDefinitionNode>();\n const visiting = new Set<string>();\n\n const ensureInputForObject = (objectTypeName: string) => {\n const inputName = `${objectTypeName}${inputSuffix}`;\n if (generated.has(inputName)) return;\n\n if (visiting.has(objectTypeName)) {\n // Recursive reference; we rely on GraphQLInputObjectType lazy field resolution via AST schema build.\n // Still, we must avoid infinite loops while generating AST nodes.\n return;\n }\n visiting.add(objectTypeName);\n\n const def = typeDefByName.get(objectTypeName);\n if (!def) {\n throw new GraphQLError(`Unknown referenced type \"${objectTypeName}\"`);\n }\n\n if (\n def.kind !== Kind.OBJECT_TYPE_DEFINITION &&\n def.kind !== Kind.OBJECT_TYPE_EXTENSION\n ) {\n throw new GraphQLError(\n `Type \"${objectTypeName}\" is not an object type; cannot generate input from kind \"${def.kind}\"`,\n );\n }\n\n const objDef = def as ObjectTypeDefinitionNode;\n\n // Convert each field type to an input-acceptable TypeNode.\n const inputFields =\n objDef.fields?.map((f) => {\n return {\n kind: Kind.INPUT_VALUE_DEFINITION as const,\n name: f.name,\n description: f.description,\n directives: [], // output-field directives don't automatically translate to input fields\n type: convertOutputTypeNodeToInputTypeNode(\n f.type,\n typeDefByName,\n inputSuffix,\n ensureInputForObject,\n ),\n defaultValue: undefined,\n };\n }) ?? [];\n\n const inputDef: InputObjectTypeDefinitionNode = {\n kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,\n name: { kind: Kind.NAME, value: inputName },\n description: objDef.description,\n directives: [],\n fields: inputFields,\n };\n\n generated.set(inputName, inputDef);\n\n visiting.delete(objectTypeName);\n };\n\n // Kick off generation for root\n ensureInputForObject(rootObjectTypeName);\n\n return Array.from(generated.values());\n}\n\nfunction convertOutputTypeNodeToInputTypeNode(\n typeNode: TypeNode,\n typeDefByName: Map<string, DefinitionNode>,\n inputSuffix: string,\n ensureInputForObject: (objectTypeName: string) => void,\n): TypeNode {\n switch (typeNode.kind) {\n case Kind.NON_NULL_TYPE:\n return {\n kind: Kind.NON_NULL_TYPE,\n type: convertOutputTypeNodeToInputTypeNode(\n typeNode.type,\n typeDefByName,\n inputSuffix,\n ensureInputForObject,\n ) as NamedTypeNode | ListTypeNode,\n };\n\n case Kind.LIST_TYPE:\n return {\n kind: Kind.LIST_TYPE,\n type: convertOutputTypeNodeToInputTypeNode(\n typeNode.type,\n typeDefByName,\n inputSuffix,\n ensureInputForObject,\n ),\n };\n\n case Kind.NAMED_TYPE: {\n const named = typeNode as NamedTypeNode;\n const name = named.name.value;\n\n const def = typeDefByName.get(name);\n\n // If it's an object type, we must reference its generated input twin.\n if (\n def?.kind === Kind.OBJECT_TYPE_DEFINITION ||\n def?.kind === Kind.OBJECT_TYPE_EXTENSION\n ) {\n ensureInputForObject(name);\n return {\n kind: Kind.NAMED_TYPE,\n name: { kind: Kind.NAME, value: `${name}${inputSuffix}` },\n };\n }\n\n // Scalars/enums/input objects are valid as-is in input positions.\n if (\n !def ||\n def.kind === Kind.SCALAR_TYPE_DEFINITION ||\n def.kind === Kind.ENUM_TYPE_DEFINITION ||\n def.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION ||\n def.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION\n ) {\n return named;\n }\n\n // Interfaces/unions are not valid input types.\n if (\n def.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n def.kind === Kind.UNION_TYPE_DEFINITION\n ) {\n throw new GraphQLError(\n `Type \"${name}\" (${def.kind}) cannot be used in an input type`,\n );\n }\n\n // Anything else is unexpected.\n throw new GraphQLError(\n `Unsupported named type \"${name}\" of kind \"${def.kind}\"`,\n );\n }\n\n default:\n // Exhaustiveness guard\n throw new GraphQLError(\n `Unsupported TypeNode kind: ${JSON.stringify(typeNode)}`,\n );\n }\n}\n\nexport type StateValidationErrorKind =\n | \"MISSING\"\n | \"MISSING_OPTIONAL\"\n | \"UNKNOWN_FIELD\"\n | \"NON_NULL\"\n | \"TYPE\"\n | \"RECURSIVE_TYPE\";\n\nexport type StateValidationErrorPayload =\n | {\n kind: \"MISSING\";\n path: (string | number)[];\n field: string;\n expectedType?: string; // e.g. \"String!\"\n }\n | {\n kind: \"MISSING_OPTIONAL\";\n path: (string | number)[];\n field: string;\n expectedType?: string; // e.g. \"String\"\n }\n | {\n kind: \"UNKNOWN_FIELD\";\n path: (string | number)[];\n field: string;\n didYouMean?: string; // e.g. \"test\"\n typeName?: string; // e.g. \"Test5StateInput\"\n }\n | {\n kind: \"NON_NULL\";\n path: (string | number)[];\n field: string;\n expectedType?: string; // e.g. \"Int!\"\n }\n | {\n kind: \"TYPE\";\n path: (string | number)[];\n field: string;\n expectedType?: string; // e.g. \"String\" (or custom scalar)\n details?: string; // optional raw hint (e.g. \"cannot represent ...\")\n }\n | {\n kind: \"RECURSIVE_TYPE\";\n path: (string | number)[];\n field: string;\n typeName: string; // e.g. \"Item\"\n };\n\nexport class StateValidationError extends Error {\n readonly payload: StateValidationErrorPayload;\n readonly originalMessage?: string;\n\n constructor(payload: StateValidationErrorPayload, originalMessage?: string) {\n // Keep Error.message stable but not user-facing; UI should render from payload.\n super(payload.kind);\n this.name = \"StateValidationError\";\n this.payload = payload;\n this.originalMessage = originalMessage;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n get kind(): StateValidationErrorKind {\n return this.payload.kind;\n }\n\n get path(): (string | number)[] {\n return this.payload.path;\n }\n\n get field(): string {\n return this.payload.field;\n }\n}\n\nfunction extractInputPath(message: string): (string | number)[] {\n const match = message.match(/at\\s+\"([^\"]+)\"/);\n if (!match) return [];\n const parts = match[1].split(\".\").filter(Boolean);\n const withoutVar = parts[0] === \"v\" ? parts.slice(1) : parts;\n return withoutVar.map((p) => (/^\\d+$/.test(p) ? Number(p) : p));\n}\n\nconst RE_MISSING_REQUIRED_FIELD =\n /Field \"([^\"]+)\" of required type \"([^\"]+)\" was not provided\\./;\n\nconst RE_UNKNOWN_FIELD =\n /Field \"([^\"]+)\" is not defined by type \"([^\"]+)\"\\.(?: Did you mean \"([^\"]+)\"\\?)?/;\n\nfunction extractMissingRequiredField(\n message: string,\n): { field: string; expectedType: string } | null {\n const m = message.match(RE_MISSING_REQUIRED_FIELD);\n if (!m) return null;\n return { field: m[1], expectedType: m[2] };\n}\n\nfunction extractUnknownField(\n message: string,\n): { field: string; typeName: string; didYouMean?: string } | null {\n const m = message.match(RE_UNKNOWN_FIELD);\n if (!m) return null;\n return { field: m[1], typeName: m[2], didYouMean: m[3] };\n}\n\nfunction lastFieldFromPath(path: (string | number)[]): string | undefined {\n for (let i = path.length - 1; i >= 0; i--) {\n if (typeof path[i] === \"string\") return path[i] as string;\n }\n return undefined;\n}\n\nfunction extractExpectedType(message: string): string | undefined {\n // NON_NULL: Expected non-nullable type \"Int!\" not to be null.\n let m = message.match(/Expected non-nullable type \"([^\"]+)\"/);\n if (m?.[1]) return m[1];\n\n // Sometimes: Expected type \"X\" ...\n m = message.match(/Expected type \"([^\"]+)\"/);\n if (m?.[1]) return m[1];\n\n // Scalar coercion: \"; String cannot represent ...\"\n m = message.match(/;\\s*([_A-Za-z][_0-9A-Za-z]*)\\s+cannot represent/i);\n if (m?.[1]) return m[1];\n\n return undefined;\n}\n\nexport function graphQLErrorsToStateValidationErrors(\n errors: readonly Error[],\n): StateValidationError[] {\n const out: StateValidationError[] = [];\n\n for (const e of errors) {\n const originalMessage = e.message;\n\n // 1) Missing required field (no `at \"v.x\"` path usually)\n const missing = extractMissingRequiredField(originalMessage);\n if (missing) {\n out.push(\n new StateValidationError(\n {\n kind: \"MISSING\",\n path: [missing.field],\n field: missing.field,\n expectedType: missing.expectedType, // if your payload supports it\n },\n originalMessage,\n ),\n );\n continue;\n }\n\n // 2) Unknown field (extra key)\n const unknown = extractUnknownField(originalMessage);\n if (unknown) {\n out.push(\n new StateValidationError(\n {\n kind: \"UNKNOWN_FIELD\",\n path: [unknown.field],\n field: unknown.field,\n didYouMean: unknown.didYouMean, // optional\n },\n originalMessage,\n ),\n );\n continue;\n }\n\n // 3) Usual `at \"v.path\"` extraction (NON_NULL / TYPE)\n const path = extractInputPath(originalMessage);\n const field = lastFieldFromPath(path) ?? \"value\";\n const expectedType = extractExpectedType(originalMessage);\n\n if (\n originalMessage.includes(\"Expected non-nullable type\") &&\n originalMessage.includes(\"not to be null\")\n ) {\n out.push(\n new StateValidationError(\n { kind: \"NON_NULL\", path, field, expectedType },\n originalMessage,\n ),\n );\n continue;\n }\n\n if (\n originalMessage.includes(\"cannot represent\") ||\n originalMessage.includes(\"Expected type\")\n ) {\n out.push(\n new StateValidationError(\n {\n kind: \"TYPE\",\n path,\n field,\n expectedType,\n details: originalMessage,\n },\n originalMessage,\n ),\n );\n continue;\n }\n\n out.push(\n new StateValidationError(\n { kind: \"TYPE\", path, field, details: originalMessage },\n originalMessage,\n ),\n );\n }\n\n return out;\n}\n\n/**\n * Information about a missing field in the state object.\n */\nexport type MissingFieldInfo = {\n fieldName: string;\n path: (string | number)[];\n isRequired: boolean;\n /** The underlying type (unwrapped from NonNull if applicable) */\n type: TypeNode;\n};\n\n/**\n * Finds all fields defined in the schema that are missing from the state object.\n * Returns information about each missing field including whether it's required.\n */\nexport function findMissingFields(\n sharedSchemaDocumentNode: DocumentNode,\n rootTypeNode: ObjectTypeDefinitionNode,\n value: string | Record<string, unknown>,\n basePath: (string | number)[] = [],\n): MissingFieldInfo[] {\n let stateObjectJson: Record<string, unknown> | undefined;\n try {\n stateObjectJson =\n typeof value === \"string\"\n ? (JSON.parse(value) as Record<string, unknown>)\n : value;\n } catch {\n return [];\n }\n\n const typeByName = indexObjectTypes(sharedSchemaDocumentNode);\n const missingFields: MissingFieldInfo[] = [];\n\n for (const field of rootTypeNode.fields ?? []) {\n const fieldName = field.name.value;\n const fieldPath = [...basePath, fieldName];\n const isRequired = field.type.kind === Kind.NON_NULL_TYPE;\n // Unwrap NonNull to get the underlying type\n const underlyingType = isRequired\n ? (field.type as NonNullTypeNode).type\n : field.type;\n\n // Check if field is missing from the state object\n if (!(fieldName in stateObjectJson)) {\n missingFields.push({\n fieldName,\n path: fieldPath,\n isRequired,\n type: underlyingType,\n });\n continue;\n }\n\n // If present and object-typed → recurse to check nested missing fields\n const namedType = unwrapNamedType(field.type);\n const childType = namedType ? typeByName.get(namedType) : undefined;\n\n if (\n childType &&\n typeof stateObjectJson[fieldName] === \"object\" &&\n stateObjectJson[fieldName] !== null &&\n !Array.isArray(stateObjectJson[fieldName])\n ) {\n const nestedMissing = findMissingFields(\n sharedSchemaDocumentNode,\n childType,\n stateObjectJson[fieldName] as Record<string, unknown>,\n fieldPath,\n );\n missingFields.push(...nestedMissing);\n }\n }\n\n return missingFields;\n}\n\n/**\n * Detects optional fields defined in the schema that are missing from the state object.\n * Returns StateValidationError[] for each missing optional field.\n */\nexport function detectMissingOptionalFields(\n sharedSchemaDocumentNode: DocumentNode,\n rootTypeNode: ObjectTypeDefinitionNode,\n value: string | Record<string, unknown>,\n): StateValidationError[] {\n const missingFields = findMissingFields(\n sharedSchemaDocumentNode,\n rootTypeNode,\n value,\n );\n\n // Only report optional (not required) fields as MISSING_OPTIONAL errors\n // Required fields are already caught by GraphQL validation\n return missingFields\n .filter((field) => !field.isRequired)\n .map(\n (field) =>\n new StateValidationError({\n kind: \"MISSING_OPTIONAL\",\n path: field.path,\n field: field.fieldName,\n expectedType: typeNodeToString(field.type),\n }),\n );\n}\n\n/**\n * Detects fields that have recursive types (types that reference themselves directly or indirectly).\n * Returns a RECURSIVE_TYPE error for each field that contains a recursive type.\n */\nfunction detectRecursiveTypes(\n stateTypeDefinitionNode: ObjectTypeDefinitionNode,\n typeDefByName: Map<string, DefinitionNode>,\n): StateValidationError[] {\n const errors: StateValidationError[] = [];\n\n for (const field of stateTypeDefinitionNode.fields ?? []) {\n const fieldName = field.name.value;\n const namedTypeName = getNamedTypeName(field.type);\n\n if (!namedTypeName) continue;\n\n // Check if this field's type is recursive\n if (isRecursiveType(namedTypeName, typeDefByName, new Set())) {\n errors.push(\n new StateValidationError({\n kind: \"RECURSIVE_TYPE\",\n path: [fieldName],\n field: fieldName,\n typeName: namedTypeName,\n }),\n );\n }\n }\n\n return errors;\n}\n\n/**\n * Gets the named type name from a TypeNode, unwrapping NonNull and List types.\n */\nfunction getNamedTypeName(typeNode: TypeNode): string | null {\n if (typeNode.kind === Kind.NAMED_TYPE) {\n return typeNode.name.value;\n }\n if (\n typeNode.kind === Kind.NON_NULL_TYPE ||\n typeNode.kind === Kind.LIST_TYPE\n ) {\n return getNamedTypeName(typeNode.type);\n }\n return null;\n}\n\n/**\n * Checks if a type is recursive (references itself directly or indirectly through required fields).\n */\nfunction isRecursiveType(\n typeName: string,\n typeDefByName: Map<string, DefinitionNode>,\n visitedTypes: Set<string>,\n): boolean {\n if (visitedTypes.has(typeName)) {\n return true;\n }\n\n const typeDef = typeDefByName.get(typeName);\n if (!typeDef || typeDef.kind !== Kind.OBJECT_TYPE_DEFINITION) {\n return false;\n }\n\n visitedTypes.add(typeName);\n\n for (const field of typeDef.fields ?? []) {\n // Only check required fields for recursion (NonNull types)\n if (field.type.kind !== Kind.NON_NULL_TYPE) continue;\n\n const innerType = field.type.type;\n let fieldTypeName: string | null = null;\n\n if (innerType.kind === Kind.NAMED_TYPE) {\n fieldTypeName = innerType.name.value;\n } else if (innerType.kind === Kind.LIST_TYPE) {\n // For list types like [Item!]!, get the inner type\n fieldTypeName = getNamedTypeName(innerType);\n }\n\n if (\n fieldTypeName &&\n isRecursiveType(fieldTypeName, typeDefByName, visitedTypes)\n ) {\n return true;\n }\n }\n\n visitedTypes.delete(typeName);\n return false;\n}\n\n/**\n * Converts a TypeNode to its string representation (e.g., \"String\", \"Int!\", \"[String]!\")\n */\nfunction typeNodeToString(typeNode: TypeNode): string {\n switch (typeNode.kind) {\n case Kind.NAMED_TYPE:\n return typeNode.name.value;\n case Kind.NON_NULL_TYPE:\n return `${typeNodeToString(typeNode.type)}!`;\n case Kind.LIST_TYPE:\n return `[${typeNodeToString(typeNode.type)}]`;\n }\n}\n\nfunction indexObjectTypes(\n doc: DocumentNode,\n): Map<string, ObjectTypeDefinitionNode> {\n const map = new Map<string, ObjectTypeDefinitionNode>();\n for (const def of doc.definitions) {\n if (def.kind === Kind.OBJECT_TYPE_DEFINITION) {\n map.set(def.name.value, def);\n }\n }\n return map;\n}\n\nfunction unwrapNamedType(typeNode: TypeNode): string | undefined {\n if (typeNode.kind === Kind.NAMED_TYPE) return typeNode.name.value;\n if (typeNode.kind === Kind.NON_NULL_TYPE)\n return unwrapNamedType(typeNode.type);\n if (typeNode.kind === Kind.LIST_TYPE) return unwrapNamedType(typeNode.type);\n return undefined;\n}\n","import type { Diagnostic } from \"@codemirror/lint\";\nimport { pascalCase, sentenceCase } from \"change-case\";\nimport { Kind } from \"graphql\";\nimport { safeParseSdl } from \"../context/schema-context.js\";\nimport { makeStateSchemaNameForScope } from \"./helpers.js\";\n\nexport function ensureDocumentContainsNodeWithNameAndType(\n doc: string,\n nodeName: string,\n nodeType: keyof typeof Kind,\n): boolean {\n const parsedDoc = safeParseSdl(doc);\n\n if (!parsedDoc) return true;\n\n return parsedDoc.definitions.some((def) => {\n const hasMatchingType = def.kind === Kind[nodeType];\n\n return hasMatchingType && \"name\" in def && def.name?.value === nodeName;\n });\n}\n\nexport function createNodeTypeAndNameDiagnostic(\n doc: string,\n errorMessage: string,\n): Diagnostic | undefined {\n const parsedDoc = safeParseSdl(doc);\n if (!parsedDoc) return undefined;\n\n const firstNode = parsedDoc.definitions[0];\n\n const nameNode = \"name\" in firstNode ? firstNode.name : null;\n\n return {\n from: nameNode?.loc?.start ?? firstNode.loc?.start ?? 0,\n to: nameNode?.loc?.end ?? firstNode.loc?.end ?? 0,\n severity: \"error\",\n message: errorMessage,\n };\n}\n\nexport function ensureValidStateSchemaName(\n doc: string,\n modelName: string,\n scope: string,\n) {\n if (!safeParseSdl(doc)) return [];\n const requiredTypeName = makeStateSchemaNameForScope(modelName, scope);\n if (\n !ensureDocumentContainsNodeWithNameAndType(\n doc,\n requiredTypeName,\n \"OBJECT_TYPE_DEFINITION\",\n )\n ) {\n return [\n createNodeTypeAndNameDiagnostic(\n doc,\n `${sentenceCase(scope)} state schema must be named ${requiredTypeName}`,\n ),\n ].filter((d) => d !== undefined);\n }\n\n return [];\n}\n\nexport function ensureValidOperationSchemaInputName(\n doc: string | undefined,\n operationName: string,\n) {\n if (!doc || !safeParseSdl(doc)) return [];\n\n const requiredTypeName = `${pascalCase(operationName)}Input`;\n if (\n !ensureDocumentContainsNodeWithNameAndType(\n doc,\n requiredTypeName,\n \"INPUT_OBJECT_TYPE_DEFINITION\",\n )\n ) {\n return [\n createNodeTypeAndNameDiagnostic(\n doc,\n `Operation schema must contain an input type named ${requiredTypeName}`,\n ),\n ].filter((d) => d !== undefined);\n }\n\n return [];\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}