@donotdev/cli 0.0.6 → 0.0.8

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 (87) hide show
  1. package/README.md +3 -18
  2. package/dependencies-matrix.json +64 -121
  3. package/dist/bin/commands/build.js +173 -161
  4. package/dist/bin/commands/bump.js +181 -156
  5. package/dist/bin/commands/cacheout.js +188 -171
  6. package/dist/bin/commands/create-app.js +213 -156
  7. package/dist/bin/commands/create-project.js +183 -154
  8. package/dist/bin/commands/deploy.js +491 -477
  9. package/dist/bin/commands/dev.js +176 -160
  10. package/dist/bin/commands/emu.js +181 -165
  11. package/dist/bin/commands/format.js +191 -174
  12. package/dist/bin/commands/lint.js +191 -171
  13. package/dist/bin/commands/preview.js +177 -161
  14. package/dist/bin/commands/sync-secrets.js +172 -158
  15. package/dist/bin/commands/wai.d.ts +11 -0
  16. package/dist/bin/commands/wai.d.ts.map +1 -0
  17. package/dist/bin/commands/wai.js +12 -0
  18. package/dist/bin/commands/wai.js.map +1 -0
  19. package/dist/bin/dndev.js +24 -24
  20. package/dist/bin/donotdev.js +24 -24
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +661 -669
  24. package/dist/index.js.map +1 -1
  25. package/package.json +1 -1
  26. package/templates/app-demo/src/config/app.ts.example +12 -0
  27. package/templates/app-next/src/config/app.ts.example +75 -48
  28. package/templates/app-vite/index.html.example +71 -37
  29. package/templates/app-vite/src/config/app.ts.example +75 -47
  30. package/templates/app-vite/src/pages/FormPageExample.tsx.example +152 -0
  31. package/templates/app-vite/src/pages/HomePage.tsx.example +81 -134
  32. package/templates/app-vite/src/pages/ListPageExample.tsx.example +88 -0
  33. package/templates/functions-firebase/build.mjs.example +8 -1
  34. package/templates/functions-firebase/functions-firebase/build.mjs.example +8 -1
  35. package/templates/functions-firebase/functions-firebase/src/index.ts.example +19 -25
  36. package/templates/functions-firebase/functions.config.js.example +35 -0
  37. package/templates/root-consumer/entities/ExampleEntity.ts.example +223 -0
  38. package/templates/root-consumer/entities/demo.ts.example +576 -0
  39. package/templates/root-consumer/entities/index.ts.example +15 -0
  40. package/templates/root-consumer/eslint.config.js.example +2 -80
  41. package/templates/root-consumer/guides/{AGENT_START_HERE.md.example → dndev/AGENT_START_HERE.md.example} +22 -0
  42. package/templates/root-consumer/guides/dndev/COMPONENTS_CRUD.md.example +231 -0
  43. package/templates/root-consumer/guides/{SETUP_AUTH.md.example → dndev/SETUP_AUTH.md.example} +30 -0
  44. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +539 -0
  45. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +116 -0
  46. package/templates/root-consumer/guides/{SETUP_I18N.md.example → dndev/SETUP_I18N.md.example} +46 -0
  47. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +404 -0
  48. package/templates/root-consumer/guides/wai-way/agents/architect.md.example +78 -0
  49. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +87 -0
  50. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +325 -0
  51. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +100 -0
  52. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +281 -0
  53. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +77 -0
  54. package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +104 -0
  55. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +124 -0
  56. package/templates/root-consumer/guides/wai-way/blueprints/4_configure.md.example +165 -0
  57. package/templates/root-consumer/guides/wai-way/context_map.json.example +95 -0
  58. package/templates/root-consumer/guides/wai-way/entity_patterns.md.example +840 -0
  59. package/templates/root-consumer/guides/wai-way/page_patterns.md.example +686 -0
  60. package/templates/root-consumer/guides/wai-way/presets_guide.md.example +217 -0
  61. package/templates/root-consumer/guides/wai-way/spec_template.md.example +312 -0
  62. package/templates/functions-firebase/functions-firebase/src/crud/createEntity.ts.example +0 -19
  63. package/templates/functions-firebase/functions-firebase/src/crud/deleteEntity.ts.example +0 -14
  64. package/templates/functions-firebase/functions-firebase/src/crud/getEntity.ts.example +0 -14
  65. package/templates/functions-firebase/functions-firebase/src/crud/index.ts.example +0 -12
  66. package/templates/functions-firebase/functions-firebase/src/crud/listEntities.ts.example +0 -14
  67. package/templates/functions-firebase/functions-firebase/src/crud/updateEntity.ts.example +0 -14
  68. package/templates/root-consumer/guides/COMPONENTS_CRUD.md.example +0 -70
  69. package/templates/root-consumer/guides/SETUP_CRUD.md.example +0 -1244
  70. package/templates/root-consumer/guides/SETUP_FUNCTIONS.md.example +0 -114
  71. /package/templates/root-consumer/guides/{COMPONENTS_ADV.md.example → dndev/COMPONENTS_ADV.md.example} +0 -0
  72. /package/templates/root-consumer/guides/{COMPONENTS_ATOMIC.md.example → dndev/COMPONENTS_ATOMIC.md.example} +0 -0
  73. /package/templates/root-consumer/guides/{COMPONENTS_UI.md.example → dndev/COMPONENTS_UI.md.example} +0 -0
  74. /package/templates/root-consumer/guides/{ENV_SETUP.md.example → dndev/ENV_SETUP.md.example} +0 -0
  75. /package/templates/root-consumer/guides/{INDEX.md.example → dndev/INDEX.md.example} +0 -0
  76. /package/templates/root-consumer/guides/{SETUP_APP_CONFIG.md.example → dndev/SETUP_APP_CONFIG.md.example} +0 -0
  77. /package/templates/root-consumer/guides/{SETUP_BILLING.md.example → dndev/SETUP_BILLING.md.example} +0 -0
  78. /package/templates/root-consumer/guides/{SETUP_LAYOUTS.md.example → dndev/SETUP_LAYOUTS.md.example} +0 -0
  79. /package/templates/root-consumer/guides/{SETUP_OAUTH.md.example → dndev/SETUP_OAUTH.md.example} +0 -0
  80. /package/templates/root-consumer/guides/{SETUP_PAGES.md.example → dndev/SETUP_PAGES.md.example} +0 -0
  81. /package/templates/root-consumer/guides/{SETUP_PWA.md.example → dndev/SETUP_PWA.md.example} +0 -0
  82. /package/templates/root-consumer/guides/{SETUP_THEMES.md.example → dndev/SETUP_THEMES.md.example} +0 -0
  83. /package/templates/root-consumer/guides/{USE_ROUTING.md.example → dndev/USE_ROUTING.md.example} +0 -0
  84. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/APP_CHECK.md.example +0 -0
  85. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/COOKIE_REFERENCE.md.example +0 -0
  86. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/EMULATORS.md.example +0 -0
  87. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/VERSION_CONTROL.md.example +0 -0
@@ -496,6 +496,7 @@ var init_dist = __esm({
496
496
  });
497
497
 
498
498
  // node_modules/.bun/@clack+prompts@0.11.0/node_modules/@clack/prompts/dist/index.mjs
499
+ import { stripVTControlCharacters as S2 } from "node:util";
499
500
  import y2 from "node:process";
500
501
  function ce() {
501
502
  return y2.platform !== "win32" ? y2.env.TERM !== "linux" : !!y2.env.CI || !!y2.env.WT_SESSION || !!y2.env.TERMINUS_SUBLIME || y2.env.ConEmuTask === "{cmd::Cmder}" || y2.env.TERM_PROGRAM === "Terminus-Sublime" || y2.env.TERM_PROGRAM === "vscode" || y2.env.TERM === "xterm-256color" || y2.env.TERM === "alacritty" || y2.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
@@ -606,6 +607,7 @@ ${import_picocolors.default.gray(d2)} ${t}
606
607
  });
607
608
 
608
609
  // packages/tooling/src/utils/cli-output.ts
610
+ import "node:os";
609
611
  function supportsColor() {
610
612
  if (process.env.NO_COLOR) return false;
611
613
  if (process.platform === "win32") {
@@ -751,155 +753,6 @@ var init_cli_output = __esm({
751
753
  }
752
754
  });
753
755
 
754
- // packages/core/config/constants.js
755
- function getPatternsFor(type, repoRoot = null) {
756
- const patterns = SCAN_PATTERNS[type];
757
- if (!patterns) {
758
- throw new Error(`Unknown pattern type: ${type}`);
759
- }
760
- if (repoRoot && patterns.framework) {
761
- return {
762
- ...patterns,
763
- framework: patterns.framework.map((pattern) => `${repoRoot}/${pattern}`)
764
- };
765
- }
766
- return patterns;
767
- }
768
- function getGlobOptionsFor(type) {
769
- return GLOB_OPTIONS[type] || GLOB_OPTIONS.base;
770
- }
771
- var I18N_PATHS, SCAN_PATTERNS, GLOB_OPTIONS;
772
- var init_constants = __esm({
773
- "packages/core/config/constants.js"() {
774
- "use strict";
775
- init_utils();
776
- I18N_PATHS = {
777
- // Monorepo source structure (locales at root, not in src/)
778
- SOURCE_ROOT: "packages/core/i18n",
779
- SOURCE_LOCALES: "packages/core/i18n/locales",
780
- SOURCE_EAGER: "packages/core/i18n/locales/eager",
781
- SOURCE_LAZY: "packages/core/i18n/locales/lazy",
782
- // Published structure (same as source - no flattening needed)
783
- PUBLISHED_ROOT: "i18n",
784
- PUBLISHED_LOCALES: "i18n/locales",
785
- PUBLISHED_EAGER: "i18n/locales/eager",
786
- PUBLISHED_LAZY: "i18n/locales/lazy"
787
- };
788
- SCAN_PATTERNS = {
789
- routes: {
790
- consumer: ["src/**/*Page.tsx", "src/pages/**/*Page.tsx"],
791
- exclude: [
792
- "**/node_modules/**",
793
- "**/dist/**",
794
- "**/build/**",
795
- "**/*.test.tsx",
796
- "**/*.stories.tsx"
797
- ],
798
- extensions: [".tsx"]
799
- },
800
- css: {
801
- consumer: ["src/**/*.css"],
802
- themes: ["src/**/*.css"],
803
- extensions: [".css", ".scss", ".sass"],
804
- framework: [
805
- "packages/ui/src/**/*.css",
806
- "packages/core/components/src/**/*.css",
807
- "packages/core/templates/src/**/*.css"
808
- ]
809
- },
810
- i18n: {
811
- eager: ["src/locales/*_*.json"],
812
- lazy: ["src/**/locales/*_*.json", "!src/locales/*_*.json"],
813
- framework: {
814
- eager: [`${I18N_PATHS.SOURCE_EAGER}/*_*.json`],
815
- lazy: [`${I18N_PATHS.SOURCE_LAZY}/*_*.json`]
816
- },
817
- extensions: [".json"]
818
- },
819
- assets: {
820
- consumer: ["public/**/*"],
821
- fallback: ["manifest.json"],
822
- modern: [
823
- "logo.svg",
824
- "favicon.svg",
825
- "apple-touch-icon.png",
826
- "android-chrome-192x192.png",
827
- "android-chrome-512x512.png"
828
- ],
829
- patterns: [
830
- "favicon.svg",
831
- "favicon.ico",
832
- "favicon-*.png",
833
- "logo.svg",
834
- "logo.png",
835
- "logo.webp",
836
- "logo.avif",
837
- "apple-touch-icon*.png",
838
- "android-chrome-*.png",
839
- "manifest.json"
840
- ],
841
- fonts: ["fonts/**/*.woff2", "fonts/**/*.woff", "fonts/**/*.ttf"],
842
- framework: ["packages/ui/assets/**/*"]
843
- },
844
- pwa: {
845
- consumer: [
846
- "public/manifest.json",
847
- "public/service-worker.js",
848
- "public/sw.js",
849
- "public/icon-192x192.png",
850
- "public/icon-512x512.png",
851
- "public/favicon.ico",
852
- "public/favicon.svg",
853
- "public/apple-touch-icon.png",
854
- "public/logo.svg"
855
- ],
856
- exclude: ["**/node_modules/**", "**/dist/**", "**/build/**"],
857
- extensions: [".json", ".js", ".png", ".svg", ".ico"],
858
- framework: ["packages/ui/assets/**/*"]
859
- },
860
- globalIgnore: [
861
- "**/node_modules/**",
862
- "**/dist/**",
863
- "**/build/**",
864
- "**/.git/**",
865
- "**/coverage/**",
866
- "**/test/**"
867
- ]
868
- };
869
- GLOB_OPTIONS = {
870
- base: {
871
- absolute: true,
872
- onlyFiles: true,
873
- ignore: SCAN_PATTERNS.globalIgnore
874
- },
875
- css: {
876
- absolute: true,
877
- onlyFiles: true,
878
- ignore: [...SCAN_PATTERNS.globalIgnore, "**/*.test.css"]
879
- },
880
- routes: {
881
- absolute: true,
882
- onlyFiles: true,
883
- ignore: [
884
- ...SCAN_PATTERNS.globalIgnore,
885
- "**/*.test.tsx",
886
- "**/*.stories.tsx"
887
- ]
888
- },
889
- i18n: {
890
- absolute: true,
891
- onlyFiles: true,
892
- ignore: SCAN_PATTERNS.globalIgnore
893
- },
894
- assets: {
895
- absolute: true,
896
- onlyFiles: true,
897
- ignore: SCAN_PATTERNS.globalIgnore
898
- }
899
- };
900
- }
901
- });
902
-
903
756
  // node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js
904
757
  var require_array = __commonJS({
905
758
  "node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js"(exports) {
@@ -6484,7 +6337,167 @@ var require_out4 = __commonJS({
6484
6337
  }
6485
6338
  });
6486
6339
 
6340
+ // packages/core/config/constants.js
6341
+ function getPatternsFor(type, repoRoot = null) {
6342
+ const patterns = SCAN_PATTERNS[type];
6343
+ if (!patterns) {
6344
+ throw new Error(`Unknown pattern type: ${type}`);
6345
+ }
6346
+ if (repoRoot && patterns.framework) {
6347
+ return {
6348
+ ...patterns,
6349
+ framework: patterns.framework.map((pattern) => `${repoRoot}/${pattern}`)
6350
+ };
6351
+ }
6352
+ return patterns;
6353
+ }
6354
+ function getGlobOptionsFor(type) {
6355
+ return GLOB_OPTIONS[type] || GLOB_OPTIONS.base;
6356
+ }
6357
+ var I18N_PATHS, SCAN_PATTERNS, GLOB_OPTIONS;
6358
+ var init_constants = __esm({
6359
+ "packages/core/config/constants.js"() {
6360
+ "use strict";
6361
+ init_utils();
6362
+ I18N_PATHS = {
6363
+ // Monorepo source structure (locales at root, not in src/)
6364
+ SOURCE_ROOT: "packages/core/i18n",
6365
+ SOURCE_LOCALES: "packages/core/i18n/locales",
6366
+ SOURCE_EAGER: "packages/core/i18n/locales/eager",
6367
+ SOURCE_LAZY: "packages/core/i18n/locales/lazy",
6368
+ // Published structure (same as source - no flattening needed)
6369
+ PUBLISHED_ROOT: "i18n",
6370
+ PUBLISHED_LOCALES: "i18n/locales",
6371
+ PUBLISHED_EAGER: "i18n/locales/eager",
6372
+ PUBLISHED_LAZY: "i18n/locales/lazy"
6373
+ };
6374
+ SCAN_PATTERNS = {
6375
+ routes: {
6376
+ consumer: ["src/**/*Page.tsx", "src/pages/**/*Page.tsx"],
6377
+ exclude: [
6378
+ "**/node_modules/**",
6379
+ "**/dist/**",
6380
+ "**/build/**",
6381
+ "**/*.test.tsx",
6382
+ "**/*.stories.tsx"
6383
+ ],
6384
+ extensions: [".tsx"]
6385
+ },
6386
+ css: {
6387
+ consumer: ["src/**/*.css"],
6388
+ themes: ["src/**/*.css"],
6389
+ extensions: [".css", ".scss", ".sass"],
6390
+ framework: [
6391
+ "packages/ui/src/**/*.css",
6392
+ "packages/core/components/src/**/*.css",
6393
+ "packages/core/templates/src/**/*.css"
6394
+ ]
6395
+ },
6396
+ i18n: {
6397
+ eager: ["src/locales/*_*.json"],
6398
+ lazy: [
6399
+ "src/**/locales/*_*.json",
6400
+ "!src/locales/*_*.json",
6401
+ // Auto-detect shared entity translations in monorepos (if exists, use it; if not, no problem)
6402
+ "../../entities/locales/*_*.json"
6403
+ ],
6404
+ // Additional paths from workspace packages (e.g., shared entities)
6405
+ // Consumers can still configure via i18n.additionalPaths in dndev/vite config for custom paths
6406
+ // Example: ['../../packages/shared/locales/*_*.json']
6407
+ additional: [],
6408
+ framework: {
6409
+ eager: [`${I18N_PATHS.SOURCE_EAGER}/*_*.json`],
6410
+ lazy: [`${I18N_PATHS.SOURCE_LAZY}/*_*.json`]
6411
+ },
6412
+ extensions: [".json"]
6413
+ },
6414
+ assets: {
6415
+ consumer: ["public/**/*"],
6416
+ fallback: ["manifest.json"],
6417
+ modern: [
6418
+ "logo.svg",
6419
+ "favicon.svg",
6420
+ "apple-touch-icon.png",
6421
+ "android-chrome-192x192.png",
6422
+ "android-chrome-512x512.png"
6423
+ ],
6424
+ patterns: [
6425
+ "favicon.svg",
6426
+ "favicon.ico",
6427
+ "favicon-*.png",
6428
+ "logo.svg",
6429
+ "logo.png",
6430
+ "logo.webp",
6431
+ "logo.avif",
6432
+ "apple-touch-icon*.png",
6433
+ "android-chrome-*.png",
6434
+ "manifest.json"
6435
+ ],
6436
+ fonts: ["fonts/**/*.woff2", "fonts/**/*.woff", "fonts/**/*.ttf"],
6437
+ framework: ["packages/ui/assets/**/*"]
6438
+ },
6439
+ pwa: {
6440
+ consumer: [
6441
+ "public/manifest.json",
6442
+ "public/service-worker.js",
6443
+ "public/sw.js",
6444
+ "public/icon-192x192.png",
6445
+ "public/icon-512x512.png",
6446
+ "public/favicon.ico",
6447
+ "public/favicon.svg",
6448
+ "public/apple-touch-icon.png",
6449
+ "public/logo.svg"
6450
+ ],
6451
+ exclude: ["**/node_modules/**", "**/dist/**", "**/build/**"],
6452
+ extensions: [".json", ".js", ".png", ".svg", ".ico"],
6453
+ framework: ["packages/ui/assets/**/*"]
6454
+ },
6455
+ globalIgnore: [
6456
+ "**/node_modules/**",
6457
+ "**/dist/**",
6458
+ "**/build/**",
6459
+ "**/.git/**",
6460
+ "**/coverage/**",
6461
+ "**/test/**"
6462
+ ]
6463
+ };
6464
+ GLOB_OPTIONS = {
6465
+ base: {
6466
+ absolute: true,
6467
+ onlyFiles: true,
6468
+ ignore: SCAN_PATTERNS.globalIgnore
6469
+ },
6470
+ css: {
6471
+ absolute: true,
6472
+ onlyFiles: true,
6473
+ ignore: [...SCAN_PATTERNS.globalIgnore, "**/*.test.css"]
6474
+ },
6475
+ routes: {
6476
+ absolute: true,
6477
+ onlyFiles: true,
6478
+ ignore: [
6479
+ ...SCAN_PATTERNS.globalIgnore,
6480
+ "**/*.test.tsx",
6481
+ "**/*.stories.tsx"
6482
+ ]
6483
+ },
6484
+ i18n: {
6485
+ absolute: true,
6486
+ onlyFiles: true,
6487
+ ignore: SCAN_PATTERNS.globalIgnore
6488
+ },
6489
+ assets: {
6490
+ absolute: true,
6491
+ onlyFiles: true,
6492
+ ignore: SCAN_PATTERNS.globalIgnore
6493
+ }
6494
+ };
6495
+ }
6496
+ });
6497
+
6487
6498
  // packages/core/config/utils/PathResolver.ts
6499
+ import * as fs from "node:fs";
6500
+ import "node:fs";
6488
6501
  import { createRequire } from "node:module";
6489
6502
  import {
6490
6503
  resolve,
@@ -6496,7 +6509,6 @@ import {
6496
6509
  extname
6497
6510
  } from "node:path";
6498
6511
  import { fileURLToPath } from "node:url";
6499
- import * as fs from "node:fs";
6500
6512
  function safeExecuteAsync(fn, message) {
6501
6513
  return fn().catch((error2) => {
6502
6514
  throw new Error(
@@ -6509,8 +6521,8 @@ var init_PathResolver = __esm({
6509
6521
  "packages/core/config/utils/PathResolver.ts"() {
6510
6522
  "use strict";
6511
6523
  init_utils();
6512
- init_constants();
6513
6524
  import_fast_glob = __toESM(require_out4(), 1);
6525
+ init_constants();
6514
6526
  constants = {
6515
6527
  getGlobOptionsFor: getGlobOptionsFor || void 0,
6516
6528
  SCAN_PATTERNS: SCAN_PATTERNS || void 0,
@@ -7495,6 +7507,7 @@ import {
7495
7507
  resolve as resolve2,
7496
7508
  isAbsolute as pathIsAbsolute
7497
7509
  } from "node:path";
7510
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
7498
7511
  function detectExecutionMode() {
7499
7512
  const currentDir = process.cwd();
7500
7513
  const toolingPath = joinPath(currentDir, PACKAGE_PATHS.TOOLING);
@@ -7563,17 +7576,18 @@ var init_pathResolver = __esm({
7563
7576
  });
7564
7577
 
7565
7578
  // packages/tooling/src/bundler/utils.ts
7579
+ import { Buffer as Buffer2 } from "node:buffer";
7580
+ import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
7566
7581
  import { createRequire as createRequire3 } from "node:module";
7567
- import { fileURLToPath as fileURLToPath2 } from "node:url";
7568
7582
  import { dirname as dirname3, resolve as resolve3 } from "node:path";
7569
- import { Buffer as Buffer2 } from "node:buffer";
7570
7583
  import process from "node:process";
7584
+ import { fileURLToPath as fileURLToPath3 } from "node:url";
7571
7585
  var require2, __filename, __dirname;
7572
7586
  var init_utils = __esm({
7573
7587
  "packages/tooling/src/bundler/utils.ts"() {
7574
7588
  "use strict";
7575
7589
  require2 = createRequire3(import.meta.url);
7576
- __filename = fileURLToPath2(import.meta.url);
7590
+ __filename = fileURLToPath3(import.meta.url);
7577
7591
  __dirname = dirname3(__filename);
7578
7592
  if (typeof globalThis !== "undefined") {
7579
7593
  globalThis.require = require2;
@@ -7717,6 +7731,7 @@ function writePackageJson(filePath, pkg) {
7717
7731
  sorted.devDependencies = sortObj(pkg.devDependencies);
7718
7732
  if (pkg.peerDependencies)
7719
7733
  sorted.peerDependencies = sortObj(pkg.peerDependencies);
7734
+ if (pkg.overrides) sorted.overrides = sortObj(pkg.overrides);
7720
7735
  if (pkg.peerDependenciesMeta)
7721
7736
  sorted.peerDependenciesMeta = sortObj(pkg.peerDependenciesMeta);
7722
7737
  writeSync(filePath, JSON.stringify(sorted, null, 2) + "\n", {
@@ -7786,7 +7801,8 @@ function detectProjectDeps(files) {
7786
7801
  for (const [field, deps] of [
7787
7802
  ["dependencies", pkg.dependencies],
7788
7803
  ["devDependencies", pkg.devDependencies],
7789
- ["peerDependencies", pkg.peerDependencies]
7804
+ ["peerDependencies", pkg.peerDependencies],
7805
+ ["overrides", pkg.overrides]
7790
7806
  ]) {
7791
7807
  if (!deps) continue;
7792
7808
  for (const [name, version] of Object.entries(deps)) {
@@ -7946,10 +7962,19 @@ ${majorUpdates.length} major update(s) available (manual review required):`
7946
7962
  const deps = pkg[field];
7947
7963
  if (deps?.[pkgName]) {
7948
7964
  const normalizedLatest = normalizeVersion(update.latest);
7949
- deps[pkgName] = ensureCaretPrefix(normalizedLatest);
7965
+ deps[pkgName] = field === "overrides" ? normalizedLatest : ensureCaretPrefix(normalizedLatest);
7950
7966
  changed = true;
7951
7967
  }
7952
7968
  }
7969
+ if (pkg.overrides) {
7970
+ for (const u2 of updates) {
7971
+ if (u2.file === file && u2.pkg.startsWith("@donotdev/") && u2.field !== "overrides" && pkg.overrides[u2.pkg]) {
7972
+ const normalizedLatest = normalizeVersion(u2.latest);
7973
+ pkg.overrides[u2.pkg] = normalizedLatest;
7974
+ changed = true;
7975
+ }
7976
+ }
7977
+ }
7953
7978
  if (changed) {
7954
7979
  writePackageJson(file, pkg);
7955
7980
  const relativeFile = appRoot ? getRelativePathBetween(appRoot, file) : file;