@jakubmazanec/carson-templates 7.1.0-unstable.73a94021 → 7.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.
@@ -147,6 +147,7 @@ export const DEPENDENCY_VERSIONS = {
147
147
  storybook: "^9.0.0",
148
148
  tailwindcss: "^4.0.0",
149
149
  "@tailwindcss/vite": "^4.0.0",
150
+ tsx: "^4.0.0",
150
151
  turbo: "^2.0.0",
151
152
  typedoc: "^0.28.0",
152
153
  "typedoc-plugin-markdown": "^4.0.0",
@@ -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 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': '^4.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-links': '^9.0.0',\n '@storybook/addon-docs': '^9.0.0',\n '@storybook/react-vite': '^9.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/react': '^19.0.0',\n '@types/semver': '^7.0.0',\n '@types/react-dom': '^19.0.0',\n '@vitest/coverage-v8': '^3.0.0',\n chromatic: '^13.0.0',\n concurrently: '^9.0.0',\n 'cross-env': '^10.0.0',\n 'del-cli': '^6.0.0',\n esbuild: '^0.24.0',\n eslint: '^9.0.0',\n execa: '^9.0.0',\n 'happy-dom': '^18.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 semver: '^7.0.0',\n storybook: '^9.0.0',\n tailwindcss: '^4.0.0',\n '@tailwindcss/vite': '^4.0.0',\n turbo: '^2.0.0',\n typedoc: '^0.28.0',\n 'typedoc-plugin-markdown': '^4.0.0',\n typescript: '^5.0.0',\n vite: '^7.0.0',\n vitest: '^3.0.0',\n\n node: '^24.0.0',\n '@types/node': '^24.0.0',\n npm: '^11.0.0',\n\n gel: '^6.7.0',\n};\n\n// commands\nexport const FORMAT_COMMAND = 'prettier . --write --ignore-unknown';\nexport const TEST_COMMAND = 'vitest run --coverage --passWithNoTests';\n"],
5
- "mappings": ";AAAA,OAAO,QAAQ;AACf,SAAQ,qBAAoB;AAC5B,OAAO,YAAY;AAEZ,aAAM,SAAS;AAEf,aAAM,kBAAkB;AACxB,aAAM,4BAA4B;AAClC,aAAM,mBAAmB;AAEzB,aAAM,WAAW;AAEjB,aAAM,sBAAsB;AAC5B,aAAM,wBAAwB;AAC9B,aAAM,6BAA6B;AACnC,aAAM,yBAAyB;AAE/B,aAAM,oBAAoB,oBAAI,IAAI,CAAC,QAAQ,QAAQ,CAAC;AACpD,aAAM,2BAA2B,oBAAI,IAAI,CAAC,OAAO,WAAW,aAAa,CAAC;AAE1E,aAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG,eAAe;AACpB,EAAE,KAAK;AAEA,aAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG,eAAe;AACpB,EAAE,KAAK;AAEA,aAAM,qBAAqB;AAE3B,aAAM,4BAA4B;AAAA,EACvC,8BAA8B;AAAA,EAC9B,WAAW;AAAA,EACX,4BAA4B;AAAA,EAC5B,kCAAkC;AAAA,EAClC,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,KAAK,CAAC,OAAO,gBAAgB,KAAK,kBAAkB,EAAE;AAAA,EACtD,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ,KAAK,kBAAkB;AACjC;AAEO,aAAM,mBAAmB;AAAA,EAC9B,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,2BAA2B;AAAA,EAC3B,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,MAAM;AAAA,EACN,aAAa;AAAA,EACb,eAAe;AAAA;AAAA,EAEf,WAAW;AAAA,IACT;AAAA,MACE,OAAO,CAAC,eAAe;AAAA,MACvB,SAAS;AAAA,QACP,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAEO,aAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,aAAa,CAAC,KAAK,gBAAgB,UAAU;AAAA,EAC7C,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,iBAAiB;AACnB;AAGA,IAAI,UAAU,cAAc,YAAY,GAAG;AAC3C,IAAI,uBACF,OACG;AAAA,EAEG,KAAK;AAAA,IACH,GAAG,aAAa,QAAQ,QAAQ,GAAG,qBAAqB,eAAe,GAAG;AAAA,MACxE,UAAU;AAAA,IACZ,CAAC;AAAA,EACH,EACA,iBAAiB,mBAAmB,KAAK;AAC7C,GACE,OAAO,KAAK;AAClB,IAAI,mCAAmC,CAAC,CAAC,OAAO,WAAW,oBAAoB,GAAG;AAClF,IAAI,0BACF,KAAK;AAAA,EACH,GAAG,aAAa,QAAQ,QAAQ,GAAG,qBAAqB,eAAe,GAAG;AAAA,IACxE,UAAU;AAAA,EACZ,CAAC;AACH,EACA;AACF,IAAI,sCAAsC,CAAC,CAAC,OAAO,WAAW,uBAAuB,GAAG;AAEjF,aAAM,sBAA8C;AAAA,EACzD,CAAC,mBAAmB,GAClB,mCAAmC,uBAAuB,IAAI,oBAAoB;AAAA,EACpF,CAAC,qBAAqB,GACpB,sCAAsC,0BAA0B,IAAI,uBAAuB;AAAA,EAC7F,CAAC,sBAAsB,GAAG;AAAA,EAC1B,CAAC,0BAA0B,GAAG;AAAA,EAE9B,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,0BAA0B;AAAA,EAC1B,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,OAAO;AAAA,EACP,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,2BAA2B;AAAA,EAC3B,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,QAAQ;AAAA,EAER,MAAM;AAAA,EACN,eAAe;AAAA,EACf,KAAK;AAAA,EAEL,KAAK;AACP;AAGO,aAAM,iBAAiB;AACvB,aAAM,eAAe;",
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': '^4.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-links': '^9.0.0',\n '@storybook/addon-docs': '^9.0.0',\n '@storybook/react-vite': '^9.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/react': '^19.0.0',\n '@types/semver': '^7.0.0',\n '@types/react-dom': '^19.0.0',\n '@vitest/coverage-v8': '^3.0.0',\n chromatic: '^13.0.0',\n concurrently: '^9.0.0',\n 'cross-env': '^10.0.0',\n 'del-cli': '^6.0.0',\n esbuild: '^0.24.0',\n eslint: '^9.0.0',\n execa: '^9.0.0',\n 'happy-dom': '^18.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 semver: '^7.0.0',\n storybook: '^9.0.0',\n tailwindcss: '^4.0.0',\n '@tailwindcss/vite': '^4.0.0',\n tsx: '^4.0.0',\n turbo: '^2.0.0',\n typedoc: '^0.28.0',\n 'typedoc-plugin-markdown': '^4.0.0',\n typescript: '^5.0.0',\n vite: '^7.0.0',\n vitest: '^3.0.0',\n\n node: '^24.0.0',\n '@types/node': '^24.0.0',\n npm: '^11.0.0',\n\n gel: '^6.7.0',\n};\n\n// commands\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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/carson-templates",
3
- "version": "7.1.0-unstable.73a94021",
3
+ "version": "7.1.0",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,29 +31,29 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "lodash": "^4.17.21",
34
- "semver": "^7.7.2"
34
+ "semver": "^7.7.3"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@jakubmazanec/carson": "^3.0.0",
38
38
  "@jakubmazanec/eslint-config": "^4.1.0",
39
39
  "@jakubmazanec/fs-utils": "^0.2.0",
40
40
  "@types/fs-extra": "^11.0.4",
41
- "@types/lodash": "^4.17.20",
41
+ "@types/lodash": "^4.17.21",
42
42
  "@types/node": "^24.0.4",
43
- "@types/semver": "^7.7.0",
43
+ "@types/semver": "^7.7.1",
44
44
  "@types/zen-observable": "^0.8.7",
45
45
  "@vitest/coverage-v8": "^3.2.4",
46
46
  "del-cli": "^6.0.0",
47
- "esbuild": "^0.25.9",
47
+ "esbuild": "^0.27.0",
48
48
  "eslint": "^9.33.0",
49
49
  "execa": "^9.6.0",
50
50
  "fast-glob": "^3.3.3",
51
- "fs-extra": "^11.3.1",
51
+ "fs-extra": "^11.3.2",
52
52
  "prettier": "^3.6.2",
53
53
  "prettier-plugin-packagejson": "^2.5.19",
54
- "typedoc": "^0.28.10",
55
- "typedoc-plugin-markdown": "^4.8.1",
56
- "typescript": "^5.9.2",
54
+ "typedoc": "^0.28.14",
55
+ "typedoc-plugin-markdown": "^4.9.0",
56
+ "typescript": "^5.9.3",
57
57
  "vitest": "^3.2.4",
58
58
  "zen-observable": "^0.10.0"
59
59
  },
@@ -170,6 +170,7 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
170
170
  storybook: '^9.0.0',
171
171
  tailwindcss: '^4.0.0',
172
172
  '@tailwindcss/vite': '^4.0.0',
173
+ tsx: '^4.0.0',
173
174
  turbo: '^2.0.0',
174
175
  typedoc: '^0.28.0',
175
176
  'typedoc-plugin-markdown': '^4.0.0',
@@ -16,8 +16,41 @@ import {promises as fs} from 'node:fs';
16
16
  import path from 'node:path';
17
17
  import semver from 'semver';
18
18
 
19
- type DependencyBumps = Map<string, string>;
19
+ const WORKSPACE_PLACEHOLDER_NAME = '@';
20
+ const WORKSPACE_PACKAGE_JSON_PATH = 'package.json';
21
+ const TEMPLATE_PACKAGE_NAME = '<%- TEMPLATE_PACKAGE_NAME %>';
20
22
 
23
+ type ProjectDependencyBumps = Map<string, string>;
24
+ type DependencyBumps = Map<string, ProjectDependencyBumps>;
25
+
26
+ /**
27
+ * A function that returns all projects that use Carson.
28
+ */
29
+ async function getProjectsWithCarson(dir = process.cwd(), result: string[] = []) {
30
+ let entries = await fs.readdir(dir, {withFileTypes: true});
31
+
32
+ for (let entry of entries) {
33
+ let fullPath = path.join(dir, entry.name);
34
+
35
+ if (entry.isDirectory()) {
36
+ if (entry.name === '.carson' && dir !== process.cwd()) {
37
+ let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8')) as {
38
+ name: string;
39
+ };
40
+
41
+ result.push(packageJson.name);
42
+ } else {
43
+ await getProjectsWithCarson(fullPath, result);
44
+ }
45
+ }
46
+ }
47
+
48
+ return result;
49
+ }
50
+
51
+ /**
52
+ * A function that checks if one of the updated dependencies was a major version bump that necessitates manual update of the Carson template package.
53
+ */
21
54
  async function checkCarsonTemplatesPackage(dependencyBumps: DependencyBumps) {
22
55
  // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- this is autogenerated
23
56
  if (<%- !workspace.projects.some((project) => project.name === TEMPLATE_PACKAGE_NAME) %>) {
@@ -27,85 +60,94 @@ async function checkCarsonTemplatesPackage(dependencyBumps: DependencyBumps) {
27
60
  let constantsFilePath = '<%- `${workspace.projects.find((project) => project.name === TEMPLATE_PACKAGE_NAME)?.relativePath ?? ''}/source/constants.ts` %>';
28
61
  let constantsFile = await fs.readFile(constantsFilePath, 'utf8');
29
62
 
30
- for (let [dependencyName, bump] of dependencyBumps) {
31
- let regexp = new RegExp(
32
- `(?<=('${_.escapeRegExp(dependencyName)}'|${_.escapeRegExp(dependencyName)}):\\s+')\\^\\d+\\.\\d+\\.\\d+(?='.*$)`,
33
- 'mi',
34
- );
35
- let result = regexp.exec(constantsFile);
63
+ for (let [, projectDependencyBumps] of dependencyBumps) {
64
+ if (!projectDependencyBumps.size) {
65
+ continue;
66
+ }
67
+
68
+ for (let [dependencyName, bump] of projectDependencyBumps) {
69
+ let regexp = new RegExp(
70
+ `(?<=('${_.escapeRegExp(dependencyName)}'|${_.escapeRegExp(dependencyName)}):\\s+')\\^\\d+\\.\\d+\\.\\d+(?='.*$)`,
71
+ 'mi',
72
+ );
73
+ let result = regexp.exec(constantsFile);
36
74
 
37
- if (result?.[0]) {
38
- let newMajorVersion = semver.major(semver.minVersion(bump)!);
39
- let oldMajorVersion = semver.major(semver.minVersion(result[0])!);
75
+ if (result?.[0]) {
76
+ let newMajorVersion = semver.major(semver.minVersion(bump)!);
77
+ let oldMajorVersion = semver.major(semver.minVersion(result[0])!);
40
78
 
41
- if (newMajorVersion > oldMajorVersion || dependencyName === 'node') {
42
79
  // Node.js is a special case, because it isn't specified in `dependencies` field
43
- throw new Error(
44
- `Bumping major version of dependency "${dependencyName}" that is handled by Carson, update of the Carson template package is needed!`,
45
- );
80
+ if (newMajorVersion > oldMajorVersion || dependencyName === 'node') {
81
+ throw new Error(
82
+ `Bumping major version of dependency "${dependencyName}" that is handled by Carson, update of the Carson template package is needed!`,
83
+ );
84
+ }
46
85
  }
47
86
  }
48
87
  }
49
88
  }
50
89
 
51
- async function getProjects(files: string[]) {
52
- let names = [];
53
-
54
- for (let file of files) {
55
- let rawfile = await fs.readFile(file, 'utf8');
56
- let packageJson = JSON.parse(rawfile) as {name: string};
57
-
58
- names.push(packageJson.name);
59
- }
60
-
61
- return names;
62
- }
63
-
90
+ /**
91
+ * A function that creates changesets for projects dependencies update.
92
+ */
64
93
  async function createChangeset(
65
- fileName: string,
94
+ getChangesetName: (suffix?: string) => string,
66
95
  dependencyBumps: DependencyBumps,
67
- projects: string[],
68
96
  ) {
69
- console.log('Creating changeset...');
97
+ for (let [projectName, projectDependencyBumps] of dependencyBumps) {
98
+ if (!projectDependencyBumps.size) {
99
+ continue;
100
+ }
70
101
 
71
- let message = '';
102
+ if (projectName !== WORKSPACE_PLACEHOLDER_NAME) {
103
+ console.log('Creating changeset for project:', projectName);
72
104
 
73
- for (let [dependencyName, bump] of dependencyBumps) {
74
- message += `Dependency \`${dependencyName}\` updated to version \`${bump}\`.\n`;
75
- }
105
+ let message = '';
76
106
 
77
- message = message.replace('\n', ' ');
107
+ for (let [dependencyName, dependencyBump] of projectDependencyBumps) {
108
+ message += `Dependency \`${dependencyName}\` updated to version \`${dependencyBump}\`.\n`;
109
+ }
78
110
 
79
- let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
111
+ message = message.replaceAll('\n', ' ');
80
112
 
81
- await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
113
+ await fs.writeFile(
114
+ getChangesetName(projectName),
115
+ `---\n'${projectName}': patch\n---\n${message.trim()}\n`,
116
+ );
117
+ }
118
+ }
82
119
  }
83
120
 
121
+ /**
122
+ * A function that creates changeset when updating the Carson template package.
123
+ */
84
124
  async function createChangesetForCarsonTemplates(
85
- fileName: string,
125
+ getChangesetName: (suffix?: string) => string,
86
126
  dependencyBumps: DependencyBumps,
87
- projects: string[],
88
127
  ) {
89
128
  console.log('Creating changeset for Carson templates update...');
90
129
 
91
- let message = '';
130
+ let workspaceDependencyBumps = dependencyBumps.get(WORKSPACE_PLACEHOLDER_NAME);
92
131
 
93
- for (let [dependencyName, bump] of dependencyBumps) {
94
- message += `Applies templates from \`${dependencyName}\` updated to version \`${bump}\`.\n`;
95
- }
96
-
97
- message = message.replace('\n', ' ');
132
+ if (workspaceDependencyBumps) {
133
+ let message = `Applies templates from \`${TEMPLATE_PACKAGE_NAME}\` updated to version \`${workspaceDependencyBumps.get(TEMPLATE_PACKAGE_NAME) ?? '?'}\`.\n`;
98
134
 
99
- let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
135
+ let projects = await getProjectsWithCarson();
136
+ let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
100
137
 
101
- await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
138
+ await fs.writeFile(getChangesetName(), `---\n${header}\n---\n${message.trim()}\n`);
139
+ }
102
140
  }
103
141
 
104
- async function getBumps(files: string[]) {
105
- let bumps = new Map<string, string>();
142
+ /**
143
+ * A function that returns workspace and projects and their updated dependencies. based on `git diff`.
144
+ */
145
+ async function getDependencyBumps(files: string[]): Promise<DependencyBumps> {
146
+ let bumps: DependencyBumps = new Map();
106
147
 
107
148
  for (let file of files) {
108
- let {stdout: changes} = await $`git show ${file}`;
149
+ let projectBumps: ProjectDependencyBumps = new Map();
150
+ let {stdout: changes} = await $`git diff HEAD~1 -- ${file}`;
109
151
 
110
152
  for (let change of changes.split('\n')) {
111
153
  if (!change.startsWith('+ ')) {
@@ -114,77 +156,48 @@ async function getBumps(files: string[]) {
114
156
 
115
157
  let match = change.match(/"(.*?)"/g);
116
158
 
117
- if (match?.[0] && match[1]) {
118
- bumps.set(match[0].replaceAll('"', ''), match[1].replaceAll('"', ''));
159
+ if (match?.[0] && match[1] && semver.validRange(match[1].replaceAll('"', ''))) {
160
+ projectBumps.set(match[0].replaceAll('"', ''), match[1].replaceAll('"', ''));
119
161
  }
120
162
  }
121
- }
122
-
123
- return bumps;
124
- }
125
-
126
- async function getProjectsWithCarsonTemplates(dir = process.cwd(), result: string[] = []) {
127
- let entries = await fs.readdir(dir, {withFileTypes: true});
128
-
129
- for (let entry of entries) {
130
- let fullPath = path.join(dir, entry.name);
131
163
 
132
- if (entry.isDirectory()) {
133
- if (entry.name === '.carson' && dir !== process.cwd()) {
134
- let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8')) as {
135
- name: string;
136
- };
164
+ if (file === WORKSPACE_PACKAGE_JSON_PATH && projectBumps.size) {
165
+ bumps.set(WORKSPACE_PLACEHOLDER_NAME, projectBumps);
166
+ } else if (projectBumps.size) {
167
+ let projectName = (JSON.parse(await fs.readFile(file, 'utf8')) as {name: string}).name;
137
168
 
138
- result.push(packageJson.name);
139
- } else {
140
- await getProjectsWithCarsonTemplates(fullPath, result);
141
- }
169
+ bumps.set(projectName, projectBumps);
142
170
  }
143
171
  }
144
172
 
145
- return result;
146
- }
147
-
148
- let {stdout: diffOutput} = await $`git diff --name-only HEAD~1`;
149
- let diffFiles = diffOutput.split('\n');
150
-
151
- if (diffFiles.find((diffFile) => diffFile.startsWith('.changeset'))) {
152
- throw new Error('Changeset already exists!');
173
+ return bumps;
153
174
  }
154
175
 
155
- let files = diffFiles
156
- .filter((file) => file !== 'package.json') // skip workspace package.json
157
- .filter((file) => file.endsWith('package.json'));
158
- let filesWithWorkspace = diffFiles.filter((file) => file.endsWith('package.json'));
176
+ let {stdout: diff} = await $`git diff --name-only HEAD~1`;
177
+ let files = diff.split('\n').filter((file) => file.endsWith('package.json'));
159
178
  let {stdout: shortHash} = await $`git rev-parse --short HEAD`;
160
- let changesetName = `.changeset/renovate-${shortHash.trim()}.md`;
161
- let updatedProjects = await getProjects(files);
162
- let dependencyBumpsWithWorkspace = await getBumps(filesWithWorkspace);
163
-
164
- console.log('Changed package.json files:', files);
165
-
166
- if (dependencyBumpsWithWorkspace.has('<%- TEMPLATE_PACKAGE_NAME %>')) {
167
- updatedProjects = await getProjectsWithCarsonTemplates();
179
+ let getChangesetName = (suffix?: string) =>
180
+ suffix === undefined ?
181
+ `.changeset/dependencies-update-${shortHash.trim()}.md`
182
+ : `.changeset/dependencies-update-${shortHash.trim()}-${suffix.replaceAll('/', '-')}.md`;
168
183
 
169
- console.log('Updated projects:', updatedProjects);
170
- console.log('Dependecy bumps (including the workspace):', [...dependencyBumpsWithWorkspace]);
184
+ let dependencyBumps = await getDependencyBumps(files);
171
185
 
172
- await createChangesetForCarsonTemplates(
173
- changesetName,
174
- dependencyBumpsWithWorkspace,
175
- updatedProjects,
176
- );
177
- } else if (updatedProjects.length) {
178
- let dependencyBumps = await getBumps(files);
186
+ console.log('Dependecy bumps:', dependencyBumps);
179
187
 
180
- console.log('Updated projects:', updatedProjects);
181
- console.log('Dependecy bumps:', [...dependencyBumps]);
182
-
183
- await createChangeset(changesetName, dependencyBumps, updatedProjects);
188
+ if (dependencyBumps.get(WORKSPACE_PLACEHOLDER_NAME)?.has(TEMPLATE_PACKAGE_NAME)) {
189
+ await createChangesetForCarsonTemplates(getChangesetName, dependencyBumps);
190
+ } else if (
191
+ dependencyBumps.size === 0 ||
192
+ (dependencyBumps.size === 1 && dependencyBumps.has(WORKSPACE_PLACEHOLDER_NAME))
193
+ ) {
194
+ console.log('No package.json changes to projects, creating empty changeset...');
184
195
 
185
- await checkCarsonTemplatesPackage(dependencyBumpsWithWorkspace);
196
+ await fs.writeFile(getChangesetName(), '---\n---\n');
197
+ await checkCarsonTemplatesPackage(dependencyBumps);
186
198
  } else {
187
- console.log('No package.json changes to published packages, creating empty changeset...');
188
-
189
- await fs.writeFile(changesetName, '---\n---\n');
199
+ await createChangeset(getChangesetName, dependencyBumps);
200
+ await checkCarsonTemplatesPackage(dependencyBumps);
190
201
  }
202
+
203
+ console.log('Done!');
@@ -0,0 +1,131 @@
1
+ ---
2
+ to: 'tools/scripts/create-templates-changeset.mts'
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
+ import {$} from 'execa';
14
+ import _ from 'lodash';
15
+ import {promises as fs} from 'node:fs';
16
+ import semver from 'semver';
17
+
18
+ const WORKSPACE_PLACEHOLDER_NAME = '@';
19
+ const WORKSPACE_PACKAGE_JSON_PATH = 'package.json';
20
+ const TEMPLATE_PACKAGE_NAME = '<%- TEMPLATE_PACKAGE_NAME %>';
21
+
22
+ type ProjectDependencyBumps = Map<string, string>;
23
+ type DependencyBumps = Map<string, ProjectDependencyBumps>;
24
+
25
+ /**
26
+ * A function that checks if one of the updated dependencies was a major version bump that necessitates manual update of the Carson template package.
27
+ */
28
+ async function checkCarsonTemplatesPackage(
29
+ getChangesetName: (suffix?: string) => string,
30
+ dependencyBumps: DependencyBumps,
31
+ ) {
32
+ let constantsFilePath = '<%- `${workspace.projects.find((project) => project.name === TEMPLATE_PACKAGE_NAME)?.relativePath ?? ''}/source/constants.ts` %>';
33
+ let constantsFile = await fs.readFile(constantsFilePath, 'utf8');
34
+ let templatesBump: ProjectDependencyBumps = new Map();
35
+
36
+ for (let [, projectDependencyBumps] of dependencyBumps) {
37
+ if (!projectDependencyBumps.size) {
38
+ continue;
39
+ }
40
+
41
+ for (let [dependencyName, bump] of projectDependencyBumps) {
42
+ let regexp = new RegExp(
43
+ `(?<=('${_.escapeRegExp(dependencyName)}'|${_.escapeRegExp(dependencyName)}):\\s+')\\^\\d+\\.\\d+\\.\\d+(?='.*$)`,
44
+ 'mi',
45
+ );
46
+ let result = regexp.exec(constantsFile);
47
+
48
+ if (result?.[0]) {
49
+ let newMajorVersion = semver.major(semver.minVersion(bump)!);
50
+ let oldMajorVersion = semver.major(semver.minVersion(result[0])!);
51
+
52
+ // Node.js is a special case, because it isn't specified in `dependencies` field
53
+ if (newMajorVersion > oldMajorVersion || dependencyName === 'node') {
54
+ templatesBump.set(dependencyName, `${newMajorVersion}`);
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ if (templatesBump.size) {
61
+ console.log('Creating changeset for project:', TEMPLATE_PACKAGE_NAME);
62
+
63
+ let message = '';
64
+
65
+ for (let [dependencyName, dependencyBump] of templatesBump) {
66
+ message += `Templates were updated to use \`${dependencyName}\` v${dependencyBump}.\n`;
67
+ }
68
+
69
+ message = message.replaceAll('\n', ' ');
70
+
71
+ await fs.writeFile(
72
+ getChangesetName(),
73
+ `---\n'${TEMPLATE_PACKAGE_NAME}': major\n---\n${message.trim()}\n`,
74
+ );
75
+ }
76
+ }
77
+
78
+ /**
79
+ * A function that returns workspace and projects and their updated dependencies. based on `git diff`.
80
+ */
81
+ async function getDependencyBumps(files: string[]): Promise<DependencyBumps> {
82
+ let bumps: DependencyBumps = new Map();
83
+
84
+ for (let file of files) {
85
+ let projectBumps: ProjectDependencyBumps = new Map();
86
+ let {stdout: changes} = await $`git diff HEAD~1 -- ${file}`;
87
+
88
+ for (let change of changes.split('\n')) {
89
+ if (!change.startsWith('+ ')) {
90
+ continue;
91
+ }
92
+
93
+ let match = change.match(/"(.*?)"/g);
94
+
95
+ if (match?.[0] && match[1] && semver.validRange(match[1].replaceAll('"', ''))) {
96
+ projectBumps.set(match[0].replaceAll('"', ''), match[1].replaceAll('"', ''));
97
+ }
98
+ }
99
+
100
+ if (file === WORKSPACE_PACKAGE_JSON_PATH && projectBumps.size) {
101
+ bumps.set(WORKSPACE_PLACEHOLDER_NAME, projectBumps);
102
+ } else if (projectBumps.size) {
103
+ let projectName = (JSON.parse(await fs.readFile(file, 'utf8')) as {name: string}).name;
104
+
105
+ bumps.set(projectName, projectBumps);
106
+ }
107
+ }
108
+
109
+ return bumps;
110
+ }
111
+
112
+ // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- this is autogenerated
113
+ if (<%- workspace.projects.some((project) => project.name === TEMPLATE_PACKAGE_NAME) %>) {
114
+ let {stdout: diff} = await $`git diff --name-only HEAD~1`;
115
+ let files = diff.split('\n').filter((file) => file.endsWith('package.json'));
116
+ let {stdout: shortHash} = await $`git rev-parse --short HEAD`;
117
+ let getChangesetName = (suffix?: string) =>
118
+ suffix === undefined ?
119
+ `.changeset/templates-update-${shortHash.trim()}.md`
120
+ : `.changeset/templates-update-${shortHash.trim()}-${suffix.replaceAll('/', '-')}.md`;
121
+
122
+ let dependencyBumps = await getDependencyBumps(files);
123
+
124
+ console.log('Dependecy bumps:', dependencyBumps);
125
+
126
+ await checkCarsonTemplatesPackage(getChangesetName, dependencyBumps);
127
+
128
+ console.log('Done!');
129
+ } else {
130
+ console.log(`Repository doesn't contain project "${TEMPLATE_PACKAGE_NAME}"!`);
131
+ }
@@ -42,7 +42,7 @@ jobs:
42
42
  run: npm ci
43
43
 
44
44
  - name: Generate changeset
45
- run: npx tsx tools/scripts/create-dependencies-changeset.ts
45
+ run: npx tsx tools/scripts/create-dependencies-changeset.mts
46
46
 
47
47
  - name: Update Carson
48
48
  run: |
@@ -17,6 +17,7 @@ let developmentDependencies = [
17
17
  'prettier',
18
18
  'prettier-plugin-packagejson',
19
19
  'semver',
20
+ 'tsx',
20
21
  'turbo',
21
22
  'typescript',
22
23
  ].filter((dependency) => {
@@ -15,6 +15,7 @@ strategy: overwrite
15
15
 
16
16
  "enabledManagers": ["npm", "nodenv", "nvm", "github-actions"],
17
17
  "rangeStrategy": "bump",
18
+ "minimumReleaseAge": "14 days",
18
19
 
19
20
  "packageRules": [
20
21
  {