stack-dev 0.1.0

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 (204) hide show
  1. package/.idea/modules.xml +8 -0
  2. package/.idea/prettier.xml +7 -0
  3. package/.idea/stack-dev.iml +12 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/apps/cli/eslint.config.mjs +3 -0
  6. package/apps/cli/node_modules/.bin/acorn +21 -0
  7. package/apps/cli/node_modules/.bin/esbuild +21 -0
  8. package/apps/cli/node_modules/.bin/eslint +21 -0
  9. package/apps/cli/node_modules/.bin/glob +21 -0
  10. package/apps/cli/node_modules/.bin/json5 +21 -0
  11. package/apps/cli/node_modules/.bin/prettier +21 -0
  12. package/apps/cli/node_modules/.bin/stack-prettier +21 -0
  13. package/apps/cli/node_modules/.bin/tsc +21 -0
  14. package/apps/cli/node_modules/.bin/tsserver +21 -0
  15. package/apps/cli/node_modules/.bin/tsup +21 -0
  16. package/apps/cli/node_modules/.bin/tsup-node +21 -0
  17. package/apps/cli/node_modules/.bin/yaml +21 -0
  18. package/apps/cli/package.json +35 -0
  19. package/apps/cli/prettier.config.mjs +3 -0
  20. package/apps/cli/src/file-generator/file-generator-imp.ts +20 -0
  21. package/apps/cli/src/file-generator/file-generator.ts +5 -0
  22. package/apps/cli/src/file-generator/index.ts +3 -0
  23. package/apps/cli/src/file-generator/package-json-generator.ts +23 -0
  24. package/apps/cli/src/index.ts +185 -0
  25. package/apps/cli/src/link-packages.ts +65 -0
  26. package/apps/cli/src/package-json/dependency.ts +28 -0
  27. package/apps/cli/src/package-json/index.ts +3 -0
  28. package/apps/cli/src/package-json/package-json.ts +269 -0
  29. package/apps/cli/src/packages/create-config-package.ts +29 -0
  30. package/apps/cli/src/packages/index.ts +4 -0
  31. package/apps/cli/src/packages/library-package/create-library-package.ts +85 -0
  32. package/apps/cli/src/packages/library-package/files/add-file-generator.ts +8 -0
  33. package/apps/cli/src/packages/library-package/files/add-spec-file-generator.ts +17 -0
  34. package/apps/cli/src/packages/library-package/files/eslint-config-file-generator.ts +11 -0
  35. package/apps/cli/src/packages/library-package/files/index-file-generator.ts +9 -0
  36. package/apps/cli/src/packages/library-package/files/prettier-config-file-generator.ts +11 -0
  37. package/apps/cli/src/packages/library-package/files/tsconfig-file-generator.ts +15 -0
  38. package/apps/cli/src/packages/library-package/files/tsup-config-file-generator.ts +23 -0
  39. package/apps/cli/src/packages/library-package/files/vitest-config-file-generator.ts +19 -0
  40. package/apps/cli/src/packages/library-package/index.ts +1 -0
  41. package/apps/cli/src/packages/react-package/create-react-package.ts +25 -0
  42. package/apps/cli/src/packages/react-package/create-tailwind-react-package.ts +30 -0
  43. package/apps/cli/src/packages/react-package/create-unstyled-react-package.ts +3 -0
  44. package/apps/cli/src/packages/react-package/css-react-package/create-css-react-package.ts +103 -0
  45. package/apps/cli/src/packages/react-package/css-react-package/files/button-css-module-file-generator.ts +16 -0
  46. package/apps/cli/src/packages/react-package/css-react-package/files/button-file-generator.ts +14 -0
  47. package/apps/cli/src/packages/react-package/css-react-package/files/button-spec-file-generator.ts +33 -0
  48. package/apps/cli/src/packages/react-package/css-react-package/files/eslint-config-file-generator.ts +18 -0
  49. package/apps/cli/src/packages/react-package/css-react-package/files/index-file-generator.ts +9 -0
  50. package/apps/cli/src/packages/react-package/css-react-package/files/prettier-config-file-generator.ts +11 -0
  51. package/apps/cli/src/packages/react-package/css-react-package/files/tsconfig-file-generator.ts +15 -0
  52. package/apps/cli/src/packages/react-package/css-react-package/files/tsup-config-file-generator.ts +24 -0
  53. package/apps/cli/src/packages/react-package/css-react-package/files/vitest-config-file-generator.ts +23 -0
  54. package/apps/cli/src/packages/react-package/index.ts +1 -0
  55. package/apps/cli/src/packages/react-package/styled-components-react-package/create-styled-components-react-package.ts +112 -0
  56. package/apps/cli/src/packages/react-package/styled-components-react-package/files/button-file-generator.ts +30 -0
  57. package/apps/cli/src/packages/react-package/styled-components-react-package/files/button-spec-file-generator.ts +33 -0
  58. package/apps/cli/src/packages/react-package/styled-components-react-package/files/eslint-config-file-generator.ts +18 -0
  59. package/apps/cli/src/packages/react-package/styled-components-react-package/files/index-file-generator.ts +9 -0
  60. package/apps/cli/src/packages/react-package/styled-components-react-package/files/prettier-config-file-generator.ts +11 -0
  61. package/apps/cli/src/packages/react-package/styled-components-react-package/files/tsconfig-file-generator.ts +15 -0
  62. package/apps/cli/src/packages/react-package/styled-components-react-package/files/tsup-config-file-generator.ts +21 -0
  63. package/apps/cli/src/packages/react-package/styled-components-react-package/files/vitest-config-file-generator.ts +23 -0
  64. package/apps/cli/src/packages/vite-react-app/create-vite-react-app.ts +79 -0
  65. package/apps/cli/src/packages/vite-react-app/files/app-file-generator.ts +28 -0
  66. package/apps/cli/src/packages/vite-react-app/files/eslint-config-file-generator.ts +11 -0
  67. package/apps/cli/src/packages/vite-react-app/files/index-html-file-generator.ts +20 -0
  68. package/apps/cli/src/packages/vite-react-app/files/main-file-generator.ts +14 -0
  69. package/apps/cli/src/packages/vite-react-app/files/prettier-config-file-generator.ts +11 -0
  70. package/apps/cli/src/packages/vite-react-app/files/tsconfig-file-generator.ts +15 -0
  71. package/apps/cli/src/packages/vite-react-app/files/vite-config-file-generator.ts +17 -0
  72. package/apps/cli/src/packages/vite-react-app/files/vitest-config-file-generator.ts +19 -0
  73. package/apps/cli/src/tsconfig/compiler-options.ts +83 -0
  74. package/apps/cli/src/tsconfig/index.ts +4 -0
  75. package/apps/cli/src/tsconfig/reference.ts +21 -0
  76. package/apps/cli/src/tsconfig/tsconfig.ts +137 -0
  77. package/apps/cli/src/unlink-packages.ts +47 -0
  78. package/apps/cli/src/utils/package-generator.ts +41 -0
  79. package/apps/cli/src/utils/package-type.ts +44 -0
  80. package/apps/cli/src/utils/package.ts +126 -0
  81. package/apps/cli/src/utils/style-type.ts +41 -0
  82. package/apps/cli/src/utils/utils.ts +28 -0
  83. package/apps/cli/src/utils/workspace.ts +78 -0
  84. package/apps/cli/src/workspace/create-workspace.ts +39 -0
  85. package/apps/cli/src/workspace/index.ts +1 -0
  86. package/apps/cli/src/workspace/root-package.ts +195 -0
  87. package/apps/cli/src/workspace/typescript-config.ts +84 -0
  88. package/apps/cli/tsconfig.json +14 -0
  89. package/apps/cli/tsup.config.ts +16 -0
  90. package/apps/demo/eslint.config.mjs +3 -0
  91. package/apps/demo/index.html +12 -0
  92. package/apps/demo/node_modules/.bin/browserslist +21 -0
  93. package/apps/demo/node_modules/.bin/eslint +21 -0
  94. package/apps/demo/node_modules/.bin/prettier +21 -0
  95. package/apps/demo/node_modules/.bin/tsc +21 -0
  96. package/apps/demo/node_modules/.bin/tsserver +21 -0
  97. package/apps/demo/node_modules/.bin/vite +21 -0
  98. package/apps/demo/node_modules/.vite/deps/_metadata.json +52 -0
  99. package/apps/demo/node_modules/.vite/deps/chunk-IGB2AZES.js +1930 -0
  100. package/apps/demo/node_modules/.vite/deps/chunk-IGB2AZES.js.map +7 -0
  101. package/apps/demo/node_modules/.vite/deps/chunk-NEPDRNXC.js +21626 -0
  102. package/apps/demo/node_modules/.vite/deps/chunk-NEPDRNXC.js.map +7 -0
  103. package/apps/demo/node_modules/.vite/deps/package.json +3 -0
  104. package/apps/demo/node_modules/.vite/deps/react-dom.js +6 -0
  105. package/apps/demo/node_modules/.vite/deps/react-dom.js.map +7 -0
  106. package/apps/demo/node_modules/.vite/deps/react-dom_client.js +38 -0
  107. package/apps/demo/node_modules/.vite/deps/react-dom_client.js.map +7 -0
  108. package/apps/demo/node_modules/.vite/deps/react.js +5 -0
  109. package/apps/demo/node_modules/.vite/deps/react.js.map +7 -0
  110. package/apps/demo/node_modules/.vite/deps/react_jsx-dev-runtime.js +911 -0
  111. package/apps/demo/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +7 -0
  112. package/apps/demo/node_modules/.vite/deps/react_jsx-runtime.js +923 -0
  113. package/apps/demo/node_modules/.vite/deps/react_jsx-runtime.js.map +7 -0
  114. package/apps/demo/node_modules/.vite/deps/styled-components.js +1366 -0
  115. package/apps/demo/node_modules/.vite/deps/styled-components.js.map +7 -0
  116. package/apps/demo/package.json +32 -0
  117. package/apps/demo/prettier.config.mjs +3 -0
  118. package/apps/demo/src/App.tsx +50 -0
  119. package/apps/demo/src/main.tsx +9 -0
  120. package/apps/demo/tsconfig.json +17 -0
  121. package/apps/demo/vite.config.ts +9 -0
  122. package/apps/demo/vitest.config.ts +11 -0
  123. package/configs/eslint-config/base.mjs +15 -0
  124. package/configs/eslint-config/node_modules/.bin/acorn +21 -0
  125. package/configs/eslint-config/node_modules/.bin/eslint +21 -0
  126. package/configs/eslint-config/node_modules/.bin/tsc +21 -0
  127. package/configs/eslint-config/node_modules/.bin/tsserver +21 -0
  128. package/configs/eslint-config/package.json +12 -0
  129. package/configs/eslint-config/react.mjs +17 -0
  130. package/configs/prettier-config/base.mjs +11 -0
  131. package/configs/prettier-config/node_modules/.bin/prettier +21 -0
  132. package/configs/prettier-config/node_modules/.bin/tsc +21 -0
  133. package/configs/prettier-config/node_modules/.bin/tsserver +21 -0
  134. package/configs/prettier-config/package.json +9 -0
  135. package/configs/typescript-config/global.d.ts +12 -0
  136. package/configs/typescript-config/node_modules/.bin/tsc +21 -0
  137. package/configs/typescript-config/node_modules/.bin/tsserver +21 -0
  138. package/configs/typescript-config/package.json +7 -0
  139. package/configs/typescript-config/tsconfig.base.json +19 -0
  140. package/configs/typescript-config/tsconfig.node.json +6 -0
  141. package/configs/typescript-config/tsconfig.react.json +8 -0
  142. package/package.json +16 -0
  143. package/packages/core/eslint.config.mjs +3 -0
  144. package/packages/core/node_modules/.bin/eslint +21 -0
  145. package/packages/core/node_modules/.bin/prettier +21 -0
  146. package/packages/core/node_modules/.bin/tsc +21 -0
  147. package/packages/core/node_modules/.bin/tsserver +21 -0
  148. package/packages/core/node_modules/.bin/tsup +21 -0
  149. package/packages/core/node_modules/.bin/tsup-node +21 -0
  150. package/packages/core/node_modules/.bin/vite +21 -0
  151. package/packages/core/node_modules/.bin/vitest +21 -0
  152. package/packages/core/node_modules/.bin/yaml +21 -0
  153. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  154. package/packages/core/package.json +35 -0
  155. package/packages/core/prettier.config.mjs +3 -0
  156. package/packages/core/src/are-objects-equal.ts +26 -0
  157. package/packages/core/src/have-same-items.ts +84 -0
  158. package/packages/core/src/index.ts +6 -0
  159. package/packages/core/src/snapshot.ts +11 -0
  160. package/packages/core/src/sort-keys.ts +7 -0
  161. package/packages/core/src/spec/are-objects-equal.spec.ts +30 -0
  162. package/packages/core/src/spec/have-same-items.spec.ts +29 -0
  163. package/packages/core/src/spec/sort-keys.spec.ts +57 -0
  164. package/packages/core/tsconfig.json +7 -0
  165. package/packages/core/tsup.config.ts +15 -0
  166. package/packages/core/vitest.config.mts +11 -0
  167. package/packages/react-css/eslint.config.mjs +10 -0
  168. package/packages/react-css/node_modules/.bin/esbuild +21 -0
  169. package/packages/react-css/node_modules/.bin/eslint +21 -0
  170. package/packages/react-css/node_modules/.bin/prettier +21 -0
  171. package/packages/react-css/node_modules/.bin/tsc +21 -0
  172. package/packages/react-css/node_modules/.bin/tsserver +21 -0
  173. package/packages/react-css/node_modules/.bin/tsup +21 -0
  174. package/packages/react-css/node_modules/.bin/tsup-node +21 -0
  175. package/packages/react-css/node_modules/.bin/vitest +21 -0
  176. package/packages/react-css/node_modules/.bin/yaml +21 -0
  177. package/packages/react-css/package.json +50 -0
  178. package/packages/react-css/prettier.config.mjs +3 -0
  179. package/packages/react-css/src/button.module.css +8 -0
  180. package/packages/react-css/src/button.spec.tsx +25 -0
  181. package/packages/react-css/src/button.tsx +11 -0
  182. package/packages/react-css/src/index.ts +1 -0
  183. package/packages/react-css/tsconfig.json +7 -0
  184. package/packages/react-css/tsup.config.ts +17 -0
  185. package/packages/react-css/vitest.config.ts +15 -0
  186. package/packages/react-styled-components/eslint.config.mjs +10 -0
  187. package/packages/react-styled-components/node_modules/.bin/eslint +21 -0
  188. package/packages/react-styled-components/node_modules/.bin/prettier +21 -0
  189. package/packages/react-styled-components/node_modules/.bin/tsc +21 -0
  190. package/packages/react-styled-components/node_modules/.bin/tsserver +21 -0
  191. package/packages/react-styled-components/node_modules/.bin/tsup +21 -0
  192. package/packages/react-styled-components/node_modules/.bin/tsup-node +21 -0
  193. package/packages/react-styled-components/node_modules/.bin/vitest +21 -0
  194. package/packages/react-styled-components/node_modules/.bin/yaml +21 -0
  195. package/packages/react-styled-components/package.json +51 -0
  196. package/packages/react-styled-components/prettier.config.mjs +3 -0
  197. package/packages/react-styled-components/src/button.spec.tsx +27 -0
  198. package/packages/react-styled-components/src/button.tsx +21 -0
  199. package/packages/react-styled-components/src/index.ts +1 -0
  200. package/packages/react-styled-components/tsconfig.json +7 -0
  201. package/packages/react-styled-components/tsup.config.ts +16 -0
  202. package/packages/react-styled-components/vitest.config.ts +15 -0
  203. package/pnpm-workspace.yaml +4 -0
  204. package/turbo.json +13 -0
@@ -0,0 +1,28 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { PackageJSON } from '../package-json/package-json';
4
+
5
+ export async function getDirectoryPackageJson(
6
+ directory: string,
7
+ ): Promise<PackageJSON> {
8
+ const packageJsonPath = getPackageJSONPath(directory);
9
+ const packageJsonText = await fs.readFile(packageJsonPath, {
10
+ encoding: 'utf-8',
11
+ });
12
+
13
+ return PackageJSON.parse(packageJsonText);
14
+ }
15
+
16
+ export function getPackageJSONPath(directory: string) {
17
+ return path.join(directory, 'package.json');
18
+ }
19
+
20
+ export async function fileExists(filepath: string): Promise<boolean> {
21
+ try {
22
+ await fs.access(filepath, fs.constants.F_OK);
23
+
24
+ return true;
25
+ } catch {
26
+ return false;
27
+ }
28
+ }
@@ -0,0 +1,78 @@
1
+ import { fileExists, getDirectoryPackageJson } from './utils';
2
+
3
+ import { Snapshot } from '@stack-dev/core';
4
+ import fs from 'node:fs/promises';
5
+ import path from 'path';
6
+ import yaml from 'yaml';
7
+
8
+ export type WorkspaceYaml = {
9
+ packages: ReadonlyArray<string>;
10
+ };
11
+
12
+ export async function getDirectoryWorkspaceFile(
13
+ directory: string,
14
+ ): Promise<WorkspaceYaml> {
15
+ const raw = await getRawDirectoryWorkspaceFile(directory);
16
+
17
+ if ('packages' in raw && raw.packages instanceof Array) {
18
+ return {
19
+ packages: raw.packages.filter((p): p is string => typeof p === 'string'),
20
+ };
21
+ } else {
22
+ return { packages: [] };
23
+ }
24
+ }
25
+
26
+ async function getRawDirectoryWorkspaceFile(
27
+ directory: string,
28
+ ): Promise<Snapshot> {
29
+ const case1 = path.join(directory, 'pnpm-workspace.yaml');
30
+ const case2 = path.join(directory, 'pnpm-workspace.yml');
31
+
32
+ if (await fileExists(case1)) {
33
+ return yaml.parse(await fs.readFile(case1, { encoding: 'utf-8' }));
34
+ } else if (await fileExists(case2)) {
35
+ return yaml.parse(await fs.readFile(case2, { encoding: 'utf-8' }));
36
+ } else {
37
+ throw new Error(`Directory "${directory}" is not a workspace.`);
38
+ }
39
+ }
40
+
41
+ export async function isWorkspaceRoot(directory: string): Promise<boolean> {
42
+ return (
43
+ (await fileExists(path.join(directory, 'pnpm-workspace.yaml'))) ||
44
+ (await fileExists(path.join(directory, 'pnpm-workspace.yml')))
45
+ );
46
+ }
47
+
48
+ export async function getWorkspaceRoot(
49
+ directory: string = process.cwd(),
50
+ ): Promise<string> {
51
+ const parent = path.dirname(directory);
52
+
53
+ if (parent === directory) {
54
+ throw new Error('Not a workspace.');
55
+ }
56
+
57
+ if (await isWorkspaceRoot(directory)) {
58
+ return directory;
59
+ }
60
+
61
+ return getWorkspaceRoot(parent);
62
+ }
63
+
64
+ export async function getNamespace(
65
+ directory: string = process.cwd(),
66
+ ): Promise<string> {
67
+ const root = await getWorkspaceRoot(directory);
68
+
69
+ const packageJson = await getDirectoryPackageJson(root);
70
+
71
+ const result = packageJson.name;
72
+
73
+ if (!result) {
74
+ throw new Error('Missing name.');
75
+ }
76
+
77
+ return `@${result}`;
78
+ }
@@ -0,0 +1,39 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { getNamespace } from '../utils/workspace';
4
+ import { makeRootPackage } from './root-package';
5
+ import { makeTypescriptConfig } from './typescript-config';
6
+
7
+ export async function createWorkspace(name: string, directory: string) {
8
+ await validateNotInWorkspace(directory);
9
+
10
+ console.log(`✨ Creating workspace: @${name}`);
11
+
12
+ const fullPath = path.join(directory, name);
13
+
14
+ await fs.mkdir(fullPath, { recursive: true });
15
+
16
+ const namespace = `@${name}`;
17
+ const PACKAGES = [
18
+ await makeRootPackage(fullPath, name),
19
+ await makeTypescriptConfig(fullPath, namespace),
20
+ ];
21
+
22
+ await Promise.all(PACKAGES.map((p) => p.generate()));
23
+
24
+ await fs.mkdir(path.join(fullPath, 'apps'));
25
+ await fs.mkdir(path.join(fullPath, 'configs'));
26
+ await fs.mkdir(path.join(fullPath, 'packages'));
27
+
28
+ console.log(`✅ Workspace created at: ${fullPath}`);
29
+ console.log('');
30
+ console.log(`Run "cd ${fullPath}" followed by "pnpm install"`);
31
+ }
32
+
33
+ async function validateNotInWorkspace(directory: string): Promise<void> {
34
+ const namespace = await getNamespace(directory);
35
+
36
+ if (namespace !== undefined) {
37
+ throw new Error(`Currently in workspace "${namespace}".`);
38
+ }
39
+ }
@@ -0,0 +1 @@
1
+ export * from './create-workspace';
@@ -0,0 +1,195 @@
1
+ import { PackageJsonGenerator } from '../file-generator';
2
+ import { FileGeneratorImp } from '../file-generator/file-generator-imp';
3
+ import { Dependency, PackageJSON } from '../package-json';
4
+ import { PackageGenerator } from '../utils/package-generator';
5
+
6
+ export async function makeRootPackage(
7
+ directory: string,
8
+ name: string,
9
+ ): Promise<PackageGenerator> {
10
+ const packageJsonModel = new PackageJSON({
11
+ name: name,
12
+ devDependencies: [new Dependency('turbo', '^2.5.4')],
13
+ additionalData: {
14
+ description: '',
15
+ keywords: [],
16
+ author: '',
17
+ license: 'ISC',
18
+ packageManager: 'pnpm@10.13.1',
19
+ },
20
+ });
21
+
22
+ const PNPM_WORKSPACE = new FileGeneratorImp(
23
+ 'pnpm-workspace.yaml',
24
+ ['packages:', ' - apps/*', ' - packages/*', ' - configs/*'].join('\n'),
25
+ );
26
+
27
+ const GITIGNORE = new FileGeneratorImp('.gitignore', GITIGNORE_CONTENT);
28
+
29
+ const TURBO_JSON = new FileGeneratorImp(
30
+ 'turbo.json',
31
+ JSON.stringify(
32
+ {
33
+ tasks: {
34
+ build: {
35
+ dependsOn: ['^build'],
36
+ outputs: ['dist/**'],
37
+ },
38
+ lint: {},
39
+ test: {},
40
+ },
41
+ },
42
+ null,
43
+ 2,
44
+ ),
45
+ );
46
+
47
+ return new PackageGenerator(
48
+ directory,
49
+ new PackageJsonGenerator(packageJsonModel, ''),
50
+ [PNPM_WORKSPACE, GITIGNORE, TURBO_JSON],
51
+ );
52
+ }
53
+
54
+ const GITIGNORE_CONTENT = `# Logs
55
+ logs
56
+ *.log
57
+ npm-debug.log*
58
+ yarn-debug.log*
59
+ yarn-error.log*
60
+ lerna-debug.log*
61
+
62
+ # Diagnostic reports (https://nodejs.org/api/report.html)
63
+ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
64
+
65
+ # Runtime data
66
+ pids
67
+ *.pid
68
+ *.seed
69
+ *.pid.lock
70
+
71
+ # Directory for instrumented libs generated by jscoverage/JSCover
72
+ lib-cov
73
+
74
+ # Coverage directory used by tools like istanbul
75
+ coverage
76
+ *.lcov
77
+
78
+ # nyc test coverage
79
+ .nyc_output
80
+
81
+ # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
82
+ .grunt
83
+
84
+ # Bower dependency directory (https://bower.io/)
85
+ bower_components
86
+
87
+ # node-waf configuration
88
+ .lock-wscript
89
+
90
+ # Compiled binary addons (https://nodejs.org/api/addons.html)
91
+ build/Release
92
+
93
+ # Dependency directories
94
+ node_modules/
95
+ jspm_packages/
96
+
97
+ # Snowpack dependency directory (https://snowpack.dev/)
98
+ web_modules/
99
+
100
+ # TypeScript cache
101
+ *.tsbuildinfo
102
+
103
+ # Optional npm cache directory
104
+ .npm
105
+
106
+ # Optional eslint cache
107
+ .eslintcache
108
+
109
+ # Optional stylelint cache
110
+ .stylelintcache
111
+
112
+ # Optional REPL history
113
+ .node_repl_history
114
+
115
+ # Output of 'npm pack'
116
+ *.tgz
117
+
118
+ # Yarn Integrity file
119
+ .yarn-integrity
120
+
121
+ # dotenv environment variable files
122
+ .env
123
+ .env.*
124
+ !.env.example
125
+
126
+ # parcel-bundler cache (https://parceljs.org/)
127
+ .cache
128
+ .parcel-cache
129
+
130
+ # Next.js build output
131
+ .next
132
+ out
133
+
134
+ # Nuxt.js build / generate output
135
+ .nuxt
136
+ dist
137
+
138
+ # Gatsby files
139
+ .cache/
140
+ # Comment in the public line in if your project uses Gatsby and not Next.js
141
+ # https://nextjs.org/blog/next-9-1#public-directory-support
142
+ # public
143
+
144
+ # vuepress build output
145
+ .vuepress/dist
146
+
147
+ # vuepress v2.x temp and cache directory
148
+ .temp
149
+ .cache
150
+
151
+ # Sveltekit cache directory
152
+ .svelte-kit/
153
+
154
+ # vitepress build output
155
+ **/.vitepress/dist
156
+
157
+ # vitepress cache directory
158
+ **/.vitepress/cache
159
+
160
+ # Docusaurus cache and generated files
161
+ .docusaurus
162
+
163
+ # Serverless directories
164
+ .serverless/
165
+
166
+ # FuseBox cache
167
+ .fusebox/
168
+
169
+ # DynamoDB Local files
170
+ .dynamodb/
171
+
172
+ # Firebase cache directory
173
+ .firebase/
174
+
175
+ # TernJS port file
176
+ .tern-port
177
+
178
+ # Stores VSCode versions used for testing VSCode extensions
179
+ .vscode-test
180
+
181
+ # yarn v3
182
+ .pnp.*
183
+ .yarn/*
184
+ !.yarn/patches
185
+ !.yarn/plugins
186
+ !.yarn/releases
187
+ !.yarn/sdks
188
+ !.yarn/versions
189
+
190
+ # Vite logs files
191
+ vite.config.js.timestamp-*
192
+ vite.config.ts.timestamp-*
193
+
194
+ .turbo
195
+ `;
@@ -0,0 +1,84 @@
1
+ import path from 'path';
2
+ import { PackageJSON } from '../package-json';
3
+ import { PackageJsonGenerator } from '../file-generator';
4
+ import { FileGeneratorImp } from '../file-generator/file-generator-imp';
5
+ import { Dependency } from '../package-json';
6
+ import { PackageGenerator } from '../utils/package-generator';
7
+
8
+ export async function makeTypescriptConfig(
9
+ directory: string,
10
+ namespace: string,
11
+ ): Promise<PackageGenerator> {
12
+ const packageJsonModel = new PackageJSON({
13
+ name: `${namespace}/typescript-config`,
14
+ devDependencies: [new Dependency('typescript', '^5.8.3')],
15
+ additionalData: {
16
+ version: '0.1.0',
17
+ private: true,
18
+ files: ['*.json'],
19
+ },
20
+ });
21
+
22
+ const fullPath = path.join(directory, 'configs/typescript-config');
23
+
24
+ return new PackageGenerator(
25
+ fullPath,
26
+ new PackageJsonGenerator(packageJsonModel, namespace),
27
+ [BASE, REACT, NODE],
28
+ );
29
+ }
30
+
31
+ export const BASE = new FileGeneratorImp(
32
+ 'tsconfig.base.json',
33
+ JSON.stringify(
34
+ {
35
+ compilerOptions: {
36
+ target: 'ES2022',
37
+ module: 'ESNext',
38
+ moduleResolution: 'bundler',
39
+ resolveJsonModule: true,
40
+ isolatedModules: true,
41
+ strict: true,
42
+ skipLibCheck: true,
43
+ forceConsistentCasingInFileNames: true,
44
+ esModuleInterop: true,
45
+ allowSyntheticDefaultImports: true,
46
+ noEmit: true,
47
+ types: [],
48
+ },
49
+ },
50
+ null,
51
+ 2,
52
+ ),
53
+ );
54
+
55
+ const REACT = new FileGeneratorImp(
56
+ 'tsconfig.react.json',
57
+ JSON.stringify(
58
+ {
59
+ extends: './tsconfig.base.json',
60
+ compilerOptions: {
61
+ jsx: 'react-jsx',
62
+ lib: ['DOM', 'DOM.Iterable', 'ES2022'],
63
+ types: [],
64
+ },
65
+ },
66
+ null,
67
+ 2,
68
+ ),
69
+ );
70
+
71
+ const NODE = new FileGeneratorImp(
72
+ 'tsconfig.node.json',
73
+ JSON.stringify(
74
+ {
75
+ extends: './tsconfig.base.json',
76
+ compilerOptions: {
77
+ lib: ['ES2022'],
78
+ types: ['node'],
79
+ },
80
+ },
81
+ null,
82
+ 2,
83
+ ),
84
+ );
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "@stack-dev/typescript-config/tsconfig.node.json",
3
+ "compilerOptions": {
4
+ "paths": {
5
+ "@stack-dev/core": [
6
+ "../../packages/core/src/index.ts"
7
+ ]
8
+ }
9
+ },
10
+ "references": [],
11
+ "include": [
12
+ "src"
13
+ ]
14
+ }
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from 'tsup';
2
+
3
+ export default defineConfig({
4
+ entry: ['src/index.ts'],
5
+ outDir: 'dist',
6
+ format: ['esm'],
7
+ target: 'node18',
8
+ splitting: false,
9
+ clean: true,
10
+ dts: true,
11
+ outExtension({ format }) {
12
+ return {
13
+ js: format === 'esm' ? '.mjs' : '.js',
14
+ };
15
+ },
16
+ });
@@ -0,0 +1,3 @@
1
+ import base from '@stack-dev/eslint-config/base.mjs';
2
+
3
+ export default [...base, { ignores: ['**/dist/**'] }];
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Vite + React + Stack-Dev</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/src/main.tsx"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/browserslist@4.28.1/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/browserslist@4.28.1/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/cli.js" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/cli.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/eslint@9.32.0/node_modules/eslint/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/eslint@9.32.0/node_modules/eslint/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/eslint@9.32.0/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/eslint@9.32.0/node_modules/eslint/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/eslint@9.32.0/node_modules/eslint/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/eslint@9.32.0/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
19
+ else
20
+ exec node "$basedir/../eslint/bin/eslint.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/prettier@3.6.2/node_modules/prettier/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/prettier@3.6.2/node_modules/prettier/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/prettier@3.6.2/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/prettier@3.6.2/node_modules/prettier/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/prettier@3.6.2/node_modules/prettier/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/prettier@3.6.2/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../prettier/bin/prettier.cjs" "$@"
19
+ else
20
+ exec node "$basedir/../prettier/bin/prettier.cjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsc" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/vite@5.4.21_@types+node@24.0.15/node_modules/vite/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/vite@5.4.21_@types+node@24.0.15/node_modules/vite/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/vite@5.4.21_@types+node@24.0.15/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/benmclean/projects/stack-dev/node_modules/.pnpm/vite@5.4.21_@types+node@24.0.15/node_modules/vite/bin/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/vite@5.4.21_@types+node@24.0.15/node_modules/vite/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/vite@5.4.21_@types+node@24.0.15/node_modules:/home/benmclean/projects/stack-dev/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
19
+ else
20
+ exec node "$basedir/../vite/bin/vite.js" "$@"
21
+ fi
@@ -0,0 +1,52 @@
1
+ {
2
+ "hash": "8da73743",
3
+ "configHash": "a0fa381c",
4
+ "lockfileHash": "e2c64e92",
5
+ "browserHash": "b9d8cca0",
6
+ "optimized": {
7
+ "react": {
8
+ "src": "../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/index.js",
9
+ "file": "react.js",
10
+ "fileHash": "10c799b3",
11
+ "needsInterop": true
12
+ },
13
+ "react-dom": {
14
+ "src": "../../../../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/index.js",
15
+ "file": "react-dom.js",
16
+ "fileHash": "3add3dbf",
17
+ "needsInterop": true
18
+ },
19
+ "react/jsx-dev-runtime": {
20
+ "src": "../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-dev-runtime.js",
21
+ "file": "react_jsx-dev-runtime.js",
22
+ "fileHash": "a8c5a39f",
23
+ "needsInterop": true
24
+ },
25
+ "react/jsx-runtime": {
26
+ "src": "../../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js",
27
+ "file": "react_jsx-runtime.js",
28
+ "fileHash": "c4c2e0a3",
29
+ "needsInterop": true
30
+ },
31
+ "react-dom/client": {
32
+ "src": "../../../../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js",
33
+ "file": "react-dom_client.js",
34
+ "fileHash": "23edecd6",
35
+ "needsInterop": true
36
+ },
37
+ "styled-components": {
38
+ "src": "../../../../../node_modules/.pnpm/styled-components@6.1.19_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/styled-components/dist/styled-components.browser.esm.js",
39
+ "file": "styled-components.js",
40
+ "fileHash": "5ea42d34",
41
+ "needsInterop": false
42
+ }
43
+ },
44
+ "chunks": {
45
+ "chunk-NEPDRNXC": {
46
+ "file": "chunk-NEPDRNXC.js"
47
+ },
48
+ "chunk-IGB2AZES": {
49
+ "file": "chunk-IGB2AZES.js"
50
+ }
51
+ }
52
+ }