@proofkit/cli 1.2.0-beta.1 → 2.0.0-beta.1

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 (130) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/dist/add-CfoeMDFa.js +57 -0
  3. package/dist/add-CfoeMDFa.js.map +1 -0
  4. package/dist/addPackageDependency-BE76r_Gs.js +4 -0
  5. package/dist/addPackageDependency-BE76r_Gs.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-ib8_w4Q8.js +34 -0
  9. package/dist/deploy-ib8_w4Q8.js.map +1 -0
  10. package/dist/fmdapi-LpkpfSZp.js +3 -0
  11. package/dist/fmdapi-LpkpfSZp.js.map +1 -0
  12. package/dist/getUserPkgManager-Cph_6l1P.js +2 -0
  13. package/dist/getUserPkgManager-Cph_6l1P.js.map +1 -0
  14. package/dist/globalOptions-DmUayYY3.js +2 -0
  15. package/dist/globalOptions-DmUayYY3.js.map +1 -0
  16. package/dist/index-dr0nV3hP.d.ts +365 -0
  17. package/dist/index-dr0nV3hP.d.ts.map +1 -0
  18. package/dist/index.js +11 -147
  19. package/dist/index.js.map +1 -0
  20. package/dist/logger-DCEXcH26.js +2 -0
  21. package/dist/logger-DCEXcH26.js.map +1 -0
  22. package/dist/parseSettings-DYvHU8yJ.js +2 -0
  23. package/dist/parseSettings-DYvHU8yJ.js.map +1 -0
  24. package/dist/remove-D-aGocFU.js +2 -0
  25. package/dist/remove-D-aGocFU.js.map +1 -0
  26. package/dist/state-CiURqLoM.js +41 -0
  27. package/dist/state-CiURqLoM.js.map +1 -0
  28. package/dist/typegen-CNWUG1wR.js +2 -0
  29. package/dist/typegen-CNWUG1wR.js.map +1 -0
  30. package/dist/update-CDaX7MZ5.js +7 -0
  31. package/dist/update-CDaX7MZ5.js.map +1 -0
  32. package/dist/utils-CQMjIwwz.js +3 -0
  33. package/dist/utils-CQMjIwwz.js.map +1 -0
  34. package/package.json +61 -53
  35. package/template/extras/emailTemplates/auth-code.tsx +7 -26
  36. package/template/extras/emailTemplates/generic.tsx +8 -31
  37. package/template/extras/fmaddon-auth/emails/auth-code.tsx +7 -26
  38. package/template/extras/src/app/api/auth/[...nextauth]/route.ts +1 -1
  39. package/template/extras/src/server/next-auth/base.ts +3 -3
  40. package/template/fm-addon/ProofKitWV/de.xml +517 -20
  41. package/template/fm-addon/ProofKitWV/en.xml +517 -20
  42. package/template/fm-addon/ProofKitWV/es.xml +517 -20
  43. package/template/fm-addon/ProofKitWV/fr.xml +517 -20
  44. package/template/fm-addon/ProofKitWV/icon.png +0 -0
  45. package/template/fm-addon/ProofKitWV/icon@2x.png +0 -0
  46. package/template/fm-addon/ProofKitWV/info.json +9 -6
  47. package/template/fm-addon/ProofKitWV/info_de.json +12 -5
  48. package/template/fm-addon/ProofKitWV/info_en.json +16 -5
  49. package/template/fm-addon/ProofKitWV/info_es.json +12 -5
  50. package/template/fm-addon/ProofKitWV/info_fr.json +12 -5
  51. package/template/fm-addon/ProofKitWV/info_it.json +12 -5
  52. package/template/fm-addon/ProofKitWV/info_ja.json +12 -5
  53. package/template/fm-addon/ProofKitWV/info_ko.json +12 -5
  54. package/template/fm-addon/ProofKitWV/info_nl.json +12 -5
  55. package/template/fm-addon/ProofKitWV/info_pt.json +12 -5
  56. package/template/fm-addon/ProofKitWV/info_sv.json +12 -5
  57. package/template/fm-addon/ProofKitWV/info_zh.json +12 -5
  58. package/template/fm-addon/ProofKitWV/it.xml +517 -20
  59. package/template/fm-addon/ProofKitWV/ja.xml +517 -20
  60. package/template/fm-addon/ProofKitWV/ko.xml +517 -20
  61. package/template/fm-addon/ProofKitWV/nl.xml +517 -20
  62. package/template/fm-addon/ProofKitWV/preview.png +0 -0
  63. package/template/fm-addon/ProofKitWV/pt.xml +517 -20
  64. package/template/fm-addon/ProofKitWV/records_de.xml +0 -0
  65. package/template/fm-addon/ProofKitWV/records_en.xml +0 -0
  66. package/template/fm-addon/ProofKitWV/records_es.xml +0 -0
  67. package/template/fm-addon/ProofKitWV/records_fr.xml +0 -0
  68. package/template/fm-addon/ProofKitWV/records_it.xml +0 -0
  69. package/template/fm-addon/ProofKitWV/records_ja.xml +0 -0
  70. package/template/fm-addon/ProofKitWV/records_ko.xml +0 -0
  71. package/template/fm-addon/ProofKitWV/records_nl.xml +0 -0
  72. package/template/fm-addon/ProofKitWV/records_pt.xml +0 -0
  73. package/template/fm-addon/ProofKitWV/records_sv.xml +0 -0
  74. package/template/fm-addon/ProofKitWV/records_zh.xml +0 -0
  75. package/template/fm-addon/ProofKitWV/sv.xml +517 -20
  76. package/template/fm-addon/ProofKitWV/template.xml +0 -0
  77. package/template/fm-addon/ProofKitWV/zh.xml +517 -20
  78. package/template/nextjs-mantine/AGENTS.md +1 -0
  79. package/template/nextjs-mantine/package.json +4 -4
  80. package/template/nextjs-shadcn/AGENTS.md +1 -0
  81. package/template/nextjs-shadcn/biome.json +18 -13
  82. package/template/nextjs-shadcn/package.json +11 -9
  83. package/template/nextjs-shadcn/src/app/layout.tsx +11 -11
  84. package/template/nextjs-shadcn/src/components/mode-toggle.tsx +39 -0
  85. package/template/nextjs-shadcn/src/components/ui/button.tsx +61 -0
  86. package/template/nextjs-shadcn/src/components/ui/dropdown-menu.tsx +267 -0
  87. package/template/nextjs-shadcn/src/components/ui/sonner.tsx +31 -0
  88. package/template/nextjs-shadcn/src/lib/env.ts +1 -1
  89. package/template/pages/nextjs/table-infinite/actions.ts +1 -1
  90. package/template/pages/nextjs/table-infinite-edit/actions.ts +1 -1
  91. package/template/vite-wv/.claude/launch.json +18 -0
  92. package/template/vite-wv/AGENTS.md +1 -0
  93. package/template/vite-wv/_gitignore +1 -0
  94. package/template/vite-wv/components.json +6 -6
  95. package/template/vite-wv/index.html +2 -2
  96. package/template/vite-wv/package.json +21 -35
  97. package/template/vite-wv/proofkit-typegen.config.jsonc +18 -0
  98. package/template/vite-wv/proofkit.json +4 -1
  99. package/template/vite-wv/scripts/filemaker.js +96 -0
  100. package/template/vite-wv/scripts/launch-fm.js +19 -0
  101. package/template/vite-wv/scripts/upload.js +17 -14
  102. package/template/vite-wv/src/App.tsx +84 -0
  103. package/template/vite-wv/src/index.css +96 -0
  104. package/template/vite-wv/src/lib/utils.ts +6 -0
  105. package/template/vite-wv/src/main.tsx +14 -35
  106. package/template/vite-wv/src/router.tsx +57 -0
  107. package/template/vite-wv/src/routes/query-demo.tsx +37 -0
  108. package/template/vite-wv/tsconfig.json +3 -1
  109. package/template/vite-wv/vite.config.ts +5 -5
  110. package/dist/external-DCpQkgKf.js +0 -1
  111. package/template/extras/config/_eslint.js +0 -27
  112. package/template/extras/config/_prettier.config.js +0 -6
  113. package/template/nextjs-mantine/.prettierrc +0 -3
  114. package/template/nextjs-shadcn/.prettierrc +0 -3
  115. package/template/nextjs-shadcn/next-env.d.ts +0 -6
  116. package/template/vite-wv/.prettierrc +0 -3
  117. package/template/vite-wv/pnpm-lock.yaml +0 -2294
  118. package/template/vite-wv/postcss.config.cjs +0 -15
  119. package/template/vite-wv/scripts/launch-fm.sh +0 -3
  120. package/template/vite-wv/src/components/AppLogo.tsx +0 -5
  121. package/template/vite-wv/src/components/full-screen-loader.tsx +0 -9
  122. package/template/vite-wv/src/config/env.ts +0 -16
  123. package/template/vite-wv/src/config/theme/globals.css +0 -125
  124. package/template/vite-wv/src/config/theme/mantine-theme.ts +0 -22
  125. package/template/vite-wv/src/routeTree.gen.ts +0 -111
  126. package/template/vite-wv/src/routes/__root.tsx +0 -21
  127. package/template/vite-wv/src/routes/index.tsx +0 -63
  128. package/template/vite-wv/src/routes/secondary.tsx +0 -28
  129. package/template/vite-wv/src/utils/notification-helpers.ts +0 -32
  130. package/template/vite-wv/src/utils/styles.ts +0 -6
@@ -0,0 +1,2 @@
1
+ import"./state-CiURqLoM.js";import"./consts-BZnOMxpW.js";import{r as e}from"./utils-CQMjIwwz.js";import"./logger-DCEXcH26.js";import"./parseSettings-DYvHU8yJ.js";import{u as t}from"./fmdapi-LpkpfSZp.js";import{Command as n}from"commander";async function r(e){await t()}const i=()=>{let t=new n(`typegen`).description(`Generate types for your project`).action(r);return t.hook(`preAction`,(t,n)=>{let r=e({commandName:`typegen`});n.setOptionValue(`settings`,r)}),t};export{i as makeTypegenCommand,r as runTypegen};
2
+ //# sourceMappingURL=typegen-CNWUG1wR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typegen-CNWUG1wR.js","names":[],"sources":["../src/cli/typegen/index.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { runCodegenCommand } from \"~/generators/fmdapi.js\";\nimport type { Settings } from \"~/utils/parseSettings.js\";\nimport { ensureProofKitProject } from \"../utils.js\";\n\nexport async function runTypegen(_opts: { settings: Settings }) {\n await runCodegenCommand();\n}\n\nexport const makeTypegenCommand = () => {\n const typegenCommand = new Command(\"typegen\").description(\"Generate types for your project\").action(runTypegen);\n\n typegenCommand.hook(\"preAction\", (_thisCommand, actionCommand) => {\n const settings = ensureProofKitProject({ commandName: \"typegen\" });\n actionCommand.setOptionValue(\"settings\", settings);\n });\n\n return typegenCommand;\n};\n"],"mappings":"+OAMA,eAAsB,EAAW,EAA+B,CAC9D,MAAM,GAAmB,CAG3B,MAAa,MAA2B,CACtC,IAAM,EAAiB,IAAI,EAAQ,UAAU,CAAC,YAAY,kCAAkC,CAAC,OAAO,EAAW,CAO/G,OALA,EAAe,KAAK,aAAc,EAAc,IAAkB,CAChE,IAAM,EAAW,EAAsB,CAAE,YAAa,UAAW,CAAC,CAClE,EAAc,eAAe,WAAY,EAAS,EAClD,CAEK"}
@@ -0,0 +1,7 @@
1
+ import{r as e,t}from"./state-CiURqLoM.js";import{i as n}from"./consts-BZnOMxpW.js";import{r}from"./utils-CQMjIwwz.js";import{t as i}from"./logger-DCEXcH26.js";import{n as a,r as o}from"./parseSettings-DYvHU8yJ.js";import{t as s}from"./getUserPkgManager-Cph_6l1P.js";import{r as c,t as l}from"./addPackageDependency-BE76r_Gs.js";import u from"node:path";import d from"chalk";import f from"fs-extra";import{Command as p}from"commander";async function m(){let t=e.projectDir,r=u.join(n,`template/extras`),i=u.join(r,`_cursor/rules`),a=u.join(t,`.cursor/rules`);if(!f.existsSync(i))return;let o=s();await f.ensureDir(a),await f.copy(i,a);let c=u.join(r,`_cursor/conditional-rules`),l={pnpm:`pnpm.mdc`,npm:`npm.mdc`,yarn:`yarn.mdc`}[o];if(l){let e=u.join(c,l),t=u.join(a,`package-manager.mdc`);f.existsSync(e)&&await f.copy(e,t,{overwrite:!0})}}const h=[`@radix-ui/react-slot`,`@tailwindcss/postcss`,`class-variance-authority`,`clsx`,`lucide-react`,`tailwind-merge`,`tailwindcss`,`tw-animate-css`],g=[];async function _(){let t=e.projectDir,r=u.join(n,`template/nextjs`);l({dependencies:h,devMode:!1,projectDir:t}),l({dependencies:g,devMode:!0,projectDir:t}),f.copySync(u.join(r,`components.json`),u.join(t,`components.json`)),f.copySync(u.join(r,`postcss.config.cjs`),u.join(t,`postcss.config.cjs`)),f.copySync(u.join(r,`src/utils/styles.ts`),u.join(t,`src/utils/styles.ts`)),f.copySync(u.join(r,`src/config/theme/globals.css`),u.join(t,`src/config/theme/globals.css`)),await c(),console.log(`
2
+ ✅ shadcn/ui + Tailwind v4 upgrade complete!
3
+ `)}const v=[{key:`cursorRules`,title:`Upgrade Cursor Rules`,description:`Upgrade the .cursor rules in your project to the latest version.`,appType:[`browser`],function:m},{key:`shadcn`,title:`Add Shadcn`,description:`Add Shadcn to your project, to support easily adding new components from a variety of component registries.`,appType:[`browser`,`webviewer`],function:_}];function y(){let e=a();if(e.ui===`shadcn`)return[];let t=e.appliedUpgrades;return v.filter(n=>!t.includes(n.key)&&n.appType.includes(e.appType)).map(({key:e,title:t,description:n})=>({key:e,title:t,description:n}))}async function b(){let e=y(),t=a();if(t.ui!==`shadcn`)for(let n of e){let e=v.find(e=>e.key===n.key)?.function;if(e){await e();let r=t.appliedUpgrades;o({appliedUpgrades:[...r,n.key]})}}}const x=async()=>{t({}),e.baseCommand=`upgrade`,r({commandName:`upgrade`}),i.info(`
4
+ Upgrading ProofKit components...
5
+ `);try{await b(),i.info(d.green(`✔ Successfully upgraded components
6
+ `))}catch(e){i.error(`Failed to upgrade components:`,e),process.exit(1)}},S=new p().name(`upgrade`).description(`Upgrade ProofKit components in your project`).action(x);export{x as runUpgrade,S as upgrade};
7
+ //# sourceMappingURL=update-CDaX7MZ5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-CDaX7MZ5.js","names":[],"sources":["../src/upgrades/cursorRules.ts","../src/upgrades/shadcn.ts","../src/upgrades/index.ts","../src/cli/update/index.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"fs-extra\";\n\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { state } from \"~/state.js\";\nimport { getUserPkgManager } from \"~/utils/getUserPkgManager.js\";\n\nexport async function copyCursorRules() {\n const projectDir = state.projectDir;\n const extrasDir = path.join(PKG_ROOT, \"template/extras\");\n const cursorRulesSrcDir = path.join(extrasDir, \"_cursor/rules\");\n const cursorRulesDestDir = path.join(projectDir, \".cursor/rules\");\n\n if (!fs.existsSync(cursorRulesSrcDir)) {\n return;\n }\n\n const pkgManager = getUserPkgManager();\n await fs.ensureDir(cursorRulesDestDir);\n await fs.copy(cursorRulesSrcDir, cursorRulesDestDir);\n\n // Copy package manager specific rules\n const conditionalRulesDir = path.join(extrasDir, \"_cursor/conditional-rules\");\n\n const packageManagerRules = {\n pnpm: \"pnpm.mdc\",\n npm: \"npm.mdc\",\n yarn: \"yarn.mdc\",\n };\n\n const selectedRule = packageManagerRules[pkgManager as keyof typeof packageManagerRules];\n\n if (selectedRule) {\n const ruleSrc = path.join(conditionalRulesDir, selectedRule);\n const ruleDest = path.join(cursorRulesDestDir, \"package-manager.mdc\");\n\n if (fs.existsSync(ruleSrc)) {\n await fs.copy(ruleSrc, ruleDest, { overwrite: true });\n }\n }\n}\n","import path from \"node:path\";\nimport fs from \"fs-extra\";\n\nimport { PKG_ROOT } from \"~/consts.js\";\nimport { installDependencies } from \"~/helpers/installDependencies.js\";\nimport type { AvailableDependencies } from \"~/installers/dependencyVersionMap.js\";\nimport { state } from \"~/state.js\";\nimport { addPackageDependency } from \"~/utils/addPackageDependency.js\";\n\nconst BASE_DEPS = [\n \"@radix-ui/react-slot\",\n \"@tailwindcss/postcss\",\n \"class-variance-authority\",\n \"clsx\",\n \"lucide-react\",\n \"tailwind-merge\",\n \"tailwindcss\",\n \"tw-animate-css\",\n] as AvailableDependencies[];\nconst BASE_DEV_DEPS = [] as AvailableDependencies[];\n\nexport async function addShadcn() {\n const projectDir = state.projectDir;\n\n const TEMPLATE_ROOT = path.join(PKG_ROOT, \"template/nextjs\");\n\n // 1. Add dependencies\n addPackageDependency({\n dependencies: BASE_DEPS,\n devMode: false,\n projectDir,\n });\n addPackageDependency({\n dependencies: BASE_DEV_DEPS,\n devMode: true,\n projectDir,\n });\n\n // 2. Copy config and utility files\n fs.copySync(path.join(TEMPLATE_ROOT, \"components.json\"), path.join(projectDir, \"components.json\"));\n fs.copySync(path.join(TEMPLATE_ROOT, \"postcss.config.cjs\"), path.join(projectDir, \"postcss.config.cjs\"));\n fs.copySync(path.join(TEMPLATE_ROOT, \"src/utils/styles.ts\"), path.join(projectDir, \"src/utils/styles.ts\"));\n fs.copySync(\n path.join(TEMPLATE_ROOT, \"src/config/theme/globals.css\"),\n path.join(projectDir, \"src/config/theme/globals.css\"),\n );\n\n // 3. Install dependencies\n await installDependencies();\n\n // 4. Success message\n console.log(\"\\n✅ shadcn/ui + Tailwind v4 upgrade complete!\\n\");\n}\n","import { type appTypes, getSettings, mergeSettings } from \"~/utils/parseSettings.js\";\nimport { copyCursorRules } from \"./cursorRules.js\";\nimport { addShadcn } from \"./shadcn.js\";\n\ninterface Upgrade {\n key: string;\n title: string;\n description: string;\n appType: (typeof appTypes)[number][];\n function: () => Promise<void>;\n}\n\nconst availableUpgrades: Upgrade[] = [\n {\n key: \"cursorRules\",\n title: \"Upgrade Cursor Rules\",\n description: \"Upgrade the .cursor rules in your project to the latest version.\",\n appType: [\"browser\"],\n function: copyCursorRules,\n },\n {\n key: \"shadcn\",\n title: \"Add Shadcn\",\n description:\n \"Add Shadcn to your project, to support easily adding new components from a variety of component registries.\",\n appType: [\"browser\", \"webviewer\"],\n function: addShadcn,\n },\n];\n\nexport type UpgradeKeys = (typeof availableUpgrades)[number][\"key\"];\n\nexport function checkForAvailableUpgrades() {\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n return [];\n }\n\n const appliedUpgrades = settings.appliedUpgrades;\n\n const neededUpgrades = availableUpgrades.filter(\n (upgrade) => !appliedUpgrades.includes(upgrade.key) && upgrade.appType.includes(settings.appType),\n );\n\n return neededUpgrades.map(({ key, title, description }) => ({\n key,\n title,\n description,\n }));\n}\n\nexport async function runAllAvailableUpgrades() {\n const upgrades = checkForAvailableUpgrades();\n const settings = getSettings();\n if (settings.ui === \"shadcn\") {\n return;\n }\n\n for (const upgrade of upgrades) {\n const upgradeFunction = availableUpgrades.find((u) => u.key === upgrade.key)?.function;\n if (upgradeFunction) {\n await upgradeFunction();\n const appliedUpgrades = settings.appliedUpgrades;\n mergeSettings({\n appliedUpgrades: [...appliedUpgrades, upgrade.key],\n });\n }\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { initProgramState, state } from \"~/state.js\";\nimport { runAllAvailableUpgrades } from \"~/upgrades/index.js\";\nimport { logger } from \"~/utils/logger.js\";\nimport { ensureProofKitProject } from \"../utils.js\";\n\nexport const runUpgrade = async () => {\n initProgramState({});\n state.baseCommand = \"upgrade\";\n ensureProofKitProject({ commandName: \"upgrade\" });\n\n logger.info(\"\\nUpgrading ProofKit components...\\n\");\n\n try {\n await runAllAvailableUpgrades();\n logger.info(chalk.green(\"✔ Successfully upgraded components\\n\"));\n } catch (error) {\n logger.error(\"Failed to upgrade components:\", error);\n process.exit(1);\n }\n};\n\nexport const upgrade = new Command()\n .name(\"upgrade\")\n .description(\"Upgrade ProofKit components in your project\")\n .action(runUpgrade);\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import{a as e,g as t}from"./state-CiURqLoM.js";import{c as n}from"./consts-BZnOMxpW.js";import{n as r}from"./parseSettings-DYvHU8yJ.js";import i from"node:path";import a from"chalk";import o from"fs-extra";import*as s from"@clack/prompts";import{confirm as c,input as l,password as u,search as d,select as f}from"@inquirer/prompts";const p=Symbol.for(`@proofkit/cli/prompt-cancelled`);s.intro;const m=s.outro,h=s.note,g=s.log,_=s.spinner,v=s.cancel;function y(e){if(e)return t=>e(t)??!0}function b(e){return typeof e==`string`?e:e?!0:void 0}function x(e){return e instanceof Error&&e.name===`ExitPromptError`}function S(e){return e().catch(e=>{if(x(e))return p;throw e})}function C(e){return e===p||s.isCancel(e)}function w(e,t){return[e.label,e.hint??``,...e.keywords??[]].join(` `).toLowerCase().includes(t.trim().toLowerCase())}function T(e,t){let n=t?.trim();return n?e.filter(e=>w(e,n)):e}function E(e){return S(()=>l({message:e.message,default:e.defaultValue,validate:y(e.validate)}))}function D(e){return S(()=>u({message:e.message,validate:y(e.validate)}))}function O(e){return S(()=>c({message:e.message,default:e.initialValue}))}function k(e){return S(()=>f({message:e.message,pageSize:e.maxItems??10,default:e.initialValue,choices:e.options.map(e=>({value:e.value,name:e.label,description:e.hint,disabled:b(e.disabled)}))}))}function A(e){return S(()=>d({message:e.message,pageSize:10,source:t=>{let n=T(e.options,t);return n.length===0?[{value:`__no_matches__`,name:e.emptyMessage??`No matches found. Keep typing to refine your search.`,disabled:e.emptyMessage??`No matches found`}]:n.map(e=>({value:e.value,name:e.label,description:e.hint,disabled:b(e.disabled)}))}}))}const j=({commandName:s})=>{o.existsSync(i.join(process.cwd(),`proofkit.json`))||(console.log(a.yellow(`The "${s}" command requires an existing ProofKit project.
2
+ Please run " ${n} init" first, or try this command again when inside a ProofKit project.`)),process.exit(1));try{return r()}catch(n){console.log(a.red(`Error parsing ProofKit settings file:`)),n instanceof t?console.log(e.prettifyError(n)):console.log(n),process.exit(1)}};var M=class extends Error{};function N(e){if(C(e))throw v(),new M;return e}export{O as a,h as c,A as d,k as f,v as i,m as l,E as m,N as n,C as o,_ as p,j as r,g as s,M as t,D as u};
3
+ //# sourceMappingURL=utils-CQMjIwwz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-CQMjIwwz.js","names":["intro","note","log","spinner","isCancel","inquirerInput","password","inquirerPassword","confirm","inquirerConfirm","select","inquirerSelect","inquirerSearch","z","isCancel"],"sources":["../src/cli/prompts.ts","../src/cli/utils.ts"],"sourcesContent":["import * as clack from \"@clack/prompts\";\nimport {\n checkbox as inquirerCheckbox,\n confirm as inquirerConfirm,\n input as inquirerInput,\n password as inquirerPassword,\n search as inquirerSearch,\n select as inquirerSelect,\n} from \"@inquirer/prompts\";\n\nconst CANCEL_SYMBOL = Symbol.for(\"@proofkit/cli/prompt-cancelled\");\n\nexport const intro = clack.intro;\nexport const outro = clack.outro;\nexport const note = clack.note;\nexport const log = clack.log;\nexport const spinner = clack.spinner;\nexport const cancel = clack.cancel;\n\nexport interface PromptOption<T extends string> {\n value: T;\n label: string;\n hint?: string;\n disabled?: boolean | string;\n}\n\nexport interface SearchPromptOption<T extends string> extends PromptOption<T> {\n keywords?: readonly string[];\n}\n\nfunction normalizeValidate(\n validate: ((value: string) => string | undefined) | undefined,\n): ((value: string) => string | boolean) | undefined {\n if (!validate) {\n return undefined;\n }\n\n return (value: string) => validate(value) ?? true;\n}\n\nfunction normalizeDisabledMessage(value: boolean | string | undefined) {\n if (typeof value === \"string\") {\n return value;\n }\n return value ? true : undefined;\n}\n\nfunction isPromptCancel(error: unknown) {\n return error instanceof Error && error.name === \"ExitPromptError\";\n}\n\nfunction withCancelSentinel<T>(fn: () => Promise<T>): Promise<T | symbol> {\n return fn().catch((error: unknown) => {\n if (isPromptCancel(error)) {\n return CANCEL_SYMBOL;\n }\n throw error;\n });\n}\n\nexport function isCancel(value: unknown): value is symbol {\n return value === CANCEL_SYMBOL || clack.isCancel(value);\n}\n\nfunction matchesSearch(option: SearchPromptOption<string>, query: string) {\n const haystack = [option.label, option.hint ?? \"\", ...(option.keywords ?? [])].join(\" \").toLowerCase();\n return haystack.includes(query.trim().toLowerCase());\n}\n\nexport function filterSearchOptions<T extends string>(\n options: readonly SearchPromptOption<T>[],\n query: string | undefined,\n) {\n const term = query?.trim();\n if (!term) {\n return options;\n }\n\n return options.filter((option) => matchesSearch(option, term));\n}\n\nexport function text(options: {\n message: string;\n defaultValue?: string;\n validate?: (value: string) => string | undefined;\n}) {\n return withCancelSentinel(() =>\n inquirerInput({\n message: options.message,\n default: options.defaultValue,\n validate: normalizeValidate(options.validate),\n }),\n );\n}\n\nexport function password(options: { message: string; validate?: (value: string) => string | undefined }) {\n return withCancelSentinel(() =>\n inquirerPassword({\n message: options.message,\n validate: normalizeValidate(options.validate),\n }),\n );\n}\n\nexport function confirm(options: { message: string; initialValue?: boolean }) {\n return withCancelSentinel(\n () =>\n inquirerConfirm({\n message: options.message,\n default: options.initialValue,\n }) as Promise<boolean>,\n );\n}\n\nexport function select<T extends string>(options: {\n message: string;\n options: PromptOption<T>[];\n maxItems?: number;\n initialValue?: T;\n}) {\n return withCancelSentinel(() =>\n inquirerSelect<T>({\n message: options.message,\n pageSize: options.maxItems ?? 10,\n default: options.initialValue,\n choices: options.options.map((option) => ({\n value: option.value,\n name: option.label,\n description: option.hint,\n disabled: normalizeDisabledMessage(option.disabled),\n })),\n }),\n );\n}\n\nexport function searchSelect<T extends string>(options: {\n message: string;\n emptyMessage?: string;\n options: SearchPromptOption<T>[];\n}) {\n return withCancelSentinel(() =>\n inquirerSearch<T>({\n message: options.message,\n pageSize: 10,\n source: (input) => {\n const filtered = filterSearchOptions(options.options, input);\n if (filtered.length === 0) {\n return [\n {\n value: \"__no_matches__\" as T,\n name: options.emptyMessage ?? \"No matches found. Keep typing to refine your search.\",\n disabled: options.emptyMessage ?? \"No matches found\",\n },\n ];\n }\n\n return filtered.map((option) => ({\n value: option.value,\n name: option.label,\n description: option.hint,\n disabled: normalizeDisabledMessage(option.disabled),\n }));\n },\n }),\n );\n}\n\nexport function multiSearchSelect<T extends string>(options: {\n message: string;\n options: SearchPromptOption<T>[];\n required?: boolean;\n}) {\n return withCancelSentinel(() =>\n inquirerCheckbox<T>({\n message: options.message,\n pageSize: 10,\n required: options.required,\n choices: options.options.map((option) => ({\n value: option.value,\n name: option.label,\n description: option.hint,\n disabled: normalizeDisabledMessage(option.disabled),\n })),\n }),\n );\n}\n","import path from \"node:path\";\nimport chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport z, { ZodError } from \"zod/v4\";\n\nimport { cancel, isCancel } from \"~/cli/prompts.js\";\nimport { npmName } from \"~/consts.js\";\nimport { getSettings } from \"~/utils/parseSettings.js\";\n\n/**\n * Runs before any add command is run. Checks if the user is in a ProofKit project and if the\n * proofkit.json file is valid.\n */\nexport const ensureProofKitProject = ({ commandName }: { commandName: string }) => {\n const settingsExists = fs.existsSync(path.join(process.cwd(), \"proofkit.json\"));\n if (!settingsExists) {\n console.log(\n chalk.yellow(\n `The \"${commandName}\" command requires an existing ProofKit project.\nPlease run \" ${npmName} init\" first, or try this command again when inside a ProofKit project.`,\n ),\n );\n process.exit(1);\n }\n\n try {\n return getSettings();\n } catch (error) {\n console.log(chalk.red(\"Error parsing ProofKit settings file:\"));\n if (error instanceof ZodError) {\n console.log(z.prettifyError(error));\n } else {\n console.log(error);\n }\n\n process.exit(1);\n }\n};\n\nexport class UserAbortedError extends Error {}\nexport function abortIfCancel(value: symbol | string): string;\nexport function abortIfCancel<T extends boolean>(value: symbol | T): T;\nexport function abortIfCancel<T extends string | boolean>(value: T | symbol): T {\n if (isCancel(value)) {\n cancel();\n throw new UserAbortedError();\n }\n return value;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@proofkit/cli",
3
- "version": "1.2.0-beta.1",
4
- "description": "Create web application with the ProofKit stack",
3
+ "version": "2.0.0-beta.1",
4
+ "description": "Interactive CLI to scaffold and manage ProofKit projects",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -30,9 +30,8 @@
30
30
  "dist",
31
31
  "template",
32
32
  "README.md",
33
- "index.d.ts",
34
- "LICENSE",
35
33
  "CHANGELOG.md",
34
+ "index.d.ts",
36
35
  "package.json"
37
36
  ],
38
37
  "engines": {
@@ -40,74 +39,84 @@
40
39
  },
41
40
  "dependencies": {
42
41
  "@better-fetch/fetch": "1.1.17",
43
- "@clack/core": "^0.3.4",
42
+ "@clack/core": "^0.3.5",
44
43
  "@clack/prompts": "^0.11.0",
45
- "@ianvs/prettier-plugin-sort-imports": "^4.4.1",
44
+ "@effect/cli": "0.74.0",
45
+ "@effect/platform": "0.95.0",
46
+ "@effect/platform-node": "0.105.0",
47
+ "@effect/printer": "0.48.0",
48
+ "@effect/printer-ansi": "0.48.0",
49
+ "@inquirer/prompts": "^8.3.2",
46
50
  "@types/glob": "^8.1.0",
47
- "axios": "^1.7.3",
51
+ "axios": "^1.13.2",
48
52
  "chalk": "5.4.1",
49
- "commander": "^14.0.0",
50
- "dotenv": "^16.5.0",
51
- "es-toolkit": "^1.15.1",
52
- "execa": "^9.5.1",
53
+ "commander": "^14.0.2",
54
+ "dotenv": "^16.6.1",
55
+ "effect": "^3.20.0",
56
+ "es-toolkit": "^1.43.0",
57
+ "execa": "^9.6.1",
53
58
  "fast-glob": "^3.3.3",
54
- "fs-extra": "^11.3.0",
55
- "glob": "^11.0.1",
59
+ "fs-extra": "^11.3.3",
60
+ "glob": "^11.1.0",
56
61
  "gradient-string": "^2.0.2",
57
62
  "handlebars": "^4.7.8",
58
63
  "jiti": "^1.21.7",
59
64
  "jsonc-parser": "^3.3.1",
60
- "open": "^10.1.0",
65
+ "open": "^10.2.0",
61
66
  "ora": "6.3.1",
62
- "prettier": "^3.5.3",
63
- "prettier-plugin-tailwindcss": "^0.6.5",
64
- "randomstring": "^1.3.0",
65
- "semver": "^7.7.2",
67
+ "randomstring": "^1.3.1",
68
+ "semver": "^7.7.3",
66
69
  "shadcn": "^2.10.0",
67
- "sort-package-json": "^2.10.0",
70
+ "sort-package-json": "^2.15.1",
68
71
  "ts-morph": "^26.0.0",
69
- "@proofkit/typegen": "1.0.11-beta.0",
70
- "@proofkit/fmdapi": "5.0.3-beta.0"
72
+ "type-fest": "^3.13.1",
73
+ "@proofkit/fmdapi": "5.1.0-beta.2",
74
+ "@proofkit/typegen": "1.1.0-beta.18"
71
75
  },
72
76
  "devDependencies": {
73
- "@auth/drizzle-adapter": "^1.1.0",
77
+ "@auth/drizzle-adapter": "^1.11.1",
74
78
  "@auth/prisma-adapter": "^1.6.0",
75
- "@libsql/client": "^0.6.0",
76
- "@planetscale/database": "^1.18.0",
77
- "@prisma/adapter-planetscale": "^5.14.0",
78
- "@prisma/client": "^5.14.0",
79
+ "@biomejs/biome": "2.3.11",
80
+ "@libsql/client": "^0.6.2",
81
+ "@planetscale/database": "^1.19.0",
82
+ "@prisma/adapter-planetscale": "^5.22.0",
83
+ "@prisma/client": "^5.22.0",
84
+ "@rollup/plugin-replace": "^6.0.3",
79
85
  "@t3-oss/env-nextjs": "^0.10.1",
80
- "@tanstack/react-query": "^5.49.2",
86
+ "@tanstack/react-query": "^5.90.16",
81
87
  "@trpc/client": "11.0.0-rc.441",
82
88
  "@trpc/next": "11.0.0-rc.441",
83
89
  "@trpc/react-query": "11.0.0-rc.441",
84
90
  "@trpc/server": "11.0.0-rc.441",
85
- "@types/axios": "^0.14.0",
91
+ "@types/axios": "^0.14.4",
86
92
  "@types/fs-extra": "^11.0.4",
87
93
  "@types/gradient-string": "^1.1.6",
88
- "@types/node": "^22.17.1",
94
+ "@types/node": "^22.19.5",
89
95
  "@types/randomstring": "^1.3.0",
90
- "@types/react": "^19.1.10",
91
- "@types/semver": "^7.7.0",
92
- "@vitest/coverage-v8": "^1.4.0",
96
+ "@types/react": "19.2.7",
97
+ "@types/semver": "^7.7.1",
98
+ "@vitest/coverage-v8": "^2.1.9",
93
99
  "drizzle-kit": "^0.21.4",
94
100
  "drizzle-orm": "^0.30.10",
95
- "mysql2": "^3.9.7",
96
- "next": "^15.4.6",
97
- "next-auth": "^4.24.7",
98
- "postgres": "^3.4.4",
99
- "prisma": "^5.14.0",
100
- "publint": "^0.3.12",
101
- "react": "^19.1.1",
102
- "react-dom": "^19.1.1",
103
- "superjson": "^2.2.1",
104
- "tailwindcss": "^4.1.11",
105
- "tsdown": "^0.14.1",
106
- "type-fest": "^3.13.1",
107
- "typescript": "^5.9.2",
108
- "vitest": "^3.2.4",
109
- "zod": "3.25.64",
110
- "@proofkit/registry": "1.0.0"
101
+ "mysql2": "^3.16.0",
102
+ "next": "16.1.1",
103
+ "next-auth": "^4.24.13",
104
+ "postgres": "^3.4.8",
105
+ "prisma": "^5.22.0",
106
+ "publint": "^0.3.16",
107
+ "react": "19.2.3",
108
+ "react-dom": "19.2.3",
109
+ "superjson": "^2.2.6",
110
+ "tailwindcss": "^4.1.18",
111
+ "tsdown": "^0.14.2",
112
+ "typescript": "^5.9.3",
113
+ "ultracite": "7.0.8",
114
+ "vitest": "^4.0.17",
115
+ "zod": "^4.3.5",
116
+ "@proofkit/registry": "1.0.1-beta.0"
117
+ },
118
+ "publishConfig": {
119
+ "access": "public"
111
120
  },
112
121
  "scripts": {
113
122
  "typecheck": "tsc",
@@ -115,14 +124,13 @@
115
124
  "dev": "tsdown --watch",
116
125
  "clean": "rm -rf dist .turbo node_modules",
117
126
  "start": "node dist/index.js",
118
- "lint": "eslint . --ext .ts,.tsx",
119
- "lint:fix": "pnpm lint --fix",
120
- "format": "prettier '**/*.{cjs,mjs,ts,tsx,md,json}' --ignore-path ../.gitignore --ignore-unknown --no-error-on-unmatched-pattern --write",
121
- "format:check": "prettier '**/*.{cjs,mjs,ts,tsx,md,json}' --ignore-path ../.gitignore --ignore-unknown --no-error-on-unmatched-pattern --check",
127
+ "lint": "biome check . --write",
128
+ "lint:summary": "biome check . --reporter=summary",
122
129
  "release": "changeset version",
123
130
  "pub:beta": "NODE_ENV=production pnpm build && npm publish --tag beta --access public",
124
131
  "pub:next": "NODE_ENV=production pnpm build && npm publish --tag next --access public",
125
132
  "pub:release": "NODE_ENV=production pnpm build && npm publish --access public",
126
- "test": "vitest run"
133
+ "test": "pnpm build && vitest run",
134
+ "test:smoke": "PROOFKIT_RUN_SMOKE_TESTS=1 vitest run --config vitest.smoke.config.ts"
127
135
  }
128
136
  }
@@ -1,14 +1,4 @@
1
- import {
2
- Body,
3
- Container,
4
- Head,
5
- Heading,
6
- Html,
7
- Img,
8
- Section,
9
- Text,
10
- } from "@react-email/components";
11
- import * as React from "react";
1
+ import { Body, Container, Head, Heading, Html, Img, Section, Text } from "@react-email/components";
12
2
 
13
3
  interface AuthCodeEmailProps {
14
4
  validationCode: string;
@@ -22,29 +12,20 @@ export const AuthCodeEmail = ({ validationCode, type }: AuthCodeEmailProps) => (
22
12
  <Container style={container}>
23
13
  <Img
24
14
  // TODO: Replace with your logo
25
- src="https://proofkit.dev/_astro/proofkit.DNcFg0_B_1JN3Dz.webp"
26
- width="238"
27
- height="175"
28
15
  alt="ProofKit"
16
+ height="175"
17
+ src="https://proofkit.dev/_astro/proofkit.DNcFg0_B_1JN3Dz.webp"
29
18
  style={logo}
19
+ width="238"
30
20
  />
31
- <Text style={tertiary}>
32
- {type === "verification"
33
- ? "Verify Your Email"
34
- : "Reset Your Password"}
35
- </Text>
21
+ <Text style={tertiary}>{type === "verification" ? "Verify Your Email" : "Reset Your Password"}</Text>
36
22
  <Heading style={secondary}>
37
- Enter the following code to{" "}
38
- {type === "verification"
39
- ? "verify your email"
40
- : "reset your password"}
23
+ Enter the following code to {type === "verification" ? "verify your email" : "reset your password"}
41
24
  </Heading>
42
25
  <Section style={codeContainer}>
43
26
  <Text style={code}>{validationCode}</Text>
44
27
  </Section>
45
- <Text style={paragraph}>
46
- If you did not request this code, you can ignore this email.
47
- </Text>
28
+ <Text style={paragraph}>If you did not request this code, you can ignore this email.</Text>
48
29
  </Container>
49
30
  </Body>
50
31
  </Html>
@@ -1,16 +1,4 @@
1
- import {
2
- Body,
3
- Button,
4
- Container,
5
- Head,
6
- Heading,
7
- Hr,
8
- Html,
9
- Img,
10
- Section,
11
- Text,
12
- } from "@react-email/components";
13
- import * as React from "react";
1
+ import { Body, Button, Container, Head, Heading, Hr, Html, Img, Section, Text } from "@react-email/components";
14
2
 
15
3
  export interface GenericEmailProps {
16
4
  title?: string;
@@ -20,30 +8,22 @@ export interface GenericEmailProps {
20
8
  footer?: string;
21
9
  }
22
10
 
23
- export const GenericEmail = ({
24
- title,
25
- description,
26
- ctaText,
27
- ctaHref,
28
- footer,
29
- }: GenericEmailProps) => (
11
+ export const GenericEmail = ({ title, description, ctaText, ctaHref, footer }: GenericEmailProps) => (
30
12
  <Html>
31
13
  <Head />
32
14
  <Body style={styles.main}>
33
15
  <Container style={styles.container}>
34
16
  <Img
35
- src="https://proofkit.dev/_astro/proofkit.DNcFg0_B_1JN3Dz.webp"
36
- width="238"
37
- height="175"
38
17
  alt="ProofKit"
18
+ height="175"
19
+ src="https://proofkit.dev/_astro/proofkit.DNcFg0_B_1JN3Dz.webp"
39
20
  style={styles.logo}
21
+ width="238"
40
22
  />
41
23
 
42
24
  {title ? <Heading style={styles.title}>{title}</Heading> : null}
43
25
 
44
- {description ? (
45
- <Text style={styles.description}>{description}</Text>
46
- ) : null}
26
+ {description ? <Text style={styles.description}>{description}</Text> : null}
47
27
 
48
28
  {ctaText && ctaHref ? (
49
29
  <Section style={styles.ctaSection}>
@@ -53,9 +33,7 @@ export const GenericEmail = ({
53
33
  </Section>
54
34
  ) : null}
55
35
 
56
- {(title || description || (ctaText && ctaHref)) && (
57
- <Hr style={styles.hr} />
58
- )}
36
+ {(title || description || (ctaText && ctaHref)) && <Hr style={styles.hr} />}
59
37
 
60
38
  {footer ? <Text style={styles.footer}>{footer}</Text> : null}
61
39
  </Container>
@@ -65,8 +43,7 @@ export const GenericEmail = ({
65
43
 
66
44
  GenericEmail.PreviewProps = {
67
45
  title: "Welcome to ProofKit",
68
- description:
69
- "Thanks for trying ProofKit. This is a sample email template you can customize.",
46
+ description: "Thanks for trying ProofKit. This is a sample email template you can customize.",
70
47
  ctaText: "Get Started",
71
48
  ctaHref: "https://proofkit.dev",
72
49
  footer: "You received this email because you signed up for updates.",
@@ -1,14 +1,4 @@
1
- import {
2
- Body,
3
- Container,
4
- Head,
5
- Heading,
6
- Html,
7
- Img,
8
- Section,
9
- Text,
10
- } from "@react-email/components";
11
- import * as React from "react";
1
+ import { Body, Container, Head, Heading, Html, Img, Section, Text } from "@react-email/components";
12
2
 
13
3
  interface AuthCodeEmailProps {
14
4
  validationCode: string;
@@ -22,29 +12,20 @@ export const AuthCodeEmail = ({ validationCode, type }: AuthCodeEmailProps) => (
22
12
  <Container style={container}>
23
13
  <Img
24
14
  // TODO: Replace with your logo
25
- src="https://proofkit.dev/_astro/proofkit.DNcFg0_B_1JN3Dz.webp"
26
- width="238"
27
- height="175"
28
15
  alt="ProofKit"
16
+ height="175"
17
+ src="https://proofkit.dev/_astro/proofkit.DNcFg0_B_1JN3Dz.webp"
29
18
  style={logo}
19
+ width="238"
30
20
  />
31
- <Text style={tertiary}>
32
- {type === "verification"
33
- ? "Verify Your Email"
34
- : "Reset Your Password"}
35
- </Text>
21
+ <Text style={tertiary}>{type === "verification" ? "Verify Your Email" : "Reset Your Password"}</Text>
36
22
  <Heading style={secondary}>
37
- Enter the following code to{" "}
38
- {type === "verification"
39
- ? "verify your email"
40
- : "reset your password"}
23
+ Enter the following code to {type === "verification" ? "verify your email" : "reset your password"}
41
24
  </Heading>
42
25
  <Section style={codeContainer}>
43
26
  <Text style={code}>{validationCode}</Text>
44
27
  </Section>
45
- <Text style={paragraph}>
46
- If you did not request this code, you can ignore this email.
47
- </Text>
28
+ <Text style={paragraph}>If you did not request this code, you can ignore this email.</Text>
48
29
  </Container>
49
30
  </Body>
50
31
  </Html>
@@ -1,4 +1,4 @@
1
1
  import { handlers } from "@/server/auth"; // Referring to the auth.ts we just created
2
2
 
3
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
3
+
4
4
  export const { GET, POST } = handlers;
@@ -1,6 +1,6 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-call */
2
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
1
+
2
+
3
+
4
4
 
5
5
  import { env } from "@/config/env";
6
6
  import { OttoAdapter } from "@proofkit/fmdapi";