@donotdev/cli 0.0.7 → 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.
package/README.md CHANGED
@@ -157,7 +157,7 @@ dndev sync-secrets --dry-run
157
157
 
158
158
  ### `dndev format [files]`
159
159
 
160
- Format code using framework's ESLint and Prettier configurations.
160
+ Format code using Prettier.
161
161
 
162
162
  ```bash
163
163
  dndev format
@@ -166,23 +166,8 @@ dndev format src/**/*.ts
166
166
 
167
167
  **Features:**
168
168
 
169
- - Uses @donotdev/core ESLint rules
170
- - Auto-fixes violations
171
- - Enforces framework conventions
172
- - Import order sorting
173
- - Type safety checks
174
-
175
- **Setup:**
176
- Create `eslint.config.js` in your project:
177
-
178
- ```javascript
179
- import dndevConfig from '@donotdev/core/eslint';
180
-
181
- export default [
182
- ...dndevConfig,
183
- // Your custom rules
184
- ];
185
- ```
169
+ - Auto-formats code with Prettier
170
+ - Consistent code style
186
171
 
187
172
  ### `dndev clean`
188
173
 
@@ -2,7 +2,7 @@
2
2
  "$schema": "./dependencies-matrix.schema.json",
3
3
  "version": "0.0.5",
4
4
  "description": "Centralized dependency versions for DoNotDev framework. Single source of truth for all external dependencies. ⚠️ SYNC REQUIRED: When adding/removing @donotdev/* feature packages (auth, billing, crud, oauth), also update packages/core/config/constants.js BUNDLING.optionalFeatures array.",
5
- "lastUpdated": "2026-01-23",
5
+ "lastUpdated": "2026-01-25",
6
6
  "migrationGuides": {
7
7
  "0.0→0.1": {
8
8
  "path": "docs/migration/v0.0-to-v0.1.md",
@@ -35,25 +35,25 @@
35
35
  "@donotdev/components": {
36
36
  "description": "UI components package",
37
37
  "packages": {
38
- "@donotdev/components": "^0.0.12"
38
+ "@donotdev/components": "^0.0.13"
39
39
  }
40
40
  },
41
41
  "@donotdev/core": {
42
42
  "description": "Core framework package",
43
43
  "packages": {
44
- "@donotdev/core": "^0.0.14"
44
+ "@donotdev/core": "^0.0.17"
45
45
  }
46
46
  },
47
47
  "@donotdev/crud": {
48
48
  "description": "CRUD operations package",
49
49
  "packages": {
50
- "@donotdev/crud": "^0.0.7"
50
+ "@donotdev/crud": "^0.0.8"
51
51
  }
52
52
  },
53
53
  "@donotdev/firebase": {
54
54
  "description": "Firebase provider package",
55
55
  "packages": {
56
- "@donotdev/firebase": "^0.0.5"
56
+ "@donotdev/firebase": "^0.0.6"
57
57
  }
58
58
  },
59
59
  "@donotdev/functions": {
@@ -77,7 +77,7 @@
77
77
  "@donotdev/ui": {
78
78
  "description": "UI and routing package",
79
79
  "packages": {
80
- "@donotdev/ui": "^0.0.8"
80
+ "@donotdev/ui": "^0.0.9"
81
81
  }
82
82
  },
83
83
  "react": {
@@ -348,7 +348,7 @@
348
348
  "@donotdev/cli": {
349
349
  "description": "Cli package",
350
350
  "packages": {
351
- "@donotdev/cli": "^0.0.6"
351
+ "@donotdev/cli": "^0.0.7"
352
352
  }
353
353
  },
354
354
  "react-easy-crop": {
@@ -356,6 +356,14 @@
356
356
  "packages": {
357
357
  "react-easy-crop": "^5.5.6"
358
358
  }
359
+ },
360
+ "@dnd-kit": {
361
+ "description": "Drag and drop library - auto-installed as transitive dep for crud",
362
+ "packages": {
363
+ "@dnd-kit/core": "^6.3.1",
364
+ "@dnd-kit/sortable": "^10.0.0",
365
+ "@dnd-kit/utilities": "^3.2.2"
366
+ }
359
367
  }
360
368
  },
361
369
  "overrides": {
@@ -370,29 +378,12 @@
370
378
  "lucide-react",
371
379
  "monitoring"
372
380
  ],
373
- "dependencies": [
374
- "i18n",
375
- "react-query",
376
- "fast-glob",
377
- "cli-prompts"
378
- ],
379
- "devDependencies": [
380
- "vite",
381
- "next",
382
- "typescript"
383
- ]
381
+ "dependencies": ["i18n", "react-query", "fast-glob", "cli-prompts"],
382
+ "devDependencies": ["vite", "next", "typescript"]
384
383
  },
385
384
  "@donotdev/components": {
386
- "dependencies": [
387
- "radix",
388
- "styling",
389
- "react-day-picker"
390
- ],
391
- "peerDependencies": [
392
- "react",
393
- "shiki",
394
- "lucide-react"
395
- ],
385
+ "dependencies": ["radix", "styling", "react-day-picker"],
386
+ "peerDependencies": ["react", "shiki", "lucide-react"],
396
387
  "peerDependenciesMeta": {
397
388
  "shiki": {
398
389
  "optional": true
@@ -408,10 +399,7 @@
408
399
  "routing",
409
400
  "validation"
410
401
  ],
411
- "dependencies": [
412
- "forms",
413
- "seo"
414
- ],
402
+ "dependencies": ["forms", "seo"],
415
403
  "peerDependenciesMeta": {
416
404
  "@donotdev/crud": {
417
405
  "optional": true
@@ -419,28 +407,20 @@
419
407
  }
420
408
  },
421
409
  "@donotdev/auth": {
422
- "peerDependencies": [
423
- "react",
424
- "firebase"
425
- ]
410
+ "peerDependencies": ["react", "firebase"]
426
411
  },
427
412
  "@donotdev/billing": {
428
- "peerDependencies": [
429
- "react",
430
- "lucide-react",
431
- "stripe"
432
- ]
413
+ "peerDependencies": ["react", "lucide-react", "stripe"]
433
414
  },
434
415
  "@donotdev/crud": {
435
416
  "dependencies": [
436
417
  "@donotdev/components",
437
418
  "@donotdev/core",
438
419
  "react-easy-crop",
420
+ "@dnd-kit",
439
421
  "forms-resolvers"
440
422
  ],
441
- "devDependencies": [
442
- "tiptap"
443
- ],
423
+ "devDependencies": ["tiptap"],
444
424
  "peerDependencies": [
445
425
  "@donotdev/firebase",
446
426
  "react",
@@ -457,30 +437,18 @@
457
437
  }
458
438
  },
459
439
  "@donotdev/firebase": {
460
- "dependencies": [
461
- "browser-image-compression"
462
- ],
463
- "peerDependencies": [
464
- "firebase"
465
- ]
440
+ "dependencies": ["browser-image-compression"],
441
+ "peerDependencies": ["firebase"]
466
442
  },
467
443
  "@donotdev/i18n": {
468
- "dependencies": [
469
- "i18n"
470
- ],
471
- "peerDependencies": [
472
- "lucide-react"
473
- ]
444
+ "dependencies": ["i18n"],
445
+ "peerDependencies": ["lucide-react"]
474
446
  },
475
447
  "@donotdev/stores": {
476
- "dependencies": [
477
- "zustand"
478
- ]
448
+ "dependencies": ["zustand"]
479
449
  },
480
450
  "@donotdev/schemas": {
481
- "dependencies": [
482
- "validation"
483
- ]
451
+ "dependencies": ["validation"]
484
452
  },
485
453
  "@donotdev/types": {
486
454
  "devDependencies": [
@@ -492,29 +460,15 @@
492
460
  ]
493
461
  },
494
462
  "@donotdev/utils": {
495
- "dependencies": [
496
- "zustand"
497
- ],
498
- "peerDependencies": [
499
- "monitoring"
500
- ],
501
- "devDependencies": [
502
- "validation",
503
- "firebase",
504
- "i18n"
505
- ]
463
+ "dependencies": ["zustand"],
464
+ "peerDependencies": ["monitoring"],
465
+ "devDependencies": ["validation", "firebase", "i18n"]
506
466
  },
507
467
  "@donotdev/hooks": {
508
- "dependencies": [
509
- "react-query"
510
- ]
468
+ "dependencies": ["react-query"]
511
469
  },
512
470
  "@donotdev/cli": {
513
- "dependencies": [
514
- "cli-prompts",
515
- "cli-commander",
516
- "fast-glob"
517
- ]
471
+ "dependencies": ["cli-prompts", "cli-commander", "fast-glob"]
518
472
  },
519
473
  "@donotdev/tooling": {
520
474
  "dependencies": [
@@ -524,19 +478,13 @@
524
478
  "esbuild",
525
479
  "rollup"
526
480
  ],
527
- "devDependencies": [
528
- "yaml"
529
- ]
481
+ "devDependencies": ["yaml"]
530
482
  },
531
483
  "@donotdev/oauth": {
532
- "peerDependencies": [
533
- "react"
534
- ]
484
+ "peerDependencies": ["react"]
535
485
  },
536
486
  "@donotdev/functions": {
537
- "dependencies": [
538
- "@donotdev/core"
539
- ],
487
+ "dependencies": ["@donotdev/core"],
540
488
  "peerDependencies": [
541
489
  "firebase-functions",
542
490
  "stripe",
@@ -546,10 +494,7 @@
546
494
  ]
547
495
  },
548
496
  "@donotdev/adv-comps": {
549
- "peerDependencies": [
550
- "react",
551
- "shiki"
552
- ],
497
+ "peerDependencies": ["react", "shiki"],
553
498
  "dependencies": [],
554
499
  "peerDependenciesMeta": {
555
500
  "shiki": {
@@ -686,9 +631,7 @@
686
631
  "lucide-react",
687
632
  "firebase"
688
633
  ],
689
- "devDependencies": [
690
- "root-consumer-tooling"
691
- ]
634
+ "devDependencies": ["root-consumer-tooling"]
692
635
  },
693
636
  "consumer-vite": {
694
637
  "description": "Vite app for consumers (filter inlined packages)",
@@ -712,13 +655,7 @@
712
655
  "i18n",
713
656
  "react-query"
714
657
  ],
715
- "devDependencies": [
716
- "vite",
717
- "typescript",
718
- "types",
719
- "vite-deps",
720
- "postcss"
721
- ]
658
+ "devDependencies": ["vite", "typescript", "types", "vite-deps", "postcss"]
722
659
  },
723
660
  "consumer-nextjs": {
724
661
  "description": "Nextjs app for consumers (filter inlined packages)",
@@ -741,12 +678,7 @@
741
678
  "i18n",
742
679
  "react-query"
743
680
  ],
744
- "devDependencies": [
745
- "next",
746
- "typescript",
747
- "types",
748
- "postcss"
749
- ]
681
+ "devDependencies": ["next", "typescript", "types", "postcss"]
750
682
  },
751
683
  "functions-firebase": {
752
684
  "description": "Firebase Functions app",
@@ -769,19 +701,12 @@
769
701
  "monitoring-node",
770
702
  "stripe"
771
703
  ],
772
- "devDependencies": [
773
- "vercel"
774
- ]
704
+ "devDependencies": ["vercel"]
775
705
  },
776
706
  "entities": {
777
707
  "description": "Entities workspace package",
778
- "dependencies": [
779
- "validation"
780
- ],
781
- "devDependencies": [
782
- "eslint",
783
- "typescript"
784
- ]
708
+ "dependencies": ["validation"],
709
+ "devDependencies": ["eslint", "typescript"]
785
710
  },
786
711
  "demo": {
787
712
  "description": "Demo app template (components only)",
@@ -713,6 +713,7 @@ ${import_picocolors.default.gray(de + _2.repeat(s + 2) + pe)}
713
713
  });
714
714
 
715
715
  // packages/tooling/src/utils/cli-output.ts
716
+ import "node:os";
716
717
  function supportsColor() {
717
718
  if (process.env.NO_COLOR) return false;
718
719
  if (process.platform === "win32") {
@@ -6500,7 +6501,16 @@ var init_constants = __esm({
6500
6501
  },
6501
6502
  i18n: {
6502
6503
  eager: ["src/locales/*_*.json"],
6503
- lazy: ["src/**/locales/*_*.json", "!src/locales/*_*.json"],
6504
+ lazy: [
6505
+ "src/**/locales/*_*.json",
6506
+ "!src/locales/*_*.json",
6507
+ // Auto-detect shared entity translations in monorepos (if exists, use it; if not, no problem)
6508
+ "../../entities/locales/*_*.json"
6509
+ ],
6510
+ // Additional paths from workspace packages (e.g., shared entities)
6511
+ // Consumers can still configure via i18n.additionalPaths in dndev/vite config for custom paths
6512
+ // Example: ['../../packages/shared/locales/*_*.json']
6513
+ additional: [],
6504
6514
  framework: {
6505
6515
  eager: [`${I18N_PATHS.SOURCE_EAGER}/*_*.json`],
6506
6516
  lazy: [`${I18N_PATHS.SOURCE_LAZY}/*_*.json`]
@@ -6593,6 +6603,7 @@ var init_constants = __esm({
6593
6603
 
6594
6604
  // packages/core/config/utils/PathResolver.ts
6595
6605
  import * as fs from "node:fs";
6606
+ import "node:fs";
6596
6607
  import { createRequire } from "node:module";
6597
6608
  import {
6598
6609
  resolve,
@@ -7705,6 +7716,7 @@ var init_errors = __esm({
7705
7716
  });
7706
7717
 
7707
7718
  // packages/tooling/src/utils/pathResolver.ts
7719
+ import { createRequire as createRequire2 } from "node:module";
7708
7720
  import {
7709
7721
  join as join2,
7710
7722
  dirname as dirname2,
@@ -7714,6 +7726,7 @@ import {
7714
7726
  resolve as resolve2,
7715
7727
  isAbsolute as pathIsAbsolute
7716
7728
  } from "node:path";
7729
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
7717
7730
  function readdirSync2(dirPath, options) {
7718
7731
  return pathResolverInstance.readdirSync(dirPath, options);
7719
7732
  }
@@ -7739,16 +7752,17 @@ var init_pathResolver = __esm({
7739
7752
 
7740
7753
  // packages/tooling/src/bundler/utils.ts
7741
7754
  import { Buffer as Buffer2 } from "node:buffer";
7742
- import { createRequire as createRequire2 } from "node:module";
7755
+ import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
7756
+ import { createRequire as createRequire3 } from "node:module";
7743
7757
  import { dirname as dirname3, resolve as resolve3 } from "node:path";
7744
7758
  import process from "node:process";
7745
- import { fileURLToPath as fileURLToPath2 } from "node:url";
7759
+ import { fileURLToPath as fileURLToPath3 } from "node:url";
7746
7760
  var require2, __filename, __dirname;
7747
7761
  var init_utils = __esm({
7748
7762
  "packages/tooling/src/bundler/utils.ts"() {
7749
7763
  "use strict";
7750
- require2 = createRequire2(import.meta.url);
7751
- __filename = fileURLToPath2(import.meta.url);
7764
+ require2 = createRequire3(import.meta.url);
7765
+ __filename = fileURLToPath3(import.meta.url);
7752
7766
  __dirname = dirname3(__filename);
7753
7767
  if (typeof globalThis !== "undefined") {
7754
7768
  globalThis.require = require2;
@@ -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") {
@@ -6393,7 +6395,16 @@ var init_constants = __esm({
6393
6395
  },
6394
6396
  i18n: {
6395
6397
  eager: ["src/locales/*_*.json"],
6396
- lazy: ["src/**/locales/*_*.json", "!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: [],
6397
6408
  framework: {
6398
6409
  eager: [`${I18N_PATHS.SOURCE_EAGER}/*_*.json`],
6399
6410
  lazy: [`${I18N_PATHS.SOURCE_LAZY}/*_*.json`]
@@ -6486,6 +6497,7 @@ var init_constants = __esm({
6486
6497
 
6487
6498
  // packages/core/config/utils/PathResolver.ts
6488
6499
  import * as fs from "node:fs";
6500
+ import "node:fs";
6489
6501
  import { createRequire } from "node:module";
6490
6502
  import {
6491
6503
  resolve,
@@ -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);
@@ -7564,16 +7577,17 @@ var init_pathResolver = __esm({
7564
7577
 
7565
7578
  // packages/tooling/src/bundler/utils.ts
7566
7579
  import { Buffer as Buffer2 } from "node:buffer";
7580
+ import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
7567
7581
  import { createRequire as createRequire3 } from "node:module";
7568
7582
  import { dirname as dirname3, resolve as resolve3 } from "node:path";
7569
7583
  import process from "node:process";
7570
- import { fileURLToPath as fileURLToPath2 } from "node:url";
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;