@stack-dev/cli 0.2.0 → 0.3.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 (36) hide show
  1. package/.turbo/turbo-build.log +6 -6
  2. package/CHANGELOG.md +17 -0
  3. package/dist/index.js +219 -256
  4. package/dist/index.mjs +219 -256
  5. package/package.json +6 -5
  6. package/src/packages/cli-app/create-cli-app.ts +9 -7
  7. package/src/packages/fastify-app/create-fastify-app.ts +9 -7
  8. package/src/packages/files/eslint-config-file-generator.ts +33 -0
  9. package/src/packages/files/prettier-config-file-generator.ts +14 -0
  10. package/src/packages/files/tsconfig-file-generator.ts +34 -0
  11. package/src/packages/library-package/create-library-package.ts +9 -7
  12. package/src/packages/react-package/styled-components-react-package/create-styled-components-react-package.ts +8 -6
  13. package/src/packages/react-package/unstyled-react-package/create-unstyled-react-package.ts +8 -6
  14. package/src/packages/vite-react-app/create-vite-react-app.ts +9 -6
  15. package/src/utils/workspace.ts +23 -8
  16. package/src/workspace/create-workspace.ts +9 -5
  17. package/src/workspace/eslint-config.ts +75 -0
  18. package/src/workspace/prettier-config.ts +45 -0
  19. package/src/packages/cli-app/files/eslint-config-file-generator.ts +0 -11
  20. package/src/packages/cli-app/files/prettier-config-file-generator.ts +0 -11
  21. package/src/packages/cli-app/files/tsconfig-file-generator.ts +0 -15
  22. package/src/packages/fastify-app/files/eslint-config-file-generator.ts +0 -11
  23. package/src/packages/fastify-app/files/prettier-config-file-generator.ts +0 -11
  24. package/src/packages/fastify-app/files/tsconfig-file-generator.ts +0 -15
  25. package/src/packages/library-package/files/eslint-config-file-generator.ts +0 -11
  26. package/src/packages/library-package/files/prettier-config-file-generator.ts +0 -11
  27. package/src/packages/library-package/files/tsconfig-file-generator.ts +0 -15
  28. package/src/packages/react-package/styled-components-react-package/files/eslint-config-file-generator.ts +0 -18
  29. package/src/packages/react-package/styled-components-react-package/files/prettier-config-file-generator.ts +0 -11
  30. package/src/packages/react-package/styled-components-react-package/files/tsconfig-file-generator.ts +0 -15
  31. package/src/packages/react-package/unstyled-react-package/files/eslint-config-file-generator.ts +0 -18
  32. package/src/packages/react-package/unstyled-react-package/files/prettier-config-file-generator.ts +0 -11
  33. package/src/packages/react-package/unstyled-react-package/files/tsconfig-file-generator.ts +0 -15
  34. package/src/packages/vite-react-app/files/eslint-config-file-generator.ts +0 -11
  35. package/src/packages/vite-react-app/files/prettier-config-file-generator.ts +0 -11
  36. package/src/packages/vite-react-app/files/tsconfig-file-generator.ts +0 -15
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ var import_commander = require("commander");
28
28
  var import_enquirer3 = require("enquirer");
29
29
 
30
30
  // package.json
31
- var version = "0.2.0";
31
+ var version = "0.3.1";
32
32
 
33
33
  // src/package-json/package-json.ts
34
34
  var import_core = require("@stack-dev/core");
@@ -360,8 +360,8 @@ function getKeyIndex2(s) {
360
360
  // src/tsconfig/reference.ts
361
361
  var Reference = class _Reference {
362
362
  _path;
363
- constructor(path16) {
364
- this._path = path16;
363
+ constructor(path18) {
364
+ this._path = path18;
365
365
  }
366
366
  get path() {
367
367
  return this._path;
@@ -506,14 +506,26 @@ async function getWorkspaceRoot(directory = process.cwd()) {
506
506
  }
507
507
  return getWorkspaceRoot(parent);
508
508
  }
509
+ async function tryGettingNamespace(directory) {
510
+ try {
511
+ const root = await getWorkspaceRoot(directory);
512
+ const packageJson = await getDirectoryPackageJson(root);
513
+ const result = packageJson.name;
514
+ if (!result) {
515
+ return void 0;
516
+ } else {
517
+ return `@${result}`;
518
+ }
519
+ } catch (e) {
520
+ return void 0;
521
+ }
522
+ }
509
523
  async function getNamespace(directory = process.cwd()) {
510
- const root = await getWorkspaceRoot(directory);
511
- const packageJson = await getDirectoryPackageJson(root);
512
- const result = packageJson.name;
513
- if (!result) {
514
- throw new Error("Missing name.");
524
+ const namespace = await tryGettingNamespace(directory);
525
+ if (!namespace) {
526
+ throw new Error("Missing namespace.");
515
527
  }
516
- return `@${result}`;
528
+ return namespace;
517
529
  }
518
530
 
519
531
  // src/link-packages.ts
@@ -611,15 +623,61 @@ var FileGeneratorImp = class {
611
623
  }
612
624
  };
613
625
 
614
- // src/packages/cli-app/files/eslint-config-file-generator.ts
615
- var ESLINT_CONFIG = `import base from '@stack-dev/eslint-config/base.mjs';
626
+ // src/packages/files/eslint-config-file-generator.ts
627
+ function makeEslintConfigGenerator(filepath, namespace) {
628
+ const ESLINT_CONFIG = `import base from '${namespace}/eslint-config/base.mjs';
616
629
 
617
630
  export default [...base, { ignores: ['**/dist/**'] }];
618
631
  `;
619
- var ESLINT_CONFIG_FILE_GENERATOR = new FileGeneratorImp(
620
- "eslint.config.mjs",
621
- ESLINT_CONFIG
622
- );
632
+ return new FileGeneratorImp(filepath, ESLINT_CONFIG);
633
+ }
634
+ function makeReactEslintConfigGenerator(filepath, namespace) {
635
+ const ESLINT_CONFIG = `import base from '${namespace}/eslint-config/base.mjs';
636
+ import react from '${namespace}/eslint-config/react.mjs';
637
+
638
+ export default [
639
+ ...base,
640
+ ...react,
641
+ {
642
+ ignores: ['**/dist/**', '**/coverage/**']
643
+ }
644
+ ];
645
+ `;
646
+ return new FileGeneratorImp(filepath, ESLINT_CONFIG);
647
+ }
648
+
649
+ // src/packages/files/prettier-config-file-generator.ts
650
+ function makePrettierConfigFileGenerator(filepath, namespace) {
651
+ const PRETTIER_CONFIG = `import base from '${namespace}/prettier-config/base.mjs';
652
+
653
+ export default base;
654
+ `;
655
+ return new FileGeneratorImp(filepath, PRETTIER_CONFIG);
656
+ }
657
+
658
+ // src/packages/files/tsconfig-file-generator.ts
659
+ function makeBaseTsconfigFileGenerator(filepath, namespace) {
660
+ const TSCONFIG = `{
661
+ "extends": "${namespace}/typescript-config/tsconfig.base.json",
662
+ "compilerOptions": {
663
+ "outDir": "dist"
664
+ },
665
+ "include": ["src"]
666
+ }
667
+ `;
668
+ return new FileGeneratorImp(filepath, TSCONFIG);
669
+ }
670
+ function makeReactTsconfigFileGenerator(filepath, namespace) {
671
+ const TSCONFIG = `{
672
+ "extends": "${namespace}/typescript-config/tsconfig.react.json",
673
+ "compilerOptions": {
674
+ "outDir": "dist"
675
+ },
676
+ "include": ["src"]
677
+ }
678
+ `;
679
+ return new FileGeneratorImp(filepath, TSCONFIG);
680
+ }
623
681
 
624
682
  // src/packages/cli-app/files/index-file-generator.ts
625
683
  var INDEX = `import { Command } from "commander";;
@@ -644,30 +702,6 @@ program.command('split')
644
702
  program.parse();`;
645
703
  var INDEX_FILE_GENERATOR = new FileGeneratorImp("src/index.ts", INDEX);
646
704
 
647
- // src/packages/cli-app/files/prettier-config-file-generator.ts
648
- var PRETTIER_CONFIG = `import base from '@stack-dev/prettier-config/base.mjs';
649
-
650
- export default base;
651
- `;
652
- var PRETTIER_CONFIG_FILE_GENERATOR = new FileGeneratorImp(
653
- "prettier.config.mjs",
654
- PRETTIER_CONFIG
655
- );
656
-
657
- // src/packages/cli-app/files/tsconfig-file-generator.ts
658
- var TSCONFIG = `{
659
- "extends": "@stack-dev/typescript-config/tsconfig.base.json",
660
- "compilerOptions": {
661
- "outDir": "dist"
662
- },
663
- "include": ["src"]
664
- }
665
- `;
666
- var TSCONFIG_FILE_GENERATOR = new FileGeneratorImp(
667
- "tsconfig.json",
668
- TSCONFIG
669
- );
670
-
671
705
  // src/packages/cli-app/files/tsup-file-generator.ts
672
706
  var TSUP = `import { defineConfig } from "tsup";
673
707
 
@@ -717,10 +751,10 @@ async function createCliApp(name) {
717
751
  makeAppPackageGenerator(packageName, namespace),
718
752
  [
719
753
  INDEX_FILE_GENERATOR,
720
- TSCONFIG_FILE_GENERATOR,
754
+ makeBaseTsconfigFileGenerator("tsconfig.json", namespace),
721
755
  TSUP_FILE_GENERATOR,
722
- PRETTIER_CONFIG_FILE_GENERATOR,
723
- ESLINT_CONFIG_FILE_GENERATOR,
756
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
757
+ makeEslintConfigGenerator("eslint.config.mjs", namespace),
724
758
  VITEST_CONFIG_FILE_GENERATOR
725
759
  ]
726
760
  );
@@ -750,8 +784,10 @@ function makeAppPackageGenerator(packageName, namespace) {
750
784
  type: "module",
751
785
  scripts: {
752
786
  dev: "tsx watch src/index.ts",
753
- build: "tsup src/index.ts",
787
+ prebuild: "pnpm check-types",
788
+ build: "tsup",
754
789
  start: "node dist/index.mjs",
790
+ "check-types": "tsc --noEmit",
755
791
  lint: "eslint .",
756
792
  format: "prettier . --write",
757
793
  test: "vitest run",
@@ -765,16 +801,6 @@ function makeAppPackageGenerator(packageName, namespace) {
765
801
  // src/packages/fastify-app/create-fastify-app.ts
766
802
  var import_path3 = __toESM(require("path"));
767
803
 
768
- // src/packages/fastify-app/files/eslint-config-file-generator.ts
769
- var ESLINT_CONFIG2 = `import base from '@stack-dev/eslint-config/base.mjs';
770
-
771
- export default [...base, { ignores: ['**/dist/**'] }];
772
- `;
773
- var ESLINT_CONFIG_FILE_GENERATOR2 = new FileGeneratorImp(
774
- "eslint.config.mjs",
775
- ESLINT_CONFIG2
776
- );
777
-
778
804
  // src/packages/fastify-app/files/index-file-generator.ts
779
805
  var INDEX2 = `import Fastify from "fastify";
780
806
  import fastifySwagger from "@fastify/swagger";
@@ -918,30 +944,6 @@ start();
918
944
  `;
919
945
  var INDEX_FILE_GENERATOR2 = new FileGeneratorImp("src/index.ts", INDEX2);
920
946
 
921
- // src/packages/fastify-app/files/prettier-config-file-generator.ts
922
- var PRETTIER_CONFIG2 = `import base from '@stack-dev/prettier-config/base.mjs';
923
-
924
- export default base;
925
- `;
926
- var PRETTIER_CONFIG_FILE_GENERATOR2 = new FileGeneratorImp(
927
- "prettier.config.mjs",
928
- PRETTIER_CONFIG2
929
- );
930
-
931
- // src/packages/fastify-app/files/tsconfig-file-generator.ts
932
- var TSCONFIG2 = `{
933
- "extends": "@stack-dev/typescript-config/tsconfig.base.json",
934
- "compilerOptions": {
935
- "outDir": "dist"
936
- },
937
- "include": ["src"]
938
- }
939
- `;
940
- var TSCONFIG_FILE_GENERATOR2 = new FileGeneratorImp(
941
- "tsconfig.json",
942
- TSCONFIG2
943
- );
944
-
945
947
  // src/packages/fastify-app/files/tsup-file-generator.ts
946
948
  var TSUP2 = `import { defineConfig } from "tsup";
947
949
 
@@ -991,10 +993,10 @@ async function createFastifyApp(name) {
991
993
  makeAppPackageGenerator2(packageName, namespace),
992
994
  [
993
995
  INDEX_FILE_GENERATOR2,
994
- TSCONFIG_FILE_GENERATOR2,
996
+ makeBaseTsconfigFileGenerator("tsconfig.json", namespace),
995
997
  TSUP_FILE_GENERATOR2,
996
- PRETTIER_CONFIG_FILE_GENERATOR2,
997
- ESLINT_CONFIG_FILE_GENERATOR2,
998
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
999
+ makeEslintConfigGenerator("eslint.config.mjs", namespace),
998
1000
  VITEST_CONFIG_FILE_GENERATOR2
999
1001
  ]
1000
1002
  );
@@ -1029,8 +1031,10 @@ function makeAppPackageGenerator2(packageName, namespace) {
1029
1031
  type: "module",
1030
1032
  scripts: {
1031
1033
  dev: "tsx watch src/index.ts",
1032
- build: "tsup src/index.ts",
1034
+ prebuild: "pnpm check-types",
1035
+ build: "tsup",
1033
1036
  start: "node dist/index.mjs",
1037
+ "check-types": "tsc --noEmit",
1034
1038
  lint: "eslint .",
1035
1039
  format: "prettier . --write",
1036
1040
  test: "vitest run",
@@ -1067,16 +1071,6 @@ var ADD_SPEC_FILE_GENERATOR = new FileGeneratorImp(
1067
1071
  ADD_SPEC_TS
1068
1072
  );
1069
1073
 
1070
- // src/packages/library-package/files/eslint-config-file-generator.ts
1071
- var ESLINT_CONFIG3 = `import base from '@stack-dev/eslint-config/base.mjs';
1072
-
1073
- export default [...base, { ignores: ['**/dist/**'] }];
1074
- `;
1075
- var ESLINT_CONFIG_FILE_GENERATOR3 = new FileGeneratorImp(
1076
- "eslint.config.mjs",
1077
- ESLINT_CONFIG3
1078
- );
1079
-
1080
1074
  // src/packages/library-package/files/index-file-generator.ts
1081
1075
  var INDEX_TS = `export * from './add';
1082
1076
  `;
@@ -1085,30 +1079,6 @@ var INDEX_FILE_GENERATOR3 = new FileGeneratorImp(
1085
1079
  INDEX_TS
1086
1080
  );
1087
1081
 
1088
- // src/packages/library-package/files/prettier-config-file-generator.ts
1089
- var PRETTIER_CONFIG3 = `import base from '@stack-dev/prettier-config/base.mjs';
1090
-
1091
- export default base;
1092
- `;
1093
- var PRETTIER_CONFIG_FILE_GENERATOR3 = new FileGeneratorImp(
1094
- "prettier.config.mjs",
1095
- PRETTIER_CONFIG3
1096
- );
1097
-
1098
- // src/packages/library-package/files/tsconfig-file-generator.ts
1099
- var TSCONFIG3 = `{
1100
- "extends": "@stack-dev/typescript-config/tsconfig.base.json",
1101
- "compilerOptions": {
1102
- "outDir": "dist"
1103
- },
1104
- "include": ["src"]
1105
- }
1106
- `;
1107
- var TSCONFIG_FILE_GENERATOR3 = new FileGeneratorImp(
1108
- "tsconfig.json",
1109
- TSCONFIG3
1110
- );
1111
-
1112
1082
  // src/packages/library-package/files/tsup-config-file-generator.ts
1113
1083
  var TSUP_CONFIG = `import { defineConfig } from 'tsup';
1114
1084
 
@@ -1164,9 +1134,9 @@ async function createLibraryPackage(name) {
1164
1134
  ADD_FILE_GENERATOR,
1165
1135
  ADD_SPEC_FILE_GENERATOR,
1166
1136
  TSUP_CONFIG_FILE_GENERATOR,
1167
- TSCONFIG_FILE_GENERATOR3,
1168
- PRETTIER_CONFIG_FILE_GENERATOR3,
1169
- ESLINT_CONFIG_FILE_GENERATOR3,
1137
+ makeBaseTsconfigFileGenerator("tsconfig.json", namespace),
1138
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1139
+ makeEslintConfigGenerator("eslint.config.mjs", namespace),
1170
1140
  VITEST_CONFIG_FILE_GENERATOR3
1171
1141
  ]
1172
1142
  );
@@ -1202,8 +1172,10 @@ function makePackageGenerator(packageName, namespace) {
1202
1172
  }
1203
1173
  },
1204
1174
  scripts: {
1175
+ prebuild: "pnpm check-types",
1205
1176
  build: "tsup",
1206
- lint: "eslint",
1177
+ "check-types": "tsc --noEmit",
1178
+ lint: "eslint .",
1207
1179
  format: "prettier . --write",
1208
1180
  test: "vitest run",
1209
1181
  "test:watch": "vitest"
@@ -1278,23 +1250,6 @@ var BUTTON_SPEC_FILE_GENERATOR = new FileGeneratorImp(
1278
1250
  BUTTON_SPEC
1279
1251
  );
1280
1252
 
1281
- // src/packages/react-package/styled-components-react-package/files/eslint-config-file-generator.ts
1282
- var ESLINT_CONFIG4 = `import base from '@stack-dev/eslint-config/base.mjs';
1283
- import react from '@stack-dev/eslint-config/react.mjs';
1284
-
1285
- export default [
1286
- ...base,
1287
- ...react,
1288
- {
1289
- ignores: ['**/dist/**', '**/coverage/**']
1290
- }
1291
- ];
1292
- `;
1293
- var ESLINT_CONFIG_FILE_GENERATOR4 = new FileGeneratorImp(
1294
- "eslint.config.mjs",
1295
- ESLINT_CONFIG4
1296
- );
1297
-
1298
1253
  // src/packages/react-package/styled-components-react-package/files/index-file-generator.ts
1299
1254
  var INDEX_TS2 = `export * from './button';
1300
1255
  `;
@@ -1303,30 +1258,6 @@ var INDEX_FILE_GENERATOR4 = new FileGeneratorImp(
1303
1258
  INDEX_TS2
1304
1259
  );
1305
1260
 
1306
- // src/packages/react-package/styled-components-react-package/files/prettier-config-file-generator.ts
1307
- var PRETTIER_CONFIG4 = `import base from '@stack-dev/prettier-config/base.mjs';
1308
-
1309
- export default base;
1310
- `;
1311
- var PRETTIER_CONFIG_FILE_GENERATOR4 = new FileGeneratorImp(
1312
- "prettier.config.mjs",
1313
- PRETTIER_CONFIG4
1314
- );
1315
-
1316
- // src/packages/react-package/styled-components-react-package/files/tsconfig-file-generator.ts
1317
- var TSCONFIG4 = `{
1318
- "extends": "@stack-dev/typescript-config/tsconfig.react.json",
1319
- "compilerOptions": {
1320
- "outDir": "dist"
1321
- },
1322
- "include": ["src"]
1323
- }
1324
- `;
1325
- var TSCONFIG_FILE_GENERATOR4 = new FileGeneratorImp(
1326
- "tsconfig.json",
1327
- TSCONFIG4
1328
- );
1329
-
1330
1261
  // src/packages/react-package/styled-components-react-package/files/tsup-config-file-generator.ts
1331
1262
  var TSUP_CONFIG2 = `import { defineConfig } from 'tsup';
1332
1263
 
@@ -1384,9 +1315,9 @@ async function createStyledComponentsReactPackage(name) {
1384
1315
  BUTTON_FILE_GENERATOR,
1385
1316
  BUTTON_SPEC_FILE_GENERATOR,
1386
1317
  TSUP_CONFIG_FILE_GENERATOR2,
1387
- TSCONFIG_FILE_GENERATOR4,
1388
- PRETTIER_CONFIG_FILE_GENERATOR4,
1389
- ESLINT_CONFIG_FILE_GENERATOR4,
1318
+ makeReactTsconfigFileGenerator("tsconfig.json", namespace),
1319
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1320
+ makeReactEslintConfigGenerator("eslint.config.mjs", namespace),
1390
1321
  VITEST_CONFIG_FILE_GENERATOR4
1391
1322
  ]
1392
1323
  );
@@ -1445,9 +1376,11 @@ function makePackageGenerator2(packageName, namespace) {
1445
1376
  // Removed './index.css' as it's no longer produced by Styled Components
1446
1377
  },
1447
1378
  scripts: {
1379
+ prebuild: "pnpm check-types",
1448
1380
  build: "tsup",
1449
1381
  dev: "tsup --watch",
1450
1382
  // Helpful for local lib dev
1383
+ "check-types": "tsc --noEmit",
1451
1384
  lint: "eslint .",
1452
1385
  format: "prettier . --write",
1453
1386
  test: "vitest run",
@@ -1497,23 +1430,6 @@ var BUTTON_SPEC_FILE_GENERATOR2 = new FileGeneratorImp(
1497
1430
  BUTTON_SPEC2
1498
1431
  );
1499
1432
 
1500
- // src/packages/react-package/unstyled-react-package/files/eslint-config-file-generator.ts
1501
- var ESLINT_CONFIG5 = `import base from '@stack-dev/eslint-config/base.mjs';
1502
- import react from '@stack-dev/eslint-config/react.mjs';
1503
-
1504
- export default [
1505
- ...base,
1506
- ...react,
1507
- {
1508
- ignores: ['**/dist/**', '**/coverage/**']
1509
- }
1510
- ];
1511
- `;
1512
- var ESLINT_CONFIG_FILE_GENERATOR5 = new FileGeneratorImp(
1513
- "eslint.config.mjs",
1514
- ESLINT_CONFIG5
1515
- );
1516
-
1517
1433
  // src/packages/react-package/unstyled-react-package/files/index-file-generator.ts
1518
1434
  var INDEX_TS3 = `export * from './button';
1519
1435
  `;
@@ -1522,30 +1438,6 @@ var INDEX_FILE_GENERATOR5 = new FileGeneratorImp(
1522
1438
  INDEX_TS3
1523
1439
  );
1524
1440
 
1525
- // src/packages/react-package/unstyled-react-package/files/prettier-config-file-generator.ts
1526
- var PRETTIER_CONFIG5 = `import base from '@stack-dev/prettier-config/base.mjs';
1527
-
1528
- export default base;
1529
- `;
1530
- var PRETTIER_CONFIG_FILE_GENERATOR5 = new FileGeneratorImp(
1531
- "prettier.config.mjs",
1532
- PRETTIER_CONFIG5
1533
- );
1534
-
1535
- // src/packages/react-package/unstyled-react-package/files/tsconfig-file-generator.ts
1536
- var TSCONFIG5 = `{
1537
- "extends": "@stack-dev/typescript-config/tsconfig.react.json",
1538
- "compilerOptions": {
1539
- "outDir": "dist"
1540
- },
1541
- "include": ["src"]
1542
- }
1543
- `;
1544
- var TSCONFIG_FILE_GENERATOR5 = new FileGeneratorImp(
1545
- "tsconfig.json",
1546
- TSCONFIG5
1547
- );
1548
-
1549
1441
  // src/packages/react-package/unstyled-react-package/files/tsup-config-file-generator.ts
1550
1442
  var TSUP_CONFIG3 = `import { defineConfig } from 'tsup';
1551
1443
 
@@ -1603,9 +1495,9 @@ async function createUnstyledReactPackage(name) {
1603
1495
  BUTTON_FILE_GENERATOR2,
1604
1496
  BUTTON_SPEC_FILE_GENERATOR2,
1605
1497
  TSUP_CONFIG_FILE_GENERATOR3,
1606
- TSCONFIG_FILE_GENERATOR5,
1607
- PRETTIER_CONFIG_FILE_GENERATOR5,
1608
- ESLINT_CONFIG_FILE_GENERATOR5,
1498
+ makeReactTsconfigFileGenerator("tsconfig.json", namespace),
1499
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1500
+ makeReactEslintConfigGenerator("eslint.config.mjs", namespace),
1609
1501
  VITEST_CONFIG_FILE_GENERATOR5
1610
1502
  ]
1611
1503
  );
@@ -1660,9 +1552,11 @@ function makePackageGenerator3(packageName, namespace) {
1660
1552
  // Removed './index.css' as it's no longer produced by Styled Components
1661
1553
  },
1662
1554
  scripts: {
1555
+ prebuild: "pnpm check-types",
1663
1556
  build: "tsup",
1664
1557
  dev: "tsup --watch",
1665
1558
  // Helpful for local lib dev
1559
+ "check-types": "tsc --noEmit",
1666
1560
  lint: "eslint .",
1667
1561
  format: "prettier . --write",
1668
1562
  test: "vitest run",
@@ -1765,40 +1659,6 @@ export function App() {
1765
1659
  `;
1766
1660
  var APP_FILE_GENERATOR = new FileGeneratorImp("src/App.tsx", APP);
1767
1661
 
1768
- // src/packages/vite-react-app/files/eslint-config-file-generator.ts
1769
- var ESLINT_CONFIG6 = `import base from '@stack-dev/eslint-config/base.mjs';
1770
-
1771
- export default [...base, { ignores: ['**/dist/**'] }];
1772
- `;
1773
- var ESLINT_CONFIG_FILE_GENERATOR6 = new FileGeneratorImp(
1774
- "eslint.config.mjs",
1775
- ESLINT_CONFIG6
1776
- );
1777
-
1778
- // src/packages/vite-react-app/files/prettier-config-file-generator.ts
1779
- var PRETTIER_CONFIG6 = `import base from '@stack-dev/prettier-config/base.mjs';
1780
-
1781
- export default base;
1782
- `;
1783
- var PRETTIER_CONFIG_FILE_GENERATOR6 = new FileGeneratorImp(
1784
- "prettier.config.mjs",
1785
- PRETTIER_CONFIG6
1786
- );
1787
-
1788
- // src/packages/vite-react-app/files/tsconfig-file-generator.ts
1789
- var TSCONFIG6 = `{
1790
- "extends": "@stack-dev/typescript-config/tsconfig.react.json",
1791
- "compilerOptions": {
1792
- "outDir": "dist"
1793
- },
1794
- "include": ["src"]
1795
- }
1796
- `;
1797
- var TSCONFIG_FILE_GENERATOR6 = new FileGeneratorImp(
1798
- "tsconfig.json",
1799
- TSCONFIG6
1800
- );
1801
-
1802
1662
  // src/packages/vite-react-app/files/vitest-config-file-generator.ts
1803
1663
  var VITEST_CONFIG6 = `import { defineConfig } from 'vitest/config';
1804
1664
 
@@ -1832,9 +1692,9 @@ async function createViteReactApp(name) {
1832
1692
  INDEX_HTML_FILE_GENERATOR,
1833
1693
  MAIN_FILE_GENERATOR,
1834
1694
  APP_FILE_GENERATOR,
1835
- TSCONFIG_FILE_GENERATOR6,
1836
- PRETTIER_CONFIG_FILE_GENERATOR6,
1837
- ESLINT_CONFIG_FILE_GENERATOR6,
1695
+ makeReactTsconfigFileGenerator("tsconfig.json", namespace),
1696
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1697
+ makeReactEslintConfigGenerator("eslint.config.mjs", namespace),
1838
1698
  VITEST_CONFIG_FILE_GENERATOR6
1839
1699
  ]
1840
1700
  );
@@ -1868,8 +1728,11 @@ function makeAppPackageGenerator3(packageName, namespace) {
1868
1728
  build: "tsc && vite build",
1869
1729
  preview: "vite preview",
1870
1730
  start: "pnpm run preview",
1731
+ "check-types": "tsc --noEmit",
1871
1732
  lint: "eslint .",
1872
- format: "prettier . --write"
1733
+ format: "prettier . --write",
1734
+ test: "vitest run",
1735
+ "test:watch": "vitest"
1873
1736
  }
1874
1737
  }
1875
1738
  });
@@ -2075,7 +1938,105 @@ function isStyleType(s) {
2075
1938
 
2076
1939
  // src/workspace/create-workspace.ts
2077
1940
  var import_promises6 = __toESM(require("fs/promises"));
1941
+ var import_path10 = __toESM(require("path"));
1942
+
1943
+ // src/workspace/eslint-config.ts
1944
+ var import_path7 = __toESM(require("path"));
1945
+ async function makeEslintConfig(directory, namespace) {
1946
+ const packageJsonModel = new PackageJSON({
1947
+ name: `${namespace}/eslint-config`,
1948
+ peerDependencies: [
1949
+ new Dependency("eslint", "^9.32.0"),
1950
+ new Dependency("typescript", "^5.8.3")
1951
+ ],
1952
+ dependencies: [
1953
+ new Dependency("@eslint/js", "^9.32.0"),
1954
+ new Dependency("eslint-plugin-react", "^7.37.5"),
1955
+ new Dependency("typescript-eslint", "^8.38.0")
1956
+ ],
1957
+ additionalData: {
1958
+ version: "0.1.0",
1959
+ private: true
1960
+ }
1961
+ });
1962
+ const fullPath = import_path7.default.join(directory, "configs/eslint-config");
1963
+ return new PackageGenerator(
1964
+ fullPath,
1965
+ new PackageJsonGenerator(packageJsonModel, namespace),
1966
+ [BASE_FILE_GENERATOR, REACT_FILE_GENERATOR]
1967
+ );
1968
+ }
1969
+ var BASE = `import eslint from "@eslint/js";
1970
+ import tseslint from "typescript-eslint";
1971
+
1972
+ export default tseslint.config(
1973
+ eslint.configs.recommended,
1974
+ tseslint.configs.strict,
1975
+ tseslint.configs.stylistic,
1976
+ {
1977
+ rules: {
1978
+ "@typescript-eslint/array-type": ["error", { default: "generic" }],
1979
+ "@typescript-eslint/consistent-type-definitions": "off",
1980
+ "@typescript-eslint/class-literal-property-style": ["error", "getters"],
1981
+ },
1982
+ }
1983
+ );
1984
+ `;
1985
+ var BASE_FILE_GENERATOR = new FileGeneratorImp("base.mjs", BASE);
1986
+ var REACT = `import eslint from "@eslint/js";
1987
+ import pluginReact from "eslint-plugin-react";
1988
+ import tseslint from "typescript-eslint";
1989
+
1990
+ export default tseslint.config(
1991
+ eslint.configs.recommended,
1992
+ tseslint.configs.strict,
1993
+ pluginReact.configs.flat.recommended,
1994
+ pluginReact.configs.flat["jsx-runtime"],
1995
+ {
1996
+ settings: {
1997
+ react: {
1998
+ version: "detect",
1999
+ },
2000
+ },
2001
+ }
2002
+ );
2003
+ `;
2004
+ var REACT_FILE_GENERATOR = new FileGeneratorImp("react.mjs", REACT);
2005
+
2006
+ // src/workspace/prettier-config.ts
2078
2007
  var import_path8 = __toESM(require("path"));
2008
+ async function makePrettierConfig(directory, namespace) {
2009
+ const packageJsonModel = new PackageJSON({
2010
+ name: `${namespace}/prettier-config`,
2011
+ peerDependencies: [new Dependency("prettier", "^3.6.2")],
2012
+ dependencies: [
2013
+ new Dependency("prettier-plugin-organize-imports", "^4.2.0")
2014
+ ],
2015
+ additionalData: {
2016
+ version: "0.1.0",
2017
+ private: true
2018
+ }
2019
+ });
2020
+ const fullPath = import_path8.default.join(directory, "configs/prettier-config");
2021
+ return new PackageGenerator(
2022
+ fullPath,
2023
+ new PackageJsonGenerator(packageJsonModel, namespace),
2024
+ [BASE_FILE_GENERATOR2]
2025
+ );
2026
+ }
2027
+ var BASE2 = `/**
2028
+ * @see https://prettier.io/docs/configuration
2029
+ * @type {import("prettier").Config}
2030
+ */
2031
+ const config = {
2032
+ tabWidth: 2,
2033
+ singleQuote: true,
2034
+ plugins: [import.meta.resolve("prettier-plugin-organize-imports")],
2035
+ };
2036
+
2037
+ export default config;
2038
+ `;
2039
+ var BASE_FILE_GENERATOR2 = new FileGeneratorImp("base.mjs", BASE2);
2079
2040
 
2080
2041
  // src/workspace/root-package.ts
2081
2042
  async function makeRootPackage(directory, name) {
@@ -2262,7 +2223,7 @@ vite.config.ts.timestamp-*
2262
2223
  `;
2263
2224
 
2264
2225
  // src/workspace/typescript-config.ts
2265
- var import_path7 = __toESM(require("path"));
2226
+ var import_path9 = __toESM(require("path"));
2266
2227
  async function makeTypescriptConfig(directory, namespace) {
2267
2228
  const packageJsonModel = new PackageJSON({
2268
2229
  name: `${namespace}/typescript-config`,
@@ -2273,14 +2234,14 @@ async function makeTypescriptConfig(directory, namespace) {
2273
2234
  files: ["*.json"]
2274
2235
  }
2275
2236
  });
2276
- const fullPath = import_path7.default.join(directory, "configs/typescript-config");
2237
+ const fullPath = import_path9.default.join(directory, "configs/typescript-config");
2277
2238
  return new PackageGenerator(
2278
2239
  fullPath,
2279
2240
  new PackageJsonGenerator(packageJsonModel, namespace),
2280
- [BASE, REACT, NODE]
2241
+ [BASE3, REACT2, NODE]
2281
2242
  );
2282
2243
  }
2283
- var BASE = new FileGeneratorImp(
2244
+ var BASE3 = new FileGeneratorImp(
2284
2245
  "tsconfig.base.json",
2285
2246
  JSON.stringify(
2286
2247
  {
@@ -2303,7 +2264,7 @@ var BASE = new FileGeneratorImp(
2303
2264
  2
2304
2265
  )
2305
2266
  );
2306
- var REACT = new FileGeneratorImp(
2267
+ var REACT2 = new FileGeneratorImp(
2307
2268
  "tsconfig.react.json",
2308
2269
  JSON.stringify(
2309
2270
  {
@@ -2337,23 +2298,25 @@ var NODE = new FileGeneratorImp(
2337
2298
  async function createWorkspace(name, directory) {
2338
2299
  await validateNotInWorkspace(directory);
2339
2300
  console.log(`\u2728 Creating workspace: @${name}`);
2340
- const fullPath = import_path8.default.join(directory, name);
2301
+ const fullPath = import_path10.default.join(directory, name);
2341
2302
  await import_promises6.default.mkdir(fullPath, { recursive: true });
2342
2303
  const namespace = `@${name}`;
2343
2304
  const PACKAGES = [
2344
2305
  await makeRootPackage(fullPath, name),
2345
- await makeTypescriptConfig(fullPath, namespace)
2306
+ await makeTypescriptConfig(fullPath, namespace),
2307
+ await makeEslintConfig(fullPath, namespace),
2308
+ await makePrettierConfig(fullPath, namespace)
2346
2309
  ];
2347
2310
  await Promise.all(PACKAGES.map((p) => p.generate()));
2348
- await import_promises6.default.mkdir(import_path8.default.join(fullPath, "apps"));
2349
- await import_promises6.default.mkdir(import_path8.default.join(fullPath, "configs"));
2350
- await import_promises6.default.mkdir(import_path8.default.join(fullPath, "packages"));
2311
+ await import_promises6.default.mkdir(import_path10.default.join(fullPath, "apps"), { recursive: true });
2312
+ await import_promises6.default.mkdir(import_path10.default.join(fullPath, "configs"), { recursive: true });
2313
+ await import_promises6.default.mkdir(import_path10.default.join(fullPath, "packages"), { recursive: true });
2351
2314
  console.log(`\u2705 Workspace created at: ${fullPath}`);
2352
2315
  console.log("");
2353
2316
  console.log(`Run "cd ${fullPath}" followed by "pnpm install"`);
2354
2317
  }
2355
2318
  async function validateNotInWorkspace(directory) {
2356
- const namespace = await getNamespace(directory);
2319
+ const namespace = await tryGettingNamespace(directory);
2357
2320
  if (namespace !== void 0) {
2358
2321
  throw new Error(`Currently in workspace "${namespace}".`);
2359
2322
  }