@storm-software/projen 0.11.0 → 0.12.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/.eslintrc.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "extends": ["../../.eslintrc.json"],
3
+ "ignorePatterns": ["!**/*"],
4
+ "overrides": [
5
+ {
6
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
7
+ "parserOptions": {
8
+ "project": ["packages/pulumi-tools/tsconfig.*?.json"]
9
+ },
10
+ "rules": {}
11
+ },
12
+ {
13
+ "files": ["*.ts", "*.tsx"],
14
+ "rules": {}
15
+ },
16
+ {
17
+ "files": ["*.js", "*.jsx"],
18
+ "rules": {}
19
+ },
20
+ {
21
+ "files": ["*.json"],
22
+ "parser": "jsonc-eslint-parser",
23
+ "rules": {
24
+ "@nx/dependency-checks": [
25
+ "error",
26
+ {
27
+ "ignoredFiles": ["{projectRoot}/eslint.config.{js,cjs,mjs}"]
28
+ }
29
+ ]
30
+ }
31
+ },
32
+ {
33
+ "files": ["./package.json", "./executors.json", "./generators.json"],
34
+ "parser": "jsonc-eslint-parser",
35
+ "rules": {
36
+ "@nx/nx-plugin-checks": "error"
37
+ }
38
+ }
39
+ ]
40
+ }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,34 @@
2
2
 
3
3
  # Changelog for Storm Ops - Projen
4
4
 
5
+ ## [0.12.0](https://github.com/storm-software/storm-ops/releases/tag/projen%400.12.0) (2025-05-06)
6
+
7
+ ### Features
8
+
9
+ - **workspace-tools:** Update the publish executor source code
10
+ ([527dcfe84](https://github.com/storm-software/storm-ops/commit/527dcfe84))
11
+
12
+ ### Miscellaneous
13
+
14
+ - **monorepo:** Regenerate README markdown files
15
+ ([d58a4014e](https://github.com/storm-software/storm-ops/commit/d58a4014e))
16
+
17
+ ## [0.11.2](https://github.com/storm-software/storm-ops/releases/tag/projen%400.11.2) (2025-05-05)
18
+
19
+ ### Miscellaneous
20
+
21
+ - **workspace-tools:** Skip git checks during publish
22
+ ([7fdcbfc9a](https://github.com/storm-software/storm-ops/commit/7fdcbfc9a))
23
+ - **monorepo:** Regenerate README markdown files
24
+ ([fb8ab0609](https://github.com/storm-software/storm-ops/commit/fb8ab0609))
25
+
26
+ ## [0.11.1](https://github.com/storm-software/storm-ops/releases/tag/projen%400.11.1) (2025-05-05)
27
+
28
+ ### Miscellaneous
29
+
30
+ - **monorepo:** Regenerate README markdown files
31
+ ([372776939](https://github.com/storm-software/storm-ops/commit/372776939))
32
+
5
33
  ## [0.11.0](https://github.com/storm-software/storm-ops/releases/tag/projen%400.11.0) (2025-05-05)
6
34
 
7
35
  ### Features
package/README.md CHANGED
@@ -21,7 +21,7 @@ This package is part of the <b>⚡Storm-Ops</b> monorepo. The Storm-Ops packages
21
21
 
22
22
  <h3 align="center">💻 Visit <a href="https://stormsoftware.com" target="_blank">stormsoftware.com</a> to stay up to date with this developer</h3><br />
23
23
 
24
- [![Version](https://img.shields.io/badge/version-0.10.5-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://prettier.io/)&nbsp;[![Nx](https://img.shields.io/badge/Nx-17.0.2-lightgrey?style=for-the-badge&logo=nx&logoWidth=20&&color=1fb2a6)](http://nx.dev/)&nbsp;[![NextJs](https://img.shields.io/badge/Next.js-14.0.2-lightgrey?style=for-the-badge&logo=nextdotjs&logoWidth=20&color=1fb2a6)](https://nextjs.org/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;[![documented with Fumadocs](https://img.shields.io/badge/documented_with-fumadocs-success.svg?style=for-the-badge&logo=readthedocs&color=1fb2a6)](https://fumadocs.vercel.app/)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/storm-ops/cr.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
24
+ [![Version](https://img.shields.io/badge/version-0.11.1-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://prettier.io/)&nbsp;[![Nx](https://img.shields.io/badge/Nx-17.0.2-lightgrey?style=for-the-badge&logo=nx&logoWidth=20&&color=1fb2a6)](http://nx.dev/)&nbsp;[![NextJs](https://img.shields.io/badge/Next.js-14.0.2-lightgrey?style=for-the-badge&logo=nextdotjs&logoWidth=20&color=1fb2a6)](https://nextjs.org/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;[![documented with Fumadocs](https://img.shields.io/badge/documented_with-fumadocs-success.svg?style=for-the-badge&logo=readthedocs&color=1fb2a6)](https://fumadocs.vercel.app/)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/storm-ops/cr.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
25
25
 
26
26
  <!-- prettier-ignore-start -->
27
27
  <!-- markdownlint-disable -->
@@ -40,6 +40,7 @@ This package is part of the <b>⚡Storm-Ops</b> monorepo. The Storm-Ops packages
40
40
 
41
41
  <!-- START doctoc -->
42
42
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
43
+
43
44
  ## Table of Contents
44
45
 
45
46
  - [Storm Projen Tools](#storm-projen-tools)
@@ -13,7 +13,7 @@ init_esm_shims();
13
13
  import {
14
14
  addDependenciesToPackageJson as addDependenciesToPackageJson4,
15
15
  formatFiles as formatFiles9,
16
- readJsonFile as readJsonFile4,
16
+ readJsonFile as readJsonFile5,
17
17
  runTasksInSerial
18
18
  } from "@nx/devkit";
19
19
 
@@ -2691,8 +2691,16 @@ var executor_default6 = withRunExecutor(
2691
2691
 
2692
2692
  // ../workspace-tools/src/executors/npm-publish/executor.ts
2693
2693
  init_esm_shims();
2694
+ import {
2695
+ detectPackageManager,
2696
+ readJsonFile
2697
+ } from "@nx/devkit";
2698
+ import { exec } from "child_process";
2699
+ import * as columnify from "columnify";
2700
+ import { existsSync as existsSync8 } from "fs";
2694
2701
  import { execSync as execSync3 } from "node:child_process";
2695
- import { readFile as readFile6 } from "node:fs/promises";
2702
+ import { env as appendLocalEnv } from "npm-run-path";
2703
+ import { join as join3, relative as relative3 } from "path";
2696
2704
 
2697
2705
  // ../workspace-tools/src/utils/pnpm-deps-update.ts
2698
2706
  init_esm_shims();
@@ -4088,8 +4096,8 @@ var DEFAULT_COMMIT_QUESTIONS = {
4088
4096
  init_esm_shims();
4089
4097
 
4090
4098
  // ../workspace-tools/src/generators/release-version/generator.ts
4091
- import { exec, execSync as execSync4 } from "node:child_process";
4092
- import { relative as relative3 } from "node:path";
4099
+ import { exec as exec2, execSync as execSync4 } from "node:child_process";
4100
+ import { relative as relative4 } from "node:path";
4093
4101
  import { IMPLICIT_DEFAULT_RELEASE_GROUP } from "nx/src/command-line/release/config/config";
4094
4102
  import {
4095
4103
  getFirstGitCommit,
@@ -4500,11 +4508,11 @@ import { retrieveProjectConfigurationsWithoutPluginInference } from "nx/src/proj
4500
4508
  init_esm_shims();
4501
4509
  import {
4502
4510
  output as output2,
4503
- readJsonFile,
4511
+ readJsonFile as readJsonFile2,
4504
4512
  workspaceRoot as workspaceRoot2
4505
4513
  } from "@nx/devkit";
4506
- import { existsSync as existsSync8 } from "node:fs";
4507
- import { join as join4 } from "node:path";
4514
+ import { existsSync as existsSync9 } from "node:fs";
4515
+ import { join as join5 } from "node:path";
4508
4516
  import {
4509
4517
  getNpmLockfileDependencies,
4510
4518
  getNpmLockfileNodes
@@ -4520,24 +4528,24 @@ import {
4520
4528
  var YARN_LOCK_FILE = "yarn.lock";
4521
4529
  var NPM_LOCK_FILE = "package-lock.json";
4522
4530
  var PNPM_LOCK_FILE = "pnpm-lock.yaml";
4523
- var YARN_LOCK_PATH = join4(workspaceRoot2, YARN_LOCK_FILE);
4524
- var NPM_LOCK_PATH = join4(workspaceRoot2, NPM_LOCK_FILE);
4525
- var PNPM_LOCK_PATH = join4(workspaceRoot2, PNPM_LOCK_FILE);
4531
+ var YARN_LOCK_PATH = join5(workspaceRoot2, YARN_LOCK_FILE);
4532
+ var NPM_LOCK_PATH = join5(workspaceRoot2, NPM_LOCK_FILE);
4533
+ var PNPM_LOCK_PATH = join5(workspaceRoot2, PNPM_LOCK_FILE);
4526
4534
 
4527
4535
  // ../workspace-tools/src/utils/package-helpers.ts
4528
4536
  init_esm_shims();
4529
4537
  import {
4530
4538
  joinPathFragments as joinPathFragments6,
4531
- readJsonFile as readJsonFile2
4539
+ readJsonFile as readJsonFile3
4532
4540
  } from "@nx/devkit";
4533
- import { existsSync as existsSync9 } from "node:fs";
4541
+ import { existsSync as existsSync10 } from "node:fs";
4534
4542
 
4535
4543
  // ../workspace-tools/src/utils/plugin-helpers.ts
4536
4544
  init_esm_shims();
4537
- import { readJsonFile as readJsonFile3 } from "@nx/devkit";
4545
+ import { readJsonFile as readJsonFile4 } from "@nx/devkit";
4538
4546
  import defu6 from "defu";
4539
- import { existsSync as existsSync10 } from "node:fs";
4540
- import { dirname, join as join5 } from "node:path";
4547
+ import { existsSync as existsSync11 } from "node:fs";
4548
+ import { dirname, join as join6 } from "node:path";
4541
4549
 
4542
4550
  // ../workspace-tools/src/utils/typia-transform.ts
4543
4551
  init_esm_shims();
@@ -4558,7 +4566,7 @@ var generator_default6 = withRunGenerator(
4558
4566
  );
4559
4567
  function addProjenDeps(tree, options) {
4560
4568
  return () => {
4561
- const packageJson = readJsonFile4(`${options.directory}/package.json`);
4569
+ const packageJson = readJsonFile5(`${options.directory}/package.json`);
4562
4570
  packageJson.dependencies["projen"] ??= "^0.91.6";
4563
4571
  if (packageJson) {
4564
4572
  addDependenciesToPackageJson4(
@@ -2693,6 +2693,14 @@ _chunkBG73ZJERjs.init_cjs_shims.call(void 0, );
2693
2693
 
2694
2694
 
2695
2695
 
2696
+
2697
+
2698
+ var _columnify = require('columnify'); var columnify = _interopRequireWildcard(_columnify);
2699
+
2700
+
2701
+ var _npmrunpath = require('npm-run-path');
2702
+
2703
+
2696
2704
  // ../workspace-tools/src/utils/pnpm-deps-update.ts
2697
2705
  _chunkBG73ZJERjs.init_cjs_shims.call(void 0, );
2698
2706
 
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NG74QN4S.js');
2
2
 
3
3
 
4
- var _chunkRRTPMNWOjs = require('./chunk-RRTPMNWO.js');
4
+ var _chunkXXUM5XR7js = require('./chunk-XXUM5XR7.js');
5
5
  require('./chunk-NNSWWAGP.js');
6
6
  require('./chunk-BG73ZJER.js');
7
7
 
8
8
 
9
- exports.initGeneratorFn = _chunkRRTPMNWOjs.initGeneratorFn;
9
+ exports.initGeneratorFn = _chunkXXUM5XR7js.initGeneratorFn;
@@ -1,7 +1,7 @@
1
1
  import "./chunk-ZVRRJOP5.mjs";
2
2
  import {
3
3
  initGeneratorFn
4
- } from "./chunk-VHNXR7ZZ.mjs";
4
+ } from "./chunk-QEFNN2AM.mjs";
5
5
  import "./chunk-PEM26WKS.mjs";
6
6
  import "./chunk-SHIGQSVE.mjs";
7
7
  export {
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  var _chunkDUNMCAJEjs = require('./chunk-DUNMCAJE.js');
5
5
 
6
6
 
7
- var _chunkRRTPMNWOjs = require('./chunk-RRTPMNWO.js');
7
+ var _chunkXXUM5XR7js = require('./chunk-XXUM5XR7.js');
8
8
  require('./chunk-NNSWWAGP.js');
9
9
 
10
10
 
@@ -16,10 +16,10 @@ var _chunkBG73ZJERjs = require('./chunk-BG73ZJER.js');
16
16
  // index.ts
17
17
  var index_exports = {};
18
18
  _chunkBG73ZJERjs.__export.call(void 0, index_exports, {
19
- initGeneratorFn: () => _chunkRRTPMNWOjs.initGeneratorFn
19
+ initGeneratorFn: () => _chunkXXUM5XR7js.initGeneratorFn
20
20
  });
21
21
  _chunkBG73ZJERjs.init_cjs_shims.call(void 0, );
22
22
  _chunkBG73ZJERjs.__reExport.call(void 0, index_exports, _chunkBG73ZJERjs.__toESM.call(void 0, _chunkDUNMCAJEjs.require_components.call(void 0, )));
23
23
 
24
24
 
25
- exports.initGeneratorFn = _chunkRRTPMNWOjs.initGeneratorFn;
25
+ exports.initGeneratorFn = _chunkXXUM5XR7js.initGeneratorFn;
package/dist/index.mjs CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-NVTKHBEW.mjs";
5
5
  import {
6
6
  initGeneratorFn
7
- } from "./chunk-VHNXR7ZZ.mjs";
7
+ } from "./chunk-QEFNN2AM.mjs";
8
8
  import "./chunk-PEM26WKS.mjs";
9
9
  import {
10
10
  __export,
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkRRTPMNWOjs = require('../../../chunk-RRTPMNWO.js');
4
+ var _chunkXXUM5XR7js = require('../../../chunk-XXUM5XR7.js');
5
5
  require('../../../chunk-NNSWWAGP.js');
6
6
  require('../../../chunk-BG73ZJER.js');
7
7
 
8
8
 
9
9
 
10
- exports.default = _chunkRRTPMNWOjs.generator_default; exports.initGeneratorFn = _chunkRRTPMNWOjs.initGeneratorFn;
10
+ exports.default = _chunkXXUM5XR7js.generator_default; exports.initGeneratorFn = _chunkXXUM5XR7js.initGeneratorFn;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  generator_default,
3
3
  initGeneratorFn
4
- } from "../../../chunk-VHNXR7ZZ.mjs";
4
+ } from "../../../chunk-QEFNN2AM.mjs";
5
5
  import "../../../chunk-PEM26WKS.mjs";
6
6
  import "../../../chunk-SHIGQSVE.mjs";
7
7
  export {
package/generators.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./src/generators/init/generator";
2
+ export { type InitGeneratorSchema } from "./src/generators/init/schema.d";
package/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./generators";
2
+ export * from "./src/components";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storm-software/projen",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "type": "commonjs",
5
5
  "description": "Tools for managing Projen configuration automation within a Nx workspace.",
6
6
  "repository": {
package/project.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "projen",
3
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "packages/projen/src",
5
+ "projectType": "library",
6
+ "implicitDependencies": ["workspace-tools", "config-tools", "config"],
7
+ "targets": {
8
+ "build-untyped": {
9
+ "executor": "nx:run-commands",
10
+ "dependsOn": ["clean", "^build"],
11
+ "inputs": [
12
+ "{projectRoot}/src/**/untyped.ts",
13
+ "{projectRoot}/src/**/*.untyped.ts"
14
+ ],
15
+ "outputs": [
16
+ "{projectRoot}/src/**/schema.d.ts",
17
+ "{projectRoot}/src/**/*.schema.d.ts",
18
+ "{projectRoot}/src/**/schema.md",
19
+ "{projectRoot}/src/**/*.schema.md",
20
+ "{projectRoot}/src/**/schema.json",
21
+ "{projectRoot}/src/**/*.schema.json"
22
+ ],
23
+ "options": {
24
+ "commands": [
25
+ "node dist/packages/untyped/bin/untyped.cjs generate --entry=\"packages/projen/**/{untyped.ts,*.untyped.ts}\" "
26
+ ]
27
+ }
28
+ },
29
+ "build-base": {
30
+ "executor": "nx:run-commands",
31
+ "dependsOn": ["build-untyped", "clean", "^build"],
32
+ "options": {
33
+ "command": "tsup-node --config=tsup.config.ts",
34
+ "cwd": "{projectRoot}"
35
+ }
36
+ },
37
+ "build": {
38
+ "executor": "nx:run-commands",
39
+ "dependsOn": ["build-base", "build-untyped"],
40
+ "options": {
41
+ "commands": [
42
+ "pnpm copyfiles LICENSE dist/packages/projen",
43
+ "pnpm copyfiles --up=2 ./packages/projen/*.md ./packages/projen/executors.json ./packages/projen/generators.json ./packages/projen/package.json dist/packages/projen",
44
+ "pnpm copyfiles --up=3 \"./packages/projen/dist/**/*\" dist/packages/projen/dist",
45
+ "pnpm copyfiles --up=3 \"./packages/projen/src/**/*schema.d.ts\" dist/packages/projen/dist/src",
46
+ "pnpm copyfiles --up=3 \"./packages/projen/src/**/*schema.json\" dist/packages/projen/dist/src",
47
+ "pnpm copyfiles --up=3 \"./packages/projen/src/**/*.md\" dist/packages/projen/docs/api",
48
+ "pnpm copyfiles --up=4 \"./packages/projen/src/generators/*/files/**/*\" dist/packages/projen/dist/src/generators"
49
+ ]
50
+ }
51
+ },
52
+
53
+ "nx-release-publish": {
54
+ "executor": "@storm-software/workspace-tools:npm-publish"
55
+ }
56
+ }
57
+ }
File without changes
@@ -0,0 +1,659 @@
1
+ import {
2
+ NX_DEFAULT_BUILD_OUTPUTS as BASE_NX_DEFAULT_BUILD_OUTPUTS,
3
+ NxWorkspace
4
+ } from "@aws/pdk/monorepo/components/nx-workspace";
5
+ import { Nx } from "@aws/pdk/monorepo/nx-types";
6
+ import { ProjectUtils } from "@aws/pdk/monorepo/utils";
7
+ import { asUndefinedIfEmpty } from "@aws/pdk/monorepo/utils/common";
8
+ import { NxJsonConfiguration } from "@nx/devkit";
9
+ import { StormWorkspaceConfig } from "@storm-software/config";
10
+ import { joinPaths } from "@storm-software/config-tools/utilities/correct-paths";
11
+ import { readFileSync } from "node:fs";
12
+ import { JsonFile, Project } from "projen";
13
+ import { Obj } from "projen/lib/util";
14
+
15
+ /**
16
+ * Default NX outputs to cache
17
+ */
18
+ export const NX_DEFAULT_BUILD_OUTPUTS: string[] = [
19
+ ...BASE_NX_DEFAULT_BUILD_OUTPUTS,
20
+ "{workspaceRoot}/dist/{projectRoot}"
21
+ ];
22
+
23
+ /**
24
+ * Component which manages the workspace specific NX Config for the root monorepo.
25
+ */
26
+ export class StormNxWorkspace extends NxWorkspace {
27
+ /**
28
+ * Retrieves the singleton instance associated with project root.
29
+ *
30
+ * @param scope project instance.
31
+ */
32
+ static override of(scope: Project): NxWorkspace | undefined {
33
+ return scope.root.components.find(c =>
34
+ ProjectUtils.isNamedInstanceOf(c, NxWorkspace)
35
+ ) as NxWorkspace | undefined;
36
+ }
37
+
38
+ /**
39
+ * Raw nx.json file to support overrides that aren't handled
40
+ * directly.
41
+ *
42
+ * **Attention:** any overrides applied here will not be visible
43
+ * in the properties and only included in final synthesized output,
44
+ * and likely to override native handling.
45
+ * @advanced
46
+ */
47
+ public override readonly nxJson: JsonFile;
48
+
49
+ /**
50
+ * Automatically infer NxProject targets based on project type.
51
+ * @experimental
52
+ */
53
+ public override autoInferProjectTargets = true;
54
+
55
+ /**
56
+ * List of cacheable operations.
57
+ */
58
+ public override cacheableOperations: string[] = [
59
+ "lint-sherif",
60
+ "lint-knip",
61
+ "lint-ls",
62
+ "lint",
63
+ "format-readme",
64
+ "format-toml",
65
+ "format-prettier",
66
+ "format",
67
+ "clean",
68
+ "build-base",
69
+ "build",
70
+ "test",
71
+ "e2e",
72
+ "docs",
73
+ "nx-release-publish"
74
+ ];
75
+
76
+ /**
77
+ * Some presets use the extends property to hide some default options in a separate json file.
78
+ * The json file specified in the extends property is located in your node_modules folder.
79
+ * The Nx preset files are specified in the nx package.
80
+ *
81
+ * @default "@storm-software/workspace-tools/config/base.json"
82
+ */
83
+ public override extends = "@storm-software/workspace-tools/config/base.json";
84
+
85
+ /**
86
+ * Plugins for extending the project graph
87
+ */
88
+ public nxPlugins: NxJsonConfiguration["plugins"] = [
89
+ {
90
+ plugin: "@nx/eslint/plugin",
91
+ exclude: ["packages/**/__fixtures__/**/*"],
92
+ options: {
93
+ targetName: "lint",
94
+ useFlatConfig: true
95
+ }
96
+ },
97
+ "@storm-software/workspace-tools/plugins/typescript",
98
+ "@storm-software/workspace-tools/plugins/typescript/untyped",
99
+ "@storm-software/workspace-tools/plugins/typescript/tsup"
100
+ ];
101
+
102
+ /**
103
+ * Default options for `nx affected`
104
+ */
105
+ public override affected: Nx.INxAffectedConfig = {
106
+ defaultBase: "main"
107
+ };
108
+
109
+ /**
110
+ * Named inputs
111
+ * @see https://nx.dev/reference/nx-json#inputs-&-namedinputs
112
+ */
113
+ public override namedInputs: Nx.INamedInputs = {
114
+ // https://nx.dev/more-concepts/customizing-inputs#defaults
115
+ sharedGlobals: [
116
+ "{workspaceRoot}/.github/**/*",
117
+ "{workspaceRoot}/assets/**/*",
118
+ "{workspaceRoot}/tsconfig.*.json",
119
+ "{workspaceRoot}/.npmrc",
120
+ "{workspaceRoot}/.npmignore",
121
+ "{workspaceRoot}/package.json",
122
+ "{workspaceRoot}/pnpm-workspace.yaml",
123
+ "{workspaceRoot}/pnpm-lock.yaml",
124
+ "{workspaceRoot}/package-lock.yaml",
125
+ "{workspaceRoot}/yarn-lock.yaml",
126
+ "{workspaceRoot}/bun.lockb",
127
+ "{workspaceRoot}/LICENSE",
128
+ "{workspaceRoot}/.gitattributes",
129
+ "{workspaceRoot}/.gitignore",
130
+ "{workspaceRoot}/nx.json",
131
+ "{workspaceRoot}/.nxignore",
132
+ "{workspaceRoot}/storm-workspace.json",
133
+ "{workspaceRoot}/storm-workspace.*.json",
134
+ "{workspaceRoot}/.storm-workspace/config.json",
135
+ "{workspaceRoot}/.storm-workspace/config.*.json",
136
+ "{workspaceRoot}/storm-workspace.yaml",
137
+ "{workspaceRoot}/storm-workspace.*.yaml",
138
+ "{workspaceRoot}/.storm-workspace/config.yaml",
139
+ "{workspaceRoot}/.storm-workspace/config.*.yaml",
140
+ "{workspaceRoot}/storm-workspace.toml",
141
+ "{workspaceRoot}/storm-workspace.*.toml",
142
+ "{workspaceRoot}/.storm-workspace/config.toml",
143
+ "{workspaceRoot}/.storm-workspace/config.*.toml",
144
+ "{workspaceRoot}/storm-workspace.config.js",
145
+ "{workspaceRoot}/.storm-workspace/config.js",
146
+ "{workspaceRoot}/.storm-workspace/config.*.js",
147
+ "{workspaceRoot}/storm-workspace.config.ts",
148
+ "{workspaceRoot}/.storm-workspace/config.ts",
149
+ "{workspaceRoot}/.storm-workspace/config.*.ts",
150
+ "{workspaceRoot}/.env",
151
+ "{workspaceRoot}/.env.local"
152
+ ],
153
+ default: ["sharedGlobals", "{projectRoot}/**/*"],
154
+ production: [
155
+ "{projectRoot}/**/*",
156
+ "!{projectRoot}/tools/**/*",
157
+ "!{projectRoot}/scripts/**/*",
158
+ "!{projectRoot}/node_modules/**/*",
159
+ "!{projectRoot}/api-extractor.json",
160
+ "!{projectRoot}/tsdoc.json",
161
+ "!{projectRoot}/typedoc.json",
162
+ "!{projectRoot}/.eslint-doc-generatorrc.js",
163
+ "!{projectRoot}/.eslint-doc-generatorrc.json",
164
+ "!{projectRoot}/.storybook/**/*",
165
+ "!{projectRoot}/tsconfig.storybook.json",
166
+ "!{projectRoot}/jest.config.ts",
167
+ "!{projectRoot}/tsconfig.spec.json",
168
+ "!{projectRoot}/src/test-setup.[jt]s",
169
+ "!{projectRoot}/test-setup.[jt]s",
170
+ "!{projectRoot}/tsconfig.spec.json",
171
+ "!{projectRoot}/.eslintignore",
172
+ "!{projectRoot}/.eslintrc.json",
173
+ "!{projectRoot}/.eslintrc.cjs",
174
+ "!{projectRoot}/eslint.config.js",
175
+ "!{projectRoot}/eslint.config.cjs",
176
+ "!{projectRoot}/eslint.config.mjs",
177
+ "!{projectRoot}/biome.toml",
178
+ "!{projectRoot}/biome.json",
179
+ "!{projectRoot}/lefthook.yaml",
180
+ "!{projectRoot}/.markdownlint.json",
181
+ "!{projectRoot}/.markdownlint-cli2.cjs",
182
+ "!{projectRoot}/.prettierrc",
183
+ "!{projectRoot}/.prettierignore",
184
+ "!{projectRoot}/docs/**/*",
185
+ "!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
186
+ "!{projectRoot}/benches/**/*",
187
+ "!{projectRoot}/e2e/**/*",
188
+ "!{projectRoot}/tests/**/*",
189
+ "!{projectRoot}/testing/**/*",
190
+ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
191
+ "!{projectRoot}/tsconfig.spec.json"
192
+ ],
193
+ testing: [
194
+ "sharedGlobals",
195
+ "{workspaceRoot}/jest.config.ts",
196
+ "{workspaceRoot}/jest.preset.js",
197
+ "{workspaceRoot}/benches/**/*",
198
+ "{workspaceRoot}/e2e/**/*",
199
+ "{workspaceRoot}/tests/**/*",
200
+ "{workspaceRoot}/testing/**/*",
201
+ "{workspaceRoot}/coverage/**/*",
202
+ "{projectRoot}/project.json",
203
+ "{projectRoot}/README.md",
204
+ "{projectRoot}/CHANGELOG.md",
205
+ "{projectRoot}/.env",
206
+ "{projectRoot}/.env.local",
207
+ "{projectRoot}/jest.config.ts",
208
+ "{projectRoot}/tsconfig.spec.json",
209
+ "{projectRoot}/src/test-setup.[jt]s",
210
+ "{projectRoot}/test-setup.[jt]s",
211
+ "{projectRoot}/tsconfig.spec.json",
212
+ "{workspaceRoot}/jest.config.ts",
213
+ "{workspaceRoot}/jest.preset.js",
214
+ "{workspaceRoot}/benches/**/*",
215
+ "{workspaceRoot}/e2e/**/*",
216
+ "{workspaceRoot}/tests/**/*",
217
+ "{workspaceRoot}/testing/**/*",
218
+ "{workspaceRoot}/coverage/**/*",
219
+ "{projectRoot}/benches/**/*",
220
+ "{projectRoot}/e2e/**/*",
221
+ "{projectRoot}/tests/**/*",
222
+ "{projectRoot}/testing/**/*",
223
+ "{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
224
+ "{projectRoot}/tsconfig.spec.json"
225
+ ],
226
+ linting: [
227
+ "sharedGlobals",
228
+ "{workspaceRoot}/.eslintignore",
229
+ "{workspaceRoot}/eslintrc.json",
230
+ "{workspaceRoot}/.eslintrc.json",
231
+ "{workspaceRoot}/.eslintrc.cjs",
232
+ "{workspaceRoot}/eslint.config.js",
233
+ "{workspaceRoot}/eslint.config.cjs",
234
+ "{workspaceRoot}/eslint.config.mjs",
235
+ "{workspaceRoot}/biome.toml",
236
+ "{workspaceRoot}/biome.json",
237
+ "{workspaceRoot}/lefthook.yaml",
238
+ "{workspaceRoot}/.markdownlint.json",
239
+ "{workspaceRoot}/.markdownlint-cli2.cjs",
240
+ "{workspaceRoot}/.prettierrc",
241
+ "{workspaceRoot}/prettier.config.js",
242
+ "{workspaceRoot}/.prettierignore",
243
+ "{projectRoot}/project.json",
244
+ "{projectRoot}/README.md",
245
+ "{projectRoot}/CHANGELOG.md",
246
+ "{projectRoot}/.env",
247
+ "{projectRoot}/.env.local",
248
+ "{projectRoot}/.eslintignore",
249
+ "{projectRoot}/.eslintrc",
250
+ "{projectRoot}/.eslintrc.json",
251
+ "{projectRoot}/.eslintrc.cjs",
252
+ "{projectRoot}/eslint.config.js",
253
+ "{projectRoot}/eslint.config.cjs",
254
+ "{projectRoot}/eslint.config.mjs",
255
+ "{projectRoot}/biome.toml",
256
+ "{projectRoot}/biome.json",
257
+ "{projectRoot}/lefthook.yaml",
258
+ "{projectRoot}/.markdownlint.json",
259
+ "{projectRoot}/.markdownlint-cli2.cjs",
260
+ "{projectRoot}/.prettierrc",
261
+ "{projectRoot}/.prettierignore"
262
+ ],
263
+ documentation: [
264
+ "sharedGlobals",
265
+ "{workspaceRoot}/api-extractor.json",
266
+ "{workspaceRoot}/tsdoc.json",
267
+ "{workspaceRoot}/typedoc.json",
268
+ "{workspaceRoot}/.eslint-doc-generatorrc.js",
269
+ "{workspaceRoot}/.eslint-doc-generatorrc.json",
270
+ "{workspaceRoot}/contentlayer.config.ts",
271
+ "{workspaceRoot}/*.md",
272
+ "{workspaceRoot}/*.mdx",
273
+ "{workspaceRoot}/docs/**/*",
274
+ "{workspaceRoot}/.storybook/**/*",
275
+ "{projectRoot}/project.json",
276
+ "{projectRoot}/README.md",
277
+ "{projectRoot}/CHANGELOG.md",
278
+ "{projectRoot}/.env",
279
+ "{projectRoot}/.env.local",
280
+ "{projectRoot}/api-extractor.json",
281
+ "{projectRoot}/tsdoc.json",
282
+ "{projectRoot}/typedoc.json",
283
+ "{projectRoot}/.eslint-doc-generatorrc.js",
284
+ "{projectRoot}/.eslint-doc-generatorrc.json",
285
+ "{projectRoot}/contentlayer.config.ts",
286
+ "{projectRoot}/.storybook/**/*",
287
+ "{projectRoot}/tsconfig.storybook.json",
288
+ "{projectRoot}/README.md",
289
+ "{projectRoot}/docs/**/*",
290
+ "{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
291
+ "!{projectRoot}/benches/**/*",
292
+ "!{projectRoot}/e2e/**/*",
293
+ "!{projectRoot}/tests/**/*",
294
+ "!{projectRoot}/testing/**/*",
295
+ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
296
+ "!{projectRoot}/tsconfig.spec.json"
297
+ ],
298
+ rust: [
299
+ "sharedGlobals",
300
+ "{workspaceRoot}/Cargo.toml",
301
+ "{workspaceRoot}/Cargo.lock",
302
+ "{workspaceRoot}/.cargo/config.toml",
303
+ "{workspaceRoot}/rust-toolchain",
304
+ "{workspaceRoot}/rustfmt.toml",
305
+ "{workspaceRoot}/deny.toml",
306
+ "{projectRoot}/Cargo.toml",
307
+ "{projectRoot}/.cargo/config.toml",
308
+ "{projectRoot}/project.json",
309
+ "{projectRoot}/README.md",
310
+ "{projectRoot}/CHANGELOG.md",
311
+ "{projectRoot}/.env",
312
+ "{projectRoot}/.env.local",
313
+ "{projectRoot}/**/*.rs",
314
+ "{projectRoot}/**/*.proto",
315
+ "{projectRoot}/**/*.acid",
316
+ "{projectRoot}/**/*.acidic",
317
+ "{projectRoot}/**/*.prisma",
318
+ "{projectRoot}/src/**/*.json",
319
+ "{projectRoot}/src/**/*.jsonc",
320
+ "{projectRoot}/src/**/*.yaml",
321
+ "{projectRoot}/src/**/*.yml",
322
+ "{projectRoot}/src/**/*.toml",
323
+ "!{projectRoot}/README.md",
324
+ "!{projectRoot}/docs/**/*",
325
+ "!{projectRoot}/benches/**/*",
326
+ "!{projectRoot}/e2e/**/*",
327
+ "!{projectRoot}/tests/**/*",
328
+ "!{projectRoot}/testing/**/*"
329
+ ],
330
+ typescript: [
331
+ "sharedGlobals",
332
+ "!{projectRoot}/tsconfig.spec.json",
333
+ "!{projectRoot}/tsconfig.storybook.json",
334
+ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
335
+ "!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
336
+ "!{projectRoot}/node_modules/**/*",
337
+ "!{projectRoot}/benches/**/*",
338
+ "!{projectRoot}/e2e/**/*",
339
+ "!{projectRoot}/tests/**/*",
340
+ "!{projectRoot}/testing/**/*",
341
+ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
342
+ "!{projectRoot}/tsconfig.spec.json",
343
+ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
344
+ "!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
345
+ "!{projectRoot}/node_modules/**/*",
346
+ "{projectRoot}/package.json",
347
+ "{projectRoot}/tsconfig.json",
348
+ "{projectRoot}/tsconfig.*.json",
349
+ "{projectRoot}/project.json",
350
+ "{projectRoot}/README.md",
351
+ "{projectRoot}/CHANGELOG.md",
352
+ "{projectRoot}/.env",
353
+ "{projectRoot}/.env.*",
354
+ "{projectRoot}/README.md",
355
+ "{projectRoot}/docs/**/*",
356
+ "{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
357
+ "{projectRoot}/**/*.proto",
358
+ "{projectRoot}/**/*.acid",
359
+ "{projectRoot}/**/*.acidic",
360
+ "{projectRoot}/**/*.prisma",
361
+ "{projectRoot}/src/**/*.cts",
362
+ "{projectRoot}/src/**/*.mts",
363
+ "{projectRoot}/src/**/*.ts",
364
+ "{projectRoot}/src/**/*.tsx",
365
+ "{projectRoot}/src/**/*.graphql",
366
+ "{projectRoot}/src/**/*.gql",
367
+ "{projectRoot}/src/**/*.js",
368
+ "{projectRoot}/src/**/*.cjs",
369
+ "{projectRoot}/src/**/*.mjs",
370
+ "{projectRoot}/src/**/*.jsx",
371
+ "{projectRoot}/src/**/*.json",
372
+ "{projectRoot}/src/**/*.jsonc",
373
+ "{projectRoot}/src/**/*.yaml",
374
+ "{projectRoot}/src/**/*.yml",
375
+ "{projectRoot}/src/**/*.toml",
376
+ "{projectRoot}/src/**/*.md",
377
+ "{projectRoot}/src/**/*.mdx",
378
+ "{projectRoot}/build.*.[jt]s?(x)",
379
+ "{projectRoot}/tsup.*.[jt]s?(x)",
380
+ "{projectRoot}/contentlayer.*.[jt]s?(x)",
381
+ "{projectRoot}/bin/**/*",
382
+ "{projectRoot}/tools/**/*",
383
+ "{projectRoot}/helpers/**/*",
384
+ "{projectRoot}/scripts/**/*"
385
+ ]
386
+ };
387
+
388
+ /**
389
+ * Dependencies between different target names across all projects
390
+ *
391
+ * @see https://nx.dev/reference/nx-json#target-defaults
392
+ */
393
+ public override targetDefaults: Nx.ITargetDefaults = {
394
+ "lint-ls": {
395
+ outputs: ["{projectRoot}/**/*"],
396
+ inputs: ["linting", "default", "^production"],
397
+ dependsOn: ["^lint-ls"],
398
+ executor: "nx:run-commands",
399
+ options: {
400
+ command:
401
+ 'pnpm exec ls-lint --config="./node_modules/@storm-software/linting-tools/ls-lint/.ls-lint.yml" ',
402
+ color: true
403
+ }
404
+ },
405
+ "lint-sherif": {
406
+ outputs: ["{projectRoot}/package.json"],
407
+ inputs: ["{workspaceRoot}/package.json", "{projectRoot}/package.json"],
408
+ executor: "nx:run-commands",
409
+ options: {
410
+ command: "pnpm exec sherif -i react -i react-dom -i typescript"
411
+ }
412
+ },
413
+ "lint-knip": {
414
+ inputs: ["linting", "default", "^production"],
415
+ executor: "nx:run-commands",
416
+ options: {
417
+ command: "pnpm exec knip"
418
+ }
419
+ },
420
+ lint: {
421
+ outputs: ["{projectRoot}"],
422
+ inputs: ["linting", "default", "^production"],
423
+ dependsOn: ["lint-ls", "lint-sherif", "lint-knip", "lint-docs", "^lint"],
424
+ executor: "nx:run-commands",
425
+ options: {
426
+ command: 'echo Linted the project files in "{projectRoot}" '
427
+ }
428
+ },
429
+ "format-toml": {
430
+ inputs: ["linting", "{projectRoot}/**/*.toml"],
431
+ outputs: ["{projectRoot}/**/*.toml"],
432
+ dependsOn: ["^format-toml"],
433
+ executor: "nx:run-commands",
434
+ options: {
435
+ command:
436
+ 'pnpm exec taplo format --colors="always" --config="./node_modules/@storm-software/linting-tools/taplo/config.toml" --cache-path="./tmp/taplo/{projectRoot}"',
437
+ color: true
438
+ }
439
+ },
440
+ "format-readme": {
441
+ inputs: [
442
+ "linting",
443
+ "documentation",
444
+ "{projectRoot}/{README.md,package.json,Cargo.toml,executors.json,generators.json}",
445
+ "default",
446
+ "^production"
447
+ ],
448
+ outputs: ["{projectRoot}/README.md"],
449
+ dependsOn: ["^format-readme"],
450
+ executor: "nx:run-commands",
451
+ options: {
452
+ command:
453
+ 'pnpm exec storm-git readme-gen --templates="./tools/readme-templates" --project="{projectName}"',
454
+ color: true
455
+ }
456
+ },
457
+ "format-prettier": {
458
+ inputs: ["linting", "default", "^production"],
459
+ dependsOn: ["^format-prettier"],
460
+ executor: "nx:run-commands",
461
+ options: {
462
+ command:
463
+ 'pnpm exec prettier "{projectRoot}/**/*" --write --ignore-unknown --no-error-on-unmatched-pattern --config="./node_modules/@storm-software/prettier/config.json" --ignore-path="./node_modules/@storm-software/prettier/.prettierignore" --cache --cache-location="./tmp/prettier/{projectRoot}" ',
464
+ color: true
465
+ }
466
+ },
467
+ format: {
468
+ inputs: ["linting", "default", "^production"],
469
+ outputs: ["{projectRoot}"],
470
+ dependsOn: ["format-toml", "format-readme", "format-prettier", "^format"],
471
+ executor: "nx:run-commands",
472
+ options: {
473
+ command: 'echo Formatted the project files in "{projectRoot}" '
474
+ }
475
+ },
476
+ clean: {
477
+ inputs: ["default", "^production"],
478
+ outputs: NX_DEFAULT_BUILD_OUTPUTS,
479
+ dependsOn: ["^clean"],
480
+ executor: "nx:run-commands",
481
+ options: {
482
+ commands: [
483
+ "pnpm exec rimraf --glob {projectRoot}/dist",
484
+ "pnpm exec rimraf dist/{projectRoot}"
485
+ ]
486
+ }
487
+ },
488
+ "build-untyped": {
489
+ dependsOn: ["^build"]
490
+ },
491
+ "build-base": {
492
+ dependsOn: ["build-untyped", "^build"]
493
+ },
494
+ "build-local": {
495
+ inputs: ["default", "^production"],
496
+ dependsOn: ["build-base", "build-untyped", "^build"]
497
+ },
498
+ build: {
499
+ inputs: ["default", "^production"],
500
+ outputs: NX_DEFAULT_BUILD_OUTPUTS,
501
+ dependsOn: ["build-base", "build-untyped", "^build"]
502
+ },
503
+ rebuild: {
504
+ inputs: ["default", "^production"],
505
+ executor: "nx:run-commands",
506
+ dependsOn: ["clean", "^build"],
507
+ options: {
508
+ command: "pnpm exec nx run {projectName}:build",
509
+ color: true,
510
+ cwd: "{workspaceRoot}"
511
+ }
512
+ },
513
+ docs: {
514
+ outputs: ["{options.outputPath}"],
515
+ inputs: ["linting", "documentation", "default", "^production"],
516
+ dependsOn: ["build", "format-readme", "lint-docs", "^docs"]
517
+ },
518
+ test: {
519
+ inputs: ["testing", "default", "^production"],
520
+ dependsOn: ["build", "^test"]
521
+ },
522
+ e2e: {
523
+ inputs: ["testing", "default", "^production"],
524
+ dependsOn: ["test", "^e2e"]
525
+ },
526
+ "nx-release-publish": {
527
+ inputs: ["default", "^production"],
528
+ dependsOn: ["build", "^nx-release-publish"]
529
+ }
530
+ };
531
+
532
+ /**
533
+ * Configuration for Nx releases
534
+ */
535
+ public release: Obj<any> = {};
536
+
537
+ /**
538
+ * The number of parallel tasks to run.
539
+ *
540
+ * @defaultValue 5
541
+ */
542
+ public parallel = 5;
543
+
544
+ /**
545
+ * Should the daemon be used to run tasks?
546
+ *
547
+ * @defaultValue true
548
+ */
549
+ public useDaemonProcess = true;
550
+
551
+ /**
552
+ * Set this to false to disable adding inference plugins when generating new projects
553
+ *
554
+ * @defaultValue true
555
+ */
556
+ public useInferencePlugins = true;
557
+
558
+ /**
559
+ * The default base branch for new projects.
560
+ *
561
+ * @defaultValue "main"
562
+ */
563
+ public defaultBase = "main";
564
+
565
+ /**
566
+ * The CLI configuration for the workspace.
567
+ */
568
+ public cli: NxJsonConfiguration["cli"] | undefined;
569
+
570
+ constructor(project: Project) {
571
+ super(project);
572
+
573
+ let StormWorkspaceConfig!: StormWorkspaceConfig;
574
+ if (project.root.outdir) {
575
+ const StormWorkspaceConfigJson = readFileSync(
576
+ joinPaths(project.root.outdir, "storm-workspace.json"),
577
+ "utf8"
578
+ );
579
+ StormWorkspaceConfig = JSON.parse(StormWorkspaceConfigJson);
580
+ }
581
+
582
+ if (StormWorkspaceConfig?.namespace) {
583
+ this.npmScope = StormWorkspaceConfig?.namespace;
584
+ }
585
+
586
+ if (StormWorkspaceConfig?.branch) {
587
+ this.defaultBase = StormWorkspaceConfig?.branch;
588
+ this.affected = {
589
+ defaultBase: StormWorkspaceConfig?.branch
590
+ };
591
+ }
592
+
593
+ if (StormWorkspaceConfig?.packageManager) {
594
+ this.cli = {
595
+ packageManager: StormWorkspaceConfig?.packageManager
596
+ };
597
+ }
598
+
599
+ this.nxJson = new JsonFile(project, "nx.json", {
600
+ obj: {
601
+ extends: () => this.extends,
602
+ npmScope: () => this.npmScope,
603
+ affected: () => asUndefinedIfEmpty(this.affected),
604
+ workspaceLayout: () => asUndefinedIfEmpty(this.workspaceLayout),
605
+ plugins: () => asUndefinedIfEmpty(this.nxPlugins),
606
+ namedInputs: () => asUndefinedIfEmpty(this.namedInputs),
607
+ targetDefaults: () => asUndefinedIfEmpty(this.targetDefaults),
608
+ tasksRunnerOptions: () => asUndefinedIfEmpty(this.tasksRunnerOptions),
609
+ parallel: () => this.parallel,
610
+ useDaemonProcess: () => this.useDaemonProcess,
611
+ useInferencePlugins: () => this.useInferencePlugins,
612
+ release: () => asUndefinedIfEmpty(this.release)
613
+ }
614
+ });
615
+ }
616
+
617
+ /**
618
+ * Adds a release group to the workspace.
619
+ *
620
+ * @param name The name of the release group
621
+ * @param projects The projects in the release group
622
+ * @param projectsRelationship The relationship between the projects
623
+ * @param releaseTagPattern The release tag pattern
624
+ * @param groupPreVersionCommand The command to run before versioning
625
+ */
626
+ public addReleaseGroup(
627
+ name: string,
628
+ projects: string[] | string,
629
+ projectsRelationship: "fixed" | "independent" = "independent",
630
+ releaseTagPattern = "{projectName}@{version}",
631
+ groupPreVersionCommand = "pnpm build"
632
+ ) {
633
+ this.release ??= {
634
+ groups: {},
635
+ changelog: {
636
+ entryWhenNoChanges: false,
637
+ renderOptions: {
638
+ authors: false,
639
+ commitReferences: true,
640
+ versionTitleDate: true
641
+ }
642
+ }
643
+ };
644
+
645
+ this.release.groups[name] = {
646
+ projects,
647
+ projectsRelationship,
648
+ releaseTagPattern,
649
+ version: {
650
+ groupPreVersionCommand,
651
+ generator: "@storm-software/workspace-tools:release-version",
652
+ generatorOptions: {
653
+ currentVersionResolver: "git-tag",
654
+ specifierSource: "conventional-commits"
655
+ }
656
+ }
657
+ };
658
+ }
659
+ }
@@ -0,0 +1,53 @@
1
+ import {
2
+ addDependenciesToPackageJson,
3
+ formatFiles,
4
+ GeneratorCallback,
5
+ readJsonFile,
6
+ runTasksInSerial,
7
+ type Tree
8
+ } from "@nx/devkit";
9
+ import { StormWorkspaceConfig } from "@storm-software/config";
10
+ import {
11
+ initGenerator as baseInitGenerator,
12
+ withRunGenerator
13
+ } from "@storm-software/workspace-tools";
14
+ import type { InitGeneratorSchema } from "./schema";
15
+
16
+ export async function initGeneratorFn(
17
+ tree: Tree,
18
+ options: InitGeneratorSchema,
19
+ config: StormWorkspaceConfig
20
+ ) {
21
+ const task = baseInitGenerator(tree, options);
22
+
23
+ await runTasksInSerial(addProjenDeps(tree, options))();
24
+
25
+ if (!options.skipFormat) {
26
+ await formatFiles(tree);
27
+ }
28
+
29
+ return task;
30
+ }
31
+
32
+ export default withRunGenerator<InitGeneratorSchema>(
33
+ "Initialize Storm Projen workspace",
34
+ initGeneratorFn
35
+ );
36
+
37
+ function addProjenDeps(
38
+ tree: Tree,
39
+ options: InitGeneratorSchema
40
+ ): GeneratorCallback {
41
+ return () => {
42
+ const packageJson = readJsonFile(`${options.directory}/package.json`);
43
+ packageJson.dependencies["projen"] ??= "^0.91.6";
44
+
45
+ if (packageJson) {
46
+ addDependenciesToPackageJson(
47
+ tree,
48
+ packageJson.dependencies || {},
49
+ packageJson.devDependencies || {}
50
+ )();
51
+ }
52
+ };
53
+ }
@@ -0,0 +1,25 @@
1
+ import baseGeneratorSchema from "@storm-software/workspace-tools/base/base-generator.untyped";
2
+ import { defineUntypedSchema } from "untyped";
3
+
4
+ export default defineUntypedSchema({
5
+ ...baseGeneratorSchema,
6
+ $schema: {
7
+ id: "InitGeneratorSchema",
8
+ title: "Init Generator",
9
+ description: "A type definition for the Projen init generator schema",
10
+ },
11
+ directory: {
12
+ $schema: {
13
+ title: "Directory",
14
+ type: "string",
15
+ description: "The directory to initialize the workspace in",
16
+ },
17
+ },
18
+ skipFormat: {
19
+ $schema: {
20
+ title: "Skip Format",
21
+ type: "boolean",
22
+ description: "Skip formatting the generated files",
23
+ },
24
+ },
25
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "rootDir": "../..",
6
+ "target": "ESNext",
7
+ "module": "ESNext",
8
+ "lib": ["ESNext"],
9
+ "skipLibCheck": true,
10
+ "skipDefaultLibCheck": true,
11
+ "moduleResolution": "Bundler",
12
+ "moduleDetection": "force",
13
+ "types": ["node"]
14
+ },
15
+ "include": [
16
+ "executors.ts",
17
+ "generators.ts",
18
+ "index.ts",
19
+ "src/**/*.ts",
20
+ "src/**/*.d.ts",
21
+ "src/**/*.json",
22
+ "tsup.config.ts"
23
+ ],
24
+ "exclude": [
25
+ "jest.config.ts",
26
+ "src/generators/**/files/**/*",
27
+ "src/**/*.spec.ts",
28
+ "src/**/*.test.ts"
29
+ ]
30
+ }
package/tsup.config.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { defineConfig } from "tsup";
2
+
3
+ export default defineConfig([
4
+ {
5
+ name: "projen",
6
+ target: "node22",
7
+ entryPoints: [
8
+ "./*.ts",
9
+ "./src/components/*.ts",
10
+ "./src/executors/*/executor.ts",
11
+ "./src/generators/*/generator.ts",
12
+ ],
13
+ outDir: "dist",
14
+ format: ["cjs", "esm"],
15
+ platform: "node",
16
+ splitting: true,
17
+ clean: true,
18
+ dts: true,
19
+ sourcemap: false,
20
+ shims: true,
21
+ tsconfig: "./tsconfig.json",
22
+ },
23
+ ]);
File without changes
File without changes
File without changes