@stack-dev/cli 0.3.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 +6 -0
  3. package/dist/index.js +219 -256
  4. package/dist/index.mjs +219 -256
  5. package/package.json +3 -3
  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.mjs CHANGED
@@ -5,7 +5,7 @@ import { Command } from "commander";
5
5
  import { prompt as prompt3 } from "enquirer";
6
6
 
7
7
  // package.json
8
- var version = "0.3.0";
8
+ var version = "0.3.1";
9
9
 
10
10
  // src/package-json/package-json.ts
11
11
  import { haveSameItems, sortKeys } from "@stack-dev/core";
@@ -337,8 +337,8 @@ function getKeyIndex2(s) {
337
337
  // src/tsconfig/reference.ts
338
338
  var Reference = class _Reference {
339
339
  _path;
340
- constructor(path16) {
341
- this._path = path16;
340
+ constructor(path18) {
341
+ this._path = path18;
342
342
  }
343
343
  get path() {
344
344
  return this._path;
@@ -483,14 +483,26 @@ async function getWorkspaceRoot(directory = process.cwd()) {
483
483
  }
484
484
  return getWorkspaceRoot(parent);
485
485
  }
486
+ async function tryGettingNamespace(directory) {
487
+ try {
488
+ const root = await getWorkspaceRoot(directory);
489
+ const packageJson = await getDirectoryPackageJson(root);
490
+ const result = packageJson.name;
491
+ if (!result) {
492
+ return void 0;
493
+ } else {
494
+ return `@${result}`;
495
+ }
496
+ } catch (e) {
497
+ return void 0;
498
+ }
499
+ }
486
500
  async function getNamespace(directory = process.cwd()) {
487
- const root = await getWorkspaceRoot(directory);
488
- const packageJson = await getDirectoryPackageJson(root);
489
- const result = packageJson.name;
490
- if (!result) {
491
- throw new Error("Missing name.");
501
+ const namespace = await tryGettingNamespace(directory);
502
+ if (!namespace) {
503
+ throw new Error("Missing namespace.");
492
504
  }
493
- return `@${result}`;
505
+ return namespace;
494
506
  }
495
507
 
496
508
  // src/link-packages.ts
@@ -588,15 +600,61 @@ var FileGeneratorImp = class {
588
600
  }
589
601
  };
590
602
 
591
- // src/packages/cli-app/files/eslint-config-file-generator.ts
592
- var ESLINT_CONFIG = `import base from '@stack-dev/eslint-config/base.mjs';
603
+ // src/packages/files/eslint-config-file-generator.ts
604
+ function makeEslintConfigGenerator(filepath, namespace) {
605
+ const ESLINT_CONFIG = `import base from '${namespace}/eslint-config/base.mjs';
593
606
 
594
607
  export default [...base, { ignores: ['**/dist/**'] }];
595
608
  `;
596
- var ESLINT_CONFIG_FILE_GENERATOR = new FileGeneratorImp(
597
- "eslint.config.mjs",
598
- ESLINT_CONFIG
599
- );
609
+ return new FileGeneratorImp(filepath, ESLINT_CONFIG);
610
+ }
611
+ function makeReactEslintConfigGenerator(filepath, namespace) {
612
+ const ESLINT_CONFIG = `import base from '${namespace}/eslint-config/base.mjs';
613
+ import react from '${namespace}/eslint-config/react.mjs';
614
+
615
+ export default [
616
+ ...base,
617
+ ...react,
618
+ {
619
+ ignores: ['**/dist/**', '**/coverage/**']
620
+ }
621
+ ];
622
+ `;
623
+ return new FileGeneratorImp(filepath, ESLINT_CONFIG);
624
+ }
625
+
626
+ // src/packages/files/prettier-config-file-generator.ts
627
+ function makePrettierConfigFileGenerator(filepath, namespace) {
628
+ const PRETTIER_CONFIG = `import base from '${namespace}/prettier-config/base.mjs';
629
+
630
+ export default base;
631
+ `;
632
+ return new FileGeneratorImp(filepath, PRETTIER_CONFIG);
633
+ }
634
+
635
+ // src/packages/files/tsconfig-file-generator.ts
636
+ function makeBaseTsconfigFileGenerator(filepath, namespace) {
637
+ const TSCONFIG = `{
638
+ "extends": "${namespace}/typescript-config/tsconfig.base.json",
639
+ "compilerOptions": {
640
+ "outDir": "dist"
641
+ },
642
+ "include": ["src"]
643
+ }
644
+ `;
645
+ return new FileGeneratorImp(filepath, TSCONFIG);
646
+ }
647
+ function makeReactTsconfigFileGenerator(filepath, namespace) {
648
+ const TSCONFIG = `{
649
+ "extends": "${namespace}/typescript-config/tsconfig.react.json",
650
+ "compilerOptions": {
651
+ "outDir": "dist"
652
+ },
653
+ "include": ["src"]
654
+ }
655
+ `;
656
+ return new FileGeneratorImp(filepath, TSCONFIG);
657
+ }
600
658
 
601
659
  // src/packages/cli-app/files/index-file-generator.ts
602
660
  var INDEX = `import { Command } from "commander";;
@@ -621,30 +679,6 @@ program.command('split')
621
679
  program.parse();`;
622
680
  var INDEX_FILE_GENERATOR = new FileGeneratorImp("src/index.ts", INDEX);
623
681
 
624
- // src/packages/cli-app/files/prettier-config-file-generator.ts
625
- var PRETTIER_CONFIG = `import base from '@stack-dev/prettier-config/base.mjs';
626
-
627
- export default base;
628
- `;
629
- var PRETTIER_CONFIG_FILE_GENERATOR = new FileGeneratorImp(
630
- "prettier.config.mjs",
631
- PRETTIER_CONFIG
632
- );
633
-
634
- // src/packages/cli-app/files/tsconfig-file-generator.ts
635
- var TSCONFIG = `{
636
- "extends": "@stack-dev/typescript-config/tsconfig.base.json",
637
- "compilerOptions": {
638
- "outDir": "dist"
639
- },
640
- "include": ["src"]
641
- }
642
- `;
643
- var TSCONFIG_FILE_GENERATOR = new FileGeneratorImp(
644
- "tsconfig.json",
645
- TSCONFIG
646
- );
647
-
648
682
  // src/packages/cli-app/files/tsup-file-generator.ts
649
683
  var TSUP = `import { defineConfig } from "tsup";
650
684
 
@@ -694,10 +728,10 @@ async function createCliApp(name) {
694
728
  makeAppPackageGenerator(packageName, namespace),
695
729
  [
696
730
  INDEX_FILE_GENERATOR,
697
- TSCONFIG_FILE_GENERATOR,
731
+ makeBaseTsconfigFileGenerator("tsconfig.json", namespace),
698
732
  TSUP_FILE_GENERATOR,
699
- PRETTIER_CONFIG_FILE_GENERATOR,
700
- ESLINT_CONFIG_FILE_GENERATOR,
733
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
734
+ makeEslintConfigGenerator("eslint.config.mjs", namespace),
701
735
  VITEST_CONFIG_FILE_GENERATOR
702
736
  ]
703
737
  );
@@ -727,8 +761,10 @@ function makeAppPackageGenerator(packageName, namespace) {
727
761
  type: "module",
728
762
  scripts: {
729
763
  dev: "tsx watch src/index.ts",
730
- build: "tsup src/index.ts",
764
+ prebuild: "pnpm check-types",
765
+ build: "tsup",
731
766
  start: "node dist/index.mjs",
767
+ "check-types": "tsc --noEmit",
732
768
  lint: "eslint .",
733
769
  format: "prettier . --write",
734
770
  test: "vitest run",
@@ -742,16 +778,6 @@ function makeAppPackageGenerator(packageName, namespace) {
742
778
  // src/packages/fastify-app/create-fastify-app.ts
743
779
  import path6 from "path";
744
780
 
745
- // src/packages/fastify-app/files/eslint-config-file-generator.ts
746
- var ESLINT_CONFIG2 = `import base from '@stack-dev/eslint-config/base.mjs';
747
-
748
- export default [...base, { ignores: ['**/dist/**'] }];
749
- `;
750
- var ESLINT_CONFIG_FILE_GENERATOR2 = new FileGeneratorImp(
751
- "eslint.config.mjs",
752
- ESLINT_CONFIG2
753
- );
754
-
755
781
  // src/packages/fastify-app/files/index-file-generator.ts
756
782
  var INDEX2 = `import Fastify from "fastify";
757
783
  import fastifySwagger from "@fastify/swagger";
@@ -895,30 +921,6 @@ start();
895
921
  `;
896
922
  var INDEX_FILE_GENERATOR2 = new FileGeneratorImp("src/index.ts", INDEX2);
897
923
 
898
- // src/packages/fastify-app/files/prettier-config-file-generator.ts
899
- var PRETTIER_CONFIG2 = `import base from '@stack-dev/prettier-config/base.mjs';
900
-
901
- export default base;
902
- `;
903
- var PRETTIER_CONFIG_FILE_GENERATOR2 = new FileGeneratorImp(
904
- "prettier.config.mjs",
905
- PRETTIER_CONFIG2
906
- );
907
-
908
- // src/packages/fastify-app/files/tsconfig-file-generator.ts
909
- var TSCONFIG2 = `{
910
- "extends": "@stack-dev/typescript-config/tsconfig.base.json",
911
- "compilerOptions": {
912
- "outDir": "dist"
913
- },
914
- "include": ["src"]
915
- }
916
- `;
917
- var TSCONFIG_FILE_GENERATOR2 = new FileGeneratorImp(
918
- "tsconfig.json",
919
- TSCONFIG2
920
- );
921
-
922
924
  // src/packages/fastify-app/files/tsup-file-generator.ts
923
925
  var TSUP2 = `import { defineConfig } from "tsup";
924
926
 
@@ -968,10 +970,10 @@ async function createFastifyApp(name) {
968
970
  makeAppPackageGenerator2(packageName, namespace),
969
971
  [
970
972
  INDEX_FILE_GENERATOR2,
971
- TSCONFIG_FILE_GENERATOR2,
973
+ makeBaseTsconfigFileGenerator("tsconfig.json", namespace),
972
974
  TSUP_FILE_GENERATOR2,
973
- PRETTIER_CONFIG_FILE_GENERATOR2,
974
- ESLINT_CONFIG_FILE_GENERATOR2,
975
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
976
+ makeEslintConfigGenerator("eslint.config.mjs", namespace),
975
977
  VITEST_CONFIG_FILE_GENERATOR2
976
978
  ]
977
979
  );
@@ -1006,8 +1008,10 @@ function makeAppPackageGenerator2(packageName, namespace) {
1006
1008
  type: "module",
1007
1009
  scripts: {
1008
1010
  dev: "tsx watch src/index.ts",
1009
- build: "tsup src/index.ts",
1011
+ prebuild: "pnpm check-types",
1012
+ build: "tsup",
1010
1013
  start: "node dist/index.mjs",
1014
+ "check-types": "tsc --noEmit",
1011
1015
  lint: "eslint .",
1012
1016
  format: "prettier . --write",
1013
1017
  test: "vitest run",
@@ -1044,16 +1048,6 @@ var ADD_SPEC_FILE_GENERATOR = new FileGeneratorImp(
1044
1048
  ADD_SPEC_TS
1045
1049
  );
1046
1050
 
1047
- // src/packages/library-package/files/eslint-config-file-generator.ts
1048
- var ESLINT_CONFIG3 = `import base from '@stack-dev/eslint-config/base.mjs';
1049
-
1050
- export default [...base, { ignores: ['**/dist/**'] }];
1051
- `;
1052
- var ESLINT_CONFIG_FILE_GENERATOR3 = new FileGeneratorImp(
1053
- "eslint.config.mjs",
1054
- ESLINT_CONFIG3
1055
- );
1056
-
1057
1051
  // src/packages/library-package/files/index-file-generator.ts
1058
1052
  var INDEX_TS = `export * from './add';
1059
1053
  `;
@@ -1062,30 +1056,6 @@ var INDEX_FILE_GENERATOR3 = new FileGeneratorImp(
1062
1056
  INDEX_TS
1063
1057
  );
1064
1058
 
1065
- // src/packages/library-package/files/prettier-config-file-generator.ts
1066
- var PRETTIER_CONFIG3 = `import base from '@stack-dev/prettier-config/base.mjs';
1067
-
1068
- export default base;
1069
- `;
1070
- var PRETTIER_CONFIG_FILE_GENERATOR3 = new FileGeneratorImp(
1071
- "prettier.config.mjs",
1072
- PRETTIER_CONFIG3
1073
- );
1074
-
1075
- // src/packages/library-package/files/tsconfig-file-generator.ts
1076
- var TSCONFIG3 = `{
1077
- "extends": "@stack-dev/typescript-config/tsconfig.base.json",
1078
- "compilerOptions": {
1079
- "outDir": "dist"
1080
- },
1081
- "include": ["src"]
1082
- }
1083
- `;
1084
- var TSCONFIG_FILE_GENERATOR3 = new FileGeneratorImp(
1085
- "tsconfig.json",
1086
- TSCONFIG3
1087
- );
1088
-
1089
1059
  // src/packages/library-package/files/tsup-config-file-generator.ts
1090
1060
  var TSUP_CONFIG = `import { defineConfig } from 'tsup';
1091
1061
 
@@ -1141,9 +1111,9 @@ async function createLibraryPackage(name) {
1141
1111
  ADD_FILE_GENERATOR,
1142
1112
  ADD_SPEC_FILE_GENERATOR,
1143
1113
  TSUP_CONFIG_FILE_GENERATOR,
1144
- TSCONFIG_FILE_GENERATOR3,
1145
- PRETTIER_CONFIG_FILE_GENERATOR3,
1146
- ESLINT_CONFIG_FILE_GENERATOR3,
1114
+ makeBaseTsconfigFileGenerator("tsconfig.json", namespace),
1115
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1116
+ makeEslintConfigGenerator("eslint.config.mjs", namespace),
1147
1117
  VITEST_CONFIG_FILE_GENERATOR3
1148
1118
  ]
1149
1119
  );
@@ -1179,8 +1149,10 @@ function makePackageGenerator(packageName, namespace) {
1179
1149
  }
1180
1150
  },
1181
1151
  scripts: {
1152
+ prebuild: "pnpm check-types",
1182
1153
  build: "tsup",
1183
- lint: "eslint",
1154
+ "check-types": "tsc --noEmit",
1155
+ lint: "eslint .",
1184
1156
  format: "prettier . --write",
1185
1157
  test: "vitest run",
1186
1158
  "test:watch": "vitest"
@@ -1255,23 +1227,6 @@ var BUTTON_SPEC_FILE_GENERATOR = new FileGeneratorImp(
1255
1227
  BUTTON_SPEC
1256
1228
  );
1257
1229
 
1258
- // src/packages/react-package/styled-components-react-package/files/eslint-config-file-generator.ts
1259
- var ESLINT_CONFIG4 = `import base from '@stack-dev/eslint-config/base.mjs';
1260
- import react from '@stack-dev/eslint-config/react.mjs';
1261
-
1262
- export default [
1263
- ...base,
1264
- ...react,
1265
- {
1266
- ignores: ['**/dist/**', '**/coverage/**']
1267
- }
1268
- ];
1269
- `;
1270
- var ESLINT_CONFIG_FILE_GENERATOR4 = new FileGeneratorImp(
1271
- "eslint.config.mjs",
1272
- ESLINT_CONFIG4
1273
- );
1274
-
1275
1230
  // src/packages/react-package/styled-components-react-package/files/index-file-generator.ts
1276
1231
  var INDEX_TS2 = `export * from './button';
1277
1232
  `;
@@ -1280,30 +1235,6 @@ var INDEX_FILE_GENERATOR4 = new FileGeneratorImp(
1280
1235
  INDEX_TS2
1281
1236
  );
1282
1237
 
1283
- // src/packages/react-package/styled-components-react-package/files/prettier-config-file-generator.ts
1284
- var PRETTIER_CONFIG4 = `import base from '@stack-dev/prettier-config/base.mjs';
1285
-
1286
- export default base;
1287
- `;
1288
- var PRETTIER_CONFIG_FILE_GENERATOR4 = new FileGeneratorImp(
1289
- "prettier.config.mjs",
1290
- PRETTIER_CONFIG4
1291
- );
1292
-
1293
- // src/packages/react-package/styled-components-react-package/files/tsconfig-file-generator.ts
1294
- var TSCONFIG4 = `{
1295
- "extends": "@stack-dev/typescript-config/tsconfig.react.json",
1296
- "compilerOptions": {
1297
- "outDir": "dist"
1298
- },
1299
- "include": ["src"]
1300
- }
1301
- `;
1302
- var TSCONFIG_FILE_GENERATOR4 = new FileGeneratorImp(
1303
- "tsconfig.json",
1304
- TSCONFIG4
1305
- );
1306
-
1307
1238
  // src/packages/react-package/styled-components-react-package/files/tsup-config-file-generator.ts
1308
1239
  var TSUP_CONFIG2 = `import { defineConfig } from 'tsup';
1309
1240
 
@@ -1361,9 +1292,9 @@ async function createStyledComponentsReactPackage(name) {
1361
1292
  BUTTON_FILE_GENERATOR,
1362
1293
  BUTTON_SPEC_FILE_GENERATOR,
1363
1294
  TSUP_CONFIG_FILE_GENERATOR2,
1364
- TSCONFIG_FILE_GENERATOR4,
1365
- PRETTIER_CONFIG_FILE_GENERATOR4,
1366
- ESLINT_CONFIG_FILE_GENERATOR4,
1295
+ makeReactTsconfigFileGenerator("tsconfig.json", namespace),
1296
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1297
+ makeReactEslintConfigGenerator("eslint.config.mjs", namespace),
1367
1298
  VITEST_CONFIG_FILE_GENERATOR4
1368
1299
  ]
1369
1300
  );
@@ -1422,9 +1353,11 @@ function makePackageGenerator2(packageName, namespace) {
1422
1353
  // Removed './index.css' as it's no longer produced by Styled Components
1423
1354
  },
1424
1355
  scripts: {
1356
+ prebuild: "pnpm check-types",
1425
1357
  build: "tsup",
1426
1358
  dev: "tsup --watch",
1427
1359
  // Helpful for local lib dev
1360
+ "check-types": "tsc --noEmit",
1428
1361
  lint: "eslint .",
1429
1362
  format: "prettier . --write",
1430
1363
  test: "vitest run",
@@ -1474,23 +1407,6 @@ var BUTTON_SPEC_FILE_GENERATOR2 = new FileGeneratorImp(
1474
1407
  BUTTON_SPEC2
1475
1408
  );
1476
1409
 
1477
- // src/packages/react-package/unstyled-react-package/files/eslint-config-file-generator.ts
1478
- var ESLINT_CONFIG5 = `import base from '@stack-dev/eslint-config/base.mjs';
1479
- import react from '@stack-dev/eslint-config/react.mjs';
1480
-
1481
- export default [
1482
- ...base,
1483
- ...react,
1484
- {
1485
- ignores: ['**/dist/**', '**/coverage/**']
1486
- }
1487
- ];
1488
- `;
1489
- var ESLINT_CONFIG_FILE_GENERATOR5 = new FileGeneratorImp(
1490
- "eslint.config.mjs",
1491
- ESLINT_CONFIG5
1492
- );
1493
-
1494
1410
  // src/packages/react-package/unstyled-react-package/files/index-file-generator.ts
1495
1411
  var INDEX_TS3 = `export * from './button';
1496
1412
  `;
@@ -1499,30 +1415,6 @@ var INDEX_FILE_GENERATOR5 = new FileGeneratorImp(
1499
1415
  INDEX_TS3
1500
1416
  );
1501
1417
 
1502
- // src/packages/react-package/unstyled-react-package/files/prettier-config-file-generator.ts
1503
- var PRETTIER_CONFIG5 = `import base from '@stack-dev/prettier-config/base.mjs';
1504
-
1505
- export default base;
1506
- `;
1507
- var PRETTIER_CONFIG_FILE_GENERATOR5 = new FileGeneratorImp(
1508
- "prettier.config.mjs",
1509
- PRETTIER_CONFIG5
1510
- );
1511
-
1512
- // src/packages/react-package/unstyled-react-package/files/tsconfig-file-generator.ts
1513
- var TSCONFIG5 = `{
1514
- "extends": "@stack-dev/typescript-config/tsconfig.react.json",
1515
- "compilerOptions": {
1516
- "outDir": "dist"
1517
- },
1518
- "include": ["src"]
1519
- }
1520
- `;
1521
- var TSCONFIG_FILE_GENERATOR5 = new FileGeneratorImp(
1522
- "tsconfig.json",
1523
- TSCONFIG5
1524
- );
1525
-
1526
1418
  // src/packages/react-package/unstyled-react-package/files/tsup-config-file-generator.ts
1527
1419
  var TSUP_CONFIG3 = `import { defineConfig } from 'tsup';
1528
1420
 
@@ -1580,9 +1472,9 @@ async function createUnstyledReactPackage(name) {
1580
1472
  BUTTON_FILE_GENERATOR2,
1581
1473
  BUTTON_SPEC_FILE_GENERATOR2,
1582
1474
  TSUP_CONFIG_FILE_GENERATOR3,
1583
- TSCONFIG_FILE_GENERATOR5,
1584
- PRETTIER_CONFIG_FILE_GENERATOR5,
1585
- ESLINT_CONFIG_FILE_GENERATOR5,
1475
+ makeReactTsconfigFileGenerator("tsconfig.json", namespace),
1476
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1477
+ makeReactEslintConfigGenerator("eslint.config.mjs", namespace),
1586
1478
  VITEST_CONFIG_FILE_GENERATOR5
1587
1479
  ]
1588
1480
  );
@@ -1637,9 +1529,11 @@ function makePackageGenerator3(packageName, namespace) {
1637
1529
  // Removed './index.css' as it's no longer produced by Styled Components
1638
1530
  },
1639
1531
  scripts: {
1532
+ prebuild: "pnpm check-types",
1640
1533
  build: "tsup",
1641
1534
  dev: "tsup --watch",
1642
1535
  // Helpful for local lib dev
1536
+ "check-types": "tsc --noEmit",
1643
1537
  lint: "eslint .",
1644
1538
  format: "prettier . --write",
1645
1539
  test: "vitest run",
@@ -1742,40 +1636,6 @@ export function App() {
1742
1636
  `;
1743
1637
  var APP_FILE_GENERATOR = new FileGeneratorImp("src/App.tsx", APP);
1744
1638
 
1745
- // src/packages/vite-react-app/files/eslint-config-file-generator.ts
1746
- var ESLINT_CONFIG6 = `import base from '@stack-dev/eslint-config/base.mjs';
1747
-
1748
- export default [...base, { ignores: ['**/dist/**'] }];
1749
- `;
1750
- var ESLINT_CONFIG_FILE_GENERATOR6 = new FileGeneratorImp(
1751
- "eslint.config.mjs",
1752
- ESLINT_CONFIG6
1753
- );
1754
-
1755
- // src/packages/vite-react-app/files/prettier-config-file-generator.ts
1756
- var PRETTIER_CONFIG6 = `import base from '@stack-dev/prettier-config/base.mjs';
1757
-
1758
- export default base;
1759
- `;
1760
- var PRETTIER_CONFIG_FILE_GENERATOR6 = new FileGeneratorImp(
1761
- "prettier.config.mjs",
1762
- PRETTIER_CONFIG6
1763
- );
1764
-
1765
- // src/packages/vite-react-app/files/tsconfig-file-generator.ts
1766
- var TSCONFIG6 = `{
1767
- "extends": "@stack-dev/typescript-config/tsconfig.react.json",
1768
- "compilerOptions": {
1769
- "outDir": "dist"
1770
- },
1771
- "include": ["src"]
1772
- }
1773
- `;
1774
- var TSCONFIG_FILE_GENERATOR6 = new FileGeneratorImp(
1775
- "tsconfig.json",
1776
- TSCONFIG6
1777
- );
1778
-
1779
1639
  // src/packages/vite-react-app/files/vitest-config-file-generator.ts
1780
1640
  var VITEST_CONFIG6 = `import { defineConfig } from 'vitest/config';
1781
1641
 
@@ -1809,9 +1669,9 @@ async function createViteReactApp(name) {
1809
1669
  INDEX_HTML_FILE_GENERATOR,
1810
1670
  MAIN_FILE_GENERATOR,
1811
1671
  APP_FILE_GENERATOR,
1812
- TSCONFIG_FILE_GENERATOR6,
1813
- PRETTIER_CONFIG_FILE_GENERATOR6,
1814
- ESLINT_CONFIG_FILE_GENERATOR6,
1672
+ makeReactTsconfigFileGenerator("tsconfig.json", namespace),
1673
+ makePrettierConfigFileGenerator("prettier.config.mjs", namespace),
1674
+ makeReactEslintConfigGenerator("eslint.config.mjs", namespace),
1815
1675
  VITEST_CONFIG_FILE_GENERATOR6
1816
1676
  ]
1817
1677
  );
@@ -1845,8 +1705,11 @@ function makeAppPackageGenerator3(packageName, namespace) {
1845
1705
  build: "tsc && vite build",
1846
1706
  preview: "vite preview",
1847
1707
  start: "pnpm run preview",
1708
+ "check-types": "tsc --noEmit",
1848
1709
  lint: "eslint .",
1849
- format: "prettier . --write"
1710
+ format: "prettier . --write",
1711
+ test: "vitest run",
1712
+ "test:watch": "vitest"
1850
1713
  }
1851
1714
  }
1852
1715
  });
@@ -2052,7 +1915,105 @@ function isStyleType(s) {
2052
1915
 
2053
1916
  // src/workspace/create-workspace.ts
2054
1917
  import fs6 from "fs/promises";
1918
+ import path17 from "path";
1919
+
1920
+ // src/workspace/eslint-config.ts
1921
+ import path14 from "path";
1922
+ async function makeEslintConfig(directory, namespace) {
1923
+ const packageJsonModel = new PackageJSON({
1924
+ name: `${namespace}/eslint-config`,
1925
+ peerDependencies: [
1926
+ new Dependency("eslint", "^9.32.0"),
1927
+ new Dependency("typescript", "^5.8.3")
1928
+ ],
1929
+ dependencies: [
1930
+ new Dependency("@eslint/js", "^9.32.0"),
1931
+ new Dependency("eslint-plugin-react", "^7.37.5"),
1932
+ new Dependency("typescript-eslint", "^8.38.0")
1933
+ ],
1934
+ additionalData: {
1935
+ version: "0.1.0",
1936
+ private: true
1937
+ }
1938
+ });
1939
+ const fullPath = path14.join(directory, "configs/eslint-config");
1940
+ return new PackageGenerator(
1941
+ fullPath,
1942
+ new PackageJsonGenerator(packageJsonModel, namespace),
1943
+ [BASE_FILE_GENERATOR, REACT_FILE_GENERATOR]
1944
+ );
1945
+ }
1946
+ var BASE = `import eslint from "@eslint/js";
1947
+ import tseslint from "typescript-eslint";
1948
+
1949
+ export default tseslint.config(
1950
+ eslint.configs.recommended,
1951
+ tseslint.configs.strict,
1952
+ tseslint.configs.stylistic,
1953
+ {
1954
+ rules: {
1955
+ "@typescript-eslint/array-type": ["error", { default: "generic" }],
1956
+ "@typescript-eslint/consistent-type-definitions": "off",
1957
+ "@typescript-eslint/class-literal-property-style": ["error", "getters"],
1958
+ },
1959
+ }
1960
+ );
1961
+ `;
1962
+ var BASE_FILE_GENERATOR = new FileGeneratorImp("base.mjs", BASE);
1963
+ var REACT = `import eslint from "@eslint/js";
1964
+ import pluginReact from "eslint-plugin-react";
1965
+ import tseslint from "typescript-eslint";
1966
+
1967
+ export default tseslint.config(
1968
+ eslint.configs.recommended,
1969
+ tseslint.configs.strict,
1970
+ pluginReact.configs.flat.recommended,
1971
+ pluginReact.configs.flat["jsx-runtime"],
1972
+ {
1973
+ settings: {
1974
+ react: {
1975
+ version: "detect",
1976
+ },
1977
+ },
1978
+ }
1979
+ );
1980
+ `;
1981
+ var REACT_FILE_GENERATOR = new FileGeneratorImp("react.mjs", REACT);
1982
+
1983
+ // src/workspace/prettier-config.ts
2055
1984
  import path15 from "path";
1985
+ async function makePrettierConfig(directory, namespace) {
1986
+ const packageJsonModel = new PackageJSON({
1987
+ name: `${namespace}/prettier-config`,
1988
+ peerDependencies: [new Dependency("prettier", "^3.6.2")],
1989
+ dependencies: [
1990
+ new Dependency("prettier-plugin-organize-imports", "^4.2.0")
1991
+ ],
1992
+ additionalData: {
1993
+ version: "0.1.0",
1994
+ private: true
1995
+ }
1996
+ });
1997
+ const fullPath = path15.join(directory, "configs/prettier-config");
1998
+ return new PackageGenerator(
1999
+ fullPath,
2000
+ new PackageJsonGenerator(packageJsonModel, namespace),
2001
+ [BASE_FILE_GENERATOR2]
2002
+ );
2003
+ }
2004
+ var BASE2 = `/**
2005
+ * @see https://prettier.io/docs/configuration
2006
+ * @type {import("prettier").Config}
2007
+ */
2008
+ const config = {
2009
+ tabWidth: 2,
2010
+ singleQuote: true,
2011
+ plugins: [import.meta.resolve("prettier-plugin-organize-imports")],
2012
+ };
2013
+
2014
+ export default config;
2015
+ `;
2016
+ var BASE_FILE_GENERATOR2 = new FileGeneratorImp("base.mjs", BASE2);
2056
2017
 
2057
2018
  // src/workspace/root-package.ts
2058
2019
  async function makeRootPackage(directory, name) {
@@ -2239,7 +2200,7 @@ vite.config.ts.timestamp-*
2239
2200
  `;
2240
2201
 
2241
2202
  // src/workspace/typescript-config.ts
2242
- import path14 from "path";
2203
+ import path16 from "path";
2243
2204
  async function makeTypescriptConfig(directory, namespace) {
2244
2205
  const packageJsonModel = new PackageJSON({
2245
2206
  name: `${namespace}/typescript-config`,
@@ -2250,14 +2211,14 @@ async function makeTypescriptConfig(directory, namespace) {
2250
2211
  files: ["*.json"]
2251
2212
  }
2252
2213
  });
2253
- const fullPath = path14.join(directory, "configs/typescript-config");
2214
+ const fullPath = path16.join(directory, "configs/typescript-config");
2254
2215
  return new PackageGenerator(
2255
2216
  fullPath,
2256
2217
  new PackageJsonGenerator(packageJsonModel, namespace),
2257
- [BASE, REACT, NODE]
2218
+ [BASE3, REACT2, NODE]
2258
2219
  );
2259
2220
  }
2260
- var BASE = new FileGeneratorImp(
2221
+ var BASE3 = new FileGeneratorImp(
2261
2222
  "tsconfig.base.json",
2262
2223
  JSON.stringify(
2263
2224
  {
@@ -2280,7 +2241,7 @@ var BASE = new FileGeneratorImp(
2280
2241
  2
2281
2242
  )
2282
2243
  );
2283
- var REACT = new FileGeneratorImp(
2244
+ var REACT2 = new FileGeneratorImp(
2284
2245
  "tsconfig.react.json",
2285
2246
  JSON.stringify(
2286
2247
  {
@@ -2314,23 +2275,25 @@ var NODE = new FileGeneratorImp(
2314
2275
  async function createWorkspace(name, directory) {
2315
2276
  await validateNotInWorkspace(directory);
2316
2277
  console.log(`\u2728 Creating workspace: @${name}`);
2317
- const fullPath = path15.join(directory, name);
2278
+ const fullPath = path17.join(directory, name);
2318
2279
  await fs6.mkdir(fullPath, { recursive: true });
2319
2280
  const namespace = `@${name}`;
2320
2281
  const PACKAGES = [
2321
2282
  await makeRootPackage(fullPath, name),
2322
- await makeTypescriptConfig(fullPath, namespace)
2283
+ await makeTypescriptConfig(fullPath, namespace),
2284
+ await makeEslintConfig(fullPath, namespace),
2285
+ await makePrettierConfig(fullPath, namespace)
2323
2286
  ];
2324
2287
  await Promise.all(PACKAGES.map((p) => p.generate()));
2325
- await fs6.mkdir(path15.join(fullPath, "apps"));
2326
- await fs6.mkdir(path15.join(fullPath, "configs"));
2327
- await fs6.mkdir(path15.join(fullPath, "packages"));
2288
+ await fs6.mkdir(path17.join(fullPath, "apps"), { recursive: true });
2289
+ await fs6.mkdir(path17.join(fullPath, "configs"), { recursive: true });
2290
+ await fs6.mkdir(path17.join(fullPath, "packages"), { recursive: true });
2328
2291
  console.log(`\u2705 Workspace created at: ${fullPath}`);
2329
2292
  console.log("");
2330
2293
  console.log(`Run "cd ${fullPath}" followed by "pnpm install"`);
2331
2294
  }
2332
2295
  async function validateNotInWorkspace(directory) {
2333
- const namespace = await getNamespace(directory);
2296
+ const namespace = await tryGettingNamespace(directory);
2334
2297
  if (namespace !== void 0) {
2335
2298
  throw new Error(`Currently in workspace "${namespace}".`);
2336
2299
  }