@langri-sha/projen-project 0.7.0 → 0.8.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/CHANGELOG.json CHANGED
@@ -2,7 +2,90 @@
2
2
  "name": "@langri-sha/projen-project",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 15 May 2024 06:46:11 GMT",
5
+ "date": "Tue, 21 May 2024 05:21:31 GMT",
6
+ "version": "0.8.0",
7
+ "tag": "@langri-sha/projen-project_v0.8.0",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "email not defined",
12
+ "package": "@langri-sha/projen-project",
13
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
14
+ "comment": "chore(deps): chore(deps): update dependency projen to v0.81.13"
15
+ },
16
+ {
17
+ "author": "email not defined",
18
+ "package": "@langri-sha/projen-project",
19
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
20
+ "comment": "chore(deps): chore(deps): update dependency projen to v0.81.15"
21
+ },
22
+ {
23
+ "author": "filip.dupanovic@gmail.com",
24
+ "package": "@langri-sha/projen-project",
25
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
26
+ "comment": "fix(project): Transpile sources only for default task"
27
+ },
28
+ {
29
+ "author": "filip.dupanovic@gmail.com",
30
+ "package": "@langri-sha/projen-project",
31
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
32
+ "comment": "fix(project): Correct Renovate dependency matching"
33
+ },
34
+ {
35
+ "author": "filip.dupanovic@gmail.com",
36
+ "package": "@langri-sha/projen-project",
37
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
38
+ "comment": "fix(projen-project): Lint only package modules"
39
+ },
40
+ {
41
+ "author": "filip.dupanovic@gmail.com",
42
+ "package": "@langri-sha/projen-project",
43
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
44
+ "comment": "fix(project): Add looser dependency matching"
45
+ }
46
+ ],
47
+ "minor": [
48
+ {
49
+ "author": "filip.dupanovic@gmail.com",
50
+ "package": "@langri-sha/projen-project",
51
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
52
+ "comment": "feat(projen): Add component for Beacbhall support"
53
+ },
54
+ {
55
+ "author": "filip.dupanovic@gmail.com",
56
+ "package": "@langri-sha/projen-project",
57
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
58
+ "comment": "feat(project): Add stub projen configuration file"
59
+ },
60
+ {
61
+ "author": "filip.dupanovic@gmail.com",
62
+ "package": "@langri-sha/projen-project",
63
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
64
+ "comment": "feat(project): Upgrade PNPM with Renovate"
65
+ },
66
+ {
67
+ "author": "filip.dupanovic@gmail.com",
68
+ "package": "@langri-sha/projen-project",
69
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
70
+ "comment": "feat(project): Add support for Node.js packages"
71
+ },
72
+ {
73
+ "author": "filip.dupanovic@gmail.com",
74
+ "package": "@langri-sha/projen-project",
75
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
76
+ "comment": "feat(project): Match deps in modules with Renovate"
77
+ },
78
+ {
79
+ "author": "filip.dupanovic@gmail.com",
80
+ "package": "@langri-sha/projen-project",
81
+ "commit": "f95709138a43b934997a15555d3e42655a02bee3",
82
+ "comment": "feat(project): Add support for subprojects"
83
+ }
84
+ ]
85
+ }
86
+ },
87
+ {
88
+ "date": "Wed, 15 May 2024 06:47:18 GMT",
6
89
  "version": "0.7.0",
7
90
  "tag": "@langri-sha/projen-project_v0.7.0",
8
91
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,34 @@
1
1
  # Change Log - @langri-sha/projen-project
2
2
 
3
- This log was last generated on Wed, 15 May 2024 06:46:11 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 21 May 2024 05:21:31 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.8.0
8
+
9
+ Tue, 21 May 2024 05:21:31 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - feat(projen): Add component for Beacbhall support (filip.dupanovic@gmail.com)
14
+ - feat(project): Add stub projen configuration file (filip.dupanovic@gmail.com)
15
+ - feat(project): Upgrade PNPM with Renovate (filip.dupanovic@gmail.com)
16
+ - feat(project): Add support for Node.js packages (filip.dupanovic@gmail.com)
17
+ - feat(project): Match deps in modules with Renovate (filip.dupanovic@gmail.com)
18
+ - feat(project): Add support for subprojects (filip.dupanovic@gmail.com)
19
+
20
+ ### Patches
21
+
22
+ - chore(deps): chore(deps): update dependency projen to v0.81.13 (email not defined)
23
+ - chore(deps): chore(deps): update dependency projen to v0.81.15 (email not defined)
24
+ - fix(project): Transpile sources only for default task (filip.dupanovic@gmail.com)
25
+ - fix(project): Correct Renovate dependency matching (filip.dupanovic@gmail.com)
26
+ - fix(projen-project): Lint only package modules (filip.dupanovic@gmail.com)
27
+ - fix(project): Add looser dependency matching (filip.dupanovic@gmail.com)
28
+
7
29
  ## 0.7.0
8
30
 
9
- Wed, 15 May 2024 06:46:11 GMT
31
+ Wed, 15 May 2024 06:47:18 GMT
10
32
 
11
33
  ### Minor changes
12
34
 
package/lib/index.d.ts CHANGED
@@ -1,13 +1,15 @@
1
- import { Project as BaseProject, type ProjectOptions as BaseProjectOptions } from 'projen';
2
- import { type BeachballConfig } from 'beachball';
1
+ import { Project as BaseProject, type ProjectOptions as BaseProjectOptions, javascript } from 'projen';
3
2
  import { type LintSynthesizedOptions } from '@langri-sha/projen-lint-synthesized';
4
- import { type EditorConfigOptions } from '@langri-sha/projen-editorconfig';
5
- import { type CodeownersOptions } from '@langri-sha/projen-codeowners';
6
- import { type RenovateOptions } from '@langri-sha/projen-renovate';
7
- import { type HuskyOptions } from '@langri-sha/projen-husky';
3
+ import { EditorConfig, type EditorConfigOptions } from '@langri-sha/projen-editorconfig';
4
+ import { Codeowners, type CodeownersOptions } from '@langri-sha/projen-codeowners';
5
+ import { Renovate, type RenovateOptions } from '@langri-sha/projen-renovate';
6
+ import { Husky, type HuskyOptions } from '@langri-sha/projen-husky';
8
7
  import { TypeScriptConfig, type TypeScriptConfigOptions } from '@langri-sha/projen-typescript-config';
8
+ import { Beachball, BeachballOptions } from '@langri-sha/projen-beachball';
9
+ import { ProjenrcFile } from './lib/index.js';
10
+ export * from '@langri-sha/projen-typescript-config';
9
11
  export interface ProjectOptions extends Omit<BaseProjectOptions, 'renovatebot' | 'renovatebotOptions'> {
10
- beachballConfig?: BeachballConfig;
12
+ beachballOptions?: BeachballOptions;
11
13
  codeownersOptions?: CodeownersOptions;
12
14
  /**
13
15
  * EditorConfig options.
@@ -19,13 +21,35 @@ export interface ProjectOptions extends Omit<BaseProjectOptions, 'renovatebot' |
19
21
  huskyOptions?: HuskyOptions;
20
22
  renovateOptions?: RenovateOptions;
21
23
  lintSynthesizedOptions?: LintSynthesizedOptions;
24
+ /**
25
+ * Package configuration options.
26
+ */
27
+ package?: javascript.NodePackageOptions;
28
+ /**
29
+ * TypeScript configuration options.
30
+ */
22
31
  typeScriptConfigOptions?: TypeScriptConfigOptions;
23
32
  withTerraform?: boolean;
24
33
  workspaces?: string[];
25
34
  }
26
35
  export declare class Project extends BaseProject {
27
36
  #private;
37
+ beachball?: Beachball;
38
+ codeowners?: Codeowners;
39
+ editorConfig?: EditorConfig;
40
+ husky?: Husky;
41
+ package?: javascript.NodePackage;
42
+ projenrc?: ProjenrcFile;
43
+ renovate?: Renovate;
28
44
  typeScriptConfig?: TypeScriptConfig;
29
45
  constructor(options: ProjectOptions);
46
+ /**
47
+ * Add a subproject.
48
+ */
49
+ addSubproject(projectOptions: ProjectOptions): Project;
50
+ /**
51
+ * Find a project by it's name, e.g. `@acme/some`.
52
+ */
53
+ findSubproject(name: string): Project;
30
54
  }
31
55
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,KAAK,cAAc,IAAI,kBAAkB,EAG1C,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC7B,MAAM,sCAAsC,CAAA;AAE7C,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,oBAAoB,CAAC;IAItE,eAAe,CAAC,EAAE,eAAe,CAAA;IAKjC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAErC;;OAEG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IAEzC;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAK3B,eAAe,CAAC,EAAE,eAAe,CAAA;IAKjC,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAK/C,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;IAKjD,aAAa,CAAC,EAAE,OAAO,CAAA;IAKvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,qBAAa,OAAQ,SAAQ,WAAW;;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;gBAEvB,OAAO,EAAE,cAAc;CA8JpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,KAAK,cAAc,IAAI,kBAAkB,EAEzC,UAAU,EACX,MAAM,QAAQ,CAAA;AAIf,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC7B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,cAAc,sCAAsC,CAAA;AAEpD,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,oBAAoB,CAAC;IAItE,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAKnC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAErC;;OAEG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IAEzC;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAK3B,eAAe,CAAC,EAAE,eAAe,CAAA;IAKjC,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAE/C;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAA;IAEvC;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;IAKjD,aAAa,CAAC,EAAE,OAAO,CAAA;IAKvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,qBAAa,OAAQ,SAAQ,WAAW;;IACtC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,OAAO,CAAC,EAAE,UAAU,CAAC,WAAW,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;gBAEvB,OAAO,EAAE,cAAc;IAiCnC;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,cAAc;IAO5C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CA2NtC"}
package/lib/index.js CHANGED
@@ -3,8 +3,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _Project_instances, _Project_configureBeachball, _Project_configureCodeowners, _Project_configureDefaultTask, _Project_configureEditorConfig, _Project_configureHusky, _Project_configureLintSynthesized, _Project_configureRenovate, _Project_configureTypeScript, _Project_createPnpmWorkspaces;
7
- import { Project as BaseProject, TextFile, YamlFile, } from 'projen';
6
+ var _Project_instances, _Project_configureBeachball, _Project_configureCodeowners, _Project_configureEditorConfig, _Project_configureHusky, _Project_configureLintSynthesized, _Project_configurePackage, _Project_configureProjenrc, _Project_configureRenovate, _Project_configureTypeScript, _Project_createPnpmWorkspaces;
7
+ import { Project as BaseProject, YamlFile, javascript, } from 'projen';
8
8
  import * as R from 'ramda';
9
9
  import { LintSynthesized, } from '@langri-sha/projen-lint-synthesized';
10
10
  import { EditorConfig, } from '@langri-sha/projen-editorconfig';
@@ -12,6 +12,9 @@ import { Codeowners, } from '@langri-sha/projen-codeowners';
12
12
  import { Renovate } from '@langri-sha/projen-renovate';
13
13
  import { Husky } from '@langri-sha/projen-husky';
14
14
  import { TypeScriptConfig, } from '@langri-sha/projen-typescript-config';
15
+ import { Beachball } from '@langri-sha/projen-beachball';
16
+ import { ProjenrcFile } from './lib/index.js';
17
+ export * from '@langri-sha/projen-typescript-config';
15
18
  export class Project extends BaseProject {
16
19
  constructor(options) {
17
20
  super({
@@ -27,22 +30,56 @@ export class Project extends BaseProject {
27
30
  this.tasks.removeTask('post-compile');
28
31
  this.tasks.removeTask('pre-compile');
29
32
  this.tasks.removeTask('watch');
33
+ if (!this.parent) {
34
+ this.tasks.removeTask('install');
35
+ this.tasks.removeTask('install:ci');
36
+ }
37
+ __classPrivateFieldGet(this, _Project_instances, "m", _Project_configurePackage).call(this, options);
30
38
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureTypeScript).call(this, options);
31
39
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureBeachball).call(this, options);
32
40
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureCodeowners).call(this, options);
33
- __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureDefaultTask).call(this);
34
41
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureEditorConfig).call(this, options);
35
42
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureHusky).call(this, options);
36
43
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureLintSynthesized).call(this, options);
44
+ __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureProjenrc).call(this);
37
45
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_configureRenovate).call(this, options);
38
46
  __classPrivateFieldGet(this, _Project_instances, "m", _Project_createPnpmWorkspaces).call(this, options);
39
47
  }
48
+ /**
49
+ * Add a subproject.
50
+ */
51
+ addSubproject(projectOptions) {
52
+ return new Project({
53
+ parent: this,
54
+ ...projectOptions,
55
+ });
56
+ }
57
+ /**
58
+ * Find a project by it's name, e.g. `@acme/some`.
59
+ */
60
+ findSubproject(name) {
61
+ const subprojects = [];
62
+ const addSubproject = (project) => {
63
+ for (const subproject of project.subprojects) {
64
+ subprojects.push(subproject);
65
+ if (subproject.subprojects.length) {
66
+ addSubproject(subproject);
67
+ }
68
+ }
69
+ };
70
+ addSubproject(this.root);
71
+ const result = subprojects.find((subproject) => subproject.name === name);
72
+ if (result instanceof Project) {
73
+ return result;
74
+ }
75
+ throw new Error(`Cannot find subproject ${name}`);
76
+ }
40
77
  }
41
- _Project_instances = new WeakSet(), _Project_configureBeachball = function _Project_configureBeachball({ beachballConfig }) {
42
- if (!beachballConfig) {
78
+ _Project_instances = new WeakSet(), _Project_configureBeachball = function _Project_configureBeachball({ beachballOptions }) {
79
+ if (!beachballOptions || this.parent) {
43
80
  return;
44
81
  }
45
- const options = deepMerge(beachballConfig, {
82
+ const options = deepMerge(beachballOptions, {
46
83
  branch: 'origin/main',
47
84
  gitTags: false,
48
85
  ignorePatterns: [
@@ -53,28 +90,16 @@ _Project_instances = new WeakSet(), _Project_configureBeachball = function _Proj
53
90
  'node_modules/',
54
91
  ],
55
92
  });
56
- const file = new TextFile(this, 'beachball.config.js', {
57
- readonly: true,
58
- marker: true,
59
- });
60
- for (const line of [
61
- `/** @type {import('beachball').BeachballConfig} */`,
62
- `module.exports = ${JSON.stringify(options, null, 2)}`,
63
- ]) {
64
- file.addLine(line);
65
- }
93
+ this.beachball = new Beachball(this, options);
94
+ this.package?.addDevDeps('beachball@2.43.1');
66
95
  this.typeScriptConfig?.addFile('beachball.config.js');
67
96
  }, _Project_configureCodeowners = function _Project_configureCodeowners({ codeownersOptions }) {
68
97
  if (!codeownersOptions) {
69
98
  return;
70
99
  }
71
- new Codeowners(this, codeownersOptions);
72
- }, _Project_configureDefaultTask = function _Project_configureDefaultTask() {
73
- this.tasks
74
- .tryFind('default')
75
- ?.exec(`node --loader ts-node/esm .projenrc.mts`);
100
+ this.codeowners = new Codeowners(this, codeownersOptions);
76
101
  }, _Project_configureEditorConfig = function _Project_configureEditorConfig({ editorConfigOptions }) {
77
- if (!editorConfigOptions) {
102
+ if (!editorConfigOptions || this.parent) {
78
103
  return;
79
104
  }
80
105
  const defaults = {
@@ -90,19 +115,47 @@ _Project_instances = new WeakSet(), _Project_configureBeachball = function _Proj
90
115
  indent_style: 'tab',
91
116
  },
92
117
  };
93
- new EditorConfig(this, deepMerge(editorConfigOptions ?? {}, defaults));
118
+ this.editorConfig = new EditorConfig(this, deepMerge(editorConfigOptions ?? {}, defaults));
94
119
  }, _Project_configureHusky = function _Project_configureHusky({ huskyOptions }) {
95
- if (!huskyOptions) {
120
+ if (!huskyOptions || this.parent) {
96
121
  return;
97
122
  }
98
- new Husky(this, huskyOptions);
123
+ this.husky = new Husky(this, huskyOptions);
124
+ this.package?.addDevDeps('husky@9.0.11');
125
+ this.package?.setScript('prepare', 'husky');
126
+ this.tryFindObjectFile('package.json')?.addDeletionOverride('pnpm');
99
127
  }, _Project_configureLintSynthesized = function _Project_configureLintSynthesized({ lintSynthesizedOptions }) {
100
128
  new LintSynthesized(this, lintSynthesizedOptions ?? {
129
+ 'package.json': 'pnpx sort-package-json',
101
130
  '*.{js,jsx,ts,tsx}': 'pnpm eslint --fix',
102
131
  '*': 'pnpm prettier --write --ignore-unknown',
103
132
  });
133
+ }, _Project_configurePackage = function _Project_configurePackage({ package: pkg }) {
134
+ if (!pkg) {
135
+ return;
136
+ }
137
+ const defaults = {
138
+ entrypoint: 'src/index.ts',
139
+ packageManager: javascript.NodePackageManager.PNPM,
140
+ minNodeVersion: '20.12.0',
141
+ };
142
+ this.package = new javascript.NodePackage(this, deepMerge(defaults, pkg));
143
+ if (!this.parent) {
144
+ this.package.addDevDeps('@langri-sha/projen-project@*');
145
+ this.package.addDevDeps('projen@0.81.15');
146
+ }
147
+ this.package.removeScript('start');
148
+ this.package.removeScript('test');
149
+ if (this.parent) {
150
+ this.package.removeScript('default');
151
+ }
152
+ }, _Project_configureProjenrc = function _Project_configureProjenrc() {
153
+ if (this.parent) {
154
+ return;
155
+ }
156
+ this.projenrc = new ProjenrcFile(this, {});
104
157
  }, _Project_configureRenovate = function _Project_configureRenovate({ renovateOptions }) {
105
- if (!renovateOptions) {
158
+ if (!renovateOptions || this.parent) {
106
159
  return;
107
160
  }
108
161
  const defaults = {
@@ -110,18 +163,52 @@ _Project_instances = new WeakSet(), _Project_configureBeachball = function _Proj
110
163
  extends: ['config:recommended'],
111
164
  labels: ['dependencies'],
112
165
  reviewersFromCodeOwners: true,
166
+ customManagers: [
167
+ {
168
+ customType: 'regex',
169
+ datasourceTemplate: 'npm',
170
+ fileMatch: ['\\.?projen.*.(js|cjs|mjs|ts|mts|cts)$'],
171
+ matchStrings: [
172
+ "\\.(?<depType>addDep|addDevDep|addPeerDep)\\('(?<depName>[a-zA-Z0-9-]+)@(?<currentValue>[^']+)'\\)",
173
+ ],
174
+ depTypeTemplate: "{{#if (equals depType 'addDevDep')}}devDependencies{{else if (equals depType 'addPeerDep')}}peerDependencies{{else}}dependencies{{/if}}",
175
+ },
176
+ {
177
+ customType: 'regex',
178
+ datasourceTemplate: 'npm',
179
+ fileMatch: ['\\.?projen.*.(js|cjs|mjs|ts|mts|cts)$'],
180
+ matchStrings: ["pnpm@(?<currentValue>[^']+)"],
181
+ depNameTemplate: 'pnpm',
182
+ depTypeTemplate: 'dependencies',
183
+ },
184
+ ],
113
185
  };
114
- new Renovate(this, deepMerge(defaults, renovateOptions));
115
- }, _Project_configureTypeScript = function _Project_configureTypeScript({ typeScriptConfigOptions }) {
186
+ this.renovate = new Renovate(this, deepMerge(defaults, renovateOptions));
187
+ }, _Project_configureTypeScript = function _Project_configureTypeScript({ parent, typeScriptConfigOptions }) {
116
188
  if (!typeScriptConfigOptions) {
117
189
  return;
118
190
  }
119
- const defaults = {
120
- config: {
121
- extends: '@langri-sha/tsconfig',
122
- },
123
- };
191
+ const defaults = parent
192
+ ? {
193
+ config: {
194
+ extends: '@langri-sha/tsconfig/project.json',
195
+ compilerOptions: {
196
+ baseUrl: '.',
197
+ outDir: '.tsbuild',
198
+ },
199
+ },
200
+ }
201
+ : {
202
+ config: {
203
+ extends: '@langri-sha/tsconfig',
204
+ },
205
+ };
124
206
  this.typeScriptConfig = new TypeScriptConfig(this, deepMerge(defaults, typeScriptConfigOptions));
207
+ if (!this.parent) {
208
+ this.package?.addDevDeps('typescript@5.4.5');
209
+ this.package?.addDevDeps('ts-node@10.9.2');
210
+ }
211
+ this.package?.addDevDeps('@langri-sha/tsconfig@*');
125
212
  }, _Project_createPnpmWorkspaces = function _Project_createPnpmWorkspaces({ workspaces }) {
126
213
  if (!workspaces) {
127
214
  return;
@@ -134,10 +221,11 @@ _Project_instances = new WeakSet(), _Project_configureBeachball = function _Proj
134
221
  },
135
222
  });
136
223
  };
137
- const getGitIgnoreOptions = ({ huskyOptions, typeScriptConfigOptions, withTerraform, ...options }) => ({
138
- ...options.gitIgnoreOptions,
139
- ignorePatterns: [
140
- ...`
224
+ const getGitIgnoreOptions = ({ huskyOptions, typeScriptConfigOptions, withTerraform, parent, gitIgnoreOptions, ...options }) => parent
225
+ ? gitIgnoreOptions
226
+ : {
227
+ ignorePatterns: [
228
+ ...`
141
229
  .*
142
230
  !.babelrc
143
231
  !.dockerignore
@@ -148,7 +236,6 @@ const getGitIgnoreOptions = ({ huskyOptions, typeScriptConfigOptions, withTerraf
148
236
  !.npmignore
149
237
  !.openssl
150
238
  !.prettierignore
151
- !.projenrc*
152
239
  ${withTerraform ? '!.terraform.lock.hcl' : ''}
153
240
  *.db
154
241
  *.log
@@ -160,11 +247,11 @@ const getGitIgnoreOptions = ({ huskyOptions, typeScriptConfigOptions, withTerraf
160
247
  ${options.workspaces?.map((workspace) => `${workspace}/lib/`).join('\n') ?? ''}
161
248
  node_modules/
162
249
  `
163
- .split('\n')
164
- .map((pattern) => pattern.trim())
165
- .filter((pattern) => pattern.length > 0),
166
- ...(options.gitIgnoreOptions?.ignorePatterns ?? []),
167
- ],
168
- });
250
+ .split('\n')
251
+ .map((pattern) => pattern.trim())
252
+ .filter((pattern) => pattern.length > 0),
253
+ ...(gitIgnoreOptions?.ignorePatterns ?? []),
254
+ ],
255
+ };
169
256
  const deepMerge = R.mergeDeepWith(R.concat);
170
257
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './projenrc.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './projenrc.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { ProjenrcFile as BaseProjenrcFile, Project } from 'projen';
2
+ export interface ProjenrcOptions {
3
+ /**
4
+ * The name of the projenrc file.
5
+ * @default ".projenrc.mts"
6
+ */
7
+ readonly filename?: string;
8
+ }
9
+ export declare class ProjenrcFile extends BaseProjenrcFile {
10
+ readonly filePath: string;
11
+ constructor(project: Project, { filename }: ProjenrcOptions);
12
+ }
13
+ //# sourceMappingURL=projenrc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projenrc.d.ts","sourceRoot":"","sources":["../../src/lib/projenrc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,OAAO,EAAc,MAAM,QAAQ,CAAA;AAE9E,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,YAAa,SAAQ,gBAAgB;IAChD,SAAyB,QAAQ,EAAE,MAAM,CAAA;gBAGvC,OAAO,EAAE,OAAO,EAChB,EAAE,QAA0B,EAAE,EAAE,eAAe;CAkBlD"}
@@ -0,0 +1,17 @@
1
+ import { ProjenrcFile as BaseProjenrcFile, SampleFile } from 'projen';
2
+ export class ProjenrcFile extends BaseProjenrcFile {
3
+ constructor(project, { filename = '.projenrc.mts' }) {
4
+ super(project);
5
+ this.filePath = filename;
6
+ this.project.defaultTask?.exec(`node --loader ts-node/esm/transpile-only ${filename}`);
7
+ new SampleFile(project, filename, {
8
+ contents: `import { Project } from '@langri-sha/projen-project'
9
+
10
+ const project = new Project()
11
+
12
+ project.synth()
13
+ `,
14
+ });
15
+ }
16
+ }
17
+ //# sourceMappingURL=projenrc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projenrc.js","sourceRoot":"","sources":["../../src/lib/projenrc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAW,UAAU,EAAE,MAAM,QAAQ,CAAA;AAU9E,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IAGhD,YACE,OAAgB,EAChB,EAAE,QAAQ,GAAG,eAAe,EAAmB;QAE/C,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAC5B,4CAA4C,QAAQ,EAAE,CACvD,CAAA;QAED,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE;YAChC,QAAQ,EAAE;;;;;OAKT;SACF,CAAC,CAAA;IACJ,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langri-sha/projen-project",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -8,20 +8,20 @@
8
8
  "prepublishOnly": "rm -rf lib; tsc --project tsconfig.build.json"
9
9
  },
10
10
  "dependencies": {
11
- "@langri-sha/projen-codeowners": "0.2.2",
12
- "@langri-sha/projen-editorconfig": "0.3.3",
13
- "@langri-sha/projen-husky": "0.1.2",
14
- "@langri-sha/projen-lint-synthesized": "0.2.4",
15
- "@langri-sha/projen-renovate": "0.2.2",
16
- "@langri-sha/projen-typescript-config": "0.2.0",
17
- "beachball": "2.43.1",
11
+ "@langri-sha/projen-beachball": "0.1.0",
12
+ "@langri-sha/projen-codeowners": "0.2.3",
13
+ "@langri-sha/projen-editorconfig": "0.3.4",
14
+ "@langri-sha/projen-husky": "0.1.3",
15
+ "@langri-sha/projen-lint-synthesized": "0.2.5",
16
+ "@langri-sha/projen-renovate": "0.2.3",
17
+ "@langri-sha/projen-typescript-config": "0.2.1",
18
18
  "ramda": "0.30.0"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@langri-sha/jest-test": "0.7.1",
22
22
  "@langri-sha/tsconfig": "0.9.0",
23
23
  "@types/ramda": "0.30.0",
24
- "projen": "0.81.11"
24
+ "projen": "0.81.15"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "projen": "^0.81.1",
package/src/index.ts CHANGED
@@ -1,12 +1,11 @@
1
1
  import {
2
2
  Project as BaseProject,
3
3
  type ProjectOptions as BaseProjectOptions,
4
- TextFile,
5
4
  YamlFile,
5
+ javascript,
6
6
  } from 'projen'
7
7
 
8
8
  import * as R from 'ramda'
9
- import { type BeachballConfig } from 'beachball'
10
9
 
11
10
  import {
12
11
  LintSynthesized,
@@ -26,13 +25,18 @@ import {
26
25
  TypeScriptConfig,
27
26
  type TypeScriptConfigOptions,
28
27
  } from '@langri-sha/projen-typescript-config'
28
+ import { Beachball, BeachballOptions } from '@langri-sha/projen-beachball'
29
+
30
+ import { ProjenrcFile } from './lib/index.js'
31
+
32
+ export * from '@langri-sha/projen-typescript-config'
29
33
 
30
34
  export interface ProjectOptions
31
35
  extends Omit<BaseProjectOptions, 'renovatebot' | 'renovatebotOptions'> {
32
36
  /*
33
37
  * Pass in to set up Beachball.
34
38
  */
35
- beachballConfig?: BeachballConfig
39
+ beachballOptions?: BeachballOptions
36
40
 
37
41
  /*
38
42
  * Pass in to set up Beachball.
@@ -59,8 +63,13 @@ export interface ProjectOptions
59
63
  */
60
64
  lintSynthesizedOptions?: LintSynthesizedOptions
61
65
 
62
- /*
63
- * Configure TypeScript.
66
+ /**
67
+ * Package configuration options.
68
+ */
69
+ package?: javascript.NodePackageOptions
70
+
71
+ /**
72
+ * TypeScript configuration options.
64
73
  */
65
74
  typeScriptConfigOptions?: TypeScriptConfigOptions
66
75
 
@@ -76,6 +85,13 @@ export interface ProjectOptions
76
85
  }
77
86
 
78
87
  export class Project extends BaseProject {
88
+ beachball?: Beachball
89
+ codeowners?: Codeowners
90
+ editorConfig?: EditorConfig
91
+ husky?: Husky
92
+ package?: javascript.NodePackage
93
+ projenrc?: ProjenrcFile
94
+ renovate?: Renovate
79
95
  typeScriptConfig?: TypeScriptConfig
80
96
 
81
97
  constructor(options: ProjectOptions) {
@@ -93,24 +109,67 @@ export class Project extends BaseProject {
93
109
  this.tasks.removeTask('pre-compile')
94
110
  this.tasks.removeTask('watch')
95
111
 
112
+ if (!this.parent) {
113
+ this.tasks.removeTask('install')
114
+ this.tasks.removeTask('install:ci')
115
+ }
116
+
117
+ this.#configurePackage(options)
96
118
  this.#configureTypeScript(options)
97
119
 
98
120
  this.#configureBeachball(options)
99
121
  this.#configureCodeowners(options)
100
- this.#configureDefaultTask()
101
122
  this.#configureEditorConfig(options)
102
123
  this.#configureHusky(options)
103
124
  this.#configureLintSynthesized(options)
125
+ this.#configureProjenrc()
104
126
  this.#configureRenovate(options)
105
127
  this.#createPnpmWorkspaces(options)
106
128
  }
107
129
 
108
- #configureBeachball({ beachballConfig }: ProjectOptions) {
109
- if (!beachballConfig) {
130
+ /**
131
+ * Add a subproject.
132
+ */
133
+ addSubproject(projectOptions: ProjectOptions) {
134
+ return new Project({
135
+ parent: this,
136
+ ...projectOptions,
137
+ })
138
+ }
139
+
140
+ /**
141
+ * Find a project by it's name, e.g. `@acme/some`.
142
+ */
143
+ findSubproject(name: string): Project {
144
+ const subprojects: Array<BaseProject> = []
145
+
146
+ const addSubproject = (project: BaseProject) => {
147
+ for (const subproject of project.subprojects) {
148
+ subprojects.push(subproject)
149
+
150
+ if (subproject.subprojects.length) {
151
+ addSubproject(subproject)
152
+ }
153
+ }
154
+ }
155
+
156
+ addSubproject(this.root)
157
+
158
+ const result = subprojects.find((subproject) => subproject.name === name)
159
+
160
+ if (result instanceof Project) {
161
+ return result
162
+ }
163
+
164
+ throw new Error(`Cannot find subproject ${name}`)
165
+ }
166
+
167
+ #configureBeachball({ beachballOptions }: ProjectOptions) {
168
+ if (!beachballOptions || this.parent) {
110
169
  return
111
170
  }
112
171
 
113
- const options = deepMerge(beachballConfig, {
172
+ const options = deepMerge(beachballOptions, {
114
173
  branch: 'origin/main',
115
174
  gitTags: false,
116
175
  ignorePatterns: [
@@ -122,18 +181,9 @@ export class Project extends BaseProject {
122
181
  ],
123
182
  })
124
183
 
125
- const file = new TextFile(this, 'beachball.config.js', {
126
- readonly: true,
127
- marker: true,
128
- })
129
-
130
- for (const line of [
131
- `/** @type {import('beachball').BeachballConfig} */`,
132
- `module.exports = ${JSON.stringify(options, null, 2)}`,
133
- ]) {
134
- file.addLine(line)
135
- }
184
+ this.beachball = new Beachball(this, options)
136
185
 
186
+ this.package?.addDevDeps('beachball@2.43.1')
137
187
  this.typeScriptConfig?.addFile('beachball.config.js')
138
188
  }
139
189
 
@@ -142,17 +192,11 @@ export class Project extends BaseProject {
142
192
  return
143
193
  }
144
194
 
145
- new Codeowners(this, codeownersOptions)
146
- }
147
-
148
- #configureDefaultTask() {
149
- this.tasks
150
- .tryFind('default')
151
- ?.exec(`node --loader ts-node/esm .projenrc.mts`)
195
+ this.codeowners = new Codeowners(this, codeownersOptions)
152
196
  }
153
197
 
154
198
  #configureEditorConfig({ editorConfigOptions }: ProjectOptions) {
155
- if (!editorConfigOptions) {
199
+ if (!editorConfigOptions || this.parent) {
156
200
  return
157
201
  }
158
202
 
@@ -170,29 +214,71 @@ export class Project extends BaseProject {
170
214
  },
171
215
  }
172
216
 
173
- new EditorConfig(this, deepMerge(editorConfigOptions ?? {}, defaults))
217
+ this.editorConfig = new EditorConfig(
218
+ this,
219
+ deepMerge(editorConfigOptions ?? {}, defaults),
220
+ )
174
221
  }
175
222
 
176
223
  #configureHusky({ huskyOptions }: ProjectOptions) {
177
- if (!huskyOptions) {
224
+ if (!huskyOptions || this.parent) {
178
225
  return
179
226
  }
180
227
 
181
- new Husky(this, huskyOptions)
228
+ this.husky = new Husky(this, huskyOptions)
229
+
230
+ this.package?.addDevDeps('husky@9.0.11')
231
+ this.package?.setScript('prepare', 'husky')
232
+ this.tryFindObjectFile('package.json')?.addDeletionOverride('pnpm')
182
233
  }
183
234
 
184
235
  #configureLintSynthesized({ lintSynthesizedOptions }: ProjectOptions) {
185
236
  new LintSynthesized(
186
237
  this,
187
238
  lintSynthesizedOptions ?? {
239
+ 'package.json': 'pnpx sort-package-json',
188
240
  '*.{js,jsx,ts,tsx}': 'pnpm eslint --fix',
189
241
  '*': 'pnpm prettier --write --ignore-unknown',
190
242
  },
191
243
  )
192
244
  }
193
245
 
246
+ #configurePackage({ package: pkg }: ProjectOptions) {
247
+ if (!pkg) {
248
+ return
249
+ }
250
+
251
+ const defaults: javascript.NodePackageOptions = {
252
+ entrypoint: 'src/index.ts',
253
+ packageManager: javascript.NodePackageManager.PNPM,
254
+ minNodeVersion: '20.12.0',
255
+ }
256
+
257
+ this.package = new javascript.NodePackage(this, deepMerge(defaults, pkg))
258
+
259
+ if (!this.parent) {
260
+ this.package.addDevDeps('@langri-sha/projen-project@*')
261
+ this.package.addDevDeps('projen@0.81.15')
262
+ }
263
+
264
+ this.package.removeScript('start')
265
+ this.package.removeScript('test')
266
+
267
+ if (this.parent) {
268
+ this.package.removeScript('default')
269
+ }
270
+ }
271
+
272
+ #configureProjenrc() {
273
+ if (this.parent) {
274
+ return
275
+ }
276
+
277
+ this.projenrc = new ProjenrcFile(this, {})
278
+ }
279
+
194
280
  #configureRenovate({ renovateOptions }: ProjectOptions) {
195
- if (!renovateOptions) {
281
+ if (!renovateOptions || this.parent) {
196
282
  return
197
283
  }
198
284
 
@@ -201,26 +287,63 @@ export class Project extends BaseProject {
201
287
  extends: ['config:recommended'],
202
288
  labels: ['dependencies'],
203
289
  reviewersFromCodeOwners: true,
290
+ customManagers: [
291
+ {
292
+ customType: 'regex',
293
+ datasourceTemplate: 'npm',
294
+ fileMatch: ['\\.?projen.*.(js|cjs|mjs|ts|mts|cts)$'],
295
+ matchStrings: [
296
+ "\\.(?<depType>addDep|addDevDep|addPeerDep)\\('(?<depName>[a-zA-Z0-9-]+)@(?<currentValue>[^']+)'\\)",
297
+ ],
298
+ depTypeTemplate:
299
+ "{{#if (equals depType 'addDevDep')}}devDependencies{{else if (equals depType 'addPeerDep')}}peerDependencies{{else}}dependencies{{/if}}",
300
+ },
301
+ {
302
+ customType: 'regex',
303
+ datasourceTemplate: 'npm',
304
+ fileMatch: ['\\.?projen.*.(js|cjs|mjs|ts|mts|cts)$'],
305
+ matchStrings: ["pnpm@(?<currentValue>[^']+)"],
306
+ depNameTemplate: 'pnpm',
307
+ depTypeTemplate: 'dependencies',
308
+ },
309
+ ],
204
310
  }
205
311
 
206
- new Renovate(this, deepMerge(defaults, renovateOptions))
312
+ this.renovate = new Renovate(this, deepMerge(defaults, renovateOptions))
207
313
  }
208
314
 
209
- #configureTypeScript({ typeScriptConfigOptions }: ProjectOptions) {
315
+ #configureTypeScript({ parent, typeScriptConfigOptions }: ProjectOptions) {
210
316
  if (!typeScriptConfigOptions) {
211
317
  return
212
318
  }
213
319
 
214
- const defaults: TypeScriptConfigOptions = {
215
- config: {
216
- extends: '@langri-sha/tsconfig',
217
- },
218
- }
320
+ const defaults: TypeScriptConfigOptions = parent
321
+ ? {
322
+ config: {
323
+ extends: '@langri-sha/tsconfig/project.json',
324
+ compilerOptions: {
325
+ baseUrl: '.',
326
+ outDir: '.tsbuild',
327
+ },
328
+ },
329
+ }
330
+ : {
331
+ config: {
332
+ extends: '@langri-sha/tsconfig',
333
+ },
334
+ }
219
335
 
220
336
  this.typeScriptConfig = new TypeScriptConfig(
221
337
  this,
222
338
  deepMerge(defaults, typeScriptConfigOptions),
223
339
  )
340
+
341
+ if (!this.parent) {
342
+ this.package?.addDevDeps('typescript@5.4.5')
343
+ this.package?.addDevDeps('ts-node@10.9.2')
344
+ }
345
+
346
+ this.package?.addDevDeps('@langri-sha/tsconfig@*')
224
347
  }
225
348
 
226
349
  #createPnpmWorkspaces({ workspaces }: ProjectOptions) {
@@ -242,11 +365,15 @@ const getGitIgnoreOptions = ({
242
365
  huskyOptions,
243
366
  typeScriptConfigOptions,
244
367
  withTerraform,
368
+ parent,
369
+ gitIgnoreOptions,
245
370
  ...options
246
- }: ProjectOptions): ProjectOptions['gitIgnoreOptions'] => ({
247
- ...options.gitIgnoreOptions,
248
- ignorePatterns: [
249
- ...`
371
+ }: ProjectOptions): ProjectOptions['gitIgnoreOptions'] =>
372
+ parent
373
+ ? gitIgnoreOptions
374
+ : {
375
+ ignorePatterns: [
376
+ ...`
250
377
  .*
251
378
  !.babelrc
252
379
  !.dockerignore
@@ -257,7 +384,6 @@ const getGitIgnoreOptions = ({
257
384
  !.npmignore
258
385
  !.openssl
259
386
  !.prettierignore
260
- !.projenrc*
261
387
  ${withTerraform ? '!.terraform.lock.hcl' : ''}
262
388
  *.db
263
389
  *.log
@@ -269,11 +395,11 @@ const getGitIgnoreOptions = ({
269
395
  ${options.workspaces?.map((workspace) => `${workspace}/lib/`).join('\n') ?? ''}
270
396
  node_modules/
271
397
  `
272
- .split('\n')
273
- .map((pattern) => pattern.trim())
274
- .filter((pattern) => pattern.length > 0),
275
- ...(options.gitIgnoreOptions?.ignorePatterns ?? []),
276
- ],
277
- })
398
+ .split('\n')
399
+ .map((pattern) => pattern.trim())
400
+ .filter((pattern) => pattern.length > 0),
401
+ ...(gitIgnoreOptions?.ignorePatterns ?? []),
402
+ ],
403
+ }
278
404
 
279
405
  const deepMerge = R.mergeDeepWith(R.concat)
@@ -0,0 +1 @@
1
+ export * from './projenrc.js'
@@ -0,0 +1,34 @@
1
+ import { ProjenrcFile as BaseProjenrcFile, Project, SampleFile } from 'projen'
2
+
3
+ export interface ProjenrcOptions {
4
+ /**
5
+ * The name of the projenrc file.
6
+ * @default ".projenrc.mts"
7
+ */
8
+ readonly filename?: string
9
+ }
10
+
11
+ export class ProjenrcFile extends BaseProjenrcFile {
12
+ public override readonly filePath: string
13
+
14
+ constructor(
15
+ project: Project,
16
+ { filename = '.projenrc.mts' }: ProjenrcOptions,
17
+ ) {
18
+ super(project)
19
+
20
+ this.filePath = filename
21
+ this.project.defaultTask?.exec(
22
+ `node --loader ts-node/esm/transpile-only ${filename}`,
23
+ )
24
+
25
+ new SampleFile(project, filename, {
26
+ contents: `import { Project } from '@langri-sha/projen-project'
27
+
28
+ const project = new Project()
29
+
30
+ project.synth()
31
+ `,
32
+ })
33
+ }
34
+ }