@jakubmazanec/carson-templates 0.1.0-dee6883 → 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.
package/dist/main.d.ts CHANGED
@@ -1,11 +1,10 @@
1
1
  import { type Project, type Workspace } from '@jakubmazanec/carson';
2
2
  export { default as lodash } from 'lodash';
3
+ export { default as semver } from 'semver';
3
4
  export declare function getMainBranch(workspace: Workspace | Workspace<false>): string | undefined;
4
5
  export declare function getDevelopmentBranch(workspace: Workspace | Workspace<false>): string | undefined;
5
6
  export declare function getMajorVersion(version: string): number;
6
- export declare function getDependencies(defaultDependencies: Record<string, string>, workspace: Workspace | Workspace<false>): {
7
- [x: string]: string;
8
- };
7
+ export declare function getDependencies(dependencies: string[], workspace: Workspace | Workspace<false>): Record<string, string>;
9
8
  export declare function getReferences(workspace: Workspace | Workspace<false>, project: Project | Project<false>): {
10
9
  path: string;
11
10
  }[];
package/dist/main.js CHANGED
@@ -1,4 +1,6 @@
1
+ import semver from 'semver';
1
2
  export { default as lodash } from 'lodash';
3
+ export { default as semver } from 'semver';
2
4
  const MAIN_BRANCH_NAMES = new Set([
3
5
  'main',
4
6
  'master'
@@ -8,6 +10,30 @@ const DEVELOPMENT_BRANCH_NAMES = new Set([
8
10
  'develop',
9
11
  'dev'
10
12
  ]);
13
+ const DEPENDENCY_VERSIONS = {
14
+ '@changesets/cli': '^2.0.0',
15
+ '@jakubmazanec/carson': '^0.0.0',
16
+ '@jakubmazanec/carson-templates': '^0.0.0',
17
+ '@jest/globals': '^29.0.0',
18
+ '@swc/cli': '^0.1.0',
19
+ '@swc/core': '^1.0.0',
20
+ '@testing-library/jest-dom': '^5.0.0',
21
+ '@types/node': '^16.0.0',
22
+ chokidar: '^3.0.0',
23
+ 'cross-env': '^7.0.0',
24
+ 'del-cli': '^5.0.0',
25
+ eslint: '^8.0.0',
26
+ jest: '^29.0.0',
27
+ 'patch-package': '^6.0.0',
28
+ prettier: '^2.0.0',
29
+ 'prettier-plugin-packagejson': '^2.0.0',
30
+ 'ts-jest': '^29.0.0',
31
+ 'ts-node': '^10.0.0',
32
+ turbo: '^1.0.0',
33
+ typedoc: '^0.24.0',
34
+ 'typedoc-plugin-markdown': '^3.0.0',
35
+ typescript: '^5.0.0'
36
+ };
11
37
  export function getMainBranch(workspace) {
12
38
  var _workspace_repository;
13
39
  for (let branch of ((_workspace_repository = workspace.repository) === null || _workspace_repository === void 0 ? void 0 : _workspace_repository.branches) ?? []){
@@ -29,29 +55,43 @@ export function getDevelopmentBranch(workspace) {
29
55
  export function getMajorVersion(version) {
30
56
  return Number(version.split('.')[0].replace(/\D/, ''));
31
57
  }
32
- export function getDependencies(defaultDependencies, workspace) {
33
- let dependencies = {
34
- ...defaultDependencies
35
- };
36
- let projectNames = workspace.projects.map((project)=>project.name);
37
- for (let [dependencyName, dependencyVersion] of Object.entries(dependencies)){
38
- let installedDependency = workspace.allDependencies.find((dependency)=>dependencyName === dependency.name);
58
+ export function getDependencies(dependencies, workspace) {
59
+ const result = {};
60
+ for (const dependency of dependencies){
61
+ const version = DEPENDENCY_VERSIONS[dependency];
62
+ if (version) {
63
+ result[dependency] = version;
64
+ }
65
+ }
66
+ const projectNames = workspace.projects.map((project)=>project.name);
67
+ for (const [dependencyName, dependencyVersion] of Object.entries(result)){
68
+ const installedDependency = workspace.allDependencies.find((dependency)=>dependencyName === dependency.name);
39
69
  // if the dependency is already installed in the workspace, we might want to use that existing version
40
70
  if (installedDependency) {
41
- let version = [
71
+ const version = [
42
72
  ...installedDependency.exactVersions
43
73
  ].sort().reverse()[0];
44
74
  // if the dependency is actually a project in the workspace, we use existing version
45
75
  if (projectNames.includes(dependencyName)) {
46
- dependencies[dependencyName] = `^${version}`;
76
+ var _semver_prerelease;
77
+ if ((_semver_prerelease = semver.prerelease(version)) === null || _semver_prerelease === void 0 ? void 0 : _semver_prerelease.length) {
78
+ result[dependencyName] = version;
79
+ } else {
80
+ result[dependencyName] = `^${version}`;
81
+ }
47
82
  }
48
83
  // we use existing version only if major versions match; we don't want the user of this template to be able to overwrite any major version number and use potentially incompatible version
49
84
  if (getMajorVersion(version) === getMajorVersion(dependencyVersion)) {
50
- dependencies[dependencyName] = `^${version}`;
85
+ var _semver_prerelease1;
86
+ if ((_semver_prerelease1 = semver.prerelease(version)) === null || _semver_prerelease1 === void 0 ? void 0 : _semver_prerelease1.length) {
87
+ result[dependencyName] = version;
88
+ } else {
89
+ result[dependencyName] = `^${version}`;
90
+ }
51
91
  }
52
92
  }
53
93
  }
54
- return dependencies;
94
+ return result;
55
95
  }
56
96
  export function getReferences(workspace, project) {
57
97
  let references = [];
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.ts"],"sourcesContent":["import {type Project, type Workspace} from '@jakubmazanec/carson';\n\nexport {default as lodash} from 'lodash';\n\nconst MAIN_BRANCH_NAMES = new Set(['main', 'master']);\nconst DEVELOPMENT_BRANCH_NAMES = new Set(['development', 'develop', 'dev']);\n\nexport function getMainBranch(workspace: Workspace | Workspace<false>) {\n for (let branch of workspace.repository?.branches ?? []) {\n if (MAIN_BRANCH_NAMES.has(branch)) {\n return branch;\n }\n }\n\n return undefined;\n}\n\nexport function getDevelopmentBranch(workspace: Workspace | Workspace<false>) {\n for (let branch of workspace.repository?.branches ?? []) {\n if (DEVELOPMENT_BRANCH_NAMES.has(branch)) {\n return branch;\n }\n }\n\n return undefined;\n}\n\nexport function getMajorVersion(version: string) {\n return Number(version.split('.')[0]!.replace(/\\D/, ''));\n}\n\nexport function getDependencies(\n defaultDependencies: Record<string, string>,\n workspace: Workspace | Workspace<false>,\n) {\n let dependencies = {...defaultDependencies};\n\n let projectNames = workspace.projects.map((project) => project.name);\n\n for (let [dependencyName, dependencyVersion] of Object.entries(dependencies)) {\n let installedDependency = workspace.allDependencies.find(\n (dependency) => dependencyName === dependency.name,\n );\n\n // if the dependency is already installed in the workspace, we might want to use that existing version\n if (installedDependency) {\n let version = [...installedDependency.exactVersions].sort().reverse()[0] as string;\n\n // if the dependency is actually a project in the workspace, we use existing version\n if (projectNames.includes(dependencyName)) {\n dependencies[dependencyName] = `^${version}`;\n }\n\n // we use existing version only if major versions match; we don't want the user of this template to be able to overwrite any major version number and use potentially incompatible version\n if (getMajorVersion(version) === getMajorVersion(dependencyVersion)) {\n dependencies[dependencyName] = `^${version}`;\n }\n }\n }\n\n return dependencies;\n}\n\nexport function getReferences(\n workspace: Workspace | Workspace<false>,\n project: Project | Project<false>,\n) {\n let references = [];\n let currentProject = project;\n\n for (let dependency of workspace.allDependencies) {\n for (let project of workspace.projects) {\n if (dependency.name === project.name) {\n for (let dependencyProject of dependency.projects) {\n if (dependencyProject.name === currentProject.name) {\n references.push({\n path: `${currentProject.relativePath\n .split('/')\n .map(() => '..')\n .join('/')}/${project.relativePath}`,\n });\n }\n }\n }\n }\n }\n\n references.sort((a, b) => a.path.localeCompare(b.path));\n\n return references;\n}\n"],"names":["default","lodash","MAIN_BRANCH_NAMES","Set","DEVELOPMENT_BRANCH_NAMES","getMainBranch","workspace","branch","repository","branches","has","undefined","getDevelopmentBranch","getMajorVersion","version","Number","split","replace","getDependencies","defaultDependencies","dependencies","projectNames","projects","map","project","name","dependencyName","dependencyVersion","Object","entries","installedDependency","allDependencies","find","dependency","exactVersions","sort","reverse","includes","getReferences","references","currentProject","dependencyProject","push","path","relativePath","join","a","b","localeCompare"],"mappings":"AAEA,SAAQA,WAAWC,MAAM,QAAO,SAAS;AAEzC,MAAMC,oBAAoB,IAAIC,IAAI;IAAC;IAAQ;CAAS;AACpD,MAAMC,2BAA2B,IAAID,IAAI;IAAC;IAAe;IAAW;CAAM;AAE1E,OAAO,SAASE,cAAcC,SAAuC;QAChDA;IAAnB,KAAK,IAAIC,UAAUD,EAAAA,wBAAAA,UAAUE,UAAU,cAApBF,4CAAAA,sBAAsBG,QAAQ,KAAI,EAAE,CAAE;QACvD,IAAIP,kBAAkBQ,GAAG,CAACH,SAAS;YACjC,OAAOA;QACT;IACF;IAEA,OAAOI;AACT;AAEA,OAAO,SAASC,qBAAqBN,SAAuC;QACvDA;IAAnB,KAAK,IAAIC,UAAUD,EAAAA,wBAAAA,UAAUE,UAAU,cAApBF,4CAAAA,sBAAsBG,QAAQ,KAAI,EAAE,CAAE;QACvD,IAAIL,yBAAyBM,GAAG,CAACH,SAAS;YACxC,OAAOA;QACT;IACF;IAEA,OAAOI;AACT;AAEA,OAAO,SAASE,gBAAgBC,OAAe;IAC7C,OAAOC,OAAOD,QAAQE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAEC,OAAO,CAAC,MAAM;AACrD;AAEA,OAAO,SAASC,gBACdC,mBAA2C,EAC3Cb,SAAuC;IAEvC,IAAIc,eAAe;QAAC,GAAGD,mBAAmB;IAAA;IAE1C,IAAIE,eAAef,UAAUgB,QAAQ,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQC,IAAI;IAEnE,KAAK,IAAI,CAACC,gBAAgBC,kBAAkB,IAAIC,OAAOC,OAAO,CAACT,cAAe;QAC5E,IAAIU,sBAAsBxB,UAAUyB,eAAe,CAACC,IAAI,CACtD,CAACC,aAAeP,mBAAmBO,WAAWR,IAAI;QAGpD,sGAAsG;QACtG,IAAIK,qBAAqB;YACvB,IAAIhB,UAAU;mBAAIgB,oBAAoBI,aAAa;aAAC,CAACC,IAAI,GAAGC,OAAO,EAAE,CAAC,EAAE;YAExE,oFAAoF;YACpF,IAAIf,aAAagB,QAAQ,CAACX,iBAAiB;gBACzCN,YAAY,CAACM,eAAe,GAAG,CAAC,CAAC,EAAEZ,QAAQ,CAAC;YAC9C;YAEA,0LAA0L;YAC1L,IAAID,gBAAgBC,aAAaD,gBAAgBc,oBAAoB;gBACnEP,YAAY,CAACM,eAAe,GAAG,CAAC,CAAC,EAAEZ,QAAQ,CAAC;YAC9C;QACF;IACF;IAEA,OAAOM;AACT;AAEA,OAAO,SAASkB,cACdhC,SAAuC,EACvCkB,OAAiC;IAEjC,IAAIe,aAAa,EAAE;IACnB,IAAIC,iBAAiBhB;IAErB,KAAK,IAAIS,cAAc3B,UAAUyB,eAAe,CAAE;QAChD,KAAK,IAAIP,WAAWlB,UAAUgB,QAAQ,CAAE;YACtC,IAAIW,WAAWR,IAAI,KAAKD,QAAQC,IAAI,EAAE;gBACpC,KAAK,IAAIgB,qBAAqBR,WAAWX,QAAQ,CAAE;oBACjD,IAAImB,kBAAkBhB,IAAI,KAAKe,eAAef,IAAI,EAAE;wBAClDc,WAAWG,IAAI,CAAC;4BACdC,MAAM,CAAC,EAAEH,eAAeI,YAAY,CACjC5B,KAAK,CAAC,KACNO,GAAG,CAAC,IAAM,MACVsB,IAAI,CAAC,KAAK,CAAC,EAAErB,QAAQoB,YAAY,CAAC,CAAC;wBACxC;oBACF;gBACF;YACF;QACF;IACF;IAEAL,WAAWJ,IAAI,CAAC,CAACW,GAAGC,IAAMD,EAAEH,IAAI,CAACK,aAAa,CAACD,EAAEJ,IAAI;IAErD,OAAOJ;AACT"}
1
+ {"version":3,"sources":["../src/main.ts"],"sourcesContent":["import {type Project, type Workspace} from '@jakubmazanec/carson';\nimport semver from 'semver';\n\nexport {default as lodash} from 'lodash';\nexport {default as semver} from 'semver';\n\nconst MAIN_BRANCH_NAMES = new Set(['main', 'master']);\nconst DEVELOPMENT_BRANCH_NAMES = new Set(['development', 'develop', 'dev']);\n\nconst DEPENDENCY_VERSIONS: Record<string, string> = {\n '@changesets/cli': '^2.0.0',\n '@jakubmazanec/carson': '^0.0.0',\n '@jakubmazanec/carson-templates': '^0.0.0',\n '@jest/globals': '^29.0.0',\n '@swc/cli': '^0.1.0',\n '@swc/core': '^1.0.0',\n '@testing-library/jest-dom': '^5.0.0',\n '@types/node': '^16.0.0',\n chokidar: '^3.0.0',\n 'cross-env': '^7.0.0',\n 'del-cli': '^5.0.0',\n eslint: '^8.0.0',\n jest: '^29.0.0',\n 'patch-package': '^6.0.0',\n prettier: '^2.0.0',\n 'prettier-plugin-packagejson': '^2.0.0',\n 'ts-jest': '^29.0.0',\n 'ts-node': '^10.0.0',\n turbo: '^1.0.0',\n typedoc: '^0.24.0',\n 'typedoc-plugin-markdown': '^3.0.0',\n typescript: '^5.0.0',\n};\n\nexport function getMainBranch(workspace: Workspace | Workspace<false>) {\n for (let branch of workspace.repository?.branches ?? []) {\n if (MAIN_BRANCH_NAMES.has(branch)) {\n return branch;\n }\n }\n\n return undefined;\n}\n\nexport function getDevelopmentBranch(workspace: Workspace | Workspace<false>) {\n for (let branch of workspace.repository?.branches ?? []) {\n if (DEVELOPMENT_BRANCH_NAMES.has(branch)) {\n return branch;\n }\n }\n\n return undefined;\n}\n\nexport function getMajorVersion(version: string) {\n return Number(version.split('.')[0]!.replace(/\\D/, ''));\n}\n\nexport function getDependencies(dependencies: string[], workspace: Workspace | Workspace<false>) {\n const result: Record<string, string> = {};\n\n for (const dependency of dependencies) {\n const version = DEPENDENCY_VERSIONS[dependency];\n\n if (version) {\n result[dependency] = version;\n }\n }\n\n const projectNames = workspace.projects.map((project) => project.name);\n\n for (const [dependencyName, dependencyVersion] of Object.entries(result)) {\n const installedDependency = workspace.allDependencies.find(\n (dependency) => dependencyName === dependency.name,\n );\n\n // if the dependency is already installed in the workspace, we might want to use that existing version\n if (installedDependency) {\n const version = [...installedDependency.exactVersions].sort().reverse()[0] as string;\n\n // if the dependency is actually a project in the workspace, we use existing version\n if (projectNames.includes(dependencyName)) {\n if (semver.prerelease(version)?.length) {\n result[dependencyName] = version;\n } else {\n result[dependencyName] = `^${version}`;\n }\n }\n\n // we use existing version only if major versions match; we don't want the user of this template to be able to overwrite any major version number and use potentially incompatible version\n if (getMajorVersion(version) === getMajorVersion(dependencyVersion)) {\n if (semver.prerelease(version)?.length) {\n result[dependencyName] = version;\n } else {\n result[dependencyName] = `^${version}`;\n }\n }\n }\n }\n\n return result;\n}\n\nexport function getReferences(\n workspace: Workspace | Workspace<false>,\n project: Project | Project<false>,\n) {\n let references = [];\n let currentProject = project;\n\n for (let dependency of workspace.allDependencies) {\n for (let project of workspace.projects) {\n if (dependency.name === project.name) {\n for (let dependencyProject of dependency.projects) {\n if (dependencyProject.name === currentProject.name) {\n references.push({\n path: `${currentProject.relativePath\n .split('/')\n .map(() => '..')\n .join('/')}/${project.relativePath}`,\n });\n }\n }\n }\n }\n }\n\n references.sort((a, b) => a.path.localeCompare(b.path));\n\n return references;\n}\n"],"names":["semver","default","lodash","MAIN_BRANCH_NAMES","Set","DEVELOPMENT_BRANCH_NAMES","DEPENDENCY_VERSIONS","chokidar","eslint","jest","prettier","turbo","typedoc","typescript","getMainBranch","workspace","branch","repository","branches","has","undefined","getDevelopmentBranch","getMajorVersion","version","Number","split","replace","getDependencies","dependencies","result","dependency","projectNames","projects","map","project","name","dependencyName","dependencyVersion","Object","entries","installedDependency","allDependencies","find","exactVersions","sort","reverse","includes","prerelease","length","getReferences","references","currentProject","dependencyProject","push","path","relativePath","join","a","b","localeCompare"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/carson-templates",
3
- "version": "0.1.0-dee6883",
3
+ "version": "0.1.0",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,8 +30,9 @@
30
30
  "typecheck": "tsc --project tsconfig.typecheck.json"
31
31
  },
32
32
  "dependencies": {
33
- "@jakubmazanec/carson": "0.1.0-dee6883",
34
- "lodash": "^4.17.21"
33
+ "@jakubmazanec/carson": "^0.1.0",
34
+ "lodash": "^4.17.21",
35
+ "semver": "^7.3.6"
35
36
  },
36
37
  "devDependencies": {
37
38
  "@jest/globals": "^29.5.0",
package/src/main.ts CHANGED
@@ -1,10 +1,37 @@
1
1
  import {type Project, type Workspace} from '@jakubmazanec/carson';
2
+ import semver from 'semver';
2
3
 
3
4
  export {default as lodash} from 'lodash';
5
+ export {default as semver} from 'semver';
4
6
 
5
7
  const MAIN_BRANCH_NAMES = new Set(['main', 'master']);
6
8
  const DEVELOPMENT_BRANCH_NAMES = new Set(['development', 'develop', 'dev']);
7
9
 
10
+ const DEPENDENCY_VERSIONS: Record<string, string> = {
11
+ '@changesets/cli': '^2.0.0',
12
+ '@jakubmazanec/carson': '^0.0.0',
13
+ '@jakubmazanec/carson-templates': '^0.0.0',
14
+ '@jest/globals': '^29.0.0',
15
+ '@swc/cli': '^0.1.0',
16
+ '@swc/core': '^1.0.0',
17
+ '@testing-library/jest-dom': '^5.0.0',
18
+ '@types/node': '^16.0.0',
19
+ chokidar: '^3.0.0',
20
+ 'cross-env': '^7.0.0',
21
+ 'del-cli': '^5.0.0',
22
+ eslint: '^8.0.0',
23
+ jest: '^29.0.0',
24
+ 'patch-package': '^6.0.0',
25
+ prettier: '^2.0.0',
26
+ 'prettier-plugin-packagejson': '^2.0.0',
27
+ 'ts-jest': '^29.0.0',
28
+ 'ts-node': '^10.0.0',
29
+ turbo: '^1.0.0',
30
+ typedoc: '^0.24.0',
31
+ 'typedoc-plugin-markdown': '^3.0.0',
32
+ typescript: '^5.0.0',
33
+ };
34
+
8
35
  export function getMainBranch(workspace: Workspace | Workspace<false>) {
9
36
  for (let branch of workspace.repository?.branches ?? []) {
10
37
  if (MAIN_BRANCH_NAMES.has(branch)) {
@@ -29,36 +56,49 @@ export function getMajorVersion(version: string) {
29
56
  return Number(version.split('.')[0]!.replace(/\D/, ''));
30
57
  }
31
58
 
32
- export function getDependencies(
33
- defaultDependencies: Record<string, string>,
34
- workspace: Workspace | Workspace<false>,
35
- ) {
36
- let dependencies = {...defaultDependencies};
59
+ export function getDependencies(dependencies: string[], workspace: Workspace | Workspace<false>) {
60
+ const result: Record<string, string> = {};
37
61
 
38
- let projectNames = workspace.projects.map((project) => project.name);
62
+ for (const dependency of dependencies) {
63
+ const version = DEPENDENCY_VERSIONS[dependency];
39
64
 
40
- for (let [dependencyName, dependencyVersion] of Object.entries(dependencies)) {
41
- let installedDependency = workspace.allDependencies.find(
65
+ if (version) {
66
+ result[dependency] = version;
67
+ }
68
+ }
69
+
70
+ const projectNames = workspace.projects.map((project) => project.name);
71
+
72
+ for (const [dependencyName, dependencyVersion] of Object.entries(result)) {
73
+ const installedDependency = workspace.allDependencies.find(
42
74
  (dependency) => dependencyName === dependency.name,
43
75
  );
44
76
 
45
77
  // if the dependency is already installed in the workspace, we might want to use that existing version
46
78
  if (installedDependency) {
47
- let version = [...installedDependency.exactVersions].sort().reverse()[0] as string;
79
+ const version = [...installedDependency.exactVersions].sort().reverse()[0] as string;
48
80
 
49
81
  // if the dependency is actually a project in the workspace, we use existing version
50
82
  if (projectNames.includes(dependencyName)) {
51
- dependencies[dependencyName] = `^${version}`;
83
+ if (semver.prerelease(version)?.length) {
84
+ result[dependencyName] = version;
85
+ } else {
86
+ result[dependencyName] = `^${version}`;
87
+ }
52
88
  }
53
89
 
54
90
  // we use existing version only if major versions match; we don't want the user of this template to be able to overwrite any major version number and use potentially incompatible version
55
91
  if (getMajorVersion(version) === getMajorVersion(dependencyVersion)) {
56
- dependencies[dependencyName] = `^${version}`;
92
+ if (semver.prerelease(version)?.length) {
93
+ result[dependencyName] = version;
94
+ } else {
95
+ result[dependencyName] = `^${version}`;
96
+ }
57
97
  }
58
98
  }
59
99
  }
60
100
 
61
- return dependencies;
101
+ return result;
62
102
  }
63
103
 
64
104
  export function getReferences(
@@ -2,35 +2,34 @@
2
2
  to: 'package.json'
3
3
  strategy: merge
4
4
  ---
5
- {
6
- "repository": {
7
- "type": "git",
8
- "directory": "<%- project.relativePath %>"
5
+ <%
6
+ let packageJson = {
7
+ repository: {
8
+ type: 'git',
9
+ directory: '<%- project.relativePath %>',
9
10
  },
10
- "type": "module",
11
- "exports": {
12
- ".": "./dist/main.js",
13
- "./package.json": "./package.json"
11
+ type: 'module',
12
+ exports: {
13
+ '.': './dist/main.js',
14
+ './package.json': './package.json',
14
15
  },
15
- "files": [
16
- "dist",
17
- "src",
18
- "templates"
19
- ],
20
- "scripts": {
21
- "build": "swc src -d dist && tsc",
22
- "clean": "del-cli dist *.tsbuildinfo",
23
- "document": "typedoc --options typedoc.config.cjs",
24
- "format": "prettier . --write --ignore-unknown --ignore-path ../../.prettierignore",
25
- "lint": "eslint .",
26
- "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests",
27
- "typecheck": "tsc --project tsconfig.typecheck.json"
16
+ files: ['dist', 'src', 'templates'],
17
+ scripts: {
18
+ build: 'swc src -d dist && tsc',
19
+ clean: 'del-cli coverage dist *.tsbuildinfo',
20
+ document: 'typedoc --options typedoc.config.cjs',
21
+ format: 'prettier . --write --ignore-unknown --ignore-path ../../.prettierignore',
22
+ lint: 'eslint .',
23
+ test: 'cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests',
24
+ typecheck: 'tsc --project tsconfig.typecheck.json',
28
25
  },
29
- "devDependencies": {
30
- "@jest/globals": "^29.5.0"
26
+ devDependencies: {
27
+ '@jest/globals': '^29.5.0',
31
28
  },
32
- "packageManager": "npm@8.19.4",
33
- "engines": {
34
- "node": ">=16.20.0"
35
- }
36
- }
29
+ packageManager: 'npm@8.19.4',
30
+ engines: {
31
+ node: '>=16.20.0',
32
+ },
33
+ };
34
+ -%>
35
+ <%- JSON.stringify(packageJson) %>
@@ -2,27 +2,27 @@
2
2
  to: 'package.json'
3
3
  strategy: merge
4
4
  ---
5
- {
6
- "repository": {
7
- "type": "git",
8
- "directory": "<%- project.relativePath %>"
5
+ <%
6
+ let packageJson = {
7
+ repository: {
8
+ type: 'git',
9
+ directory: '<%- project.relativePath %>',
9
10
  },
10
- "type": "commonjs",
11
- "exports": "./dist/main.js",
12
- "files": [
13
- "dist",
14
- "src"
15
- ],
16
- "scripts": {
17
- "build": "swc src -d dist && tsc",
18
- "clean": "del-cli dist *.tsbuildinfo",
19
- "format": "prettier . --write --ignore-unknown --ignore-path ../../.prettierignore",
20
- "lint": "eslint .",
21
- "test": "jest --passWithNoTests",
22
- "typecheck": "tsc --project tsconfig.typecheck.json"
11
+ type: 'commonjs',
12
+ exports: './dist/main.js',
13
+ files: ['dist', 'src'],
14
+ scripts: {
15
+ build: 'swc src -d dist && tsc',
16
+ clean: 'del-cli coverage dist *.tsbuildinfo',
17
+ format: 'prettier . --write --ignore-unknown --ignore-path ../../.prettierignore',
18
+ lint: 'eslint .',
19
+ test: 'jest --passWithNoTests',
20
+ typecheck: 'tsc --project tsconfig.typecheck.json',
23
21
  },
24
- "packageManager": "npm@8.19.4",
25
- "engines": {
26
- "node": ">=16.20.0"
27
- }
28
- }
22
+ packageManager: 'npm@8.19.4',
23
+ engines: {
24
+ node: '>=16.20.0',
25
+ },
26
+ };
27
+ -%>
28
+ <%- JSON.stringify(packageJson) %>
@@ -2,32 +2,32 @@
2
2
  to: 'package.json'
3
3
  strategy: merge
4
4
  ---
5
- {
6
- "repository": {
7
- "type": "git",
8
- "directory": "<%- project.relativePath %>"
5
+ <%
6
+ let packageJson = {
7
+ repository: {
8
+ type: 'git',
9
+ directory: '<%- project.relativePath %>',
9
10
  },
10
- "type": "commonjs",
11
- "exports": {
12
- ".": "./dist/main.js",
13
- "./nextjs": "./dist/presets/nextjs.js",
14
- "./nodejs": "./dist/presets/nodejs.js",
15
- "./prettier": "./dist/presets/prettier.js"
11
+ type: 'commonjs',
12
+ exports: {
13
+ '.': './dist/main.js',
14
+ './nextjs': './dist/presets/nextjs.js',
15
+ './nodejs': './dist/presets/nodejs.js',
16
+ './prettier': './dist/presets/prettier.js',
16
17
  },
17
- "files": [
18
- "dist",
19
- "src"
20
- ],
21
- "scripts": {
22
- "build": "swc src -d dist && tsc",
23
- "clean": "del-cli dist *.tsbuildinfo",
24
- "format": "prettier . --write --ignore-unknown --ignore-path ../../.prettierignore",
25
- "lint": "eslint .",
26
- "test": "jest --passWithNoTests",
27
- "typecheck": "tsc --project tsconfig.typecheck.json"
18
+ files: ['dist', 'src'],
19
+ scripts: {
20
+ build: 'swc src -d dist && tsc',
21
+ clean: 'del-cli coverage dist *.tsbuildinfo',
22
+ format: 'prettier . --write --ignore-unknown --ignore-path ../../.prettierignore',
23
+ lint: 'eslint .',
24
+ test: 'jest --passWithNoTests',
25
+ typecheck: 'tsc --project tsconfig.typecheck.json',
28
26
  },
29
- "packageManager": "npm@8.19.4",
30
- "engines": {
31
- "node": ">=16.20.0"
32
- }
33
- }
27
+ packageManager: 'npm@8.19.4',
28
+ engines: {
29
+ node: '>=16.20.0',
30
+ },
31
+ };
32
+ -%>
33
+ <%- JSON.stringify(packageJson) %>
@@ -3,9 +3,9 @@ to: 'package.json'
3
3
  strategy: merge
4
4
  ---
5
5
  <%
6
- let developmentDependencies = getDependencies({
7
- '@jest/globals': '^29.0.0',
8
- }, workspace);
6
+ let developmentDependencies = getDependencies([
7
+ '@jest/globals',
8
+ ], workspace);
9
9
  let packageJson = lodash.merge(
10
10
  {
11
11
  repository: {
@@ -17,7 +17,7 @@ let packageJson = lodash.merge(
17
17
  files: ['dist', 'src'],
18
18
  scripts: {
19
19
  build: 'swc src -d dist && tsc',
20
- clean: 'del-cli dist *.tsbuildinfo',
20
+ clean: 'del-cli coverage dist *.tsbuildinfo',
21
21
  document: 'typedoc --options typedoc.config.cjs',
22
22
  format:
23
23
  'prettier . --write --ignore-unknown --ignore-path ../../.prettierignore',
@@ -9,9 +9,6 @@ module.exports = {
9
9
  '@jakubmazanec/eslint-config/nodejs',
10
10
  '@jakubmazanec/eslint-config/prettier',
11
11
  ],
12
- rules: {
13
- 'no-await-in-loop': 'off',
14
- },
15
12
  ignorePatterns: [
16
13
  '.next/',
17
14
  'bin/',
@@ -142,7 +142,7 @@ jobs:
142
142
  with:
143
143
  access_token: ${{ secrets.GITHUB_TOKEN }}
144
144
 
145
- - uses: actions/checkout@v2
145
+ - uses: actions/checkout@v3
146
146
  with:
147
147
  token: ${{ secrets.PAT }}
148
148
  fetch-depth: 0
@@ -152,7 +152,7 @@ jobs:
152
152
  git config user.email "bot@mazanec.dev"
153
153
  git config user.name "Bot"
154
154
 
155
- - uses: actions/setup-node@v2
155
+ - uses: actions/setup-node@v3
156
156
  with:
157
157
  node-version: 16
158
158
  registry-url: 'https://registry.npmjs.org'
@@ -235,7 +235,7 @@ jobs:
235
235
  with:
236
236
  access_token: ${{ secrets.GITHUB_TOKEN }}
237
237
 
238
- - uses: actions/checkout@v2
238
+ - uses: actions/checkout@v3
239
239
  with:
240
240
  token: ${{ secrets.GITHUB_TOKEN }}
241
241
  fetch-depth: 0
@@ -245,7 +245,7 @@ jobs:
245
245
  git config user.email "bot@mazanec.dev"
246
246
  git config user.name "Bot"
247
247
 
248
- - uses: actions/setup-node@v2
248
+ - uses: actions/setup-node@v3
249
249
  with:
250
250
  node-version: 16
251
251
  registry-url: 'https://registry.npmjs.org'
@@ -3,48 +3,67 @@ to: 'package.json'
3
3
  strategy: merge
4
4
  ---
5
5
  <%
6
- let developmentDependencies = getDependencies({
7
- '@changesets/cli': '^2.0.0',
8
- '@jakubmazanec/carson': '^0.0.0',
9
- '@jakubmazanec/carson-templates': '^0.0.0',
10
- '@swc/cli': '^0.1.0',
11
- '@swc/core': '^1.0.0',
12
- '@testing-library/jest-dom': '^5.0.0',
13
- '@types/node': '^16.0.0',
14
- chokidar: '^3.0.0',
15
- 'cross-env': '^7.0.0',
16
- 'del-cli': '^5.0.0',
17
- eslint: '^8.0.0',
18
- jest: '^29.0.0',
19
- 'patch-package': '^6.0.0',
20
- prettier: '^2.0.0',
21
- 'prettier-plugin-packagejson': '^2.0.0',
22
- 'ts-jest': '^29.0.0',
23
- 'ts-node': '^10.0.0',
24
- turbo: '^1.0.0',
25
- typedoc: '^0.24.0',
26
- 'typedoc-plugin-markdown': '^3.0.0',
27
- typescript: '^5.0.0',
28
- }, workspace);
29
- -%>
30
- {
31
- "private": true,
32
- "scripts": {
33
- "build": "turbo run build --no-daemon",
34
- "changeset": "changeset",
35
- "clean": "turbo run clean --no-daemon",
36
- "document": "turbo run document --no-daemon",
37
- "format": "turbo run format --no-daemon && prettier ./*.* --write --ignore-unknown",
38
- "lint": "turbo run lint --no-daemon",
39
- "prepare": "patch-package && carson update workspace",
40
- "reinstall": "npm run uninstall && npm install",
41
- "test": "turbo run test --no-daemon",
42
- "typecheck": "turbo run typecheck --no-daemon",
43
- "uninstall": "del-cli ./**/node_modules ./package-lock.json"
6
+ let developmentDependencies = getDependencies(
7
+ [
8
+ '@changesets/cli',
9
+ '@jakubmazanec/carson',
10
+ '@jakubmazanec/carson-templates',
11
+ '@swc/cli',
12
+ '@swc/core',
13
+ '@testing-library/jest-dom',
14
+ '@types/node',
15
+ 'chokidar',
16
+ 'cross-env',
17
+ 'del-cli',
18
+ 'eslint',
19
+ 'jest',
20
+ 'patch-package',
21
+ 'prettier',
22
+ 'prettier-plugin-packagejson',
23
+ 'ts-jest',
24
+ 'ts-node',
25
+ 'turbo',
26
+ 'typedoc',
27
+ 'typedoc-plugin-markdown',
28
+ 'typescript',
29
+ ],
30
+ workspace,
31
+ );
32
+ let packageJson = lodash.merge(
33
+ {
34
+ private: true,
35
+ scripts: {
36
+ build: 'turbo run build --no-daemon',
37
+ changeset: 'changeset',
38
+ clean: 'turbo run clean --no-daemon',
39
+ document: 'turbo run document --no-daemon',
40
+ format: 'turbo run format --no-daemon && prettier ./*.* --write --ignore-unknown',
41
+ lint: 'turbo run lint --no-daemon',
42
+ prepare: 'patch-package',
43
+ reinstall: 'npm run uninstall && npm install',
44
+ test: 'turbo run test --no-daemon',
45
+ typecheck: 'turbo run typecheck --no-daemon',
46
+ uninstall: 'del-cli ./**/node_modules ./package-lock.json',
47
+ },
48
+ devDependencies: developmentDependencies,
49
+ packageManager: 'npm@8.19.4',
50
+ engines: {
51
+ node: '>=16.20.0',
52
+ },
44
53
  },
45
- "devDependencies": <%- JSON.stringify(developmentDependencies, null, 2) %>,
46
- "packageManager": "npm@8.19.4",
47
- "engines": {
48
- "node": ">=16.20.0"
49
- }
54
+ workspace.config.overrides?.packageJson ?? {},
55
+ );
56
+
57
+ if (workspace.projects.find((project) => project.name === '@jakubmazanec/carson')) {
58
+ packageJson.scripts.prepare +=
59
+ ' && turbo run build --no-daemon --filter=@jakubmazanec/carson --filter=@jakubmazanec/carson-templates';
50
60
  }
61
+
62
+ packageJson.scripts.prepare += ' && carson update workspace';
63
+ -%>
64
+ <%- JSON.stringify(packageJson) %>
65
+
66
+
67
+
68
+
69
+
@@ -7,7 +7,7 @@ let turboConfig = {
7
7
  $schema: 'https://turborepo.org/schema.json',
8
8
  pipeline: {
9
9
  build: {
10
- dependsOn: ['^build', 'clean', 'codegen'],
10
+ dependsOn: ['^build', 'codegen'],
11
11
  outputs: ['build/**', 'dist/**'],
12
12
  },
13
13
  clean: {
@@ -16,6 +16,11 @@ let turboConfig = {
16
16
  codegen: {
17
17
  cache: false,
18
18
  },
19
+ develop: {
20
+ dependsOn: ['codegen'],
21
+ cache: false,
22
+ persistent: true,
23
+ },
19
24
  document: {
20
25
  dependsOn: ['^build', 'codegen'],
21
26
  outputs: ['docs/**'],
@@ -28,7 +33,7 @@ let turboConfig = {
28
33
  outputs: [],
29
34
  },
30
35
  test: {
31
- dependsOn: ['^build', 'clean', 'typecheck', 'lint'],
36
+ dependsOn: ['^build', 'typecheck', 'lint'],
32
37
  outputs: ['coverage/**'],
33
38
  },
34
39
  typecheck: {