@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-DrcID6d6.js","names":["fs","fs","fs","p.text","spinner","p.spinner","spinner","p.spinner","fs","addToSafeActionClient","fs","p.confirm","z.enum","clack.spinner","clack.text","password","clack.password","clack.confirm","z.object","z.boolean","z.number","z.array","z.string","z.enum","z.coerce.boolean","z","p.select","p.isCancel","z.string","spinner","p.spinner","p.searchSelect","p.text","z.enum","spinner","p.spinner","p.select","p.cancel","p.searchSelect","p.confirm","p.text","spinner","p.spinner","z.enum","p.select","fs","filterOutCommonFieldNames","commonFieldNamesToExclude","fs","p.cancel","p.select","p.text","promptForSchemaFromDataSource","spinner","p.spinner","fs","defaultErrorMap","defaultErrorMap","defaultErrorMap","z.enum","z.discriminatedUnion","z.object","z.string","z.array","z.record","z.any","z.boolean","z.literal","fs","fs","fs","p.select","p.text"],"sources":["../src/installers/envVars.ts","../src/utils/addToEnvs.ts","../src/installers/react-email.ts","../src/cli/react-email.ts","../src/generators/tanstack-query.ts","../src/cli/tanstack-query.ts","../src/cli/add/addon.ts","../src/installers/auth-shared.ts","../src/installers/clerk.ts","../src/installers/proofkit-auth.ts","../src/generators/auth.ts","../src/cli/add/auth.ts","../src/cli/ottofms.ts","../src/helpers/fmMcp.ts","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/createProxy.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/utils.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/TRPCError.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/transformer.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/formatter.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/middleware.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/parser.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/procedureBuilder.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/rootConfig.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/router.mjs","../../../node_modules/.pnpm/@trpc+server@11.0.0-rc.441/node_modules/@trpc/server/dist/unstable-core-do-not-import/initTRPC.mjs","../src/helpers/version-fetcher.ts","../src/utils/removeTrailingSlash.ts","../src/utils/validateAppName.ts","../src/cli/add/fmschema.ts","../src/cli/add/data-source/deploy-demo-file.ts","../src/cli/add/data-source/filemaker.ts","../src/cli/add/data-source/index.ts","../src/cli/add/page/post-install/table.ts","../src/cli/add/page/post-install/table-infinite.ts","../src/cli/add/page/templates.ts","../src/generators/route.ts","../src/cli/add/page/index.ts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/types.js","../../registry/dist/lib/index.js","../src/helpers/shadcn-cli.ts","../src/cli/add/registry/http.ts","../src/cli/add/registry/getOptions.ts","../src/cli/add/registry/postInstall/handlebars.ts","../src/cli/add/registry/postInstall/package-script.ts","../src/cli/add/registry/postInstall/wrap-provider.ts","../src/cli/add/registry/postInstall/index.ts","../src/helpers/stealth-init.ts","../src/cli/add/registry/preflight.ts","../src/cli/add/registry/install.ts","../src/cli/add/registry/listItems.ts","../src/cli/add/index.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"fs-extra\";\n\nimport type { Installer } from \"~/installers/index.js\";\nimport { state } from \"~/state.js\";\nimport { logger } from \"~/utils/logger.js\";\n\nexport type FMAuthKeys = { username: string; password: string } | { ottoApiKey: string };\n\nexport const initEnvFile: Installer = () => {\n const envFilePath = findT3EnvFile(false) ?? \"./src/config/env.ts\";\n\n const envContent = `\n# When adding additional environment variables, the schema in \"${envFilePath}\"\n# should be updated accordingly.\n\n`\n .trim()\n .concat(\"\\n\");\n\n const envDest = path.join(state.projectDir, \".env\");\n\n fs.writeFileSync(envDest, envContent, \"utf-8\");\n};\nexport function findT3EnvFile(throwIfNotFound: false): string | null;\nexport function findT3EnvFile(throwIfNotFound?: true): string;\nexport function findT3EnvFile(throwIfNotFound?: boolean): string | null {\n const possiblePaths = [\"src/config/env.ts\", \"src/lib/env.ts\", \"src/env.ts\", \"lib/env.ts\", \"env.ts\", \"config/env.ts\"];\n\n for (const testPath of possiblePaths) {\n const fullPath = path.join(state.projectDir, testPath);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n\n if (throwIfNotFound === false) {\n return null;\n }\n\n logger.warn(`Could not find T3 env files. Run \"proofkit add utils/t3-env\" to initialize them.`);\n throw new Error(\"T3 env file not found\");\n}\n","import { execSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { type Project, SyntaxKind } from \"ts-morph\";\n\nimport { findT3EnvFile } from \"~/installers/envVars.js\";\nimport { state } from \"~/state.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"./ts-morph.js\";\n\ninterface EnvSchema {\n name: string;\n zodValue: string;\n /** This value will be added to the .env file, unless `addToRuntimeEnv` is set to `false`. */\n defaultValue?: string;\n type: \"server\" | \"client\";\n addToRuntimeEnv?: boolean;\n}\n\nexport async function addToEnv({\n projectDir = state.projectDir,\n envs,\n envFileDescription,\n ...args\n}: {\n projectDir?: string;\n project?: Project;\n envs: EnvSchema[];\n envFileDescription?: string;\n}) {\n const envSchemaFile = findT3EnvFile();\n\n const project = args.project ?? getNewProject(projectDir);\n const schemaFile = project.addSourceFileAtPath(envSchemaFile);\n\n if (!schemaFile) {\n throw new Error(\"Schema file not found\");\n }\n\n // Find the createEnv call expression\n const createEnvCall = schemaFile\n .getDescendantsOfKind(SyntaxKind.CallExpression)\n .find((callExpr) => callExpr.getExpression().getText() === \"createEnv\");\n\n if (!createEnvCall) {\n throw new Error(\n \"Could not find createEnv call in schema file. Make sure you have a valid env.ts file with createEnv setup.\",\n );\n }\n\n // Get the server object property\n const opts = createEnvCall.getArguments()[0];\n if (!opts) {\n throw new Error(\"createEnv call is missing options argument\");\n }\n\n const serverProperty = opts\n .getDescendantsOfKind(SyntaxKind.PropertyAssignment)\n .find((prop) => prop.getName() === \"server\")\n ?.getFirstDescendantByKind(SyntaxKind.ObjectLiteralExpression);\n\n const clientProperty = opts\n .getDescendantsOfKind(SyntaxKind.PropertyAssignment)\n .find((prop) => prop.getName() === \"client\")\n ?.getFirstDescendantByKind(SyntaxKind.ObjectLiteralExpression);\n\n const runtimeEnvProperty = opts\n .getDescendantsOfKind(SyntaxKind.PropertyAssignment)\n .find((prop) => prop.getName() === \"experimental__runtimeEnv\")\n ?.getFirstDescendantByKind(SyntaxKind.ObjectLiteralExpression);\n\n const serverEnvs = envs.filter((env) => env.type === \"server\");\n const clientEnvs = envs.filter((env) => env.type === \"client\");\n\n for (const env of serverEnvs) {\n serverProperty?.addPropertyAssignment({\n name: env.name,\n initializer: env.zodValue,\n });\n }\n\n for (const env of clientEnvs) {\n clientProperty?.addPropertyAssignment({\n name: env.name,\n initializer: env.zodValue,\n });\n\n runtimeEnvProperty?.addPropertyAssignment({\n name: env.name,\n initializer: `process.env.${env.name}`,\n });\n }\n\n const envsString = envs\n .filter((env) => env.addToRuntimeEnv ?? true)\n .map((env) => `${env.name}=${env.defaultValue ?? \"\"}`)\n .join(\"\\n\");\n\n const dotEnvFile = path.join(projectDir, \".env\");\n\n // Only handle .env file if it already exists\n if (fs.existsSync(dotEnvFile)) {\n const currentFile = fs.readFileSync(dotEnvFile, \"utf-8\");\n\n // Ensure .env is in .gitignore using command line\n const gitIgnoreFile = path.join(projectDir, \".gitignore\");\n try {\n let gitIgnoreContent = \"\";\n if (fs.existsSync(gitIgnoreFile)) {\n gitIgnoreContent = fs.readFileSync(gitIgnoreFile, \"utf-8\");\n }\n\n if (!gitIgnoreContent.includes(\".env\")) {\n execSync(`echo \".env\" >> \"${gitIgnoreFile}\"`, { cwd: projectDir });\n }\n } catch (_error) {\n // Silently ignore gitignore errors\n }\n\n const newContent = `${currentFile}\n${envFileDescription ? `# ${envFileDescription}\\n${envsString}` : envsString}\n `;\n\n fs.writeFileSync(dotEnvFile, newContent);\n }\n\n if (!args.project) {\n await formatAndSaveSourceFiles(project);\n }\n\n return schemaFile;\n}\n","import path from \"node:path\";\nimport chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport type { Project } from \"ts-morph\";\nimport type { PackageJson } from \"type-fest\";\nimport * as p from \"~/cli/prompts.js\";\n\nimport { abortIfCancel } from \"~/cli/utils.js\";\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { installDependencies } from \"~/helpers/installDependencies.js\";\nimport { isNonInteractiveMode, state } from \"~/state.js\";\nimport { addPackageDependency } from \"~/utils/addPackageDependency.js\";\nimport { addToEnv } from \"~/utils/addToEnvs.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { getSettings, setSettings } from \"~/utils/parseSettings.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\n\nexport async function installReactEmail({\n ...args\n}: {\n project?: Project;\n noInstall?: boolean;\n installServerFiles?: boolean;\n}) {\n const projectDir = state.projectDir;\n\n // Exit early if already installed\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n return false;\n }\n if (settings.reactEmail) {\n return false;\n }\n\n // Ensure emails directory exists\n fs.ensureDirSync(path.join(projectDir, \"src/emails\"));\n addPackageDependency({\n dependencies: [\"@react-email/components\", \"@react-email/render\"],\n devMode: false,\n projectDir,\n });\n addPackageDependency({\n dependencies: [\"react-email\", \"@react-email/preview-server\"],\n devMode: true,\n projectDir,\n });\n\n // add a script to package.json\n const pkgJson = fs.readJSONSync(path.join(projectDir, \"package.json\")) as PackageJson;\n if (!pkgJson.scripts) {\n pkgJson.scripts = {};\n }\n pkgJson.scripts[\"email:preview\"] = \"email dev --port 3010 --dir=src/emails\";\n fs.writeJSONSync(path.join(projectDir, \"package.json\"), pkgJson, {\n spaces: 2,\n });\n\n const project = args.project ?? getNewProject(projectDir);\n\n if (args.installServerFiles) {\n const emailProvider = state.emailProvider;\n if (emailProvider === \"plunk\") {\n await installPlunk({ project });\n } else if (emailProvider === \"resend\") {\n await installResend({ project });\n } else {\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailProviders/none/email.tsx\"),\n path.join(projectDir, \"src/server/auth/email.tsx\"),\n );\n }\n }\n\n // Copy base email template(s) into src/emails for preview and reuse\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailTemplates/generic.tsx\"),\n path.join(projectDir, \"src/emails/generic.tsx\"),\n );\n if (args.installServerFiles) {\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailTemplates/auth-code.tsx\"),\n path.join(projectDir, \"src/emails/auth-code.tsx\"),\n );\n }\n\n if (!args.project) {\n await formatAndSaveSourceFiles(project);\n }\n\n // Mark as installed\n setSettings({\n ...settings,\n reactEmail: true,\n reactEmailServer: Boolean(args.installServerFiles) || settings.reactEmailServer,\n });\n\n // Install dependencies unless explicitly skipped\n if (!args.noInstall) {\n await installDependencies({ projectDir });\n }\n return true;\n}\n\nexport async function installPlunk({ project }: { project?: Project }) {\n const projectDir = state.projectDir;\n addPackageDependency({\n dependencies: [\"@plunk/node\"],\n devMode: false,\n projectDir,\n });\n\n let apiKey: string;\n if (typeof state.apiKey === \"string\") {\n apiKey = state.apiKey;\n } else if (isNonInteractiveMode()) {\n apiKey = \"\";\n } else {\n apiKey = abortIfCancel(\n await p.text({\n message: `Enter your Plunk API key\\n${chalk.dim(\n \"Enter your Secret API Key from https://app.useplunk.com/settings/api\",\n )}`,\n }),\n );\n }\n\n if (!apiKey) {\n logger.warn(\"You will need to add your Plunk API key to the .env file manually for your app to run.\");\n }\n\n console.log(\"\");\n\n await addToEnv({\n projectDir,\n project,\n envs: [\n {\n name: \"PLUNK_API_KEY\",\n zodValue: `z.string().startsWith(\"sk_\")`,\n type: \"server\",\n defaultValue: apiKey,\n },\n ],\n });\n\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailProviders/plunk/service.ts\"),\n path.join(projectDir, \"src/server/services/plunk.ts\"),\n );\n\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailProviders/plunk/email.tsx\"),\n path.join(projectDir, \"src/server/auth/email.tsx\"),\n );\n}\n\nexport async function installResend({ project }: { project?: Project }) {\n const projectDir = state.projectDir;\n addPackageDependency({\n dependencies: [\"resend\"],\n devMode: false,\n projectDir,\n });\n\n let apiKey: string;\n if (typeof state.apiKey === \"string\") {\n apiKey = state.apiKey;\n } else if (isNonInteractiveMode()) {\n apiKey = \"\";\n } else {\n apiKey = abortIfCancel(\n await p.text({\n message: `Enter your Resend API key\\n${chalk.dim(\n `Only \"Sending Access\" permission required: https://resend.com/api-keys`,\n )}`,\n }),\n );\n }\n\n if (!apiKey) {\n logger.warn(\"You will need to add your Resend API key to the .env file manually for your app to run.\");\n }\n\n console.log(\"\");\n\n await addToEnv({\n projectDir,\n project,\n envs: [\n {\n name: \"RESEND_API_KEY\",\n zodValue: `z.string().startsWith(\"re_\")`,\n type: \"server\",\n defaultValue: apiKey,\n },\n ],\n });\n\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailProviders/resend/service.ts\"),\n path.join(projectDir, \"src/server/services/resend.ts\"),\n );\n\n await fs.copy(\n path.join(PKG_ROOT, \"template/extras/emailProviders/resend/email.tsx\"),\n path.join(projectDir, \"src/server/auth/email.tsx\"),\n );\n}\n","import { Command, Option } from \"commander\";\nimport * as p from \"~/cli/prompts.js\";\n\nimport { installReactEmail } from \"~/installers/react-email.js\";\n\nexport const runAddReactEmailCommand = async ({\n noInstall,\n installServerFiles,\n}: {\n noInstall?: boolean;\n installServerFiles?: boolean;\n} = {}) => {\n const spinner = p.spinner();\n spinner.start(\"Adding React Email\");\n await installReactEmail({ noInstall, installServerFiles });\n spinner.stop(\"React Email added\");\n};\n\nexport const makeAddReactEmailCommand = () => {\n const addReactEmailCommand = new Command(\"react-email\")\n .description(\"Add React Email scaffolding to your project\")\n .addOption(new Option(\"--noInstall\", \"Do not run your package manager install command\").default(false))\n .option(\"--installServerFiles\", \"Also scaffold provider-specific server email files\", false)\n .action((args: { noInstall?: boolean; installServerFiles?: boolean }) => runAddReactEmailCommand(args));\n\n return addReactEmailCommand;\n};\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { type Project, SyntaxKind } from \"ts-morph\";\n\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { state } from \"~/state.js\";\nimport { addPackageDependency } from \"~/utils/addPackageDependency.js\";\nimport { getSettings, setSettings } from \"~/utils/parseSettings.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\n\nexport async function injectTanstackQuery(args?: { project?: Project }) {\n const projectDir = state.projectDir;\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n return false;\n }\n if (settings.tanstackQuery) {\n return false;\n }\n\n addPackageDependency({\n projectDir,\n dependencies: [\"@tanstack/react-query\"],\n devMode: false,\n });\n addPackageDependency({\n projectDir,\n dependencies: [\"@tanstack/react-query-devtools\"],\n devMode: true,\n });\n const extrasDir = path.join(PKG_ROOT, \"template\", \"extras\");\n\n if (state.appType === \"browser\") {\n fs.copySync(\n path.join(extrasDir, \"config\", \"get-query-client.ts\"),\n path.join(projectDir, \"src/config/get-query-client.ts\"),\n );\n fs.copySync(\n path.join(extrasDir, \"config\", \"query-provider.tsx\"),\n path.join(projectDir, \"src/config/query-provider.tsx\"),\n );\n } else if (state.appType === \"webviewer\") {\n fs.copySync(\n path.join(extrasDir, \"config\", \"query-provider-vite.tsx\"),\n path.join(projectDir, \"src/config/query-provider.tsx\"),\n );\n }\n\n // inject query provider into the root layout\n const project = args?.project ?? getNewProject(projectDir);\n const rootLayout = project.addSourceFileAtPath(\n path.join(projectDir, state.appType === \"browser\" ? \"src/app/layout.tsx\" : \"src/main.tsx\"),\n );\n rootLayout.addImportDeclaration({\n moduleSpecifier: \"@/config/query-provider\",\n defaultImport: \"QueryProvider\",\n });\n\n if (state.appType === \"browser\") {\n const exportDefault = rootLayout.getFunction((dec) => dec.isDefaultExport());\n const bodyElement = exportDefault\n ?.getBody()\n ?.getFirstDescendantByKind(SyntaxKind.ReturnStatement)\n ?.getDescendantsOfKind(SyntaxKind.JsxOpeningElement)\n .find((openingElement) => openingElement.getTagNameNode().getText() === \"body\")\n ?.getParentIfKind(SyntaxKind.JsxElement);\n\n const childrenText = bodyElement\n ?.getJsxChildren()\n .map((child) => child.getText())\n .filter(Boolean)\n .join(\"\\n\");\n\n bodyElement?.getChildSyntaxList()?.replaceWithText(\n `<QueryProvider>\n ${childrenText}\n </QueryProvider>`,\n );\n } else if (state.appType === \"webviewer\") {\n const mantineProvider = rootLayout\n .getDescendantsOfKind(SyntaxKind.JsxElement)\n .find((element) => element.getOpeningElement().getTagNameNode().getText() === \"MantineProvider\");\n\n mantineProvider?.replaceWithText(\n `<QueryProvider>\n ${mantineProvider.getText()}\n </QueryProvider>`,\n );\n }\n\n if (!args?.project) {\n await formatAndSaveSourceFiles(project);\n }\n\n setSettings({ ...settings, tanstackQuery: true });\n return true;\n}\n","import { Command } from \"commander\";\nimport * as p from \"~/cli/prompts.js\";\n\nimport { injectTanstackQuery } from \"~/generators/tanstack-query.js\";\n\nexport const runAddTanstackQueryCommand = async () => {\n const spinner = p.spinner();\n spinner.start(\"Adding Tanstack Query\");\n await injectTanstackQuery();\n spinner.stop(\"Tanstack Query added\");\n};\n\nexport const makeAddTanstackQueryCommand = () => {\n const addTanstackQueryCommand = new Command(\"tanstack-query\")\n .description(\"Add Tanstack Query to your project\")\n .action(runAddTanstackQueryCommand);\n\n return addTanstackQueryCommand;\n};\n","import { Command } from \"commander\";\nimport { select } from \"~/cli/prompts.js\";\nimport { debugOption, nonInteractiveOption } from \"~/globalOptions.js\";\nimport { installFmAddonExplicitly } from \"~/installers/install-fm-addon.js\";\nimport { initProgramState, isNonInteractiveMode } from \"~/state.js\";\nimport { getSettings } from \"~/utils/parseSettings.js\";\nimport { abortIfCancel, ensureProofKitProject } from \"../utils.js\";\n\ntype AddonTarget = \"webviewer\" | \"auth\";\n\nasync function resolveAddonTarget(name?: string): Promise<AddonTarget> {\n if (name === \"webviewer\" || name === \"auth\") {\n return name;\n }\n\n if (isNonInteractiveMode()) {\n throw new Error(\"Addon target is required in non-interactive mode. Use `proofkit add addon webviewer`.\");\n }\n\n return abortIfCancel(\n await select({\n message: \"Which add-on do you want to install locally?\",\n options: [\n { value: \"webviewer\", label: \"WebViewer\", hint: \"ProofKit WebViewer add-on\" },\n { value: \"auth\", label: \"Auth\", hint: \"ProofKit Auth add-on\" },\n ],\n }),\n ) as AddonTarget;\n}\n\nexport async function runAddAddonAction(targetName?: string) {\n ensureProofKitProject({ commandName: \"add addon\" });\n const settings = getSettings();\n const target = await resolveAddonTarget(targetName);\n\n if (target === \"webviewer\" && settings.appType !== \"webviewer\") {\n throw new Error(\"The WebViewer add-on can only be added from a WebViewer ProofKit project.\");\n }\n\n if (target === \"auth\" && settings.appType !== \"browser\") {\n throw new Error(\"The auth add-on can only be added from a browser ProofKit project.\");\n }\n\n await installFmAddonExplicitly({ addonName: target === \"webviewer\" ? \"wv\" : \"auth\" });\n}\n\nexport const makeAddAddonCommand = () => {\n const addAddonCommand = new Command(\"addon\")\n .description(\"Install or update local FileMaker add-on files\")\n .argument(\"[target]\", \"Add-on to install locally (webviewer or auth)\")\n .addOption(nonInteractiveOption)\n .addOption(debugOption)\n .action(async (target) => {\n await runAddAddonAction(target);\n });\n\n addAddonCommand.hook(\"preAction\", (thisCommand) => {\n initProgramState(thisCommand.opts());\n });\n\n return addAddonCommand;\n};\n","import { type SourceFile, SyntaxKind } from \"ts-morph\";\n\nimport { ensureReturnStatementIsWrappedInFragment } from \"~/utils/ts-morph.js\";\n\nexport function addToHeaderSlot(slotSourceFile: SourceFile, importFrom: string) {\n slotSourceFile.addImportDeclaration({\n defaultImport: \"UserMenu\",\n moduleSpecifier: importFrom,\n });\n\n // ensure Group from @mantine/core is imported\n const mantineCoreImport = slotSourceFile.getImportDeclaration(\n (dec) => dec.getModuleSpecifierValue() === \"@mantine/core\",\n );\n if (mantineCoreImport) {\n const groupImport = mantineCoreImport.getNamedImports().find((imp) => imp.getName() === \"Group\");\n\n if (!groupImport) {\n mantineCoreImport.addNamedImport({ name: \"Group\" });\n }\n } else {\n slotSourceFile.addImportDeclaration({\n namedImports: [{ name: \"Group\" }],\n moduleSpecifier: \"@mantine/core\",\n });\n }\n\n const returnStatement = ensureReturnStatementIsWrappedInFragment(\n slotSourceFile\n .getFunction((dec) => dec.isDefaultExport())\n ?.getBody()\n ?.getFirstDescendantByKind(SyntaxKind.ReturnStatement),\n );\n\n const existingElements = returnStatement\n ?.getFirstDescendantByKind(SyntaxKind.JsxOpeningFragment)\n ?.getParentIfKind(SyntaxKind.JsxFragment)\n ?.getFirstDescendantByKind(SyntaxKind.SyntaxList)\n ?.getText();\n\n if (!existingElements) {\n console.log(`Failed to inject into header slot at ${slotSourceFile.getFilePath()}`);\n return;\n }\n\n returnStatement?.replaceWithText(`return (<><Group>${existingElements}<UserMenu /></Group></>)`);\n returnStatement?.formatText();\n slotSourceFile.saveSync();\n}\n","import path from \"node:path\";\nimport chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport { type SourceFile, SyntaxKind } from \"ts-morph\";\n\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { addPackageDependency } from \"~/utils/addPackageDependency.js\";\nimport { addToEnv } from \"~/utils/addToEnvs.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\nimport { addToHeaderSlot } from \"./auth-shared.js\";\n\nexport const clerkInstaller = async ({ projectDir }: { projectDir: string }) => {\n addPackageDependency({\n projectDir,\n dependencies: [\"@clerk/nextjs\", \"@clerk/themes\"],\n devMode: false,\n });\n\n // add clerk middleware\n // check if middleware already exists, if not add it\n const extrasDir = path.join(PKG_ROOT, \"template/extras\");\n\n const middlewareDest = path.join(projectDir, \"src/middleware.ts\");\n if (fs.existsSync(middlewareDest)) {\n // throw new Error(\"Middleware already exists\");\n console.log(\n chalk.yellow(\n \"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\",\n ),\n );\n } else {\n const middlewareSrc = path.join(extrasDir, \"src/middleware/clerk.ts\");\n fs.copySync(middlewareSrc, middlewareDest);\n }\n\n // copy auth pages\n fs.copySync(path.join(extrasDir, \"src/app/clerk-auth\"), path.join(projectDir, \"src/app/auth\"));\n\n // copy auth components\n fs.copySync(path.join(extrasDir, \"src/components/clerk-auth\"), path.join(projectDir, \"src/components/clerk-auth\"));\n\n // add ClerkProvider to app layout\n const layoutFile = path.join(projectDir, \"src/app/layout.tsx\");\n const project = getNewProject(projectDir);\n addClerkProvider(project.addSourceFileAtPath(layoutFile));\n\n // inject signin/signout components to header slots\n addToHeaderSlot(\n project.addSourceFileAtPath(path.join(projectDir, \"src/components/AppShell/slot-header-right.tsx\")),\n \"@/components/clerk-auth/user-menu\",\n );\n addToHeaderSlot(\n project.addSourceFileAtPath(path.join(projectDir, \"src/components/AppShell/slot-header-mobile-content.tsx\")),\n \"@/components/clerk-auth/user-menu-mobile\",\n );\n\n addToSafeActionClient(project.addSourceFileAtPathIfExists(path.join(projectDir, \"src/server/safe-action.ts\")));\n\n // add envs to .env and .env.schema\n await addToEnv({\n projectDir,\n project,\n envs: [\n {\n name: \"NEXT_PUBLIC_CLERK_SIGN_IN_URL\",\n zodValue: \"z.string()\",\n defaultValue: \"/auth/signin\",\n type: \"client\",\n },\n {\n name: \"NEXT_PUBLIC_CLERK_SIGN_UP_URL\",\n zodValue: \"z.string()\",\n defaultValue: \"/auth/signup\",\n type: \"client\",\n },\n {\n name: \"CLERK_SECRET_KEY\",\n zodValue: `z.string().startsWith('sk_').min(1, {\n message:\n \"No Clerk Secret Key found. Did you create your Clerk app and copy the environment variables to you .env file?\",\n })`,\n type: \"server\",\n },\n {\n name: \"NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\",\n zodValue: `z.string().startsWith('pk_').min(1, {\n message:\n \"No Clerk Public Key found. Did you create your Clerk app and copy the environment variables to you .env file?\",\n })`,\n type: \"client\",\n },\n ],\n envFileDescription:\n \"Hosted auth with Clerk. Set up a new app at https://dashboard.clerk.com/apps/new to get these values.\",\n });\n\n await formatAndSaveSourceFiles(project);\n};\n\nexport function addClerkProvider(sourceFile: SourceFile) {\n sourceFile.addImportDeclaration({\n namedImports: [{ name: \"ClerkAuthProvider\" }],\n moduleSpecifier: \"@/components/clerk-auth/clerk-provider\",\n });\n\n // Step 2: Wrap default exported function's return statement with ClerkProvider\n const exportDefault = sourceFile.getFunction((dec) => dec.isDefaultExport());\n\n // find the mantine provider in this export\n const mantineProvider = exportDefault\n ?.getBody()\n ?.getFirstDescendantByKind(SyntaxKind.ReturnStatement)\n ?.getDescendantsOfKind(SyntaxKind.JsxOpeningElement)\n .find((openingElement) => openingElement.getTagNameNode().getText() === \"MantineProvider\")\n ?.getParentIfKind(SyntaxKind.JsxElement);\n\n const childrenText = mantineProvider\n ?.getJsxChildren()\n .map((child) => child.getText())\n .filter(Boolean)\n .join(\"\\n\");\n\n mantineProvider?.getChildSyntaxList()?.replaceWithText(\n `<ClerkAuthProvider>\n ${childrenText}\n </ClerkAuthProvider>`,\n );\n}\n\nfunction addToSafeActionClient(sourceFile?: SourceFile) {\n if (!sourceFile) {\n console.log(chalk.yellow(\"Failed to inject into safe-action-client. Did you move the safe-action.ts file?\"));\n return;\n }\n\n sourceFile.addImportDeclaration({\n namedImports: [{ name: \"auth\", alias: \"getAuth\" }],\n moduleSpecifier: \"@clerk/nextjs/server\",\n });\n\n // add to end of file\n sourceFile.addStatements((writer) =>\n writer.writeLine(`export const authedActionClient = actionClient.use(async ({ next, ctx }) => {\n const auth = getAuth();\n if (!auth.userId) {\n throw new Error(\"Unauthorized\");\n }\n return next({ ctx: { ...ctx, auth } });\n});\n\n`),\n );\n}\n","import path from \"node:path\";\nimport type { OttoAPIKey } from \"@proofkit/fmdapi\";\nimport chalk from \"chalk\";\nimport dotenv from \"dotenv\";\nimport fs from \"fs-extra\";\nimport ora, { type Ora } from \"ora\";\nimport { type SourceFile, SyntaxKind } from \"ts-morph\";\nimport { getLayouts } from \"~/cli/fmdapi.js\";\nimport * as p from \"~/cli/prompts.js\";\nimport { abortIfCancel, UserAbortedError } from \"~/cli/utils.js\";\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { addConfig, runCodegenCommand } from \"~/generators/fmdapi.js\";\nimport { injectTanstackQuery } from \"~/generators/tanstack-query.js\";\nimport { state } from \"~/state.js\";\nimport { addPackageDependency } from \"~/utils/addPackageDependency.js\";\nimport { getSettings } from \"~/utils/parseSettings.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\nimport { addToHeaderSlot } from \"./auth-shared.js\";\nimport { installFmAddon } from \"./install-fm-addon.js\";\nimport { installReactEmail } from \"./react-email.js\";\n\nexport const proofkitAuthInstaller = async () => {\n const spinner = ora(\"Installing files for auth...\").start();\n\n const projectDir = state.projectDir;\n addPackageDependency({\n projectDir,\n dependencies: [\"@node-rs/argon2\", \"@oslojs/binary\", \"@oslojs/crypto\", \"@oslojs/encoding\", \"js-cookie\"],\n devMode: false,\n });\n\n addPackageDependency({\n projectDir,\n dependencies: [\"@types/js-cookie\"],\n devMode: true,\n });\n\n // copy all files from template/extras/fmaddon-auth to projectDir/src\n await fs.copy(path.join(PKG_ROOT, \"template/extras/fmaddon-auth\"), path.join(projectDir, \"src\"));\n\n const project = getNewProject(projectDir);\n\n // ensure tanstack query is installed\n await injectTanstackQuery({ project });\n\n // inject signin/signout components to header slots\n addToHeaderSlot(\n project.addSourceFileAtPath(path.join(projectDir, \"src/components/AppShell/slot-header-right.tsx\")),\n \"@/components/auth/user-menu\",\n );\n // addToHeaderSlot(\n // project.addSourceFileAtPath(\n // path.join(\n // projectDir,\n // \"src/components/AppShell/slot-header-mobile-content.tsx\"\n // )\n // ),\n // \"@/components/clerk-auth/user-menu-mobile\"\n // );\n\n addToSafeActionClient(project.addSourceFileAtPathIfExists(path.join(projectDir, \"src/server/safe-action.ts\")));\n\n await addConfig({\n config: {\n type: \"fmdapi\",\n envNames: undefined,\n clientSuffix: \"Layout\",\n layouts: [\n {\n layoutName: \"proofkit_auth_sessions\",\n schemaName: \"sessions\",\n strictNumbers: true,\n },\n {\n layoutName: \"proofkit_auth_users\",\n schemaName: \"users\",\n strictNumbers: true,\n },\n {\n layoutName: \"proofkit_auth_email_verification\",\n schemaName: \"emailVerification\",\n strictNumbers: true,\n },\n {\n layoutName: \"proofkit_auth_password_reset\",\n schemaName: \"passwordReset\",\n strictNumbers: true,\n },\n ],\n clearOldFiles: true,\n validator: false,\n path: \"./src/server/auth/db\",\n },\n projectDir,\n runCodegen: false,\n });\n\n // install email files based on the email provider in state\n await installReactEmail({ project, installServerFiles: true });\n\n protectMainLayout(project.addSourceFileAtPath(path.join(projectDir, \"src/app/(main)/layout.tsx\")));\n\n await formatAndSaveSourceFiles(project);\n\n let hasProofKitLayouts = false;\n while (!hasProofKitLayouts) {\n hasProofKitLayouts = await checkForProofKitLayouts(projectDir, spinner);\n\n if (hasProofKitLayouts) {\n spinner.text = \"Successfully detected all required layouts in your FileMaker file.\";\n } else {\n const shouldContinue = abortIfCancel<boolean>(\n await p.confirm({\n message: \"I have followed the above instructions, continue installing\",\n initialValue: true,\n }),\n );\n\n if (!shouldContinue) {\n throw new UserAbortedError();\n }\n }\n }\n await runCodegenCommand();\n\n spinner.succeed(\"Auth installed successfully\");\n};\n\nfunction addToSafeActionClient(sourceFile?: SourceFile) {\n if (!sourceFile) {\n console.log(chalk.yellow(\"Failed to inject into safe-action-client. Did you move the safe-action.ts file?\"));\n return;\n }\n\n sourceFile.addImportDeclaration({\n namedImports: [{ name: \"getCurrentSession\" }],\n moduleSpecifier: \"./auth/utils/session\",\n });\n\n // add to end of file\n sourceFile.addStatements((writer) =>\n writer.writeLine(`export const authedActionClient = actionClient.use(async ({ next, ctx }) => {\n const { session, user } = await getCurrentSession();\n if (session === null) {\n throw new Error(\"Unauthorized\");\n }\n\n return next({ ctx: { ...ctx, session, user } });\n});\n`),\n );\n}\n\nfunction protectMainLayout(sourceFile: SourceFile) {\n sourceFile.addImportDeclaration({\n defaultImport: \"Protect\",\n moduleSpecifier: \"@/components/auth/protect\",\n });\n\n // inject query provider into the root layout\n\n const exportDefault = sourceFile.getFunction((dec) => dec.isDefaultExport());\n const bodyElement = exportDefault\n ?.getBody()\n ?.getFirstDescendantByKind(SyntaxKind.ReturnStatement)\n ?.getFirstDescendantByKind(SyntaxKind.JsxElement);\n\n bodyElement?.replaceWithText(\n `<Protect>\n ${bodyElement?.getText()}\n </Protect>`,\n );\n}\n\nasync function checkForProofKitLayouts(projectDir: string, spinner: Ora): Promise<boolean> {\n const settings = getSettings();\n\n const dataSource = settings.dataSources.filter((s) => s.type === \"fm\").find((s) => s.name === \"filemaker\");\n\n if (!dataSource) {\n return false;\n }\n if (settings.envFile) {\n dotenv.config({\n path: path.join(projectDir, settings.envFile),\n });\n }\n const dataApiKey = process.env[dataSource.envNames.apiKey];\n const fmFile = process.env[dataSource.envNames.database];\n const server = process.env[dataSource.envNames.server];\n\n if (!(dataApiKey && fmFile && server)) {\n return false;\n }\n\n const existingLayouts = await getLayouts({\n dataApiKey: dataApiKey as OttoAPIKey,\n fmFile,\n server,\n });\n const proofkitAuthLayouts = [\n \"proofkit_auth_sessions\",\n \"proofkit_auth_users\",\n \"proofkit_auth_email_verification\",\n \"proofkit_auth_password_reset\",\n ];\n\n const allProofkitAuthLayoutsExist = proofkitAuthLayouts.every((layout) => existingLayouts.some((l) => l === layout));\n\n if (allProofkitAuthLayoutsExist) {\n return true;\n }\n\n spinner.warn(\"Required layouts not found\");\n await installFmAddon({ addonName: \"auth\" });\n\n return false;\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { glob } from \"glob\";\n\nimport { installDependencies } from \"~/helpers/installDependencies.js\";\nimport { betterAuthInstaller } from \"~/installers/better-auth.js\";\nimport { clerkInstaller } from \"~/installers/clerk.js\";\nimport { proofkitAuthInstaller } from \"~/installers/proofkit-auth.js\";\nimport { state } from \"~/state.js\";\nimport { getSettings, mergeSettings } from \"~/utils/parseSettings.js\";\n\nexport async function addAuth({\n options,\n noInstall = false,\n projectDir = process.cwd(),\n}: {\n options:\n | { type: \"clerk\" }\n | {\n type: \"fmaddon\";\n emailProvider?: \"plunk\" | \"resend\";\n apiKey?: string;\n }\n | { type: \"better-auth\" };\n projectDir?: string;\n noInstall?: boolean;\n}) {\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n throw new Error(\"Shadcn projects should add auth using the template registry\");\n }\n if (settings.auth.type !== \"none\") {\n throw new Error(\"Auth already exists\");\n }\n if (!settings.dataSources.some((o) => o.type === \"fm\") && options.type === \"fmaddon\") {\n throw new Error(\"A FileMaker data source is required to use the FM Add-on Auth\");\n }\n if (!settings.dataSources.some((o) => o.type === \"fm\") && options.type === \"better-auth\") {\n throw new Error(\"A FileMaker data source is required to use the Better-Auth\");\n }\n\n if (options.type === \"clerk\") {\n await addClerkAuth({ projectDir });\n } else if (options.type === \"fmaddon\") {\n await addFmaddonAuth();\n }\n\n // Replace actionClient with authedActionClient in all action files\n await replaceActionClientWithAuthed();\n\n if (!noInstall) {\n await installDependencies({ projectDir });\n }\n}\n\nasync function addClerkAuth({ projectDir = process.cwd() }: { projectDir?: string }) {\n await clerkInstaller({ projectDir });\n mergeSettings({ auth: { type: \"clerk\" } });\n}\n\nasync function addFmaddonAuth() {\n await proofkitAuthInstaller();\n mergeSettings({ auth: { type: \"fmaddon\" } });\n}\n\nasync function replaceActionClientWithAuthed() {\n const projectDir = state.projectDir;\n const actionFiles = await glob(\"src/app/(main)/**/actions.ts\", {\n cwd: projectDir,\n });\n\n for (const file of actionFiles) {\n const fullPath = path.join(projectDir, file);\n const content = readFileSync(fullPath, \"utf-8\");\n const updatedContent = content.replace(/actionClient/g, \"authedActionClient\");\n writeFileSync(fullPath, updatedContent);\n }\n}\n\nasync function _addBetterAuth() {\n await betterAuthInstaller();\n mergeSettings({ auth: { type: \"better-auth\" } });\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { z } from \"zod/v4\";\nimport { cancel, select } from \"~/cli/prompts.js\";\n\nimport { addAuth } from \"~/generators/auth.js\";\nimport { debugOption, nonInteractiveOption } from \"~/globalOptions.js\";\nimport { initProgramState, isNonInteractiveMode, state } from \"~/state.js\";\nimport { getSettings } from \"~/utils/parseSettings.js\";\nimport { abortIfCancel } from \"../utils.js\";\n\nexport async function runAddAuthAction() {\n const settings = getSettings();\n if (settings.appType !== \"browser\") {\n return cancel(\"Auth is not supported for your app type.\");\n }\n if (settings.ui === \"shadcn\") {\n return cancel(\"Adding auth is not yet supported for shadcn-based projects.\");\n }\n\n const authType =\n state.authType ??\n abortIfCancel(\n await select({\n message: \"What auth provider do you want to use?\",\n options: [\n {\n value: \"fmaddon\",\n label: \"FM Add-on Auth\",\n hint: \"Self-hosted auth with email/password\",\n },\n {\n value: \"clerk\",\n label: \"Clerk\",\n hint: \"Hosted auth service with many providers\",\n },\n ],\n }),\n );\n\n const type = z.enum([\"clerk\", \"fmaddon\"]).parse(authType);\n state.authType = type;\n\n if (type === \"fmaddon\") {\n const emailProviderAnswer =\n state.emailProvider ??\n (isNonInteractiveMode() ? \"none\" : undefined) ??\n abortIfCancel(\n await select({\n message: `What email provider do you want to use?\\n${chalk.dim(\n \"Used to send email verification codes. If you skip this, the codes will be displayed here in your terminal.\",\n )}`,\n options: [\n {\n label: \"Resend\",\n value: \"resend\",\n hint: \"Great dev experience\",\n },\n {\n label: \"Plunk\",\n value: \"plunk\",\n hint: \"Cheapest for <20k emails/mo, self-hostable\",\n },\n { label: \"Other / I'll do it myself later\", value: \"none\" },\n ],\n }),\n );\n\n const emailProvider = z.enum([\"plunk\", \"resend\", \"none\"]).parse(emailProviderAnswer);\n\n state.emailProvider = emailProvider;\n\n await addAuth({\n options: {\n type,\n emailProvider: emailProvider === \"none\" ? undefined : emailProvider,\n },\n });\n } else {\n await addAuth({ options: { type } });\n }\n}\n\nexport const makeAddAuthCommand = () => {\n const addAuthCommand = new Command(\"auth\")\n .description(\"Add authentication to your project\")\n .option(\"--authType <authType>\", \"Type of auth provider to use\")\n .option(\"--emailProvider <emailProvider>\", \"Email provider to use (only for FM Add-on Auth)\")\n .option(\"--apiKey <apiKey>\", \"API key to use for the email provider (only for FM Add-on Auth)\")\n .addOption(nonInteractiveOption)\n .addOption(debugOption)\n\n .action(async () => {\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n throw new Error(\"Shadcn projects should add auth using the template registry\");\n }\n if (settings.auth.type !== \"none\") {\n throw new Error(\"Auth already exists\");\n }\n await runAddAuthAction();\n });\n\n addAuthCommand.hook(\"preAction\", (thisCommand) => {\n initProgramState(thisCommand.opts());\n });\n\n return addAuthCommand;\n};\n","import axios, { AxiosError } from \"axios\";\nimport chalk from \"chalk\";\nimport open from \"open\";\nimport randomstring from \"randomstring\";\nimport { z } from \"zod/v4\";\n\nimport * as clack from \"~/cli/prompts.js\";\nimport { abortIfCancel } from \"./utils.js\";\n\ninterface WizardResponse {\n token: string;\n}\nexport async function getOttoFMSToken({ url }: { url: URL }): Promise<{ token: string }> {\n // generate a random string\n const hash = randomstring.generate({ length: 18, charset: \"alphanumeric\" });\n\n const loginUrl = new URL(`/otto/wizard/${hash}`, url.origin);\n\n const urlToOpen = loginUrl.toString();\n clack.log.info(\n `${chalk.bold(\n `If the browser window didn't open automatically, please open the following link to login into your OttoFMS server:`,\n )}\\n\\n${chalk.cyan(urlToOpen)}`,\n );\n\n open(loginUrl.toString()).catch(() => {\n // Ignore errors from open() - the user can manually open the URL\n });\n\n const loginSpinner = clack.spinner();\n\n loginSpinner.start(\"Waiting for you to log in using the link above\");\n\n const data = await new Promise<WizardResponse>((resolve) => {\n const pollingInterval = setInterval(() => {\n axios\n .get<{ response: WizardResponse }>(`${url.origin}/otto/api/cli/checkHash/${hash}`, {\n headers: {\n \"Accept-Encoding\": \"deflate\",\n },\n })\n .then((result) => {\n resolve(result.data.response);\n clearTimeout(timeout);\n clearInterval(pollingInterval);\n axios\n .delete(`${url.origin}/otto/api/cli/checkHash/${hash}`, {\n headers: {\n \"Accept-Encoding\": \"deflate\",\n },\n })\n .catch(() => {\n // Ignore cleanup errors\n });\n })\n .catch(() => {\n // noop - just try again\n });\n }, 500);\n\n const timeout = setTimeout(() => {\n clearInterval(pollingInterval);\n loginSpinner.stop(\"Login timed out. No worries - it happens to the best of us.\");\n }, 180_000); // 3 minutes\n });\n // clack.log.info(`Token: ${JSON.stringify(data)}`);\n\n loginSpinner.stop(\"Login complete.\");\n\n return data;\n}\n\ninterface ListFilesResponse {\n response: {\n databases: {\n clients: number;\n decryptHint: string;\n enabledExtPrivileges: string[];\n filename: string;\n folder: string;\n hasSavedDecryptKey: boolean;\n id: string;\n isEncrypted: boolean;\n size: number;\n status: string;\n }[];\n };\n}\n\nexport async function listFiles({ url, token }: { url: URL; token: string }) {\n const response = await axios.get<ListFilesResponse>(`${url.origin}/otto/fmi/admin/api/v2/databases`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data.response.databases;\n}\n\ninterface ListAPIKeysResponse {\n response: {\n \"api-keys\": {\n id: number;\n key: string;\n token: string;\n user: string;\n database: string;\n label: string;\n created_at: string;\n updated_at: string;\n }[];\n };\n}\n\nexport async function listAPIKeys({ url, token }: { url: URL; token: string }) {\n const response = await axios.get<ListAPIKeysResponse>(`${url.origin}/otto/api/api-key`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data.response[\"api-keys\"];\n}\n\ninterface CreateAPIKeyResponse {\n response: {\n key: string;\n token: string;\n };\n}\nexport async function createDataAPIKey({ url, filename }: { url: URL; filename: string }) {\n clack.log.info(\n `${chalk.cyan(\"Creating a Data API Key\")}\\nEnter FileMaker credentials for ${chalk.bold(filename)}.\\n${chalk.dim(\"The account must have the fmrest extended privilege enabled.\")}`,\n );\n\n while (true) {\n const username = abortIfCancel(\n await clack.text({\n message: `Enter the account name for ${chalk.bold(filename)}`,\n }),\n );\n\n const password = abortIfCancel(\n await clack.password({\n message: `Enter the password for ${chalk.bold(username)}`,\n }),\n );\n\n try {\n const response = await createDataAPIKeyWithCredentials({\n url,\n filename,\n username,\n password,\n });\n\n return response;\n } catch (error) {\n if (error instanceof AxiosError) {\n const respMsg =\n error.response?.data && \"messages\" in error.response.data\n ? (error.response.data as { messages?: { text?: string }[] }).messages?.[0]?.text\n : undefined;\n\n clack.log.error(\n `${chalk.red(\"Error creating Data API key:\")} ${respMsg ?? `Error code ${error.response?.status}`}\n${chalk.dim(\n error.response?.status === 400 &&\n `Common reasons this might happen:\n- The provided credentials are incorrect.\n- The account does not have the fmrest extended privilege enabled.\n\nYou may also want to try to create an API directly in the OttoFMS dashboard:\n${url.origin}/otto/app/api-keys`,\n)}\n `,\n );\n } else {\n clack.log.error(`${chalk.red(\"Error creating Data API key:\")} Unknown error`);\n }\n const tryAgain = abortIfCancel(\n await clack.confirm({\n message: \"Do you want to try and enter credentials again?\",\n }),\n );\n if (!tryAgain) {\n throw new Error(\"User cancelled\");\n }\n }\n }\n}\n\nexport async function createDataAPIKeyWithCredentials({\n url,\n filename,\n username,\n password,\n}: {\n url: URL;\n filename: string;\n username: string;\n password: string;\n}) {\n const response = await axios.post<CreateAPIKeyResponse>(`${url.origin}/otto/api/api-key/create-only`, {\n database: filename,\n label: \"For FM Web App\",\n user: username,\n pass: password,\n });\n\n return { apiKey: response.data.response.key };\n}\n\nexport async function startDeployment({ payload, url, token }: { payload: unknown; url: URL; token: string }) {\n const responseSchema = z.object({\n response: z.object({\n started: z.boolean(),\n batchId: z.number(),\n subDeploymentIds: z.array(z.number()),\n }),\n messages: z.array(z.object({ code: z.number(), text: z.string() })),\n });\n\n const response = await axios\n .post(`${url.origin}/otto/api/deployment`, payload, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n .catch((error) => {\n console.error(error.response.data);\n throw error;\n });\n\n return responseSchema.parse(response.data);\n}\n\nexport async function getDeploymentStatus({\n url,\n token,\n deploymentId,\n}: {\n url: URL;\n token: string;\n deploymentId: number;\n}) {\n const schema = z.object({\n response: z.object({\n id: z.number(),\n status: z.enum([\"queued\", \"running\", \"scheduled\", \"complete\", \"aborted\", \"unknown\"]),\n running: z.coerce.boolean(),\n created_at: z.string(),\n started_at: z.string(),\n updated_at: z.string(),\n }),\n messages: z.array(z.object({ code: z.number(), text: z.string() })),\n });\n\n const response = await axios.get(`${url.origin}/otto/api/deployment/${deploymentId}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return schema.parse(response.data);\n}\n","const defaultBaseUrl = process.env.FM_MCP_BASE_URL ?? \"http://127.0.0.1:1365\";\nconst REQUEST_TIMEOUT_MS = 3000;\n\nexport interface FmMcpStatus {\n baseUrl: string;\n healthy: boolean;\n connectedFiles: string[];\n}\n\nasync function fetchWithTimeout(url: string): Promise<Response | null> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n try {\n return await fetch(url, { signal: controller.signal });\n } catch {\n return null;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n\nasync function readJson(url: string): Promise<unknown | null> {\n const response = await fetchWithTimeout(url);\n\n if (!response?.ok) {\n return null;\n }\n\n return await response.json().catch(() => null);\n}\n\nexport async function getFmMcpStatus(baseUrl = defaultBaseUrl): Promise<FmMcpStatus> {\n const healthResponse = await fetchWithTimeout(`${baseUrl}/health`);\n\n if (!healthResponse?.ok) {\n return {\n baseUrl,\n healthy: false,\n connectedFiles: [],\n };\n }\n\n const connectedFiles = await readJson(`${baseUrl}/connectedFiles`);\n\n return {\n baseUrl,\n healthy: true,\n connectedFiles: Array.isArray(connectedFiles) ? connectedFiles : [],\n };\n}\n\nexport async function detectConnectedFmFile(baseUrl = defaultBaseUrl): Promise<string | undefined> {\n const status = await getFmMcpStatus(baseUrl);\n return status.connectedFiles[0];\n}\n","const noop = ()=>{\n// noop\n};\nfunction createInnerProxy(callback, path, cache) {\n return new Proxy(noop, {\n get (_obj, key) {\n if (typeof key !== 'string' || key === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n return createInnerProxy(callback, [\n ...path,\n key\n ]);\n },\n apply (_1, _2, args) {\n const lastOfPath = path[path.length - 1];\n let opts = {\n args,\n path\n };\n // special handling for e.g. `trpc.hello.call(this, 'there')` and `trpc.hello.apply(this, ['there'])\n if (lastOfPath === 'call') {\n opts = {\n args: args.length >= 2 ? [\n args[1]\n ] : [],\n path: path.slice(0, -1)\n };\n } else if (lastOfPath === 'apply') {\n opts = {\n args: args.length >= 2 ? args[1] : [],\n path: path.slice(0, -1)\n };\n }\n return callback(opts);\n }\n });\n}\n/**\n * Creates a proxy that calls the callback with the path and arguments\n *\n * @internal\n */ const createRecursiveProxy = (callback)=>createInnerProxy(callback, []);\n/**\n * Used in place of `new Proxy` where each handler will map 1 level deep to another value.\n *\n * @internal\n */ const createFlatProxy = (callback)=>{\n return new Proxy(noop, {\n get (_obj, name) {\n if (typeof name !== 'string' || name === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n return callback(name);\n }\n });\n};\n\nexport { createFlatProxy, createRecursiveProxy };\n","/** @internal */ const unsetMarker = Symbol('unsetMarker');\n/**\n * Ensures there are no duplicate keys when building a procedure.\n * @internal\n */ function mergeWithoutOverrides(obj1, ...objs) {\n const newObj = Object.assign(Object.create(null), obj1);\n for (const overrides of objs){\n for(const key in overrides){\n if (key in newObj && newObj[key] !== overrides[key]) {\n throw new Error(`Duplicate key ${key}`);\n }\n newObj[key] = overrides[key];\n }\n }\n return newObj;\n}\n/**\n * Check that value is object\n * @internal\n */ function isObject(value) {\n return !!value && !Array.isArray(value) && typeof value === 'object';\n}\nfunction isFunction(fn) {\n return typeof fn === 'function';\n}\n/**\n * Create an object without inheriting anything from `Object.prototype`\n * @internal\n */ function omitPrototype(obj) {\n return Object.assign(Object.create(null), obj);\n}\nconst asyncIteratorsSupported = typeof Symbol === 'function' && !!Symbol.asyncIterator;\nfunction isAsyncIterable(value) {\n return asyncIteratorsSupported && isObject(value) && Symbol.asyncIterator in value;\n}\n/**\n * Run an IIFE\n */ const run = (fn)=>fn();\n\nexport { isAsyncIterable, isFunction, isObject, mergeWithoutOverrides, omitPrototype, run, unsetMarker };\n","import { isObject } from '../utils.mjs';\n\nclass UnknownCauseError extends Error {\n}\nfunction getCauseFromUnknown(cause) {\n if (cause instanceof Error) {\n return cause;\n }\n const type = typeof cause;\n if (type === 'undefined' || type === 'function' || cause === null) {\n return undefined;\n }\n // Primitive types just get wrapped in an error\n if (type !== 'object') {\n return new Error(String(cause));\n }\n // If it's an object, we'll create a synthetic error\n if (isObject(cause)) {\n const err = new UnknownCauseError();\n for(const key in cause){\n err[key] = cause[key];\n }\n return err;\n }\n return undefined;\n}\nfunction getTRPCErrorFromUnknown(cause) {\n if (cause instanceof TRPCError) {\n return cause;\n }\n if (cause instanceof Error && cause.name === 'TRPCError') {\n // https://github.com/trpc/trpc/pull/4848\n return cause;\n }\n const trpcError = new TRPCError({\n code: 'INTERNAL_SERVER_ERROR',\n cause\n });\n // Inherit stack from error\n if (cause instanceof Error && cause.stack) {\n trpcError.stack = cause.stack;\n }\n return trpcError;\n}\nclass TRPCError extends Error {\n constructor(opts){\n const cause = getCauseFromUnknown(opts.cause);\n const message = opts.message ?? cause?.message ?? opts.code;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, {\n cause\n });\n this.code = opts.code;\n this.name = 'TRPCError';\n if (!this.cause) {\n // < ES2022 / < Node 16.9.0 compatability\n this.cause = cause;\n }\n }\n}\n\nexport { TRPCError, getCauseFromUnknown, getTRPCErrorFromUnknown };\n","import { isObject } from './utils.mjs';\n\n/**\n * @internal\n */ function getDataTransformer(transformer) {\n if ('input' in transformer) {\n return transformer;\n }\n return {\n input: transformer,\n output: transformer\n };\n}\n/**\n * @internal\n */ const defaultTransformer = {\n input: {\n serialize: (obj)=>obj,\n deserialize: (obj)=>obj\n },\n output: {\n serialize: (obj)=>obj,\n deserialize: (obj)=>obj\n }\n};\nfunction transformTRPCResponseItem(config, item) {\n if ('error' in item) {\n return {\n ...item,\n error: config.transformer.output.serialize(item.error)\n };\n }\n if ('data' in item.result) {\n return {\n ...item,\n result: {\n ...item.result,\n data: config.transformer.output.serialize(item.result.data)\n }\n };\n }\n return item;\n}\n/**\n * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers\n **/ function transformTRPCResponse(config, itemOrItems) {\n return Array.isArray(itemOrItems) ? itemOrItems.map((item)=>transformTRPCResponseItem(config, item)) : transformTRPCResponseItem(config, itemOrItems);\n}\n// FIXME:\n// - the generics here are probably unnecessary\n// - the RPC-spec could probably be simplified to combine HTTP + WS\n/** @internal */ function transformResultInner(response, transformer) {\n if ('error' in response) {\n const error = transformer.deserialize(response.error);\n return {\n ok: false,\n error: {\n ...response,\n error\n }\n };\n }\n const result = {\n ...response.result,\n ...(!response.result.type || response.result.type === 'data') && {\n type: 'data',\n data: transformer.deserialize(response.result.data)\n }\n };\n return {\n ok: true,\n result\n };\n}\nclass TransformResultError extends Error {\n constructor(){\n super('Unable to transform response from server');\n }\n}\n/**\n * Transforms and validates that the result is a valid TRPCResponse\n * @internal\n */ function transformResult(response, transformer) {\n let result;\n try {\n // Use the data transformers on the JSON-response\n result = transformResultInner(response, transformer);\n } catch (err) {\n throw new TransformResultError();\n }\n // check that output of the transformers is a valid TRPCResponse\n if (!result.ok && (!isObject(result.error.error) || typeof result.error.error['code'] !== 'number')) {\n throw new TransformResultError();\n }\n if (result.ok && !isObject(result.result)) {\n throw new TransformResultError();\n }\n return result;\n}\n\nexport { defaultTransformer, getDataTransformer, transformResult, transformTRPCResponse };\n","const defaultFormatter = ({ shape })=>{\n return shape;\n};\n\nexport { defaultFormatter };\n","import { TRPCError } from './error/TRPCError.mjs';\nimport { isObject } from './utils.mjs';\n\n/** @internal */ const middlewareMarker = 'middlewareMarker';\n/**\n * @internal\n */ function createMiddlewareFactory() {\n function createMiddlewareInner(middlewares) {\n return {\n _middlewares: middlewares,\n unstable_pipe (middlewareBuilderOrFn) {\n const pipedMiddleware = '_middlewares' in middlewareBuilderOrFn ? middlewareBuilderOrFn._middlewares : [\n middlewareBuilderOrFn\n ];\n return createMiddlewareInner([\n ...middlewares,\n ...pipedMiddleware\n ]);\n }\n };\n }\n function createMiddleware(fn) {\n return createMiddlewareInner([\n fn\n ]);\n }\n return createMiddleware;\n}\n/**\n * Create a standalone middleware\n * @link https://trpc.io/docs/v11/server/middlewares#experimental-standalone-middlewares\n * @deprecated use `.unstable_concat()` instead\n */ const experimental_standaloneMiddleware = ()=>({\n create: createMiddlewareFactory()\n });\n/**\n * @internal\n * Please note, `trpc-openapi` uses this function.\n */ function createInputMiddleware(parse) {\n const inputMiddleware = async function inputValidatorMiddleware(opts) {\n let parsedInput;\n const rawInput = await opts.getRawInput();\n try {\n parsedInput = await parse(rawInput);\n } catch (cause) {\n throw new TRPCError({\n code: 'BAD_REQUEST',\n cause\n });\n }\n // Multiple input parsers\n const combinedInput = isObject(opts.input) && isObject(parsedInput) ? {\n ...opts.input,\n ...parsedInput\n } : parsedInput;\n return opts.next({\n input: combinedInput\n });\n };\n inputMiddleware._type = 'input';\n return inputMiddleware;\n}\n/**\n * @internal\n */ function createOutputMiddleware(parse) {\n const outputMiddleware = async function outputValidatorMiddleware({ next }) {\n const result = await next();\n if (!result.ok) {\n // pass through failures without validating\n return result;\n }\n try {\n const data = await parse(result.data);\n return {\n ...result,\n data\n };\n } catch (cause) {\n throw new TRPCError({\n message: 'Output validation failed',\n code: 'INTERNAL_SERVER_ERROR',\n cause\n });\n }\n };\n outputMiddleware._type = 'output';\n return outputMiddleware;\n}\n\nexport { createInputMiddleware, createMiddlewareFactory, createOutputMiddleware, experimental_standaloneMiddleware, middlewareMarker };\n","// zod / typeschema\nfunction getParseFn(procedureParser) {\n const parser = procedureParser;\n if (typeof parser === 'function') {\n // ParserValibotEsque (>= v0.31.0)\n // ParserCustomValidatorEsque\n return parser;\n }\n if (typeof parser.parseAsync === 'function') {\n // ParserZodEsque\n return parser.parseAsync.bind(parser);\n }\n if (typeof parser.parse === 'function') {\n // ParserZodEsque\n // ParserValibotEsque (< v0.13.0)\n return parser.parse.bind(parser);\n }\n if (typeof parser.validateSync === 'function') {\n // ParserYupEsque\n return parser.validateSync.bind(parser);\n }\n if (typeof parser.create === 'function') {\n // ParserSuperstructEsque\n return parser.create.bind(parser);\n }\n if (typeof parser.assert === 'function') {\n // ParserScaleEsque\n return (value)=>{\n parser.assert(value);\n return value;\n };\n }\n throw new Error('Could not find a validator fn');\n}\n\nexport { getParseFn };\n","import { TRPCError, getTRPCErrorFromUnknown } from './error/TRPCError.mjs';\nimport { createInputMiddleware, createOutputMiddleware, middlewareMarker } from './middleware.mjs';\nimport { getParseFn } from './parser.mjs';\nimport { mergeWithoutOverrides } from './utils.mjs';\n\nfunction createNewBuilder(def1, def2) {\n const { middlewares =[] , inputs , meta , ...rest } = def2;\n // TODO: maybe have a fn here to warn about calls\n return createBuilder({\n ...mergeWithoutOverrides(def1, rest),\n inputs: [\n ...def1.inputs,\n ...inputs ?? []\n ],\n middlewares: [\n ...def1.middlewares,\n ...middlewares\n ],\n meta: def1.meta && meta ? {\n ...def1.meta,\n ...meta\n } : meta ?? def1.meta\n });\n}\nfunction createBuilder(initDef = {}) {\n const _def = {\n procedure: true,\n inputs: [],\n middlewares: [],\n ...initDef\n };\n const builder = {\n _def,\n input (input) {\n const parser = getParseFn(input);\n return createNewBuilder(_def, {\n inputs: [\n input\n ],\n middlewares: [\n createInputMiddleware(parser)\n ]\n });\n },\n output (output) {\n const parser = getParseFn(output);\n return createNewBuilder(_def, {\n output,\n middlewares: [\n createOutputMiddleware(parser)\n ]\n });\n },\n meta (meta) {\n return createNewBuilder(_def, {\n meta\n });\n },\n use (middlewareBuilderOrFn) {\n // Distinguish between a middleware builder and a middleware function\n const middlewares = '_middlewares' in middlewareBuilderOrFn ? middlewareBuilderOrFn._middlewares : [\n middlewareBuilderOrFn\n ];\n return createNewBuilder(_def, {\n middlewares: middlewares\n });\n },\n unstable_concat (builder) {\n return createNewBuilder(_def, builder._def);\n },\n query (resolver) {\n return createResolver({\n ..._def,\n type: 'query'\n }, resolver);\n },\n mutation (resolver) {\n return createResolver({\n ..._def,\n type: 'mutation'\n }, resolver);\n },\n subscription (resolver) {\n return createResolver({\n ..._def,\n type: 'subscription'\n }, resolver);\n },\n experimental_caller (caller) {\n return createNewBuilder(_def, {\n caller\n });\n }\n };\n return builder;\n}\nfunction createResolver(_defIn, resolver) {\n const finalBuilder = createNewBuilder(_defIn, {\n resolver,\n middlewares: [\n async function resolveMiddleware(opts) {\n const data = await resolver(opts);\n return {\n marker: middlewareMarker,\n ok: true,\n data,\n ctx: opts.ctx\n };\n }\n ]\n });\n const _def = {\n ...finalBuilder._def,\n type: _defIn.type,\n experimental_caller: Boolean(finalBuilder._def.caller),\n meta: finalBuilder._def.meta,\n $types: null\n };\n const invoke = createProcedureCaller(finalBuilder._def);\n const callerOverride = finalBuilder._def.caller;\n if (!callerOverride) {\n return invoke;\n }\n const callerWrapper = async (...args)=>{\n return await callerOverride({\n args,\n invoke,\n _def: _def\n });\n };\n callerWrapper._def = _def;\n return callerWrapper;\n}\nconst codeblock = `\nThis is a client-only function.\nIf you want to call this function on the server, see https://trpc.io/docs/v11/server/server-side-calls\n`.trim();\nfunction createProcedureCaller(_def) {\n async function procedure(opts) {\n // is direct server-side call\n if (!opts || !('getRawInput' in opts)) {\n throw new Error(codeblock);\n }\n // run the middlewares recursively with the resolver as the last one\n async function callRecursive(callOpts = {\n index: 0,\n ctx: opts.ctx\n }) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const middleware = _def.middlewares[callOpts.index];\n const result = await middleware({\n ctx: callOpts.ctx,\n type: opts.type,\n path: opts.path,\n getRawInput: callOpts.getRawInput ?? opts.getRawInput,\n meta: _def.meta,\n input: callOpts.input,\n next (_nextOpts) {\n const nextOpts = _nextOpts;\n return callRecursive({\n index: callOpts.index + 1,\n ctx: nextOpts && 'ctx' in nextOpts ? {\n ...callOpts.ctx,\n ...nextOpts.ctx\n } : callOpts.ctx,\n input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input,\n getRawInput: nextOpts && 'getRawInput' in nextOpts ? nextOpts.getRawInput : callOpts.getRawInput\n });\n }\n });\n return result;\n } catch (cause) {\n return {\n ok: false,\n error: getTRPCErrorFromUnknown(cause),\n marker: middlewareMarker\n };\n }\n }\n // there's always at least one \"next\" since we wrap this.resolver in a middleware\n const result = await callRecursive();\n if (!result) {\n throw new TRPCError({\n code: 'INTERNAL_SERVER_ERROR',\n message: 'No result from middlewares - did you forget to `return next()`?'\n });\n }\n if (!result.ok) {\n // re-throw original error\n throw result.error;\n }\n return result.data;\n }\n procedure._def = _def;\n // FIXME typecast shouldn't be needed - fixittt\n return procedure;\n}\n\nexport { createBuilder };\n","/**\n * The default check to see if we're in a server\n */ const isServerDefault = typeof window === 'undefined' || 'Deno' in window || // eslint-disable-next-line @typescript-eslint/dot-notation\nglobalThis.process?.env?.['NODE_ENV'] === 'test' || !!globalThis.process?.env?.['JEST_WORKER_ID'] || !!globalThis.process?.env?.['VITEST_WORKER_ID'];\n\nexport { isServerDefault };\n","import { createRecursiveProxy } from './createProxy.mjs';\nimport { defaultFormatter } from './error/formatter.mjs';\nimport { TRPCError, getTRPCErrorFromUnknown } from './error/TRPCError.mjs';\nimport { defaultTransformer } from './transformer.mjs';\nimport { mergeWithoutOverrides, omitPrototype, isFunction } from './utils.mjs';\n\nfunction isRouter(procedureOrRouter) {\n return procedureOrRouter._def && 'router' in procedureOrRouter._def;\n}\nconst emptyRouter = {\n _ctx: null,\n _errorShape: null,\n _meta: null,\n queries: {},\n mutations: {},\n subscriptions: {},\n errorFormatter: defaultFormatter,\n transformer: defaultTransformer\n};\n/**\n * Reserved words that can't be used as router or procedure names\n */ const reservedWords = [\n /**\n * Then is a reserved word because otherwise we can't return a promise that returns a Proxy\n * since JS will think that `.then` is something that exists\n */ 'then',\n /**\n * `fn.call()` and `fn.apply()` are reserved words because otherwise we can't call a function using `.call` or `.apply`\n */ 'call',\n 'apply'\n];\n/**\n * @internal\n */ function createRouterFactory(config) {\n function createRouterInner(input) {\n const reservedWordsUsed = new Set(Object.keys(input).filter((v)=>reservedWords.includes(v)));\n if (reservedWordsUsed.size > 0) {\n throw new Error('Reserved words used in `router({})` call: ' + Array.from(reservedWordsUsed).join(', '));\n }\n const procedures = omitPrototype({});\n function step(from, path = []) {\n const aggregate = omitPrototype({});\n for (const [key, item] of Object.entries(from ?? {})){\n if (isRouter(item)) {\n aggregate[key] = step(item._def.record, [\n ...path,\n key\n ]);\n continue;\n }\n if (!isProcedure(item)) {\n // RouterRecord\n aggregate[key] = step(item, [\n ...path,\n key\n ]);\n continue;\n }\n const newPath = [\n ...path,\n key\n ].join('.');\n if (procedures[newPath]) {\n throw new Error(`Duplicate key: ${newPath}`);\n }\n procedures[newPath] = item;\n aggregate[key] = item;\n }\n return aggregate;\n }\n const record = step(input);\n const _def = {\n _config: config,\n router: true,\n procedures,\n ...emptyRouter,\n record\n };\n return {\n ...record,\n _def,\n createCaller: createCallerFactory()({\n _def\n })\n };\n }\n return createRouterInner;\n}\nfunction isProcedure(procedureOrRouter) {\n return typeof procedureOrRouter === 'function';\n}\n/**\n * @internal\n */ function callProcedure(opts) {\n const { type , path } = opts;\n const proc = opts.procedures[path];\n if (!proc || !isProcedure(proc) || proc._def.type !== type && !opts.allowMethodOverride) {\n throw new TRPCError({\n code: 'NOT_FOUND',\n message: `No \"${type}\"-procedure on path \"${path}\"`\n });\n }\n /* istanbul ignore if -- @preserve */ if (proc._def.type !== type && opts.allowMethodOverride && proc._def.type === 'subscription') {\n throw new TRPCError({\n code: 'METHOD_NOT_SUPPORTED',\n message: `Method override is not supported for subscriptions`\n });\n }\n return proc(opts);\n}\nfunction createCallerFactory() {\n return function createCallerInner(router) {\n const _def = router._def;\n return function createCaller(ctxOrCallback, options) {\n return createRecursiveProxy(async ({ path , args })=>{\n const fullPath = path.join('.');\n if (path.length === 1 && path[0] === '_def') {\n return _def;\n }\n const procedure = _def.procedures[fullPath];\n let ctx = undefined;\n try {\n ctx = isFunction(ctxOrCallback) ? await Promise.resolve(ctxOrCallback()) : ctxOrCallback;\n return await procedure({\n path: fullPath,\n getRawInput: async ()=>args[0],\n ctx,\n type: procedure._def.type\n });\n } catch (cause) {\n options?.onError?.({\n ctx,\n error: getTRPCErrorFromUnknown(cause),\n input: args[0],\n path: fullPath,\n type: procedure._def.type\n });\n throw cause;\n }\n });\n };\n };\n}\nfunction mergeRouters(...routerList) {\n const record = mergeWithoutOverrides({}, ...routerList.map((r)=>r._def.record));\n const errorFormatter = routerList.reduce((currentErrorFormatter, nextRouter)=>{\n if (nextRouter._def._config.errorFormatter && nextRouter._def._config.errorFormatter !== defaultFormatter) {\n if (currentErrorFormatter !== defaultFormatter && currentErrorFormatter !== nextRouter._def._config.errorFormatter) {\n throw new Error('You seem to have several error formatters');\n }\n return nextRouter._def._config.errorFormatter;\n }\n return currentErrorFormatter;\n }, defaultFormatter);\n const transformer = routerList.reduce((prev, current)=>{\n if (current._def._config.transformer && current._def._config.transformer !== defaultTransformer) {\n if (prev !== defaultTransformer && prev !== current._def._config.transformer) {\n throw new Error('You seem to have several transformers');\n }\n return current._def._config.transformer;\n }\n return prev;\n }, defaultTransformer);\n const router = createRouterFactory({\n errorFormatter,\n transformer,\n isDev: routerList.every((r)=>r._def._config.isDev),\n allowOutsideOfServer: routerList.every((r)=>r._def._config.allowOutsideOfServer),\n isServer: routerList.every((r)=>r._def._config.isServer),\n $types: routerList[0]?._def._config.$types\n })(record);\n return router;\n}\n\nexport { callProcedure, createCallerFactory, createRouterFactory, mergeRouters };\n","import { defaultFormatter } from './error/formatter.mjs';\nimport { createMiddlewareFactory } from './middleware.mjs';\nimport { createBuilder } from './procedureBuilder.mjs';\nimport { isServerDefault } from './rootConfig.mjs';\nimport { createRouterFactory, mergeRouters, createCallerFactory } from './router.mjs';\nimport { getDataTransformer, defaultTransformer } from './transformer.mjs';\n\nclass TRPCBuilder {\n /**\n * Add a context shape as a generic to the root object\n * @link https://trpc.io/docs/v11/server/context\n */ context() {\n return new TRPCBuilder();\n }\n /**\n * Add a meta shape as a generic to the root object\n * @link https://trpc.io/docs/v11/quickstart\n */ meta() {\n return new TRPCBuilder();\n }\n /**\n * Create the root object\n * @link https://trpc.io/docs/v11/server/routers#initialize-trpc\n */ create(opts) {\n const config = {\n transformer: getDataTransformer(opts?.transformer ?? defaultTransformer),\n isDev: opts?.isDev ?? // eslint-disable-next-line @typescript-eslint/dot-notation\n globalThis.process?.env['NODE_ENV'] !== 'production',\n allowOutsideOfServer: opts?.allowOutsideOfServer ?? false,\n errorFormatter: opts?.errorFormatter ?? defaultFormatter,\n isServer: opts?.isServer ?? isServerDefault,\n /**\n * These are just types, they can't be used at runtime\n * @internal\n */ $types: null,\n experimental: opts?.experimental ?? {}\n };\n {\n // Server check\n const isServer = opts?.isServer ?? isServerDefault;\n if (!isServer && opts?.allowOutsideOfServer !== true) {\n throw new Error(`You're trying to use @trpc/server in a non-server environment. This is not supported by default.`);\n }\n }\n return {\n /**\n * Your router config\n * @internal\n */ _config: config,\n /**\n * Builder object for creating procedures\n * @link https://trpc.io/docs/v11/server/procedures\n */ procedure: createBuilder({\n meta: opts?.defaultMeta\n }),\n /**\n * Create reusable middlewares\n * @link https://trpc.io/docs/v11/server/middlewares\n */ middleware: createMiddlewareFactory(),\n /**\n * Create a router\n * @link https://trpc.io/docs/v11/server/routers\n */ router: createRouterFactory(config),\n /**\n * Merge Routers\n * @link https://trpc.io/docs/v11/server/merging-routers\n */ mergeRouters,\n /**\n * Create a server-side caller for a router\n * @link https://trpc.io/docs/v11/server/server-side-calls\n */ createCallerFactory: createCallerFactory()\n };\n }\n}\n/**\n * Builder to initialize the tRPC root object - use this exactly once per backend\n * @link https://trpc.io/docs/v11/quickstart\n */ const initTRPC = new TRPCBuilder();\n\nexport { initTRPC };\n","import https from \"node:https\";\nimport { TRPCError } from \"@trpc/server\";\nimport axios from \"axios\";\nimport z from \"zod/v4\";\n\nexport async function fetchServerVersions({ url, ottoPort = 3030 }: { url: string; ottoPort?: number }) {\n const fmsInfo = await fetchFMSVersionInfo(url);\n const ottoInfo = await fetchOttoVersion({ url, ottoPort });\n return { fmsInfo, ottoInfo };\n}\n\nconst fmsInfoSchema = z.object({\n data: z.object({\n APIVersion: z.number().optional(),\n AcceptEARPassword: z.boolean().optional(),\n AcceptEncrypted: z.boolean().optional(),\n AcceptUnencrypted: z.boolean().optional(),\n AdminLocalAuth: z.string().optional(),\n AllowChangeUploadDBFolder: z.boolean().optional(),\n AutoOpenForUpload: z.boolean().optional(),\n DenyGuestAndAutoLogin: z.string().optional(),\n Hostname: z.string().optional(),\n IsAppleInternal: z.boolean().optional(),\n IsETS: z.boolean().optional(),\n PremisesType: z.string().optional(),\n ProductVersion: z.string().optional(),\n PublicKey: z.string().optional(),\n RequiresDBPasswords: z.boolean().optional(),\n ServerID: z.string().optional(),\n ServerVersion: z.string(),\n }),\n result: z.number(),\n});\n\nexport async function fetchFMSVersionInfo(url: string) {\n const fmsUrl = new URL(url);\n fmsUrl.pathname = \"/fmws/serverinfo\";\n\n const fmsInfoResult = await fetchWithoutSSL(fmsUrl.toString()).then((r) => fmsInfoSchema.safeParse(r.data));\n if (!fmsInfoResult.success) {\n console.error(\"fmsInfoResult.error\", fmsInfoResult.error.issues);\n throw new TRPCError({\n code: \"BAD_REQUEST\",\n message: \"Invalid FileMaker Server URL\",\n });\n }\n return fmsInfoResult.data.data;\n}\n\nconst ottoInfoSchema = z.object({\n Otto: z.object({\n version: z.string(),\n serverNickname: z.string().default(\"\"),\n isLicenseValid: z.boolean().optional(),\n }),\n migratorVersion: z.string().optional(),\n FileMakerServer: z.object({\n version: z.object({\n long: z.string(),\n short: z.string(),\n }),\n running: z.boolean().optional(),\n }),\n isMac: z.boolean().optional(),\n platform: z.string().optional(),\n host: z.string().optional(),\n});\n\nconst ottoInfoResponseSchema = z.object({\n response: ottoInfoSchema,\n});\n\nexport async function fetchOttoVersion({\n url,\n ottoPort = 3030,\n}: {\n url: string;\n ottoPort?: number | null;\n}): Promise<z.infer<typeof ottoInfoSchema> | null> {\n let ottoInfo = await fetchOtto4Version(url);\n if (!ottoInfo) {\n ottoInfo = await fetchOtto3Version(url, ottoPort);\n }\n return ottoInfo;\n}\n\nasync function fetchOtto4Version(url: string) {\n try {\n const otto4Url = new URL(url);\n otto4Url.pathname = \"/otto/api/info\";\n const otto4Info = await fetchWithoutSSL(otto4Url.toString()).then((r) => {\n return ottoInfoResponseSchema.parse(r.data).response;\n });\n return otto4Info;\n } catch (_error) {\n console.log(\"unable to fetch otto4 info, trying otto3\");\n return null;\n }\n}\n\nasync function fetchOtto3Version(url: string, ottoPort: number | null) {\n try {\n const otto3Url = new URL(url);\n otto3Url.port = ottoPort ? ottoPort.toString() : \"3030\";\n otto3Url.pathname = \"/api/otto/info\";\n const ottoInfo = await fetchWithoutSSL(otto3Url.toString()).then((res) => {\n return ottoInfoSchema.parse(res.data);\n });\n return ottoInfo;\n } catch (error) {\n if (error instanceof Error) {\n console.error(\"otto3 fetch error\", error.message);\n }\n return null;\n }\n}\n\nasync function fetchWithoutSSL(url: string) {\n const agent = new https.Agent({\n rejectUnauthorized: false,\n });\n\n const result = await axios.get(url, {\n validateStatus: null,\n headers: { Connection: \"close\" },\n httpsAgent: agent,\n timeout: 10_000,\n });\n\n return result;\n}\n","export const removeTrailingSlash = (input: string) => {\n if (input.length > 1 && input.endsWith(\"/\")) {\n return input.slice(0, -1);\n }\n return input;\n};\n","import { removeTrailingSlash } from \"./removeTrailingSlash.js\";\n\nconst validationRegExp = /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n//Validate a string against allowed package.json names\nexport const validateAppName = (rawInput: string) => {\n const input = removeTrailingSlash(rawInput);\n const paths = input.split(\"/\");\n\n // If the first part is a @, it's a scoped package\n const indexOfDelimiter = paths.findIndex((p) => p.startsWith(\"@\"));\n\n let appName = paths.at(-1);\n if (paths.findIndex((p) => p.startsWith(\"@\")) !== -1) {\n appName = paths.slice(indexOfDelimiter).join(\"/\");\n }\n\n if (input === \".\" || validationRegExp.test(appName ?? \"\")) {\n return;\n }\n return \"Name must consist of only lowercase alphanumeric characters, '-', and '_'\";\n};\n","import path from \"node:path\";\nimport type { OttoAPIKey } from \"@proofkit/fmdapi\";\nimport type { ValueListsOptions } from \"@proofkit/typegen/config\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport dotenv from \"dotenv\";\nimport { z } from \"zod/v4\";\nimport * as p from \"~/cli/prompts.js\";\nimport { addLayout, getExistingSchemas } from \"~/generators/fmdapi.js\";\nimport { state } from \"~/state.js\";\nimport { getSettings, type Settings } from \"~/utils/parseSettings.js\";\nimport { commonFileMakerLayoutPrefixes, getLayouts } from \"../fmdapi.js\";\nimport { abortIfCancel } from \"../utils.js\";\n\n// Regex to validate JavaScript variable names\nconst VALID_JS_VARIABLE_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\nexport const runAddSchemaAction = async (opts?: {\n projectDir?: string;\n settings: Settings;\n sourceName?: string;\n layoutName?: string;\n schemaName?: string;\n valueLists?: ValueListsOptions;\n}) => {\n const settings = getSettings();\n const projectDir = state.projectDir;\n let sourceName = opts?.sourceName;\n if (sourceName) {\n sourceName = opts?.sourceName;\n } else if (settings.dataSources.filter((s) => s.type === \"fm\").length > 1) {\n // if there is more than one fm data source, we need to prompt for which one to add the layout to\n const dataSourceName = await p.select({\n message: \"Which FileMaker data source do you want to add a layout to?\",\n options: settings.dataSources.filter((s) => s.type === \"fm\").map((s) => ({ label: s.name, value: s.name })),\n });\n if (p.isCancel(dataSourceName)) {\n p.cancel();\n process.exit(0);\n }\n sourceName = z.string().parse(dataSourceName);\n }\n\n if (!sourceName) {\n sourceName = \"filemaker\";\n }\n\n const dataSource = settings.dataSources.filter((s) => s.type === \"fm\").find((s) => s.name === sourceName);\n if (!dataSource) {\n throw new Error(`FileMaker data source ${sourceName} not found in your ProofKit config`);\n }\n\n const spinner = p.spinner();\n spinner.start(\"Loading layouts from your FileMaker file...\");\n if (settings.envFile) {\n dotenv.config({\n path: path.join(projectDir, settings.envFile),\n });\n }\n\n const dataApiKey = process.env[dataSource.envNames.apiKey];\n const fmFile = process.env[dataSource.envNames.database];\n const server = process.env[dataSource.envNames.server];\n\n if (!(dataApiKey && fmFile && server)) {\n spinner.stop(\"Failed to load layouts\");\n p.cancel(\"Missing required environment variables. Please check your .env file.\");\n process.exit(1);\n }\n\n // Validate API key format\n if (!(dataApiKey.startsWith(\"KEY_\") || dataApiKey.startsWith(\"dk_\"))) {\n spinner.stop(\"Failed to load layouts\");\n p.cancel(\"Invalid API key format. API key must start with 'KEY_' or 'dk_'.\");\n process.exit(1);\n }\n\n // Type assertion after validation\n const validatedApiKey: OttoAPIKey = dataApiKey as OttoAPIKey;\n\n const layouts = await getLayouts({\n dataApiKey: validatedApiKey,\n fmFile,\n server,\n });\n\n const existingConfigResults = getExistingSchemas({\n projectDir,\n dataSourceName: sourceName,\n });\n\n const existingLayouts = existingConfigResults.map((s) => s.layout).filter(Boolean);\n\n const existingSchemas = existingConfigResults.map((s) => s.schemaName).filter(Boolean);\n\n spinner.stop(\"Loaded layouts from your FileMaker file\");\n\n if (existingLayouts.length > 0) {\n p.note(existingLayouts.join(\"\\n\"), \"Detected existing layouts in your project\");\n }\n\n // list other common layout names to exclude\n existingLayouts.push(\"-\");\n\n let passedInLayoutName: string | undefined = opts?.layoutName;\n if (passedInLayoutName === \"\" || !layouts.includes(passedInLayoutName ?? \"\")) {\n passedInLayoutName = undefined;\n }\n\n const selectedLayout =\n passedInLayoutName ??\n abortIfCancel(\n await p.searchSelect({\n message: \"Select a new layout to read data from\",\n emptyMessage: \"No matching layouts found.\",\n options: layouts\n .filter((layout) => !existingLayouts.includes(layout))\n .map((layout) => ({\n label: layout,\n value: layout,\n keywords: [layout],\n })),\n }),\n );\n\n const defaultSchemaName = getDefaultSchemaName(selectedLayout);\n const schemaName =\n opts?.schemaName ||\n abortIfCancel(\n await p.text({\n message: `Enter a friendly name for the new schema.\\n${chalk.dim(\"This will the name by which you refer to this layout in your codebase\")}`,\n // initialValue: selectedLayout,\n defaultValue: defaultSchemaName,\n validate: (input) => {\n if (input === \"\") {\n return; // allow empty input for the default value\n }\n // ensure the input is a valid JS variable name\n if (!VALID_JS_VARIABLE_NAME.test(input)) {\n return \"Name must consist of only alphanumeric characters, '_', and must not start with a number\";\n }\n if (existingSchemas.includes(input)) {\n return \"Schema name must be unique\";\n }\n return;\n },\n }),\n ).toString();\n\n const valueLists =\n opts?.valueLists ??\n ((await p.select({\n message: `Should we use value lists on this layout?\\n${chalk.dim(\n \"This will allow fields that contain a value list to be auto-completed in typescript and also validated to prevent incorrect values\",\n )}`,\n options: [\n {\n label: \"Yes, but allow empty fields\",\n value: \"allowEmpty\",\n hint: \"Empty fields or values that don't match the value list will be converted to an empty string\",\n },\n {\n label: \"Yes; empty values should fail validation\",\n value: \"strict\",\n hint: \"Empty fields or values that don't match the value list will cause validation to fail\",\n },\n {\n label: \"No, ignore value lists\",\n value: \"ignore\",\n hint: \"Fields will just be typed as strings\",\n },\n ],\n })) as ValueListsOptions);\n\n const valueListsValidated = z.enum([\"ignore\", \"allowEmpty\", \"strict\"]).catch(\"ignore\").parse(valueLists);\n\n await addLayout({\n runCodegen: true,\n projectDir,\n dataSourceName: sourceName,\n schemas: [\n {\n layoutName: selectedLayout,\n schemaName,\n valueLists: valueListsValidated,\n },\n ],\n });\n\n p.outro(`Layout \"${selectedLayout}\" added to your project as \"${schemaName}\"`);\n};\n\nexport const makeAddSchemaCommand = () => {\n const addSchemaCommand = new Command(\"layout\")\n .alias(\"schema\")\n .description(\"Add a new layout to your fmschema file\")\n .action(async (opts: { settings: Settings }) => {\n const settings = opts.settings;\n\n await runAddSchemaAction({ settings });\n });\n\n return addSchemaCommand;\n};\n\nfunction getDefaultSchemaName(layout: string) {\n let schemaName = layout.replace(/[-\\s]/g, \"_\");\n for (const prefix of commonFileMakerLayoutPrefixes) {\n if (schemaName.startsWith(prefix)) {\n schemaName = schemaName.replace(prefix, \"\");\n }\n }\n return schemaName;\n}\n","import { createDataAPIKeyWithCredentials, getDeploymentStatus, startDeployment } from \"~/cli/ottofms.js\";\nimport * as p from \"~/cli/prompts.js\";\n\nexport const filename = \"ProofKitDemo.fmp12\";\n\nexport async function deployDemoFile({\n url,\n token,\n operation,\n}: {\n url: URL;\n token: string;\n operation: \"install\" | \"replace\";\n}): Promise<{ apiKey: string }> {\n const deploymentJSON = {\n scheduled: false,\n label: \"Install ProofKit Demo\",\n deployments: [\n {\n name: \"Install ProofKit Demo\",\n source: {\n type: \"url\",\n url: \"https://proofkit.dev/proofkit-demo/manifest.json\",\n },\n fileOperations: [\n {\n target: {\n fileName: filename,\n },\n operation,\n source: {\n fileName: \"ProofKitDemo.fmp12\",\n },\n location: {\n folder: \"default\",\n subFolder: \"\",\n },\n },\n ],\n concurrency: 1,\n options: {\n closeFilesAfterBuild: false,\n keepFilesClosedAfterComplete: false,\n transferContainerData: false,\n },\n },\n ],\n abortRemaining: false,\n };\n\n const spinner = p.spinner();\n spinner.start(\"Deploying ProofKit Demo file...\");\n\n const {\n response: { subDeploymentIds },\n } = await startDeployment({\n payload: deploymentJSON,\n url,\n token,\n });\n\n const deploymentId = subDeploymentIds[0];\n if (!deploymentId) {\n throw new Error(\"No deployment ID returned from the server\");\n }\n\n while (true) {\n // wait 2.5 seconds, then poll the status again\n await new Promise((resolve) => setTimeout(resolve, 2500));\n\n const {\n response: { status, running },\n } = await getDeploymentStatus({\n url,\n token,\n deploymentId,\n });\n if (!running) {\n if (status !== \"complete\") {\n throw new Error(\"Deployment didn't complete\");\n }\n break;\n }\n }\n\n const { apiKey } = await createDataAPIKeyWithCredentials({\n filename,\n username: \"admin\",\n password: \"admin\",\n url,\n });\n\n spinner.stop();\n\n return { apiKey };\n}\n","import chalk from \"chalk\";\nimport { SemVer } from \"semver\";\nimport type { z } from \"zod/v4\";\nimport { createDataAPIKey, getOttoFMSToken, listAPIKeys, listFiles } from \"~/cli/ottofms.js\";\nimport * as p from \"~/cli/prompts.js\";\nimport { abortIfCancel } from \"~/cli/utils.js\";\nimport { addLayout, addToFmschemaConfig, ensureWebviewerFmMcpConfig } from \"~/generators/fmdapi.js\";\nimport { getFmMcpStatus } from \"~/helpers/fmMcp.js\";\nimport { fetchServerVersions } from \"~/helpers/version-fetcher.js\";\nimport { isNonInteractiveMode } from \"~/state.js\";\nimport { addPackageDependency } from \"~/utils/addPackageDependency.js\";\nimport { addToEnv } from \"~/utils/addToEnvs.js\";\nimport { type dataSourceSchema, getSettings, setSettings } from \"~/utils/parseSettings.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\nimport { validateAppName } from \"~/utils/validateAppName.js\";\nimport { runAddSchemaAction } from \"../fmschema.js\";\nimport { deployDemoFile, filename } from \"./deploy-demo-file.js\";\n\nexport async function promptForFileMakerDataSource({\n projectDir,\n ...opts\n}: {\n projectDir: string;\n name?: string;\n server?: string;\n adminApiKey?: string;\n fileName?: string;\n dataApiKey?: string;\n layoutName?: string;\n schemaName?: string;\n}) {\n const settings = getSettings();\n\n if (settings.appType === \"webviewer\") {\n const fmMcpStatus = await getFmMcpStatus();\n const connectedFileName = fmMcpStatus.connectedFiles[0];\n const localDataSourceName = opts.name ?? \"filemaker\";\n\n if (!opts.server && fmMcpStatus.healthy && connectedFileName) {\n addPackageDependency({\n projectDir,\n dependencies: [\"@proofkit/fmdapi\"],\n devMode: false,\n });\n\n await ensureWebviewerFmMcpConfig({\n projectDir,\n connectedFileName,\n dataSourceName: localDataSourceName,\n baseUrl: fmMcpStatus.baseUrl,\n });\n\n // Persist the datasource in project settings\n const newDataSource: z.infer<typeof dataSourceSchema> = {\n type: \"fm\",\n name: localDataSourceName,\n envNames:\n localDataSourceName === \"filemaker\"\n ? {\n database: \"FM_DATABASE\",\n server: \"FM_SERVER\",\n apiKey: \"OTTO_API_KEY\",\n }\n : {\n database: `${localDataSourceName.toUpperCase()}_FM_DATABASE`,\n server: `${localDataSourceName.toUpperCase()}_FM_SERVER`,\n apiKey: `${localDataSourceName.toUpperCase()}_OTTO_API_KEY`,\n },\n };\n settings.dataSources.push(newDataSource);\n setSettings(settings);\n\n if (opts.layoutName && opts.schemaName) {\n await addLayout({\n projectDir,\n dataSourceName: localDataSourceName,\n schemas: [\n {\n layoutName: opts.layoutName,\n schemaName: opts.schemaName,\n valueLists: \"allowEmpty\",\n },\n ],\n });\n } else if (opts.layoutName || opts.schemaName) {\n throw new Error(\"Both --layoutName and --schemaName must be provided together.\");\n } else {\n p.note(\n `Detected local FM MCP at ${fmMcpStatus.baseUrl} with connected file \"${connectedFileName}\". Edit ${chalk.cyan(\n \"proofkit-typegen.config.jsonc\",\n )} to add layouts, then run ${chalk.cyan(\"pnpm typegen\")} or ${chalk.cyan(\"pnpm typegen:ui\")}.`,\n \"Local FileMaker detected\",\n );\n }\n\n return;\n }\n\n if (!opts.server && isNonInteractiveMode()) {\n throw new Error(\n \"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.\",\n );\n }\n\n if (!opts.server) {\n const fallbackAction = abortIfCancel(\n await p.select({\n message:\n \"Local FM MCP was not detected. Do you want to continue with hosted FileMaker server setup or skip for now?\",\n options: [\n {\n label: \"Continue with hosted setup\",\n value: \"hosted\",\n },\n {\n label: \"Skip for now\",\n value: \"skip\",\n },\n ],\n }),\n );\n\n if (fallbackAction === \"skip\") {\n p.note(\n `You can come back later with ${chalk.cyan(\"proofkit add data\")} after starting FM MCP locally or when you have a hosted server ready.`,\n );\n return;\n }\n }\n }\n\n const existingFmDataSourceNames = settings.dataSources.filter((ds) => ds.type === \"fm\").map((ds) => ds.name);\n\n const server = await getValidFileMakerServerUrl(opts.server);\n\n const canDoBrowserLogin = server.ottoVersion && server.ottoVersion.compare(new SemVer(\"4.7.0\")) > 0;\n\n if (!(canDoBrowserLogin || opts.adminApiKey)) {\n return p.cancel(\n \"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\",\n );\n }\n\n const token = opts.adminApiKey || (await getOttoFMSToken({ url: server.url })).token;\n\n const fileList = await listFiles({ url: server.url, token });\n const demoFileExists = fileList.map((f) => f.filename.replace(\".fmp12\", \"\")).includes(filename.replace(\".fmp12\", \"\"));\n let fmFile = opts.fileName;\n while (true) {\n fmFile =\n opts.fileName ||\n abortIfCancel(\n await p.searchSelect({\n message: `Which file would you like to connect to? ${chalk.dim(\"(TIP: Select the file where your data is stored)\")}`,\n emptyMessage: \"No matching files found.\",\n options: [\n {\n value: \"$deployDemoFile\",\n label: \"Deploy NEW ProofKit Demo File\",\n hint: \"Use OttoFMS to deploy a new file for testing\",\n keywords: [\"demo\", \"proofkit\"],\n },\n ...fileList\n .sort((a, b) => a.filename.localeCompare(b.filename))\n .map((file) => ({\n value: file.filename,\n label: file.filename,\n hint: file.status,\n keywords: [file.filename],\n })),\n ],\n }),\n );\n\n if (fmFile !== \"$deployDemoFile\") {\n break;\n }\n\n if (demoFileExists) {\n const replace = abortIfCancel(\n await p.confirm({\n message: \"The demo file already exists, do you want to replace it with a fresh copy?\",\n initialValue: false,\n }),\n );\n if (replace) {\n break;\n }\n } else {\n break;\n }\n }\n\n if (!fmFile) {\n throw new Error(\"No file selected\");\n }\n\n let dataApiKey = opts.dataApiKey;\n if (fmFile === \"$deployDemoFile\") {\n const { apiKey } = await deployDemoFile({\n url: server.url,\n token,\n operation: demoFileExists ? \"replace\" : \"install\",\n });\n dataApiKey = apiKey;\n fmFile = filename;\n opts.layoutName = opts.layoutName ?? \"API_Contacts\";\n opts.schemaName = opts.schemaName ?? \"Contacts\";\n } else {\n const allApiKeys = await listAPIKeys({ url: server.url, token });\n const thisFileApiKeys = allApiKeys.filter((key) => key.database === fmFile);\n\n if (!dataApiKey && thisFileApiKeys.length > 0) {\n const selectedKey = abortIfCancel(\n await p.searchSelect({\n message: `Which OttoFMS Data API key would you like to use? ${chalk.dim(`(This determines the access that you'll have to the data in this file)`)}`,\n emptyMessage: \"No matching API keys found.\",\n options: [\n ...thisFileApiKeys.map((key) => ({\n value: key.key,\n label: `${chalk.bold(key.label)} - ${key.user}`,\n hint: `${key.key.slice(0, 5)}...${key.key.slice(-4)}`,\n keywords: [key.label, key.user, key.database],\n })),\n {\n value: \"create\",\n label: \"Create a new API key\",\n hint: \"Requires FileMaker credentials for this file\",\n keywords: [\"create\", \"new\"],\n },\n ],\n }),\n );\n if (typeof selectedKey !== \"string\") {\n throw new Error(\"Invalid key\");\n }\n if (selectedKey !== \"create\") {\n dataApiKey = selectedKey;\n }\n }\n\n if (!dataApiKey) {\n // data api was not provided, prompt to create a new one\n const resp = await createDataAPIKey({\n filename: fmFile,\n url: server.url,\n });\n dataApiKey = resp.apiKey;\n }\n }\n if (!dataApiKey) {\n throw new Error(\"No API key\");\n }\n\n const name =\n existingFmDataSourceNames.length === 0\n ? \"filemaker\"\n : (opts.name ??\n abortIfCancel(\n await p.text({\n message: \"What do you want to call this data source?\",\n validate: (value) => {\n if (value === \"filemaker\") {\n return \"That name is reserved\";\n }\n\n // require name to be unique\n if (existingFmDataSourceNames?.includes(value)) {\n return \"That name is already in use in this project, pick something unique\";\n }\n\n // require name to be alphanumeric, lowercase, etc\n return validateAppName(value);\n },\n }),\n ));\n\n const newDataSource: z.infer<typeof dataSourceSchema> = {\n type: \"fm\",\n name,\n envNames:\n name === \"filemaker\"\n ? {\n database: \"FM_DATABASE\",\n server: \"FM_SERVER\",\n apiKey: \"OTTO_API_KEY\",\n }\n : {\n database: `${name.toUpperCase()}_FM_DATABASE`,\n server: `${name.toUpperCase()}_FM_SERVER`,\n apiKey: `${name.toUpperCase()}_OTTO_API_KEY`,\n },\n };\n\n const project = getNewProject(projectDir);\n\n const schemaFile = await addToEnv({\n projectDir,\n project,\n envs: [\n {\n name: newDataSource.envNames.database,\n zodValue: `z.string().endsWith(\".fmp12\")`,\n defaultValue: fmFile,\n type: \"server\",\n },\n {\n name: newDataSource.envNames.server,\n zodValue: \"z.string().url()\",\n type: \"server\",\n defaultValue: server.url.origin,\n },\n {\n name: newDataSource.envNames.apiKey,\n zodValue: `z.string().startsWith(\"dk_\") as z.ZodType<OttoAPIKey>`,\n type: \"server\",\n defaultValue: dataApiKey,\n },\n ],\n });\n\n const fmdapiImport = schemaFile.getImportDeclaration((imp) => imp.getModuleSpecifierValue() === \"@proofkit/fmdapi\");\n if (fmdapiImport) {\n fmdapiImport\n .getNamedImports()\n .find((imp) => imp.getName() === \"OttoAPIKey\")\n ?.remove();\n fmdapiImport.addNamedImport({ name: \"OttoAPIKey\", isTypeOnly: true });\n } else {\n schemaFile.addImportDeclaration({\n namedImports: [{ name: \"OttoAPIKey\", isTypeOnly: true }],\n moduleSpecifier: \"@proofkit/fmdapi\",\n });\n }\n\n addPackageDependency({\n projectDir,\n dependencies: [\"@proofkit/fmdapi\"],\n devMode: false,\n });\n\n settings.dataSources.push(newDataSource);\n setSettings(settings);\n\n addToFmschemaConfig({\n dataSourceName: name,\n envNames: name === \"filemaker\" ? undefined : newDataSource.envNames,\n });\n\n await formatAndSaveSourceFiles(project);\n\n // now prompt for layout\n await runAddSchemaAction({\n settings,\n sourceName: name,\n projectDir,\n layoutName: opts.layoutName,\n schemaName: opts.schemaName,\n valueLists: \"allowEmpty\",\n });\n}\n\nasync function getValidFileMakerServerUrl(defaultServerUrl?: string | undefined): Promise<{\n url: URL;\n fmsVersion: SemVer;\n ottoVersion: SemVer | null;\n}> {\n const spinner = p.spinner();\n let url: URL | null = null;\n let fmsVersion: SemVer | null = null;\n let ottoVersion: SemVer | null = null;\n let serverUrlToUse = defaultServerUrl;\n\n while (fmsVersion === null) {\n const serverUrl =\n serverUrlToUse ??\n abortIfCancel(\n await p.text({\n message: `What is the URL of your FileMaker Server?\\n${chalk.cyan(\"TIP: You can copy any valid path on the server and paste it here.\")}`,\n validate: (value) => {\n try {\n // try to make sure the url is https\n let normalizedValue = value;\n if (!normalizedValue.startsWith(\"https://\")) {\n if (normalizedValue.startsWith(\"http://\")) {\n normalizedValue = normalizedValue.replace(\"http://\", \"https://\");\n } else {\n normalizedValue = `https://${normalizedValue}`;\n }\n }\n\n // try to make sure the url is valid\n new URL(normalizedValue);\n return;\n } catch {\n return \"Please enter a valid URL\";\n }\n },\n }),\n );\n\n try {\n url = new URL(serverUrl);\n } catch {\n p.log.error(`Invalid URL: ${serverUrl.toString()}`);\n continue;\n }\n\n spinner.start(\"Validating Server URL...\");\n\n // check for FileMaker and Otto versions\n const { fmsInfo, ottoInfo } = await fetchServerVersions({\n url: url.origin,\n });\n\n spinner.stop();\n\n const fmsVersionString = fmsInfo.ServerVersion.split(\" \")[0];\n if (!fmsVersionString) {\n p.log.error(\"Unable to parse FileMaker Server version\");\n serverUrlToUse = undefined;\n continue;\n }\n fmsVersion = new SemVer(fmsVersionString);\n ottoVersion = ottoInfo?.Otto.version ? new SemVer(ottoInfo.Otto.version) : null;\n serverUrlToUse = undefined;\n }\n\n if (url === null) {\n throw new Error(\"Unable to get FileMaker Server URL\");\n }\n\n p.note(`🎉 FileMaker Server version ${fmsVersion} detected \\n\n ${ottoVersion ? `🎉 OttoFMS version ${ottoVersion} detected` : \"❌ OttoFMS not detected\"}`);\n\n return { url, ottoVersion, fmsVersion };\n}\n","import { Command } from \"commander\";\nimport { z } from \"zod/v4\";\nimport * as p from \"~/cli/prompts.js\";\n\nimport { ensureProofKitProject } from \"~/cli/utils.js\";\nimport { nonInteractiveOption } from \"~/globalOptions.js\";\nimport { initProgramState } from \"~/state.js\";\nimport { promptForFileMakerDataSource } from \"./filemaker.js\";\n\nconst dataSourceType = z.enum([\"fm\", \"supabase\"]);\nexport const runAddDataSourceCommand = async () => {\n const dataSource = dataSourceType.parse(\n await p.select({\n message: \"Which data souce do you want to add?\",\n options: [\n { label: \"FileMaker\", value: \"fm\" },\n { label: \"Supabase\", value: \"supabase\" },\n ],\n }),\n );\n\n if (dataSource === \"supabase\") {\n throw new Error(\"Not implemented\");\n }\n if (dataSource === \"fm\") {\n await promptForFileMakerDataSource({ projectDir: process.cwd() });\n } else {\n throw new Error(\"Invalid data source\");\n }\n};\n\nexport const makeAddDataSourceCommand = () => {\n const addDataSourceCommand = new Command(\"data\");\n addDataSourceCommand.description(\"Add a new data source to your project\");\n addDataSourceCommand.addOption(nonInteractiveOption);\n\n addDataSourceCommand.hook(\"preAction\", (_thisCommand, actionCommand) => {\n initProgramState(actionCommand.opts());\n const settings = ensureProofKitProject({ commandName: \"add\" });\n actionCommand.setOptionValue(\"settings\", settings);\n });\n\n // addDataSourceCommand.action();\n return addDataSourceCommand;\n};\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport { SyntaxKind } from \"ts-morph\";\n\nimport { getClientSuffix, getFieldNamesForSchema } from \"~/generators/fmdapi.js\";\nimport { injectTanstackQuery } from \"~/generators/tanstack-query.js\";\nimport { installDependencies } from \"~/helpers/installDependencies.js\";\nimport { state } from \"~/state.js\";\nimport { getSettings } from \"~/utils/parseSettings.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\nimport type { TPostInstallFn } from \"../types.js\";\n\n// Regex to validate JavaScript identifiers\nconst VALID_JS_IDENTIFIER = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\nexport const postInstallTable: TPostInstallFn = async ({ projectDir, pageDir, dataSource, schemaName }) => {\n if (!dataSource) {\n throw new Error(\"DataSource is required for table page\");\n }\n if (!schemaName) {\n throw new Error(\"SchemaName is required for table page\");\n }\n if (dataSource.type !== \"fm\") {\n throw new Error(\"FileMaker DataSource is required for table page\");\n }\n\n const clientSuffix = getClientSuffix({\n projectDir,\n dataSourceName: dataSource.name,\n });\n\n const allFieldNames = getFieldNamesForSchema({\n schemaName,\n dataSourceName: dataSource.name,\n });\n\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n return;\n }\n const auth = settings.auth;\n\n const substitutions = {\n __SOURCE_NAME__: dataSource.name,\n __TYPE_NAME__: `T${schemaName}`,\n __ZOD_TYPE_NAME__: `Z${schemaName}`,\n __CLIENT_NAME__: `${schemaName}${clientSuffix}`,\n __SCHEMA_NAME__: schemaName,\n __ACTION_CLIENT__: auth.type === \"none\" ? \"actionClient\" : \"authedActionClient\",\n __FIRST_FIELD_NAME__: allFieldNames[0] ?? \"NO_FIELDS_ON_YOUR_LAYOUT\",\n };\n\n // read all files in pageDir and loop over them\n const files = await fs.readdir(pageDir);\n for await (const file of files) {\n const filePath = path.join(pageDir, file);\n let fileContent = await fs.readFile(filePath, \"utf8\");\n\n for (const [key, value] of Object.entries(substitutions)) {\n fileContent = fileContent.replace(new RegExp(key, \"g\"), value);\n }\n\n await fs.writeFile(filePath, fileContent, \"utf8\");\n }\n\n // add the schemas to the columns array\n const project = getNewProject(projectDir);\n const sourceFile = project.addSourceFileAtPath(\n path.join(pageDir, state.appType === \"browser\" ? \"table.tsx\" : \"index.tsx\"),\n );\n const columns = sourceFile.getVariableDeclaration(\"columns\")?.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression);\n\n const fieldNames = filterOutCommonFieldNames(allFieldNames.filter(Boolean) as string[]);\n\n for await (const fieldName of fieldNames) {\n columns?.addElement((writer) =>\n writer\n .inlineBlock(() => {\n if (needsBracketNotation(fieldName)) {\n writer.write(`accessorFn: (row) => row[\"${fieldName}\"],`);\n } else {\n writer.write(`accessorFn: (row) => row.${fieldName},`);\n }\n writer.write(`header: \"${fieldName}\",`);\n })\n .write(\",\")\n .newLine(),\n );\n }\n\n if (state.appType === \"webviewer\") {\n const didInject = await injectTanstackQuery({ project });\n if (didInject) {\n await installDependencies();\n }\n }\n\n await formatAndSaveSourceFiles(project);\n};\n\n// Function to check if a field name needs bracket notation\nfunction needsBracketNotation(fieldName: string): boolean {\n // Check if it's a valid JavaScript identifier\n return !VALID_JS_IDENTIFIER.test(fieldName);\n}\n\nconst commonFieldNamesToExclude = [\n \"id\",\n \"pk\",\n \"createdat\",\n \"updatedat\",\n \"primarykey\",\n \"createdby\",\n \"modifiedby\",\n \"creationtimestamp\",\n \"modificationtimestamp\",\n];\n\nfunction filterOutCommonFieldNames(fieldNames: string[]): string[] {\n return fieldNames.filter(\n (fieldName) => !commonFieldNamesToExclude.includes(fieldName.toLowerCase()) || fieldName.startsWith(\"_\"),\n );\n}\n","import { injectTanstackQuery } from \"~/generators/tanstack-query.js\";\nimport { installDependencies } from \"~/helpers/installDependencies.js\";\nimport type { TPostInstallFn } from \"../types.js\";\nimport { postInstallTable } from \"./table.js\";\n\nexport const postInstallTableInfinite: TPostInstallFn = async (args) => {\n await postInstallTable(args);\n const didInject = await injectTanstackQuery();\n if (didInject) {\n await installDependencies();\n }\n};\n","import { postInstallTable } from \"./post-install/table.js\";\nimport { postInstallTableInfinite } from \"./post-install/table-infinite.js\";\nimport type { TPostInstallFn } from \"./types.js\";\n\nexport interface Template {\n requireData: boolean;\n label: string;\n hint?: string;\n templatePath: string;\n screenshot?: string;\n tags?: string[];\n postIntallFn?: TPostInstallFn;\n}\n\nexport const nextjsTemplates: Record<string, Template> = {\n blank: {\n requireData: false,\n label: \"Blank\",\n templatePath: \"nextjs/blank\",\n },\n table: {\n requireData: true,\n label: \"Basic Table\",\n hint: \"Use to load and show multiple records\",\n templatePath: \"nextjs/table\",\n postIntallFn: postInstallTable,\n },\n tableEdit: {\n requireData: true,\n label: \"Basic Table (editable)\",\n hint: \"Use to load and show multiple records with inline edit functionality\",\n templatePath: \"nextjs/table-edit\",\n postIntallFn: postInstallTable,\n },\n tableInfinite: {\n requireData: true,\n label: \"Infinite Table\",\n hint: \"Automatically load more records when the user scrolls to the bottom\",\n templatePath: \"nextjs/table-infinite\",\n postIntallFn: postInstallTableInfinite,\n },\n tableInfiniteEdit: {\n requireData: true,\n label: \"Infinite Table (editable)\",\n hint: \"Automatically load more records when the user scrolls to the bottom with inline edit functionality\",\n templatePath: \"nextjs/table-infinite-edit\",\n postIntallFn: postInstallTableInfinite,\n },\n};\n\nexport const wvTemplates: Record<string, Template> = {\n blank: {\n requireData: false,\n label: \"Blank\",\n templatePath: \"vite-wv/blank\",\n },\n table: {\n requireData: true,\n label: \"Basic Table\",\n hint: \"Use to load and show multiple records\",\n templatePath: \"vite-wv/table\",\n postIntallFn: postInstallTable,\n },\n tableEdit: {\n requireData: true,\n label: \"Basic Table (editable)\",\n hint: \"Use to load and show multiple records with inline edit functionality\",\n templatePath: \"vite-wv/table-edit\",\n postIntallFn: postInstallTable,\n },\n // tableInfinite: {\n // requireData: true,\n // label: \"Infinite Table\",\n // hint: \"Automatically load more records when the user scrolls to the bottom\",\n // templatePath: \"vite-wv/table-infinite\",\n // postIntallFn: postInstallTableInfinite,\n // },\n // tableInfiniteEdit: {\n // requireData: true,\n // label: \"Infinite Table (editable)\",\n // hint: \"Automatically load more records when the user scrolls to the bottom with inline edit functionality\",\n // templatePath: \"vite-wv/table-infinite-edit\",\n // postIntallFn: postInstallTableInfinite,\n // },\n};\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\nimport type { RouteLink } from \"index.js\";\nimport { SyntaxKind } from \"ts-morph\";\n\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\n\nexport async function addRouteToNav({\n projectDir,\n navType,\n ...route\n}: Omit<RouteLink, \"type\"> & {\n projectDir: string;\n navType: \"primary\" | \"secondary\";\n}) {\n const navFilePath = path.join(projectDir, \"src/app/navigation.tsx\");\n\n // If the navigation file doesn't exist (e.g., WebViewer apps), skip adding to nav\n if (!fs.existsSync(navFilePath)) {\n return;\n }\n\n const project = getNewProject(projectDir);\n const sourceFile = project.addSourceFileAtPath(navFilePath);\n sourceFile\n .getVariableDeclaration(navType === \"primary\" ? \"primaryRoutes\" : \"secondaryRoutes\")\n ?.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression)\n ?.addElement((writer) =>\n writer\n .block(() => {\n writer.write(`\n label: \"${route.label}\",\n type: \"link\",\n href: \"${route.href}\",`);\n })\n .write(\",\"),\n );\n\n await formatAndSaveSourceFiles(project);\n}\n","import path from \"node:path\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { capitalize } from \"es-toolkit\";\nimport fs from \"fs-extra\";\nimport { nextjsTemplates, wvTemplates } from \"~/cli/add/page/templates.js\";\nimport * as p from \"~/cli/prompts.js\";\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { getExistingSchemas } from \"~/generators/fmdapi.js\";\nimport { addRouteToNav } from \"~/generators/route.js\";\nimport { debugOption, nonInteractiveOption } from \"~/globalOptions.js\";\nimport { initProgramState, isNonInteractiveMode, state } from \"~/state.js\";\nimport { getUserPkgManager } from \"~/utils/getUserPkgManager.js\";\nimport { type DataSource, getSettings, mergeSettings } from \"~/utils/parseSettings.js\";\nimport { abortIfCancel, ensureProofKitProject } from \"../../utils.js\";\n\nexport const runAddPageAction = async (opts?: {\n routeName?: string;\n pageName?: string;\n dataSourceName?: string;\n schemaName?: string;\n template?: string;\n}) => {\n const projectDir = state.projectDir;\n\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n return p.cancel(\"Adding pages is not yet supported for shadcn-based projects.\");\n }\n\n const templates = state.appType === \"browser\" ? Object.entries(nextjsTemplates) : Object.entries(wvTemplates);\n\n if (templates.length === 0) {\n return p.cancel(\"No templates found for your app type. Check back soon!\");\n }\n\n let routeName = opts?.routeName;\n let replacedMainPage = settings.replacedMainPage;\n\n if (state.appType === \"webviewer\" && !replacedMainPage && !isNonInteractiveMode() && !routeName) {\n const replaceMainPage = abortIfCancel(\n await p.select({\n message: \"Do you want to replace the default page?\",\n options: [\n { label: \"Yes\", value: \"yes\" },\n { label: \"No, maybe later\", value: \"no\" },\n { label: \"No, don't ask again\", value: \"never\" },\n ],\n }),\n );\n if (replaceMainPage === \"never\" || replaceMainPage === \"yes\") {\n replacedMainPage = true;\n }\n\n if (replaceMainPage === \"yes\") {\n routeName = \"/\";\n }\n }\n\n if (!routeName) {\n routeName = abortIfCancel(\n await p.text({\n message: \"Enter the URL PATH for your new page\",\n validate: (value) => {\n if (value.length === 0) {\n return \"URL path is required\";\n }\n return;\n },\n }),\n );\n }\n\n if (!routeName.startsWith(\"/\")) {\n routeName = `/${routeName}`;\n }\n\n const pageName = capitalize(routeName.replace(\"/\", \"\").trim());\n\n const template =\n opts?.template ??\n abortIfCancel(\n await p.select({\n message: \"What template should be used for this page?\",\n options: templates.map(([key, value]) => ({\n value: key,\n label: `${value.label}`,\n hint: value.hint,\n })),\n }),\n );\n\n const pageTemplate = templates.find(([key]) => key === template)?.[1];\n if (!pageTemplate) {\n return p.cancel(`Page template ${template} not found`);\n }\n\n let dataSource: DataSource | undefined;\n let schemaName: string | undefined;\n if (pageTemplate.requireData) {\n if (settings.dataSources.length === 0) {\n return p.cancel(\n \"This template requires a data source, but you don't have any. Add a data source first, or choose another page template\",\n );\n }\n\n const dataSourceName =\n opts?.dataSourceName ??\n (settings.dataSources.length > 1\n ? abortIfCancel(\n await p.select({\n message: \"Which data source should be used for this page?\",\n options: settings.dataSources.map((dataSource) => ({\n value: dataSource.name,\n label: dataSource.name,\n })),\n }),\n )\n : settings.dataSources[0]?.name);\n\n dataSource = settings.dataSources.find((dataSource) => dataSource.name === dataSourceName);\n if (!dataSource) {\n return p.cancel(`Data source ${dataSourceName} not found`);\n }\n\n schemaName = await promptForSchemaFromDataSource({\n projectDir,\n dataSource,\n });\n }\n\n const spinner = p.spinner();\n spinner.start(\"Adding page from template\");\n\n // copy template files\n const templatePath = path.join(PKG_ROOT, \"template/pages\", pageTemplate.templatePath);\n\n const destPath =\n state.appType === \"browser\"\n ? path.join(projectDir, \"src/app/(main)\", routeName)\n : path.join(projectDir, \"src/routes\", routeName);\n\n await fs.copy(templatePath, destPath);\n\n if (state.appType === \"browser\") {\n if (pageName && pageName !== \"\") {\n await addRouteToNav({\n projectDir: process.cwd(),\n navType: \"primary\",\n label: pageName,\n href: routeName,\n });\n }\n } else if (state.appType === \"webviewer\") {\n // TODO: implement\n }\n // call post-install function\n await pageTemplate.postIntallFn?.({\n projectDir,\n pageDir: destPath,\n dataSource,\n schemaName,\n });\n\n if (replacedMainPage !== settings.replacedMainPage) {\n // avoid changing this until the end since the user could cancel early\n mergeSettings({ replacedMainPage });\n }\n\n spinner.stop(\"Added page!\");\n const pkgManager = getUserPkgManager();\n\n console.log(\n `\\n${chalk.green(\"Next steps:\")}\\nTo preview this page, restart your dev server using the ${chalk.cyan(`${pkgManager === \"npm\" ? \"npm run\" : pkgManager} dev`)} command\\n`,\n );\n};\n\nexport const makeAddPageCommand = () => {\n const addPageCommand = new Command(\"page\").description(\"Add a new page to your project\").action(async () => {\n await runAddPageAction();\n });\n\n addPageCommand.addOption(nonInteractiveOption);\n addPageCommand.addOption(debugOption);\n\n addPageCommand.hook(\"preAction\", () => {\n initProgramState(addPageCommand.opts());\n state.baseCommand = \"add\";\n ensureProofKitProject({ commandName: \"add\" });\n });\n\n return addPageCommand;\n};\n\nasync function promptForSchemaFromDataSource({\n projectDir = process.cwd(),\n dataSource,\n}: {\n projectDir?: string;\n dataSource: DataSource;\n}) {\n if (dataSource.type === \"supabase\") {\n throw new Error(\"Not implemented\");\n }\n const schemas = getExistingSchemas({\n projectDir,\n dataSourceName: dataSource.name,\n })\n .map((s) => s.schemaName)\n .filter(Boolean);\n\n if (schemas.length === 0) {\n p.cancel(\"This data source doesn't have any schemas to load data from\");\n return undefined;\n }\n\n if (schemas.length === 1) {\n return schemas[0];\n }\n\n const schemaName = abortIfCancel(\n await p.select({\n message: \"Which schema should this page load data from?\",\n options: schemas.map((schema) => ({ label: schema ?? \"\", value: schema ?? \"\" })),\n }),\n );\n return schemaName;\n}\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = Object.create(null);\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[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;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?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)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?: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])$/;\nconst ipv4CidrRegex = /^(?:(?: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])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([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]))$/;\nconst ipv6CidrRegex = /^(([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])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\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])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n // @ts-ignore\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n // @ts-ignore\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from \"zod/v3\";\nimport fsSync, { promises } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport createJiti from \"jiti\";\n//#region lib/types.ts\nconst registryTypeSchema = z.enum([\n\t\"registry:lib\",\n\t\"registry:block\",\n\t\"registry:component\",\n\t\"registry:ui\",\n\t\"registry:hook\",\n\t\"registry:page\",\n\t\"registry:file\",\n\t\"registry:theme\",\n\t\"registry:style\",\n\t\"registry:item\",\n\t\"registry:example\",\n\t\"registry:internal\"\n]).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.\");\nz.discriminatedUnion(\"type\", [z.object({\n\tpath: z.string(),\n\tcontent: z.string().optional(),\n\ttype: registryTypeSchema.extract([\"registry:file\", \"registry:page\"]),\n\ttarget: z.string()\n}), z.object({\n\tpath: z.string(),\n\tcontent: z.string().optional(),\n\ttype: registryTypeSchema.exclude([\"registry:file\", \"registry:page\"]),\n\ttarget: z.string().optional()\n})]);\n/**\n* Base schema with common fields from shadcn's registryItemSchema.\n* We define our own to avoid importing the heavy shadcn types.\n*/\nconst baseRegistryItemSchema = z.object({\n\t$schema: z.string().optional(),\n\textends: z.string().optional(),\n\ttitle: z.string().optional(),\n\tauthor: z.string().optional(),\n\tdescription: z.string().optional(),\n\tdependencies: z.array(z.string()).optional(),\n\tdevDependencies: z.array(z.string()).optional(),\n\tregistryDependencies: z.array(z.string()).optional(),\n\ttailwind: z.object({ config: z.object({\n\t\tcontent: z.array(z.string()).optional(),\n\t\ttheme: z.record(z.string(), z.any()).optional(),\n\t\tplugins: z.array(z.string()).optional()\n\t}).optional() }).optional(),\n\tcssVars: z.object({\n\t\ttheme: z.record(z.string(), z.string()).optional(),\n\t\tlight: z.record(z.string(), z.string()).optional(),\n\t\tdark: z.record(z.string(), z.string()).optional()\n\t}).optional(),\n\tcss: z.record(z.string(), z.any()).optional(),\n\tenvVars: z.record(z.string(), z.string()).optional(),\n\tmeta: z.record(z.string(), z.any()).optional(),\n\tcategories: z.array(z.string()).optional()\n});\nconst templateFileSchema = z.discriminatedUnion(\"type\", [z.object({\n\tsourceFileName: z.string(),\n\tdestinationPath: z.string().optional(),\n\ttype: registryTypeSchema.extract([\"registry:file\", \"registry:page\"]),\n\thandlebars: z.boolean().optional()\n}), z.object({\n\tsourceFileName: z.string(),\n\tdestinationPath: z.string().optional(),\n\ttype: registryTypeSchema.exclude([\"registry:file\", \"registry:page\"]),\n\thandlebars: z.boolean().optional()\n})]);\nconst buildPostInstallStepsSchema = (action, dataSchema) => {\n\treturn z.object({\n\t\taction: z.literal(action),\n\t\tdata: dataSchema,\n\t\t_from: z.string().optional()\n\t});\n};\nconst postInstallStepsSchema = z.discriminatedUnion(\"action\", [\n\tbuildPostInstallStepsSchema(\"next-steps\", z.object({ message: z.string() })),\n\tbuildPostInstallStepsSchema(\"package.json script\", z.object({\n\t\tscriptName: z.string(),\n\t\tscriptCommand: z.string()\n\t})),\n\tbuildPostInstallStepsSchema(\"env\", z.object({ envs: z.object({\n\t\tname: z.string(),\n\t\tzodValue: z.string(),\n\t\tdefaultValue: z.string().optional().describe(\"This value will be added to the .env file, unless `addToRuntimeEnv` is set to `false`.\"),\n\t\ttype: z.enum([\"server\", \"client\"]),\n\t\taddToRuntimeEnv: z.boolean().optional().describe(\"Whether to add the env to the runtime env.\")\n\t}).array() })),\n\tbuildPostInstallStepsSchema(\"wrap provider\", z.object({\n\t\tproviderOpenTag: z.string().describe(\"The opening tag to use for the provider. This is used to wrap the provider in the correct location.\"),\n\t\tproviderCloseTag: z.string().describe(\"The closing tag to use for the provider.\"),\n\t\timports: z.array(z.object({\n\t\t\tmoduleSpecifier: z.string().describe(\"The module to import from (e.g., '@/config/query-provider')\"),\n\t\t\tdefaultImport: z.string().optional().describe(\"The default import name (e.g., 'QueryProvider')\"),\n\t\t\tnamedImports: z.array(z.string()).optional().describe(\"Array of named imports (e.g., ['QueryProvider', 'useQuery'])\")\n\t\t})).describe(\"Array of import configurations for the provider. Each import should have either defaultImport or namedImports.\"),\n\t\tparentTag: z.array(z.string()).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.\")\n\t}))\n]);\nconst categorySchema = z.enum([\n\t\"component\",\n\t\"page\",\n\t\"utility\",\n\t\"hook\",\n\t\"email\"\n]);\nconst frameworkSchema = z.enum([\n\t\"next-pages\",\n\t\"next-app\",\n\t\"manual\"\n]);\nconst templateMetadataSchema = baseRegistryItemSchema.extend({\n\ttitle: z.string(),\n\tdescription: z.string().optional(),\n\tcategory: categorySchema,\n\tfiles: z.array(templateFileSchema),\n\tregistryType: registryTypeSchema,\n\tpostInstall: z.array(postInstallStepsSchema).optional().describe(\"Steps that should be run by the ProofKit CLI after shadcn CLI is done\"),\n\tminimumProofKitVersion: z.string().describe(\"The minimum version of ProofKit required to use this template\").optional(),\n\tallowedFrameworks: z.array(frameworkSchema).optional(),\n\tschemaRequired: z.boolean().optional().describe(\"Whether this template requires a database schema to be selected\")\n});\nconst registryIndexSchema = z.object({\n\tname: z.string(),\n\ttitle: z.string(),\n\tcategory: categorySchema,\n\tdescription: z.string().optional()\n}).array();\n//#endregion\n//#region lib/utils.ts\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst defaultTemplatesPath = path.resolve(__dirname, \"../templates\");\nconst FILE_EXTENSION_REGEX$1 = /\\.[^/.]+$/;\n/**\n* Scans the templates directory and returns all template directories with _meta.ts files\n*/\nfunction getTemplateDirs$1(root, prefix = \"\") {\n\tconst entries = fsSync.readdirSync(root, { withFileTypes: true });\n\tconst result = [];\n\tfor (const entry of entries) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst dirPath = path.join(root, entry.name);\n\t\tconst rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n\t\tconst files = fsSync.readdirSync(dirPath);\n\t\tif (files.includes(\"_meta.ts\") || files.includes(\"_meta.js\")) result.push(rel);\n\t\tconst nested = getTemplateDirs$1(dirPath, rel);\n\t\tresult.push(...nested);\n\t}\n\treturn result;\n}\n/**\n* Loads template metadata using jiti\n*/\nfunction loadTemplateMeta(templatePath, templatesPath = defaultTemplatesPath) {\n\tconst jiti = createJiti(__filename, {\n\t\tinteropDefault: true,\n\t\trequireCache: false\n\t});\n\tconst templateDir = path.join(templatesPath, templatePath);\n\tconst metaFile = fsSync.readdirSync(templateDir).includes(\"_meta.ts\") ? \"_meta.ts\" : \"_meta.js\";\n\tconst metaModule = jiti(path.join(templateDir, metaFile));\n\tconst meta = metaModule.meta || metaModule.default?.meta || metaModule.default;\n\tif (!meta) throw new Error(`Template ${templatePath}: ${metaFile} must export a 'meta' object`);\n\treturn {\n\t\t...meta,\n\t\tregistryPath: templatePath\n\t};\n}\nfunction getRegistryIndex(templatesPath = defaultTemplatesPath) {\n\treturn getTemplateDirs$1(templatesPath).map((templatePath) => {\n\t\tconst meta = loadTemplateMeta(templatePath, templatesPath);\n\t\treturn {\n\t\t\tname: templatePath,\n\t\t\tcategory: meta.category,\n\t\t\ttitle: meta.title,\n\t\t\tdescription: meta.description\n\t\t};\n\t});\n}\nfunction getNormalizedPath(namePath) {\n\treturn namePath.replace(/^\\/+|\\/+$/g, \"\");\n}\nfunction getOtherProofKitDependencies(meta) {\n\treturn (meta.registryDependencies ?? []).filter((x) => x.startsWith(\"{proofkit}/r/\")).map((x) => x.replace(\"{proofkit}/r/\", \"\")).map(getNormalizedPath);\n}\nasync function getComponentMetaInternal(namePath, visited = /* @__PURE__ */ new Set(), templatesPath = defaultTemplatesPath) {\n\tconst normalized = getNormalizedPath(namePath);\n\tif (visited.has(normalized)) {\n\t\tconst meta = loadTemplateMeta(normalized, templatesPath);\n\t\treturn {\n\t\t\t...meta,\n\t\t\tpostInstall: meta.postInstall ?? []\n\t\t};\n\t}\n\tif (!getTemplateDirs$1(templatesPath).includes(normalized)) throw new Error(`Template \"${normalized}\" not found`);\n\tvisited.add(normalized);\n\tconst meta = loadTemplateMeta(normalized, templatesPath);\n\tconst otherProofKitDependencies = getOtherProofKitDependencies(meta).filter((name) => !visited.has(name));\n\tconst otherProofKitDependenciesMeta = await Promise.all(otherProofKitDependencies.map(async (name) => {\n\t\treturn {\n\t\t\t...await getComponentMetaInternal(name, visited, templatesPath),\n\t\t\tname\n\t\t};\n\t}));\n\treturn {\n\t\t...meta,\n\t\tpostInstall: [...meta.postInstall ?? [], ...otherProofKitDependenciesMeta.flatMap((x) => (x.postInstall ?? []).map((step) => ({\n\t\t\t...step,\n\t\t\t_from: x.name\n\t\t})))]\n\t};\n}\nfunction getComponentMeta(namePath, templatesPath = defaultTemplatesPath) {\n\treturn getComponentMetaInternal(namePath, /* @__PURE__ */ new Set(), templatesPath);\n}\nasync function getStaticComponent(namePath, options) {\n\tconst normalized = getNormalizedPath(namePath);\n\tconst templatesPath = options?.templatesPath ?? defaultTemplatesPath;\n\tconst meta = await getComponentMeta(namePath, templatesPath);\n\tconst files = await Promise.all(meta.files.map(async (file) => {\n\t\tconst sourceFile = file.handlebars ? file.sourceFileName.replace(FILE_EXTENSION_REGEX$1, \".hbs\") : file.sourceFileName;\n\t\tconst contentPath = path.join(templatesPath, normalized, sourceFile);\n\t\tconst content = await promises.readFile(contentPath, \"utf-8\");\n\t\tconst routeName = options?.routeName ?? namePath;\n\t\tconst destinationPath = file.destinationPath ? file.destinationPath?.replace(\"__PATH__\", routeName) : void 0;\n\t\treturn file.type === \"registry:file\" || file.type === \"registry:page\" ? {\n\t\t\tpath: file.sourceFileName,\n\t\t\ttype: file.type,\n\t\t\tcontent,\n\t\t\ttarget: destinationPath ?? file.sourceFileName\n\t\t} : {\n\t\t\tpath: file.sourceFileName,\n\t\t\ttype: file.type,\n\t\t\tcontent,\n\t\t\t...destinationPath ? { target: destinationPath } : {}\n\t\t};\n\t}));\n\treturn {\n\t\t...meta,\n\t\tname: normalized,\n\t\ttype: meta.registryType,\n\t\tfiles\n\t};\n}\n/**\n* Template transformation utilities for handling handlebars syntax in shadcn CLI\n*/\n/**\n* Mapping of handlebars expressions to TypeScript-safe placeholder tokens\n*/\nconst HANDLEBARS_PLACEHOLDERS = {\n\t\"{{schema.schemaName}}\": \"__HB_SCHEMA_NAME__\",\n\t\"{{schema.sourceName}}\": \"__HB_SOURCE_NAME__\",\n\t\"{{schema.clientSuffix}}\": \"__HB_CLIENT_SUFFIX__\"\n};\n/**\n* Converts handlebars expressions in template content to TypeScript-safe placeholder tokens\n* This allows the shadcn CLI to process the templates without TypeScript parsing errors\n*/\nfunction encodeHandlebarsForShadcn(content) {\n\tlet result = content;\n\tfor (const [handlebars, placeholder] of Object.entries(HANDLEBARS_PLACEHOLDERS)) result = result.replace(new RegExp(escapeRegExp(handlebars), \"g\"), placeholder);\n\treturn result;\n}\n/**\n* Converts placeholder tokens back to handlebars expressions\n* This is used by the CLI after shadcn has processed the templates\n*/\nfunction decodeHandlebarsFromShadcn(content) {\n\tlet result = content;\n\tfor (const [handlebars, placeholder] of Object.entries(HANDLEBARS_PLACEHOLDERS)) result = result.replace(new RegExp(escapeRegExp(placeholder), \"g\"), handlebars);\n\treturn result;\n}\n/**\n* Escapes special regex characters in a string\n*/\nfunction escapeRegExp(string) {\n\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n/**\n* Enhanced version of getStaticComponent that applies handlebars encoding for shadcn compatibility\n*/\nasync function getStaticComponentForShadcn(namePath, options) {\n\tconst component = await getStaticComponent(namePath, options);\n\tconst encodedFiles = component.files?.map((file) => {\n\t\tif (file.path.endsWith(\".hbs\") || file.path.endsWith(\".tsx\") || file.path.endsWith(\".ts\")) return {\n\t\t\t...file,\n\t\t\tcontent: encodeHandlebarsForShadcn(file.content ?? \"\")\n\t\t};\n\t\treturn file;\n\t});\n\treturn {\n\t\t...component,\n\t\tfiles: encodedFiles\n\t};\n}\n//#endregion\n//#region lib/validator.ts\nconst FILE_EXTENSION_REGEX = /\\.[^/.]+$/;\n/**\n* Check if a registry template path is valid\n*/\nfunction isValidRegistryTemplate(templatePath, templatesPath) {\n\tconst fullTemplatePath = path.join(templatesPath, templatePath);\n\tconst metaPath = path.join(fullTemplatePath, \"_meta.ts\");\n\treturn fsSync.existsSync(metaPath);\n}\n/**\n* Validate a single template metadata object\n*/\nfunction validateTemplateMetadata(meta, context) {\n\tconst validationResult = templateMetadataSchema.safeParse(meta);\n\tif (!validationResult.success) throw new Error(`Template ${context.templateName}: Invalid metadata structure:\\n${validationResult.error.issues.map((issue) => ` - ${issue.path.join(\".\")}: ${issue.message}`).join(\"\\n\")}`);\n\tconst validatedMeta = validationResult.data;\n\tconst declaredFiles = validatedMeta.files.map((f) => {\n\t\tif (f.handlebars) return f.sourceFileName.replace(FILE_EXTENSION_REGEX, \".hbs\");\n\t\treturn f.sourceFileName;\n\t});\n\tfor (const declaredFile of declaredFiles) {\n\t\tconst filePath = path.resolve(context.templateDir, declaredFile);\n\t\tif (!fsSync.existsSync(filePath)) throw new Error(`Template ${context.templateName}: Declared file '${declaredFile}' does not exist at path '${filePath}'`);\n\t}\n\tconst actualFiles = fsSync.readdirSync(context.templateDir).filter((f) => f !== \"_meta.ts\");\n\tif (declaredFiles.length > 0 && actualFiles.length === 0) throw new Error(`Template ${context.templateName} declares files but has no content files`);\n\tif (validatedMeta.registryDependencies) {\n\t\tfor (const registryRef of validatedMeta.registryDependencies) if (registryRef.startsWith(\"{proofkit}/r/\")) {\n\t\t\tif (!isValidRegistryTemplate(registryRef.replace(\"{proofkit}/r/\", \"\"), context.templatesPath)) throw new Error(`Template ${context.templateName}: Invalid registryDependencies reference '${registryRef}' - template does not exist in the registry`);\n\t\t}\n\t}\n}\nfunction getTemplateDirs(root, prefix = \"\") {\n\tconst entries = fsSync.readdirSync(root, { withFileTypes: true });\n\tconst result = [];\n\tfor (const entry of entries) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst dirPath = path.join(root, entry.name);\n\t\tconst rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n\t\tif (fsSync.readdirSync(dirPath).includes(\"_meta.ts\")) result.push(rel);\n\t\tconst nested = getTemplateDirs(dirPath, rel);\n\t\tresult.push(...nested);\n\t}\n\treturn result;\n}\nfunction validateRegistry() {\n\tconst __filename = fileURLToPath(import.meta.url);\n\tconst __dirname = path.dirname(__filename);\n\tconst templatesPath = path.resolve(__dirname, \"../templates\");\n\tconst jiti = createJiti(__filename, {\n\t\tinteropDefault: true,\n\t\trequireCache: false\n\t});\n\ttry {\n\t\tconst templateDirs = getTemplateDirs(templatesPath);\n\t\tfor (const rel of templateDirs) {\n\t\t\tconst metaPath = path.join(templatesPath, rel, \"_meta.ts\");\n\t\t\tif (!fsSync.existsSync(metaPath)) throw new Error(`Template ${rel} is missing _meta.ts file`);\n\t\t\ttry {\n\t\t\t\tconst metaModule = jiti(metaPath);\n\t\t\t\tconst meta = metaModule.meta || metaModule.default?.meta || metaModule.default;\n\t\t\t\tif (!meta) throw new Error(`Template ${rel}: _meta.ts must export a 'meta' object`);\n\t\t\t\tvalidateTemplateMetadata(meta, {\n\t\t\t\t\ttemplatesPath,\n\t\t\t\t\ttemplateName: rel,\n\t\t\t\t\ttemplateDir: path.join(templatesPath, rel)\n\t\t\t\t});\n\t\t\t} catch (loadError) {\n\t\t\t\tif (loadError instanceof Error && loadError.message.includes(\"Template\")) throw loadError;\n\t\t\t\tthrow new Error(`Template ${rel}: Failed to load _meta.ts - ${loadError}`);\n\t\t\t}\n\t\t}\n\t\tconsole.log(`✅ Registry validation passed for ${templateDirs.length} templates`);\n\t} catch (err) {\n\t\tconsole.error(\"Registry validation failed:\", err);\n\t\tthrow err;\n\t}\n}\n//#endregion\nexport { decodeHandlebarsFromShadcn, encodeHandlebarsForShadcn, frameworkSchema, getComponentMeta, getOtherProofKitDependencies, getRegistryIndex, getStaticComponent, getStaticComponentForShadcn, isValidRegistryTemplate, postInstallStepsSchema, registryIndexSchema, templateFileSchema, templateMetadataSchema, validateRegistry, validateTemplateMetadata };\n\n//# sourceMappingURL=index.js.map","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { execa } from \"execa\";\n\nimport { DEFAULT_REGISTRY_URL } from \"~/consts.js\";\nimport { state } from \"~/state.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { getSettings } from \"~/utils/parseSettings.js\";\n\nexport async function shadcnInstall(components: string | string[], _friendlyComponentName?: string) {\n const componentsArray = Array.isArray(components) ? components : [components];\n const command = [\"shadcn@latest\", \"add\", ...componentsArray];\n // Use execa to run the shadcn add command directly\n\n try {\n await execa(\"pnpm\", [\"dlx\", ...command], {\n stdio: \"inherit\",\n cwd: state.projectDir ?? process.cwd(),\n });\n } catch (error) {\n logger.error(`Failed to run shadcn add: ${error}`);\n throw error;\n }\n}\n\nexport function getRegistryUrl(): string {\n let url: string;\n try {\n url = getSettings().registryUrl ?? DEFAULT_REGISTRY_URL;\n } catch {\n // If we can't get settings (e.g., during development or outside a ProofKit project),\n // fall back to the default registry URL\n url = DEFAULT_REGISTRY_URL;\n }\n return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\nexport interface ShadcnConfig {\n style: \"default\" | \"new-york\";\n tailwind: {\n config: string;\n css: string;\n baseColor: string;\n cssVariables: boolean;\n prefix?: string;\n [k: string]: unknown;\n };\n rsc: boolean;\n tsx?: boolean;\n iconLibrary?: string;\n aliases: {\n utils: string;\n components: string;\n ui?: string;\n lib?: string;\n hooks?: string;\n [k: string]: unknown;\n };\n registries?: {\n [k: string]:\n | string\n | {\n url: string;\n params?: {\n [k: string]: string;\n };\n headers?: {\n [k: string]: string;\n };\n [k: string]: unknown;\n };\n };\n [k: string]: unknown;\n}\n\nexport function getShadcnConfig() {\n const componentsJsonPath = path.join(state.projectDir, \"components.json\");\n const componentsJson = JSON.parse(fs.readFileSync(componentsJsonPath, \"utf8\"));\n return componentsJson as ShadcnConfig;\n}\n","import { createFetch, createSchema } from \"@better-fetch/fetch\";\nimport { registryIndexSchema, templateMetadataSchema } from \"@proofkit/registry\";\n\nimport { getRegistryUrl } from \"~/helpers/shadcn-cli.js\";\n\nconst schema = createSchema({\n \"@get/meta/:name\": {\n output: templateMetadataSchema,\n },\n \"@get/\": {\n output: registryIndexSchema,\n },\n});\n\nexport const registryFetch = createFetch({\n baseURL: `${getRegistryUrl()}/r`,\n schema,\n});\n","import path from \"node:path\";\nimport fg from \"fast-glob\";\nimport fs from \"fs-extra\";\n\nimport { state } from \"~/state.js\";\nimport { registryFetch } from \"./http.js\";\n\nexport async function getMetaFromRegistry(name: string) {\n const result = await registryFetch(\"@get/meta/:name\", {\n params: { name },\n });\n\n if (result.error) {\n if (result.error.status === 404) {\n return null;\n }\n throw new Error(result.error.message);\n }\n\n return result.data;\n}\n\nconst PROJECT_SHARED_IGNORE = [\"**/node_modules/**\", \".next\", \"public\", \"dist\", \"build\"];\n\nexport async function getProjectInfo() {\n const cwd = state.projectDir || process.cwd();\n const [configFiles, isSrcDir] = await Promise.all([\n fg.glob(\"**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*\", {\n cwd,\n deep: 3,\n ignore: PROJECT_SHARED_IGNORE,\n }),\n fs.pathExists(path.resolve(cwd, \"src\")),\n ]);\n\n const isUsingAppDir = await fs.pathExists(path.resolve(cwd, `${isSrcDir ? \"src/\" : \"\"}app`));\n\n // Next.js.\n if (configFiles.find((file) => file.startsWith(\"next.config.\"))?.length) {\n return isUsingAppDir ? \"next-app\" : \"next-pages\";\n }\n\n return \"manual\";\n}\n","import path from \"node:path\";\nimport { decodeHandlebarsFromShadcn, type TemplateFile } from \"@proofkit/registry\";\nimport fs from \"fs-extra\";\nimport handlebars from \"handlebars\";\nimport { getClientSuffix, getFieldNamesForSchema } from \"~/generators/fmdapi.js\";\nimport { getShadcnConfig } from \"~/helpers/shadcn-cli.js\";\nimport { state } from \"~/state.js\";\nimport { type DataSource, getSettings } from \"~/utils/parseSettings.js\";\n\n// Register handlebars helpers\nhandlebars.registerHelper(\"eq\", (a, b) => a === b);\n\ninterface HandlebarsContext {\n [key: string]: unknown;\n}\n\nhandlebars.registerHelper(\"findFirst\", function (this: HandlebarsContext, array, predicate, options) {\n if (!(array && Array.isArray(array))) {\n return options.inverse(this);\n }\n\n for (const item of array) {\n if (predicate === \"fm\" && item.type === \"fm\") {\n return options.fn(item);\n }\n }\n return options.inverse(this);\n});\n\ninterface DataSourceForTemplate {\n dataSource: DataSource;\n schemaName: string;\n}\n\nconst commonFieldNamesToExclude = [\n \"id\",\n \"pk\",\n \"createdat\",\n \"updatedat\",\n \"primarykey\",\n \"createdby\",\n \"modifiedby\",\n \"creationtimestamp\",\n \"modificationtimestamp\",\n];\n\nfunction filterOutCommonFieldNames(fieldNames: string[]): string[] {\n return fieldNames.filter(\n (fieldName) => !commonFieldNamesToExclude.includes(fieldName.toLowerCase()) || fieldName.startsWith(\"_\"),\n );\n}\n\nfunction buildDataSourceData(args: DataSourceForTemplate) {\n const { dataSource, schemaName } = args;\n\n const clientSuffix = getClientSuffix({\n projectDir: state.projectDir ?? process.cwd(),\n dataSourceName: dataSource.name,\n });\n\n const allFieldNames = getFieldNamesForSchema({\n schemaName,\n dataSourceName: dataSource.name,\n }).filter(Boolean) as string[];\n\n return {\n sourceName: dataSource.name,\n schemaName,\n clientSuffix,\n allFieldNames,\n fieldNames: filterOutCommonFieldNames(allFieldNames),\n };\n}\n\nexport function buildHandlebarsData(args?: DataSourceForTemplate) {\n const proofkit = getSettings();\n const shadcn = getShadcnConfig();\n\n return {\n proofkit,\n shadcn,\n schema: args\n ? buildDataSourceData(args)\n : {\n sourceName: \"UnknownDataSource\",\n schemaName: \"UnknownSchema\",\n clientSuffix: \"UnknownClientSuffix\",\n allFieldNames: [\"UnknownFieldName\"],\n fieldNames: [\"UnknownFieldName\"],\n },\n };\n}\n\nexport async function randerHandlebarsToFile(file: TemplateFile, data: ReturnType<typeof buildHandlebarsData>) {\n const inputPath = getFilePath(file, data);\n let rawTemplate = await fs.readFile(inputPath, \"utf8\");\n\n // Decode placeholder tokens back to handlebars syntax\n // This uses the centralized decoding function from the registry package\n rawTemplate = decodeHandlebarsFromShadcn(rawTemplate);\n\n const template = handlebars.compile(rawTemplate);\n const rendered = template(data);\n await fs.writeFile(inputPath, rendered);\n}\n\nexport function getFilePath(file: TemplateFile, data: ReturnType<typeof buildHandlebarsData>): string {\n const thePath = file.sourceFileName;\n\n if (file.destinationPath) {\n return file.destinationPath;\n }\n\n const cwd = state.projectDir ?? process.cwd();\n const { shadcn } = data;\n\n // Create a mapping between registry types and their corresponding shadcn config aliases\n let blockAlias = \"src/components/blocks\";\n if (shadcn?.aliases?.components) {\n if (shadcn.aliases.components.startsWith(\"@/\")) {\n blockAlias = `${shadcn.aliases.components.replace(\"@/\", \"src/\")}/blocks`;\n } else {\n blockAlias = `src/${shadcn.aliases.components}/blocks`;\n }\n }\n\n const typeToAliasMap: Record<string, string | undefined> = {\n \"registry:lib\": shadcn?.aliases?.lib || shadcn?.aliases?.utils,\n \"registry:component\": shadcn?.aliases?.components,\n \"registry:ui\": shadcn?.aliases?.ui || shadcn?.aliases?.components,\n \"registry:hook\": shadcn?.aliases?.hooks,\n // These types don't have direct aliases, so we use fallback paths\n \"registry:file\": \"src\",\n \"registry:page\": \"src/app\",\n \"registry:block\": blockAlias,\n \"registry:theme\": \"src/theme\",\n \"registry:style\": \"src/styles\",\n };\n\n const aliasPath = typeToAliasMap[file.type];\n\n if (aliasPath) {\n // Handle @/ prefix which represents the src directory\n if (aliasPath.startsWith(\"@/\")) {\n const resolvedPath = aliasPath.replace(\"@/\", \"src/\");\n return path.join(cwd, resolvedPath, thePath);\n }\n // If the alias starts with a path separator or contains src/, treat it as a relative path from cwd\n if (aliasPath.startsWith(\"/\") || aliasPath.includes(\"src/\")) {\n return path.join(cwd, aliasPath, thePath);\n }\n // Otherwise, treat it as an alias that should be resolved relative to src/\n\n return path.join(cwd, \"src\", aliasPath, thePath);\n }\n\n // Fallback to hardcoded paths for unsupported types\n switch (file.type) {\n case \"registry:lib\":\n return path.join(cwd, \"src\", \"lib\", thePath);\n case \"registry:file\":\n return path.join(cwd, \"src\", thePath);\n case \"registry:page\": {\n // For page templates, use the route name if available in template data\n const routeName = \"routeName\" in data ? (data.routeName as string) : undefined;\n if (routeName) {\n // Add /(main) prefix for Next.js app router structure\n const pageRoute = routeName === \"/\" ? \"\" : routeName;\n return path.join(cwd, \"src\", \"app\", \"(main)\", pageRoute, thePath);\n }\n return path.join(cwd, \"src\", \"app\", thePath);\n }\n case \"registry:block\":\n return path.join(cwd, \"src\", \"components\", \"blocks\", thePath);\n case \"registry:component\":\n return path.join(cwd, \"src\", \"components\", thePath);\n case \"registry:ui\":\n return path.join(cwd, \"src\", \"components\", thePath);\n case \"registry:hook\":\n return path.join(cwd, \"src\", \"hooks\", thePath);\n case \"registry:theme\":\n return path.join(cwd, \"src\", \"theme\", thePath);\n case \"registry:style\":\n return path.join(cwd, \"src\", \"styles\", thePath);\n default:\n // default to source file name\n return thePath;\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { PostInstallStep } from \"@proofkit/registry\";\n\nimport { state } from \"~/state.js\";\n\nexport function addScriptToPackageJson(step: Extract<PostInstallStep, { action: \"package.json script\" }>) {\n const packageJsonPath = path.join(state.projectDir, \"package.json\");\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n packageJson.scripts[step.data.scriptName] = step.data.scriptCommand;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n}\n","import path from \"node:path\";\nimport type { PostInstallStep } from \"@proofkit/registry\";\nimport { type ImportDeclarationStructure, type JsxChild, type JsxElement, StructureKind, SyntaxKind } from \"ts-morph\";\n\nimport { getShadcnConfig } from \"~/helpers/shadcn-cli.js\";\nimport { state } from \"~/state.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { formatAndSaveSourceFiles, getNewProject } from \"~/utils/ts-morph.js\";\n\nexport async function wrapProvider(step: Extract<PostInstallStep, { action: \"wrap provider\" }>) {\n const { parentTag, imports: importConfigs, providerCloseTag, providerOpenTag } = step.data;\n\n try {\n const projectDir = state.projectDir;\n const project = getNewProject(projectDir);\n const shadcnConfig = getShadcnConfig();\n\n // Resolve the components alias to a filesystem path\n // @/components -> src/components, ./components -> components, etc.\n const resolveAlias = (alias: string): string => {\n if (alias.startsWith(\"@/\")) {\n return alias.replace(\"@/\", \"src/\");\n }\n if (alias.startsWith(\"./\")) {\n return alias.substring(2);\n }\n return alias;\n };\n\n // Look for providers.tsx in the components directory\n const componentsDir = resolveAlias(shadcnConfig.aliases.components);\n const providersPath = path.join(projectDir, componentsDir, \"providers.tsx\");\n\n const providersFile = project.addSourceFileAtPath(providersPath);\n\n // Add all import statements\n for (const importConfig of importConfigs) {\n const importDeclaration: ImportDeclarationStructure = {\n moduleSpecifier: importConfig.moduleSpecifier,\n kind: StructureKind.ImportDeclaration,\n };\n\n if (importConfig.defaultImport) {\n importDeclaration.defaultImport = importConfig.defaultImport;\n }\n\n if (importConfig.namedImports && importConfig.namedImports.length > 0) {\n importDeclaration.namedImports = importConfig.namedImports;\n }\n\n providersFile.addImportDeclaration(importDeclaration);\n }\n\n // Handle providers.tsx file - look for the default export function\n const exportDefault = providersFile.getFunction((dec) => dec.isDefaultExport());\n\n if (!exportDefault) {\n logger.warn(`No default export function found in ${providersPath}`);\n return;\n }\n\n const returnStatement = exportDefault?.getBody()?.getFirstDescendantByKind(SyntaxKind.ReturnStatement);\n\n if (!returnStatement) {\n logger.warn(\"No return statement found in default export function\");\n return;\n }\n\n let targetElement: JsxElement | undefined;\n\n // Try to find the parent tag if specified\n if (parentTag && parentTag.length > 0) {\n for (const tag of parentTag) {\n targetElement = returnStatement\n ?.getDescendantsOfKind(SyntaxKind.JsxOpeningElement)\n .find((openingElement) => openingElement.getTagNameNode().getText() === tag)\n ?.getParentIfKind(SyntaxKind.JsxElement);\n\n if (targetElement) {\n break;\n }\n }\n }\n\n if (targetElement) {\n // If we found a parent tag, wrap its children\n const childrenText = targetElement\n ?.getJsxChildren()\n .map((child: JsxChild) => child.getText())\n .filter(Boolean)\n .join(\"\\n\");\n\n const newContent = `${providerOpenTag}\n ${childrenText}\n ${providerCloseTag}`;\n\n targetElement.getChildSyntaxList()?.replaceWithText(newContent);\n } else {\n // If no parent tag found or specified, wrap the entire return statement\n const returnExpression = returnStatement?.getExpression();\n if (returnExpression) {\n // Check if the expression is a ParenthesizedExpression\n const isParenthesized = returnExpression.getKind() === SyntaxKind.ParenthesizedExpression;\n\n let innerExpressionText: string;\n if (isParenthesized) {\n // Get the inner expression from the parenthesized expression\n const parenthesizedExpr = returnExpression.asKindOrThrow(SyntaxKind.ParenthesizedExpression);\n innerExpressionText = parenthesizedExpr.getExpression().getText();\n } else {\n innerExpressionText = returnExpression.getText();\n }\n\n const newReturnContent = `return (\n ${providerOpenTag}\n ${innerExpressionText}\n ${providerCloseTag}\n );`;\n\n returnStatement?.replaceWithText(newReturnContent);\n } else {\n logger.warn(\"No return expression found to wrap\");\n }\n }\n\n await formatAndSaveSourceFiles(project);\n logger.success(`Successfully wrapped provider in ${providersPath}`);\n } catch (error) {\n logger.error(`Failed to wrap provider: ${error}`);\n throw error;\n }\n}\n","import type { PostInstallStep } from \"@proofkit/registry\";\n\nimport { addToEnv } from \"~/utils/addToEnvs.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { addScriptToPackageJson } from \"./package-script.js\";\nimport { wrapProvider } from \"./wrap-provider.js\";\n\nexport async function processPostInstallStep(step: PostInstallStep) {\n if (step.action === \"package.json script\") {\n addScriptToPackageJson(step);\n } else if (step.action === \"wrap provider\") {\n await wrapProvider(step);\n } else if (step.action === \"next-steps\") {\n logger.info(step.data.message);\n } else if (step.action === \"env\") {\n await addToEnv({\n envs: step.data.envs,\n });\n } else {\n logger.error(`Unknown post-install step: ${step}`);\n }\n}\n","import fs from \"fs-extra\";\n\nimport { defaultSettings, setSettings, validateAndSetEnvFile } from \"~/utils/parseSettings.js\";\n\n/**\n * Used to add a proofkit.json file to an existing project\n */\nexport async function stealthInit() {\n // check if proofkit.json exists\n const proofkitJson = await fs.pathExists(\"proofkit.json\");\n if (proofkitJson) {\n return;\n }\n\n // create proofkit.json with default settings\n setSettings(defaultSettings);\n\n // validate and set envFile only if it exists\n validateAndSetEnvFile();\n}\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\n\nimport { stealthInit } from \"~/helpers/stealth-init.js\";\nimport { state } from \"~/state.js\";\n\nexport async function preflightAddCommand() {\n const cwd = state.projectDir ?? process.cwd();\n // make sure shadcn is installed, throw if not\n const shadcnInstalled = await fs.pathExists(path.join(cwd, \"components.json\"));\n if (!shadcnInstalled) {\n throw new Error(\"Shadcn is not installed. Please run `pnpm dlx shadcn@latest init` to install it.\");\n }\n\n // if proofkit is not inited, try to stealth init\n await stealthInit();\n}\n","import { getOtherProofKitDependencies } from \"@proofkit/registry\";\nimport { capitalize, uniq } from \"es-toolkit\";\nimport ora from \"ora\";\nimport semver from \"semver\";\nimport * as p from \"~/cli/prompts.js\";\n\nimport { abortIfCancel } from \"~/cli/utils.js\";\nimport { getExistingSchemas } from \"~/generators/fmdapi.js\";\nimport { addRouteToNav } from \"~/generators/route.js\";\nimport { getRegistryUrl, shadcnInstall } from \"~/helpers/shadcn-cli.js\";\nimport { state } from \"~/state.js\";\nimport { getVersion } from \"~/utils/getProofKitVersion.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { type DataSource, getSettings, mergeSettings } from \"~/utils/parseSettings.js\";\nimport { getMetaFromRegistry } from \"./getOptions.js\";\nimport { buildHandlebarsData, randerHandlebarsToFile } from \"./postInstall/handlebars.js\";\nimport { processPostInstallStep } from \"./postInstall/index.js\";\nimport { preflightAddCommand } from \"./preflight.js\";\n\nasync function promptForSchemaFromDataSource({\n projectDir = process.cwd(),\n dataSource,\n}: {\n projectDir?: string;\n dataSource: DataSource;\n}) {\n if (dataSource.type === \"supabase\") {\n throw new Error(\"Not implemented\");\n }\n const schemas = getExistingSchemas({\n projectDir,\n dataSourceName: dataSource.name,\n })\n .map((s) => s.schemaName)\n .filter((schemaName): schemaName is string => Boolean(schemaName));\n\n if (schemas.length === 0) {\n p.cancel(\"This data source doesn't have any schemas to load data from\");\n return undefined;\n }\n\n if (schemas.length === 1) {\n return schemas[0];\n }\n\n const schemaName = abortIfCancel(\n await p.select({\n message: \"Which schema should this template use?\",\n options: schemas.map((schema) => ({ label: schema, value: schema })),\n }),\n );\n return schemaName;\n}\n\nexport async function installFromRegistry(name: string) {\n const spinner = ora(\"Validating template\").start();\n\n try {\n await preflightAddCommand();\n const meta = await getMetaFromRegistry(name);\n if (!meta) {\n spinner.fail(`Template ${name} not found in the ProofKit registry`);\n return;\n }\n\n if (meta.minimumProofKitVersion && semver.gt(meta.minimumProofKitVersion, getVersion())) {\n logger.error(\n `Template ${name} requires ProofKit version ${meta.minimumProofKitVersion}, but you are using version ${getVersion()}`,\n );\n spinner.fail(\"Template is not compatible with your ProofKit version\");\n return;\n }\n spinner.succeed();\n\n const otherProofKitDependencies = getOtherProofKitDependencies(meta);\n let previouslyInstalledTemplates = getSettings().registryTemplates;\n\n // Handle schema requirement if template needs it\n let dataSource: DataSource | undefined;\n let schemaName: string | undefined;\n let routeName: string | undefined;\n let pageName: string | undefined;\n\n if (meta.schemaRequired) {\n const settings = getSettings();\n\n if (settings.dataSources.length === 0) {\n spinner.fail(\"This template requires a data source, but you don't have any. Add a data source first.\");\n return;\n }\n\n const dataSourceName =\n settings.dataSources.length > 1\n ? abortIfCancel(\n await p.select({\n message: \"Which data source should be used for this template?\",\n options: settings.dataSources.map((ds) => ({\n value: ds.name,\n label: ds.name,\n })),\n }),\n )\n : settings.dataSources[0]?.name;\n\n dataSource = settings.dataSources.find((ds) => ds.name === dataSourceName);\n\n if (!dataSource) {\n spinner.fail(`Data source ${dataSourceName} not found`);\n return;\n }\n\n schemaName = await promptForSchemaFromDataSource({\n projectDir: state.projectDir,\n dataSource,\n });\n\n if (!schemaName) {\n spinner.fail(\"Schema selection was cancelled\");\n return;\n }\n }\n\n if (meta.category === \"page\") {\n // Prompt user for the URL path of the page\n routeName = abortIfCancel(\n await p.text({\n message: \"Enter the URL PATH for your new page\",\n validate: (value) => {\n if (value.length === 0) {\n return \"URL path is required\";\n }\n return;\n },\n }),\n );\n\n if (routeName.startsWith(\"/\")) {\n routeName = routeName.slice(1);\n }\n\n pageName = capitalize(routeName.replace(\"/\", \"\").trim());\n }\n\n const url = new URL(`${getRegistryUrl()}/r/${name}`);\n if (meta.category === \"page\") {\n url.searchParams.set(\"routeName\", `/(main)/${routeName ?? name}`);\n }\n\n // a (hopefully) temporary workaround because the shadcn command installs the env file in the wrong place if it's a dependency\n if (\n name === \"fmdapi\" &&\n !previouslyInstalledTemplates.includes(\"utils/t3-env\") &&\n // this last guard will allow this workaroudn to be bypassed if the registry server updates to start serving the dependency again\n meta.registryDependencies?.find((d) => d.includes(\"utils/t3-env\")) === undefined\n ) {\n // install the t3-env template manually first\n await installFromRegistry(\"utils/t3-env\");\n previouslyInstalledTemplates = getSettings().registryTemplates;\n }\n\n // now install the template using shadcn-install\n await shadcnInstall([url.toString()], meta.title);\n\n const handlebarsFiles = meta.files.filter((file) => file.handlebars);\n\n if (handlebarsFiles.length > 0) {\n // Build template data with schema information if available\n const baseTemplateData =\n dataSource && schemaName\n ? buildHandlebarsData({\n dataSource,\n schemaName,\n })\n : buildHandlebarsData();\n\n // Add page information to template data if available\n const templateData = {\n ...baseTemplateData,\n ...(routeName && { routeName }),\n ...(pageName && { pageName }),\n };\n\n // Resolve __PATH__ placeholders in file paths before handlebars processing\n const resolvedFiles = handlebarsFiles.map((file) => ({\n ...file,\n destinationPath: file.destinationPath?.replace(\"__PATH__\", `/(main)/${routeName ?? name}`),\n }));\n\n for (const file of resolvedFiles) {\n await randerHandlebarsToFile(file, templateData);\n }\n }\n\n // Add route to navigation if this is a page template\n if (meta.category === \"page\" && routeName && pageName) {\n await addRouteToNav({\n projectDir: state.projectDir,\n navType: \"primary\",\n label: pageName,\n href: `/${routeName}`,\n });\n }\n\n // if post-install steps, process those\n if (meta.postInstall) {\n for (const step of meta.postInstall) {\n if (step._from && previouslyInstalledTemplates.includes(step._from)) {\n // don't re-run post-install steps for templates that have already been installed\n continue;\n }\n await processPostInstallStep(step);\n }\n }\n\n // update the settings\n mergeSettings({\n registryTemplates: uniq([...previouslyInstalledTemplates, name, ...otherProofKitDependencies]),\n });\n } catch (error) {\n spinner.fail(\"Failed to fetch template metadata.\");\n logger.error(error);\n }\n}\n","import { registryFetch } from \"./http.js\";\n\nexport async function listItems() {\n const { data: items, error } = await registryFetch(\"@get/\");\n if (error) {\n throw new Error(`Failed to fetch items from registry: ${error.message}`);\n }\n return items;\n}\n","import type { RegistryIndex } from \"@proofkit/registry\";\nimport { Command } from \"commander\";\nimport { capitalize, groupBy, uniq } from \"es-toolkit\";\nimport ora from \"ora\";\nimport { select } from \"~/cli/prompts.js\";\nimport { debugOption, nonInteractiveOption } from \"~/globalOptions.js\";\nimport { initProgramState, state } from \"~/state.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { getSettings, type Settings } from \"~/utils/parseSettings.js\";\nimport { runAddReactEmailCommand } from \"../react-email.js\";\nimport { runAddTanstackQueryCommand } from \"../tanstack-query.js\";\nimport { abortIfCancel, ensureProofKitProject } from \"../utils.js\";\nimport { makeAddAddonCommand, runAddAddonAction } from \"./addon.js\";\nimport { makeAddAuthCommand, runAddAuthAction } from \"./auth.js\";\nimport { makeAddDataSourceCommand, runAddDataSourceCommand } from \"./data-source/index.js\";\nimport { makeAddSchemaCommand, runAddSchemaAction } from \"./fmschema.js\";\nimport { makeAddPageCommand, runAddPageAction } from \"./page/index.js\";\nimport { installFromRegistry } from \"./registry/install.js\";\nimport { listItems } from \"./registry/listItems.js\";\nimport { preflightAddCommand } from \"./registry/preflight.js\";\n\nconst runAddFromRegistry = async (_options?: { noInstall?: boolean }) => {\n const settings = getSettings();\n\n const spinner = ora(\"Loading available components...\").start();\n let items: RegistryIndex;\n try {\n items = await listItems();\n } catch (error) {\n spinner.fail(\"Failed to load registry components\");\n logger.error(error);\n return;\n }\n\n const itemsNotInstalled = items.filter((item) => !settings.registryTemplates.includes(item.name));\n\n const groupedByCategory = groupBy(itemsNotInstalled, (item) => item.category);\n const categories = uniq(itemsNotInstalled.map((item) => item.category));\n\n spinner.succeed();\n\n const addType = abortIfCancel(\n await select({\n message: \"What do you want to add to your project?\",\n options: [\n // if there are pages available to install, show them first\n ...(categories.includes(\"page\") ? [{ label: \"Page\", value: \"page\" }] : []),\n\n // only show schema option if there is at least one data source\n ...(settings.dataSources.length > 0\n ? [\n {\n label: \"Schema\",\n value: \"schema\",\n hint: \"load data from a new table or layout from an existing data source\",\n },\n ]\n : []),\n\n {\n label: \"Data Source\",\n value: \"data\",\n hint: \"to connect to a new database or FileMaker file\",\n },\n\n // show the rest of the categories\n ...categories\n .filter((category) => category !== \"page\")\n .map((category) => ({\n label: capitalize(category),\n value: category,\n })),\n ],\n }),\n );\n\n if (addType === \"schema\") {\n await runAddSchemaAction();\n } else if (addType === \"data\") {\n await runAddDataSourceCommand();\n } else if ((categories as string[]).includes(addType)) {\n // one of the categories\n const itemsFromCategory = groupedByCategory[addType as keyof typeof groupedByCategory];\n\n const itemName = abortIfCancel(\n await select({\n message: `Select a ${addType} to add to your project`,\n options: itemsFromCategory.map((item) => ({\n label: item.title,\n hint: item.description,\n value: item.name,\n })),\n }),\n );\n\n await installFromRegistry(itemName);\n } else {\n logger.error(`Could not find any available components in the category \"${addType}\"`);\n }\n};\n\nexport const runAdd = async (name: string | undefined, options?: { noInstall?: boolean; target?: string }) => {\n if (name === \"addon\") {\n return await runAddAddonAction(options?.target);\n }\n if (name === \"tanstack-query\") {\n return await runAddTanstackQueryCommand();\n }\n if (name !== undefined) {\n // an arbitrary name was provided, so we'll try to install from the registry\n return await installFromRegistry(name);\n }\n\n let settings: Settings;\n try {\n settings = getSettings();\n } catch {\n await preflightAddCommand();\n return await runAddFromRegistry(options);\n }\n\n if (settings.ui === \"shadcn\") {\n return await runAddFromRegistry(options);\n }\n ensureProofKitProject({ commandName: \"add\" });\n\n const addType = abortIfCancel(\n await select({\n message: \"What do you want to add to your project?\",\n options: [\n { label: \"Page\", value: \"page\" },\n // only show schema option if there is at least one data source\n ...(settings.dataSources.length > 0\n ? [\n {\n label: \"Schema\",\n value: \"schema\",\n hint: \"load data from a new table or layout from an existing data source\",\n },\n ]\n : []),\n { label: \"React Email\", value: \"react-email\" },\n {\n label: \"Data Source\",\n value: \"data\",\n hint: \"to connect to a new database or FileMaker file\",\n },\n ...(settings.auth.type === \"none\" && settings.appType === \"browser\" ? [{ label: \"Auth\", value: \"auth\" }] : []),\n ],\n }),\n );\n\n if (addType === \"auth\") {\n await runAddAuthAction();\n } else if (addType === \"data\") {\n await runAddDataSourceCommand();\n } else if (addType === \"page\") {\n await runAddPageAction();\n } else if (addType === \"schema\") {\n await runAddSchemaAction();\n } else if (addType === \"react-email\") {\n await runAddReactEmailCommand({ noInstall: options?.noInstall });\n }\n};\n\nexport const makeAddCommand = () => {\n const addCommand = new Command(\"add\")\n .description(\"Add a new component to your project\")\n .argument(\"[name]\", \"Type of component to add\")\n .addOption(nonInteractiveOption)\n .addOption(debugOption)\n .option(\"--noInstall\", \"Do not run your package manager install command\", false)\n .action(async (name, options) => {\n await runAdd(name, options);\n });\n\n addCommand.hook(\"preAction\", (_thisCommand, _actionCommand) => {\n // console.log(\"preAction\", _actionCommand.opts());\n initProgramState(_actionCommand.opts());\n state.baseCommand = \"add\";\n });\n addCommand.hook(\"preSubcommand\", (_thisCommand, _subCommand) => {\n // console.log(\"preSubcommand\", _subCommand.opts());\n initProgramState(_subCommand.opts());\n state.baseCommand = \"add\";\n });\n\n addCommand.addCommand(makeAddAuthCommand());\n addCommand.addCommand(makeAddAddonCommand());\n addCommand.addCommand(makeAddPageCommand());\n addCommand.addCommand(makeAddSchemaCommand());\n addCommand.addCommand(makeAddDataSourceCommand());\n return addCommand;\n};\n"],"x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,37,38,39,40,41,42,43],"mappings":"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"}