@donotdev/cli 0.0.13 → 0.0.15

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 (162) hide show
  1. package/dependencies-matrix.json +357 -89
  2. package/dist/bin/commands/agent-setup.d.ts +6 -0
  3. package/dist/bin/commands/agent-setup.d.ts.map +1 -0
  4. package/dist/bin/commands/agent-setup.js +629 -0
  5. package/dist/bin/commands/agent-setup.js.map +1 -0
  6. package/dist/bin/commands/build.js +131 -50
  7. package/dist/bin/commands/bump.js +137 -49
  8. package/dist/bin/commands/cacheout.js +50 -21
  9. package/dist/bin/commands/create-app.js +270 -261
  10. package/dist/bin/commands/create-project.js +418 -197
  11. package/dist/bin/commands/deploy.js +1752 -712
  12. package/dist/bin/commands/dev.js +151 -35
  13. package/dist/bin/commands/emu.js +228 -70
  14. package/dist/bin/commands/format.js +50 -21
  15. package/dist/bin/commands/lint.js +50 -21
  16. package/dist/bin/commands/preview.js +155 -35
  17. package/dist/bin/commands/supabase-setup.d.ts +6 -0
  18. package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
  19. package/dist/bin/commands/supabase-setup.js +7 -0
  20. package/dist/bin/commands/supabase-setup.js.map +1 -0
  21. package/dist/bin/commands/sync-secrets.js +224 -46
  22. package/dist/bin/commands/type-check.d.ts +14 -0
  23. package/dist/bin/commands/type-check.d.ts.map +1 -0
  24. package/dist/bin/commands/type-check.js +314 -0
  25. package/dist/bin/commands/type-check.js.map +1 -0
  26. package/dist/bin/commands/wai.js +7399 -11
  27. package/dist/bin/dndev.js +27 -2
  28. package/dist/bin/donotdev.js +27 -2
  29. package/dist/index.js +3960 -2996
  30. package/package.json +2 -2
  31. package/templates/app-demo/src/App.tsx.example +1 -0
  32. package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
  33. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
  34. package/templates/app-demo/src/themes.css.example +5 -12
  35. package/templates/app-expo/.env.example +64 -0
  36. package/templates/app-expo/.expo/README.md.example +5 -0
  37. package/templates/app-expo/.gitignore.example +36 -0
  38. package/templates/app-expo/README.md.example +58 -0
  39. package/templates/app-expo/app/.gitkeep +2 -0
  40. package/templates/app-expo/app/_layout.tsx.example +41 -0
  41. package/templates/app-expo/app/form.tsx.example +52 -0
  42. package/templates/app-expo/app/index.tsx.example +89 -0
  43. package/templates/app-expo/app/list.tsx.example +32 -0
  44. package/templates/app-expo/app/profile.tsx.example +76 -0
  45. package/templates/app-expo/app/signin.tsx.example +53 -0
  46. package/templates/app-expo/app.json.example +39 -0
  47. package/templates/app-expo/babel.config.js.example +10 -0
  48. package/templates/app-expo/eas.json.example +20 -0
  49. package/templates/app-expo/expo-env.d.ts.example +4 -0
  50. package/templates/app-expo/metro.config.js.example +20 -0
  51. package/templates/app-expo/service-account-key.json.example +12 -0
  52. package/templates/app-expo/tsconfig.json.example +19 -0
  53. package/templates/app-next/.env.example +4 -33
  54. package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
  55. package/templates/app-next/src/app/layout.tsx.example +7 -6
  56. package/templates/app-next/src/globals.css.example +2 -11
  57. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  58. package/templates/app-next/src/themes.css.example +10 -13
  59. package/templates/app-vite/.env.example +3 -32
  60. package/templates/app-vite/index.html.example +2 -24
  61. package/templates/app-vite/src/App.tsx.example +2 -0
  62. package/templates/app-vite/src/globals.css.example +2 -12
  63. package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
  64. package/templates/app-vite/src/pages/HomePage.tsx.example +1 -1
  65. package/templates/app-vite/src/themes.css.example +109 -79
  66. package/templates/app-vite/vercel.json.example +11 -0
  67. package/templates/functions-firebase/build.mjs.example +2 -72
  68. package/templates/functions-firebase/functions-firebase/.env.example.example +23 -25
  69. package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
  70. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
  71. package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
  72. package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
  73. package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
  74. package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
  75. package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
  76. package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
  77. package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
  78. package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
  79. package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
  80. package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
  81. package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
  82. package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
  83. package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
  84. package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
  85. package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
  86. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
  87. package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
  88. package/templates/functions-vercel/vercel.json.example +1 -1
  89. package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
  90. package/templates/github/workflows/firebase-deploy.yml.example +1 -1
  91. package/templates/overlay-firebase/env.fragment.example +34 -0
  92. package/templates/overlay-firebase/env.fragment.expo.example +34 -0
  93. package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
  94. package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
  95. package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
  96. package/templates/overlay-supabase/env.fragment.example +7 -0
  97. package/templates/overlay-supabase/env.fragment.expo.example +7 -0
  98. package/templates/overlay-supabase/env.fragment.nextjs.example +7 -0
  99. package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
  100. package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
  101. package/templates/overlay-supabase/vercel.headers.example +23 -0
  102. package/templates/overlay-supabase/vercel.json.example +22 -0
  103. package/templates/overlay-vercel/env.fragment.example +34 -0
  104. package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
  105. package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
  106. package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
  107. package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
  108. package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
  109. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
  110. package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
  111. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
  112. package/templates/root-consumer/.claude/commands/brainstorm.md.example +1 -1
  113. package/templates/root-consumer/.claude/commands/build.md.example +1 -1
  114. package/templates/root-consumer/.claude/commands/design.md.example +1 -1
  115. package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
  116. package/templates/root-consumer/.claude/commands/polish.md.example +1 -1
  117. package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
  118. package/templates/root-consumer/.clinerules.example +1 -0
  119. package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
  120. package/templates/root-consumer/.cursorrules.example +1 -0
  121. package/templates/root-consumer/.dndev/args.json.example +6 -0
  122. package/templates/root-consumer/.gemini/settings.json.example +2 -2
  123. package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
  124. package/templates/root-consumer/.windsurfrules.example +1 -0
  125. package/templates/root-consumer/AI.md.example +25 -108
  126. package/templates/root-consumer/CLAUDE.md.example +1 -128
  127. package/templates/root-consumer/CONVENTIONS.md.example +1 -0
  128. package/templates/root-consumer/GEMINI.md.example +1 -0
  129. package/templates/root-consumer/firebase.json.example +1 -1
  130. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +54 -0
  131. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
  132. package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
  133. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +99 -30
  134. package/templates/root-consumer/guides/dndev/GOTCHAS.md.example +186 -0
  135. package/templates/root-consumer/guides/dndev/INDEX.md.example +4 -1
  136. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +143 -12
  137. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +9 -3
  138. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +12 -7
  139. package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
  140. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
  141. package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
  142. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
  143. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
  144. package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
  145. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
  146. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
  147. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
  148. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
  149. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +47 -11
  150. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
  151. package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
  152. package/templates/app-payload/.env.example +0 -28
  153. package/templates/app-payload/README.md.example +0 -233
  154. package/templates/app-payload/collections/Company.ts.example +0 -125
  155. package/templates/app-payload/collections/Hero.ts.example +0 -62
  156. package/templates/app-payload/collections/Media.ts.example +0 -41
  157. package/templates/app-payload/collections/Products.ts.example +0 -115
  158. package/templates/app-payload/collections/Services.ts.example +0 -104
  159. package/templates/app-payload/collections/Testimonials.ts.example +0 -92
  160. package/templates/app-payload/collections/Users.ts.example +0 -35
  161. package/templates/app-payload/src/server.ts.example +0 -79
  162. package/templates/app-payload/tsconfig.json.example +0 -24
@@ -1892,7 +1892,7 @@ var require_parse = __commonJS({
1892
1892
  CHAR_NO_BREAK_SPACE,
1893
1893
  CHAR_ZERO_WIDTH_NOBREAK_SPACE
1894
1894
  } = require_constants();
1895
- var parse = (input, options = {}) => {
1895
+ var parse2 = (input, options = {}) => {
1896
1896
  if (typeof input !== "string") {
1897
1897
  throw new TypeError("Expected a string");
1898
1898
  }
@@ -2092,7 +2092,7 @@ var require_parse = __commonJS({
2092
2092
  push({ type: "eos" });
2093
2093
  return ast;
2094
2094
  };
2095
- module.exports = parse;
2095
+ module.exports = parse2;
2096
2096
  }
2097
2097
  });
2098
2098
 
@@ -2104,7 +2104,7 @@ var require_braces = __commonJS({
2104
2104
  var stringify2 = require_stringify();
2105
2105
  var compile = require_compile();
2106
2106
  var expand = require_expand();
2107
- var parse = require_parse();
2107
+ var parse2 = require_parse();
2108
2108
  var braces = (input, options = {}) => {
2109
2109
  let output = [];
2110
2110
  if (Array.isArray(input)) {
@@ -2124,7 +2124,7 @@ var require_braces = __commonJS({
2124
2124
  }
2125
2125
  return output;
2126
2126
  };
2127
- braces.parse = (input, options = {}) => parse(input, options);
2127
+ braces.parse = (input, options = {}) => parse2(input, options);
2128
2128
  braces.stringify = (input, options = {}) => {
2129
2129
  if (typeof input === "string") {
2130
2130
  return stringify2(braces.parse(input, options), options);
@@ -2781,7 +2781,7 @@ var require_parse2 = __commonJS({
2781
2781
  var syntaxError = (type, char) => {
2782
2782
  return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
2783
2783
  };
2784
- var parse = (input, options) => {
2784
+ var parse2 = (input, options) => {
2785
2785
  if (typeof input !== "string") {
2786
2786
  throw new TypeError("Expected a string");
2787
2787
  }
@@ -2930,7 +2930,7 @@ var require_parse2 = __commonJS({
2930
2930
  output = token.close = `)$))${extglobStar}`;
2931
2931
  }
2932
2932
  if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
2933
- const expression = parse(rest, { ...options, fastpaths: false }).output;
2933
+ const expression = parse2(rest, { ...options, fastpaths: false }).output;
2934
2934
  output = token.close = `)${expression})${extglobStar})`;
2935
2935
  }
2936
2936
  if (token.prev.type === "bos") {
@@ -3455,7 +3455,7 @@ var require_parse2 = __commonJS({
3455
3455
  }
3456
3456
  return state;
3457
3457
  };
3458
- parse.fastpaths = (input, options) => {
3458
+ parse2.fastpaths = (input, options) => {
3459
3459
  const opts = { ...options };
3460
3460
  const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
3461
3461
  const len = input.length;
@@ -3521,7 +3521,7 @@ var require_parse2 = __commonJS({
3521
3521
  }
3522
3522
  return source;
3523
3523
  };
3524
- module.exports = parse;
3524
+ module.exports = parse2;
3525
3525
  }
3526
3526
  });
3527
3527
 
@@ -3532,7 +3532,7 @@ var require_picomatch = __commonJS({
3532
3532
  init_utils();
3533
3533
  var path = __require("path");
3534
3534
  var scan = require_scan();
3535
- var parse = require_parse2();
3535
+ var parse2 = require_parse2();
3536
3536
  var utils = require_utils2();
3537
3537
  var constants2 = require_constants2();
3538
3538
  var isObject = (val) => val && typeof val === "object" && !Array.isArray(val);
@@ -3620,7 +3620,7 @@ var require_picomatch = __commonJS({
3620
3620
  picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
3621
3621
  picomatch.parse = (pattern, options) => {
3622
3622
  if (Array.isArray(pattern)) return pattern.map((p2) => picomatch.parse(p2, options));
3623
- return parse(pattern, { ...options, fastpaths: false });
3623
+ return parse2(pattern, { ...options, fastpaths: false });
3624
3624
  };
3625
3625
  picomatch.scan = (input, options) => scan(input, options);
3626
3626
  picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
@@ -3646,10 +3646,10 @@ var require_picomatch = __commonJS({
3646
3646
  }
3647
3647
  let parsed = { negated: false, fastpaths: true };
3648
3648
  if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) {
3649
- parsed.output = parse.fastpaths(input, options);
3649
+ parsed.output = parse2.fastpaths(input, options);
3650
3650
  }
3651
3651
  if (!parsed.output) {
3652
- parsed = parse(input, options);
3652
+ parsed = parse2(input, options);
3653
3653
  }
3654
3654
  return picomatch.compileRe(parsed, options, returnOutput, returnState);
3655
3655
  };
@@ -7511,11 +7511,39 @@ var init_PathResolver = __esm({
7511
7511
  });
7512
7512
 
7513
7513
  // packages/tooling/src/utils/errors.ts
7514
- var DoNotDevError;
7514
+ var DO_NOT_DEV_ERROR_CODES, DoNotDevError;
7515
7515
  var init_errors = __esm({
7516
7516
  "packages/tooling/src/utils/errors.ts"() {
7517
7517
  "use strict";
7518
7518
  init_utils();
7519
+ DO_NOT_DEV_ERROR_CODES = {
7520
+ CONFIGURATION_ERROR: "configuration-error",
7521
+ CONFIG_NOT_FOUND: "config-not-found",
7522
+ CONFIG_INVALID: "config-invalid",
7523
+ PATH_RESOLUTION_ERROR: "path-resolution-error",
7524
+ FILE_OPERATION_ERROR: "file-operation-error",
7525
+ FILE_NOT_FOUND: "file-not-found",
7526
+ PERMISSION_DENIED: "permission-denied",
7527
+ GENERATION_ERROR: "generation-error",
7528
+ TEMPLATE_ERROR: "template-error",
7529
+ TEMPLATE_NOT_FOUND: "template-not-found",
7530
+ CLI_EXECUTION_ERROR: "cli-execution-error",
7531
+ COMMAND_NOT_FOUND: "command-not-found",
7532
+ COMMAND_FAILED: "command-failed",
7533
+ VALIDATION_ERROR: "validation-error",
7534
+ SCHEMA_ERROR: "schema-error",
7535
+ DEPENDENCY_ERROR: "dependency-error",
7536
+ DEPENDENCY_NOT_FOUND: "dependency-not-found",
7537
+ DEPENDENCY_VERSION_ERROR: "dependency-version-error",
7538
+ INVALID_ARGUMENT: "invalid-argument",
7539
+ MISSING_ARGUMENT: "missing-argument",
7540
+ MISSING_PROJECT_ID: "missing-project-id",
7541
+ FIREBASE_CLI_ERROR: "firebase-cli-error",
7542
+ DEPLOYMENT_FAILED: "deployment-failed",
7543
+ OPERATION_CANCELLED: "operation-cancelled",
7544
+ TIMEOUT_ERROR: "timeout-error",
7545
+ UNKNOWN_ERROR: "unknown-error"
7546
+ };
7519
7547
  DoNotDevError = class _DoNotDevError extends Error {
7520
7548
  /** The error code categorizing this error */
7521
7549
  code;
@@ -7535,7 +7563,7 @@ var init_errors = __esm({
7535
7563
  * @param {Record<string, any>} [options.context] - Additional context data
7536
7564
  * @param {boolean} [options.displayable=true] - Whether this error should be displayed to the user
7537
7565
  */
7538
- constructor(message, code = "unknown-error", options) {
7566
+ constructor(message, code = DO_NOT_DEV_ERROR_CODES.UNKNOWN_ERROR, options) {
7539
7567
  super(message);
7540
7568
  this.name = "DoNotDevError";
7541
7569
  this.code = code;
@@ -7566,7 +7594,7 @@ var init_errors = __esm({
7566
7594
  * @param {boolean} [options.displayable=true] - Whether this error should be displayed to the user
7567
7595
  * @returns {DoNotDevError} New DoNotDev error wrapping the original
7568
7596
  */
7569
- static from(error2, context, code = "unknown-error", options) {
7597
+ static from(error2, context, code = DO_NOT_DEV_ERROR_CODES.UNKNOWN_ERROR, options) {
7570
7598
  if (!(error2 instanceof Error)) {
7571
7599
  return new _DoNotDevError(
7572
7600
  `Unknown error: ${String(error2)}`,
@@ -7603,21 +7631,21 @@ var init_errors = __esm({
7603
7631
  }
7604
7632
  const message = error2.message.toLowerCase();
7605
7633
  if (error2.name === "ValidationError" || message.includes("validation")) {
7606
- return "validation-error";
7634
+ return DO_NOT_DEV_ERROR_CODES.VALIDATION_ERROR;
7607
7635
  }
7608
7636
  if (message.includes("not found") || message.includes("no such file")) {
7609
- return "file-not-found";
7637
+ return DO_NOT_DEV_ERROR_CODES.FILE_NOT_FOUND;
7610
7638
  }
7611
7639
  if (message.includes("permission") || message.includes("access denied")) {
7612
- return "permission-denied";
7640
+ return DO_NOT_DEV_ERROR_CODES.PERMISSION_DENIED;
7613
7641
  }
7614
7642
  if (message.includes("timeout") || message.includes("timed out")) {
7615
- return "timeout-error";
7643
+ return DO_NOT_DEV_ERROR_CODES.TIMEOUT_ERROR;
7616
7644
  }
7617
7645
  if (message.includes("dependency") || message.includes("module not found")) {
7618
- return "dependency-error";
7646
+ return DO_NOT_DEV_ERROR_CODES.DEPENDENCY_ERROR;
7619
7647
  }
7620
- return "unknown-error";
7648
+ return DO_NOT_DEV_ERROR_CODES.UNKNOWN_ERROR;
7621
7649
  }
7622
7650
  };
7623
7651
  }
@@ -7632,6 +7660,7 @@ import {
7632
7660
  extname as extname2,
7633
7661
  relative as relative2,
7634
7662
  resolve as resolve2,
7663
+ parse,
7635
7664
  isAbsolute as pathIsAbsolute
7636
7665
  } from "node:path";
7637
7666
  import { fileURLToPath as fileURLToPath2 } from "node:url";
@@ -7658,6 +7687,34 @@ var init_pathResolver = __esm({
7658
7687
  }
7659
7688
  });
7660
7689
 
7690
+ // packages/tooling/src/utils/typed-file-operations.ts
7691
+ function readPackageJson(filePath) {
7692
+ if (!pathExists(filePath)) {
7693
+ throw new DoNotDevError(
7694
+ `package.json not found: ${filePath}`,
7695
+ DO_NOT_DEV_ERROR_CODES.FILE_NOT_FOUND,
7696
+ { context: { filePath } }
7697
+ );
7698
+ }
7699
+ const content = readSync(filePath, { format: "json" });
7700
+ if (!content || typeof content !== "object" || !("name" in content)) {
7701
+ throw new DoNotDevError(
7702
+ `Invalid package.json: ${filePath}`,
7703
+ DO_NOT_DEV_ERROR_CODES.CONFIG_INVALID,
7704
+ { context: { filePath } }
7705
+ );
7706
+ }
7707
+ return content;
7708
+ }
7709
+ var init_typed_file_operations = __esm({
7710
+ "packages/tooling/src/utils/typed-file-operations.ts"() {
7711
+ "use strict";
7712
+ init_utils();
7713
+ init_pathResolver();
7714
+ init_errors();
7715
+ }
7716
+ });
7717
+
7661
7718
  // packages/tooling/src/bundler/utils.ts
7662
7719
  import { Buffer as Buffer2 } from "node:buffer";
7663
7720
  import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
@@ -7701,6 +7758,7 @@ init_dist2();
7701
7758
  // packages/tooling/src/utils/app-detection.ts
7702
7759
  init_utils();
7703
7760
  init_pathResolver();
7761
+ init_typed_file_operations();
7704
7762
  function detectApps(projectRoot) {
7705
7763
  const apps = [];
7706
7764
  const appsDir = joinPath(projectRoot, "apps");
@@ -7721,9 +7779,7 @@ function detectApps(projectRoot) {
7721
7779
  const packageJsonPath = joinPath(projectRoot, "package.json");
7722
7780
  if (pathExists(packageJsonPath)) {
7723
7781
  try {
7724
- const packageJson = readSync(packageJsonPath, {
7725
- format: "json"
7726
- });
7782
+ const packageJson = readPackageJson(packageJsonPath);
7727
7783
  if (packageJson && (packageJson.dependencies?.vite || packageJson.devDependencies?.vite || packageJson.dependencies?.next || packageJson.devDependencies?.next)) {
7728
7784
  const pathParts = projectRoot.split(/[/\\]/);
7729
7785
  const appName = pathParts[pathParts.length - 1] || "app";
@@ -7743,10 +7799,10 @@ function analyzeApp(appPath, appName) {
7743
7799
  if (!pathExists(packageJsonPath)) {
7744
7800
  return null;
7745
7801
  }
7746
- let packageJson;
7802
+ let packageJson = null;
7747
7803
  try {
7748
- packageJson = readSync(packageJsonPath, { format: "json" });
7749
- if (!packageJson) {
7804
+ packageJson = readPackageJson(packageJsonPath);
7805
+ if (!packageJson.name) {
7750
7806
  return null;
7751
7807
  }
7752
7808
  } catch {
@@ -7761,14 +7817,14 @@ function analyzeApp(appPath, appName) {
7761
7817
  const functionsPath = joinPath(appPath, "functions");
7762
7818
  const functionsStat = statSync2(functionsPath);
7763
7819
  const hasFunctions = pathExists(functionsPath) && (functionsStat?.isDirectory() ?? false);
7764
- let platform;
7820
+ let platform2;
7765
7821
  if (hasFunctions) {
7766
7822
  const firebaseJsonPath = joinPath(functionsPath, "firebase.json");
7767
7823
  const vercelJsonPath = joinPath(appPath, "vercel.json");
7768
7824
  if (pathExists(firebaseJsonPath)) {
7769
- platform = "firebase";
7825
+ platform2 = "firebase";
7770
7826
  } else if (pathExists(vercelJsonPath)) {
7771
- platform = "vercel";
7827
+ platform2 = "vercel";
7772
7828
  }
7773
7829
  }
7774
7830
  return {
@@ -7779,7 +7835,7 @@ function analyzeApp(appPath, appName) {
7779
7835
  framework,
7780
7836
  hasFunctions,
7781
7837
  functionsPath: hasFunctions ? functionsPath : void 0,
7782
- platform
7838
+ platform: platform2
7783
7839
  };
7784
7840
  }
7785
7841
 
@@ -7831,10 +7887,21 @@ function createAppEnv(appPath) {
7831
7887
 
7832
7888
  // packages/tooling/src/apps/preview.ts
7833
7889
  init_utils();
7834
- import { spawnSync as spawnSync2 } from "node:child_process";
7890
+ import {
7891
+ spawn,
7892
+ spawnSync as spawnSync2,
7893
+ execSync as execSync2
7894
+ } from "node:child_process";
7895
+ import { platform } from "node:os";
7835
7896
  init_cli_output();
7836
7897
  init_errors();
7837
7898
  init_pathResolver();
7899
+ var SIGNAL_EXIT_CODES = {
7900
+ SIGINT: 130,
7901
+ // 128 + 2
7902
+ SIGTERM: 143
7903
+ // 128 + 15
7904
+ };
7838
7905
  async function main() {
7839
7906
  const args = process.argv.slice(2);
7840
7907
  const appName = args[0] && args[0] !== "preview" ? args[0] : void 0;
@@ -7871,12 +7938,65 @@ async function main() {
7871
7938
  log.info(`Previewing ${app.name}...
7872
7939
  `);
7873
7940
  const turboArgs = ["preview", "--filter", app.packageName];
7874
- const result = spawnSync2("bunx", ["turbo", ...turboArgs], {
7941
+ const isWindows = platform() === "win32";
7942
+ const childProcess = spawn("bunx", ["turbo", ...turboArgs], {
7875
7943
  stdio: "inherit",
7876
7944
  env: createAppEnv(app.path),
7877
- cwd: projectRoot
7945
+ cwd: projectRoot,
7946
+ shell: isWindows
7947
+ });
7948
+ const cleanup = (signal) => {
7949
+ if (!childProcess.pid) return;
7950
+ log.debug(`Received ${signal}, cleaning up processes...`);
7951
+ if (isWindows) {
7952
+ try {
7953
+ execSync2(`taskkill /F /T /PID ${childProcess.pid}`, {
7954
+ stdio: "ignore",
7955
+ timeout: 2e3
7956
+ });
7957
+ } catch {
7958
+ }
7959
+ } else {
7960
+ try {
7961
+ process.kill(childProcess.pid, signal);
7962
+ } catch {
7963
+ }
7964
+ try {
7965
+ execSync2(`pkill -P ${childProcess.pid}`, {
7966
+ stdio: "ignore",
7967
+ timeout: 1e3
7968
+ });
7969
+ } catch {
7970
+ }
7971
+ }
7972
+ };
7973
+ const signals = ["SIGINT", "SIGTERM"];
7974
+ const handlers = [];
7975
+ for (const signal of signals) {
7976
+ const handler = () => {
7977
+ cleanup(signal);
7978
+ handlers.forEach((h2) => h2());
7979
+ process.exit(SIGNAL_EXIT_CODES[signal] ?? 130);
7980
+ };
7981
+ process.on(signal, handler);
7982
+ handlers.push(() => process.removeListener(signal, handler));
7983
+ }
7984
+ return new Promise((resolve4) => {
7985
+ childProcess.on("exit", (code, signal) => {
7986
+ handlers.forEach((h2) => h2());
7987
+ if (signal) {
7988
+ log.debug(`Process killed by signal: ${signal}`);
7989
+ resolve4(SIGNAL_EXIT_CODES[signal] ?? 130);
7990
+ } else {
7991
+ resolve4(code ?? 0);
7992
+ }
7993
+ });
7994
+ childProcess.on("error", (error2) => {
7995
+ handlers.forEach((h2) => h2());
7996
+ log.error(`Failed to start preview server: ${error2.message}`);
7997
+ resolve4(1);
7998
+ });
7878
7999
  });
7879
- return result.status || 0;
7880
8000
  }
7881
8001
  export {
7882
8002
  main
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Supabase Setup Command Wrapper
3
+ * @description Re-exports supabaseSetup from tooling for CLI bundling.
4
+ */
5
+ export { supabaseSetup as main } from '@donotdev/tooling';
6
+ //# sourceMappingURL=supabase-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-setup.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/supabase-setup.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // packages/cli/src/bin/commands/supabase-setup.ts
2
+ /**
3
+ * @fileoverview Supabase Setup Command Wrapper
4
+ * @description Re-exports supabaseSetup from tooling for CLI bundling.
5
+ */
6
+ export { supabaseSetup as main } from '@donotdev/tooling';
7
+ //# sourceMappingURL=supabase-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-setup.js","sourceRoot":"","sources":["../../../src/bin/commands/supabase-setup.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD;;;GAGG;AAEH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}