@proofkit/cli 2.0.0-beta.21 → 2.0.0-beta.23

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 (114) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/add-DrcID6d6.js +57 -0
  3. package/dist/add-DrcID6d6.js.map +1 -0
  4. package/dist/addPackageDependency-BGZl7xc5.js +4 -0
  5. package/dist/addPackageDependency-BGZl7xc5.js.map +1 -0
  6. package/dist/consts-BZnOMxpW.js +10 -0
  7. package/dist/consts-BZnOMxpW.js.map +1 -0
  8. package/dist/deploy-D25sPO7K.js +34 -0
  9. package/dist/deploy-D25sPO7K.js.map +1 -0
  10. package/dist/fmdapi-BO4QL0F8.js +2 -0
  11. package/dist/fmdapi-BO4QL0F8.js.map +1 -0
  12. package/dist/fmdapi-DyRYZWzI.js +3 -0
  13. package/dist/fmdapi-DyRYZWzI.js.map +1 -0
  14. package/dist/getUserPkgManager-Cph_6l1P.js +2 -0
  15. package/dist/getUserPkgManager-Cph_6l1P.js.map +1 -0
  16. package/dist/globalOptions-CkqEi9uC.js +2 -0
  17. package/dist/globalOptions-CkqEi9uC.js.map +1 -0
  18. package/dist/index-DALPpGd1.d.ts +366 -0
  19. package/dist/index-DALPpGd1.d.ts.map +1 -0
  20. package/dist/index.js +10 -157
  21. package/dist/index.js.map +1 -1
  22. package/dist/logger-DCEXcH26.js +2 -0
  23. package/dist/logger-DCEXcH26.js.map +1 -0
  24. package/dist/parseSettings-DJ2m9sgJ.js +2 -0
  25. package/dist/parseSettings-DJ2m9sgJ.js.map +1 -0
  26. package/dist/proofkit-webviewer-73IB1OBU.js +2 -0
  27. package/dist/proofkit-webviewer-73IB1OBU.js.map +1 -0
  28. package/dist/remove-BOCU6In3.js +2 -0
  29. package/dist/remove-BOCU6In3.js.map +1 -0
  30. package/dist/state-BVEcvFT3.js +41 -0
  31. package/dist/state-BVEcvFT3.js.map +1 -0
  32. package/dist/typegen-DyXaif5O.js +2 -0
  33. package/dist/typegen-DyXaif5O.js.map +1 -0
  34. package/dist/update-FX71y5b3.js +7 -0
  35. package/dist/update-FX71y5b3.js.map +1 -0
  36. package/dist/utils-DymV7zmv.js +3 -0
  37. package/dist/utils-DymV7zmv.js.map +1 -0
  38. package/package.json +18 -8
  39. package/template/fm-addon/ProofKitWV/de.xml +517 -20
  40. package/template/fm-addon/ProofKitWV/en.xml +517 -20
  41. package/template/fm-addon/ProofKitWV/es.xml +517 -20
  42. package/template/fm-addon/ProofKitWV/fr.xml +517 -20
  43. package/template/fm-addon/ProofKitWV/icon.png +0 -0
  44. package/template/fm-addon/ProofKitWV/icon@2x.png +0 -0
  45. package/template/fm-addon/ProofKitWV/info.json +9 -6
  46. package/template/fm-addon/ProofKitWV/info_de.json +12 -5
  47. package/template/fm-addon/ProofKitWV/info_en.json +16 -5
  48. package/template/fm-addon/ProofKitWV/info_es.json +12 -5
  49. package/template/fm-addon/ProofKitWV/info_fr.json +12 -5
  50. package/template/fm-addon/ProofKitWV/info_it.json +12 -5
  51. package/template/fm-addon/ProofKitWV/info_ja.json +12 -5
  52. package/template/fm-addon/ProofKitWV/info_ko.json +12 -5
  53. package/template/fm-addon/ProofKitWV/info_nl.json +12 -5
  54. package/template/fm-addon/ProofKitWV/info_pt.json +12 -5
  55. package/template/fm-addon/ProofKitWV/info_sv.json +12 -5
  56. package/template/fm-addon/ProofKitWV/info_zh.json +12 -5
  57. package/template/fm-addon/ProofKitWV/it.xml +517 -20
  58. package/template/fm-addon/ProofKitWV/ja.xml +517 -20
  59. package/template/fm-addon/ProofKitWV/ko.xml +517 -20
  60. package/template/fm-addon/ProofKitWV/nl.xml +517 -20
  61. package/template/fm-addon/ProofKitWV/preview.png +0 -0
  62. package/template/fm-addon/ProofKitWV/pt.xml +517 -20
  63. package/template/fm-addon/ProofKitWV/records_de.xml +0 -0
  64. package/template/fm-addon/ProofKitWV/records_en.xml +0 -0
  65. package/template/fm-addon/ProofKitWV/records_es.xml +0 -0
  66. package/template/fm-addon/ProofKitWV/records_fr.xml +0 -0
  67. package/template/fm-addon/ProofKitWV/records_it.xml +0 -0
  68. package/template/fm-addon/ProofKitWV/records_ja.xml +0 -0
  69. package/template/fm-addon/ProofKitWV/records_ko.xml +0 -0
  70. package/template/fm-addon/ProofKitWV/records_nl.xml +0 -0
  71. package/template/fm-addon/ProofKitWV/records_pt.xml +0 -0
  72. package/template/fm-addon/ProofKitWV/records_sv.xml +0 -0
  73. package/template/fm-addon/ProofKitWV/records_zh.xml +0 -0
  74. package/template/fm-addon/ProofKitWV/sv.xml +517 -20
  75. package/template/fm-addon/ProofKitWV/template.xml +0 -0
  76. package/template/fm-addon/ProofKitWV/zh.xml +517 -20
  77. package/template/nextjs-mantine/AGENTS.md +1 -0
  78. package/template/nextjs-mantine/package.json +2 -3
  79. package/template/nextjs-shadcn/AGENTS.md +1 -0
  80. package/template/nextjs-shadcn/package.json +3 -4
  81. package/template/vite-wv/.claude/launch.json +18 -0
  82. package/template/vite-wv/AGENTS.md +1 -0
  83. package/template/vite-wv/_gitignore +1 -0
  84. package/template/vite-wv/components.json +6 -6
  85. package/template/vite-wv/index.html +2 -2
  86. package/template/vite-wv/package.json +20 -37
  87. package/template/vite-wv/proofkit-typegen.config.jsonc +18 -0
  88. package/template/vite-wv/proofkit.json +4 -1
  89. package/template/vite-wv/scripts/filemaker.js +96 -0
  90. package/template/vite-wv/scripts/launch-fm.js +19 -0
  91. package/template/vite-wv/scripts/upload.js +17 -14
  92. package/template/vite-wv/src/App.tsx +84 -0
  93. package/template/vite-wv/src/index.css +96 -0
  94. package/template/vite-wv/src/lib/utils.ts +6 -0
  95. package/template/vite-wv/src/main.tsx +14 -35
  96. package/template/vite-wv/src/router.tsx +57 -0
  97. package/template/vite-wv/src/routes/query-demo.tsx +37 -0
  98. package/template/vite-wv/tsconfig.json +3 -1
  99. package/template/vite-wv/vite.config.ts +5 -5
  100. package/dist/index-JtcdNmdz.d.ts +0 -1
  101. package/template/vite-wv/pnpm-lock.yaml +0 -2294
  102. package/template/vite-wv/postcss.config.cjs +0 -15
  103. package/template/vite-wv/scripts/launch-fm.sh +0 -3
  104. package/template/vite-wv/src/components/AppLogo.tsx +0 -5
  105. package/template/vite-wv/src/components/full-screen-loader.tsx +0 -9
  106. package/template/vite-wv/src/config/env.ts +0 -16
  107. package/template/vite-wv/src/config/theme/globals.css +0 -125
  108. package/template/vite-wv/src/config/theme/mantine-theme.ts +0 -22
  109. package/template/vite-wv/src/routeTree.gen.ts +0 -111
  110. package/template/vite-wv/src/routes/__root.tsx +0 -21
  111. package/template/vite-wv/src/routes/index.tsx +0 -51
  112. package/template/vite-wv/src/routes/secondary.tsx +0 -26
  113. package/template/vite-wv/src/utils/notification-helpers.ts +0 -32
  114. package/template/vite-wv/src/utils/styles.ts +0 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # @proofgeist/kit
2
2
 
3
+ ## 2.0.0-beta.23
4
+
5
+ ### Minor Changes
6
+
7
+ - b73b0d7: - cli: Revamp the WebViewer Vite template and harden `proofkit init` (ignore hidden files, improve non-interactive prompts, stop generating Cursor rules).
8
+ - cli: Install typegen skills locally when scaffolding projects.
9
+ - typegen: Add optional `fmMcp` config for using an FM MCP proxy during metadata fetching.
10
+ - fmdapi/fmodata/webviewer: Add initial Codex skills for client and integration workflows.
11
+ - b73b0d7: Rebrand FM HTTP → FM MCP across the stack. The adapter, config fields, and all references now use `fm-mcp` / `FmMcp` naming to reflect the FileMaker MCP server branding.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [b73b0d7]
16
+ - Updated dependencies [b73b0d7]
17
+ - @proofkit/typegen@1.1.0-beta.19
18
+ - @proofkit/fmdapi@5.1.0-beta.3
19
+
20
+ ## 2.0.0-beta.1
21
+
22
+ ### Major Changes
23
+
24
+ - d3c7979: Rewrite the CLI package for better observability, composability, and error tracing.
25
+
26
+ ### Patch Changes
27
+
28
+ - d7f86a4: Update newly scaffolded apps to use Ultracite for linting and formatting by default, including the generated `lint` and `format` scripts and CLI formatting flow.
29
+ - @proofkit/typegen@1.1.0-beta.18
30
+
31
+ ## 2.0.0-beta.22
32
+
33
+ ### Minor Changes
34
+
35
+ - 5544f68: - cli: Revamp the WebViewer Vite template and harden `proofkit init` (ignore hidden files, improve non-interactive prompts, stop generating Cursor rules).
36
+ - cli: Install typegen skills locally when scaffolding projects.
37
+ - typegen: Add optional `fmHttp` config for using an FM HTTP proxy during metadata fetching.
38
+ - fmdapi/fmodata/webviewer: Add initial Codex skills for client and integration workflows.
39
+
40
+ ### Patch Changes
41
+
42
+ - Updated dependencies [5544f68]
43
+ - Updated dependencies [f3980b1]
44
+ - Updated dependencies [8ca7a1e]
45
+ - Updated dependencies [1d4b69d]
46
+ - @proofkit/typegen@1.1.0-beta.17
47
+ - @proofkit/fmdapi@5.1.0-beta.2
48
+
3
49
  ## 2.0.0-beta.21
4
50
 
5
51
  ### Patch Changes
@@ -0,0 +1,57 @@
1
+ import{a as e,c as t,f as n,l as r,m as i,n as a,o,p as s,r as c,s as l,t as u}from"./state-BVEcvFT3.js";import{i as d,r as f}from"./consts-BZnOMxpW.js";import{a as p,c as ee,d as te,f as m,i as h,l as ne,m as g,n as _,o as re,p as v,r as y,s as b,t as ie,u as ae}from"./utils-DymV7zmv.js";import{n as oe,t as se}from"./globalOptions-CkqEi9uC.js";import{t as x}from"./logger-DCEXcH26.js";import{n as S,o as ce,r as le,s as ue,t as de}from"./parseSettings-DJ2m9sgJ.js";import{t as fe}from"./getUserPkgManager-Cph_6l1P.js";import{n as pe,r as me,t as C}from"./addPackageDependency-BGZl7xc5.js";import{a as he,d as ge,f as w,i as _e,n as ve,o as ye,p as T,r as be,s as xe,t as Se,u as Ce}from"./fmdapi-DyRYZWzI.js";import{a as we,n as Te,o as Ee,t as De}from"./fmdapi-BO4QL0F8.js";import Oe,{readFileSync as ke,writeFileSync as Ae}from"node:fs";import E from"node:path";import{fileURLToPath as je}from"node:url";import D from"chalk";import{execa as Me}from"execa";import O from"fs-extra";import Ne from"open";import Pe from"node:https";import k,{AxiosError as Fe}from"axios";import{Command as Ie}from"commander";import{capitalize as Le,groupBy as Re,uniq as ze}from"es-toolkit";import Be from"ora";import Ve,{SemVer as He}from"semver";import{execSync as Ue}from"node:child_process";import{StructureKind as We,SyntaxKind as A}from"ts-morph";import{glob as Ge}from"glob";import Ke from"dotenv";import qe from"randomstring";import"jiti";import"fast-glob";import{createFetch as Je,createSchema as Ye}from"@better-fetch/fetch";import Xe from"handlebars";function Ze(e){for(let e of[`src/config/env.ts`,`src/lib/env.ts`,`src/env.ts`,`lib/env.ts`,`env.ts`,`config/env.ts`]){let t=E.join(c.projectDir,e);if(O.existsSync(t))return t}if(e===!1)return null;throw x.warn(`Could not find T3 env files. Run "proofkit add utils/t3-env" to initialize them.`),Error(`T3 env file not found`)}async function Qe({projectDir:e=c.projectDir,envs:t,envFileDescription:n,...r}){let i=Ze(),a=r.project??w(e),o=a.addSourceFileAtPath(i);if(!o)throw Error(`Schema file not found`);let s=o.getDescendantsOfKind(A.CallExpression).find(e=>e.getExpression().getText()===`createEnv`);if(!s)throw Error(`Could not find createEnv call in schema file. Make sure you have a valid env.ts file with createEnv setup.`);let l=s.getArguments()[0];if(!l)throw Error(`createEnv call is missing options argument`);let u=l.getDescendantsOfKind(A.PropertyAssignment).find(e=>e.getName()===`server`)?.getFirstDescendantByKind(A.ObjectLiteralExpression),d=l.getDescendantsOfKind(A.PropertyAssignment).find(e=>e.getName()===`client`)?.getFirstDescendantByKind(A.ObjectLiteralExpression),f=l.getDescendantsOfKind(A.PropertyAssignment).find(e=>e.getName()===`experimental__runtimeEnv`)?.getFirstDescendantByKind(A.ObjectLiteralExpression),p=t.filter(e=>e.type===`server`),ee=t.filter(e=>e.type===`client`);for(let e of p)u?.addPropertyAssignment({name:e.name,initializer:e.zodValue});for(let e of ee)d?.addPropertyAssignment({name:e.name,initializer:e.zodValue}),f?.addPropertyAssignment({name:e.name,initializer:`process.env.${e.name}`});let te=t.filter(e=>e.addToRuntimeEnv??!0).map(e=>`${e.name}=${e.defaultValue??``}`).join(`
2
+ `),m=E.join(e,`.env`);if(O.existsSync(m)){let t=O.readFileSync(m,`utf-8`),r=E.join(e,`.gitignore`);try{let t=``;O.existsSync(r)&&(t=O.readFileSync(r,`utf-8`)),t.includes(`.env`)||Ue(`echo ".env" >> "${r}"`,{cwd:e})}catch{}let i=`${t}
3
+ ${n?`# ${n}\n${te}`:te}
4
+ `;O.writeFileSync(m,i)}return r.project||await T(a),o}async function $e({...e}){let t=c.projectDir,n=S();if(n.ui===`shadcn`||n.reactEmail)return!1;O.ensureDirSync(E.join(t,`src/emails`)),C({dependencies:[`@react-email/components`,`@react-email/render`],devMode:!1,projectDir:t}),C({dependencies:[`react-email`,`@react-email/preview-server`],devMode:!0,projectDir:t});let r=O.readJSONSync(E.join(t,`package.json`));r.scripts||={},r.scripts[`email:preview`]=`email dev --port 3010 --dir=src/emails`,O.writeJSONSync(E.join(t,`package.json`),r,{spaces:2});let i=e.project??w(t);if(e.installServerFiles){let e=c.emailProvider;e===`plunk`?await et({project:i}):e===`resend`?await tt({project:i}):await O.copy(E.join(d,`template/extras/emailProviders/none/email.tsx`),E.join(t,`src/server/auth/email.tsx`))}return await O.copy(E.join(d,`template/extras/emailTemplates/generic.tsx`),E.join(t,`src/emails/generic.tsx`)),e.installServerFiles&&await O.copy(E.join(d,`template/extras/emailTemplates/auth-code.tsx`),E.join(t,`src/emails/auth-code.tsx`)),e.project||await T(i),ce({...n,reactEmail:!0,reactEmailServer:!!e.installServerFiles||n.reactEmailServer}),e.noInstall||await me({projectDir:t}),!0}async function et({project:e}){let t=c.projectDir;C({dependencies:[`@plunk/node`],devMode:!1,projectDir:t});let n;n=typeof c.apiKey==`string`?c.apiKey:a()?``:_(await g({message:`Enter your Plunk API key\n${D.dim(`Enter your Secret API Key from https://app.useplunk.com/settings/api`)}`})),n||x.warn(`You will need to add your Plunk API key to the .env file manually for your app to run.`),console.log(``),await Qe({projectDir:t,project:e,envs:[{name:`PLUNK_API_KEY`,zodValue:`z.string().startsWith("sk_")`,type:`server`,defaultValue:n}]}),await O.copy(E.join(d,`template/extras/emailProviders/plunk/service.ts`),E.join(t,`src/server/services/plunk.ts`)),await O.copy(E.join(d,`template/extras/emailProviders/plunk/email.tsx`),E.join(t,`src/server/auth/email.tsx`))}async function tt({project:e}){let t=c.projectDir;C({dependencies:[`resend`],devMode:!1,projectDir:t});let n;n=typeof c.apiKey==`string`?c.apiKey:a()?``:_(await g({message:`Enter your Resend API key\n${D.dim(`Only "Sending Access" permission required: https://resend.com/api-keys`)}`})),n||x.warn(`You will need to add your Resend API key to the .env file manually for your app to run.`),console.log(``),await Qe({projectDir:t,project:e,envs:[{name:`RESEND_API_KEY`,zodValue:`z.string().startsWith("re_")`,type:`server`,defaultValue:n}]}),await O.copy(E.join(d,`template/extras/emailProviders/resend/service.ts`),E.join(t,`src/server/services/resend.ts`)),await O.copy(E.join(d,`template/extras/emailProviders/resend/email.tsx`),E.join(t,`src/server/auth/email.tsx`))}const nt=async({noInstall:e,installServerFiles:t}={})=>{let n=v();n.start(`Adding React Email`),await $e({noInstall:e,installServerFiles:t}),n.stop(`React Email added`)};async function rt(e){let t=c.projectDir,n=S();if(n.ui===`shadcn`||n.tanstackQuery)return!1;C({projectDir:t,dependencies:[`@tanstack/react-query`],devMode:!1}),C({projectDir:t,dependencies:[`@tanstack/react-query-devtools`],devMode:!0});let r=E.join(d,`template`,`extras`);c.appType===`browser`?(O.copySync(E.join(r,`config`,`get-query-client.ts`),E.join(t,`src/config/get-query-client.ts`)),O.copySync(E.join(r,`config`,`query-provider.tsx`),E.join(t,`src/config/query-provider.tsx`))):c.appType===`webviewer`&&O.copySync(E.join(r,`config`,`query-provider-vite.tsx`),E.join(t,`src/config/query-provider.tsx`));let i=e?.project??w(t),a=i.addSourceFileAtPath(E.join(t,c.appType===`browser`?`src/app/layout.tsx`:`src/main.tsx`));if(a.addImportDeclaration({moduleSpecifier:`@/config/query-provider`,defaultImport:`QueryProvider`}),c.appType===`browser`){let e=a.getFunction(e=>e.isDefaultExport())?.getBody()?.getFirstDescendantByKind(A.ReturnStatement)?.getDescendantsOfKind(A.JsxOpeningElement).find(e=>e.getTagNameNode().getText()===`body`)?.getParentIfKind(A.JsxElement),t=e?.getJsxChildren().map(e=>e.getText()).filter(Boolean).join(`
5
+ `);e?.getChildSyntaxList()?.replaceWithText(`<QueryProvider>
6
+ ${t}
7
+ </QueryProvider>`)}else if(c.appType===`webviewer`){let e=a.getDescendantsOfKind(A.JsxElement).find(e=>e.getOpeningElement().getTagNameNode().getText()===`MantineProvider`);e?.replaceWithText(`<QueryProvider>
8
+ ${e.getText()}
9
+ </QueryProvider>`)}return e?.project||await T(i),ce({...n,tanstackQuery:!0}),!0}const it=async()=>{let e=v();e.start(`Adding Tanstack Query`),await rt(),e.stop(`Tanstack Query added`)};async function at(e){if(e===`webviewer`||e===`auth`)return e;if(a())throw Error("Addon target is required in non-interactive mode. Use `proofkit add addon webviewer`.");return _(await m({message:`Which add-on do you want to install locally?`,options:[{value:`webviewer`,label:`WebViewer`,hint:`ProofKit WebViewer add-on`},{value:`auth`,label:`Auth`,hint:`ProofKit Auth add-on`}]}))}async function ot(e){y({commandName:`add addon`});let t=S(),n=await at(e);if(n===`webviewer`&&t.appType!==`webviewer`)throw Error(`The WebViewer add-on can only be added from a WebViewer ProofKit project.`);if(n===`auth`&&t.appType!==`browser`)throw Error(`The auth add-on can only be added from a browser ProofKit project.`);await Ee({addonName:n===`webviewer`?`wv`:`auth`})}const st=()=>{let e=new Ie(`addon`).description(`Install or update local FileMaker add-on files`).argument(`[target]`,`Add-on to install locally (webviewer or auth)`).addOption(oe).addOption(se).action(async e=>{await ot(e)});return e.hook(`preAction`,e=>{u(e.opts())}),e};function ct(e,t){e.addImportDeclaration({defaultImport:`UserMenu`,moduleSpecifier:t});let n=e.getImportDeclaration(e=>e.getModuleSpecifierValue()===`@mantine/core`);n?n.getNamedImports().find(e=>e.getName()===`Group`)||n.addNamedImport({name:`Group`}):e.addImportDeclaration({namedImports:[{name:`Group`}],moduleSpecifier:`@mantine/core`});let r=ge(e.getFunction(e=>e.isDefaultExport())?.getBody()?.getFirstDescendantByKind(A.ReturnStatement)),i=r?.getFirstDescendantByKind(A.JsxOpeningFragment)?.getParentIfKind(A.JsxFragment)?.getFirstDescendantByKind(A.SyntaxList)?.getText();if(!i){console.log(`Failed to inject into header slot at ${e.getFilePath()}`);return}r?.replaceWithText(`return (<><Group>${i}<UserMenu /></Group></>)`),r?.formatText(),e.saveSync()}const lt=async({projectDir:e})=>{C({projectDir:e,dependencies:[`@clerk/nextjs`,`@clerk/themes`],devMode:!1});let t=E.join(d,`template/extras`),n=E.join(e,`src/middleware.ts`);if(O.existsSync(n))console.log(D.yellow(`Middleware already exists. To require auth for your app, be sure to follow the guide to setup Clerk middleware. https://clerk.com/docs/references/nextjs/clerk-middleware#clerk-middleware-next-js`));else{let e=E.join(t,`src/middleware/clerk.ts`);O.copySync(e,n)}O.copySync(E.join(t,`src/app/clerk-auth`),E.join(e,`src/app/auth`)),O.copySync(E.join(t,`src/components/clerk-auth`),E.join(e,`src/components/clerk-auth`));let r=E.join(e,`src/app/layout.tsx`),i=w(e);ut(i.addSourceFileAtPath(r)),ct(i.addSourceFileAtPath(E.join(e,`src/components/AppShell/slot-header-right.tsx`)),`@/components/clerk-auth/user-menu`),ct(i.addSourceFileAtPath(E.join(e,`src/components/AppShell/slot-header-mobile-content.tsx`)),`@/components/clerk-auth/user-menu-mobile`),dt(i.addSourceFileAtPathIfExists(E.join(e,`src/server/safe-action.ts`))),await Qe({projectDir:e,project:i,envs:[{name:`NEXT_PUBLIC_CLERK_SIGN_IN_URL`,zodValue:`z.string()`,defaultValue:`/auth/signin`,type:`client`},{name:`NEXT_PUBLIC_CLERK_SIGN_UP_URL`,zodValue:`z.string()`,defaultValue:`/auth/signup`,type:`client`},{name:`CLERK_SECRET_KEY`,zodValue:`z.string().startsWith('sk_').min(1, {
10
+ message:
11
+ "No Clerk Secret Key found. Did you create your Clerk app and copy the environment variables to you .env file?",
12
+ })`,type:`server`},{name:`NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY`,zodValue:`z.string().startsWith('pk_').min(1, {
13
+ message:
14
+ "No Clerk Public Key found. Did you create your Clerk app and copy the environment variables to you .env file?",
15
+ })`,type:`client`}],envFileDescription:`Hosted auth with Clerk. Set up a new app at https://dashboard.clerk.com/apps/new to get these values.`}),await T(i)};function ut(e){e.addImportDeclaration({namedImports:[{name:`ClerkAuthProvider`}],moduleSpecifier:`@/components/clerk-auth/clerk-provider`});let t=e.getFunction(e=>e.isDefaultExport())?.getBody()?.getFirstDescendantByKind(A.ReturnStatement)?.getDescendantsOfKind(A.JsxOpeningElement).find(e=>e.getTagNameNode().getText()===`MantineProvider`)?.getParentIfKind(A.JsxElement),n=t?.getJsxChildren().map(e=>e.getText()).filter(Boolean).join(`
16
+ `);t?.getChildSyntaxList()?.replaceWithText(`<ClerkAuthProvider>
17
+ ${n}
18
+ </ClerkAuthProvider>`)}function dt(e){if(!e){console.log(D.yellow(`Failed to inject into safe-action-client. Did you move the safe-action.ts file?`));return}e.addImportDeclaration({namedImports:[{name:`auth`,alias:`getAuth`}],moduleSpecifier:`@clerk/nextjs/server`}),e.addStatements(e=>e.writeLine(`export const authedActionClient = actionClient.use(async ({ next, ctx }) => {
19
+ const auth = getAuth();
20
+ if (!auth.userId) {
21
+ throw new Error("Unauthorized");
22
+ }
23
+ return next({ ctx: { ...ctx, auth } });
24
+ });
25
+
26
+ `))}const ft=async()=>{let e=Be(`Installing files for auth...`).start(),t=c.projectDir;C({projectDir:t,dependencies:[`@node-rs/argon2`,`@oslojs/binary`,`@oslojs/crypto`,`@oslojs/encoding`,`js-cookie`],devMode:!1}),C({projectDir:t,dependencies:[`@types/js-cookie`],devMode:!0}),await O.copy(E.join(d,`template/extras/fmaddon-auth`),E.join(t,`src`));let n=w(t);await rt({project:n}),ct(n.addSourceFileAtPath(E.join(t,`src/components/AppShell/slot-header-right.tsx`)),`@/components/auth/user-menu`),pt(n.addSourceFileAtPathIfExists(E.join(t,`src/server/safe-action.ts`))),await Se({config:{type:`fmdapi`,envNames:void 0,clientSuffix:`Layout`,layouts:[{layoutName:`proofkit_auth_sessions`,schemaName:`sessions`,strictNumbers:!0},{layoutName:`proofkit_auth_users`,schemaName:`users`,strictNumbers:!0},{layoutName:`proofkit_auth_email_verification`,schemaName:`emailVerification`,strictNumbers:!0},{layoutName:`proofkit_auth_password_reset`,schemaName:`passwordReset`,strictNumbers:!0}],clearOldFiles:!0,validator:!1,path:`./src/server/auth/db`},projectDir:t,runCodegen:!1}),await $e({project:n,installServerFiles:!0}),mt(n.addSourceFileAtPath(E.join(t,`src/app/(main)/layout.tsx`))),await T(n);let r=!1;for(;!r;)if(r=await ht(t,e),r)e.text=`Successfully detected all required layouts in your FileMaker file.`;else if(!_(await p({message:`I have followed the above instructions, continue installing`,initialValue:!0})))throw new ie;await Ce(),e.succeed(`Auth installed successfully`)};function pt(e){if(!e){console.log(D.yellow(`Failed to inject into safe-action-client. Did you move the safe-action.ts file?`));return}e.addImportDeclaration({namedImports:[{name:`getCurrentSession`}],moduleSpecifier:`./auth/utils/session`}),e.addStatements(e=>e.writeLine(`export const authedActionClient = actionClient.use(async ({ next, ctx }) => {
27
+ const { session, user } = await getCurrentSession();
28
+ if (session === null) {
29
+ throw new Error("Unauthorized");
30
+ }
31
+
32
+ return next({ ctx: { ...ctx, session, user } });
33
+ });
34
+ `))}function mt(e){e.addImportDeclaration({defaultImport:`Protect`,moduleSpecifier:`@/components/auth/protect`});let t=e.getFunction(e=>e.isDefaultExport())?.getBody()?.getFirstDescendantByKind(A.ReturnStatement)?.getFirstDescendantByKind(A.JsxElement);t?.replaceWithText(`<Protect>
35
+ ${t?.getText()}
36
+ </Protect>`)}async function ht(e,t){let n=S(),r=n.dataSources.filter(e=>e.type===`fm`).find(e=>e.name===`filemaker`);if(!r)return!1;n.envFile&&Ke.config({path:E.join(e,n.envFile)});let i=process.env[r.envNames.apiKey],a=process.env[r.envNames.database],o=process.env[r.envNames.server];if(!(i&&a&&o))return!1;let s=await Te({dataApiKey:i,fmFile:a,server:o});return[`proofkit_auth_sessions`,`proofkit_auth_users`,`proofkit_auth_email_verification`,`proofkit_auth_password_reset`].every(e=>s.some(t=>t===e))?!0:(t.warn(`Required layouts not found`),await we({addonName:`auth`}),!1)}async function gt({options:e,noInstall:t=!1,projectDir:n=process.cwd()}){let r=S();if(r.ui===`shadcn`)throw Error(`Shadcn projects should add auth using the template registry`);if(r.auth.type!==`none`)throw Error(`Auth already exists`);if(!r.dataSources.some(e=>e.type===`fm`)&&e.type===`fmaddon`)throw Error(`A FileMaker data source is required to use the FM Add-on Auth`);if(!r.dataSources.some(e=>e.type===`fm`)&&e.type===`better-auth`)throw Error(`A FileMaker data source is required to use the Better-Auth`);e.type===`clerk`?await _t({projectDir:n}):e.type===`fmaddon`&&await vt(),await yt(),t||await me({projectDir:n})}async function _t({projectDir:e=process.cwd()}){await lt({projectDir:e}),le({auth:{type:`clerk`}})}async function vt(){await ft(),le({auth:{type:`fmaddon`}})}async function yt(){let e=c.projectDir,t=await Ge(`src/app/(main)/**/actions.ts`,{cwd:e});for(let n of t){let t=E.join(e,n);Ae(t,ke(t,`utf-8`).replace(/actionClient/g,`authedActionClient`))}}async function bt(){let e=S();if(e.appType!==`browser`)return h(`Auth is not supported for your app type.`);if(e.ui===`shadcn`)return h(`Adding auth is not yet supported for shadcn-based projects.`);let t=c.authType??_(await m({message:`What auth provider do you want to use?`,options:[{value:`fmaddon`,label:`FM Add-on Auth`,hint:`Self-hosted auth with email/password`},{value:`clerk`,label:`Clerk`,hint:`Hosted auth service with many providers`}]})),n=l([`clerk`,`fmaddon`]).parse(t);if(c.authType=n,n===`fmaddon`){let e=c.emailProvider??(a()?`none`:void 0)??_(await m({message:`What email provider do you want to use?\n${D.dim(`Used to send email verification codes. If you skip this, the codes will be displayed here in your terminal.`)}`,options:[{label:`Resend`,value:`resend`,hint:`Great dev experience`},{label:`Plunk`,value:`plunk`,hint:`Cheapest for <20k emails/mo, self-hostable`},{label:`Other / I'll do it myself later`,value:`none`}]})),t=l([`plunk`,`resend`,`none`]).parse(e);c.emailProvider=t,await gt({options:{type:n,emailProvider:t===`none`?void 0:t}})}else await gt({options:{type:n}})}const xt=()=>{let e=new Ie(`auth`).description(`Add authentication to your project`).option(`--authType <authType>`,`Type of auth provider to use`).option(`--emailProvider <emailProvider>`,`Email provider to use (only for FM Add-on Auth)`).option(`--apiKey <apiKey>`,`API key to use for the email provider (only for FM Add-on Auth)`).addOption(oe).addOption(se).action(async()=>{let e=S();if(e.ui===`shadcn`)throw Error(`Shadcn projects should add auth using the template registry`);if(e.auth.type!==`none`)throw Error(`Auth already exists`);await bt()});return e.hook(`preAction`,e=>{u(e.opts())}),e};async function St({url:e}){let t=qe.generate({length:18,charset:`alphanumeric`}),n=new URL(`/otto/wizard/${t}`,e.origin),r=n.toString();b.info(`${D.bold(`If the browser window didn't open automatically, please open the following link to login into your OttoFMS server:`)}\n\n${D.cyan(r)}`),Ne(n.toString()).catch(()=>{});let i=v();i.start(`Waiting for you to log in using the link above`);let a=await new Promise(n=>{let r=setInterval(()=>{k.get(`${e.origin}/otto/api/cli/checkHash/${t}`,{headers:{"Accept-Encoding":`deflate`}}).then(i=>{n(i.data.response),clearTimeout(a),clearInterval(r),k.delete(`${e.origin}/otto/api/cli/checkHash/${t}`,{headers:{"Accept-Encoding":`deflate`}}).catch(()=>{})}).catch(()=>{})},500),a=setTimeout(()=>{clearInterval(r),i.stop(`Login timed out. No worries - it happens to the best of us.`)},18e4)});return i.stop(`Login complete.`),a}async function Ct({url:e,token:t}){return(await k.get(`${e.origin}/otto/fmi/admin/api/v2/databases`,{headers:{Authorization:`Bearer ${t}`}})).data.response.databases}async function wt({url:e,token:t}){return(await k.get(`${e.origin}/otto/api/api-key`,{headers:{Authorization:`Bearer ${t}`}})).data.response[`api-keys`]}async function Tt({url:e,filename:t}){for(b.info(`${D.cyan(`Creating a Data API Key`)}\nEnter FileMaker credentials for ${D.bold(t)}.\n${D.dim(`The account must have the fmrest extended privilege enabled.`)}`);;){let n=_(await g({message:`Enter the account name for ${D.bold(t)}`})),r=_(await ae({message:`Enter the password for ${D.bold(n)}`}));try{return await Et({url:e,filename:t,username:n,password:r})}catch(t){if(t instanceof Fe){let n=t.response?.data&&`messages`in t.response.data?t.response.data.messages?.[0]?.text:void 0;b.error(`${D.red(`Error creating Data API key:`)} ${n??`Error code ${t.response?.status}`}
37
+ ${D.dim(t.response?.status===400&&`Common reasons this might happen:
38
+ - The provided credentials are incorrect.
39
+ - The account does not have the fmrest extended privilege enabled.
40
+
41
+ You may also want to try to create an API directly in the OttoFMS dashboard:
42
+ ${e.origin}/otto/app/api-keys`)}
43
+ `)}else b.error(`${D.red(`Error creating Data API key:`)} Unknown error`);if(!_(await p({message:`Do you want to try and enter credentials again?`})))throw Error(`User cancelled`)}}}async function Et({url:e,filename:t,username:n,password:r}){return{apiKey:(await k.post(`${e.origin}/otto/api/api-key/create-only`,{database:t,label:`For FM Web App`,user:n,pass:r})).data.response.key}}async function Dt({payload:e,url:a,token:o}){let c=s({response:s({started:r(),batchId:n(),subDeploymentIds:t(n())}),messages:t(s({code:n(),text:i()}))}),l=await k.post(`${a.origin}/otto/api/deployment`,e,{headers:{Authorization:`Bearer ${o}`}}).catch(e=>{throw console.error(e.response.data),e});return c.parse(l.data)}async function Ot({url:e,token:r,deploymentId:a}){let c=s({response:s({id:n(),status:l([`queued`,`running`,`scheduled`,`complete`,`aborted`,`unknown`]),running:o(),created_at:i(),started_at:i(),updated_at:i()}),messages:t(s({code:n(),text:i()}))}),u=await k.get(`${e.origin}/otto/api/deployment/${a}`,{headers:{Authorization:`Bearer ${r}`}});return c.parse(u.data)}const kt=process.env.FM_MCP_BASE_URL??`http://127.0.0.1:1365`;async function At(e){let t=new AbortController,n=setTimeout(()=>t.abort(),3e3);try{return await fetch(e,{signal:t.signal})}catch{return null}finally{clearTimeout(n)}}async function jt(e){let t=await At(e);return t?.ok?await t.json().catch(()=>null):null}async function Mt(e=kt){if(!(await At(`${e}/health`))?.ok)return{baseUrl:e,healthy:!1,connectedFiles:[]};let t=await jt(`${e}/connectedFiles`);return{baseUrl:e,healthy:!0,connectedFiles:Array.isArray(t)?t:[]}}const Nt=()=>{};function Pt(e,t,n){return new Proxy(Nt,{get(n,r){if(!(typeof r!=`string`||r===`then`))return Pt(e,[...t,r])},apply(n,r,i){let a=t[t.length-1],o={args:i,path:t};return a===`call`?o={args:i.length>=2?[i[1]]:[],path:t.slice(0,-1)}:a===`apply`&&(o={args:i.length>=2?i[1]:[],path:t.slice(0,-1)}),e(o)}})}const Ft=e=>Pt(e,[]);function It(e,...t){let n=Object.assign(Object.create(null),e);for(let e of t)for(let t in e){if(t in n&&n[t]!==e[t])throw Error(`Duplicate key ${t}`);n[t]=e[t]}return n}function Lt(e){return!!e&&!Array.isArray(e)&&typeof e==`object`}function Rt(e){return typeof e==`function`}function zt(e){return Object.assign(Object.create(null),e)}var Bt=class extends Error{};function Vt(e){if(e instanceof Error)return e;let t=typeof e;if(!(t===`undefined`||t===`function`||e===null)){if(t!==`object`)return Error(String(e));if(Lt(e)){let t=new Bt;for(let n in e)t[n]=e[n];return t}}}function Ht(e){if(e instanceof Ut||e instanceof Error&&e.name===`TRPCError`)return e;let t=new Ut({code:`INTERNAL_SERVER_ERROR`,cause:e});return e instanceof Error&&e.stack&&(t.stack=e.stack),t}var Ut=class extends Error{constructor(e){let t=Vt(e.cause),n=e.message??t?.message??e.code;super(n,{cause:t}),this.code=e.code,this.name=`TRPCError`,this.cause||=t}};function Wt(e){return`input`in e?e:{input:e,output:e}}const Gt={input:{serialize:e=>e,deserialize:e=>e},output:{serialize:e=>e,deserialize:e=>e}},Kt=({shape:e})=>e,qt=`middlewareMarker`;function Jt(){function e(t){return{_middlewares:t,unstable_pipe(n){let r=`_middlewares`in n?n._middlewares:[n];return e([...t,...r])}}}function t(t){return e([t])}return t}function Yt(e){let t=async function(t){let n,r=await t.getRawInput();try{n=await e(r)}catch(e){throw new Ut({code:`BAD_REQUEST`,cause:e})}let i=Lt(t.input)&&Lt(n)?{...t.input,...n}:n;return t.next({input:i})};return t._type=`input`,t}function Xt(e){let t=async function({next:t}){let n=await t();if(!n.ok)return n;try{let t=await e(n.data);return{...n,data:t}}catch(e){throw new Ut({message:`Output validation failed`,code:`INTERNAL_SERVER_ERROR`,cause:e})}};return t._type=`output`,t}function Zt(e){let t=e;if(typeof t==`function`)return t;if(typeof t.parseAsync==`function`)return t.parseAsync.bind(t);if(typeof t.parse==`function`)return t.parse.bind(t);if(typeof t.validateSync==`function`)return t.validateSync.bind(t);if(typeof t.create==`function`)return t.create.bind(t);if(typeof t.assert==`function`)return e=>(t.assert(e),e);throw Error(`Could not find a validator fn`)}function j(e,t){let{middlewares:n=[],inputs:r,meta:i,...a}=t;return Qt({...It(e,a),inputs:[...e.inputs,...r??[]],middlewares:[...e.middlewares,...n],meta:e.meta&&i?{...e.meta,...i}:i??e.meta})}function Qt(e={}){let t={procedure:!0,inputs:[],middlewares:[],...e};return{_def:t,input(e){let n=Zt(e);return j(t,{inputs:[e],middlewares:[Yt(n)]})},output(e){return j(t,{output:e,middlewares:[Xt(Zt(e))]})},meta(e){return j(t,{meta:e})},use(e){return j(t,{middlewares:`_middlewares`in e?e._middlewares:[e]})},unstable_concat(e){return j(t,e._def)},query(e){return $t({...t,type:`query`},e)},mutation(e){return $t({...t,type:`mutation`},e)},subscription(e){return $t({...t,type:`subscription`},e)},experimental_caller(e){return j(t,{caller:e})}}}function $t(e,t){let n=j(e,{resolver:t,middlewares:[async function(e){return{marker:qt,ok:!0,data:await t(e),ctx:e.ctx}}]}),r={...n._def,type:e.type,experimental_caller:!!n._def.caller,meta:n._def.meta,$types:null},i=en(n._def),a=n._def.caller;if(!a)return i;let o=async(...e)=>await a({args:e,invoke:i,_def:r});return o._def=r,o}function en(e){async function t(t){if(!t||!(`getRawInput`in t))throw Error(`This is a client-only function.
44
+ If you want to call this function on the server, see https://trpc.io/docs/v11/server/server-side-calls`);async function n(r={index:0,ctx:t.ctx}){try{let i=e.middlewares[r.index];return await i({ctx:r.ctx,type:t.type,path:t.path,getRawInput:r.getRawInput??t.getRawInput,meta:e.meta,input:r.input,next(e){let t=e;return n({index:r.index+1,ctx:t&&`ctx`in t?{...r.ctx,...t.ctx}:r.ctx,input:t&&`input`in t?t.input:r.input,getRawInput:t&&`getRawInput`in t?t.getRawInput:r.getRawInput})}})}catch(e){return{ok:!1,error:Ht(e),marker:qt}}}let r=await n();if(!r)throw new Ut({code:`INTERNAL_SERVER_ERROR`,message:"No result from middlewares - did you forget to `return next()`?"});if(!r.ok)throw r.error;return r.data}return t._def=e,t}const tn=typeof window>`u`||`Deno`in window||globalThis.process?.env?.NODE_ENV===`test`||!!globalThis.process?.env?.JEST_WORKER_ID||!!globalThis.process?.env?.VITEST_WORKER_ID;function nn(e){return e._def&&`router`in e._def}const rn={_ctx:null,_errorShape:null,_meta:null,queries:{},mutations:{},subscriptions:{},errorFormatter:Kt,transformer:Gt},an=[`then`,`call`,`apply`];function on(e){function t(t){let n=new Set(Object.keys(t).filter(e=>an.includes(e)));if(n.size>0)throw Error("Reserved words used in `router({})` call: "+Array.from(n).join(`, `));let r=zt({});function i(e,t=[]){let n=zt({});for(let[a,o]of Object.entries(e??{})){if(nn(o)){n[a]=i(o._def.record,[...t,a]);continue}if(!sn(o)){n[a]=i(o,[...t,a]);continue}let e=[...t,a].join(`.`);if(r[e])throw Error(`Duplicate key: ${e}`);r[e]=o,n[a]=o}return n}let a=i(t),o={_config:e,router:!0,procedures:r,...rn,record:a};return{...a,_def:o,createCaller:cn()({_def:o})}}return t}function sn(e){return typeof e==`function`}function cn(){return function(e){let t=e._def;return function(e,n){return Ft(async({path:r,args:i})=>{let a=r.join(`.`);if(r.length===1&&r[0]===`_def`)return t;let o=t.procedures[a],s;try{return s=Rt(e)?await Promise.resolve(e()):e,await o({path:a,getRawInput:async()=>i[0],ctx:s,type:o._def.type})}catch(e){throw n?.onError?.({ctx:s,error:Ht(e),input:i[0],path:a,type:o._def.type}),e}})}}}function ln(...e){let t=It({},...e.map(e=>e._def.record));return on({errorFormatter:e.reduce((e,t)=>{if(t._def._config.errorFormatter&&t._def._config.errorFormatter!==Kt){if(e!==Kt&&e!==t._def._config.errorFormatter)throw Error(`You seem to have several error formatters`);return t._def._config.errorFormatter}return e},Kt),transformer:e.reduce((e,t)=>{if(t._def._config.transformer&&t._def._config.transformer!==Gt){if(e!==Gt&&e!==t._def._config.transformer)throw Error(`You seem to have several transformers`);return t._def._config.transformer}return e},Gt),isDev:e.every(e=>e._def._config.isDev),allowOutsideOfServer:e.every(e=>e._def._config.allowOutsideOfServer),isServer:e.every(e=>e._def._config.isServer),$types:e[0]?._def._config.$types})(t)}new class e{context(){return new e}meta(){return new e}create(e){let t={transformer:Wt(e?.transformer??Gt),isDev:e?.isDev??globalThis.process?.env.NODE_ENV!==`production`,allowOutsideOfServer:e?.allowOutsideOfServer??!1,errorFormatter:e?.errorFormatter??Kt,isServer:e?.isServer??tn,$types:null,experimental:e?.experimental??{}};if(!(e?.isServer??tn)&&e?.allowOutsideOfServer!==!0)throw Error(`You're trying to use @trpc/server in a non-server environment. This is not supported by default.`);return{_config:t,procedure:Qt({meta:e?.defaultMeta}),middleware:Jt(),router:on(t),mergeRouters:ln,createCallerFactory:cn()}}};async function un({url:e,ottoPort:t=3030}){return{fmsInfo:await fn(e),ottoInfo:await hn({url:e,ottoPort:t})}}const dn=e.object({data:e.object({APIVersion:e.number().optional(),AcceptEARPassword:e.boolean().optional(),AcceptEncrypted:e.boolean().optional(),AcceptUnencrypted:e.boolean().optional(),AdminLocalAuth:e.string().optional(),AllowChangeUploadDBFolder:e.boolean().optional(),AutoOpenForUpload:e.boolean().optional(),DenyGuestAndAutoLogin:e.string().optional(),Hostname:e.string().optional(),IsAppleInternal:e.boolean().optional(),IsETS:e.boolean().optional(),PremisesType:e.string().optional(),ProductVersion:e.string().optional(),PublicKey:e.string().optional(),RequiresDBPasswords:e.boolean().optional(),ServerID:e.string().optional(),ServerVersion:e.string()}),result:e.number()});async function fn(e){let t=new URL(e);t.pathname=`/fmws/serverinfo`;let n=await vn(t.toString()).then(e=>dn.safeParse(e.data));if(!n.success)throw console.error(`fmsInfoResult.error`,n.error.issues),new Ut({code:`BAD_REQUEST`,message:`Invalid FileMaker Server URL`});return n.data.data}const pn=e.object({Otto:e.object({version:e.string(),serverNickname:e.string().default(``),isLicenseValid:e.boolean().optional()}),migratorVersion:e.string().optional(),FileMakerServer:e.object({version:e.object({long:e.string(),short:e.string()}),running:e.boolean().optional()}),isMac:e.boolean().optional(),platform:e.string().optional(),host:e.string().optional()}),mn=e.object({response:pn});async function hn({url:e,ottoPort:t=3030}){let n=await gn(e);return n||=await _n(e,t),n}async function gn(e){try{let t=new URL(e);return t.pathname=`/otto/api/info`,await vn(t.toString()).then(e=>mn.parse(e.data).response)}catch{return console.log(`unable to fetch otto4 info, trying otto3`),null}}async function _n(e,t){try{let n=new URL(e);return n.port=t?t.toString():`3030`,n.pathname=`/api/otto/info`,await vn(n.toString()).then(e=>pn.parse(e.data))}catch(e){return e instanceof Error&&console.error(`otto3 fetch error`,e.message),null}}async function vn(e){let t=new Pe.Agent({rejectUnauthorized:!1});return await k.get(e,{validateStatus:null,headers:{Connection:`close`},httpsAgent:t,timeout:1e4})}const yn=e=>e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e,bn=/^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/,xn=e=>{let t=yn(e),n=t.split(`/`),r=n.findIndex(e=>e.startsWith(`@`)),i=n.at(-1);if(n.findIndex(e=>e.startsWith(`@`))!==-1&&(i=n.slice(r).join(`/`)),!(t===`.`||bn.test(i??``)))return`Name must consist of only lowercase alphanumeric characters, '-', and '_'`},Sn=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/,Cn=async e=>{let t=S(),n=c.projectDir,r=e?.sourceName;if(r)r=e?.sourceName;else if(t.dataSources.filter(e=>e.type===`fm`).length>1){let e=await m({message:`Which FileMaker data source do you want to add a layout to?`,options:t.dataSources.filter(e=>e.type===`fm`).map(e=>({label:e.name,value:e.name}))});re(e)&&(h(),process.exit(0)),r=i().parse(e)}r||=`filemaker`;let a=t.dataSources.filter(e=>e.type===`fm`).find(e=>e.name===r);if(!a)throw Error(`FileMaker data source ${r} not found in your ProofKit config`);let o=v();o.start(`Loading layouts from your FileMaker file...`),t.envFile&&Ke.config({path:E.join(n,t.envFile)});let s=process.env[a.envNames.apiKey],u=process.env[a.envNames.database],d=process.env[a.envNames.server];s&&u&&d||(o.stop(`Failed to load layouts`),h(`Missing required environment variables. Please check your .env file.`),process.exit(1)),s.startsWith(`KEY_`)||s.startsWith(`dk_`)||(o.stop(`Failed to load layouts`),h(`Invalid API key format. API key must start with 'KEY_' or 'dk_'.`),process.exit(1));let f=await Te({dataApiKey:s,fmFile:u,server:d}),p=ye({projectDir:n,dataSourceName:r}),y=p.map(e=>e.layout).filter(Boolean),b=p.map(e=>e.schemaName).filter(Boolean);o.stop(`Loaded layouts from your FileMaker file`),y.length>0&&ee(y.join(`
45
+ `),`Detected existing layouts in your project`),y.push(`-`);let ie=e?.layoutName;(ie===``||!f.includes(ie??``))&&(ie=void 0);let ae=ie??_(await te({message:`Select a new layout to read data from`,emptyMessage:`No matching layouts found.`,options:f.filter(e=>!y.includes(e)).map(e=>({label:e,value:e,keywords:[e]}))})),oe=Tn(ae),se=e?.schemaName||_(await g({message:`Enter a friendly name for the new schema.\n${D.dim(`This will the name by which you refer to this layout in your codebase`)}`,defaultValue:oe,validate:e=>{if(e!==``){if(!Sn.test(e))return`Name must consist of only alphanumeric characters, '_', and must not start with a number`;if(b.includes(e))return`Schema name must be unique`}}})).toString(),x=e?.valueLists??await m({message:`Should we use value lists on this layout?\n${D.dim(`This will allow fields that contain a value list to be auto-completed in typescript and also validated to prevent incorrect values`)}`,options:[{label:`Yes, but allow empty fields`,value:`allowEmpty`,hint:`Empty fields or values that don't match the value list will be converted to an empty string`},{label:`Yes; empty values should fail validation`,value:`strict`,hint:`Empty fields or values that don't match the value list will cause validation to fail`},{label:`No, ignore value lists`,value:`ignore`,hint:`Fields will just be typed as strings`}]}),ce=l([`ignore`,`allowEmpty`,`strict`]).catch(`ignore`).parse(x);await ve({runCodegen:!0,projectDir:n,dataSourceName:r,schemas:[{layoutName:ae,schemaName:se,valueLists:ce}]}),ne(`Layout "${ae}" added to your project as "${se}"`)},wn=()=>new Ie(`layout`).alias(`schema`).description(`Add a new layout to your fmschema file`).action(async e=>{let t=e.settings;await Cn({settings:t})});function Tn(e){let t=e.replace(/[-\s]/g,`_`);for(let e of De)t.startsWith(e)&&(t=t.replace(e,``));return t}const En=`ProofKitDemo.fmp12`;async function Dn({url:e,token:t,operation:n}){let r={scheduled:!1,label:`Install ProofKit Demo`,deployments:[{name:`Install ProofKit Demo`,source:{type:`url`,url:`https://proofkit.dev/proofkit-demo/manifest.json`},fileOperations:[{target:{fileName:En},operation:n,source:{fileName:`ProofKitDemo.fmp12`},location:{folder:`default`,subFolder:``}}],concurrency:1,options:{closeFilesAfterBuild:!1,keepFilesClosedAfterComplete:!1,transferContainerData:!1}}],abortRemaining:!1},i=v();i.start(`Deploying ProofKit Demo file...`);let{response:{subDeploymentIds:a}}=await Dt({payload:r,url:e,token:t}),o=a[0];if(!o)throw Error(`No deployment ID returned from the server`);for(;;){await new Promise(e=>setTimeout(e,2500));let{response:{status:n,running:r}}=await Ot({url:e,token:t,deploymentId:o});if(!r){if(n!==`complete`)throw Error(`Deployment didn't complete`);break}}let{apiKey:s}=await Et({filename:En,username:`admin`,password:`admin`,url:e});return i.stop(),{apiKey:s}}async function On({projectDir:e,...t}){let n=S();if(n.appType===`webviewer`){let r=await Mt(),i=r.connectedFiles[0],o=t.name??`filemaker`;if(!t.server&&r.healthy&&i){C({projectDir:e,dependencies:[`@proofkit/fmdapi`],devMode:!1}),await _e({projectDir:e,connectedFileName:i,dataSourceName:o,baseUrl:r.baseUrl});let a={type:`fm`,name:o,envNames:o===`filemaker`?{database:`FM_DATABASE`,server:`FM_SERVER`,apiKey:`OTTO_API_KEY`}:{database:`${o.toUpperCase()}_FM_DATABASE`,server:`${o.toUpperCase()}_FM_SERVER`,apiKey:`${o.toUpperCase()}_OTTO_API_KEY`}};if(n.dataSources.push(a),ce(n),t.layoutName&&t.schemaName)await ve({projectDir:e,dataSourceName:o,schemas:[{layoutName:t.layoutName,schemaName:t.schemaName,valueLists:`allowEmpty`}]});else if(t.layoutName||t.schemaName)throw Error(`Both --layoutName and --schemaName must be provided together.`);else ee(`Detected local FM MCP at ${r.baseUrl} with connected file "${i}". Edit ${D.cyan(`proofkit-typegen.config.jsonc`)} to add layouts, then run ${D.cyan(`pnpm typegen`)} or ${D.cyan(`pnpm typegen:ui`)}.`,`Local FileMaker detected`);return}if(!t.server&&a())throw Error(`No local FM MCP connection was detected and no FileMaker server was provided. Start the local FM MCP proxy with a connected file or rerun with --server.`);if(!t.server&&_(await m({message:`Local FM MCP was not detected. Do you want to continue with hosted FileMaker server setup or skip for now?`,options:[{label:`Continue with hosted setup`,value:`hosted`},{label:`Skip for now`,value:`skip`}]}))===`skip`){ee(`You can come back later with ${D.cyan(`proofkit add data`)} after starting FM MCP locally or when you have a hosted server ready.`);return}}let r=n.dataSources.filter(e=>e.type===`fm`).map(e=>e.name),i=await kn(t.server);if(!(i.ottoVersion&&i.ottoVersion.compare(new He(`4.7.0`))>0||t.adminApiKey))return h(`OttoFMS 4.7.0 or later is required to auto-login with this CLI. Please install/upgrade OttoFMS on your server, or pass an Admin API key with the --adminApiKey flag then try again`);let o=t.adminApiKey||(await St({url:i.url})).token,s=await Ct({url:i.url,token:o}),c=s.map(e=>e.filename.replace(`.fmp12`,``)).includes(En.replace(`.fmp12`,``)),l=t.fileName;for(;(l=t.fileName||_(await te({message:`Which file would you like to connect to? ${D.dim(`(TIP: Select the file where your data is stored)`)}`,emptyMessage:`No matching files found.`,options:[{value:`$deployDemoFile`,label:`Deploy NEW ProofKit Demo File`,hint:`Use OttoFMS to deploy a new file for testing`,keywords:[`demo`,`proofkit`]},...s.sort((e,t)=>e.filename.localeCompare(t.filename)).map(e=>({value:e.filename,label:e.filename,hint:e.status,keywords:[e.filename]}))]})),l===`$deployDemoFile`)&&c&&!_(await p({message:`The demo file already exists, do you want to replace it with a fresh copy?`,initialValue:!1})););if(!l)throw Error(`No file selected`);let u=t.dataApiKey;if(l===`$deployDemoFile`){let{apiKey:e}=await Dn({url:i.url,token:o,operation:c?`replace`:`install`});u=e,l=En,t.layoutName=t.layoutName??`API_Contacts`,t.schemaName=t.schemaName??`Contacts`}else{let e=(await wt({url:i.url,token:o})).filter(e=>e.database===l);if(!u&&e.length>0){let t=_(await te({message:`Which OttoFMS Data API key would you like to use? ${D.dim(`(This determines the access that you'll have to the data in this file)`)}`,emptyMessage:`No matching API keys found.`,options:[...e.map(e=>({value:e.key,label:`${D.bold(e.label)} - ${e.user}`,hint:`${e.key.slice(0,5)}...${e.key.slice(-4)}`,keywords:[e.label,e.user,e.database]})),{value:`create`,label:`Create a new API key`,hint:`Requires FileMaker credentials for this file`,keywords:[`create`,`new`]}]}));if(typeof t!=`string`)throw Error(`Invalid key`);t!==`create`&&(u=t)}u||=(await Tt({filename:l,url:i.url})).apiKey}if(!u)throw Error(`No API key`);let d=r.length===0?`filemaker`:t.name??_(await g({message:`What do you want to call this data source?`,validate:e=>e===`filemaker`?`That name is reserved`:r?.includes(e)?`That name is already in use in this project, pick something unique`:xn(e)})),f={type:`fm`,name:d,envNames:d===`filemaker`?{database:`FM_DATABASE`,server:`FM_SERVER`,apiKey:`OTTO_API_KEY`}:{database:`${d.toUpperCase()}_FM_DATABASE`,server:`${d.toUpperCase()}_FM_SERVER`,apiKey:`${d.toUpperCase()}_OTTO_API_KEY`}},ne=w(e),re=await Qe({projectDir:e,project:ne,envs:[{name:f.envNames.database,zodValue:`z.string().endsWith(".fmp12")`,defaultValue:l,type:`server`},{name:f.envNames.server,zodValue:`z.string().url()`,type:`server`,defaultValue:i.url.origin},{name:f.envNames.apiKey,zodValue:`z.string().startsWith("dk_") as z.ZodType<OttoAPIKey>`,type:`server`,defaultValue:u}]}),v=re.getImportDeclaration(e=>e.getModuleSpecifierValue()===`@proofkit/fmdapi`);v?(v.getNamedImports().find(e=>e.getName()===`OttoAPIKey`)?.remove(),v.addNamedImport({name:`OttoAPIKey`,isTypeOnly:!0})):re.addImportDeclaration({namedImports:[{name:`OttoAPIKey`,isTypeOnly:!0}],moduleSpecifier:`@proofkit/fmdapi`}),C({projectDir:e,dependencies:[`@proofkit/fmdapi`],devMode:!1}),n.dataSources.push(f),ce(n),be({dataSourceName:d,envNames:d===`filemaker`?void 0:f.envNames}),await T(ne),await Cn({settings:n,sourceName:d,projectDir:e,layoutName:t.layoutName,schemaName:t.schemaName,valueLists:`allowEmpty`})}async function kn(e){let t=v(),n=null,r=null,i=null,a=e;for(;r===null;){let e=a??_(await g({message:`What is the URL of your FileMaker Server?\n${D.cyan(`TIP: You can copy any valid path on the server and paste it here.`)}`,validate:e=>{try{let t=e;t.startsWith(`https://`)||(t=t.startsWith(`http://`)?t.replace(`http://`,`https://`):`https://${t}`),new URL(t);return}catch{return`Please enter a valid URL`}}}));try{n=new URL(e)}catch{b.error(`Invalid URL: ${e.toString()}`);continue}t.start(`Validating Server URL...`);let{fmsInfo:o,ottoInfo:s}=await un({url:n.origin});t.stop();let c=o.ServerVersion.split(` `)[0];if(!c){b.error(`Unable to parse FileMaker Server version`),a=void 0;continue}r=new He(c),i=s?.Otto.version?new He(s.Otto.version):null,a=void 0}if(n===null)throw Error(`Unable to get FileMaker Server URL`);return ee(`🎉 FileMaker Server version ${r} detected \n
46
+ ${i?`🎉 OttoFMS version ${i} detected`:`❌ OttoFMS not detected`}`),{url:n,ottoVersion:i,fmsVersion:r}}const An=l([`fm`,`supabase`]),jn=async()=>{let e=An.parse(await m({message:`Which data souce do you want to add?`,options:[{label:`FileMaker`,value:`fm`},{label:`Supabase`,value:`supabase`}]}));if(e===`supabase`)throw Error(`Not implemented`);if(e===`fm`)await On({projectDir:process.cwd()});else throw Error(`Invalid data source`)},Mn=()=>{let e=new Ie(`data`);return e.description(`Add a new data source to your project`),e.addOption(oe),e.hook(`preAction`,(e,t)=>{u(t.opts());let n=y({commandName:`add`});t.setOptionValue(`settings`,n)}),e},Nn=/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,Pn=async({projectDir:e,pageDir:t,dataSource:n,schemaName:r})=>{if(!n)throw Error(`DataSource is required for table page`);if(!r)throw Error(`SchemaName is required for table page`);if(n.type!==`fm`)throw Error(`FileMaker DataSource is required for table page`);let i=he({projectDir:e,dataSourceName:n.name}),a=xe({schemaName:r,dataSourceName:n.name}),o=S();if(o.ui===`shadcn`)return;let s=o.auth,l={__SOURCE_NAME__:n.name,__TYPE_NAME__:`T${r}`,__ZOD_TYPE_NAME__:`Z${r}`,__CLIENT_NAME__:`${r}${i}`,__SCHEMA_NAME__:r,__ACTION_CLIENT__:s.type===`none`?`actionClient`:`authedActionClient`,__FIRST_FIELD_NAME__:a[0]??`NO_FIELDS_ON_YOUR_LAYOUT`},u=await O.readdir(t);for await(let e of u){let n=E.join(t,e),r=await O.readFile(n,`utf8`);for(let[e,t]of Object.entries(l))r=r.replace(new RegExp(e,`g`),t);await O.writeFile(n,r,`utf8`)}let d=w(e),f=d.addSourceFileAtPath(E.join(t,c.appType===`browser`?`table.tsx`:`index.tsx`)).getVariableDeclaration(`columns`)?.getInitializerIfKind(A.ArrayLiteralExpression),p=Ln(a.filter(Boolean));for await(let e of p)f?.addElement(t=>t.inlineBlock(()=>{Fn(e)?t.write(`accessorFn: (row) => row["${e}"],`):t.write(`accessorFn: (row) => row.${e},`),t.write(`header: "${e}",`)}).write(`,`).newLine());c.appType===`webviewer`&&await rt({project:d})&&await me(),await T(d)};function Fn(e){return!Nn.test(e)}const In=[`id`,`pk`,`createdat`,`updatedat`,`primarykey`,`createdby`,`modifiedby`,`creationtimestamp`,`modificationtimestamp`];function Ln(e){return e.filter(e=>!In.includes(e.toLowerCase())||e.startsWith(`_`))}const Rn=async e=>{await Pn(e),await rt()&&await me()},zn={blank:{requireData:!1,label:`Blank`,templatePath:`nextjs/blank`},table:{requireData:!0,label:`Basic Table`,hint:`Use to load and show multiple records`,templatePath:`nextjs/table`,postIntallFn:Pn},tableEdit:{requireData:!0,label:`Basic Table (editable)`,hint:`Use to load and show multiple records with inline edit functionality`,templatePath:`nextjs/table-edit`,postIntallFn:Pn},tableInfinite:{requireData:!0,label:`Infinite Table`,hint:`Automatically load more records when the user scrolls to the bottom`,templatePath:`nextjs/table-infinite`,postIntallFn:Rn},tableInfiniteEdit:{requireData:!0,label:`Infinite Table (editable)`,hint:`Automatically load more records when the user scrolls to the bottom with inline edit functionality`,templatePath:`nextjs/table-infinite-edit`,postIntallFn:Rn}},Bn={blank:{requireData:!1,label:`Blank`,templatePath:`vite-wv/blank`},table:{requireData:!0,label:`Basic Table`,hint:`Use to load and show multiple records`,templatePath:`vite-wv/table`,postIntallFn:Pn},tableEdit:{requireData:!0,label:`Basic Table (editable)`,hint:`Use to load and show multiple records with inline edit functionality`,templatePath:`vite-wv/table-edit`,postIntallFn:Pn}};async function Vn({projectDir:e,navType:t,...n}){let r=E.join(e,`src/app/navigation.tsx`);if(!O.existsSync(r))return;let i=w(e);i.addSourceFileAtPath(r).getVariableDeclaration(t===`primary`?`primaryRoutes`:`secondaryRoutes`)?.getInitializerIfKind(A.ArrayLiteralExpression)?.addElement(e=>e.block(()=>{e.write(`
47
+ label: "${n.label}",
48
+ type: "link",
49
+ href: "${n.href}",`)}).write(`,`)),await T(i)}const Hn=async e=>{let t=c.projectDir,n=S();if(n.ui===`shadcn`)return h(`Adding pages is not yet supported for shadcn-based projects.`);let r=c.appType===`browser`?Object.entries(zn):Object.entries(Bn);if(r.length===0)return h(`No templates found for your app type. Check back soon!`);let i=e?.routeName,o=n.replacedMainPage;if(c.appType===`webviewer`&&!o&&!a()&&!i){let e=_(await m({message:`Do you want to replace the default page?`,options:[{label:`Yes`,value:`yes`},{label:`No, maybe later`,value:`no`},{label:`No, don't ask again`,value:`never`}]}));(e===`never`||e===`yes`)&&(o=!0),e===`yes`&&(i=`/`)}i||=_(await g({message:`Enter the URL PATH for your new page`,validate:e=>{if(e.length===0)return`URL path is required`}})),i.startsWith(`/`)||(i=`/${i}`);let s=Le(i.replace(`/`,``).trim()),l=e?.template??_(await m({message:`What template should be used for this page?`,options:r.map(([e,t])=>({value:e,label:`${t.label}`,hint:t.hint}))})),u=r.find(([e])=>e===l)?.[1];if(!u)return h(`Page template ${l} not found`);let f,p;if(u.requireData){if(n.dataSources.length===0)return h(`This template requires a data source, but you don't have any. Add a data source first, or choose another page template`);let r=e?.dataSourceName??(n.dataSources.length>1?_(await m({message:`Which data source should be used for this page?`,options:n.dataSources.map(e=>({value:e.name,label:e.name}))})):n.dataSources[0]?.name);if(f=n.dataSources.find(e=>e.name===r),!f)return h(`Data source ${r} not found`);p=await Wn({projectDir:t,dataSource:f})}let ee=v();ee.start(`Adding page from template`);let te=E.join(d,`template/pages`,u.templatePath),ne=c.appType===`browser`?E.join(t,`src/app/(main)`,i):E.join(t,`src/routes`,i);await O.copy(te,ne),c.appType===`browser`?s&&s!==``&&await Vn({projectDir:process.cwd(),navType:`primary`,label:s,href:i}):c.appType,await u.postIntallFn?.({projectDir:t,pageDir:ne,dataSource:f,schemaName:p}),o!==n.replacedMainPage&&le({replacedMainPage:o}),ee.stop(`Added page!`);let re=fe();console.log(`\n${D.green(`Next steps:`)}\nTo preview this page, restart your dev server using the ${D.cyan(`${re===`npm`?`npm run`:re} dev`)} command\n`)},Un=()=>{let e=new Ie(`page`).description(`Add a new page to your project`).action(async()=>{await Hn()});return e.addOption(oe),e.addOption(se),e.hook(`preAction`,()=>{u(e.opts()),c.baseCommand=`add`,y({commandName:`add`})}),e};async function Wn({projectDir:e=process.cwd(),dataSource:t}){if(t.type===`supabase`)throw Error(`Not implemented`);let n=ye({projectDir:e,dataSourceName:t.name}).map(e=>e.schemaName).filter(Boolean);if(n.length===0){h(`This data source doesn't have any schemas to load data from`);return}return n.length===1?n[0]:_(await m({message:`Which schema should this page load data from?`,options:n.map(e=>({label:e??``,value:e??``}))}))}var M;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(M||={});var Gn;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(Gn||={});const N=M.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),P=e=>{switch(typeof e){case`undefined`:return N.undefined;case`string`:return N.string;case`number`:return Number.isNaN(e)?N.nan:N.number;case`boolean`:return N.boolean;case`function`:return N.function;case`bigint`:return N.bigint;case`symbol`:return N.symbol;case`object`:return Array.isArray(e)?N.array:e===null?N.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?N.promise:typeof Map<`u`&&e instanceof Map?N.map:typeof Set<`u`&&e instanceof Set?N.set:typeof Date<`u`&&e instanceof Date?N.date:N.object;default:return N.unknown}},F=M.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]);var I=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;r<i.path.length;){let n=i.path[r];r===i.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(i))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(this),n}static assert(t){if(!(t instanceof e))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,M.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=e=>e.message){let t=Object.create(null),n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};I.create=e=>new I(e);const Kn=(e,t)=>{let n;switch(e.code){case F.invalid_type:n=e.received===N.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case F.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,M.jsonStringifyReplacer)}`;break;case F.unrecognized_keys:n=`Unrecognized key(s) in object: ${M.joinValues(e.keys,`, `)}`;break;case F.invalid_union:n=`Invalid input`;break;case F.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${M.joinValues(e.options)}`;break;case F.invalid_enum_value:n=`Invalid enum value. Expected ${M.joinValues(e.options)}, received '${e.received}'`;break;case F.invalid_arguments:n=`Invalid function arguments`;break;case F.invalid_return_type:n=`Invalid function return type`;break;case F.invalid_date:n=`Invalid date`;break;case F.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:M.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case F.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case F.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case F.custom:n=`Invalid input`;break;case F.invalid_intersection_types:n=`Intersection results could not be merged`;break;case F.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case F.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,M.assertNever(e)}return{message:n}};let qn=Kn;function Jn(){return qn}const Yn=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}};function L(e,t){let n=Jn(),r=Yn({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Kn?void 0:Kn].filter(e=>!!e)});e.common.issues.push(r)}var R=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return z;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return z;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}};const z=Object.freeze({status:`aborted`}),Xn=e=>({status:`dirty`,value:e}),B=e=>({status:`valid`,value:e}),Zn=e=>e.status===`aborted`,Qn=e=>e.status===`dirty`,$n=e=>e.status===`valid`,er=e=>typeof Promise<`u`&&e instanceof Promise;var V;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(V||={});var H=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}};const tr=(e,t)=>{if($n(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){return this._error||=new I(e.common.issues),this._error}}};function U(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var W=class{get description(){return this._def.description}_getType(e){return P(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:P(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new R,ctx:{common:e.parent.common,data:e.data,parsedType:P(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(er(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:P(e)};return tr(n,this._parseSync({data:e,path:n.path,parent:n}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:P(e)};if(!this[`~standard`].async)try{let n=this._parseSync({data:e,path:[],parent:t});return $n(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>$n(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:P(e)},r=this._parse({data:e,path:n.path,parent:n});return tr(n,await(er(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:F.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new J({schema:this,typeName:X.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return Y.create(this,this._def)}nullable(){return ei.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Lr.create(this)}promise(){return $r.create(this,this._def)}or(e){return zr.create([this,e],this._def)}and(e){return Hr.create(this,e,this._def)}transform(e){return new J({...U(this._def),schema:this,typeName:X.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new ti({...U(this._def),innerType:this,defaultValue:t,typeName:X.ZodDefault})}brand(){return new ii({typeName:X.ZodBranded,type:this,...U(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new ni({...U(this._def),innerType:this,catchValue:t,typeName:X.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ai.create(this,e)}readonly(){return oi.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}};const nr=/^c[^\s-]{8,}$/i,rr=/^[0-9a-z]+$/,ir=/^[0-9A-HJKMNP-TV-Z]{26}$/i,ar=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,or=/^[a-z0-9_-]{21}$/i,sr=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,cr=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,lr=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;let ur;const dr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,fr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,pr=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,mr=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,hr=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,gr=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,_r=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,vr=RegExp(`^${_r}$`);function yr(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let n=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function br(e){return RegExp(`^${yr(e)}$`)}function xr(e){let t=`${_r}T${yr(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function Sr(e,t){return!!((t===`v4`||!t)&&dr.test(e)||(t===`v6`||!t)&&pr.test(e))}function Cr(e,t){if(!sr.test(e))return!1;try{let[n]=e.split(`.`);if(!n)return!1;let r=n.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(n.length+(4-n.length%4)%4,`=`),i=JSON.parse(atob(r));return!(typeof i!=`object`||!i||`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&i.alg!==t)}catch{return!1}}function wr(e,t){return!!((t===`v4`||!t)&&fr.test(e)||(t===`v6`||!t)&&mr.test(e))}var Tr=class e extends W{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==N.string){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.string,received:t.parsedType}),z}let t=new R,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.length<r.value&&(n=this._getOrReturnCtx(e,n),L(n,{code:F.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`max`)e.data.length>r.value&&(n=this._getOrReturnCtx(e,n),L(n,{code:F.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.length<r.value;(i||a)&&(n=this._getOrReturnCtx(e,n),i?L(n,{code:F.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}):a&&L(n,{code:F.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}),t.dirty())}else if(r.kind===`email`)lr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`email`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`emoji`)ur||=RegExp(`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,`u`),ur.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`emoji`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`uuid`)ar.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`uuid`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`nanoid`)or.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`nanoid`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid`)nr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`cuid`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid2`)rr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`cuid2`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`ulid`)ir.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`ulid`,code:F.invalid_string,message:r.message}),t.dirty());else if(r.kind===`url`)try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),L(n,{validation:`url`,code:F.invalid_string,message:r.message}),t.dirty()}else r.kind===`regex`?(r.regex.lastIndex=0,r.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`regex`,code:F.invalid_string,message:r.message}),t.dirty())):r.kind===`trim`?e.data=e.data.trim():r.kind===`includes`?e.data.includes(r.value,r.position)||(n=this._getOrReturnCtx(e,n),L(n,{code:F.invalid_string,validation:{includes:r.value,position:r.position},message:r.message}),t.dirty()):r.kind===`toLowerCase`?e.data=e.data.toLowerCase():r.kind===`toUpperCase`?e.data=e.data.toUpperCase():r.kind===`startsWith`?e.data.startsWith(r.value)||(n=this._getOrReturnCtx(e,n),L(n,{code:F.invalid_string,validation:{startsWith:r.value},message:r.message}),t.dirty()):r.kind===`endsWith`?e.data.endsWith(r.value)||(n=this._getOrReturnCtx(e,n),L(n,{code:F.invalid_string,validation:{endsWith:r.value},message:r.message}),t.dirty()):r.kind===`datetime`?xr(r).test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{code:F.invalid_string,validation:`datetime`,message:r.message}),t.dirty()):r.kind===`date`?vr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{code:F.invalid_string,validation:`date`,message:r.message}),t.dirty()):r.kind===`time`?br(r).test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{code:F.invalid_string,validation:`time`,message:r.message}),t.dirty()):r.kind===`duration`?cr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`duration`,code:F.invalid_string,message:r.message}),t.dirty()):r.kind===`ip`?Sr(e.data,r.version)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`ip`,code:F.invalid_string,message:r.message}),t.dirty()):r.kind===`jwt`?Cr(e.data,r.alg)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`jwt`,code:F.invalid_string,message:r.message}),t.dirty()):r.kind===`cidr`?wr(e.data,r.version)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`cidr`,code:F.invalid_string,message:r.message}),t.dirty()):r.kind===`base64`?hr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`base64`,code:F.invalid_string,message:r.message}),t.dirty()):r.kind===`base64url`?gr.test(e.data)||(n=this._getOrReturnCtx(e,n),L(n,{validation:`base64url`,code:F.invalid_string,message:r.message}),t.dirty()):M.assertNever(r);return{status:t.value,value:e.data}}_regex(e,t,n){return this.refinement(t=>e.test(t),{validation:t,code:F.invalid_string,...V.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...V.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...V.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...V.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...V.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...V.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...V.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...V.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...V.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...V.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...V.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...V.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...V.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...V.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...V.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...V.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...V.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...V.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...V.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...V.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...V.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...V.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...V.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...V.errToObj(t)})}nonempty(e){return this.min(1,V.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};Tr.create=e=>new Tr({checks:[],typeName:X.ZodString,coerce:e?.coerce??!1,...U(e)});function Er(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return Number.parseInt(e.toFixed(i).replace(`.`,``))%Number.parseInt(t.toFixed(i).replace(`.`,``))/10**i}var Dr=class e extends W{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==N.number){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.number,received:t.parsedType}),z}let t,n=new R;for(let r of this._def.checks)r.kind===`int`?M.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),L(t,{code:F.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),L(t,{code:F.too_small,minimum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),L(t,{code:F.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?Er(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),L(t,{code:F.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),L(t,{code:F.not_finite,message:r.message}),n.dirty()):M.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,V.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,V.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,V.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,V.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:V.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:V.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:V.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:V.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:V.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:V.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:V.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:V.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:V.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:V.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind===`int`||e.kind===`multipleOf`&&M.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.value<e)&&(e=n.value);return Number.isFinite(t)&&Number.isFinite(e)}};Dr.create=e=>new Dr({checks:[],typeName:X.ZodNumber,coerce:e?.coerce||!1,...U(e)});var Or=class e extends W{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==N.bigint)return this._getInvalidInput(e);let t,n=new R;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),L(t,{code:F.too_small,type:`bigint`,minimum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),L(t,{code:F.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),L(t,{code:F.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):M.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.bigint,received:t.parsedType}),z}gte(e,t){return this.setLimit(`min`,e,!0,V.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,V.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,V.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,V.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:V.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:V.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:V.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:V.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:V.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:V.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};Or.create=e=>new Or({checks:[],typeName:X.ZodBigInt,coerce:e?.coerce??!1,...U(e)});var kr=class extends W{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==N.boolean){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.boolean,received:t.parsedType}),z}return B(e.data)}};kr.create=e=>new kr({typeName:X.ZodBoolean,coerce:e?.coerce||!1,...U(e)});var Ar=class e extends W{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==N.date){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.date,received:t.parsedType}),z}if(Number.isNaN(e.data.getTime()))return L(this._getOrReturnCtx(e),{code:F.invalid_date}),z;let t=new R,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()<r.value&&(n=this._getOrReturnCtx(e,n),L(n,{code:F.too_small,message:r.message,inclusive:!0,exact:!1,minimum:r.value,type:`date`}),t.dirty()):r.kind===`max`?e.data.getTime()>r.value&&(n=this._getOrReturnCtx(e,n),L(n,{code:F.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):M.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:V.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:V.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e==null?null:new Date(e)}};Ar.create=e=>new Ar({checks:[],coerce:e?.coerce||!1,typeName:X.ZodDate,...U(e)});var jr=class extends W{_parse(e){if(this._getType(e)!==N.symbol){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.symbol,received:t.parsedType}),z}return B(e.data)}};jr.create=e=>new jr({typeName:X.ZodSymbol,...U(e)});var Mr=class extends W{_parse(e){if(this._getType(e)!==N.undefined){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.undefined,received:t.parsedType}),z}return B(e.data)}};Mr.create=e=>new Mr({typeName:X.ZodUndefined,...U(e)});var Nr=class extends W{_parse(e){if(this._getType(e)!==N.null){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.null,received:t.parsedType}),z}return B(e.data)}};Nr.create=e=>new Nr({typeName:X.ZodNull,...U(e)});var Pr=class extends W{constructor(){super(...arguments),this._any=!0}_parse(e){return B(e.data)}};Pr.create=e=>new Pr({typeName:X.ZodAny,...U(e)});var Fr=class extends W{constructor(){super(...arguments),this._unknown=!0}_parse(e){return B(e.data)}};Fr.create=e=>new Fr({typeName:X.ZodUnknown,...U(e)});var G=class extends W{_parse(e){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.never,received:t.parsedType}),z}};G.create=e=>new G({typeName:X.ZodNever,...U(e)});var Ir=class extends W{_parse(e){if(this._getType(e)!==N.undefined){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.void,received:t.parsedType}),z}return B(e.data)}};Ir.create=e=>new Ir({typeName:X.ZodVoid,...U(e)});var Lr=class e extends W{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==N.array)return L(t,{code:F.invalid_type,expected:N.array,received:t.parsedType}),z;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.length<r.exactLength.value;(e||i)&&(L(t,{code:e?F.too_big:F.too_small,minimum:i?r.exactLength.value:void 0,maximum:e?r.exactLength.value:void 0,type:`array`,inclusive:!0,exact:!0,message:r.exactLength.message}),n.dirty())}if(r.minLength!==null&&t.data.length<r.minLength.value&&(L(t,{code:F.too_small,minimum:r.minLength.value,type:`array`,inclusive:!0,exact:!1,message:r.minLength.message}),n.dirty()),r.maxLength!==null&&t.data.length>r.maxLength.value&&(L(t,{code:F.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new H(t,e,t.path,n)))).then(e=>R.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new H(t,e,t.path,n)));return R.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:V.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:V.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:V.toString(n)}})}nonempty(e){return this.min(1,e)}};Lr.create=(e,t)=>new Lr({type:e,minLength:null,maxLength:null,exactLength:null,typeName:X.ZodArray,...U(t)});function Rr(e){if(e instanceof K){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=Y.create(Rr(r))}return new K({...e._def,shape:()=>t})}else if(e instanceof Lr)return new Lr({...e._def,type:Rr(e.element)});else if(e instanceof Y)return Y.create(Rr(e.unwrap()));else if(e instanceof ei)return ei.create(Rr(e.unwrap()));else if(e instanceof Ur)return Ur.create(e.items.map(e=>Rr(e)));else return e}var K=class e extends W{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape();return this._cached={shape:e,keys:M.objectKeys(e)},this._cached}_parse(e){if(this._getType(e)!==N.object){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.object,received:t.parsedType}),z}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof G&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new H(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof G){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(L(n,{code:F.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new H(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>R.mergeObjectSync(t,e)):R.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return V.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{let r=this._def.errorMap?.(e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:V.errToObj(t).message??r}:{message:r}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:X.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let e of M.objectKeys(t))t[e]&&this.shape[e]&&(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let e of M.objectKeys(this.shape))t[e]||(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}deepPartial(){return Rr(this)}partial(t){let n={};for(let e of M.objectKeys(this.shape)){let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let e of M.objectKeys(this.shape))if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof Y;)t=t._def.innerType;n[e]=t}return new e({...this._def,shape:()=>n})}keyof(){return Xr(M.objectKeys(this.shape))}};K.create=(e,t)=>new K({shape:()=>e,unknownKeys:`strip`,catchall:G.create(),typeName:X.ZodObject,...U(t)}),K.strictCreate=(e,t)=>new K({shape:()=>e,unknownKeys:`strict`,catchall:G.create(),typeName:X.ZodObject,...U(t)}),K.lazycreate=(e,t)=>new K({shape:e,unknownKeys:`strip`,catchall:G.create(),typeName:X.ZodObject,...U(t)});var zr=class extends W{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new I(e.ctx.common.issues));return L(t,{code:F.invalid_union,unionErrors:n}),z}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new I(e));return L(t,{code:F.invalid_union,unionErrors:i}),z}}get options(){return this._def.options}};zr.create=(e,t)=>new zr({options:e,typeName:X.ZodUnion,...U(t)});const q=e=>e instanceof Jr?q(e.schema):e instanceof J?q(e.innerType()):e instanceof Yr?[e.value]:e instanceof Zr?e.options:e instanceof Qr?M.objectValues(e.enum):e instanceof ti?q(e._def.innerType):e instanceof Mr?[void 0]:e instanceof Nr?[null]:e instanceof Y?[void 0,...q(e.unwrap())]:e instanceof ei?[null,...q(e.unwrap())]:e instanceof ii||e instanceof oi?q(e.unwrap()):e instanceof ni?q(e._def.innerType):[];var Br=class e extends W{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==N.object)return L(t,{code:F.invalid_type,expected:N.object,received:t.parsedType}),z;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(L(t,{code:F.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),z)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=q(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:X.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...U(r)})}};function Vr(e,t){let n=P(e),r=P(t);if(e===t)return{valid:!0,data:e};if(n===N.object&&r===N.object){let n=M.objectKeys(t),r=M.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Vr(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===N.array&&r===N.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=Vr(i,a);if(!o.valid)return{valid:!1};n.push(o.data)}return{valid:!0,data:n}}else if(n===N.date&&r===N.date&&+e==+t)return{valid:!0,data:e};else return{valid:!1}}var Hr=class extends W{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if(Zn(e)||Zn(r))return z;let i=Vr(e.value,r.value);return i.valid?((Qn(e)||Qn(r))&&t.dirty(),{status:t.value,value:i.data}):(L(n,{code:F.invalid_intersection_types}),z)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Hr.create=(e,t,n)=>new Hr({left:e,right:t,typeName:X.ZodIntersection,...U(n)});var Ur=class e extends W{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==N.array)return L(n,{code:F.invalid_type,expected:N.array,received:n.parsedType}),z;if(n.data.length<this._def.items.length)return L(n,{code:F.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),z;!this._def.rest&&n.data.length>this._def.items.length&&(L(n,{code:F.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new H(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>R.mergeArray(t,e)):R.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Ur.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new Ur({items:e,typeName:X.ZodTuple,rest:null,...U(t)})};var Wr=class e extends W{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==N.object)return L(n,{code:F.invalid_type,expected:N.object,received:n.parsedType}),z;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new H(n,e,n.path,e)),value:a._parse(new H(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?R.mergeObjectAsync(t,r):R.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof W?new e({keyType:t,valueType:n,typeName:X.ZodRecord,...U(r)}):new e({keyType:Tr.create(),valueType:t,typeName:X.ZodRecord,...U(n)})}},Gr=class extends W{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==N.map)return L(n,{code:F.invalid_type,expected:N.map,received:n.parsedType}),z;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new H(n,e,n.path,[a,`key`])),value:i._parse(new H(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return z;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return z;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};Gr.create=(e,t,n)=>new Gr({valueType:t,keyType:e,typeName:X.ZodMap,...U(n)});var Kr=class e extends W{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==N.set)return L(n,{code:F.invalid_type,expected:N.set,received:n.parsedType}),z;let r=this._def;r.minSize!==null&&n.data.size<r.minSize.value&&(L(n,{code:F.too_small,minimum:r.minSize.value,type:`set`,inclusive:!0,exact:!1,message:r.minSize.message}),t.dirty()),r.maxSize!==null&&n.data.size>r.maxSize.value&&(L(n,{code:F.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return z;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new H(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:V.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:V.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Kr.create=(e,t)=>new Kr({valueType:e,minSize:null,maxSize:null,typeName:X.ZodSet,...U(t)});var qr=class e extends W{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==N.function)return L(t,{code:F.invalid_type,expected:N.function,received:t.parsedType}),z;function n(e,n){return Yn({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Jn(),Kn].filter(e=>!!e),issueData:{code:F.invalid_arguments,argumentsError:n}})}function r(e,n){return Yn({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Jn(),Kn].filter(e=>!!e),issueData:{code:F.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof $r){let e=this;return B(async function(...t){let o=new I([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return B(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new I([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new I([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Ur.create(t).rest(Fr.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||Ur.create([]).rest(Fr.create()),returns:n||Fr.create(),typeName:X.ZodFunction,...U(r)})}},Jr=class extends W{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Jr.create=(e,t)=>new Jr({getter:e,typeName:X.ZodLazy,...U(t)});var Yr=class extends W{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return L(t,{received:t.data,code:F.invalid_literal,expected:this._def.value}),z}return{status:`valid`,value:e.data}}get value(){return this._def.value}};Yr.create=(e,t)=>new Yr({value:e,typeName:X.ZodLiteral,...U(t)});function Xr(e,t){return new Zr({values:e,typeName:X.ZodEnum,...U(t)})}var Zr=class e extends W{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return L(t,{expected:M.joinValues(n),received:t.parsedType,code:F.invalid_type}),z}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return L(t,{received:t.data,code:F.invalid_enum_value,options:n}),z}return B(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};Zr.create=Xr;var Qr=class extends W{_parse(e){let t=M.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==N.string&&n.parsedType!==N.number){let e=M.objectValues(t);return L(n,{expected:M.joinValues(e),received:n.parsedType,code:F.invalid_type}),z}if(this._cache||=new Set(M.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=M.objectValues(t);return L(n,{received:n.data,code:F.invalid_enum_value,options:e}),z}return B(e.data)}get enum(){return this._def.values}};Qr.create=(e,t)=>new Qr({values:e,typeName:X.ZodNativeEnum,...U(t)});var $r=class extends W{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==N.promise&&t.common.async===!1?(L(t,{code:F.invalid_type,expected:N.promise,received:t.parsedType}),z):B((t.parsedType===N.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};$r.create=(e,t)=>new $r({type:e,typeName:X.ZodPromise,...U(t)});var J=class extends W{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===X.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{L(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return z;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?z:r.status===`dirty`||t.value===`dirty`?Xn(r.value):r});{if(t.value===`aborted`)return z;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?z:r.status===`dirty`||t.value===`dirty`?Xn(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?z:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?z:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!$n(e))return z;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>$n(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):z);M.assertNever(r)}};J.create=(e,t,n)=>new J({schema:e,typeName:X.ZodEffects,effect:t,...U(n)}),J.createWithPreprocess=(e,t,n)=>new J({schema:t,effect:{type:`preprocess`,transform:e},typeName:X.ZodEffects,...U(n)});var Y=class extends W{_parse(e){return this._getType(e)===N.undefined?B(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Y.create=(e,t)=>new Y({innerType:e,typeName:X.ZodOptional,...U(t)});var ei=class extends W{_parse(e){return this._getType(e)===N.null?B(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ei.create=(e,t)=>new ei({innerType:e,typeName:X.ZodNullable,...U(t)});var ti=class extends W{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===N.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};ti.create=(e,t)=>new ti({innerType:e,typeName:X.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...U(t)});var ni=class extends W{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return er(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new I(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new I(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};ni.create=(e,t)=>new ni({innerType:e,typeName:X.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...U(t)});var ri=class extends W{_parse(e){if(this._getType(e)!==N.nan){let t=this._getOrReturnCtx(e);return L(t,{code:F.invalid_type,expected:N.nan,received:t.parsedType}),z}return{status:`valid`,value:e.data}}};ri.create=e=>new ri({typeName:X.ZodNaN,...U(e)});var ii=class extends W{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},ai=class e extends W{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?z:e.status===`dirty`?(t.dirty(),Xn(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?z:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:X.ZodPipeline})}},oi=class extends W{_parse(e){let t=this._def.innerType._parse(e),n=e=>($n(e)&&(e.value=Object.freeze(e.value)),e);return er(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};oi.create=(e,t)=>new oi({innerType:e,typeName:X.ZodReadonly,...U(t)}),K.lazycreate;var X;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})(X||={});const Z=Tr.create;Dr.create,ri.create,Or.create;const si=kr.create;Ar.create,jr.create,Mr.create,Nr.create;const ci=Pr.create;Fr.create,G.create,Ir.create;const Q=Lr.create,$=K.create;K.strictCreate,zr.create;const li=Br.create;Hr.create,Ur.create;const ui=Wr.create;Gr.create,Kr.create,qr.create,Jr.create;const di=Yr.create,fi=Zr.create;Qr.create,$r.create,J.create,Y.create,ei.create,J.createWithPreprocess,ai.create;const pi=fi([`registry:lib`,`registry:block`,`registry:component`,`registry:ui`,`registry:hook`,`registry:page`,`registry:file`,`registry:theme`,`registry:style`,`registry:item`,`registry:example`,`registry:internal`]).describe(`The type property is used to specify the type of your registry item. This is used to determine the type and target path of the item when resolved for a project.`);li(`type`,[$({path:Z(),content:Z().optional(),type:pi.extract([`registry:file`,`registry:page`]),target:Z()}),$({path:Z(),content:Z().optional(),type:pi.exclude([`registry:file`,`registry:page`]),target:Z().optional()})]);const mi=$({$schema:Z().optional(),extends:Z().optional(),title:Z().optional(),author:Z().optional(),description:Z().optional(),dependencies:Q(Z()).optional(),devDependencies:Q(Z()).optional(),registryDependencies:Q(Z()).optional(),tailwind:$({config:$({content:Q(Z()).optional(),theme:ui(Z(),ci()).optional(),plugins:Q(Z()).optional()}).optional()}).optional(),cssVars:$({theme:ui(Z(),Z()).optional(),light:ui(Z(),Z()).optional(),dark:ui(Z(),Z()).optional()}).optional(),css:ui(Z(),ci()).optional(),envVars:ui(Z(),Z()).optional(),meta:ui(Z(),ci()).optional(),categories:Q(Z()).optional()}),hi=li(`type`,[$({sourceFileName:Z(),destinationPath:Z().optional(),type:pi.extract([`registry:file`,`registry:page`]),handlebars:si().optional()}),$({sourceFileName:Z(),destinationPath:Z().optional(),type:pi.exclude([`registry:file`,`registry:page`]),handlebars:si().optional()})]),gi=(e,t)=>$({action:di(e),data:t,_from:Z().optional()}),_i=li(`action`,[gi(`next-steps`,$({message:Z()})),gi(`package.json script`,$({scriptName:Z(),scriptCommand:Z()})),gi(`env`,$({envs:$({name:Z(),zodValue:Z(),defaultValue:Z().optional().describe("This value will be added to the .env file, unless `addToRuntimeEnv` is set to `false`."),type:fi([`server`,`client`]),addToRuntimeEnv:si().optional().describe(`Whether to add the env to the runtime env.`)}).array()})),gi(`wrap provider`,$({providerOpenTag:Z().describe(`The opening tag to use for the provider. This is used to wrap the provider in the correct location.`),providerCloseTag:Z().describe(`The closing tag to use for the provider.`),imports:Q($({moduleSpecifier:Z().describe(`The module to import from (e.g., '@/config/query-provider')`),defaultImport:Z().optional().describe(`The default import name (e.g., 'QueryProvider')`),namedImports:Q(Z()).optional().describe(`Array of named imports (e.g., ['QueryProvider', 'useQuery'])`)})).describe(`Array of import configurations for the provider. Each import should have either defaultImport or namedImports.`),parentTag:Q(Z()).optional().describe(`If set, the provider will attempt to go inside of the parent tag. The first found tag will be used as the parent. If not set or none of the tags are found, the provider will be wrapped at the very top level.`)}))]),vi=fi([`component`,`page`,`utility`,`hook`,`email`]),yi=fi([`next-pages`,`next-app`,`manual`]),bi=mi.extend({title:Z(),description:Z().optional(),category:vi,files:Q(hi),registryType:pi,postInstall:Q(_i).optional().describe(`Steps that should be run by the ProofKit CLI after shadcn CLI is done`),minimumProofKitVersion:Z().describe(`The minimum version of ProofKit required to use this template`).optional(),allowedFrameworks:Q(yi).optional(),schemaRequired:si().optional().describe(`Whether this template requires a database schema to be selected`)}),xi=$({name:Z(),title:Z(),category:vi,description:Z().optional()}).array(),Si=je(import.meta.url),Ci=E.dirname(Si);E.resolve(Ci,`../templates`);function wi(e){return e.replace(/^\/+|\/+$/g,``)}function Ti(e){return(e.registryDependencies??[]).filter(e=>e.startsWith(`{proofkit}/r/`)).map(e=>e.replace(`{proofkit}/r/`,``)).map(wi)}const Ei={"{{schema.schemaName}}":`__HB_SCHEMA_NAME__`,"{{schema.sourceName}}":`__HB_SOURCE_NAME__`,"{{schema.clientSuffix}}":`__HB_CLIENT_SUFFIX__`};function Di(e){let t=e;for(let[e,n]of Object.entries(Ei))t=t.replace(new RegExp(Oi(n),`g`),e);return t}function Oi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}async function ki(e,t){let n=[`shadcn@latest`,`add`,...Array.isArray(e)?e:[e]];try{await Me(`pnpm`,[`dlx`,...n],{stdio:`inherit`,cwd:c.projectDir??process.cwd()})}catch(e){throw x.error(`Failed to run shadcn add: ${e}`),e}}function Ai(){let e;try{e=S().registryUrl??f}catch{e=f}return e.endsWith(`/`)?e.slice(0,-1):e}function ji(){let e=E.join(c.projectDir,`components.json`);return JSON.parse(Oe.readFileSync(e,`utf8`))}const Mi=Ye({"@get/meta/:name":{output:bi},"@get/":{output:xi}}),Ni=Je({baseURL:`${Ai()}/r`,schema:Mi});async function Pi(e){let t=await Ni(`@get/meta/:name`,{params:{name:e}});if(t.error){if(t.error.status===404)return null;throw Error(t.error.message)}return t.data}Xe.registerHelper(`eq`,(e,t)=>e===t),Xe.registerHelper(`findFirst`,function(e,t,n){if(!(e&&Array.isArray(e)))return n.inverse(this);for(let r of e)if(t===`fm`&&r.type===`fm`)return n.fn(r);return n.inverse(this)});const Fi=[`id`,`pk`,`createdat`,`updatedat`,`primarykey`,`createdby`,`modifiedby`,`creationtimestamp`,`modificationtimestamp`];function Ii(e){return e.filter(e=>!Fi.includes(e.toLowerCase())||e.startsWith(`_`))}function Li(e){let{dataSource:t,schemaName:n}=e,r=he({projectDir:c.projectDir??process.cwd(),dataSourceName:t.name}),i=xe({schemaName:n,dataSourceName:t.name}).filter(Boolean);return{sourceName:t.name,schemaName:n,clientSuffix:r,allFieldNames:i,fieldNames:Ii(i)}}function Ri(e){return{proofkit:S(),shadcn:ji(),schema:e?Li(e):{sourceName:`UnknownDataSource`,schemaName:`UnknownSchema`,clientSuffix:`UnknownClientSuffix`,allFieldNames:[`UnknownFieldName`],fieldNames:[`UnknownFieldName`]}}}async function zi(e,t){let n=Bi(e,t),r=await O.readFile(n,`utf8`);r=Di(r);let i=Xe.compile(r)(t);await O.writeFile(n,i)}function Bi(e,t){let n=e.sourceFileName;if(e.destinationPath)return e.destinationPath;let r=c.projectDir??process.cwd(),{shadcn:i}=t,a=`src/components/blocks`;i?.aliases?.components&&(a=i.aliases.components.startsWith(`@/`)?`${i.aliases.components.replace(`@/`,`src/`)}/blocks`:`src/${i.aliases.components}/blocks`);let o={"registry:lib":i?.aliases?.lib||i?.aliases?.utils,"registry:component":i?.aliases?.components,"registry:ui":i?.aliases?.ui||i?.aliases?.components,"registry:hook":i?.aliases?.hooks,"registry:file":`src`,"registry:page":`src/app`,"registry:block":a,"registry:theme":`src/theme`,"registry:style":`src/styles`}[e.type];if(o){if(o.startsWith(`@/`)){let e=o.replace(`@/`,`src/`);return E.join(r,e,n)}return o.startsWith(`/`)||o.includes(`src/`)?E.join(r,o,n):E.join(r,`src`,o,n)}switch(e.type){case`registry:lib`:return E.join(r,`src`,`lib`,n);case`registry:file`:return E.join(r,`src`,n);case`registry:page`:{let e=`routeName`in t?t.routeName:void 0;if(e){let t=e===`/`?``:e;return E.join(r,`src`,`app`,`(main)`,t,n)}return E.join(r,`src`,`app`,n)}case`registry:block`:return E.join(r,`src`,`components`,`blocks`,n);case`registry:component`:return E.join(r,`src`,`components`,n);case`registry:ui`:return E.join(r,`src`,`components`,n);case`registry:hook`:return E.join(r,`src`,`hooks`,n);case`registry:theme`:return E.join(r,`src`,`theme`,n);case`registry:style`:return E.join(r,`src`,`styles`,n);default:return n}}function Vi(e){let t=E.join(c.projectDir,`package.json`),n=JSON.parse(Oe.readFileSync(t,`utf8`));n.scripts[e.data.scriptName]=e.data.scriptCommand,Oe.writeFileSync(t,JSON.stringify(n,null,2))}async function Hi(e){let{parentTag:t,imports:n,providerCloseTag:r,providerOpenTag:i}=e.data;try{let e=c.projectDir,a=w(e),o=(e=>e.startsWith(`@/`)?e.replace(`@/`,`src/`):e.startsWith(`./`)?e.substring(2):e)(ji().aliases.components),s=E.join(e,o,`providers.tsx`),l=a.addSourceFileAtPath(s);for(let e of n){let t={moduleSpecifier:e.moduleSpecifier,kind:We.ImportDeclaration};e.defaultImport&&(t.defaultImport=e.defaultImport),e.namedImports&&e.namedImports.length>0&&(t.namedImports=e.namedImports),l.addImportDeclaration(t)}let u=l.getFunction(e=>e.isDefaultExport());if(!u){x.warn(`No default export function found in ${s}`);return}let d=u?.getBody()?.getFirstDescendantByKind(A.ReturnStatement);if(!d){x.warn(`No return statement found in default export function`);return}let f;if(t&&t.length>0){for(let e of t)if(f=d?.getDescendantsOfKind(A.JsxOpeningElement).find(t=>t.getTagNameNode().getText()===e)?.getParentIfKind(A.JsxElement),f)break}if(f){let e=`${i}
50
+ ${f?.getJsxChildren().map(e=>e.getText()).filter(Boolean).join(`
51
+ `)}
52
+ ${r}`;f.getChildSyntaxList()?.replaceWithText(e)}else{let e=d?.getExpression();if(e){let t=e.getKind()===A.ParenthesizedExpression,n;n=t?e.asKindOrThrow(A.ParenthesizedExpression).getExpression().getText():e.getText();let a=`return (
53
+ ${i}
54
+ ${n}
55
+ ${r}
56
+ );`;d?.replaceWithText(a)}else x.warn(`No return expression found to wrap`)}await T(a),x.success(`Successfully wrapped provider in ${s}`)}catch(e){throw x.error(`Failed to wrap provider: ${e}`),e}}async function Ui(e){e.action===`package.json script`?Vi(e):e.action===`wrap provider`?await Hi(e):e.action===`next-steps`?x.info(e.data.message):e.action===`env`?await Qe({envs:e.data.envs}):x.error(`Unknown post-install step: ${e}`)}async function Wi(){await O.pathExists(`proofkit.json`)||(ce(de),ue())}async function Gi(){let e=c.projectDir??process.cwd();if(!await O.pathExists(E.join(e,`components.json`)))throw Error("Shadcn is not installed. Please run `pnpm dlx shadcn@latest init` to install it.");await Wi()}async function Ki({projectDir:e=process.cwd(),dataSource:t}){if(t.type===`supabase`)throw Error(`Not implemented`);let n=ye({projectDir:e,dataSourceName:t.name}).map(e=>e.schemaName).filter(e=>!!e);if(n.length===0){h(`This data source doesn't have any schemas to load data from`);return}return n.length===1?n[0]:_(await m({message:`Which schema should this template use?`,options:n.map(e=>({label:e,value:e}))}))}async function qi(e){let t=Be(`Validating template`).start();try{await Gi();let n=await Pi(e);if(!n){t.fail(`Template ${e} not found in the ProofKit registry`);return}if(n.minimumProofKitVersion&&Ve.gt(n.minimumProofKitVersion,pe())){x.error(`Template ${e} requires ProofKit version ${n.minimumProofKitVersion}, but you are using version ${pe()}`),t.fail(`Template is not compatible with your ProofKit version`);return}t.succeed();let r=Ti(n),i=S().registryTemplates,a,o,s,l;if(n.schemaRequired){let e=S();if(e.dataSources.length===0){t.fail(`This template requires a data source, but you don't have any. Add a data source first.`);return}let n=e.dataSources.length>1?_(await m({message:`Which data source should be used for this template?`,options:e.dataSources.map(e=>({value:e.name,label:e.name}))})):e.dataSources[0]?.name;if(a=e.dataSources.find(e=>e.name===n),!a){t.fail(`Data source ${n} not found`);return}if(o=await Ki({projectDir:c.projectDir,dataSource:a}),!o){t.fail(`Schema selection was cancelled`);return}}n.category===`page`&&(s=_(await g({message:`Enter the URL PATH for your new page`,validate:e=>{if(e.length===0)return`URL path is required`}})),s.startsWith(`/`)&&(s=s.slice(1)),l=Le(s.replace(`/`,``).trim()));let u=new URL(`${Ai()}/r/${e}`);n.category===`page`&&u.searchParams.set(`routeName`,`/(main)/${s??e}`),e===`fmdapi`&&!i.includes(`utils/t3-env`)&&n.registryDependencies?.find(e=>e.includes(`utils/t3-env`))===void 0&&(await qi(`utils/t3-env`),i=S().registryTemplates),await ki([u.toString()],n.title);let d=n.files.filter(e=>e.handlebars);if(d.length>0){let t={...a&&o?Ri({dataSource:a,schemaName:o}):Ri(),...s&&{routeName:s},...l&&{pageName:l}},n=d.map(t=>({...t,destinationPath:t.destinationPath?.replace(`__PATH__`,`/(main)/${s??e}`)}));for(let e of n)await zi(e,t)}if(n.category===`page`&&s&&l&&await Vn({projectDir:c.projectDir,navType:`primary`,label:l,href:`/${s}`}),n.postInstall)for(let e of n.postInstall)e._from&&i.includes(e._from)||await Ui(e);le({registryTemplates:ze([...i,e,...r])})}catch(e){t.fail(`Failed to fetch template metadata.`),x.error(e)}}async function Ji(){let{data:e,error:t}=await Ni(`@get/`);if(t)throw Error(`Failed to fetch items from registry: ${t.message}`);return e}const Yi=async e=>{let t=S(),n=Be(`Loading available components...`).start(),r;try{r=await Ji()}catch(e){n.fail(`Failed to load registry components`),x.error(e);return}let i=r.filter(e=>!t.registryTemplates.includes(e.name)),a=Re(i,e=>e.category),o=ze(i.map(e=>e.category));n.succeed();let s=_(await m({message:`What do you want to add to your project?`,options:[...o.includes(`page`)?[{label:`Page`,value:`page`}]:[],...t.dataSources.length>0?[{label:`Schema`,value:`schema`,hint:`load data from a new table or layout from an existing data source`}]:[],{label:`Data Source`,value:`data`,hint:`to connect to a new database or FileMaker file`},...o.filter(e=>e!==`page`).map(e=>({label:Le(e),value:e}))]}));if(s===`schema`)await Cn();else if(s===`data`)await jn();else if(o.includes(s)){let e=a[s];await qi(_(await m({message:`Select a ${s} to add to your project`,options:e.map(e=>({label:e.title,hint:e.description,value:e.name}))})))}else x.error(`Could not find any available components in the category "${s}"`)},Xi=async(e,t)=>{if(e===`addon`)return await ot(t?.target);if(e===`tanstack-query`)return await it();if(e!==void 0)return await qi(e);let n;try{n=S()}catch{return await Gi(),await Yi(t)}if(n.ui===`shadcn`)return await Yi(t);y({commandName:`add`});let r=_(await m({message:`What do you want to add to your project?`,options:[{label:`Page`,value:`page`},...n.dataSources.length>0?[{label:`Schema`,value:`schema`,hint:`load data from a new table or layout from an existing data source`}]:[],{label:`React Email`,value:`react-email`},{label:`Data Source`,value:`data`,hint:`to connect to a new database or FileMaker file`},...n.auth.type===`none`&&n.appType===`browser`?[{label:`Auth`,value:`auth`}]:[]]}));r===`auth`?await bt():r===`data`?await jn():r===`page`?await Hn():r===`schema`?await Cn():r===`react-email`&&await nt({noInstall:t?.noInstall})},Zi=()=>{let e=new Ie(`add`).description(`Add a new component to your project`).argument(`[name]`,`Type of component to add`).addOption(oe).addOption(se).option(`--noInstall`,`Do not run your package manager install command`,!1).action(async(e,t)=>{await Xi(e,t)});return e.hook(`preAction`,(e,t)=>{u(t.opts()),c.baseCommand=`add`}),e.hook(`preSubcommand`,(e,t)=>{u(t.opts()),c.baseCommand=`add`}),e.addCommand(xt()),e.addCommand(st()),e.addCommand(Un()),e.addCommand(wn()),e.addCommand(Mn()),e};export{Zi as makeAddCommand,Xi as runAdd};
57
+ //# sourceMappingURL=add-DrcID6d6.js.map