@jakubmazanec/carson-templates 3.4.0-next.1fd7238e → 4.0.0-next.1ccffc71

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 (110) hide show
  1. package/README.md +4 -1
  2. package/build/constants.d.ts +3 -0
  3. package/build/constants.js +18 -15
  4. package/build/constants.js.map +2 -2
  5. package/build/getAppUrl.js +2 -1
  6. package/build/getAppUrl.js.map +2 -2
  7. package/package.json +13 -14
  8. package/source/constants.ts +21 -14
  9. package/source/getAppUrl.ts +3 -1
  10. package/templates/.editorconfig.ejs +28 -0
  11. package/templates/.prettierignore.ejs +13 -0
  12. package/templates/CONTRIBUTING.md.ejs +17 -0
  13. package/templates/README.md.insert.header.ejs +12 -0
  14. package/templates/README.md.insert.prerequisites.ejs +9 -0
  15. package/templates/main.ts.check.ejs +4 -0
  16. package/templates/main.ts.create.ejs +5 -0
  17. package/templates/prettier.config.cjs.ejs +19 -0
  18. package/templates/projects/carson-templates/.editorconfig.ejs +1 -26
  19. package/templates/projects/carson-templates/.prettierignore.ejs +1 -1
  20. package/templates/projects/carson-templates/CONTRIBUTING.md.ejs +1 -1
  21. package/templates/projects/carson-templates/README.md.insert.header.ejs +1 -10
  22. package/templates/projects/carson-templates/README.md.insert.prerequisites.ejs +8 -0
  23. package/templates/projects/carson-templates/package.json.create.ejs +1 -1
  24. package/templates/projects/carson-templates/package.json.ejs +19 -20
  25. package/templates/projects/carson-templates/prettier.config.cjs.ejs +1 -1
  26. package/templates/projects/carson-templates/source/main.ts.check.ejs +1 -2
  27. package/templates/projects/carson-templates/source/main.ts.create.ejs +1 -4
  28. package/templates/projects/carson-templates/tests/tsconfig.json.ejs +1 -22
  29. package/templates/projects/carson-templates/tsconfig.json.ejs +1 -26
  30. package/templates/projects/carson-templates/typedoc.config.cjs.ejs +1 -1
  31. package/templates/projects/changesets-changelog/.editorconfig.ejs +1 -26
  32. package/templates/projects/changesets-changelog/.prettierignore.ejs +1 -1
  33. package/templates/projects/changesets-changelog/CONTRIBUTING.md.ejs +1 -1
  34. package/templates/projects/changesets-changelog/README.md.insert.header.ejs +1 -10
  35. package/templates/projects/changesets-changelog/README.md.insert.prerequisites.ejs +8 -0
  36. package/templates/projects/changesets-changelog/package.json.create.ejs +1 -1
  37. package/templates/projects/changesets-changelog/package.json.ejs +17 -18
  38. package/templates/projects/changesets-changelog/prettier.config.cjs.ejs +1 -1
  39. package/templates/projects/changesets-changelog/source/main.ts.check.ejs +1 -2
  40. package/templates/projects/changesets-changelog/source/main.ts.create.ejs +1 -4
  41. package/templates/projects/changesets-changelog/tests/tsconfig.json.ejs +1 -22
  42. package/templates/projects/changesets-changelog/tsconfig.json.ejs +1 -26
  43. package/templates/projects/eslint-config/.editorconfig.ejs +1 -26
  44. package/templates/projects/eslint-config/.prettierignore.ejs +1 -1
  45. package/templates/projects/eslint-config/CONTRIBUTING.md.ejs +1 -1
  46. package/templates/projects/eslint-config/README.md.insert.header.ejs +1 -10
  47. package/templates/projects/eslint-config/README.md.insert.prerequisites.ejs +3 -0
  48. package/templates/projects/eslint-config/package.json.create.ejs +1 -1
  49. package/templates/projects/eslint-config/package.json.ejs +12 -13
  50. package/templates/projects/eslint-config/prettier.config.cjs.ejs +1 -1
  51. package/templates/projects/eslint-config/source/main.ts.check.ejs +1 -2
  52. package/templates/projects/eslint-config/source/main.ts.create.ejs +1 -4
  53. package/templates/projects/eslint-config/tsconfig.json.ejs +1 -26
  54. package/templates/projects/library/.editorconfig.ejs +1 -26
  55. package/templates/projects/library/.prettierignore.ejs +1 -1
  56. package/templates/projects/library/CONTRIBUTING.md.ejs +1 -16
  57. package/templates/projects/library/README.md.insert.header.ejs +1 -10
  58. package/templates/projects/library/README.md.insert.prerequisites.ejs +3 -0
  59. package/templates/projects/library/package.json.create.ejs +1 -1
  60. package/templates/projects/library/package.json.ejs +20 -21
  61. package/templates/projects/library/prettier.config.cjs.ejs +1 -1
  62. package/templates/projects/library/source/main.ts.check.ejs +1 -2
  63. package/templates/projects/library/source/main.ts.create.ejs +1 -3
  64. package/templates/projects/library/tests/tsconfig.json.ejs +1 -22
  65. package/templates/projects/library/tsconfig.json.ejs +1 -26
  66. package/templates/projects/library/typedoc.config.cjs.ejs +1 -16
  67. package/templates/projects/react-library/.editorconfig.ejs +1 -1
  68. package/templates/projects/react-library/CONTRIBUTING.md.ejs +1 -1
  69. package/templates/projects/react-library/README.md.insert.header.ejs +1 -10
  70. package/templates/projects/react-library/README.md.insert.prerequisites.ejs +3 -0
  71. package/templates/projects/react-library/package.json.ejs +4 -3
  72. package/templates/projects/react-library/source/main.ts.check.ejs +1 -1
  73. package/templates/projects/react-library/source/main.ts.create.ejs +1 -1
  74. package/templates/projects/react-library/tests/tsconfig.json.ejs +1 -22
  75. package/templates/projects/react-library/tsconfig.json.ejs +1 -1
  76. package/templates/projects/react-library/typedoc.config.cjs.ejs +1 -1
  77. package/templates/projects/remix-app/.editorconfig.ejs +1 -26
  78. package/templates/projects/remix-app/.prettierignore.ejs +11 -1
  79. package/templates/projects/remix-app/CONTRIBUTING.md.ejs +1 -1
  80. package/templates/projects/remix-app/Dockerfile.ejs +1 -1
  81. package/templates/projects/remix-app/README.md.insert.header.ejs +1 -10
  82. package/templates/projects/remix-app/env.d.ts.ejs +1 -1
  83. package/templates/projects/remix-app/eslint.config.js.ejs +1 -1
  84. package/templates/projects/remix-app/fly.toml.ejs +1 -1
  85. package/templates/projects/remix-app/package.json.create.ejs +1 -1
  86. package/templates/projects/remix-app/package.json.ejs +17 -11
  87. package/templates/projects/remix-app/react-router.config.ts.ejs +22 -0
  88. package/templates/projects/remix-app/{app → source}/entry.client.tsx.create.ejs +3 -3
  89. package/templates/projects/remix-app/{app → source}/root.tsx.create.ejs +2 -2
  90. package/templates/projects/remix-app/{app → source}/routes/_index.tsx.create.ejs +2 -2
  91. package/templates/projects/remix-app/source/routes.ts.create.ejs +8 -0
  92. package/templates/projects/remix-app/{app → source}/tailwind.css.create.ejs +1 -1
  93. package/templates/projects/remix-app/{app → source}/tailwindConfig.ts.create.ejs +2 -2
  94. package/templates/projects/remix-app/tailwind.config.ts.ejs +1 -1
  95. package/templates/projects/remix-app/tests/tsconfig.json.ejs +1 -22
  96. package/templates/projects/remix-app/tsconfig.json.ejs +4 -2
  97. package/templates/projects/remix-app/tsconfig.typecheck.json.ejs +3 -1
  98. package/templates/projects/remix-app/vite.config.ts.ejs +4 -21
  99. package/templates/tsconfig.json.ejs +28 -0
  100. package/templates/tsconfig.test.json.ejs +24 -0
  101. package/templates/typedoc.config.cjs.ejs +18 -0
  102. package/templates/workspace/.dockerignore.ejs +13 -13
  103. package/templates/workspace/.editorconfig.ejs +1 -26
  104. package/templates/workspace/.github/workflows/update-pull-request.yaml.ejs +4 -4
  105. package/templates/workspace/.gitignore.ejs +3 -1
  106. package/templates/workspace/.prettierignore.ejs +1 -11
  107. package/templates/workspace/package.json.create.ejs +1 -1
  108. package/templates/workspace/package.json.ejs +2 -3
  109. package/templates/workspace/prettier.config.cjs.ejs +1 -17
  110. package/templates/workspace/turbo.json.ejs +3 -3
package/README.md CHANGED
@@ -14,9 +14,12 @@ Collection of Carson templates.
14
14
  npm install @jakubmazanec/carson-templates
15
15
  ```
16
16
 
17
+ <!-- prerequisites -->
18
+
17
19
  #### Prerequisites
18
20
 
19
- - Node.js 20 or later
21
+ - Node.js 22 or later
22
+ <!-- prerequisites -->
20
23
 
21
24
  ## Usage
22
25
 
@@ -1,6 +1,8 @@
1
+ export declare const AUTHOR = "Jakub Mazanec <jakub@mazanec.dev>";
1
2
  export declare const BUILD_DIRECTORY = "build";
2
3
  export declare const STORYBOOK_BUILD_DIRECTORY = "storybook-static";
3
4
  export declare const SOURCE_DIRECTORY = "source";
5
+ export declare const APP_PORT = 5000;
4
6
  export declare const CARSON_PACKAGE_NAME = "@jakubmazanec/carson";
5
7
  export declare const TEMPLATE_PACKAGE_NAME = "@jakubmazanec/carson-templates";
6
8
  export declare const LINTER_CONFIG_PACKAGE_NAME = "@jakubmazanec/eslint-config";
@@ -9,6 +11,7 @@ export declare const MAIN_BRANCH_NAMES: Set<string>;
9
11
  export declare const DEVELOPMENT_BRANCH_NAMES: Set<string>;
10
12
  export declare const LINT_IGNORES: string[];
11
13
  export declare const FORMAT_IGNORE_PATTERNS: string[];
14
+ export declare const ECMASCRIPT_VERSION = 2024;
12
15
  export declare const TSCONFIG_COMPILER_OPTIONS: {
13
16
  allowSyntheticDefaultImports: boolean;
14
17
  composite: boolean;
@@ -2,9 +2,11 @@
2
2
  import fs from "node:fs";
3
3
  import { createRequire } from "node:module";
4
4
  import semver from "semver";
5
+ export const AUTHOR = "Jakub Mazanec <jakub@mazanec.dev>";
5
6
  export const BUILD_DIRECTORY = "build";
6
7
  export const STORYBOOK_BUILD_DIRECTORY = "storybook-static";
7
8
  export const SOURCE_DIRECTORY = "source";
9
+ export const APP_PORT = 5e3;
8
10
  export const CARSON_PACKAGE_NAME = "@jakubmazanec/carson";
9
11
  export const TEMPLATE_PACKAGE_NAME = "@jakubmazanec/carson-templates";
10
12
  export const LINTER_CONFIG_PACKAGE_NAME = "@jakubmazanec/eslint-config";
@@ -36,6 +38,7 @@ export const FORMAT_IGNORE_PATTERNS = [
36
38
  "LICENSE.md",
37
39
  `${BUILD_DIRECTORY}/`
38
40
  ].sort();
41
+ export const ECMASCRIPT_VERSION = 2024;
39
42
  export const TSCONFIG_COMPILER_OPTIONS = {
40
43
  allowSyntheticDefaultImports: true,
41
44
  composite: true,
@@ -43,17 +46,16 @@ export const TSCONFIG_COMPILER_OPTIONS = {
43
46
  forceConsistentCasingInFileNames: true,
44
47
  isolatedModules: true,
45
48
  jsx: "react-jsx",
46
- lib: ["dom", "dom.iterable", "es2022"],
49
+ lib: ["dom", "dom.iterable", `es${ECMASCRIPT_VERSION}`],
47
50
  module: "node16",
48
51
  moduleResolution: "node16",
49
- noEmitOnError: false,
50
- // TODO: change to `true` when this is fixed: https://github.com/kulshekhar/ts-jest/issues/4198
52
+ noEmitOnError: true,
51
53
  noImplicitOverride: true,
52
54
  noImplicitReturns: true,
53
55
  noUncheckedIndexedAccess: true,
54
56
  skipLibCheck: true,
55
57
  strict: true,
56
- target: "es2022"
58
+ target: `es${ECMASCRIPT_VERSION}`
57
59
  };
58
60
  export const PRETTIER_OPTIONS = {
59
61
  arrowParens: "always",
@@ -110,11 +112,10 @@ export const DEPENDENCY_VERSIONS = {
110
112
  [LINTER_CONFIG_PACKAGE_NAME]: "^4.0.0",
111
113
  "@changesets/cli": "^2.0.0",
112
114
  "@chromatic-com/storybook": "^3.0.0",
113
- "@remix-run/dev": "^2.0.0",
114
- "@remix-run/express": "^2.0.0",
115
- "@remix-run/node": "^2.0.0",
116
- "@remix-run/react": "^2.0.0",
117
- "@remix-run/serve": "^2.0.0",
115
+ "@react-router/dev": "^7.0.0",
116
+ "@react-router/fs-routes": "^7.0.0",
117
+ "@react-router/node": "^7.0.0",
118
+ "@react-router/serve": "^7.0.0",
118
119
  "@storybook/addon-controls": "^8.0.0",
119
120
  "@storybook/addon-essentials": "^8.0.0",
120
121
  "@storybook/addon-interactions": "^8.0.0",
@@ -128,10 +129,11 @@ export const DEPENDENCY_VERSIONS = {
128
129
  "@testing-library/react": "^16.0.0",
129
130
  "@types/lodash": "^4.0.0",
130
131
  "@types/node": "^22.0.0",
131
- "@types/react": "^18.0.0",
132
- "@types/react-dom": "^18.0.0",
132
+ "@types/react": "^19.0.0",
133
+ "@types/react-dom": "^19.0.0",
133
134
  "@vitest/coverage-v8": "^2.0.0",
134
135
  autoprefixer: "^10.0.0",
136
+ chromatic: "^11.0.0",
135
137
  concurrently: "^9.0.0",
136
138
  "cross-env": "^7.0.0",
137
139
  "del-cli": "^6.0.0",
@@ -144,17 +146,18 @@ export const DEPENDENCY_VERSIONS = {
144
146
  prettier: "^3.0.0",
145
147
  "prettier-plugin-packagejson": "^2.0.0",
146
148
  "prettier-plugin-tailwindcss": "^0.6.0",
147
- react: "^18.0.0",
148
- "react-dom": "^18.0.0",
149
+ react: "^19.0.0",
150
+ "react-dom": "^19.0.0",
151
+ "react-router": "^7.0.0",
149
152
  storybook: "^8.0.0",
150
153
  tailwindcss: "^3.0.0",
151
154
  turbo: "^2.0.0",
152
155
  typedoc: "^0.27.0",
153
156
  "typedoc-plugin-markdown": "^4.0.0",
154
157
  typescript: "^5.0.0",
155
- vite: "^5.0.0",
158
+ vite: "^6.0.0",
156
159
  vitest: "^2.0.0",
157
- node: "^22.12.0",
160
+ node: "^22.13.0",
158
161
  npm: "^10.9.0"
159
162
  };
160
163
  export const BUILD_TO_ESM_COMMAND = `esbuild "${SOURCE_DIRECTORY}/**/*" --platform=node --target=node${semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node))}.${semver.minor(semver.minVersion(DEPENDENCY_VERSIONS.node))} --outdir=${BUILD_DIRECTORY} --sourcemap`;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../source/constants.ts"],
4
- "sourcesContent": ["import fs from 'node:fs';\nimport {createRequire} from 'node:module';\nimport semver from 'semver';\n\nexport const BUILD_DIRECTORY = 'build';\nexport const STORYBOOK_BUILD_DIRECTORY = 'storybook-static';\nexport const SOURCE_DIRECTORY = 'source';\n\nexport const CARSON_PACKAGE_NAME = '@jakubmazanec/carson';\nexport const TEMPLATE_PACKAGE_NAME = '@jakubmazanec/carson-templates';\nexport const LINTER_CONFIG_PACKAGE_NAME = '@jakubmazanec/eslint-config';\nexport const CHANGELOG_PACKAGE_NAME = '@jakubmazanec/changesets-changelog';\n\nexport const MAIN_BRANCH_NAMES = new Set(['main', 'master']);\nexport const DEVELOPMENT_BRANCH_NAMES = new Set(['dev', 'develop', 'development']);\n\nexport const LINT_IGNORES = [\n '.cache/**',\n '.turbo/**',\n 'bin/**',\n 'coverage/**',\n 'node_modules/**',\n 'public/**',\n '**/*.d.ts',\n '**/*.json',\n '**/*.md',\n '**/*.mdx',\n `${BUILD_DIRECTORY}/**`,\n].sort();\n\nexport const FORMAT_IGNORE_PATTERNS = [\n '.cache/',\n '.turbo/',\n 'coverage/',\n 'node_modules/',\n 'public/',\n 'npm-shrinkwrap.json',\n 'package-lock.json',\n 'CHANGELOG.md',\n 'LICENSE.md',\n `${BUILD_DIRECTORY}/`,\n].sort();\n\nexport const TSCONFIG_COMPILER_OPTIONS = {\n allowSyntheticDefaultImports: true,\n composite: true,\n exactOptionalPropertyTypes: true,\n forceConsistentCasingInFileNames: true,\n isolatedModules: true,\n jsx: 'react-jsx',\n lib: ['dom', 'dom.iterable', 'es2022'],\n module: 'node16',\n moduleResolution: 'node16',\n noEmitOnError: false, // TODO: change to `true` when this is fixed: https://github.com/kulshekhar/ts-jest/issues/4198\n noImplicitOverride: true,\n noImplicitReturns: true,\n noUncheckedIndexedAccess: true,\n skipLibCheck: true,\n strict: true,\n target: 'es2022',\n};\n\nexport const PRETTIER_OPTIONS = {\n arrowParens: 'always',\n bracketSameLine: false,\n bracketSpacing: false,\n embeddedLanguageFormatting: 'auto',\n experimentalTernaries: true,\n htmlWhitespaceSensitivity: 'css',\n jsxSingleQuote: false,\n printWidth: 100,\n proseWrap: 'always',\n quoteProps: 'as-needed',\n requirePragma: false,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n // TODO: remove when this is fixed: https://github.com/prettier/prettier/issues/15956\n overrides: [\n {\n files: ['tsconfig.json'],\n options: {\n trailingComma: 'none',\n },\n },\n ],\n};\n\nexport const TYPEDOC_CONFIG = {\n plugin: 'typedoc-plugin-markdown',\n entryPoints: [`./${SOURCE_DIRECTORY}/main.ts`],\n out: 'docs',\n readme: 'none',\n githubPages: false,\n hideBreadcrumbs: true,\n};\n\n// dependencies\nlet require = createRequire(import.meta.url);\nlet carsonPackageVersion =\n semver\n .minVersion(\n (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {peerDependencies: Record<string, string>}\n ).peerDependencies[CARSON_PACKAGE_NAME] ?? '^1.0.0',\n )\n ?.format() ?? '1.0.0';\nlet isCarsonPackageVersionPrerelease = !!semver.prerelease(carsonPackageVersion)?.length;\nlet templatesPackageVersion = (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {version: string}\n).version;\nlet isTemplatesPackageVersionPrerelease = !!semver.prerelease(templatesPackageVersion)?.length;\n\nexport const DEPENDENCY_VERSIONS: Record<string, string> = {\n [CARSON_PACKAGE_NAME]:\n isCarsonPackageVersionPrerelease ? carsonPackageVersion : `^${carsonPackageVersion}`,\n [TEMPLATE_PACKAGE_NAME]:\n isTemplatesPackageVersionPrerelease ? templatesPackageVersion : `^${templatesPackageVersion}`,\n [CHANGELOG_PACKAGE_NAME]: '^2.0.0',\n [LINTER_CONFIG_PACKAGE_NAME]: '^4.0.0',\n\n '@changesets/cli': '^2.0.0',\n '@chromatic-com/storybook': '^3.0.0',\n '@remix-run/dev': '^2.0.0',\n '@remix-run/express': '^2.0.0',\n '@remix-run/node': '^2.0.0',\n '@remix-run/react': '^2.0.0',\n '@remix-run/serve': '^2.0.0',\n '@storybook/addon-controls': '^8.0.0',\n '@storybook/addon-essentials': '^8.0.0',\n '@storybook/addon-interactions': '^8.0.0',\n '@storybook/addon-links': '^8.0.0',\n '@storybook/blocks': '^8.0.0',\n '@storybook/preview-api': '^8.0.0',\n '@storybook/react': '^8.0.0',\n '@storybook/react-vite': '^8.0.0',\n '@storybook/test': '^8.0.0',\n '@testing-library/jest-dom': '^6.0.0',\n '@testing-library/react': '^16.0.0',\n '@types/lodash': '^4.0.0',\n '@types/node': '^22.0.0',\n '@types/react': '^18.0.0',\n '@types/react-dom': '^18.0.0',\n '@vitest/coverage-v8': '^2.0.0',\n autoprefixer: '^10.0.0',\n concurrently: '^9.0.0',\n 'cross-env': '^7.0.0',\n 'del-cli': '^6.0.0',\n esbuild: '^0.24.0',\n eslint: '^9.0.0',\n 'happy-dom': '^16.0.0',\n isbot: '^5.0.0',\n lodash: '^4.0.0',\n 'patch-package': '^8.0.0',\n prettier: '^3.0.0',\n 'prettier-plugin-packagejson': '^2.0.0',\n 'prettier-plugin-tailwindcss': '^0.6.0',\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n storybook: '^8.0.0',\n tailwindcss: '^3.0.0',\n turbo: '^2.0.0',\n typedoc: '^0.27.0',\n 'typedoc-plugin-markdown': '^4.0.0',\n typescript: '^5.0.0',\n vite: '^5.0.0',\n vitest: '^2.0.0',\n\n node: '^22.12.0',\n npm: '^10.9.0',\n};\n\n// commands\nexport const BUILD_TO_ESM_COMMAND = `esbuild \"${SOURCE_DIRECTORY}/**/*\" --platform=node --target=node${semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)}.${semver.minor(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)} --outdir=${BUILD_DIRECTORY} --sourcemap`;\nexport const BUILD_TO_CJS_COMMAND = `esbuild \"${SOURCE_DIRECTORY}/**/*\" --platform=node --target=node${semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)}.${semver.minor(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)} --format=cjs --outdir=${BUILD_DIRECTORY} --sourcemap`;\nexport const FORMAT_COMMAND = 'prettier . --write --ignore-unknown';\nexport const TEST_COMMAND = 'vitest run --coverage --passWithNoTests';\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import fs from 'node:fs';\nimport {createRequire} from 'node:module';\nimport semver from 'semver';\n\nexport const AUTHOR = 'Jakub Mazanec <jakub@mazanec.dev>';\n\nexport const BUILD_DIRECTORY = 'build';\nexport const STORYBOOK_BUILD_DIRECTORY = 'storybook-static';\nexport const SOURCE_DIRECTORY = 'source';\n\nexport const APP_PORT = 5000;\n\nexport const CARSON_PACKAGE_NAME = '@jakubmazanec/carson';\nexport const TEMPLATE_PACKAGE_NAME = '@jakubmazanec/carson-templates';\nexport const LINTER_CONFIG_PACKAGE_NAME = '@jakubmazanec/eslint-config';\nexport const CHANGELOG_PACKAGE_NAME = '@jakubmazanec/changesets-changelog';\n\nexport const MAIN_BRANCH_NAMES = new Set(['main', 'master']);\nexport const DEVELOPMENT_BRANCH_NAMES = new Set(['dev', 'develop', 'development']);\n\nexport const LINT_IGNORES = [\n '.cache/**',\n '.turbo/**',\n 'bin/**',\n 'coverage/**',\n 'node_modules/**',\n 'public/**',\n '**/*.d.ts',\n '**/*.json',\n '**/*.md',\n '**/*.mdx',\n `${BUILD_DIRECTORY}/**`,\n].sort();\n\nexport const FORMAT_IGNORE_PATTERNS = [\n '.cache/',\n '.turbo/',\n 'coverage/',\n 'node_modules/',\n 'public/',\n 'npm-shrinkwrap.json',\n 'package-lock.json',\n 'CHANGELOG.md',\n 'LICENSE.md',\n `${BUILD_DIRECTORY}/`,\n].sort();\n\nexport const ECMASCRIPT_VERSION = 2024;\n\nexport const TSCONFIG_COMPILER_OPTIONS = {\n allowSyntheticDefaultImports: true,\n composite: true,\n exactOptionalPropertyTypes: true,\n forceConsistentCasingInFileNames: true,\n isolatedModules: true,\n jsx: 'react-jsx',\n lib: ['dom', 'dom.iterable', `es${ECMASCRIPT_VERSION}`],\n module: 'node16',\n moduleResolution: 'node16',\n noEmitOnError: true,\n noImplicitOverride: true,\n noImplicitReturns: true,\n noUncheckedIndexedAccess: true,\n skipLibCheck: true,\n strict: true,\n target: `es${ECMASCRIPT_VERSION}`,\n};\n\nexport const PRETTIER_OPTIONS = {\n arrowParens: 'always',\n bracketSameLine: false,\n bracketSpacing: false,\n embeddedLanguageFormatting: 'auto',\n experimentalTernaries: true,\n htmlWhitespaceSensitivity: 'css',\n jsxSingleQuote: false,\n printWidth: 100,\n proseWrap: 'always',\n quoteProps: 'as-needed',\n requirePragma: false,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n // TODO: remove when this is fixed: https://github.com/prettier/prettier/issues/15956\n overrides: [\n {\n files: ['tsconfig.json'],\n options: {\n trailingComma: 'none',\n },\n },\n ],\n};\n\nexport const TYPEDOC_CONFIG = {\n plugin: 'typedoc-plugin-markdown',\n entryPoints: [`./${SOURCE_DIRECTORY}/main.ts`],\n out: 'docs',\n readme: 'none',\n githubPages: false,\n hideBreadcrumbs: true,\n};\n\n// dependencies\nlet require = createRequire(import.meta.url);\nlet carsonPackageVersion =\n semver\n .minVersion(\n (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {peerDependencies: Record<string, string>}\n ).peerDependencies[CARSON_PACKAGE_NAME] ?? '^1.0.0',\n )\n ?.format() ?? '1.0.0';\nlet isCarsonPackageVersionPrerelease = !!semver.prerelease(carsonPackageVersion)?.length;\nlet templatesPackageVersion = (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {version: string}\n).version;\nlet isTemplatesPackageVersionPrerelease = !!semver.prerelease(templatesPackageVersion)?.length;\n\nexport const DEPENDENCY_VERSIONS: Record<string, string> = {\n [CARSON_PACKAGE_NAME]:\n isCarsonPackageVersionPrerelease ? carsonPackageVersion : `^${carsonPackageVersion}`,\n [TEMPLATE_PACKAGE_NAME]:\n isTemplatesPackageVersionPrerelease ? templatesPackageVersion : `^${templatesPackageVersion}`,\n [CHANGELOG_PACKAGE_NAME]: '^2.0.0',\n [LINTER_CONFIG_PACKAGE_NAME]: '^4.0.0',\n\n '@changesets/cli': '^2.0.0',\n '@chromatic-com/storybook': '^3.0.0',\n '@react-router/dev': '^7.0.0',\n '@react-router/fs-routes': '^7.0.0',\n '@react-router/node': '^7.0.0',\n '@react-router/serve': '^7.0.0',\n '@storybook/addon-controls': '^8.0.0',\n '@storybook/addon-essentials': '^8.0.0',\n '@storybook/addon-interactions': '^8.0.0',\n '@storybook/addon-links': '^8.0.0',\n '@storybook/blocks': '^8.0.0',\n '@storybook/preview-api': '^8.0.0',\n '@storybook/react': '^8.0.0',\n '@storybook/react-vite': '^8.0.0',\n '@storybook/test': '^8.0.0',\n '@testing-library/jest-dom': '^6.0.0',\n '@testing-library/react': '^16.0.0',\n '@types/lodash': '^4.0.0',\n '@types/node': '^22.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n '@vitest/coverage-v8': '^2.0.0',\n autoprefixer: '^10.0.0',\n chromatic: '^11.0.0',\n concurrently: '^9.0.0',\n 'cross-env': '^7.0.0',\n 'del-cli': '^6.0.0',\n esbuild: '^0.24.0',\n eslint: '^9.0.0',\n 'happy-dom': '^16.0.0',\n isbot: '^5.0.0',\n lodash: '^4.0.0',\n 'patch-package': '^8.0.0',\n prettier: '^3.0.0',\n 'prettier-plugin-packagejson': '^2.0.0',\n 'prettier-plugin-tailwindcss': '^0.6.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n 'react-router': '^7.0.0',\n storybook: '^8.0.0',\n tailwindcss: '^3.0.0',\n turbo: '^2.0.0',\n typedoc: '^0.27.0',\n 'typedoc-plugin-markdown': '^4.0.0',\n typescript: '^5.0.0',\n vite: '^6.0.0',\n vitest: '^2.0.0',\n\n node: '^22.13.0',\n npm: '^10.9.0',\n};\n\n// commands\nexport const BUILD_TO_ESM_COMMAND = `esbuild \"${SOURCE_DIRECTORY}/**/*\" --platform=node --target=node${semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)}.${semver.minor(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)} --outdir=${BUILD_DIRECTORY} --sourcemap`;\nexport const BUILD_TO_CJS_COMMAND = `esbuild \"${SOURCE_DIRECTORY}/**/*\" --platform=node --target=node${semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)}.${semver.minor(semver.minVersion(DEPENDENCY_VERSIONS.node!)!)} --format=cjs --outdir=${BUILD_DIRECTORY} --sourcemap`;\nexport const FORMAT_COMMAND = 'prettier . --write --ignore-unknown';\nexport const TEST_COMMAND = 'vitest run --coverage --passWithNoTests';\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ import { APP_PORT } from "./constants.js";
2
3
  export function getAppUrl(project, deploymentEnvironment) {
3
4
  let appName = project.config.deployment?.appName;
4
5
  let appUrl = project.config.deployment?.appUrl;
@@ -6,7 +7,7 @@ export function getAppUrl(project, deploymentEnvironment) {
6
7
  return appUrl;
7
8
  }
8
9
  if (!appName) {
9
- return `http://localhost:5000`;
10
+ return `http://localhost:${APP_PORT}`;
10
11
  }
11
12
  return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;
12
13
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../source/getAppUrl.ts"],
4
- "sourcesContent": ["import {type Project} from '@jakubmazanec/carson';\n\nexport function getAppUrl(project: Project, deploymentEnvironment?: string) {\n let appName = (project.config as {deployment?: {appName?: string}}).deployment?.appName;\n let appUrl = (project.config as {deployment?: {appUrl?: string}}).deployment?.appUrl;\n\n if ((appUrl && deploymentEnvironment === undefined) || (!appName && appUrl)) {\n return appUrl;\n }\n\n if (!appName) {\n return `http://localhost:5000`;\n }\n\n return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;\n}\n"],
5
- "mappings": ";AAEO,gBAAS,UAAU,SAAkB,uBAAgC;AAC1E,MAAI,UAAW,QAAQ,OAA6C,YAAY;AAChF,MAAI,SAAU,QAAQ,OAA4C,YAAY;AAE9E,MAAK,UAAU,0BAA0B,UAAe,CAAC,WAAW,QAAS;AAC3E,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO,WAAW,wBAAwB,GAAG,OAAO,IAAI,qBAAqB,KAAK,OAAO;AAC3F;",
4
+ "sourcesContent": ["import {type Project} from '@jakubmazanec/carson';\n\nimport {APP_PORT} from './constants.js';\n\nexport function getAppUrl(project: Project, deploymentEnvironment?: string) {\n let appName = (project.config as {deployment?: {appName?: string}}).deployment?.appName;\n let appUrl = (project.config as {deployment?: {appUrl?: string}}).deployment?.appUrl;\n\n if ((appUrl && deploymentEnvironment === undefined) || (!appName && appUrl)) {\n return appUrl;\n }\n\n if (!appName) {\n return `http://localhost:${APP_PORT}`;\n }\n\n return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;\n}\n"],
5
+ "mappings": ";AAEA,SAAQ,gBAAe;AAEhB,gBAAS,UAAU,SAAkB,uBAAgC;AAC1E,MAAI,UAAW,QAAQ,OAA6C,YAAY;AAChF,MAAI,SAAU,QAAQ,OAA4C,YAAY;AAE9E,MAAK,UAAU,0BAA0B,UAAe,CAAC,WAAW,QAAS;AAC3E,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO,oBAAoB,QAAQ;AAAA,EACrC;AAEA,SAAO,WAAW,wBAAwB,GAAG,OAAO,IAAI,qBAAqB,KAAK,OAAO;AAC3F;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/carson-templates",
3
- "version": "3.4.0-next.1fd7238e",
3
+ "version": "4.0.0-next.1ccffc71",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  "templates"
22
22
  ],
23
23
  "scripts": {
24
- "build": "del-cli build tsconfig.tsbuildinfo && esbuild \"source/**/*\" --platform=node --target=node22.12 --outdir=build --sourcemap && tsc",
24
+ "build": "del-cli build tsconfig.tsbuildinfo && esbuild \"source/**/*\" --platform=node --target=node22.13 --outdir=build --sourcemap && tsc",
25
25
  "clean": "del-cli coverage build *.tsbuildinfo",
26
26
  "document": "del-cli docs && typedoc --options typedoc.config.cjs",
27
27
  "format": "prettier . --write --ignore-unknown",
@@ -34,34 +34,33 @@
34
34
  "semver": "^7.6.3"
35
35
  },
36
36
  "devDependencies": {
37
- "@jakubmazanec/carson": "^1.3.0",
38
- "@jakubmazanec/eslint-config": "^4.1.0",
39
- "@jakubmazanec/fs-utils": "^0.2.0",
37
+ "@jakubmazanec/carson": "2.0.0-next.1ccffc71",
38
+ "@jakubmazanec/eslint-config": "4.1.3-next.1ccffc71",
39
+ "@jakubmazanec/fs-utils": "0.2.9-next.1ccffc71",
40
40
  "@types/fs-extra": "^11.0.4",
41
- "@types/lodash": "^4.17.13",
42
- "@types/node": "^22.10.2",
41
+ "@types/lodash": "^4.17.14",
42
+ "@types/node": "^22.10.5",
43
43
  "@types/zen-observable": "^0.8.7",
44
44
  "@vitest/coverage-v8": "^2.1.8",
45
45
  "del-cli": "^6.0.0",
46
46
  "esbuild": "^0.24.2",
47
- "eslint": "^9.17.0",
47
+ "eslint": "^9.18.0",
48
48
  "execa": "^9.5.2",
49
- "fast-glob": "^3.3.2",
49
+ "fast-glob": "^3.3.3",
50
50
  "fs-extra": "^11.2.0",
51
- "lodash": "^4.17.21",
52
51
  "prettier": "^3.4.2",
53
52
  "prettier-plugin-packagejson": "^2.5.6",
54
53
  "typedoc": "^0.27.6",
55
- "typedoc-plugin-markdown": "^4.4.0",
56
- "typescript": "^5.7.2",
54
+ "typedoc-plugin-markdown": "^4.4.1",
55
+ "typescript": "^5.7.3",
57
56
  "vitest": "^2.1.8",
58
57
  "zen-observable": "^0.10.0"
59
58
  },
60
59
  "peerDependencies": {
61
- "@jakubmazanec/carson": "^1.0.0"
60
+ "@jakubmazanec/carson": "2.0.0-next.1ccffc71"
62
61
  },
63
62
  "packageManager": "npm@10.9.0",
64
63
  "engines": {
65
- "node": "^22.12.0"
64
+ "node": "^22.13.0"
66
65
  }
67
66
  }
@@ -2,10 +2,14 @@ import fs from 'node:fs';
2
2
  import {createRequire} from 'node:module';
3
3
  import semver from 'semver';
4
4
 
5
+ export const AUTHOR = 'Jakub Mazanec <jakub@mazanec.dev>';
6
+
5
7
  export const BUILD_DIRECTORY = 'build';
6
8
  export const STORYBOOK_BUILD_DIRECTORY = 'storybook-static';
7
9
  export const SOURCE_DIRECTORY = 'source';
8
10
 
11
+ export const APP_PORT = 5000;
12
+
9
13
  export const CARSON_PACKAGE_NAME = '@jakubmazanec/carson';
10
14
  export const TEMPLATE_PACKAGE_NAME = '@jakubmazanec/carson-templates';
11
15
  export const LINTER_CONFIG_PACKAGE_NAME = '@jakubmazanec/eslint-config';
@@ -41,6 +45,8 @@ export const FORMAT_IGNORE_PATTERNS = [
41
45
  `${BUILD_DIRECTORY}/`,
42
46
  ].sort();
43
47
 
48
+ export const ECMASCRIPT_VERSION = 2024;
49
+
44
50
  export const TSCONFIG_COMPILER_OPTIONS = {
45
51
  allowSyntheticDefaultImports: true,
46
52
  composite: true,
@@ -48,16 +54,16 @@ export const TSCONFIG_COMPILER_OPTIONS = {
48
54
  forceConsistentCasingInFileNames: true,
49
55
  isolatedModules: true,
50
56
  jsx: 'react-jsx',
51
- lib: ['dom', 'dom.iterable', 'es2022'],
57
+ lib: ['dom', 'dom.iterable', `es${ECMASCRIPT_VERSION}`],
52
58
  module: 'node16',
53
59
  moduleResolution: 'node16',
54
- noEmitOnError: false, // TODO: change to `true` when this is fixed: https://github.com/kulshekhar/ts-jest/issues/4198
60
+ noEmitOnError: true,
55
61
  noImplicitOverride: true,
56
62
  noImplicitReturns: true,
57
63
  noUncheckedIndexedAccess: true,
58
64
  skipLibCheck: true,
59
65
  strict: true,
60
- target: 'es2022',
66
+ target: `es${ECMASCRIPT_VERSION}`,
61
67
  };
62
68
 
63
69
  export const PRETTIER_OPTIONS = {
@@ -129,11 +135,10 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
129
135
 
130
136
  '@changesets/cli': '^2.0.0',
131
137
  '@chromatic-com/storybook': '^3.0.0',
132
- '@remix-run/dev': '^2.0.0',
133
- '@remix-run/express': '^2.0.0',
134
- '@remix-run/node': '^2.0.0',
135
- '@remix-run/react': '^2.0.0',
136
- '@remix-run/serve': '^2.0.0',
138
+ '@react-router/dev': '^7.0.0',
139
+ '@react-router/fs-routes': '^7.0.0',
140
+ '@react-router/node': '^7.0.0',
141
+ '@react-router/serve': '^7.0.0',
137
142
  '@storybook/addon-controls': '^8.0.0',
138
143
  '@storybook/addon-essentials': '^8.0.0',
139
144
  '@storybook/addon-interactions': '^8.0.0',
@@ -147,10 +152,11 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
147
152
  '@testing-library/react': '^16.0.0',
148
153
  '@types/lodash': '^4.0.0',
149
154
  '@types/node': '^22.0.0',
150
- '@types/react': '^18.0.0',
151
- '@types/react-dom': '^18.0.0',
155
+ '@types/react': '^19.0.0',
156
+ '@types/react-dom': '^19.0.0',
152
157
  '@vitest/coverage-v8': '^2.0.0',
153
158
  autoprefixer: '^10.0.0',
159
+ chromatic: '^11.0.0',
154
160
  concurrently: '^9.0.0',
155
161
  'cross-env': '^7.0.0',
156
162
  'del-cli': '^6.0.0',
@@ -163,18 +169,19 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
163
169
  prettier: '^3.0.0',
164
170
  'prettier-plugin-packagejson': '^2.0.0',
165
171
  'prettier-plugin-tailwindcss': '^0.6.0',
166
- react: '^18.0.0',
167
- 'react-dom': '^18.0.0',
172
+ react: '^19.0.0',
173
+ 'react-dom': '^19.0.0',
174
+ 'react-router': '^7.0.0',
168
175
  storybook: '^8.0.0',
169
176
  tailwindcss: '^3.0.0',
170
177
  turbo: '^2.0.0',
171
178
  typedoc: '^0.27.0',
172
179
  'typedoc-plugin-markdown': '^4.0.0',
173
180
  typescript: '^5.0.0',
174
- vite: '^5.0.0',
181
+ vite: '^6.0.0',
175
182
  vitest: '^2.0.0',
176
183
 
177
- node: '^22.12.0',
184
+ node: '^22.13.0',
178
185
  npm: '^10.9.0',
179
186
  };
180
187
 
@@ -1,5 +1,7 @@
1
1
  import {type Project} from '@jakubmazanec/carson';
2
2
 
3
+ import {APP_PORT} from './constants.js';
4
+
3
5
  export function getAppUrl(project: Project, deploymentEnvironment?: string) {
4
6
  let appName = (project.config as {deployment?: {appName?: string}}).deployment?.appName;
5
7
  let appUrl = (project.config as {deployment?: {appUrl?: string}}).deployment?.appUrl;
@@ -9,7 +11,7 @@ export function getAppUrl(project: Project, deploymentEnvironment?: string) {
9
11
  }
10
12
 
11
13
  if (!appName) {
12
- return `http://localhost:5000`;
14
+ return `http://localhost:${APP_PORT}`;
13
15
  }
14
16
 
15
17
  return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;
@@ -0,0 +1,28 @@
1
+ ---
2
+ to: '.editorconfig'
3
+ strategy: overwrite
4
+ ---
5
+ #
6
+ # DO NOT EDIT!
7
+ # This file was autogenerated by Carson.
8
+ # Changes may cause incorrect behavior and will be lost when the file is regenerated.
9
+ #
10
+ # Run `npx carson update workspace` to regenerate.
11
+ #
12
+
13
+ root = true
14
+
15
+ [*]
16
+ end_of_line = lf
17
+ insert_final_newline = true
18
+ charset = utf-8
19
+
20
+ [**.{js,jsx,mjs,cjs,ts,tsx,cts,mts,css,graphql,json,yaml,yml}]
21
+ indent_style = space
22
+ indent_size = 2
23
+ trim_trailing_whitespace = true
24
+
25
+ [**.{md,mdx}]
26
+ indent_style = space
27
+ indent_size = 2
28
+ trim_trailing_whitespace = false
@@ -0,0 +1,13 @@
1
+ ---
2
+ to: '.prettierignore'
3
+ strategy: overwrite
4
+ ---
5
+ #
6
+ # DO NOT EDIT!
7
+ # This file was autogenerated by Carson.
8
+ # Changes may cause incorrect behavior and will be lost when the file is regenerated.
9
+ #
10
+ # Run `npx carson update workspace` to regenerate.
11
+ #
12
+
13
+ <%- FORMAT_IGNORE_PATTERNS.join('\n') %>
@@ -0,0 +1,17 @@
1
+ ---
2
+ to: 'CONTRIBUTING.md'
3
+ strategy: overwrite
4
+ ---
5
+ # Contributing
6
+
7
+ Thank you for your interest in contributing to this project! Your help is greatly appreciated.
8
+
9
+ ## Reporting Bugs
10
+
11
+ If you encounter a bug, please let me know by opening an issue with a detailed description. You can
12
+ also create a repository with a minimal reproducible example to help me fix it more quickly.
13
+
14
+ ## Pull Requests
15
+
16
+ At this time, I am not accepting pull requests from external contributors. However, if you have a
17
+ feature request, please feel free to open an issue to discuss it.
@@ -0,0 +1,12 @@
1
+ ---
2
+ to: 'README.md'
3
+ strategy: [insert, header]
4
+ ---
5
+
6
+ <div align="center">
7
+
8
+ # <%- project.name -%>
9
+
10
+ <%- project.packageJson.description -%>
11
+
12
+ </div>
@@ -0,0 +1,9 @@
1
+ ---
2
+ to: 'README.md'
3
+ strategy: [insert, prerequisites]
4
+ ---
5
+
6
+ #### Prerequisites
7
+
8
+ - Node.js <%- semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node)) %> or later
9
+ - TypeScript <%- semver.major(semver.minVersion(DEPENDENCY_VERSIONS.typescript)) %> or later
@@ -0,0 +1,4 @@
1
+ ---
2
+ to: <%- `${SOURCE_DIRECTORY}/main.ts` %>
3
+ strategy: check
4
+ ---
@@ -0,0 +1,5 @@
1
+ ---
2
+ to: <%- `${SOURCE_DIRECTORY}/main.ts` %>
3
+ strategy: create
4
+ ---
5
+ export {}
@@ -0,0 +1,19 @@
1
+ ---
2
+ to: 'prettier.config.cjs'
3
+ strategy: overwrite
4
+ ---
5
+ <%
6
+ let prettierConfig = {
7
+ ...PRETTIER_OPTIONS,
8
+ plugins: ['prettier-plugin-packagejson'],
9
+ };
10
+ -%>
11
+ /**
12
+ * DO NOT EDIT!
13
+ * This file was autogenerated by Carson.
14
+ * Changes may cause incorrect behavior and will be lost when the file is regenerated.
15
+ *
16
+ * Run `npx carson update workspace` to regenerate.
17
+ */
18
+
19
+ module.exports = <%- JSON.stringify(prettierConfig, null, 2) %>;
@@ -1,28 +1,3 @@
1
1
  ---
2
- to: '.editorconfig'
3
- strategy: overwrite
2
+ extends: '../../.editorconfig.ejs'
4
3
  ---
5
- #
6
- # DO NOT EDIT!
7
- # This file was autogenerated by Carson.
8
- # Changes may cause incorrect behavior and will be lost when the file is regenerated.
9
- #
10
- # Run `npx carson update workspace` to regenerate.
11
- #
12
-
13
- root = true
14
-
15
- [*]
16
- end_of_line = lf
17
- insert_final_newline = true
18
- charset = utf-8
19
-
20
- [**.{js,jsx,mjs,cjs,ts,tsx,cts,mts,css,graphql,json,yaml,yml}]
21
- indent_style = space
22
- indent_size = 2
23
- trim_trailing_whitespace = true
24
-
25
- [**.{md,mdx}]
26
- indent_style = space
27
- indent_size = 2
28
- trim_trailing_whitespace = false
@@ -1,3 +1,3 @@
1
1
  ---
2
- extends: '../../workspace/.prettierignore.ejs'
2
+ extends: '../../.prettierignore.ejs'
3
3
  ---
@@ -1,3 +1,3 @@
1
1
  ---
2
- extends: '../library/CONTRIBUTING.md.ejs'
2
+ extends: '../../CONTRIBUTING.md.ejs'
3
3
  ---
@@ -1,12 +1,3 @@
1
1
  ---
2
- to: 'README.md'
3
- strategy: [insert, header]
2
+ extends: '../../README.md.insert.header.ejs'
4
3
  ---
5
-
6
- <div align="center">
7
-
8
- # <%- project.name -%>
9
-
10
- <%- project.packageJson.description -%>
11
-
12
- </div>
@@ -0,0 +1,8 @@
1
+ ---
2
+ to: 'README.md'
3
+ strategy: [insert, prerequisites]
4
+ ---
5
+
6
+ #### Prerequisites
7
+
8
+ - Node.js <%- semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node)) %> or later
@@ -10,6 +10,6 @@ strategy: create
10
10
  "url": "<%- workspace.repository?.url ?? '' %>"
11
11
  },
12
12
  "license": "MIT",
13
- "author": "Jakub Mazanec <jakub@mazanec.dev>",
13
+ "author": "<%- AUTHOR %>",
14
14
  "sideEffects": false
15
15
  }
@@ -3,25 +3,24 @@ to: 'package.json'
3
3
  strategy: merge
4
4
  ---
5
5
  <%
6
- let developmentDependencies = getDependencies(
7
- [
8
- LINTER_CONFIG_PACKAGE_NAME,
9
- '@types/lodash',
10
- '@types/node',
11
- '@vitest/coverage-v8',
12
- 'del-cli',
13
- 'esbuild',
14
- 'eslint',
15
- 'lodash',
16
- 'prettier',
17
- 'prettier-plugin-packagejson',
18
- 'typedoc',
19
- 'typedoc-plugin-markdown',
20
- 'typescript',
21
- 'vitest',
22
- ],
23
- workspace,
24
- );
6
+ let developmentDependencies = [
7
+ LINTER_CONFIG_PACKAGE_NAME,
8
+ '@types/lodash',
9
+ '@types/node',
10
+ '@vitest/coverage-v8',
11
+ 'del-cli',
12
+ 'esbuild',
13
+ 'eslint',
14
+ 'lodash',
15
+ 'prettier',
16
+ 'prettier-plugin-packagejson',
17
+ 'typedoc',
18
+ 'typedoc-plugin-markdown',
19
+ 'typescript',
20
+ 'vitest',
21
+ ].filter((dependency) => {
22
+ return !Object.keys(project.packageJson.dependencies ?? {}).some((key) => key === dependency); // if the project package.json already contains dependency, we don't need to add it
23
+ });
25
24
  let packageJson = {
26
25
  repository: {
27
26
  type: 'git',
@@ -42,7 +41,7 @@ let packageJson = {
42
41
  test: `del-cli coverage && ${TEST_COMMAND}`,
43
42
  typecheck: 'tsc --project tsconfig.typecheck.json',
44
43
  },
45
- devDependencies: developmentDependencies,
44
+ devDependencies: getDependencies(developmentDependencies, workspace),
46
45
  packageManager: `npm@${semver.minVersion(DEPENDENCY_VERSIONS.npm)}`,
47
46
  engines: {
48
47
  node: DEPENDENCY_VERSIONS.node,
@@ -1,3 +1,3 @@
1
1
  ---
2
- extends: '../../workspace/prettier.config.cjs.ejs'
2
+ extends: '../../prettier.config.cjs.ejs'
3
3
  ---