@storm-software/git-tools 2.124.63 → 2.124.65
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/bin/{chunk-LHLRRAC7.cjs → chunk-GU6JHGME.cjs} +55 -3
- package/bin/chunk-GU6JHGME.cjs.map +1 -0
- package/bin/{chunk-SH7GWQRX.js → chunk-SAG2FKFE.js} +55 -4
- package/bin/chunk-SAG2FKFE.js.map +1 -0
- package/bin/git.cjs +82 -79
- package/bin/git.cjs.map +1 -1
- package/bin/git.js +10 -7
- package/bin/git.js.map +1 -1
- package/bin/post-checkout.cjs +9 -9
- package/bin/post-checkout.js +1 -1
- package/bin/post-commit.cjs +9 -9
- package/bin/post-commit.js +1 -1
- package/bin/post-merge.cjs +9 -9
- package/bin/post-merge.js +1 -1
- package/bin/pre-commit.cjs +9 -9
- package/bin/pre-commit.js +1 -1
- package/bin/pre-install.cjs +9 -9
- package/bin/pre-install.js +1 -1
- package/bin/pre-push.cjs +13 -13
- package/bin/pre-push.js +1 -1
- package/bin/prepare.cjs +7 -7
- package/bin/prepare.js +1 -1
- package/bin/version-warning.cjs +5 -5
- package/bin/version-warning.js +1 -1
- package/package.json +5 -5
- package/bin/chunk-LHLRRAC7.cjs.map +0 -1
- package/bin/chunk-SH7GWQRX.js.map +0 -1
package/bin/git.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../config-tools/src/utilities/toml.ts","../../../conventional-changelog/src/commit-types.ts","../../../conventional-changelog/src/utilities/constants.ts","../../../conventional-changelog/src/configs/minimal.ts","../../../conventional-changelog/src/configs/monorepo.ts","../../../conventional-changelog/src/configs/index.ts","../../../conventional-changelog/src/utilities/nx-scopes.ts","../../../conventional-changelog/src/index.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/regex.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/utils.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/options.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/CommitParser.ts","../../src/commitlint/lint.ts","../../src/commitlint/run.ts","../../src/types.ts","../../src/commit/config/minimal.ts","../../src/commit/config/monorepo.ts","../../src/commit/commit-state.ts","../../src/commit/format-commit-message.ts","../../src/commit/run.ts","../../src/utilities/file-utils.ts","../../src/readme/transform.ts","../../src/readme/doctoc.ts","../../src/readme/nx-docs.ts","../../src/readme/utils.ts","../../src/readme/run.ts","../../src/utilities/title-case.ts","../../src/utilities/changelog-utils.ts","../../src/utilities/git-utils.ts","../../src/utilities/omit.ts","../../src/release/github.ts","../../src/release/changelog-renderer.ts","../../src/release/config.ts","../../src/release/release-client.ts","../../src/release/run.ts","../../src/cli/index.ts","../../bin/git.ts"],"names":["TOML","changelogs","commitlint","config","projectGraph","readCachedProjectGraph","createProjectGraphAsync","readProjectsConfigurationFromProjectGraph","getWorkspaceConfig","defu","createBasePreset","defaultRules","util","valid","message","writeInfo","joinPaths","existsSync","readFile","childProcess","writeWarning","writeDebug","writeSuccess","minimal_default","monorepo_default","execSync","_","chalkTemplate","format","wrap","shellescape","fs","run","default","Path","anchor","Syntax","parse","updateSection","x","Parser","readFileSync","writeFileSync","statSync","extname","join","process","res","readdirSync","name","result","required","start","end","output","rmSync","prettier","resolveConfig","STORM_DEFAULT_RELEASE_BANNER","interpolate","shouldPreferDockerVersionForReleaseGroup","ReleaseVersion","chalk","printAndFlushChanges","noDiffInChangelogMessage","getGitDiff","parseCommits","isPrerelease","prerelease","execCommand","isVerbose","gitAdd","GithubRemoteReleaseClient","defaultCreateReleaseProvider","joinPathFragments","homedir","fsp","axios","DefaultChangelogRenderer","DEFAULT_CONVENTIONAL_COMMITS_CONFIG","major","ReleaseClient","nxJson","readNxJson","FsTree","getCommitHash","getLatestGitTagForPattern","getFirstGitCommit","createFileMapUsingProjectGraph","createGitTagValues","handleDuplicateGitTags","createCommitMessageValues","gitPush","writeFatal","writeTrace","writeFile","findWorkspaceRootSafe","Command","getConfig","handleProcess","exitWithSuccess","exitWithError"],"mappings":"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CA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EA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","file":"git.cjs","sourcesContent":["import TOML from \"@ltd/j-toml\";\nimport { writeError } from \"../logger\";\n\nexport interface CargoToml {\n // Workspace is only applicable to the root Cargo.toml\n workspace?: { members: string[] };\n package: any;\n dependencies?: Record<\n string,\n string | { version: string; features?: string[]; optional?: boolean }\n >;\n \"dev-dependencies\"?: Record<\n string,\n string | { version: string; features: string[] }\n >;\n [key: string]: any;\n}\n\nexport interface CargoMetadata {\n packages: Package[];\n workspace_members: string[];\n resolve: Resolve;\n target_directory: string;\n version: number;\n workspace_root: string;\n metadata: Metadata2;\n}\n\nexport interface Package {\n name: string;\n version: string;\n id: string;\n license: string;\n license_file: string;\n description: string;\n source: any;\n dependencies: Dependency[];\n targets: Target[];\n features: Features;\n manifest_path: string;\n metadata: Metadata;\n /**\n * From the docs:\n * \"List of registries to which this package may be published.\n * Publishing is unrestricted if null, and forbidden if an empty array.\"\n *\n * Additional observation:\n * false can be used by the end user but it will be converted to an empty\n * array in the cargo metadata output.\n */\n publish?: string[] | boolean | null;\n authors: string[];\n categories: string[];\n default_run: any;\n rust_version: string;\n keywords: string[];\n readme: string;\n repository: string;\n homepage: string;\n documentation: string;\n edition: string;\n links: any;\n}\n\nexport interface Dependency {\n name: string;\n source: string;\n req: string;\n kind: any;\n rename: any;\n optional: boolean;\n uses_default_features: boolean;\n features: any[];\n target: string;\n path: string;\n registry: any;\n workspace: boolean;\n}\n\nexport interface Target {\n kind: string[];\n crate_types: string[];\n name: string;\n src_path: string;\n edition: string;\n \"required-features\": string[];\n doc: boolean;\n doctest: boolean;\n test: boolean;\n}\n\nexport interface Features {\n default: string[];\n feat1: any[];\n feat2: any[];\n}\n\nexport interface Metadata {\n docs: Docs;\n}\n\nexport interface Docs {\n rs: Rs;\n}\n\nexport interface Rs {\n \"all-features\": boolean;\n}\n\nexport interface Resolve {\n nodes: Node[];\n root: string;\n}\n\nexport interface Node {\n id: string;\n dependencies: string[];\n deps: Dep[];\n features: string[];\n}\n\nexport interface Dep {\n name: string;\n pkg: string;\n dep_kinds: DepKind[];\n}\n\nexport interface DepKind {\n kind: any;\n target: string;\n}\n\nexport interface Metadata2 {\n docs: Docs2;\n}\n\nexport interface Docs2 {\n rs: Rs2;\n}\n\nexport interface Rs2 {\n \"all-features\": boolean;\n}\n\n/**\n * Virtual file system tree.\n */\nexport interface Tree {\n /**\n * Root of the workspace. All paths are relative to this.\n */\n root: string;\n /**\n * Read the contents of a file.\n * @param filePath A path to a file.\n */\n read(filePath: string): Buffer | null;\n /**\n * Read the contents of a file as string.\n * @param filePath A path to a file.\n * @param encoding the encoding for the result\n */\n read(filePath: string, encoding: BufferEncoding): string | null;\n /**\n * Update the contents of a file or create a new file.\n */\n write(filePath: string, content: Buffer | string, options?: any): void;\n /**\n * Check if a file exists.\n */\n exists(filePath: string): boolean;\n /**\n * Delete the file.\n */\n delete(filePath: string): void;\n /**\n * Rename the file or the folder.\n */\n rename(from: string, to: string): void;\n /**\n * Check if this is a file or not.\n */\n isFile(filePath: string): boolean;\n /**\n * Returns the list of children of a folder.\n */\n children(dirPath: string): string[];\n /**\n * Returns the list of currently recorded changes.\n */\n listChanges(): any[];\n /**\n * Changes permissions of a file.\n * @param filePath A path to a file.\n * @param mode The permission to be granted on the file, given as a string (e.g `755`) or octal integer (e.g `0o755`).\n * See https://nodejs.org/api/fs.html#fs_file_modes.\n */\n changePermissions(filePath: string, mode: string): void;\n}\n\nexport function parseCargoTomlWithTree(\n tree: Tree,\n projectRoot: string,\n projectName: string\n) {\n const cargoTomlString = tree.read(`${projectRoot}/Cargo.toml`)?.toString();\n if (!cargoTomlString) {\n writeError(`Cannot find a Cargo.toml file in the ${projectName}`);\n throw new Error();\n }\n\n return parseCargoToml(cargoTomlString);\n}\n\nexport function parseCargoToml(cargoString?: string) {\n if (!cargoString) {\n throw new Error(\"Cargo.toml is empty\");\n }\n\n return TOML.parse(cargoString, {\n x: { comment: true }\n }) as unknown as CargoToml;\n}\n\nexport function stringifyCargoToml(cargoToml: CargoToml) {\n const tomlString = TOML.stringify(cargoToml, {\n newlineAround: \"section\"\n });\n\n if (Array.isArray(tomlString)) {\n return tomlString.join(\"\\n\");\n }\n\n return tomlString;\n}\n\nexport function modifyCargoTable(\n toml: CargoToml,\n section: string,\n key: string,\n value: string | object | any[] | (() => any)\n) {\n toml[section] ??= TOML.Section({});\n toml[section][key] =\n typeof value === \"object\" && !Array.isArray(value)\n ? TOML.inline(value as any)\n : typeof value === \"function\"\n ? value()\n : value;\n}\n\nexport function modifyCargoNestedTable(\n toml: CargoToml,\n section: string,\n key: string,\n value: object\n) {\n toml[section] ??= {};\n toml[section][key] = TOML.Section(value as any);\n}\n","/**\n * Commit types available for selection in commit messages.\n */\nexport const DEFAULT_COMMIT_TYPES = {\n /* --- Bumps version when selected --- */\n\n \"chore\": {\n \"description\": \"Other changes that don't modify src or test files\",\n \"title\": \"Chore\",\n \"emoji\": \"⚙️ \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Miscellaneous\",\n \"hidden\": false\n }\n },\n \"fix\": {\n \"description\":\n \"A change that resolves an issue previously identified with the package\",\n \"title\": \"Bug Fix\",\n \"emoji\": \"🪲 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Bug Fixes\",\n \"hidden\": false\n }\n },\n \"feat\": {\n \"description\": \"A change that adds a new feature to the package\",\n \"title\": \"Feature\",\n \"emoji\": \"🔑 \",\n \"semverBump\": \"minor\",\n \"changelog\": {\n \"title\": \"Features\",\n \"hidden\": false\n }\n },\n \"ci\": {\n \"description\":\n \"Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)\",\n \"title\": \"Continuous Integration\",\n \"emoji\": \"🧰 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Continuous Integration\",\n \"hidden\": false\n }\n },\n \"refactor\": {\n \"description\": \"A code change that neither fixes a bug nor adds a feature\",\n \"title\": \"Code Refactoring\",\n \"emoji\": \"🧪 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Source Code Improvements\",\n \"hidden\": false\n }\n },\n \"style\": {\n \"description\":\n \"Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)\",\n \"title\": \"Style Improvements\",\n \"emoji\": \"💎 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Style Improvements\",\n \"hidden\": false\n }\n },\n \"perf\": {\n \"description\": \"A code change that improves performance\",\n \"title\": \"Performance Improvement\",\n \"emoji\": \"⏱️ \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Performance Improvements\",\n \"hidden\": false\n }\n },\n\n /* --- Does not bump version when selected --- */\n\n \"docs\": {\n \"description\": \"A change that only includes documentation updates\",\n \"title\": \"Documentation\",\n \"emoji\": \"📜 \",\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Documentation\",\n \"hidden\": false\n }\n },\n \"test\": {\n \"description\": \"Adding missing tests or correcting existing tests\",\n \"title\": \"Testing\",\n \"emoji\": \"🚨 \",\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Testing\",\n \"hidden\": true\n }\n },\n\n /* --- Not included in commitlint but included in changelog --- */\n\n \"deps\": {\n \"description\":\n \"Changes that add, update, or remove dependencies. This includes devDependencies and peerDependencies\",\n \"title\": \"Dependencies\",\n \"emoji\": \"📦 \",\n \"hidden\": true,\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Dependency Upgrades\",\n \"hidden\": false\n }\n },\n\n /* --- Not included in commitlint or changelog --- */\n\n \"build\": {\n \"description\":\n \"Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)\",\n \"title\": \"Build\",\n \"emoji\": \"🛠 \",\n \"hidden\": true,\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Build\",\n \"hidden\": true\n }\n },\n \"release\": {\n \"description\": \"Publishing a commit containing a newly released version\",\n \"title\": \"Publish Release\",\n \"emoji\": \"🚀 \",\n \"hidden\": true,\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Publish Release\",\n \"hidden\": true\n }\n }\n} as const;\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { DEFAULT_COMMIT_TYPES } from \"../commit-types\";\n\nexport const CHANGELOG_COMMIT_TYPES_OBJECT = Object.freeze(\n Object.entries(DEFAULT_COMMIT_TYPES).reduce(\n (ret, [key, commitType]) => {\n ret[key] = {\n ...commitType.changelog,\n type: key,\n section: commitType.changelog?.title || commitType.title,\n hidden: commitType.changelog?.hidden\n };\n\n return ret;\n },\n {} as Record<\n string,\n {\n type: string;\n section: string;\n hidden: boolean | undefined;\n }\n >\n )\n);\n\nexport const CHANGELOG_COMMIT_TYPES = [\n CHANGELOG_COMMIT_TYPES_OBJECT.feat!,\n CHANGELOG_COMMIT_TYPES_OBJECT.fix!,\n CHANGELOG_COMMIT_TYPES_OBJECT.chore!,\n CHANGELOG_COMMIT_TYPES_OBJECT.deps!,\n CHANGELOG_COMMIT_TYPES_OBJECT.docs!,\n CHANGELOG_COMMIT_TYPES_OBJECT.style!,\n CHANGELOG_COMMIT_TYPES_OBJECT.refactor!,\n CHANGELOG_COMMIT_TYPES_OBJECT.perf!,\n CHANGELOG_COMMIT_TYPES_OBJECT.build!,\n CHANGELOG_COMMIT_TYPES_OBJECT.ci!,\n CHANGELOG_COMMIT_TYPES_OBJECT.test!\n] as const;\n\nexport const CHANGELOG_COMMIT_TYPE_ORDER = CHANGELOG_COMMIT_TYPES.map(\n entry => entry.type\n);\nexport const CHANGELOG_COMMIT_SECTION_ORDER = CHANGELOG_COMMIT_TYPES.map(\n entry => entry.section\n);\n\nexport const HASH_SHORT_LENGTH = 7;\nexport const HEADER_MAX_LENGTH = 100;\n\nexport const DATETIME_LENGTH = 10;\n","import { DEFAULT_COMMIT_TYPES } from \"../commit-types\";\nimport { RuleConfigCondition, RuleConfigSeverity } from \"../types/commitlint\";\nimport { CHANGELOG_COMMIT_TYPES } from \"../utilities/constants\";\n\nexport const changelogs = {\n props: {\n ignoreCommits: undefined,\n types: CHANGELOG_COMMIT_TYPES,\n bumpStrict: true,\n scope: undefined,\n scopeOnly: false\n }\n};\n\nexport const commitlint = {\n helpUrl: \"https://developer.stormsoftware.com/commitlint/minimal\",\n rules: {\n \"body-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"body-max-length\": [RuleConfigSeverity.Error, \"always\", 600],\n \"footer-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"footer-max-line-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-trim\": [RuleConfigSeverity.Error, \"always\"],\n \"subject-case\": [RuleConfigSeverity.Error, \"always\", [\"sentence-case\"]],\n \"subject-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"subject-full-stop\": [RuleConfigSeverity.Error, \"never\", \".\"],\n \"subject-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"subject-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"type-case\": [RuleConfigSeverity.Error, \"always\", \"kebab-case\"],\n \"type-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"type-enum\": [\n RuleConfigSeverity.Error,\n \"always\",\n Object.keys(DEFAULT_COMMIT_TYPES)\n ] as [RuleConfigSeverity, RuleConfigCondition, string[]],\n \"type-max-length\": [RuleConfigSeverity.Error, \"always\", 20],\n \"type-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"scope-empty\": [RuleConfigSeverity.Error, \"always\"]\n },\n settings: {\n enableMultipleScopes: false,\n disableEmoji: true,\n breakingChangePrefix: \"💣 \",\n closedIssuePrefix: \"✅ \",\n format: \"{type}: {emoji}{subject}\"\n }\n};\n\nconst config = {\n types: DEFAULT_COMMIT_TYPES,\n changelogs,\n commitlint\n};\n\nexport default config;\n","import { DEFAULT_COMMIT_TYPES } from \"../commit-types\";\nimport { RuleConfigCondition, RuleConfigSeverity } from \"../types/commitlint\";\nimport { CHANGELOG_COMMIT_TYPES } from \"../utilities/constants\";\n\nexport const changelogs = {\n props: {\n ignoreCommits: undefined,\n types: CHANGELOG_COMMIT_TYPES,\n bumpStrict: true,\n scope: [\"monorepo\"],\n scopeOnly: true\n }\n};\n\nexport const commitlint = {\n helpUrl: \"https://developer.stormsoftware.com/commitlint/monorepo\",\n rules: {\n \"body-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"body-max-length\": [RuleConfigSeverity.Error, \"always\", 600],\n \"footer-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"footer-max-line-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-trim\": [RuleConfigSeverity.Error, \"always\"],\n \"subject-case\": [RuleConfigSeverity.Error, \"always\", [\"sentence-case\"]],\n \"subject-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"subject-full-stop\": [RuleConfigSeverity.Error, \"never\", \".\"],\n \"subject-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"subject-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"type-case\": [RuleConfigSeverity.Error, \"always\", \"kebab-case\"],\n \"type-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"type-enum\": [\n RuleConfigSeverity.Error,\n \"always\",\n Object.keys(DEFAULT_COMMIT_TYPES)\n ] as [RuleConfigSeverity, RuleConfigCondition, string[]],\n \"type-max-length\": [RuleConfigSeverity.Error, \"always\", 20],\n \"type-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"scope-case\": [RuleConfigSeverity.Error, \"always\", [\"kebab-case\"]],\n \"scope-empty\": [RuleConfigSeverity.Error, \"never\"]\n },\n settings: {\n enableMultipleScopes: false,\n disableEmoji: true,\n breakingChangePrefix: \"💣 \",\n closedIssuePrefix: \"✅ \",\n format: \"{type}({scope}): {emoji}{subject}\"\n }\n};\n\nconst config = {\n types: DEFAULT_COMMIT_TYPES,\n changelogs,\n commitlint\n};\n\nexport default config;\n","import minimal from \"./minimal\";\nimport monorepo from \"./monorepo\";\n\nexport const COMMIT_CONFIGS = { minimal, monorepo };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ProjectGraph } from \"@nx/devkit\";\nimport { StormWorkspaceConfig } from \"@storm-software/config\";\nimport {\n createProjectGraphAsync,\n readCachedProjectGraph,\n readProjectsConfigurationFromProjectGraph\n} from \"nx/src/project-graph/project-graph\";\nimport { RuleConfigCondition, RuleConfigSeverity } from \"../types\";\n\nexport async function getNxScopes(context: {\n config: StormWorkspaceConfig;\n}): Promise<string[]> {\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n await createProjectGraphAsync();\n projectGraph = readCachedProjectGraph();\n }\n\n if (!projectGraph) {\n throw new Error(\n \"The commit process failed because the project graph is not available. Please run the build command again.\"\n );\n }\n\n const projectConfigs =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n\n const result = (\n Object.entries(projectConfigs.projects || {})\n .map(([name, project]) => ({\n name,\n ...project\n }))\n .filter(\n project =>\n project.name &&\n project.root &&\n project.root !== \".\" &&\n project.root !== context.config.workspaceRoot &&\n !project.name.includes(\"e2e\")\n )\n .filter(project => project.targets)\n .map(project => project.name)\n // .map(name => (name.charAt(0) === \"@\" ? name.split(\"/\")[1] : name))\n .filter(Boolean) as string[]\n ).sort((a, b) => a.localeCompare(b));\n result.unshift(\"monorepo\");\n\n return result;\n}\n\nexport function getScopeEnumUtil(context: { config: StormWorkspaceConfig }) {\n return (): Promise<string[]> => getScopeEnum(context);\n}\n\nexport function getScopeEnum(context: {\n config: StormWorkspaceConfig;\n}): Promise<string[]> {\n return getNxScopes(context);\n}\n\nexport function getRuleFromScopeEnum(\n scopeEnum: string[]\n): [RuleConfigSeverity, RuleConfigCondition, string[]] {\n if (!scopeEnum?.filter(Boolean).length) {\n throw new Error(\"No scopes found in the Storm workspace.\");\n }\n\n return [\n RuleConfigSeverity.Error,\n \"always\",\n scopeEnum.filter(Boolean) as string[]\n ];\n}\n","import { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport createBasePreset from \"conventional-changelog-conventionalcommits\";\nimport defu from \"defu\";\nimport { DEFAULT_COMMIT_TYPES } from \"./commit-types\";\nimport { COMMIT_CONFIGS } from \"./configs\";\nimport { Preset } from \"./types/preset\";\nimport { CHANGELOG_COMMIT_TYPES_OBJECT } from \"./utilities/constants\";\nimport { getNxScopes, getRuleFromScopeEnum } from \"./utilities/nx-scopes\";\n\nexport {\n CHANGELOG_COMMIT_TYPES_OBJECT as CHANGELOG_COMMIT_TYPES,\n COMMIT_CONFIGS,\n DEFAULT_COMMIT_TYPES\n};\n\n/**\n * Create a preset configuration for Storm Software changelog conventions.\n *\n * @param config - The configuration object.\n * @returns The preset configuration.\n */\nexport default async function createPreset(\n variant: StormWorkspaceConfig[\"variant\"] = \"monorepo\"\n): Promise<Preset> {\n const workspaceConfig = await getWorkspaceConfig();\n\n if (variant === \"minimal\") {\n return defu(\n await createBasePreset({ ...COMMIT_CONFIGS.minimal.changelogs.props }),\n {\n ...COMMIT_CONFIGS.minimal,\n commitlint: {\n ...COMMIT_CONFIGS.minimal.commitlint,\n regex: new RegExp(\n `(${Object.keys(DEFAULT_COMMIT_TYPES).join(\"|\")})!?:\\\\s([a-z0-9:\\\\-\\\\/\\\\s])+`\n )\n }\n }\n );\n }\n\n const nxScopes = await getNxScopes({ config: workspaceConfig });\n return defu(\n await createBasePreset({\n ...COMMIT_CONFIGS.monorepo.changelogs.props,\n scope: nxScopes\n }),\n {\n ...COMMIT_CONFIGS.monorepo,\n commitlint: {\n ...COMMIT_CONFIGS.monorepo.commitlint,\n rules: {\n ...COMMIT_CONFIGS.monorepo.commitlint.rules,\n [\"scope-enum\"]: getRuleFromScopeEnum(nxScopes)\n },\n regex: new RegExp(\n `(${Object.keys(DEFAULT_COMMIT_TYPES).join(\"|\")})\\\\((${nxScopes.join(\"|\")})\\\\)!?:\\\\s([a-z0-9:\\\\-\\\\/\\\\s])+`\n )\n }\n }\n );\n}\n",null,null,null,null,"import defaultRules from \"@commitlint/rules\";\nimport {\n CommitlintRulesEnum,\n RuleConfigSeverity\n} from \"conventional-changelog-storm-software/types/commitlint\";\nimport { Preset } from \"conventional-changelog-storm-software/types/preset\";\nimport { CommitParser } from \"conventional-commits-parser\";\nimport util from \"node:util\";\nimport { CommitLintOutcome, CommitLintRuleOutcome } from \"../types\";\n\ninterface CommitMessageData {\n header: string | null;\n body?: string | null;\n footer?: string | null;\n}\n\nconst buildCommitMessage = ({\n header,\n body,\n footer\n}: CommitMessageData): string => {\n let message = header;\n\n message = body ? `${message}\\n\\n${body}` : message;\n message = footer ? `${message}\\n\\n${footer}` : message;\n\n return message || \"\";\n};\n\nexport default async function lint(\n message: string,\n config: Preset\n): Promise<CommitLintOutcome> {\n const parser = new CommitParser(config.parser || {});\n const parsed = parser.parse(message);\n\n if (\n parsed.header === null &&\n parsed.body === null &&\n parsed.footer === null\n ) {\n // Commit is empty, skip\n return {\n valid: true,\n errors: [],\n warnings: [],\n input: message\n };\n }\n\n const allRules: Map<string, any> = new Map(Object.entries(defaultRules));\n\n // Find invalid rules configs\n const missing = Object.keys(config.commitlint.rules).filter(\n name => typeof allRules.get(name) !== \"function\"\n );\n\n if (missing.length > 0) {\n const names = [...allRules.keys()];\n throw new RangeError(\n [\n `Found rules without implementation: ${missing.join(\", \")}.`,\n `Supported rules are: ${names.join(\", \")}.`\n ].join(\"\\n\")\n );\n }\n\n const invalid = Object.entries(config.commitlint.rules)\n .map(([name, config]) => {\n if (!Array.isArray(config)) {\n return new Error(\n `config for rule ${name} must be array, received ${util.inspect(\n config\n )} of type ${typeof config}`\n );\n }\n\n const [level] = config;\n\n if (level === RuleConfigSeverity.Disabled && config.length === 1) {\n return null;\n }\n\n const [, when] = config;\n\n if (typeof level !== \"number\" || isNaN(level)) {\n return new Error(\n `level for rule ${name} must be number, received ${util.inspect(\n level\n )} of type ${typeof level}`\n );\n }\n\n if (config.length < 2 || config.length > 3) {\n return new Error(\n `config for rule ${name} must be 2 or 3 items long, received ${util.inspect(\n config\n )} of length ${config.length}`\n );\n }\n\n if (level < 0 || level > 2) {\n return new RangeError(\n `level for rule ${name} must be between 0 and 2, received ${util.inspect(\n level\n )}`\n );\n }\n\n if (typeof when !== \"string\") {\n return new Error(\n `condition for rule ${name} must be string, received ${util.inspect(\n when\n )} of type ${typeof when}`\n );\n }\n\n if (when !== \"never\" && when !== \"always\") {\n return new Error(\n `condition for rule ${name} must be \"always\" or \"never\", received ${util.inspect(\n when\n )}`\n );\n }\n\n return null;\n })\n .filter((item): item is Error => item instanceof Error);\n\n if (invalid.length > 0) {\n throw new Error(invalid.map(i => i.message).join(\"\\n\"));\n }\n\n // Validate against all rules\n const pendingResults = Object.entries(\n config.commitlint.rules as CommitlintRulesEnum\n )\n // Level 0 rules are ignored\n .filter(([, config]) => !!config && config.length && config[0] > 0)\n .map(async entry => {\n const [name, config] = entry;\n const [level, when, value] = config!; //\n\n const rule = allRules.get(name);\n\n if (!rule) {\n throw new Error(`Could not find rule implementation for ${name}`);\n }\n\n const executableRule = rule as any;\n const [valid, message] = await executableRule(parsed, when, value);\n\n return {\n level,\n valid,\n name,\n message\n };\n });\n\n const results = (await Promise.all(pendingResults)).filter(\n (result): result is CommitLintRuleOutcome => result !== null\n );\n\n const errors = results.filter(\n result => result.level === RuleConfigSeverity.Error && !result.valid\n );\n const warnings = results.filter(\n result => result.level === RuleConfigSeverity.Warning && !result.valid\n );\n\n const valid = errors.length === 0;\n\n return {\n valid,\n errors,\n warnings,\n input: buildCommitMessage(parsed)\n };\n}\n","import {\n joinPaths,\n writeDebug,\n writeInfo,\n writeSuccess,\n writeWarning\n} from \"@storm-software/config-tools\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport createPreset from \"conventional-changelog-storm-software\";\nimport { existsSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport childProcess from \"node:child_process\";\nimport { CommitLintCLIOptions } from \"../types\";\nimport lint from \"./lint\";\n\nconst COMMIT_EDITMSG_PATH = \".git/COMMIT_EDITMSG\";\n\nexport async function runCommitLint(\n workspaceConfig: StormWorkspaceConfig,\n options: CommitLintCLIOptions\n) {\n writeInfo(\n \"📝 Validating git commit message aligns with the Storm Software specification\",\n workspaceConfig\n );\n\n let commitMessage;\n if (options.message && options.message !== COMMIT_EDITMSG_PATH) {\n commitMessage = options.message;\n } else {\n const commitFile = joinPaths(\n workspaceConfig.workspaceRoot,\n options.file || options.message || COMMIT_EDITMSG_PATH\n );\n if (existsSync(commitFile)) {\n commitMessage = (await readFile(commitFile, \"utf8\"))?.trim();\n }\n }\n\n if (!commitMessage) {\n let gitLogCmd = \"git log -1 --no-merges\";\n const gitRemotes = childProcess\n .execSync(\"git remote -v\")\n .toString()\n .trim()\n .split(\"\\n\");\n const upstreamRemote = gitRemotes.find(remote =>\n remote.includes(`${workspaceConfig.name}.git`)\n );\n if (upstreamRemote) {\n const upstreamRemoteIdentifier = upstreamRemote.split(\"\\t\")[0]?.trim();\n if (!upstreamRemoteIdentifier) {\n writeWarning(\n `No upstream remote found for ${workspaceConfig.name}.git. Skipping comparison.`,\n workspaceConfig\n );\n return;\n }\n\n writeDebug(`Comparing against remote ${upstreamRemoteIdentifier}`);\n const currentBranch = childProcess\n .execSync(\"git branch --show-current\")\n .toString()\n .trim();\n\n // exclude all commits already present in upstream/main\n gitLogCmd =\n gitLogCmd + ` ${currentBranch} ^${upstreamRemoteIdentifier}/main`;\n } else {\n writeWarning(\n `No upstream remote found for ${workspaceConfig.name}.git. Skipping comparison against upstream main.`,\n workspaceConfig\n );\n return;\n }\n\n commitMessage = childProcess.execSync(gitLogCmd).toString().trim();\n if (!commitMessage) {\n writeWarning(\n \"No commits found. Skipping commit message validation.\",\n workspaceConfig\n );\n return;\n }\n }\n\n const preset = await createPreset(workspaceConfig.variant);\n\n const report = await lint(commitMessage, preset);\n\n if (\n !preset.commitlint.regex.test(commitMessage) ||\n report.errors.length ||\n report.warnings.length\n ) {\n writeSuccess(\n `Commit was processing completed successfully!`,\n workspaceConfig\n );\n } else {\n let errorMessage =\n \" Oh no! Your commit message: \\n\" +\n \"-------------------------------------------------------------------\\n\" +\n commitMessage +\n \"\\n-------------------------------------------------------------------\" +\n `\\n\\n Does not follow the \\`${workspaceConfig.variant}\\` commit message convention specified by the ${\n (typeof workspaceConfig.organization === \"string\"\n ? workspaceConfig.organization\n : workspaceConfig.organization?.name) || \"Storm Software\"\n } team.`;\n errorMessage += preset.changelogs.props.scope?.length\n ? \"\\ntype(scope): subject \\n BLANK LINE \\n body\"\n : \"\\ntype: subject \\n BLANK LINE \\n body\";\n errorMessage += \"\\n\";\n errorMessage += `\\nPossible types: ${preset.changelogs.props.types.map(\n type => `${type.section} (${type.type})`\n )}`;\n if (preset.changelogs.props.scope?.length) {\n errorMessage += `\\nPossible scopes: ${preset.changelogs.props.scope} (if unsure use \"monorepo\")`;\n }\n errorMessage +=\n \"\\n\\nEXAMPLE: \\n\" +\n \"feat(my-lib): add an option to generate lazy-loadable modules\\n\" +\n \"fix(monorepo)!: breaking change should have exclamation mark\\n\";\n errorMessage += `\\n\\nCommitLint Errors: ${\n report.errors.length\n ? report.errors.map(error => ` - ${error.message}`).join(\"\\n\")\n : \"None\"\n }`;\n errorMessage += `\\nCommitLint Warnings: ${\n report.warnings.length\n ? report.warnings.map(warning => ` - ${warning.message}`).join(\"\\n\")\n : \"None\"\n }`;\n errorMessage += \"\\n\\nPlease fix the commit message and rerun storm-commit.\";\n errorMessage += `\\n\\nMore details about the Storm Software commit message specification can be found at: ${\n preset.commitlint.helpUrl\n }`;\n\n throw new Error(errorMessage);\n }\n\n return report.input;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ProjectGraph, ProjectsConfigurations } from \"@nx/devkit\";\nimport { Variant } from \"@storm-software/config/types\";\nimport { CommitEnumItemProps } from \"conventional-changelog-storm-software/types/commit-types\";\nimport { RuleConfigSeverity } from \"conventional-changelog-storm-software/types/commitlint\";\nimport { NxReleaseConfig } from \"nx/src/command-line/release/config/config\";\nimport {\n NxReleaseChangelogConfiguration,\n NxReleaseConfiguration,\n NxReleaseDockerConfiguration,\n NxReleaseVersionConfiguration,\n NxReleaseVersionPlansConfiguration\n} from \"nx/src/config/nx-json\";\n\nexport type DeepPartial<T> = T extends object\n ? {\n [P in keyof T]?: DeepPartial<T[P]>;\n }\n : T;\n\nexport interface CommitLintCLIOptions {\n config?: string;\n message?: string;\n file?: string;\n}\n\nexport type CommitScopeProps = CommitEnumItemProps & {\n projectRoot: string;\n};\n\nexport type CommitScopesEnum = Record<string, CommitScopeProps>;\n\ntype CommitQuestionTypeProp = \"input\" | \"select\" | \"confirm\";\n\nexport type CommitQuestionProps = {\n type?: CommitQuestionTypeProp;\n title: string;\n description: string;\n enum?: Record<string, CommitEnumItemProps>;\n defaultValue?: string | boolean;\n maxLength?: number;\n minLength?: number;\n when?: (answers: Record<string, string>) => boolean;\n};\n\nexport const DEFAULT_COMMIT_PROMPT_MESSAGES = {\n skip: \"press enter to skip\",\n max: \"must be %d chars at most\",\n min: \"must be %d chars at least\",\n emptyWarning: \"can not be empty\",\n upperLimitWarning: \"%s is %d characters longer than the upper limit\",\n lowerLimitWarning: \"%s is %d characters less than the lower limit\",\n closedIssueMessage: \"Closes: \"\n} as const;\n\nexport type DefaultCommitPromptMessagesKeys =\n keyof typeof DEFAULT_COMMIT_PROMPT_MESSAGES;\n\nexport type CommitPromptMessagesEnum<\n TCommitPromptMessagesKeys extends\n DefaultCommitPromptMessagesKeys = DefaultCommitPromptMessagesKeys\n> = Record<TCommitPromptMessagesKeys, string> &\n typeof DEFAULT_COMMIT_PROMPT_MESSAGES;\n\nexport type CommitSettingsEnum = Record<string, any> & {\n scopeEnumSeparator?: string;\n enableMultipleScopes: boolean;\n disableEmoji: boolean;\n breakingChangePrefix?: string;\n closedIssuePrefix?: string;\n format: string;\n};\n\nexport type CommitState<\n TCommitAnswers extends Record<string, string | boolean> = Record<\n string,\n string | boolean\n >,\n TCommitConfig extends Record<string, any> = Record<string, any>\n> = {\n variant: Variant;\n answers: TCommitAnswers;\n config: TCommitConfig;\n root: string;\n};\n\nexport interface CommitLintRuleOutcome {\n /** If the commit is considered valid for the rule */\n valid: boolean;\n /** The \"severity\" of the rule (1 = warning, 2 = error) */\n level: RuleConfigSeverity;\n /** The name of the rule */\n name: string;\n /** The message returned from the rule, if invalid */\n message: string;\n}\n\nexport interface CommitLintOutcome {\n /** The linted commit, as string */\n input: string;\n /** If the linted commit is considered valid */\n valid: boolean;\n /** All errors, per rule, for the commit */\n errors: CommitLintRuleOutcome[];\n /** All warnings, per rule, for the commit */\n warnings: CommitLintRuleOutcome[];\n}\n\nexport type ReleaseOptions = any & {\n npm: boolean;\n github: boolean;\n githubOptions?: Record<string, unknown>;\n buildTarget?: string;\n changelog?: boolean;\n changelogFile?: string;\n outputPath?: string;\n commitMessage?: string;\n gitAssets?: string[];\n packageJsonDir?: string;\n parserOpts?: Record<string, unknown>;\n writerOpts?: Record<string, unknown>;\n linkCompare?: boolean;\n linkReferences?: boolean;\n releaseRules?:\n | string\n | { release: string | boolean; [key: string]: unknown }[];\n preset?: string;\n presetConfig?: Record<string, unknown>;\n plugins?: any[];\n tagFormat?: string;\n git: boolean;\n branches: string[];\n};\n\nexport type ReleaseContext = ReleaseConfig & {\n projectName: string;\n workspaceDir: string;\n projectGraph: ProjectGraph;\n projectConfigs: ProjectsConfigurations;\n};\n\nexport interface ReadMeOptions {\n templates: string;\n project?: string;\n output?: string;\n clean: boolean;\n prettier: boolean;\n}\n\nexport interface ReleaseGroupConfig {\n /**\n * Whether to version and release projects within the group independently, or together in lock step (\"fixed\").\n * If not set on the group, this will be informed by the projectsRelationship config at the top level.\n */\n projectsRelationship?: \"fixed\" | \"independent\";\n\n /**\n * Required list of one or more projects to include in the release group. Any single project can\n * only be used in a maximum of one release group.\n */\n projects: string[] | string;\n\n /**\n * Configure options to handle versioning docker projects for this group.\n * Set to `true` to enable with default settings, or provide a configuration object for custom settings.\n */\n docker?:\n | (NxReleaseDockerConfiguration & {\n /**\n * A command to run after validation of nx release configuration, but before docker versioning begins.\n * Used for preparing docker build artifacts. If --dry-run is passed, the command is still executed, but\n * with the NX_DRY_RUN environment variable set to 'true'.\n * It will run in addition to the global `preVersionCommand`\n */\n groupPreVersionCommand?: string;\n })\n | true;\n\n /**\n * Optionally override version configuration for this group.\n *\n * NOTE: git configuration is not supported at the group level, only the root/command level\n */\n version?: NxReleaseVersionConfiguration & {\n /**\n * A command to run after validation of nx release configuration, but before versioning begins.\n * Used for preparing build artifacts. If --dry-run is passed, the command is still executed, but\n * with the NX_DRY_RUN environment variable set to 'true'.\n * It will run in addition to the global `preVersionCommand`\n */\n groupPreVersionCommand?: string;\n };\n\n /**\n * Project changelogs are disabled by default.\n *\n * Here you can optionally override project changelog configuration for this group.\n * Notes about boolean values:\n *\n * - true = enable project level changelogs using default configuration\n * - false = explicitly disable project level changelogs\n *\n * NOTE: git configuration is not supported at the group level, only the root/command level\n */\n changelog?: NxReleaseChangelogConfiguration | boolean;\n\n /**\n * Configuration for release tag generation and matching.\n */\n releaseTag?: {\n /**\n * The pattern to use for release tags. Supports interpolating {version}, {projectName}, and {releaseGroupName}.\n */\n pattern?: string;\n\n /**\n * By default, we will try and resolve the latest match for the releaseTagPattern from the current branch,\n * falling back to all branches if no match is found on the current branch.\n *\n * - Setting this to true will cause us to ALWAYS check all branches for the latest match.\n * - Setting it to false will cause us to ONLY check the current branch for the latest match.\n * - Setting it to an array of strings will cause us to check all branches WHEN the current branch matches one of the strings in the array. Glob patterns are supported.\n */\n checkAllBranchesWhen?: boolean | string[];\n\n /**\n * By default, we will use semver when searching through the tags to find the latest matching tag.\n *\n * - Setting this to true will cause us to use semver to match the version\n * - Setting this to false will cause us to not use semver to match the version allowing for non-semver versions\n */\n requireSemver?: boolean;\n\n /**\n * Controls how docker versions are used relative to semver versions when creating git tags and changelog entries.\n *\n * - true: Use only the docker version\n * - false: Use only the semver version\n * - 'both': Create tags and changelog entries for both docker and semver versions\n *\n * By default, this is set to true when docker configuration is present, and false otherwise.\n */\n preferDockerVersion?: boolean | \"both\";\n\n /**\n * When set to true and multiple tags match your configured pattern, the git tag matching logic will strictly prefer the tag which contain a semver preid which matches the one\n * given to the nx release invocation.\n *\n * For example, let's say your pattern is \"{projectName}@{version}\" and you have the following tags for project \"my-lib\", which uses semver:\n * - my-lib@1.2.4-beta.1\n * - my-lib@1.2.4-alpha.1\n * - my-lib@1.2.3\n *\n * If \"strictPreid\" is set to true and you run:\n * - `nx release --preid beta`, the git tag \"my-lib@1.2.4-beta.1\" will be resolved.\n * - `nx release --preid alpha`, the git tag \"my-lib@1.2.4-alpha.1\" will be resolved.\n * - `nx release` (no preid), the git tag \"my-lib@1.2.3\" will be resolved.\n *\n * If \"strictPreid\" is set to false, the git tag \"my-lib@1.2.4-beta.1\" will always be resolved as the latest tag that matches the pattern,\n * regardless of any preid which gets passed to nx release.\n *\n * NOTE: This feature was added in a minor version and is therefore set to false by default, but this may change in a future major version.\n */\n strictPreid?: boolean;\n };\n\n /**\n * Enables using version plans as a specifier source for versioning and\n * to determine changes for changelog generation.\n */\n versionPlans?: NxReleaseVersionPlansConfiguration | boolean;\n}\n\nexport type ReleaseConfig = Omit<\n NxReleaseConfiguration,\n \"groups\" | \"conventionalCommits\"\n> &\n Required<Pick<NxReleaseConfig, \"conventionalCommits\">> & {\n groups: Record<string, ReleaseGroupConfig>;\n };\n\n// export interface NxReleaseConfig {\n// /**\n// * Shorthand for amending the projects which will be included in the implicit default release group (all projects by default).\n// * @note Only one of `projects` or `groups` can be specified, the cannot be used together.\n// */\n// projects?: string[] | string;\n// /**\n// * @note When no projects or groups are configured at all (the default), all projects in the workspace are treated as\n// * if they were in a release group together with a fixed relationship.\n// */\n// groups?: Record<\n// string, // group name\n// {\n// /**\n// * Whether to version and release projects within the group independently, or together in lock step (\"fixed\").\n// * If not set on the group, this will be informed by the projectsRelationship config at the top level.\n// */\n// projectsRelationship?: \"fixed\" | \"independent\";\n// /**\n// * Required list of one or more projects to include in the release group. Any single project can\n// * only be used in a maximum of one release group.\n// */\n// projects: string[] | string;\n// /**\n// * Optionally override version configuration for this group.\n// *\n// * NOTE: git configuration is not supported at the group level, only the root/command level\n// */\n// version?: NxReleaseVersionConfiguration;\n// /**\n// * Project changelogs are disabled by default.\n// *\n// * Here you can optionally override project changelog configuration for this group.\n// * Notes about boolean values:\n// *\n// * - true = enable project level changelogs using default configuration\n// * - false = explicitly disable project level changelogs\n// *\n// * NOTE: git configuration is not supported at the group level, only the root/command level\n// */\n// changelog?: NxReleaseChangelogConfiguration | boolean;\n// /**\n// * Optionally override the git/release tag pattern to use for this group.\n// */\n// releaseTagPattern?: string;\n// }\n// >;\n// /**\n// * Configures the default value for all groups that don't explicitly state their own projectsRelationship.\n// *\n// * By default, this is set to \"fixed\" which means all projects in the workspace will be versioned and\n// * released together in lock step.\n// */\n// projectsRelationship?: \"fixed\" | \"independent\";\n// changelog?: {\n// /**\n// * Enable or override configuration for git operations as part of the changelog subcommand\n// */\n// git?: NxReleaseGitConfiguration;\n// /**\n// * Workspace changelog is enabled by default. Notes about boolean values:\n// *\n// * - true = explicitly enable workspace changelog using default configuration\n// * - false = disable workspace changelog\n// */\n// workspaceChangelog?: NxReleaseChangelogConfiguration | boolean;\n// /**\n// * Project changelogs are disabled by default. Notes about boolean values:\n// *\n// * - true = enable project level changelogs using default configuration\n// * - false = explicitly disable project level changelogs\n// */\n// projectChangelogs?: NxReleaseChangelogConfiguration | boolean;\n// /**\n// * Whether or not to automatically look up the first commit for the workspace (or package, if versioning independently)\n// * and use that as the starting point for changelog generation. If this is not enabled, changelog generation will fail\n// * if there is no previous matching git tag to use as a starting point.\n// */\n// automaticFromRef?: boolean;\n// };\n// /**\n// * If no version config is provided, we will assume that @nx/js:release-version\n// * is the desired generator implementation, allowing for terser config for the common case.\n// */\n// version?: NxReleaseVersionConfiguration & {\n// /**\n// * Enable or override configuration for git operations as part of the version subcommand\n// */\n// git?: NxReleaseGitConfiguration;\n// /**\n// * A command to run after validation of nx release configuration, but before versioning begins.\n// * Used for preparing build artifacts. If --dry-run is passed, the command is still executed, but\n// * with the NX_DRY_RUN environment variable set to 'true'.\n// */\n// preVersionCommand?: string;\n// };\n// /**\n// * Optionally override the git/release tag pattern to use. This field is the source of truth\n// * for changelog generation and release tagging, as well as for conventional commits parsing.\n// *\n// * It supports interpolating the version as {version} and (if releasing independently or forcing\n// * project level version control system releases) the project name as {projectName} within the string.\n// *\n// * The default releaseTagPattern for fixed/unified releases is: \"v{version}\"\n// * The default releaseTagPattern for independent releases at the project level is: \"{projectName}@{version}\"\n// */\n// releaseTagPattern?: string;\n// /**\n// * Enable and configure automatic git operations as part of the release\n// */\n// git?: NxReleaseGitConfiguration;\n// conventionalCommits?: NxReleaseConventionalCommitsConfiguration;\n// }\n\n// export type NxReleaseConventionalCommitsConfig = NonNullable<\n// NxReleaseConfig[\"conventionalCommits\"]\n// >;\n// export type NxReleaseProjectsConfig = NonNullable<NxReleaseConfig[\"projects\"]>;\n// export type NxReleaseGroupsConfig = NonNullable<NxReleaseConfig[\"groups\"]>;\n// export type NxReleaseVersionConfig = NonNullable<NxReleaseConfig[\"version\"]>;\n// export type NxReleaseGitConfig = NonNullable<NxReleaseConfig[\"git\"]>;\n// export type NxReleaseChangelogConfig = NonNullable<\n// NxReleaseConfig[\"changelog\"]\n// >;\n\n// export type NxReleaseGroupConfig = NxReleaseGroupsConfig[string];\n\nexport type NxReleaseRequiredGitConfig = Required<{\n commit?: boolean | undefined;\n commitMessage?: string | undefined;\n commitArgs?: string | undefined;\n stageChanges?: boolean | undefined;\n tag?: boolean | undefined;\n tagMessage?: string | undefined;\n tagArgs?: string | undefined;\n}>;\n","import { DEFAULT_COMMIT_TYPES } from \"conventional-changelog-storm-software/commit-types\";\nimport { COMMIT_CONFIGS } from \"conventional-changelog-storm-software/configs\";\nimport {\n CommitTypeProps,\n CommitTypesEnum,\n DefaultCommitTypeKeys\n} from \"conventional-changelog-storm-software/types/commit-types\";\nimport { DEFAULT_COMMIT_PROMPT_MESSAGES } from \"../../types\";\n\nexport const DEFAULT_MINIMAL_COMMIT_QUESTIONS = {\n type: {\n type: \"select\",\n title: \"Commit Type\",\n description: \"Select the commit type that best describes your changes\",\n enum: (\n Object.keys(DEFAULT_COMMIT_TYPES).filter(\n type => DEFAULT_COMMIT_TYPES[type].hidden !== true\n ) as DefaultCommitTypeKeys[]\n ).reduce((ret, type) => {\n ret[type] = DEFAULT_COMMIT_TYPES[type] as CommitTypeProps;\n\n return ret;\n }, {} as CommitTypesEnum),\n defaultValue: \"chore\",\n maxLength: 20,\n minLength: 3\n },\n subject: {\n type: \"input\",\n title: \"Commit Subject\",\n description: \"Write a short, imperative tense description of the change\",\n maxLength: 150,\n minLength: 3\n },\n body: {\n type: \"input\",\n title: \"Commit Body\",\n description: \"Provide a longer description of the change\",\n maxLength: 600\n },\n isBreaking: {\n type: \"confirm\",\n title: \"Breaking Changes\",\n description: \"Are there any breaking changes as a result of this commit?\",\n defaultValue: false\n },\n breakingBody: {\n type: \"input\",\n title: \"Breaking Changes (Details)\",\n description:\n \"A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself\",\n when: (answers: Record<string, any>) => answers.isBreaking === true,\n maxLength: 600,\n minLength: 3\n },\n isIssueAffected: {\n type: \"confirm\",\n title: \"Open Issue Affected\",\n description: \"Does this change impact any open issues?\",\n defaultValue: false\n },\n issuesBody: {\n type: \"input\",\n title: \"Open Issue Affected (Details)\",\n description:\n \"If issues are closed, the commit requires a body. Please enter a longer description of the commit itself\",\n when: (answers: Record<string, any>) => answers.isIssueAffected === true,\n maxLength: 600,\n minLength: 3\n }\n} as const;\n\nconst config = {\n settings: COMMIT_CONFIGS.minimal.commitlint.settings,\n messages: DEFAULT_COMMIT_PROMPT_MESSAGES,\n questions: DEFAULT_MINIMAL_COMMIT_QUESTIONS,\n types: DEFAULT_COMMIT_TYPES\n};\n\nexport default config;\n","import { DEFAULT_COMMIT_TYPES } from \"conventional-changelog-storm-software/commit-types\";\nimport { COMMIT_CONFIGS } from \"conventional-changelog-storm-software/configs\";\nimport { CommitScopesEnum, DEFAULT_COMMIT_PROMPT_MESSAGES } from \"../../types\";\nimport { DEFAULT_MINIMAL_COMMIT_QUESTIONS } from \"./minimal\";\n\nexport const DEFAULT_MONOREPO_COMMIT_QUESTIONS = {\n type: DEFAULT_MINIMAL_COMMIT_QUESTIONS.type,\n scope: {\n type: \"select\",\n title: \"Commit Scope\",\n description: \"Select the project that's the most impacted by this change\",\n enum: {} as CommitScopesEnum,\n defaultValue: \"monorepo\",\n maxLength: 50,\n minLength: 1\n },\n subject: DEFAULT_MINIMAL_COMMIT_QUESTIONS.subject,\n body: DEFAULT_MINIMAL_COMMIT_QUESTIONS.body,\n isBreaking: DEFAULT_MINIMAL_COMMIT_QUESTIONS.isBreaking,\n breakingBody: DEFAULT_MINIMAL_COMMIT_QUESTIONS.breakingBody,\n isIssueAffected: DEFAULT_MINIMAL_COMMIT_QUESTIONS.isIssueAffected,\n issuesBody: DEFAULT_MINIMAL_COMMIT_QUESTIONS.issuesBody\n} as const;\n\nconst config = {\n settings: COMMIT_CONFIGS.monorepo.commitlint.settings,\n messages: DEFAULT_COMMIT_PROMPT_MESSAGES,\n questions: DEFAULT_MONOREPO_COMMIT_QUESTIONS,\n types: DEFAULT_COMMIT_TYPES\n};\n\nexport default config;\n","import { ProjectGraph } from \"@nx/devkit\";\nimport { StormWorkspaceConfig } from \"@storm-software/config\";\nimport { joinPaths } from \"@storm-software/config-tools\";\nimport chalkTemplate from \"chalk-template\";\nimport {\n CommitTypeProps,\n CommitTypesEnum\n} from \"conventional-changelog-storm-software/types/commit-types\";\nimport { getScopeEnum } from \"conventional-changelog-storm-software/utilities/nx-scopes\";\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport {\n createProjectGraphAsync,\n readCachedProjectGraph,\n readProjectsConfigurationFromProjectGraph\n} from \"nx/src/project-graph/project-graph\";\nimport type {\n CommitQuestionProps,\n CommitScopeProps,\n CommitState\n} from \"../types\";\nimport minimalConfig from \"./config/minimal\";\nimport monorepoConfig from \"./config/monorepo\";\n\nexport function getGitDir() {\n const devNull = process.platform === \"win32\" ? \" nul\" : \"/dev/null\";\n const dir = execSync(`git rev-parse --absolute-git-dir 2>${devNull}`)\n .toString()\n .trim();\n\n return dir;\n}\n\nexport function getGitRootDir() {\n const devNull = process.platform === \"win32\" ? \" nul\" : \"/dev/null\";\n const dir = execSync(`git rev-parse --show-toplevel 2>${devNull}`)\n .toString()\n .trim();\n\n return dir;\n}\n\n/**\n * Creates the commit state used to run the commit prompt\n *\n * @param workspaceConfig - The Storm workspace configuration\n * @param configPath - The path to the commit configuration file\n * @returns The commit state\n */\nexport async function createState<\n TWorkspaceConfig extends StormWorkspaceConfig = StormWorkspaceConfig\n>(\n workspaceConfig: TWorkspaceConfig,\n configPath?: string\n): Promise<CommitState> {\n let root: string;\n\n try {\n root = getGitRootDir();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n throw new Error(\"Could not find Git root folder.\");\n }\n\n const state = {\n variant: workspaceConfig.variant,\n config:\n workspaceConfig.variant === \"minimal\" ? minimalConfig : monorepoConfig,\n root,\n answers: {}\n };\n\n if (state.config.questions.type && state.config.questions.type.enum) {\n (state.config.questions.type as CommitQuestionProps).enum = Object.keys(\n state.config.questions.type.enum\n ).reduce((ret, key) => {\n if (state.config.questions.type.enum) {\n ret[key] = {\n ...state.config.questions.type.enum[key],\n title: chalkTemplate`${\n state.config.questions.type.enum[key]?.emoji\n ? `${state.config.questions.type.enum[key]?.emoji} `\n : \"\"\n }{bold ${key}} ${\n state.config.questions.type.enum[key]?.title &&\n state.config.questions.type.enum[key]?.title !== key\n ? `- ${state.config.questions.type.enum[key]?.title}`\n : \"\"\n }${\n (state.config.questions.type.enum[key] as CommitTypeProps)\n ?.semverBump\n ? ` (version bump: ${\n (state.config.questions.type.enum[key] as CommitTypeProps)\n ?.semverBump\n })`\n : \"\"\n }`,\n hidden: false\n };\n }\n\n return ret;\n }, {} as CommitTypesEnum);\n }\n\n if (\n workspaceConfig.variant === \"monorepo\" &&\n (!(state.config.questions as typeof monorepoConfig.questions)?.scope ||\n !(state.config.questions as typeof monorepoConfig.questions)?.scope\n .enum ||\n Object.keys(\n (state.config.questions as typeof monorepoConfig.questions)?.scope.enum\n ).length === 0)\n ) {\n const scopes = await getScopeEnum({\n config: workspaceConfig\n });\n for (const scope of scopes) {\n if (scope === \"monorepo\") {\n (state.config.questions as typeof monorepoConfig.questions).scope.enum[\n scope\n ] = {\n title: chalkTemplate`{bold monorepo} - workspace root`,\n description: \"The base workspace package (workspace root)\",\n hidden: false,\n projectRoot: \"/\"\n } as CommitScopeProps;\n } else {\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n await createProjectGraphAsync();\n projectGraph = readCachedProjectGraph();\n }\n\n if (!projectGraph) {\n throw new Error(\n \"Failed to load the project graph. Please run `nx reset`, then run the `storm-git commit` command again.\"\n );\n }\n\n const projectConfigurations =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n if (!projectConfigurations?.projects?.[scope]) {\n throw new Error(\n `Failed to load the project configuration for project ${scope}. Please run \\`nx reset\\`, then run the \\`storm-git commit\\` command again.`\n );\n }\n\n const project = projectConfigurations.projects[scope];\n if (project) {\n let description = `${project.name} - ${project.root}`;\n\n const packageJsonPath = joinPaths(project.root, \"package.json\");\n if (existsSync(packageJsonPath)) {\n const packageJsonFile = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(packageJsonFile);\n\n description = packageJson.description || description;\n }\n\n (\n state.config.questions as typeof monorepoConfig.questions\n ).scope.enum[scope] = {\n title: chalkTemplate`{bold ${project.name}} - ${project.root}`,\n description,\n hidden: false,\n projectRoot: project.root\n } as CommitScopeProps;\n }\n }\n }\n }\n\n state.answers = Object.keys(state.config.questions).reduce(\n (ret, key) => {\n ret[key] = \"\";\n\n return ret;\n },\n {} as CommitState[\"answers\"]\n );\n\n return state as CommitState;\n}\n","import { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport wrap from \"word-wrap\";\nimport type { CommitState } from \"../types\";\n\nconst MAX_LINE_WIDTH = 72;\n\nexport const formatCommitMessage = (\n state: CommitState,\n workspaceConfig: StormWorkspaceConfig\n) => {\n const { config, answers } = state;\n const wrapOptions = {\n indent: \"\",\n trim: true,\n width: MAX_LINE_WIDTH\n };\n\n if (typeof answers.type !== \"string\") {\n throw new Error(\"Invalid commit type.\");\n }\n if (typeof answers.subject !== \"string\") {\n throw new Error(\"Invalid subject type.\");\n }\n if (\n workspaceConfig.variant !== \"minimal\" &&\n typeof answers.scope !== \"string\"\n ) {\n throw new Error(\"Invalid commit scope.\");\n }\n\n const emoji = answers.type?.[answers.type]?.emoji\n ? answers.type[answers.type].emoji\n : \"\";\n const scope =\n workspaceConfig.variant !== \"minimal\" &&\n typeof answers.scope === \"string\" &&\n answers.scope\n ? answers.scope.trim()\n : \"\";\n const subject = answers.subject?.trim();\n const type = answers.type;\n\n const format =\n config.settings.format ||\n (workspaceConfig.variant !== \"minimal\"\n ? \"{type}({scope}): {emoji}{subject}\"\n : \"{type}: {emoji}{subject}\");\n\n // Wrap these lines at MAX_LINE_WIDTH character\n const body =\n answers.body && typeof answers.body === \"string\"\n ? wrap(answers.body || \"\", wrapOptions)\n : \"\";\n const breaking =\n answers.breakingBody && typeof answers.breakingBody === \"string\"\n ? wrap(answers.breakingBody || \"\", wrapOptions)\n : \"\";\n const issues =\n answers.issuesBody && typeof answers.issuesBody === \"string\"\n ? wrap(answers.issuesBody || \"\", wrapOptions)\n : \"\";\n\n // @note(emoji) Add space after emoji (breakingChangePrefix/closedIssueEmoji)\n const head = format\n .replace(/\\{emoji\\}/g, config.settings.disableEmoji ? \"\" : `${emoji} `)\n .replace(/\\{scope\\}/g, scope)\n .replace(/\\{subject\\}/g, subject || \"\")\n .replace(/\\{type\\}/g, type || \"\");\n\n let msg = head;\n\n if (body) {\n msg += `\\n\\n${body}`;\n }\n\n if (breaking) {\n const breakingEmoji = config.settings.disableEmoji\n ? \"\"\n : config.settings.breakingChangePrefix;\n\n msg += `\\n\\nBREAKING CHANGE: ${breakingEmoji}${breaking}`;\n }\n\n if (issues) {\n const closedIssueEmoji = config.settings.disableEmoji\n ? \"\"\n : config.settings.closedIssuePrefix;\n\n msg += `\\n\\n${closedIssueEmoji}${config.settings.closedIssueMessage}${issues}`;\n }\n\n return msg;\n};\n","import { confirm, input, select } from \"@inquirer/prompts\";\nimport { joinPaths } from \"@storm-software/config-tools\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport {\n writeDebug,\n writeInfo\n} from \"@storm-software/config-tools/logger/console\";\nimport { run } from \"@storm-software/config-tools/utilities/run\";\nimport shellescape from \"any-shell-escape\";\nimport chalkTemplate from \"chalk-template\";\nimport fs from \"node:fs/promises\";\nimport { runCommitLint } from \"../commitlint/run\";\nimport { CommitQuestionProps, CommitState } from \"../types\";\nimport { createState, getGitDir } from \"./commit-state\";\nimport { formatCommitMessage } from \"./format-commit-message\";\n\nexport async function runCommit(commitizenFile?: string, dryRun = false) {\n const workspaceConfig = await getWorkspaceConfig();\n\n const state = await createState(workspaceConfig, commitizenFile);\n if (dryRun) {\n writeInfo(\"Running in dry mode.\", workspaceConfig);\n }\n\n console.log(chalkTemplate`\n{bold.#999999 ----------------------------------------}\n\n{bold.#FFFFFF ⚡ Storm Software Git-Tools - Commit}\n{#CCCCCC Please provide the requested details below...}\n`);\n\n state.answers = await askQuestions(state);\n\n const message = formatCommitMessage(state, workspaceConfig);\n const commitMsgFile = joinPaths(getGitDir(), \"COMMIT_EDITMSG\");\n\n console.log(chalkTemplate`\n{bold.#999999 ----------------------------------------}\n\n{bold.#FFFFFF Commit message} - {#DDDDDD ${message}}\n{bold.#FFFFFF Git-Commit File} - {#DDDDDD ${commitMsgFile}}\n\n `);\n\n await runCommitLint(workspaceConfig, { message });\n\n const commandItems = [\"git\", \"commit\", \"-S\"];\n\n commandItems.push(...[\"--file\", commitMsgFile]);\n const command = shellescape(commandItems);\n\n if (dryRun) {\n // The full path is replaced with a relative path to make the test pass on every machine\n writeDebug(\n `Skipping execution [dry-run]: ${command.replace(commitMsgFile, \".git/COMMIT_EDITMSG\")}`,\n workspaceConfig\n );\n writeDebug(`Message [dry-run]: ${message}`, workspaceConfig);\n } else {\n await fs.writeFile(commitMsgFile, message);\n\n run(workspaceConfig, command);\n }\n}\n\nasync function askQuestions<TCommitState extends CommitState = CommitState>(\n state: TCommitState\n): Promise<TCommitState[\"answers\"]> {\n let index = 0;\n for (const key of Object.keys(state.config.questions)) {\n if (\n state.config.questions[key] &&\n !state.config.questions[key].hidden &&\n (!state.config.questions[key].when ||\n state.config.questions[key].when(state.answers))\n ) {\n state.answers[key] = await askQuestion(\n index,\n state.config.questions[key]\n );\n index++;\n }\n }\n\n return state.answers;\n}\n\nexport async function askQuestion(\n index: number,\n question: CommitQuestionProps\n): Promise<string | boolean> {\n const message = chalkTemplate`{bold ${index + 1}. ${question.title}} - ${question.description}\n`;\n\n // const message = `${index + 1}. ${question.title}: ${question.description}`;\n\n if (\n question.type === \"select\" &&\n question.enum &&\n Object.keys(question.enum).length > 1\n ) {\n return select({\n message,\n choices: Object.keys(question.enum)\n .filter(key => !question.enum?.[key]?.hidden)\n .map(key => ({\n name: question.enum?.[key]?.title || key,\n value: key,\n description: question.enum?.[key]?.description || \"\"\n })),\n default: String(question.defaultValue || \"\")\n });\n } else if (question.type === \"confirm\") {\n return confirm({\n message,\n default: Boolean(question.defaultValue)\n });\n } else {\n let validate:\n | ((value: string) => string | boolean | Promise<string | boolean>)\n | undefined = undefined;\n if (question.minLength !== undefined || question.maxLength !== undefined) {\n validate = (value: string) => {\n if (\n question.minLength !== undefined &&\n value.length < question.minLength\n ) {\n return `Minimum length is ${question.minLength} characters.`;\n }\n if (\n question.maxLength !== undefined &&\n value.length > question.maxLength\n ) {\n return `Maximum length is ${question.maxLength} characters.`;\n }\n\n return true;\n };\n }\n\n return input({\n message,\n required: !!(question.minLength !== undefined && question.minLength > 0),\n default: String(question.defaultValue || \"\"),\n validate\n });\n }\n}\n","import { ProjectFileMap } from \"@nx/devkit\";\nimport Path, { dirname, isAbsolute, join } from \"node:path\";\n\nexport function findFileName(filePath: string): string {\n return (\n filePath\n ?.split(\n filePath?.includes(Path.sep)\n ? Path.sep\n : filePath?.includes(\"/\")\n ? \"/\"\n : \"\\\\\"\n )\n ?.pop() ?? \"\"\n );\n}\n\nexport function findFilePath(filePath: string): string {\n return filePath.replace(findFileName(filePath), \"\");\n}\n\nexport function resolvePath(filePath: string, basePath?: string) {\n if (isAbsolute(filePath)) {\n return filePath;\n }\n if (basePath) {\n return join(dirname(basePath), filePath);\n }\n\n return null;\n}\n\n/**\n * Rename the file name with a new name.\n *\n * @param filePath The current file path being processed\n * @param newFileName The updated file name being processed\n * @returns The modified or unmodified file path.\n */\nexport function renameFile(filePath: string, newFileName: string): string {\n const file = Path.parse(filePath);\n return Path.join(\n file.dir,\n newFileName.includes(\".\") ? newFileName : newFileName + file.ext\n );\n}\n\nexport function createFileToProjectMap(\n projectFileMap: ProjectFileMap\n): Record<string, string> {\n const fileToProjectMap = {};\n for (const [projectName, projectFiles] of Object.entries(projectFileMap)) {\n for (const file of projectFiles) {\n fileToProjectMap[file.file] = projectName;\n }\n }\n return fileToProjectMap;\n}\n","import { parse, Syntax } from \"@textlint/markdown-to-ast\";\nimport anchor from \"anchor-markdown-header\";\nimport { Parser } from \"htmlparser2\";\nimport _ from \"underscore\";\nimport updateSection from \"update-section\";\n\nexport const start =\n \"<!-- START doctoc -->\\n\" +\n \"<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\";\nexport const end = \"<!-- END doctoc -->\";\nexport const skipTag = \"<!-- DOCTOC SKIP -->\";\n\nfunction matchesStart(line) {\n return /<!-- START doctoc /.test(line);\n}\n\nfunction matchesEnd(line) {\n return /<!-- END doctoc /.test(line);\n}\n\nfunction notNull(x) {\n return x !== null;\n}\n\nfunction addAnchor(mode, header) {\n header.anchor = anchor(header.name, mode, header.instance);\n return header;\n}\n\nfunction getMarkdownHeaders(lines, maxHeaderLevel) {\n function extractText(header) {\n return header.children\n .map(function (x) {\n if (x.type === Syntax.Link) {\n return extractText(x);\n } else if (x.type === Syntax.Image) {\n // Images (at least on GitHub, untested elsewhere) are given a hyphen\n // in the slug. We can achieve this behavior by adding an '*' to the\n // TOC entry. Think of it as a \"magic char\" that represents the iamge.\n return \"*\";\n } else {\n return x.raw;\n }\n })\n .join(\"\");\n }\n\n return parse(lines.join(\"\\n\"))\n .children.filter(function (x) {\n return x.type === Syntax.Header;\n })\n .map(function (x) {\n return !maxHeaderLevel || x.depth <= maxHeaderLevel\n ? { rank: x.depth, name: extractText(x), line: x.loc.start.line }\n : null;\n })\n .filter(notNull);\n}\n\nfunction countHeaders(headers) {\n const instances = {};\n\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n const name = header.name;\n\n if (Object.prototype.hasOwnProperty.call(instances, name)) {\n // `instances.hasOwnProperty(name)` fails when there’s an instance named \"hasOwnProperty\".\n instances[name]++;\n } else {\n instances[name] = 0;\n }\n\n header.instance = instances[name];\n }\n\n return headers;\n}\n\nfunction getLinesToToc(lines, currentToc, info, processAll) {\n if (processAll || !currentToc) return lines;\n\n let tocableStart = 0;\n\n // when updating an existing toc, we only take the headers into account\n // that are below the existing toc\n if (info.hasEnd) tocableStart = info.endIdx + 1;\n\n return lines.slice(tocableStart);\n}\n\n// Use document context as well as command line args to infer the title\nfunction determineTitle(title, notitle, lines, info) {\n const defaultTitle = \"**Table of Contents** \";\n\n if (notitle) return \"\";\n if (title) return title;\n return info.hasStart ? lines[info.startIdx + 2] : defaultTitle;\n}\n\nexport function transform(\n content,\n mode,\n maxHeaderLevel,\n title,\n notitle,\n entryPrefix,\n processAll,\n updateOnly\n): any {\n if (content.indexOf(skipTag) !== -1) return { transformed: false };\n\n mode = mode || \"github.com\";\n entryPrefix = entryPrefix || \"-\";\n\n // only limit *HTML* headings by default\n const maxHeaderLevelHtml = maxHeaderLevel || 4;\n\n const lines = content.split(\"\\n\"),\n info = updateSection.parse(lines, matchesStart, matchesEnd);\n\n if (!info.hasStart && updateOnly) {\n return { transformed: false };\n }\n\n const inferredTitle = determineTitle(title, notitle, lines, info);\n\n const titleSeparator = inferredTitle ? \"\\n\\n\" : \"\\n\";\n\n const currentToc =\n info.hasStart && lines.slice(info.startIdx, info.endIdx + 1).join(\"\\n\"),\n linesToToc = getLinesToToc(lines, currentToc, info, processAll);\n\n const headers = getMarkdownHeaders(linesToToc, maxHeaderLevel).concat(\n getHtmlHeaders(linesToToc, maxHeaderLevelHtml)\n );\n\n headers.sort((a, b) => {\n if (!a && b) {\n return -1;\n }\n if (a && !b) {\n return 1;\n }\n if (!a && !b) {\n return 0;\n }\n\n return a!.line - b!.line;\n });\n\n const allHeaders = countHeaders(headers),\n lowestRank = _(allHeaders).chain().pluck(\"rank\").min().value(),\n linkedHeaders = _(allHeaders).map(addAnchor.bind(null, mode));\n\n if (linkedHeaders.length === 0) return { transformed: false };\n\n // 4 spaces required for proper indention on Bitbucket and GitLab\n const indentation =\n mode === \"bitbucket.org\" || mode === \"gitlab.com\" ? \" \" : \" \";\n\n const toc =\n inferredTitle +\n titleSeparator +\n linkedHeaders\n .map(function (x) {\n const indent = _(_.range(x.rank - lowestRank)).reduce(function (\n acc,\n x\n ) {\n return acc + indentation;\n }, \"\");\n\n return indent + entryPrefix + \" \" + x.anchor;\n })\n .join(\"\\n\") +\n \"\\n\";\n\n const wrappedToc = start + \"\\n\" + toc + \"\\n\" + end;\n\n if (currentToc === toc) return { transformed: false };\n\n const data = updateSection(\n lines.join(\"\\n\"),\n wrappedToc,\n matchesStart,\n matchesEnd,\n true\n );\n return { transformed: true, data: data, toc: toc, wrappedToc: wrappedToc };\n}\n\nfunction addLinenos(lines, headers) {\n let current = 0,\n line;\n\n return headers.map(function (x) {\n for (let lineno = current; lineno < lines.length; lineno++) {\n line = lines[lineno];\n if (new RegExp(x.text[0]).test(line)) {\n current = lineno;\n x.line = lineno;\n x.name = x.text.join(\"\");\n return x;\n }\n }\n\n // in case we didn't find a matching line, which is odd,\n // we'll have to assume it's right on the next line\n x.line = ++current;\n x.name = x.text.join(\"\");\n return x;\n });\n}\n\nfunction rankify(headers, max) {\n return headers\n .map(function (x) {\n x.rank = parseInt(x.tag.slice(1), 10);\n return x;\n })\n .filter(function (x) {\n return x.rank <= max;\n });\n}\n\nexport function getHtmlHeaders(lines, maxHeaderLevel) {\n const source = parse(lines.join(\"\\n\"))\n .children.filter(function (node) {\n return node.type === Syntax.Html;\n })\n .map(function (node) {\n return node.raw;\n })\n .join(\"\\n\");\n\n let headers = [] as any[];\n const grabbing = [] as any[];\n let text = [] as any[];\n\n const parser = new Parser(\n {\n onopentag: function (name, attr) {\n // Short circuit if we're already inside a pre\n if (grabbing[grabbing.length - 1] === \"pre\") return;\n\n if (name === \"pre\" || /h\\d/.test(name)) {\n grabbing.push(name);\n }\n },\n ontext: function (text_) {\n // Explicitly skip pre tags, and implicitly skip all others\n if (grabbing.length === 0 || grabbing[grabbing.length - 1] === \"pre\")\n return;\n\n text.push(text_);\n },\n onclosetag: function (name) {\n if (grabbing.length === 0) return;\n if (grabbing[grabbing.length - 1] === name) {\n const tag = grabbing.pop();\n headers.push({ text: text, tag: tag });\n text = [];\n }\n }\n },\n { decodeEntities: true }\n );\n\n parser.write(source);\n parser.end();\n\n headers = addLinenos(lines, headers);\n // consider anything past h4 to small to warrant a link, may be made configurable in the future\n headers = rankify(headers, maxHeaderLevel);\n return headers;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { readFileSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { extname, join } from \"node:path\";\nimport { transform } from \"./transform\";\n\nasync function transformAndSave(\n files: any[],\n mode = \"github.com\",\n maxHeaderLevel = 3,\n title = \"## Table of Contents\",\n noTitle = false,\n entryPrefix = undefined,\n processAll = false,\n updateOnly = false\n) {\n if (processAll) {\n console.log(\n \"--all flag is enabled. Including headers before the TOC location.\"\n );\n }\n\n if (updateOnly) {\n console.log(\n \"--update-only flag is enabled. Only updating files that already have a TOC.\"\n );\n }\n\n console.log(\"\\n==================\\n\");\n const transformed = files.map(x => {\n const result = transform(\n readFileSync(x.path, \"utf8\"),\n mode,\n maxHeaderLevel,\n title,\n noTitle,\n entryPrefix,\n processAll,\n updateOnly\n );\n result.path = x.path;\n return result;\n });\n\n const changed = transformed.filter(x => x.transformed);\n const unchanged = transformed.filter(x => {\n return !x.transformed;\n });\n\n for (const x of unchanged) {\n console.log('\"%s\" is up to date', x.path);\n }\n for (const x of changed) {\n console.log('\"%s\" will be updated', x.path);\n writeFileSync(x.path, x.data, \"utf8\");\n }\n}\n\nexport const doctoc = (\n directory: string,\n mode = \"github.com\",\n maxHeaderLevel = 3,\n title = \"## Table of Contents\",\n noTitle = false,\n entryPrefix = undefined,\n processAll = false,\n updateOnly = false\n) => {\n let files: any[] = [];\n\n const stat = statSync(directory);\n if (stat.isDirectory()) {\n console.log(\n '\\nDocToccing \"%s\" and its sub directories for %s.',\n directory,\n mode\n );\n files = findMarkdownFiles(directory);\n } else {\n console.log('\\nDocToccing single file \"%s\" for %s.', directory, mode);\n files = [{ path: directory }];\n }\n\n transformAndSave(\n files,\n mode,\n maxHeaderLevel,\n title,\n noTitle,\n entryPrefix,\n processAll,\n updateOnly\n );\n\n console.log(\"\\nEverything is OK.\");\n};\n\nconst markdownExts = [\".md\", \".markdown\"];\nconst ignoredDirs = [\".\", \"..\", \".git\", \"node_modules\"];\n\nfunction separateFilesAndDirs(fileInfos: FileInfo[]) {\n return {\n directories: fileInfos.filter(x => {\n const stats = statSync(x.path);\n return stats.isDirectory() && !ignoredDirs.includes(x.name);\n }),\n markdownFiles: fileInfos.filter(x => {\n const stats = statSync(x.path);\n return stats.isFile() && markdownExts.includes(extname(x.name));\n })\n };\n}\n\ntype FileInfo = {\n name: string;\n path: string;\n};\n\nfunction findMarkdownFiles(currentPath: string) {\n function getFileInfo(entry: string): FileInfo {\n const target = join(currentPath, entry);\n\n return {\n name: entry,\n path: target\n };\n }\n\n function process(fileInfos: FileInfo[]) {\n const res = separateFilesAndDirs(fileInfos);\n const targets = res.directories.map(directory => directory.path);\n\n if (res.markdownFiles.length > 0)\n console.log(\n '\\nFound %s in \"%s\"',\n res.markdownFiles.map(markdownFile => markdownFile.name).join(\", \"),\n currentPath\n );\n else console.log('\\nFound nothing in \"%s\"', currentPath);\n\n return {\n markdownFiles: res.markdownFiles,\n subDirs: targets\n };\n }\n\n const res = process(readdirSync(currentPath).map(getFileInfo));\n const markdownsInSubDirs: any[] = res.subDirs.map(findMarkdownFiles);\n const allMarkdownsHereAndSub = res.markdownFiles.concat(markdownsInSubDirs);\n\n return allMarkdownsHereAndSub.flat();\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { findFilePath } from \"../utilities/file-utils\";\n\nexport const getExecutorMarkdown = (\n _packageName: string,\n executorsJsonFile: string,\n executorsJson: Record<string, any>\n): string => {\n if (!executorsJson?.executors) {\n return \"\";\n }\n\n return Object.entries(executorsJson.executors)\n .map(([name, executor]: [string, any]) => {\n if (!name || !executor || executor.hidden) {\n return \"\";\n }\n\n let result = \"\";\n let title = \"\";\n let description = \"\";\n let required: string[] = [];\n\n if (executor.schema) {\n const schemaJsonPath = join(\n findFilePath(executorsJsonFile),\n executor.schema\n );\n if (existsSync(schemaJsonPath)) {\n const schemaJson = JSON.parse(\n readFileSync(schemaJsonPath, \"utf8\") ?? \"{}\"\n );\n\n if (schemaJson.title) {\n title = `## ${schemaJson.title}\\n\\n`;\n }\n\n if (schemaJson.description) {\n description = `${schemaJson.description\n .replaceAll(\"`\", \"\\\\`\")\n .replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n required =\n schemaJson.required && Array.isArray(schemaJson.required)\n ? schemaJson.required\n : [];\n if (\n schemaJson.properties &&\n Object.keys(schemaJson.properties).length > 0\n ) {\n result +=\n \"### Options\\n\\nThe following executor options are available:\\n\\n\";\n result += \"| Option | Type | Description | Default | \\n\";\n result += \"| --------- | ------ | ------------- | --------- | \\n\";\n\n result += Object.entries(schemaJson.properties)\n .map(([name, schema]: [string, any]) => {\n let result = \"\";\n if (name) {\n result += `| ${required.includes(name) ? \"**\" : \"\"}${name}${\n required.includes(name) ? \" \\\\*\" : \" \"\n }${required.includes(name) ? \"**\" : \"\"} `;\n if (schema.type) {\n if (\n schema.enum &&\n Array.isArray(schema.enum) &&\n schema.enum.length > 0\n ) {\n result += ` | ${schema.enum\n .map((x: any) =>\n !schema.type || schema.type === \"string\"\n ? `\"${x}\"`\n : `\\`${x}\\``\n )\n .join(\" \\\\| \")} `;\n } else if (schema.type === \"array\" && schema.items?.type) {\n result += ` | \\`${schema.items.type}[]\\` `;\n } else {\n result += ` | \\`${schema.type}\\` `;\n }\n } else {\n result += \" | `string` \";\n }\n\n if (schema.description) {\n result += ` | ${schema.description\n .replaceAll(\"`\", \"\\\\`\")\n .replaceAll(\"*\", \"\\\\*\")} `;\n } else {\n result += \" | \";\n }\n\n if (schema.default) {\n result +=\n schema.type === \"string\" || !schema.type\n ? ` | \"${schema.default}\" `\n : schema.type === \"array\"\n ? \" | `[]` \"\n : ` | \\`${schema.default}\\` `;\n } else {\n result += \" | \";\n }\n\n result += \" | \\n\";\n }\n\n return result;\n })\n .join(\" \");\n\n result += \"\\n\\n\";\n if (required.length > 0) {\n result +=\n \"**Please note:** _Option names followed by \\\\* above are required, and must be provided to run the executor._ \\n\\n\";\n }\n }\n }\n }\n\n if (!title) {\n title = `## ${name}\\n\\n`;\n }\n\n if (!description && executor.description) {\n description = `${executor.description.replaceAll(\"`\", \"\\\\`\").replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n return `${\n title + description\n }### Example \\n\\nThis executor can be used by executing the following in a command line utility: \\n\\n\\`\\`\\`cmd \\nnx run my-project:${name}\\n\\`\\`\\`\\n\\n**Please note:** _The ${name} executor should be included in the desired projects's \\`project.json\\` file.${\n required.length > 0\n ? \"All required options must be included in the `options` property of the json.\"\n : \"\"\n }_ \\n\\n${result}`;\n })\n .join(\"\\n\\n\");\n};\n\nexport const getGeneratorMarkdown = (\n packageName: string,\n generatorsJsonFile: string,\n generatorsJson: Record<string, any>\n): string => {\n if (!generatorsJson?.generators) {\n return \"\";\n }\n\n return Object.entries(generatorsJson.generators)\n .map(([name, generator]: [string, any]) => {\n if (!name || !generator) {\n return \"\";\n }\n\n let result = \"\";\n let title = \"\";\n let description = \"\";\n let example = \"\";\n const required = [];\n\n if (generator.schema) {\n const schemaJsonPath = join(\n findFilePath(generatorsJsonFile),\n generator.schema\n );\n if (existsSync(schemaJsonPath)) {\n const schemaJson = JSON.parse(\n readFileSync(schemaJsonPath, \"utf8\") ?? \"{}\"\n );\n\n if (schemaJson.title) {\n title = `## ${schemaJson.title}\\n\\n`;\n }\n\n if (schemaJson.description) {\n description = `${schemaJson.description.replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n if (\n schemaJson.properties &&\n Object.keys(schemaJson.properties).length > 0\n ) {\n const required =\n schemaJson.required && Array.isArray(schemaJson.required)\n ? schemaJson.required\n : [];\n\n result +=\n \"### Options\\n\\nThe following executor options are available:\\n\\n\";\n result += \"| Option | Type | Description | Default | \\n\";\n result += \"| --------- | ------ | ------------- | --------- | \\n\";\n\n result += Object.entries(schemaJson.properties)\n .map(([name, schema]: [string, any]) => {\n let resultSchema = \"\";\n if (name) {\n resultSchema += `| ${required.includes(name) ? \"**\" : \"\"}${name}${\n required.includes(name) ? \" \\\\*\" : \" \"\n }${required.includes(name) ? \"**\" : \"\"} `;\n if (schema.type) {\n if (\n schema.enum &&\n Array.isArray(schema.enum) &&\n schema.enum.length > 0\n ) {\n resultSchema += ` | ${schema.enum\n .map((x: any) =>\n !schema.type || schema.type === \"string\"\n ? `\"${x}\"`\n : `\\`${x}\\``\n )\n .join(\" \\\\| \")} `;\n } else if (schema.type === \"array\" && schema.items?.type) {\n resultSchema += ` | \\`${schema.items.type}[]\\` `;\n } else {\n resultSchema += ` | \\`${schema.type}\\` `;\n }\n } else {\n resultSchema += \" | `string` \";\n }\n\n if (schema.description) {\n resultSchema += ` | ${schema.description.replaceAll(\"*\", \"\\\\*\")} `;\n } else {\n resultSchema += \" | \";\n }\n\n if (schema.default) {\n resultSchema +=\n schema.type === \"string\" || !schema.type\n ? ` | \"${schema.default}\" `\n : schema.type === \"array\"\n ? \" | `[]` \"\n : ` | \\`${schema.default}\\` `;\n } else {\n resultSchema += \" | \";\n }\n\n resultSchema += \" | \\n\";\n }\n\n return resultSchema;\n })\n .join(\" \");\n\n result += \"\\n\\n\";\n if (required.length > 0) {\n result +=\n \"**Please note:** _Option names followed by \\\\* above are required, and must be provided to run the executor._ \\n\\n\";\n }\n }\n\n if (schemaJson.example) {\n if (\n Array.isArray(schemaJson.example) &&\n schemaJson.example.length > 0\n ) {\n example +=\n \"### Examples \\n\\nThis generator can be used by executing the following examples in a command line utility: \\n\\n\";\n example += schemaJson.example\n .map((exampleCmd: any) => {\n let resultCmd = \"\";\n if (\n exampleCmd.description &&\n typeof exampleCmd.description === \"string\"\n ) {\n resultCmd += `${exampleCmd.description.replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n if (\n exampleCmd.command &&\n typeof exampleCmd.command === \"string\"\n ) {\n resultCmd += `\\`\\`\\`bash \\n${exampleCmd.command}\\n\\`\\`\\`\\n\\n`;\n } else if (typeof exampleCmd === \"string\") {\n resultCmd += `\\`\\`\\`bash \\n${exampleCmd}\\n\\`\\`\\`\\n\\n`;\n }\n\n return resultCmd;\n })\n .join(\"\\n\\n\");\n } else if (\n schemaJson.example.command &&\n typeof schemaJson.example.command === \"string\"\n ) {\n if (\n schemaJson.example.description &&\n typeof schemaJson.example.description === \"string\"\n ) {\n example = `### Example \\n\\n${schemaJson.example.description.replaceAll(\n \"*\",\n \"\\\\*\"\n )} \\n\\n`;\n } else {\n example =\n \"### Example \\n\\nThis generator can be used by executing the following in a command line utility: \\n\\n\";\n }\n\n example += `\\`\\`\\`bash \\n${schemaJson.example.command}\\n\\`\\`\\`\\n\\n`;\n } else if (typeof schemaJson.example === \"string\") {\n example =\n \"### Example \\n\\nThis generator can be used by executing the following in a command line utility: \\n\\n\";\n example += `\\`\\`\\`bash \\n${schemaJson.example}\\n\\`\\`\\`\\n\\n`;\n } else {\n example =\n \"### Example \\n\\nThis generator can be used by executing the following in a command line utility: \\n\\n\";\n example += `\\`\\`\\`bash \\nnx g ${packageName}:${name}\\n\\`\\`\\`\\n\\n`;\n }\n\n if (required.length > 0) {\n example +=\n \"** Please note:** _All required options must be included as parameters when calling the generator._ \\n\\n\";\n }\n }\n }\n }\n\n if (!title) {\n title = `## ${name}\\n\\n`;\n }\n\n if (!description && generator.description) {\n description = `${generator.description.replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n return title + description + example + result;\n })\n .join(\"\\n\\n\");\n};\n","import { readFileSync } from \"node:fs\";\nimport { findFileName } from \"../utilities/file-utils\";\n\nexport const formatReadMe = (\n templatePath: string,\n readMeContent: string\n): string => {\n const templateContent = readFileSync(templatePath, \"utf8\");\n\n const section = findFileName(templatePath)\n .replace(templatePath, \"\")\n .replace(\"README.\", \"\")\n .replace(\".md\", \"\");\n return formatReadMeFromSectionName(section, templateContent, readMeContent);\n};\n\nexport const formatReadMeFromSectionName = (\n sectionName: string,\n templateContent: string,\n readMeContent: string,\n skipLint = true\n): string => {\n const { regex, start, end } = createRegExp(sectionName);\n if (!regex.test(readMeContent)) {\n console.warn(\n `Contents do not contain start/end comments for section \"${sectionName}\".\nStart: \"${start}\"\nEnd: \"${end}\"\nRegex: \"${regex}\"\nContent: \"${readMeContent}\"`\n );\n return readMeContent;\n }\n\n return readMeContent.replace(\n regex,\n `${start}\n${skipLint ? \"<!-- prettier-ignore-start -->\\n\" + \"<!-- markdownlint-disable -->\\n\" : \"\"}\n\n${templateContent}\n\n${skipLint ? \"<!-- markdownlint-restore -->\\n\" + \"<!-- prettier-ignore-end -->\\n\" : \"\"}\n${end}`\n );\n};\n\nexport const createTokens = (sectionName: string) => {\n const start = `<!-- START ${sectionName} -->`;\n const end = `<!-- END ${sectionName} -->`;\n return { start, end };\n};\n\nexport const createRegExp = (sectionName: string) => {\n const { start, end } = createTokens(sectionName);\n\n const regex = new RegExp(`${start}([\\\\s\\\\S]*?)${end}`);\n return { regex, start, end };\n};\n","import {\n existsSync,\n readFileSync,\n readdirSync,\n rmSync,\n writeFileSync\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n createProjectGraphAsync,\n readProjectsConfigurationFromProjectGraph\n} from \"nx/src/project-graph/project-graph.js\";\nimport type { ReadMeOptions } from \"../types\";\nimport { findFileName, findFilePath } from \"../utilities/file-utils\";\nimport { doctoc } from \"./doctoc\";\nimport { getExecutorMarkdown, getGeneratorMarkdown } from \"./nx-docs\";\nimport { createTokens, formatReadMeFromSectionName } from \"./utils\";\n\nexport const runReadme = async ({\n templates = \"./tools/readme-templates\",\n project,\n output,\n clean = true,\n prettier = true\n}: ReadMeOptions) => {\n const projectGraph = await createProjectGraphAsync({\n exitOnError: true\n });\n const projectConfigs =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n\n if (project) {\n await runProjectReadme(project, {\n templates,\n output,\n clean,\n prettier\n });\n } else {\n for (const projectName of Object.keys(projectConfigs.projects)) {\n await runProjectReadme(projectName, {\n templates,\n output,\n clean,\n prettier\n });\n }\n }\n};\n\nexport const runProjectReadme = async (\n projectName: string,\n { templates, output, clean = true, prettier = true }: ReadMeOptions\n) => {\n const projectGraph = await createProjectGraphAsync({\n exitOnError: true\n });\n const projectConfigs =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n\n const project = projectConfigs.projects[projectName];\n\n const inputFile = join(project?.root ?? \"./\", \"README.md\");\n if (existsSync(inputFile)) {\n console.info(`Formatting ${projectName}'s README file at \"${inputFile}\"`);\n\n const outputFilePath = output\n ? output.includes(\"README.md\")\n ? output\n : join(findFilePath(output), \"README.md\")\n : inputFile;\n\n if (clean && existsSync(outputFilePath)) {\n if (outputFilePath === inputFile) {\n console.warn(\n \"Skipping cleaning since output directory + file name is the same as input directory + file name.\"\n );\n } else {\n console.info(\n \"Cleaning output directory (set `clean` parameter to false to skip)...\"\n );\n rmSync(outputFilePath);\n }\n }\n\n let newContent = readdirSync(templates).reduce(\n (ret: string, fileName: string) => {\n console.info(`Using template \"${fileName}\" to format file...`);\n\n const templateFilePath = join(templates, fileName);\n const templateContent = readFileSync(templateFilePath, \"utf8\");\n\n const section = findFileName(templateFilePath)\n .replace(templates, \"\")\n .replace(\"README.\", \"\")\n .replace(\".md\", \"\");\n\n return formatReadMeFromSectionName(section, templateContent, ret);\n },\n readFileSync(inputFile, \"utf8\")\n );\n\n let packageName = projectName;\n const packageJsonPath = join(findFilePath(inputFile), \"package.json\");\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf8\") ?? \"{}\"\n );\n if (packageJson?.version) {\n console.info(\"Adding version...\");\n newContent = newContent.replace(\n \"<!-- VERSION -->\",\n packageJson.version\n );\n }\n if (packageJson?.name) {\n packageName = packageJson.name;\n }\n }\n\n if (newContent.includes(\"<!-- START executors -->\")) {\n const executorsJsonPath = join(findFilePath(inputFile), \"executors.json\");\n if (existsSync(executorsJsonPath)) {\n const executorsJson = JSON.parse(\n readFileSync(executorsJsonPath, \"utf8\") ?? \"{}\"\n );\n if (executorsJson?.executors) {\n console.info(\"Adding executors...\");\n\n newContent = formatReadMeFromSectionName(\n \"executors\",\n getExecutorMarkdown(packageName, executorsJsonPath, executorsJson),\n newContent\n );\n }\n }\n }\n\n if (newContent.includes(\"<!-- START generators -->\")) {\n const generatorsJsonPath = join(\n findFilePath(inputFile),\n \"generators.json\"\n );\n if (existsSync(generatorsJsonPath)) {\n const generatorsJson = JSON.parse(\n readFileSync(generatorsJsonPath, \"utf8\") ?? \"{}\"\n );\n if (generatorsJson?.generators) {\n console.info(\"Adding generators...\");\n\n newContent = formatReadMeFromSectionName(\n \"generators\",\n getGeneratorMarkdown(\n packageName,\n generatorsJsonPath,\n generatorsJson\n ),\n newContent\n );\n }\n }\n }\n\n if (prettier) {\n const prettier = await import(\"prettier\");\n console.info(\"Formatting output with Prettier\");\n\n newContent = await prettier.format(newContent, {\n parser: \"markdown\",\n trailingComma: \"none\",\n tabWidth: 2,\n semi: true,\n singleQuote: false,\n quoteProps: \"preserve\",\n insertPragma: false,\n bracketSameLine: true,\n printWidth: 80,\n bracketSpacing: true,\n arrowParens: \"avoid\",\n endOfLine: \"lf\"\n });\n }\n\n console.info(`Writing output markdown to \"${outputFilePath}\"`);\n writeFileSync(outputFilePath, newContent);\n\n try {\n const { start, end } = createTokens(\"doctoc\");\n if (newContent.includes(start) || newContent.includes(end)) {\n console.info(\"Formatting Table of Contents...\");\n\n doctoc(outputFilePath);\n } else {\n console.warn(\n `Contents do not contain start/end comments for section \"doctoc\", skipping table of contents generation...`\n );\n }\n } catch (e) {\n console.warn(`Failed to format Table of Contents for ${outputFilePath}.`);\n console.warn(e);\n }\n\n console.log(`ReadMe Formatting successfully ran for ${projectName}.`);\n } else {\n console.warn(`Cannot find the input file at ${inputFile}`);\n }\n};\n","const ACRONYMS = [\n \"3D\",\n \"4D\",\n \"5G\",\n \"6G\",\n \"7G\",\n \"8G\",\n \"ACID\",\n \"AES\",\n \"AI\",\n \"AJAX\",\n \"API\",\n \"AR\",\n \"ASCII\",\n \"B2B\",\n \"B2C\",\n \"BFF\",\n \"BI\",\n \"BIOS\",\n \"BGP\",\n \"BOM\",\n \"BYOD\",\n \"C2C\",\n \"CAGR\",\n \"CAPTCHA\",\n \"CD\",\n \"CDN\",\n \"CDP\",\n \"CI\",\n \"CI/CD\",\n \"CIAM\",\n \"CICD\",\n \"CLI\",\n \"CMDB\",\n \"CORS\",\n \"CPU\",\n \"CRUD\",\n \"CSR\",\n \"CSS\",\n \"CX\",\n \"DAG\",\n \"DBMS\",\n \"DDoS\",\n \"DNS\",\n \"DNSSEC\",\n \"DOM\",\n \"DR\",\n \"DRM\",\n \"DWH\",\n \"E2E\",\n \"EAI\",\n \"EKS\",\n \"EOF\",\n \"EOD\",\n \"ETC\",\n \"ETL\",\n \"EULA\",\n \"FIDO\",\n \"FQDN\",\n \"FTP\",\n \"FaaS\",\n \"GDPR\",\n \"GCP\",\n \"GPU\",\n \"GUID\",\n \"GUI\",\n \"GZIP\",\n \"HCI\",\n \"HDD\",\n \"HDFS\",\n \"HIPAA\",\n \"HMAC\",\n \"HOTP\",\n \"HSM\",\n \"HTML\",\n \"HTTP\",\n \"HTTP/2\",\n \"HTTP/2.0\",\n \"HTTP/3\",\n \"HTTP/3.0\",\n \"HTTP2\",\n \"HTTPS\",\n \"HTTPS/2\",\n \"HTTPS/3\",\n \"HTTPS3\",\n \"IAM\",\n \"IAMM\",\n \"IAMT\",\n \"IaaS\",\n \"ID\",\n \"IMAP\",\n \"IP\",\n \"IPFS\",\n \"IoT\",\n \"JSON\",\n \"JSONP\",\n \"JWT\",\n \"K8s\",\n \"KMS\",\n \"KPI\",\n \"LAN\",\n \"LHS\",\n \"LXC\",\n \"MFA\",\n \"ML\",\n \"MLOps\",\n \"MVC\",\n \"MVP\",\n \"NAS\",\n \"NAT\",\n \"NDA\",\n \"NFS\",\n \"NIST\",\n \"NLP\",\n \"NPS\",\n \"OCR\",\n \"OEM\",\n \"OKR\",\n \"OLAP\",\n \"OLTP\",\n \"OOP\",\n \"ORM\",\n \"OS\",\n \"OTP\",\n \"P2P\",\n \"PDP\",\n \"PaaS\",\n \"PCI\",\n \"PKI\",\n \"PP\",\n \"PWA\",\n \"PX\",\n \"QA\",\n \"RAID\",\n \"RAM\",\n \"RDS\",\n \"REST\",\n \"RHS\",\n \"RPC\",\n \"RPA\",\n \"RUM\",\n \"RSS\",\n \"SAN\",\n \"SASE\",\n \"SDLC\",\n \"SDK\",\n \"SEO\",\n \"SFTP\",\n \"SIEM\",\n \"SLA\",\n \"SMB\",\n \"SMTP\",\n \"SOAP\",\n \"SOC\",\n \"SOA\",\n \"SPDY\",\n \"SPF\",\n \"SQL\",\n \"SRV\",\n \"SRE\",\n \"SSH\",\n \"SSDL\",\n \"SSO\",\n \"SSL\",\n \"SSR\",\n \"TDD\",\n \"TLD\",\n \"TLS\",\n \"TLS1.3\",\n \"TOTP\",\n \"TRPC\",\n \"TTL\",\n \"UDP\",\n \"UI\",\n \"UID\",\n \"URI\",\n \"URL\",\n \"UTF\",\n \"UUID\",\n \"UX\",\n \"VM\",\n \"VLAN\",\n \"VPN\",\n \"VR\",\n \"WAF\",\n \"WAN\",\n \"WLAN\",\n \"WPA\",\n \"XACML\",\n \"XML\",\n \"XSRF\",\n \"XSS\",\n \"XR\",\n \"YAML\",\n \"ZTA\"\n];\n\nconst FORMAT_MAPPING = ACRONYMS.reduce(\n (ret, acronym) => {\n ret[acronym.toLowerCase()] = acronym;\n return ret;\n },\n {\n cspell: \"CSpell\",\n eslint: \"ESLint\",\n nx: \"Nx\"\n } as Record<string, string>\n);\n\nconst LOWER_CASE_WHEN_NOT_FIRST: string[] = [\n \"a\",\n \"an\",\n \"the\",\n \"is\",\n \"are\",\n \"of\",\n \"and\",\n \"to\",\n \"in\",\n \"for\",\n \"on\",\n \"with\",\n \"as\",\n \"at\",\n \"by\"\n] as const;\n\n/**\n * Convert the input string to title case.\n *\n * @remarks\n * \"This Is An Example\"\n *\n * @param input - The input string.\n * @returns The title cased string.\n */\nexport function titleCase<T extends string | undefined>(input?: T): T {\n if (!input) {\n return input as T;\n }\n\n const formatSegment = (segment: string) =>\n segment\n .toLowerCase()\n .split(/[\\s\\-_]+/)\n .filter(Boolean)\n .map((word, index) => {\n if (\n LOWER_CASE_WHEN_NOT_FIRST.includes(word.toLowerCase()) &&\n index > 0\n ) {\n return word.toLowerCase();\n }\n\n if (Object.keys(FORMAT_MAPPING).includes(word.toLowerCase())) {\n return FORMAT_MAPPING[word.toLowerCase()];\n }\n\n return `${\n word\n ? word.charAt(0).toUpperCase() + word.toLowerCase().slice(1)\n : word\n }`;\n })\n .join(\" \");\n\n return input\n .split(/\\s+-\\s+/)\n .map(part => formatSegment(part))\n .join(\" - \") as T;\n}\n","import {\n output,\n ProjectGraph,\n ProjectGraphProjectNode,\n Tree\n} from \"@nx/devkit\";\nimport {\n STORM_DEFAULT_RELEASE_BANNER,\n type StormWorkspaceConfig\n} from \"@storm-software/config\";\nimport {\n writeDebug,\n writeWarning\n} from \"@storm-software/config-tools/logger/console\";\nimport { joinPaths } from \"@storm-software/config-tools/utilities/correct-paths\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { DependencyBump } from \"nx/release/changelog-renderer\";\nimport {\n ChangelogChange,\n NxReleaseChangelogResult,\n PostGitTask\n} from \"nx/src/command-line/release/changelog\";\nimport { NxReleaseConfig } from \"nx/src/command-line/release/config/config\";\nimport { ReleaseGroupWithName } from \"nx/src/command-line/release/config/filter-release-groups\";\nimport { printAndFlushChanges } from \"nx/src/command-line/release/utils/print-changes\";\nimport {\n noDiffInChangelogMessage,\n ReleaseVersion,\n shouldPreferDockerVersionForReleaseGroup,\n VersionData\n} from \"nx/src/command-line/release/utils/shared\";\nimport { interpolate } from \"nx/src/tasks-runner/utils\";\nimport { format, resolveConfig } from \"prettier\";\nimport StormChangelogRenderer from \"../release/changelog-renderer\";\nimport {\n getGitHubRepoData,\n resolveTokenData,\n StormGithubRemoteReleaseClient\n} from \"../release/github\";\nimport { ChangelogOptions } from \"../release/release-client\";\nimport { ReleaseConfig } from \"../types\";\nimport { titleCase } from \"./title-case\";\n\nexport async function generateChangelogContent(\n releaseVersion: ReleaseVersion,\n filepath: string,\n newContent: string,\n currentContent?: string,\n project?: string | null,\n workspaceConfig?: StormWorkspaceConfig | null\n): Promise<string> {\n const formatOptions = (await resolveConfig(filepath)) ?? {};\n\n const bannerUrl =\n typeof workspaceConfig?.release.banner === \"string\"\n ? workspaceConfig?.release.banner\n : workspaceConfig?.release.banner?.url;\n\n const header = await format(\n `\n\n# Changelog ${project || workspaceConfig?.name ? \"for\" : \"\"}${workspaceConfig?.name ? ` ${titleCase(workspaceConfig.name)}` : \"\"}${project ? `${workspaceConfig?.name ? \" -\" : \"\"} ${titleCase(project)}` : \"\"}\n\n`,\n {\n ...formatOptions,\n filepath\n }\n );\n\n let changelogContents = (currentContent || \"\").replaceAll(header, \"\").trim();\n const changelogReleases = parseChangelogMarkdown(changelogContents).releases;\n\n const existingVersionToUpdate = changelogReleases.find(\n r => r.version === releaseVersion.rawVersion\n );\n if (existingVersionToUpdate) {\n changelogContents = changelogContents.replace(\n `## ${generateChangelogTitle(releaseVersion.rawVersion, project, workspaceConfig)}\\n\\n\\n${existingVersionToUpdate.body}`,\n newContent\n );\n } else {\n // No existing version, simply prepend the new release to the top of the file\n changelogContents = `${newContent}\\n\\n${changelogContents}`;\n }\n\n return await format(\n `${header}\n\n${changelogContents}`,\n {\n ...formatOptions,\n filepath\n }\n );\n}\n\nexport function generateChangelogTitle(\n version: string,\n project?: string | null,\n workspaceConfig?: StormWorkspaceConfig | null\n): string {\n if (!workspaceConfig?.name || !project) {\n return version;\n }\n\n return `[${version}](https://github.com/${\n typeof workspaceConfig.organization === \"string\"\n ? workspaceConfig.organization\n : workspaceConfig.organization?.name\n }/${workspaceConfig.name}/releases/tag/${project}%40${version}) (${\n new Date().getMonth() + 1 < 10\n ? `0${new Date().getMonth() + 1}`\n : new Date().getMonth() + 1\n }/${\n new Date().getDate() < 10\n ? `0${new Date().getDate()}`\n : new Date().getDate()\n }/${new Date().getFullYear()})`;\n}\n\nexport function parseChangelogMarkdown(contents: string) {\n /**\n * The release header may include prerelease identifiers (e.g., -alpha.13),\n * and major releases may use a single #, instead of the standard ## used\n * for minor and patch releases. This regex matches all of these cases.\n */\n const CHANGELOG_RELEASE_HEAD_RE = new RegExp(\n \"^#+\\\\s*\\\\[?(\\\\d+\\\\.\\\\d+\\\\.\\\\d+(?:-[a-zA-Z0-9\\\\.]+)?)\\\\]?\",\n \"gm\"\n );\n\n const headings = contents\n ? [...contents.matchAll(CHANGELOG_RELEASE_HEAD_RE)]\n : [];\n const releases: { version?: string; body: string }[] = [];\n\n for (let i = 0; i < headings.length; i++) {\n const heading = headings[i];\n if (!heading) {\n continue; // Skip if no match found\n }\n\n const nextHeading = headings[i + 1];\n const version = heading[1];\n\n const release = {\n version: version,\n body: contents\n .slice(\n heading.index + heading[0].length,\n nextHeading ? nextHeading.index : contents.length\n )\n .trim()\n };\n releases.push(release);\n }\n\n return {\n releases\n };\n}\n\nexport function filterHiddenChanges(\n changes: ChangelogChange[],\n conventionalCommitsConfig: NxReleaseConfig[\"conventionalCommits\"]\n): ChangelogChange[] {\n return changes.filter(change => {\n const type = change.type;\n\n const typeConfig = conventionalCommitsConfig.types[type];\n if (!typeConfig) {\n // don't include changes with unknown types\n return false;\n }\n return !typeConfig.changelog.hidden;\n });\n}\n\nexport async function generateChangelogForProjects({\n tree,\n args,\n changes,\n projectGraph,\n projectsVersionData,\n releaseGroup,\n projects,\n releaseConfig,\n projectToAdditionalDependencyBumps,\n workspaceConfig,\n ChangelogRendererClass\n}: {\n tree: Tree;\n args: ChangelogOptions;\n changes: ChangelogChange[];\n projectGraph: ProjectGraph;\n projectsVersionData: VersionData;\n releaseGroup: ReleaseGroupWithName;\n projects: ProjectGraphProjectNode[];\n releaseConfig: ReleaseConfig;\n projectToAdditionalDependencyBumps: Map<string, DependencyBump[]>;\n workspaceConfig: StormWorkspaceConfig;\n ChangelogRendererClass: typeof StormChangelogRenderer;\n}): Promise<NxReleaseChangelogResult[\"projectChangelogs\"] | undefined> {\n const config = releaseGroup.changelog;\n // The entire feature is disabled at the release group level, exit early\n if (config === false) {\n return;\n }\n\n const dryRun = !!args.dryRun;\n\n const repoData = getGitHubRepoData(args.gitRemote, \"github\");\n if (!repoData) {\n throw new Error(\n `Unable to create a remote release client because the GitHub repo slug could not be determined. Please ensure you have a valid GitHub remote configured.`\n );\n }\n\n const remoteReleaseClient = new StormGithubRemoteReleaseClient(\n repoData,\n {\n provider: \"github\",\n hostname: repoData.hostname,\n apiBaseUrl: repoData.apiBaseUrl\n },\n await resolveTokenData(repoData.hostname),\n workspaceConfig\n );\n\n const projectChangelogs: NxReleaseChangelogResult[\"projectChangelogs\"] = {};\n\n for (const project of projects) {\n let interpolatedTreePath = config.file || \"\";\n if (interpolatedTreePath) {\n interpolatedTreePath = interpolate(interpolatedTreePath, {\n projectName: project.name,\n projectRoot: project.data.root,\n workspaceRoot: \"\" // within the tree, workspaceRoot is the root\n });\n }\n\n /**\n * newVersion will be null in the case that no changes were detected (e.g. in conventional commits mode),\n * no changelog entry is relevant in that case.\n */\n if (\n !projectsVersionData[project.name] ||\n (projectsVersionData[project.name]?.newVersion === null &&\n !projectsVersionData[project.name]?.dockerVersion)\n ) {\n continue;\n }\n\n const preferDockerVersion =\n shouldPreferDockerVersionForReleaseGroup(releaseGroup);\n const releaseVersion = new ReleaseVersion({\n version: ((preferDockerVersion === true ||\n preferDockerVersion === \"both\") &&\n projectsVersionData[project.name]?.dockerVersion\n ? projectsVersionData[project.name]?.dockerVersion\n : projectsVersionData[project.name]?.newVersion)!,\n releaseTagPattern: releaseGroup.releaseTag.pattern,\n projectName: project.name\n });\n\n if (interpolatedTreePath) {\n const prefix = dryRun ? \"Previewing\" : \"Generating\";\n output.log({\n title: `${prefix} an entry in ${interpolatedTreePath} for ${chalk.white(\n releaseVersion.gitTag\n )}`\n });\n }\n\n const changelogRenderer = new ChangelogRendererClass({\n changes,\n changelogEntryVersion: releaseVersion.rawVersion,\n project: project.name,\n entryWhenNoChanges:\n typeof config.entryWhenNoChanges === \"string\"\n ? interpolate(config.entryWhenNoChanges, {\n projectName: project.name,\n projectRoot: project.data.root,\n workspaceRoot: \"\" // within the tree, workspaceRoot is the root\n })\n : false,\n changelogRenderOptions: config.renderOptions,\n isVersionPlans: !!releaseGroup.versionPlans,\n conventionalCommitsConfig: releaseConfig.conventionalCommits,\n dependencyBumps: projectToAdditionalDependencyBumps.get(project.name),\n remoteReleaseClient,\n workspaceConfig\n });\n const contents = await changelogRenderer.render();\n\n const postGitTask: PostGitTask | null =\n args.createRelease !== false && config.createRelease\n ? remoteReleaseClient.createPostGitTask(\n releaseVersion,\n contents,\n dryRun\n )\n : null;\n\n projectChangelogs[project.name] = {\n releaseVersion,\n contents,\n postGitTask\n };\n }\n\n for (const [projectName, projectChangelog] of Object.entries(\n projectChangelogs\n )) {\n if (!projectGraph.nodes[projectName]?.data.root) {\n writeWarning(\n `A changelog was generated for ${\n projectName\n }, but it could not be found in the project graph. Skipping writing changelog file.`,\n workspaceConfig\n );\n } else if (projectChangelog.contents) {\n const filePath = joinPaths(\n projectGraph.nodes[projectName].data.root,\n \"CHANGELOG.md\"\n );\n\n let currentContent: string | undefined;\n if (existsSync(filePath)) {\n currentContent = await readFile(filePath, \"utf8\");\n }\n\n writeDebug(\n `✍️ Writing changelog for project ${projectName} to ${filePath}`,\n workspaceConfig\n );\n\n const content = await generateChangelogContent(\n projectChangelog.releaseVersion,\n filePath,\n projectChangelog.contents,\n currentContent,\n projectName,\n workspaceConfig\n );\n\n tree.write(filePath, content);\n\n printAndFlushChanges(\n tree,\n !!args.dryRun,\n 3,\n false,\n noDiffInChangelogMessage,\n // Only print the change for the current changelog file at this point\n f => f.path === filePath\n );\n }\n }\n\n return projectChangelogs;\n}\n","import { FileData } from \"@nx/devkit\";\nimport { execCommand } from \"nx/src/command-line/release/utils/exec-command.js\";\nimport {\n getGitDiff,\n gitAdd,\n GitCommit,\n parseCommits\n} from \"nx/src/command-line/release/utils/git\";\nimport { isPrerelease } from \"nx/src/command-line/release/utils/shared\";\nimport { prerelease } from \"semver\";\n\nexport async function getCommits(\n fromSHA: string,\n toSHA: string\n): Promise<GitCommit[]> {\n const rawCommits = await getGitDiff(fromSHA, toSHA);\n // Parse as conventional commits\n return parseCommits(rawCommits);\n}\n\nexport async function filterProjectCommits({\n fromSHA,\n toSHA,\n projectPath\n}: {\n fromSHA: string;\n toSHA: string;\n projectPath: string;\n}) {\n const allCommits = await getCommits(fromSHA, toSHA);\n return allCommits.filter(c =>\n c.affectedFiles.find(f => f.startsWith(projectPath))\n );\n}\n\nexport function commitChangesNonProjectFiles(\n commit: GitCommit,\n nonProjectFiles: FileData[]\n): boolean {\n return nonProjectFiles.some(fileData =>\n commit.affectedFiles.includes(fileData.file)\n );\n}\n\nexport function getProjectsAffectedByCommit(\n commit: GitCommit,\n fileToProjectMap: Record<string, string>\n): string[] {\n const affectedProjects = new Set<string>();\n for (const file of commit.affectedFiles) {\n affectedProjects.add(fileToProjectMap[file]!);\n }\n return Array.from(affectedProjects);\n}\n\nexport function extractPreid(version: string): string | undefined {\n if (!isPrerelease(version)) {\n return undefined;\n }\n\n const preid = prerelease(version)?.[0];\n if (typeof preid === \"string\") {\n if (preid.trim() === \"\") {\n return undefined;\n }\n\n return preid;\n }\n if (typeof preid === \"number\") {\n return preid.toString();\n }\n return undefined;\n}\n\n// export function createGitTagValues(\n// releaseGroups: ReleaseGroupWithName[],\n// releaseGroupToFilteredProjects: Map<ReleaseGroupWithName, Set<string>>,\n// versionData: VersionData\n// ): string[] {\n// const tags = [] as string[];\n\n// for (const releaseGroup of releaseGroups) {\n// const releaseGroupProjectNames = Array.from(\n// releaseGroupToFilteredProjects.get(releaseGroup) ?? []\n// );\n// // For independent groups we want one tag per project, not one for the overall group\n// if (releaseGroup.projectsRelationship === \"independent\") {\n// for (const project of releaseGroupProjectNames) {\n// const projectVersionData = versionData[project];\n// if (projectVersionData?.newVersion) {\n// tags.push(\n// interpolate(releaseGroup.releaseTag.pattern, {\n// version: projectVersionData.newVersion,\n// projectName: project\n// })\n// );\n// }\n// }\n// continue;\n// }\n\n// if (releaseGroupProjectNames.length > 0 && releaseGroupProjectNames[0]) {\n// // For fixed groups we want one tag for the overall group\n// const projectVersionData = versionData[releaseGroupProjectNames[0]]; // all at the same version, so we can just pick the first one\n// if (projectVersionData?.newVersion) {\n// tags.push(\n// interpolate(releaseGroup.releaseTag.pattern, {\n// version: projectVersionData.newVersion,\n// releaseGroupName: releaseGroup.name\n// })\n// );\n// }\n// }\n// }\n\n// return tags;\n// }\n\n/**\n * Create a git tag for the current commit.\n *\n * @param params - Parameters for the gitTag function\n * @returns A promise that resolves to the output of the git tag command\n */\nexport async function gitTag({\n tag,\n message,\n additionalArgs,\n dryRun,\n verbose,\n logFn\n}: {\n tag: string;\n message?: string;\n additionalArgs?: string | string[];\n dryRun?: boolean;\n verbose?: boolean;\n logFn?: (message: string) => void;\n}): Promise<string> {\n logFn = logFn || console.log;\n\n const commandArgs = [\n \"tag\",\n // Create an annotated tag (recommended for releases here: https://git-scm.com/docs/git-tag)\n \"--annotate\",\n \"--sign\",\n tag,\n \"--message\",\n message || tag\n ];\n if (additionalArgs) {\n if (Array.isArray(additionalArgs)) {\n commandArgs.push(...additionalArgs);\n } else {\n commandArgs.push(...additionalArgs.split(\" \"));\n }\n }\n\n if (verbose) {\n logFn(\n dryRun\n ? `Would tag the current commit in git with the following command, but --dry-run was set:`\n : `Tagging the current commit in git with the following command:`\n );\n logFn(`git ${commandArgs.join(\" \")}`);\n }\n\n if (dryRun) {\n return \"\";\n }\n\n try {\n return await execCommand(\"git\", commandArgs);\n } catch (err) {\n throw new Error(`Unexpected error when creating tag ${tag}:\\n\\n${err}`);\n }\n}\n\n/**\n * Commit staged changes to git.\n *\n * @param params - Parameters for the gitCommit function\n * @returns A promise that resolves to the output of the git commit command\n */\nexport async function gitCommit({\n messages,\n additionalArgs,\n dryRun,\n verbose,\n logFn\n}: {\n messages: string[];\n additionalArgs?: string | string[];\n dryRun?: boolean;\n verbose?: boolean;\n logFn?: (message: string) => void;\n}): Promise<string | undefined> {\n logFn = logFn || console.log;\n\n const commandArgs = [\"commit\", \"-S\"];\n for (const message of messages) {\n commandArgs.push(\"--message\", message);\n }\n if (additionalArgs) {\n if (Array.isArray(additionalArgs)) {\n commandArgs.push(...additionalArgs);\n } else {\n commandArgs.push(...additionalArgs.split(\" \"));\n }\n }\n\n if (verbose) {\n logFn(\n dryRun\n ? `Would commit all previously staged files in git with the following command, but --dry-run was set:`\n : `Committing files in git with the following command:`\n );\n logFn(`git ${commandArgs.join(\" \")}`);\n }\n\n if (dryRun) {\n return;\n }\n\n let hasStagedFiles = false;\n try {\n // This command will error if there are staged changes\n await execCommand(\"git\", [\"diff-index\", \"--quiet\", \"HEAD\", \"--cached\"]);\n } catch {\n hasStagedFiles = true;\n }\n\n if (!hasStagedFiles) {\n logFn(\"\\nNo staged files found. Skipping commit.\");\n return;\n }\n\n return execCommand(\"git\", commandArgs);\n}\n\n/**\n * Commit changes to git.\n *\n * @param params - Parameters for the commitChanges function\n * @throws Error if no changed or deleted files are provided\n * @returns A promise that resolves when the commit is complete\n */\nexport async function commitChanges({\n changedFiles,\n deletedFiles,\n isDryRun,\n isVerbose,\n gitCommitMessages,\n gitCommitArgs,\n logFn\n}: {\n changedFiles?: string[];\n deletedFiles?: string[];\n isDryRun?: boolean;\n isVerbose?: boolean;\n gitCommitMessages?: string[];\n gitCommitArgs?: string | string[];\n logFn?: (message: string) => void;\n}) {\n logFn = logFn || console.log;\n\n if (!changedFiles?.length && !deletedFiles?.length) {\n throw new Error(\"Error: No changed files to commit\");\n }\n\n logFn(`Committing changes with git`);\n\n await gitAdd({\n changedFiles,\n deletedFiles,\n dryRun: isDryRun,\n verbose: isVerbose\n });\n // The extra logs need something breathing room\n if (isVerbose) {\n console.log(\"\");\n }\n await gitCommit({\n messages: gitCommitMessages || [],\n additionalArgs: gitCommitArgs,\n dryRun: isDryRun,\n verbose: isVerbose\n });\n}\n","/**\n * Creates a new object with specified keys omitted.\n *\n * This function takes an object and an array of keys, and returns a new object that\n * excludes the properties corresponding to the specified keys.\n *\n * @template T - The type of object.\n * @template K - The type of keys in object.\n * @param {T} obj - The object to omit keys from.\n * @param {K[]} keys - An array of keys to be omitted from the object.\n * @returns {Omit<T, K>} A new object with the specified keys omitted.\n *\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * const result = omit(obj, ['b', 'c']);\n * // result will be { a: 1 }\n */\nexport function omit<T extends Record<PropertyKey, any>, K extends keyof T>(\n obj: T,\n keys: readonly K[]\n): Omit<T, K>;\n\n/**\n * Creates a new object with specified keys omitted.\n *\n * This overload supports dynamic key arrays determined at runtime,\n * useful when working with keys from Object.keys() or similar operations.\n *\n * @template T - The type of object.\n * @param {T} obj - The object to omit keys from.\n * @param {PropertyKey[]} keys - An array of keys to be omitted from the object. Supports dynamic arrays.\n * @returns {Partial<T>} A new object with the specified keys omitted.\n *\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * const keysToOmit = Object.keys({ b: true, c: true }); // string[]\n * const result = omit(obj, keysToOmit);\n * // result will be { a: 1 }\n */\nexport function omit<T extends Record<PropertyKey, any>>(\n obj: T,\n keys: readonly PropertyKey[]\n): Partial<T>;\nexport function omit<T extends Record<PropertyKey, any>>(\n obj: T,\n keys: readonly PropertyKey[]\n): Partial<T> {\n const result = { ...obj };\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key && key in result) {\n delete result[key];\n }\n }\n\n return result;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { joinPathFragments, output } from \"@nx/devkit\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport type { AxiosRequestConfig } from \"axios\";\nimport axios from \"axios\";\nimport { execSync } from \"node:child_process\";\nimport { existsSync, promises as fsp } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { PostGitTask } from \"nx/src/command-line/release/changelog\";\nimport { ResolvedCreateRemoteReleaseProvider } from \"nx/src/command-line/release/config/config\";\nimport {\n defaultCreateReleaseProvider,\n GithubRemoteReleaseClient\n} from \"nx/src/command-line/release/utils/remote-release-clients/github\";\nimport { RemoteRepoData } from \"nx/src/command-line/release/utils/remote-release-clients/remote-release-client\";\nimport { ReleaseVersion } from \"nx/src/command-line/release/utils/shared\";\nimport { parse } from \"yaml\";\nimport { isCI } from \"../utilities\";\nimport { generateChangelogTitle } from \"../utilities/changelog-utils\";\nimport { titleCase } from \"../utilities/title-case\";\n\n/**\n * Extended {@link GithubRemoteReleaseClient} with Storm Software specific release APIs\n */\nexport class StormGithubRemoteReleaseClient extends GithubRemoteReleaseClient {\n protected repoData: RemoteRepoData;\n protected workspaceConfig: StormWorkspaceConfig;\n\n /**\n * Creates an instance of {@link StormGithubRemoteReleaseClient}.\n *\n * @param remoteRepoData - Data about the remote repository\n * @param createReleaseConfig - Configuration for creating releases\n * @param tokenData - Token data for authentication\n * @param workspaceConfig - The Storm workspace configuration object, which is loaded from the storm-workspace.json file.\n */\n public constructor(\n repoData: RemoteRepoData,\n createReleaseConfig: false | ResolvedCreateRemoteReleaseProvider,\n tokenData: {\n token: string;\n headerName: string;\n },\n workspaceConfig: StormWorkspaceConfig\n ) {\n super(repoData, createReleaseConfig, tokenData);\n\n this.repoData = repoData;\n this.workspaceConfig = workspaceConfig;\n }\n\n public override createPostGitTask(\n releaseVersion: ReleaseVersion,\n changelogContents: string,\n dryRun: boolean\n ): PostGitTask {\n return async (latestCommit: string) => {\n output.logSingleLine(`Creating GitHub Release`);\n\n await this.createOrUpdateRelease(\n releaseVersion,\n changelogContents,\n latestCommit,\n { dryRun }\n );\n };\n }\n\n public override async createOrUpdateRelease(\n releaseVersion: ReleaseVersion,\n changelogContents: string,\n latestCommit: string,\n { dryRun }: { dryRun: boolean }\n ): Promise<void> {\n if (!this.workspaceConfig) {\n this.workspaceConfig = await getWorkspaceConfig();\n }\n\n const name = releaseVersion.gitTag.includes(\"@\")\n ? releaseVersion.gitTag\n .replace(new RegExp(`^@${this.workspaceConfig.name}/`), \"\")\n .replace(/@.*$/, \"\")\n : releaseVersion.gitTag;\n\n return super.createOrUpdateRelease(\n releaseVersion,\n `\n${this.workspaceConfig.release.header || \"\"}\n\n# ${name ? `${titleCase(name)} ` : \"\"}v${releaseVersion.rawVersion}\n\nWe at [${\n this.workspaceConfig.organization\n ? titleCase(\n typeof this.workspaceConfig.organization === \"string\"\n ? this.workspaceConfig.organization\n : this.workspaceConfig.organization.name\n )\n : \"\"\n }](${this.workspaceConfig.homepage}) are very excited to announce the v${\n releaseVersion.rawVersion\n } release of the ${\n name\n ? this.workspaceConfig.name\n ? `${titleCase(this.workspaceConfig.name)} - ${titleCase(name)}`\n : titleCase(name)\n : this.workspaceConfig.name\n ? titleCase(this.workspaceConfig.name)\n : \"Storm Software\"\n } project! 🚀\n\nThese changes are released under the ${\n this.workspaceConfig.license.includes(\"license\")\n ? this.workspaceConfig.license\n : `${this.workspaceConfig.license} license`\n }. You can find more details on [our licensing page](${this.workspaceConfig.licensing}). You can find guides, API references, and other documentation around this release (and much more) on [our documentation site](${\n this.workspaceConfig.docs\n }).\n\nIf you have any questions or comments, feel free to reach out to the team on [Discord](${\n this.workspaceConfig.socials.discord\n }) or [our contact page](${this.workspaceConfig.contact}). Please help us spread the word by giving [this repository](https://github.com/${\n typeof this.workspaceConfig.organization === \"string\"\n ? this.workspaceConfig.organization\n : this.workspaceConfig.organization?.name\n }/${this.workspaceConfig.name}) a star ⭐ on GitHub or [posting on X (Twitter)](https://x.com/intent/tweet?text=Check%20out%20the%20latest%20@${\n this.workspaceConfig.socials.twitter\n }%20release%20${\n name ? `${titleCase(name)?.replaceAll(\" \", \"%20\")}%20` : \"\"\n }v${releaseVersion.rawVersion}%20%F0%9F%9A%80%0D%0A%0D%0Ahttps://github.com/${\n typeof this.workspaceConfig.organization === \"string\"\n ? this.workspaceConfig.organization\n : this.workspaceConfig.organization?.name\n }/${this.workspaceConfig.name}/releases/tag/${releaseVersion.gitTag}) about this release!\n\n## Release Notes\n\n${changelogContents\n .replaceAll(\n `## ${generateChangelogTitle(\n releaseVersion.rawVersion,\n name,\n this.workspaceConfig\n )}`,\n \"\"\n )\n .replaceAll(\n `# ${generateChangelogTitle(releaseVersion.rawVersion, name, this.workspaceConfig)}`,\n \"\"\n )}\n\n---\n\n${this.workspaceConfig.release.footer}\n`,\n latestCommit,\n { dryRun }\n );\n }\n\n /**\n * Get remote repository data, attempting to resolve it if not already set.\n */\n public override getRemoteRepoData<T extends RemoteRepoData>(): T | null {\n if (!this.repoData) {\n let githubRepoData = super.getRemoteRepoData<T>();\n if (!githubRepoData) {\n githubRepoData = getGitHubRepoData() as T;\n if (!githubRepoData) {\n output.error({\n title: `Unable to create a GitHub release because the GitHub repo slug could not be determined.`,\n bodyLines: [\n `Please ensure you have a valid GitHub remote configured. You can run \\`git remote -v\\` to list your current remotes.`\n ]\n });\n process.exit(1);\n }\n }\n\n this.repoData = githubRepoData;\n }\n\n return this.repoData as T;\n }\n}\n\nexport type RepoSlug = `${string}/${string}`;\n\ninterface GithubRequestConfig {\n repo: string;\n hostname: string;\n apiBaseUrl: string;\n token: string | null;\n}\n\n// https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#create-a-release--parameters\ninterface GithubRelease {\n id?: string;\n tag_name: string;\n target_commitish?: string;\n name?: string;\n body?: string;\n draft?: boolean;\n prerelease?: boolean;\n make_latest?: \"legacy\" | boolean;\n}\n\nexport function getGitHubRepoData(\n remoteName = \"origin\",\n createReleaseConfig: ResolvedCreateRemoteReleaseProvider | string = \"github\"\n): RemoteRepoData | undefined {\n try {\n const remoteUrl = execSync(`git remote get-url ${remoteName}`, {\n encoding: \"utf8\",\n stdio: \"pipe\"\n }).trim();\n\n // Use the default provider (github.com) if custom one is not specified or releases are disabled\n let hostname = defaultCreateReleaseProvider.hostname;\n let apiBaseUrl = defaultCreateReleaseProvider.apiBaseUrl;\n if (createReleaseConfig && typeof createReleaseConfig !== \"string\") {\n hostname = createReleaseConfig.hostname;\n apiBaseUrl = createReleaseConfig.apiBaseUrl!;\n }\n\n // Extract the 'user/repo' part from the URL\n const escapedHostname = hostname.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexString = `${escapedHostname}[/:]([\\\\w.-]+/[\\\\w.-]+)(\\\\.git)?`;\n const regex = new RegExp(regexString);\n const match = remoteUrl?.match(regex);\n\n if (match && match[1]) {\n return {\n hostname,\n apiBaseUrl,\n // Ensure any trailing .git is stripped\n slug: match[1].replace(/\\.git$/, \"\") as RepoSlug\n };\n } else {\n throw new Error(\n `Could not extract \"user/repo\" data from the resolved remote URL: ${remoteUrl}`\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n output.error({\n title: `Failed to get GitHub repo data`,\n bodyLines: [error.message]\n });\n\n return undefined;\n }\n}\n\ninterface GithubReleaseOptions {\n version: string;\n body: string;\n prerelease: boolean;\n commit: string;\n}\n\nasync function syncGithubRelease(\n githubRequestConfig: GithubRequestConfig,\n release: GithubReleaseOptions,\n existingGithubReleaseForVersion?: GithubRelease\n) {\n const ghRelease: GithubRelease = {\n tag_name: release.version,\n name: release.version,\n body: release.body,\n prerelease: release.prerelease,\n // legacy specifies that the latest release should be determined based on the release creation date and higher semantic version.\n make_latest: \"legacy\"\n };\n\n try {\n const newGhRelease = await (existingGithubReleaseForVersion\n ? updateGithubRelease(\n githubRequestConfig,\n existingGithubReleaseForVersion.id!,\n ghRelease\n )\n : createGithubRelease(githubRequestConfig, {\n ...ghRelease,\n target_commitish: release.commit\n }));\n return {\n status: existingGithubReleaseForVersion ? \"updated\" : \"created\",\n id: newGhRelease.id,\n url: newGhRelease.html_url\n };\n } catch (error) {\n if (isCI()) {\n console.error(\n `An error occurred while trying to create a release on GitHub, please report this on https://github.com/storm-software/storm-ops (NOTE: make sure to redact your GitHub token from the error message!): ${typeof error?.message === \"string\" ? error?.message : `\\n\\n${error}`}`\n );\n\n throw new Error(\n \"`An error occurred while trying to create a release on GitHub in a CI environment\",\n {\n cause: error\n }\n );\n }\n\n return {\n status: \"manual\",\n error,\n url: githubNewReleaseURL(githubRequestConfig, release),\n requestData: ghRelease\n };\n }\n}\n\n/**\n * Resolve a GitHub token from environment variables or gh CLI\n */\nexport async function resolveTokenData(\n hostname: string\n): Promise<{ token: string; headerName: string }> {\n // Try and resolve from the environment\n const tokenFromEnv =\n process.env.STORM_BOT_GITHUB_TOKEN ||\n process.env.GITHUB_TOKEN ||\n process.env.GH_TOKEN;\n if (tokenFromEnv) {\n return { token: tokenFromEnv, headerName: \"Authorization\" };\n }\n\n // Try and resolve from gh CLI installation\n const ghCLIPath = joinPathFragments(\n process.env.XDG_CONFIG_HOME || joinPathFragments(homedir(), \".config\"),\n \"gh\",\n \"hosts.yml\"\n );\n if (existsSync(ghCLIPath)) {\n const yamlContents = await fsp.readFile(ghCLIPath, \"utf8\");\n\n const ghCLIConfig = parse(yamlContents) as Record<\n string,\n {\n user: string;\n oauth_token?: { token: string; headerName: string };\n git_protocol?: \"https\" | \"ssh\";\n }\n >;\n if (ghCLIConfig[hostname]) {\n // Web based session (the token is already embedded in the config)\n if (ghCLIConfig[hostname].oauth_token) {\n return ghCLIConfig[hostname].oauth_token;\n }\n // SSH based session (we need to dynamically resolve a token using the CLI)\n if (\n ghCLIConfig[hostname].user &&\n ghCLIConfig[hostname].git_protocol === \"ssh\"\n ) {\n const token = execSync(`gh auth token`, {\n encoding: \"utf8\",\n stdio: \"pipe\",\n windowsHide: false\n }).trim();\n return { token, headerName: \"Authorization\" };\n }\n }\n }\n if (hostname !== \"github.com\") {\n console.log(\n `Warning: It was not possible to automatically resolve a GitHub token from your environment for hostname ${hostname}. If you set the GITHUB_TOKEN or GH_TOKEN environment variable, that will be used for GitHub API requests.`\n );\n }\n\n throw new Error(\n `Unable to resolve a GitHub token for hostname ${hostname}. Please set the GITHUB_TOKEN or GH_TOKEN environment variable, or ensure you have an active session via the official gh CLI tool (https://cli.github.com).`\n );\n}\n\nexport async function getGithubReleaseByTag(\n config: GithubRequestConfig,\n tag: string\n): Promise<GithubRelease> {\n return (\n await makeGithubRequest(\n config,\n `/repos/${config.repo}/releases/tags/${tag}`,\n {}\n )\n ).data as GithubRelease;\n}\n\nexport async function makeGithubRequest(\n config: GithubRequestConfig,\n url: string,\n opts: AxiosRequestConfig = {}\n) {\n return await axios(url, {\n ...opts,\n baseURL: config.apiBaseUrl,\n headers: {\n ...(opts.headers as any),\n Authorization: config.token ? `Bearer ${config.token}` : undefined\n }\n });\n}\n\nasync function createGithubRelease(\n config: GithubRequestConfig,\n body: GithubRelease\n) {\n return (\n await makeGithubRequest(config, `/repos/${config.repo}/releases`, {\n method: \"POST\",\n data: body\n })\n ).data;\n}\n\nasync function updateGithubRelease(\n config: GithubRequestConfig,\n id: string,\n body: GithubRelease\n) {\n return (\n await makeGithubRequest(config, `/repos/${config.repo}/releases/${id}`, {\n method: \"PATCH\",\n data: body\n })\n ).data;\n}\n\nfunction githubNewReleaseURL(\n config: GithubRequestConfig,\n release: GithubReleaseOptions\n) {\n // Parameters taken from https://github.com/isaacs/github/issues/1410#issuecomment-442240267\n let url = `https://${config.hostname}/${config.repo}/releases/new?tag=${\n release.version\n }&title=${release.version}&body=${encodeURIComponent(release.body)}&target=${\n release.commit\n }`;\n if (release.prerelease) {\n url += \"&prerelease=true\";\n }\n return url;\n}\n\nexport async function isUserAnOrganizationMember(\n userId: string,\n config: StormWorkspaceConfig,\n remoteName = \"origin\"\n): Promise<boolean> {\n try {\n const repoData = getGitHubRepoData(remoteName, \"github\");\n if (!repoData) {\n throw new Error(\n `Unable to validate GitHub actor because the GitHub repo slug could not be determined. Please ensure you have a valid GitHub remote configured.`\n );\n }\n\n const tokenData = await resolveTokenData(repoData.hostname);\n if (!tokenData.token) {\n throw new Error(\n `Unable to validate GitHub actor because no token was provided. Please set the GITHUB_TOKEN or GH_TOKEN environment variable, or ensure you have an active session via the official gh CLI tool (https://cli.github.com).`\n );\n }\n\n const result = await makeGithubRequest(\n {\n repo: repoData.slug,\n hostname: repoData.hostname,\n apiBaseUrl: repoData.apiBaseUrl,\n token: tokenData?.token || null\n },\n `/orgs/${\n typeof config.organization === \"string\"\n ? config.organization\n : config.organization?.name\n }/members/${userId}`,\n {}\n );\n if (result.status !== 204) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport type { StormWorkspaceConfig } from \"@storm-software/config\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools\";\nimport axios from \"axios\";\nimport DefaultChangelogRenderer, {\n DefaultChangelogRenderOptions,\n DependencyBump\n} from \"nx/release/changelog-renderer\";\nimport { ChangelogChange } from \"nx/src/command-line/release/changelog\";\nimport { NxReleaseConfig } from \"nx/src/command-line/release/config/config\";\nimport { DEFAULT_CONVENTIONAL_COMMITS_CONFIG } from \"nx/src/command-line/release/config/conventional-commits\";\nimport { RemoteReleaseClient } from \"nx/src/command-line/release/utils/remote-release-clients/remote-release-client\";\nimport { major } from \"semver\";\nimport { generateChangelogTitle } from \"../utilities/changelog-utils\";\n\ntype DefaultChangelogRendererParams = ConstructorParameters<\n typeof DefaultChangelogRenderer\n>[0];\n\nexport interface StormChangelogRenderParams {\n changes: ChangelogChange[];\n changelogEntryVersion: string;\n project: string | null;\n entryWhenNoChanges?: string | false;\n isVersionPlans: boolean;\n changelogRenderOptions: DefaultChangelogRenderOptions;\n dependencyBumps?: DependencyBump[];\n conventionalCommitsConfig?: NxReleaseConfig[\"conventionalCommits\"];\n remoteReleaseClient: RemoteReleaseClient<any>;\n workspaceConfig: StormWorkspaceConfig;\n}\n\nexport default class StormChangelogRenderer extends DefaultChangelogRenderer {\n /**\n * The Storm workspace configuration object, which is loaded from the storm-workspace.json file.\n */\n protected workspaceConfig?: StormWorkspaceConfig;\n\n /**\n * A ChangelogRenderer class takes in the determined changes and other relevant metadata and returns a string, or a Promise of a string of changelog contents (usually markdown).\n *\n * @param config - The configuration object for the ChangelogRenderer\n */\n public constructor(config: StormChangelogRenderParams) {\n const resolvedConfig = {\n entryWhenNoChanges: false,\n conventionalCommitsConfig: DEFAULT_CONVENTIONAL_COMMITS_CONFIG,\n ...config\n } as DefaultChangelogRendererParams;\n\n super(resolvedConfig);\n\n this.workspaceConfig = config.workspaceConfig;\n this.remoteReleaseClient = resolvedConfig.remoteReleaseClient;\n }\n\n public override async render(): Promise<string> {\n if (!this.workspaceConfig) {\n this.workspaceConfig = await getWorkspaceConfig();\n }\n\n return super.render();\n }\n\n protected override preprocessChanges(): void {\n this.relevantChanges = [...this.changes];\n this.breakingChanges = [];\n this.additionalChangesForAuthorsSection = [];\n\n // Filter out reverted changes\n for (let i = this.relevantChanges.length - 1; i >= 0; i--) {\n const change = this.relevantChanges[i];\n if (change && change.type === \"revert\" && change.revertedHashes) {\n for (const revertedHash of change.revertedHashes) {\n const revertedCommitIndex = this.relevantChanges.findIndex(\n c => c.shortHash && revertedHash.startsWith(c.shortHash)\n );\n if (revertedCommitIndex !== -1) {\n this.relevantChanges.splice(revertedCommitIndex, 1);\n this.relevantChanges.splice(i, 1);\n i--;\n break;\n }\n }\n }\n }\n\n if (this.isVersionPlans) {\n this.conventionalCommitsConfig = {\n types: {\n feat: DEFAULT_CONVENTIONAL_COMMITS_CONFIG.types.feat,\n fix: DEFAULT_CONVENTIONAL_COMMITS_CONFIG.types.fix\n }\n };\n\n for (let i = this.relevantChanges.length - 1; i >= 0; i--) {\n if (this.relevantChanges[i]?.isBreaking) {\n const change = this.relevantChanges[i];\n if (change) {\n this.additionalChangesForAuthorsSection.push(change);\n const line = this.formatChange(change);\n this.breakingChanges.push(line);\n this.relevantChanges.splice(i, 1);\n }\n }\n }\n } else {\n for (const change of this.relevantChanges) {\n if (change.isBreaking) {\n const breakingChangeExplanation = change.body\n ? this.extractBreakingChangeExplanation(change.body)\n : \"\";\n\n // If the change has a body, we try to extract a more detailed explanation\n this.breakingChanges.push(\n breakingChangeExplanation\n ? `- ${\n change.scope ? `**${change.scope.trim()}:** ` : \"\"\n }${breakingChangeExplanation}`\n : this.formatChange(change)\n );\n }\n }\n }\n }\n\n /**\n * Determines if the changelog entry should be rendered as empty. This is the case when there are no relevant changes, breaking changes, or dependency bumps.\n */\n // protected override shouldRenderEmptyEntry(): boolean {\n // return true;\n // }\n\n protected override renderVersionTitle(): string {\n const isMajorVersion =\n `${major(this.changelogEntryVersion)}.0.0` ===\n this.changelogEntryVersion.replace(/^v/, \"\");\n\n return isMajorVersion\n ? `# ${generateChangelogTitle(\n this.changelogEntryVersion,\n this.project!,\n this.workspaceConfig\n )}`\n : `## ${generateChangelogTitle(\n this.changelogEntryVersion,\n this.project!,\n this.workspaceConfig\n )}`;\n }\n\n protected override renderBreakingChanges(): string[] {\n return [\n \"### Breaking Changes\",\n \"\",\n ...Array.from(new Set(this.breakingChanges))\n ];\n }\n\n protected override renderDependencyBumps(): string[] {\n const markdownLines = [\"\", \"### Updated Dependencies\", \"\"];\n this.dependencyBumps?.forEach(({ dependencyName, newVersion }) => {\n const markdownLine = `- Updated **${dependencyName}** to **v${\n newVersion\n }**`;\n if (!markdownLines.includes(markdownLine)) {\n markdownLines.push(markdownLine);\n }\n });\n\n return markdownLines;\n }\n\n protected override async renderAuthors(): Promise<string[]> {\n const markdownLines: string[] = [];\n const _authors = new Map<string, { email: Set<string>; github?: string }>();\n\n for (const change of [\n ...this.relevantChanges,\n ...this.additionalChangesForAuthorsSection\n ]) {\n if (!change.authors) {\n continue;\n }\n for (const author of change.authors) {\n const name = this.formatName(author.name);\n if (\n !name ||\n name.includes(\"[bot]\") ||\n name === this.workspaceConfig?.bot.name\n ) {\n continue;\n }\n\n if (_authors.has(name)) {\n const entry = _authors.get(name);\n entry?.email.add(author.email);\n } else {\n _authors.set(name, { email: new Set([author.email]) });\n }\n }\n }\n\n if (this.changelogRenderOptions.mapAuthorsToGitHubUsernames) {\n await Promise.all(\n [..._authors.keys()].map(async authorName => {\n const meta = _authors.get(authorName);\n if (!meta) {\n return;\n }\n\n for (const email of meta.email) {\n if (email?.endsWith(\"@users.noreply.github.com\")) {\n const match = email?.match(\n /^(\\d+\\+)?([^@]+)@users\\.noreply\\.github\\.com$/\n );\n if (match && match[2]) {\n meta.github = match[2];\n break;\n }\n }\n\n const { data } = await axios\n .get<\n any,\n { data?: { user?: { username: string } } }\n >(`https://ungh.cc/users/find/${email}`)\n .catch(() => ({ data: { user: null } }));\n if (data?.user) {\n meta.github = data.user.username;\n break;\n }\n }\n })\n );\n }\n\n const authors = [..._authors.entries()].map(e => ({\n name: e[0],\n ...e[1]\n }));\n\n if (authors.length > 0) {\n markdownLines.push(\n \"\",\n \"### \" + \"❤️ Thank You\",\n \"\",\n ...authors\n .sort((a, b) => a.name.localeCompare(b.name))\n .map(i => {\n const github = i.github ? ` @${i.github}` : \"\";\n return `- ${i.name}${github}`;\n })\n );\n }\n\n return markdownLines;\n }\n\n protected override formatChange(change: ChangelogChange): string {\n let description = change.description || \"\";\n let extraLines = [] as string[];\n let extraLinesStr = \"\";\n if (description.includes(\"\\n\")) {\n const lines = description.split(\"\\n\");\n if (lines.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n description = lines[0]!;\n extraLines = lines.slice(1);\n }\n\n const indentation = \" \";\n extraLinesStr = extraLines\n .filter(l => l.trim().length > 0)\n .map(l => `${indentation}${l}`)\n .join(\"\\n\");\n }\n\n let changeLine =\n \"- \" +\n (!this.isVersionPlans && change.scope\n ? `**${change.scope.trim()}:** `\n : \"\") +\n description;\n if (change.githubReferences) {\n changeLine += this.remoteReleaseClient.formatReferences(\n change.githubReferences\n );\n }\n\n if (extraLinesStr) {\n changeLine += \"\\n\\n\" + extraLinesStr;\n }\n\n return changeLine;\n }\n}\n","import { joinPaths } from \"@storm-software/config-tools/utilities/correct-paths\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport { DEFAULT_COMMIT_TYPES } from \"conventional-changelog-storm-software/commit-types\";\nimport defu from \"defu\";\nimport { NxReleaseChangelogConfiguration } from \"nx/src/config/nx-json\";\nimport { DEFAULT_MONOREPO_COMMIT_QUESTIONS } from \"../commit/config/monorepo\";\nimport { ReleaseConfig, ReleaseGroupConfig } from \"../types\";\nimport { omit } from \"../utilities/omit\";\nimport StormChangelogRenderer from \"./changelog-renderer\";\n\nexport const DEFAULT_CONVENTIONAL_COMMITS_CONFIG = {\n questions: DEFAULT_MONOREPO_COMMIT_QUESTIONS,\n types: DEFAULT_COMMIT_TYPES\n};\n\nexport const DEFAULT_RELEASE_TAG_PATTERN = \"{projectName}@{version}\";\n\nexport const DEFAULT_RELEASE_GROUP_CONFIG = {\n projectsRelationship: \"independent\",\n changelog: {\n createRelease: \"github\",\n entryWhenNoChanges: false,\n file: false,\n renderOptions: {\n authors: false,\n commitReferences: true,\n versionTitleDate: true\n }\n },\n version: {\n currentVersionResolver: \"git-tag\",\n fallbackCurrentVersionResolver: \"disk\",\n specifierSource: \"conventional-commits\",\n groupPreVersionCommand: \"pnpm build\"\n },\n releaseTag: { pattern: DEFAULT_RELEASE_TAG_PATTERN }\n} as const;\n\nexport const DEFAULT_JS_RELEASE_GROUP_CONFIG: ReleaseGroupConfig = {\n ...DEFAULT_RELEASE_GROUP_CONFIG,\n projects: [\"packages/*\"],\n version: {\n ...DEFAULT_RELEASE_GROUP_CONFIG.version,\n versionActions:\n \"@storm-software/workspace-tools/release/js-version-actions\",\n versionActionsOptions: {\n currentVersionResolver: \"git-tag\",\n specifierSource: \"conventional-commits\"\n },\n manifestRootsToUpdate: [\n \"{projectRoot}\",\n {\n path: \"dist/{projectRoot}\",\n preserveLocalDependencyProtocols: false\n }\n ]\n }\n} as const;\n\nexport const DEFAULT_RUST_RELEASE_GROUP_CONFIG: ReleaseGroupConfig = {\n ...DEFAULT_RELEASE_GROUP_CONFIG,\n projects: [\"crates/*\"],\n version: {\n ...DEFAULT_RELEASE_GROUP_CONFIG.version,\n versionActions:\n \"@storm-software/workspace-tools/release/rust-version-actions\",\n versionActionsOptions: {\n currentVersionResolver: \"git-tag\",\n specifierSource: \"conventional-commits\"\n },\n manifestRootsToUpdate: [\"{projectRoot}\"]\n }\n} as const;\n\nexport const DEFAULT_RELEASE_CONFIG: ReleaseConfig = {\n conventionalCommits: DEFAULT_CONVENTIONAL_COMMITS_CONFIG,\n groups: {\n packages: DEFAULT_JS_RELEASE_GROUP_CONFIG,\n crates: DEFAULT_RUST_RELEASE_GROUP_CONFIG\n },\n changelog: {\n automaticFromRef: true,\n workspaceChangelog: false,\n projectChangelogs: true\n },\n releaseTag: { pattern: DEFAULT_RELEASE_TAG_PATTERN }\n} as const;\n\n/**\n * Get the release group configurations, applying defaults where necessary\n *\n * @param releaseConfig - The release configuration to use\n * @param workspaceConfig - The workspace configuration to use\n * @returns The release group configurations\n */\nexport function getReleaseGroupConfig(\n releaseConfig: Partial<ReleaseConfig>,\n workspaceConfig: StormWorkspaceConfig\n) {\n return !releaseConfig?.groups ||\n Object.keys(releaseConfig.groups).length === 0\n ? {}\n : Object.fromEntries(\n Object.entries(releaseConfig.groups).map(([name, group]) => {\n const config = defu(\n {\n ...omit(DEFAULT_RELEASE_GROUP_CONFIG, [\"changelog\", \"version\"]),\n ...group\n },\n {\n version: {\n ...(DEFAULT_RELEASE_GROUP_CONFIG.version as NxReleaseChangelogConfiguration)\n }\n },\n {\n changelog: {\n ...(DEFAULT_RELEASE_GROUP_CONFIG.changelog as NxReleaseChangelogConfiguration),\n renderer: StormChangelogRenderer,\n renderOptions: {\n ...(\n DEFAULT_RELEASE_GROUP_CONFIG.changelog as NxReleaseChangelogConfiguration\n ).renderOptions,\n workspaceConfig\n }\n }\n }\n ) as ReleaseGroupConfig;\n\n if (workspaceConfig?.workspaceRoot) {\n if (\n (config.changelog as NxReleaseChangelogConfiguration)?.renderer &&\n typeof (config.changelog as NxReleaseChangelogConfiguration)\n ?.renderer === \"string\" &&\n (config.changelog as NxReleaseChangelogConfiguration)?.renderer\n ?.toString()\n .startsWith(\"./\")\n ) {\n (config.changelog as NxReleaseChangelogConfiguration).renderer =\n joinPaths(\n workspaceConfig.workspaceRoot,\n (config.changelog as NxReleaseChangelogConfiguration)\n .renderer as string\n );\n }\n\n if (\n config.version?.versionActions &&\n config.version.versionActions.startsWith(\"./\")\n ) {\n config.version.versionActions = joinPaths(\n workspaceConfig.workspaceRoot,\n config.version?.versionActions\n );\n }\n }\n\n return [name, config];\n })\n );\n}\n","import {\n createProjectGraphAsync,\n ProjectGraph,\n ProjectsConfigurations,\n readCachedProjectGraph,\n readProjectsConfigurationFromProjectGraph,\n Tree\n} from \"@nx/devkit\";\nimport { StormWorkspaceConfig } from \"@storm-software/config\";\nimport { joinPaths } from \"@storm-software/config-tools\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport {\n writeDebug,\n writeWarning\n} from \"@storm-software/config-tools/logger/console\";\nimport defu from \"defu\";\nimport { existsSync } from \"node:fs\";\nimport { ReleaseClient } from \"nx/release\";\nimport { DependencyBump } from \"nx/release/changelog-renderer\";\nimport {\n ChangelogChange,\n NxReleaseChangelogResult,\n PostGitTask\n} from \"nx/src/command-line/release/changelog\";\nimport { ChangelogOptions as NxChangelogOptions } from \"nx/src/command-line/release/command-object\";\nimport {\n getCommitHash,\n getFirstGitCommit,\n getLatestGitTagForPattern,\n GitCommit,\n gitPush\n} from \"nx/src/command-line/release/utils/git\";\nimport {\n createCommitMessageValues,\n createGitTagValues,\n handleDuplicateGitTags\n} from \"nx/src/command-line/release/utils/shared\";\nimport { NxJsonConfiguration, readNxJson } from \"nx/src/config/nx-json\";\nimport { FsTree } from \"nx/src/generators/tree\";\nimport { createFileMapUsingProjectGraph } from \"nx/src/project-graph/file-map-utils\";\nimport { ReleaseConfig } from \"../types\";\nimport {\n filterHiddenChanges,\n generateChangelogForProjects\n} from \"../utilities/changelog-utils\";\nimport { createFileToProjectMap } from \"../utilities/file-utils\";\nimport {\n commitChanges,\n commitChangesNonProjectFiles,\n extractPreid,\n filterProjectCommits,\n getCommits,\n getProjectsAffectedByCommit,\n gitTag\n} from \"../utilities/git-utils\";\nimport { omit } from \"../utilities/omit\";\nimport StormChangelogRenderer from \"./changelog-renderer\";\nimport { DEFAULT_RELEASE_CONFIG, getReleaseGroupConfig } from \"./config\";\n\nexport type ChangelogOptions = Omit<\n NxChangelogOptions,\n \"versionData\" | \"releaseGraph\"\n> &\n Required<Pick<NxChangelogOptions, \"versionData\" | \"releaseGraph\">>;\n\n/**\n * Extended {@link ReleaseClient} with Storm Software specific release APIs\n */\nexport class StormReleaseClient extends ReleaseClient {\n public static async create(\n releaseConfig: Partial<ReleaseConfig> = {},\n ignoreNxJsonConfig = false,\n workspaceConfig?: StormWorkspaceConfig\n ) {\n if (!workspaceConfig) {\n workspaceConfig = await getWorkspaceConfig();\n }\n\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n projectGraph = await createProjectGraphAsync({\n exitOnError: true,\n resetDaemonClient: true\n });\n }\n\n if (!projectGraph) {\n throw new Error(\n \"Failed to load the project graph. Please run `nx reset`, then run the `storm-git commit` command again.\"\n );\n }\n\n return new StormReleaseClient(\n projectGraph,\n releaseConfig,\n ignoreNxJsonConfig,\n workspaceConfig\n );\n }\n\n /**\n * The release configuration used by this release client.\n */\n protected config: ReleaseConfig;\n\n /**\n * The workspace configuration used by this release client.\n */\n protected workspaceConfig: StormWorkspaceConfig;\n\n /**\n * The project graph of the workspace.\n */\n protected projectGraph: ProjectGraph;\n\n /**\n * The project configurations of the workspace.\n */\n protected projectConfigurations: ProjectsConfigurations;\n\n /**\n * The file system tree used by this release client.\n */\n protected tree: Tree;\n\n /**\n * Creates an instance of {@link StormReleaseClient}.\n *\n * @param projectGraph - The project graph of the workspace.\n * @param releaseConfig - Release configuration to use for the current release client. By default, it will be combined with any configuration in `nx.json`, but you can choose to use it as the sole source of truth by setting {@link ignoreNxJsonConfig} to true.\n * @param ignoreNxJsonConfig - Whether to ignore the nx.json configuration and use only the provided {@link releaseConfig}. Default is false.\n * @param workspaceConfig - Optional Storm workspace configuration object for logging purposes.\n */\n protected constructor(\n projectGraph: ProjectGraph,\n releaseConfig: Partial<ReleaseConfig>,\n ignoreNxJsonConfig: boolean,\n workspaceConfig: StormWorkspaceConfig\n ) {\n let nxJson!: Partial<NxJsonConfiguration>;\n if (\n !ignoreNxJsonConfig &&\n existsSync(joinPaths(workspaceConfig.workspaceRoot, \"nx.json\"))\n ) {\n nxJson = readNxJson();\n }\n\n const config = defu(\n {\n changelog: {\n renderOptions: {\n workspaceConfig\n }\n }\n },\n {\n groups: getReleaseGroupConfig(releaseConfig, workspaceConfig)\n },\n {\n groups: getReleaseGroupConfig(\n (nxJson.release ?? {}) as Partial<ReleaseConfig>,\n workspaceConfig\n )\n },\n omit(releaseConfig, [\"groups\"]),\n nxJson.release ? omit(nxJson.release, [\"groups\"]) : {},\n omit(DEFAULT_RELEASE_CONFIG, [\"groups\"])\n ) as ReleaseConfig;\n\n super(config, true);\n\n writeDebug(\n \"Executing release with the following configuration\",\n workspaceConfig\n );\n writeDebug(config, workspaceConfig);\n\n this.projectGraph = projectGraph;\n this.config = config;\n this.workspaceConfig = workspaceConfig;\n this.tree = new FsTree(workspaceConfig.workspaceRoot, false);\n\n this.projectConfigurations =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n }\n\n public override releaseChangelog = async (options: ChangelogOptions) => {\n const to = options.to || \"HEAD\";\n const toSHA = await getCommitHash(to);\n\n const postGitTasks = [] as PostGitTask[];\n let projectChangelogs: NxReleaseChangelogResult[\"projectChangelogs\"] = {};\n\n const projectsPreid: { [projectName: string]: string | undefined } =\n Object.fromEntries(\n Object.entries(options.versionData).map(([projectName, v]) => [\n projectName,\n v.newVersion ? extractPreid(v.newVersion) : undefined\n ])\n );\n\n /**\n * Compute any additional dependency bumps up front because there could be cases of circular dependencies,\n * and figuring them out during the main iteration would be too late.\n */\n const projectToAdditionalDependencyBumps = new Map<\n string,\n DependencyBump[]\n >();\n for (const releaseGroup of options.releaseGraph.releaseGroups) {\n if (releaseGroup.projectsRelationship !== \"independent\") {\n continue;\n }\n for (const project of releaseGroup.projects) {\n // If the project does not have any changes, do not process its dependents\n if (\n !options.versionData[project] ||\n options.versionData[project].newVersion === null\n ) {\n continue;\n }\n\n const dependentProjects = (\n options.versionData[project].dependentProjects || []\n )\n .map(dep => {\n return {\n dependencyName: dep.source,\n newVersion: options.versionData[dep.source]?.newVersion ?? null\n };\n })\n .filter(b => b.newVersion !== null);\n\n for (const dependent of dependentProjects) {\n const additionalDependencyBumpsForProject = (\n projectToAdditionalDependencyBumps.has(dependent.dependencyName)\n ? projectToAdditionalDependencyBumps.get(dependent.dependencyName)\n : []\n ) as DependencyBump[];\n additionalDependencyBumpsForProject.push({\n dependencyName: project,\n newVersion: options.versionData[project].newVersion\n });\n projectToAdditionalDependencyBumps.set(\n dependent.dependencyName,\n additionalDependencyBumpsForProject\n );\n }\n }\n }\n\n const allProjectChangelogs: NxReleaseChangelogResult[\"projectChangelogs\"] =\n {};\n\n for (const releaseGroup of options.releaseGraph.releaseGroups) {\n const config = releaseGroup.changelog;\n // The entire feature is disabled at the release group level, exit early\n if (config === false) {\n continue;\n }\n\n if (\n !options.releaseGraph.releaseGroupToFilteredProjects.has(releaseGroup)\n ) {\n throw new Error(\n `No filtered projects found for release group ${releaseGroup.name}`\n );\n }\n\n const projects = options.projects?.length\n ? // If the user has passed a list of projects, we need to use the filtered list of projects within the release group, plus any dependents\n Array.from(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.releaseGraph.releaseGroupToFilteredProjects.get(\n releaseGroup\n )!\n ).flatMap(project => {\n return [\n project,\n ...(options.versionData[project]?.dependentProjects.map(\n dep => dep.source\n ) || [])\n ];\n })\n : // Otherwise, we use the full list of projects within the release group\n releaseGroup.projects;\n const projectNodes = projects.map(name => this.projectGraph.nodes[name]);\n\n if (releaseGroup.projectsRelationship === \"independent\") {\n for (const project of projectNodes) {\n let changes: ChangelogChange[] | null = null;\n\n let fromRef =\n options.from ||\n (\n await getLatestGitTagForPattern(\n releaseGroup.releaseTag.pattern,\n {\n projectName: project.name,\n releaseGroupName: releaseGroup.name\n },\n {\n checkAllBranchesWhen:\n releaseGroup.releaseTag.checkAllBranchesWhen,\n preid: projectsPreid[project.name],\n requireSemver: releaseGroup.releaseTag.requireSemver,\n strictPreid: releaseGroup.releaseTag.strictPreid\n }\n )\n )?.tag;\n\n let commits: GitCommit[] | undefined = undefined;\n if (!fromRef) {\n const firstCommit = await getFirstGitCommit();\n commits = await filterProjectCommits({\n fromSHA: firstCommit,\n toSHA,\n projectPath: project.data.root\n });\n\n fromRef = commits[0]?.shortHash;\n if (options.verbose) {\n console.log(\n `Determined --from ref for ${project.name} from the first commit in which it exists: ${fromRef}`\n );\n }\n }\n\n if (!fromRef && !commits) {\n throw new Error(\n `Unable to determine the previous git tag. If this is the first release of your workspace, use the --first-release option or set the \"release.changelog.automaticFromRef\" config property in nx.json to generate a changelog from the first commit. Otherwise, be sure to configure the \"release.releaseTag.pattern\" property in nx.json to match the structure of your repository's git tags.`\n );\n }\n\n if (!commits) {\n commits = await filterProjectCommits({\n fromSHA: fromRef!,\n toSHA,\n projectPath: project.data.root\n });\n }\n\n const { fileMap } = await createFileMapUsingProjectGraph(\n this.projectGraph\n );\n const fileToProjectMap = createFileToProjectMap(\n fileMap.projectFileMap\n );\n\n changes = filterHiddenChanges(\n commits.map(c => ({\n type: c.type,\n scope: c.scope,\n description: c.description,\n body: c.body,\n isBreaking: c.isBreaking,\n githubReferences: c.references,\n authors: c.authors,\n shortHash: c.shortHash,\n revertedHashes: c.revertedHashes,\n affectedProjects: commitChangesNonProjectFiles(\n c,\n fileMap.nonProjectFiles\n )\n ? \"*\"\n : getProjectsAffectedByCommit(c, fileToProjectMap)\n })),\n this.config.conventionalCommits\n );\n\n writeDebug(\n `Running changelog generation for the ${releaseGroup.name} release group`,\n this.workspaceConfig\n );\n\n projectChangelogs = await generateChangelogForProjects({\n tree: this.tree,\n args: options,\n changes,\n projectGraph: this.projectGraph,\n projectsVersionData: options.versionData,\n releaseGroup,\n projects: [project],\n releaseConfig: this.config,\n projectToAdditionalDependencyBumps,\n workspaceConfig: this.workspaceConfig,\n ChangelogRendererClass: StormChangelogRenderer\n });\n if (projectChangelogs) {\n for (const [projectName, projectChangelog] of Object.entries(\n projectChangelogs\n )) {\n // Add the post git task (e.g. create a remote release) for the project changelog, if applicable\n if (projectChangelog.postGitTask) {\n postGitTasks.push(projectChangelog.postGitTask);\n }\n\n allProjectChangelogs[projectName] = projectChangelog;\n }\n }\n }\n } else {\n let changes: ChangelogChange[] = [];\n\n let fromRef =\n options.from ||\n (\n await getLatestGitTagForPattern(\n releaseGroup.releaseTag.pattern,\n {},\n {\n checkAllBranchesWhen:\n releaseGroup.releaseTag.checkAllBranchesWhen,\n preid: Object.keys(projectsPreid)[0]\n ? projectsPreid?.[Object.keys(projectsPreid)[0]!]\n : undefined,\n requireSemver: releaseGroup.releaseTag.requireSemver,\n strictPreid: releaseGroup.releaseTag.strictPreid\n }\n )\n )?.tag;\n if (!fromRef) {\n fromRef = await getFirstGitCommit();\n if (options.verbose) {\n console.log(\n `Determined release group --from ref from the first commit in the workspace: ${fromRef}`\n );\n }\n }\n\n // Make sure that the fromRef is actually resolvable\n const fromSHA = await getCommitHash(fromRef);\n\n const { fileMap } = await createFileMapUsingProjectGraph(\n this.projectGraph\n );\n const fileToProjectMap = createFileToProjectMap(fileMap.projectFileMap);\n\n changes = filterHiddenChanges(\n (await getCommits(fromSHA, toSHA)).map(c => ({\n type: c.type,\n scope: c.scope,\n description: c.description,\n body: c.body,\n isBreaking: c.isBreaking,\n githubReferences: c.references,\n authors: c.authors,\n shortHash: c.shortHash,\n revertedHashes: c.revertedHashes,\n affectedProjects: commitChangesNonProjectFiles(\n c,\n fileMap.nonProjectFiles\n )\n ? \"*\"\n : getProjectsAffectedByCommit(c, fileToProjectMap)\n })),\n this.config.conventionalCommits\n );\n\n writeDebug(\n `Running changelog generation for the ${releaseGroup.name} release group`,\n this.workspaceConfig\n );\n\n projectChangelogs = await generateChangelogForProjects({\n tree: this.tree,\n args: options,\n changes,\n projectGraph: this.projectGraph,\n projectsVersionData: options.versionData,\n releaseGroup,\n projects: projectNodes,\n releaseConfig: this.config,\n projectToAdditionalDependencyBumps,\n workspaceConfig: this.workspaceConfig,\n ChangelogRendererClass: StormChangelogRenderer\n });\n if (projectChangelogs) {\n for (const [projectName, projectChangelog] of Object.entries(\n projectChangelogs\n )) {\n // Add the post git task (e.g. create a remote release) for the project changelog, if applicable\n if (projectChangelog.postGitTask) {\n postGitTasks.push(projectChangelog.postGitTask);\n }\n allProjectChangelogs[projectName] = projectChangelog;\n }\n }\n }\n }\n\n writeDebug(\n `Generated changelogs for ${Object.keys(allProjectChangelogs).length} projects:\n${Object.keys(allProjectChangelogs)\n .map(p => ` - ${p}`)\n .join(\"\\n\")}\n`,\n this.workspaceConfig\n );\n await this.applyChangesAndExit(options, postGitTasks);\n\n return {\n workspaceChangelog: undefined,\n projectChangelogs: allProjectChangelogs\n };\n };\n\n protected applyChangesAndExit = async (\n options: ChangelogOptions,\n postGitTasks: PostGitTask[]\n ) => {\n const to = options.to || \"HEAD\";\n let latestCommit = await getCommitHash(to);\n\n const gitTagValues: string[] = createGitTagValues(\n options.releaseGraph.releaseGroups,\n options.releaseGraph.releaseGroupToFilteredProjects,\n options.versionData\n );\n handleDuplicateGitTags(gitTagValues);\n\n const commitMessageValues: string[] = createCommitMessageValues(\n options.releaseGraph.releaseGroups,\n options.releaseGraph.releaseGroupToFilteredProjects,\n options.versionData,\n options.gitCommitMessage ||\n this.config.changelog?.git?.commitMessage ||\n \"release(monorepo): Publish workspace release updates\"\n );\n\n const changes = this.tree.listChanges();\n if (!changes.length) {\n writeWarning(\n \"No changes were detected for any changelog files, so no changelog entries will be generated.\",\n this.workspaceConfig\n );\n\n if (!postGitTasks.length) {\n // No post git tasks (e.g. remote release creation) to perform so we can just exit\n return;\n }\n\n for (const postGitTask of postGitTasks) {\n await postGitTask(latestCommit);\n }\n\n return;\n }\n\n const changedFiles: string[] = changes.map(f => f.path);\n await commitChanges({\n changedFiles,\n deletedFiles: [],\n isDryRun: !!options.dryRun,\n isVerbose: !!options.verbose,\n gitCommitMessages: commitMessageValues,\n gitCommitArgs:\n options.gitCommitArgs || this.config.changelog?.git?.commitArgs\n });\n\n // Resolve the commit we just made\n latestCommit = await getCommitHash(\"HEAD\");\n\n writeDebug(\n `Creating git tags: ${gitTagValues.join(\", \")}`,\n this.workspaceConfig\n );\n\n for (const tag of gitTagValues) {\n await gitTag({\n tag,\n message:\n options.gitTagMessage || this.config.changelog?.git?.tagMessage,\n additionalArgs:\n options.gitTagArgs || this.config.changelog?.git?.tagArgs,\n dryRun: options.dryRun,\n verbose: options.verbose\n });\n }\n\n writeDebug(\n `Pushing to git remote \"${options.gitRemote ?? \"origin\"}\"`,\n this.workspaceConfig\n );\n\n await gitPush({\n gitRemote: options.gitRemote,\n dryRun: options.dryRun,\n verbose: options.verbose,\n additionalArgs:\n options.gitPushArgs || this.config.changelog?.git?.pushArgs\n });\n\n // Run any post-git tasks in series\n for (const postGitTask of postGitTasks) {\n await postGitTask(latestCommit);\n }\n\n return;\n };\n}\n","import {\n createProjectGraphAsync,\n ProjectGraph,\n readCachedProjectGraph\n} from \"@nx/devkit\";\nimport type { StormWorkspaceConfig } from \"@storm-software/config\";\nimport {\n isVerbose,\n joinPaths,\n parseCargoToml,\n stringifyCargoToml,\n writeDebug,\n writeFatal,\n writeInfo,\n writeSuccess,\n writeTrace,\n writeWarning\n} from \"@storm-software/config-tools\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type {\n ReleaseVersion,\n VersionData\n} from \"nx/src/command-line/release/utils/shared.js\";\nimport { ReleaseConfig } from \"../types\";\nimport { isUserAnOrganizationMember } from \"./github\";\nimport { StormReleaseClient } from \"./release-client\";\n\nexport interface NxReleaseChangelogResult {\n workspaceChangelog?: {\n releaseVersion: ReleaseVersion;\n contents: string;\n };\n projectChangelogs?: {\n [projectName: string]: {\n releaseVersion: ReleaseVersion;\n contents: string;\n };\n };\n}\n\nexport type ReleaseOptions = Partial<ReleaseConfig> & {\n project?: string;\n head?: string;\n base?: string;\n dryRun?: boolean;\n skipPublish?: boolean;\n ignoreNxJsonConfig?: boolean;\n};\n\nexport const runRelease = async (\n config: StormWorkspaceConfig,\n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n project,\n head,\n base,\n dryRun = false,\n skipPublish = false,\n ignoreNxJsonConfig = false,\n ...releaseConfig\n }: ReleaseOptions\n) => {\n if (!process.env.GITHUB_ACTOR) {\n throw new Error(\"The `GITHUB_ACTOR` environment variable is not set.\");\n }\n\n if (!(await isUserAnOrganizationMember(process.env.GITHUB_ACTOR, config))) {\n writeFatal(\n \"You must be a member of the Storm Software organization to run the release process.\",\n config\n );\n throw new Error(\n `The GitHub actor \"${\n process.env.GITHUB_ACTOR\n }\" is not a member of the organization \"${\n typeof config.organization === \"string\"\n ? config.organization\n : config.organization?.name\n }\". Only members of the organization can initiate releases.`\n );\n }\n\n const name = config.bot.name;\n const email = config.bot.email\n ? config.bot.email\n : config.bot.name\n ? `${config.bot.name}@users.noreply.github.com`\n : \"bot@stormsoftware.com\";\n\n process.env.GIT_AUTHOR_NAME = name;\n process.env.GIT_AUTHOR_EMAIL = email;\n process.env.GIT_COMMITTER_NAME = name;\n process.env.GIT_COMMITTER_EMAIL = email;\n\n process.env.NODE_AUTH_TOKEN = process.env.NPM_TOKEN;\n process.env.NPM_AUTH_TOKEN = process.env.NPM_TOKEN;\n process.env.NPM_CONFIG_PROVENANCE = \"true\";\n\n writeDebug(\"Creating Storm release client...\", config);\n\n const releaseClient = await StormReleaseClient.create(\n releaseConfig,\n ignoreNxJsonConfig,\n config\n );\n\n writeDebug(\"Reading in the workspaces release configuration\", config);\n\n const to = head || process.env.NX_HEAD;\n const from = base || process.env.NX_BASE;\n\n writeDebug(\n `Using the following Git SHAs to determine the release content:\n - From: ${from}\n - To: ${to}\n`,\n config\n );\n\n writeDebug(\"Determining the current release versions...\", config);\n\n const { workspaceVersion, projectsVersionData, releaseGraph } =\n await releaseClient.releaseVersion({\n dryRun,\n verbose: isVerbose(config.logLevel),\n preid: config.preid,\n stageChanges: true,\n gitCommit: false\n });\n\n await releaseClient.releaseChangelog({\n version:\n releaseConfig?.projectsRelationship === \"fixed\"\n ? workspaceVersion\n : undefined,\n versionData: projectsVersionData,\n dryRun,\n verbose: isVerbose(config.logLevel),\n to,\n from,\n releaseGraph\n });\n\n writeDebug(\"Tagging commit with git\", config);\n\n if (skipPublish) {\n writeWarning(\n \"Skipping publishing packages since `skipPublish` was provided as `true` in the release options.\",\n config\n );\n } else {\n const changedProjects = Object.keys(projectsVersionData).filter(\n key => projectsVersionData[key]?.newVersion\n );\n if (changedProjects.length > 0) {\n writeInfo(\n `Publishing release for ${changedProjects.length} ${changedProjects.length === 1 ? \"project\" : \"projects\"}:\n${changedProjects.map(changedProject => ` - ${changedProject}`).join(\"\\n\")}\n`,\n config\n );\n\n await updatePackageManifests(projectsVersionData, config);\n\n const result = await releaseClient.releasePublish({\n dryRun,\n verbose: isVerbose(config.logLevel)\n });\n\n const failedProjects = Object.keys(result).filter(\n key => result[key]?.code && result[key]?.code > 0\n );\n if (failedProjects.length > 0) {\n throw new Error(\n `The Storm release process was not completed successfully! One or more errors occured while running the \\`nx-release-publish\\` executor tasks.\n\nPlease review the workflow details for the following project(s):\n${failedProjects.map(failedProject => ` - ${failedProject} (Error Code: ${result[failedProject]?.code})`).join(\"\\n\")}\n`\n );\n }\n } else {\n writeWarning(\"Skipped publishing packages.\", config);\n }\n }\n\n writeSuccess(\"Completed the Storm workspace release process!\", config);\n};\n\nasync function updatePackageManifests(\n projectsVersionData: VersionData,\n config: StormWorkspaceConfig\n) {\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n await createProjectGraphAsync();\n projectGraph = readCachedProjectGraph();\n }\n\n if (projectGraph) {\n await Promise.all(\n Object.keys(projectsVersionData).map(async node => {\n const projectNode = projectGraph.nodes[node];\n if (!projectNode?.data.root) {\n writeWarning(\n `Project node ${node} not found in the project graph. Skipping manifest update.`,\n config\n );\n return;\n }\n\n const versionData = projectsVersionData[node];\n if (\n projectNode?.data.root &&\n versionData &&\n versionData.newVersion !== null\n ) {\n writeTrace(\n `Writing version ${versionData.newVersion} update to manifest file for ${node}\n `,\n config\n );\n\n const projectRoot = joinPaths(\n config.workspaceRoot,\n projectNode.data.root\n );\n\n const packageJsonPath = joinPaths(projectRoot, \"package.json\");\n const cargoTomlPath = joinPaths(projectRoot, \"Cargo.toml\");\n\n if (existsSync(packageJsonPath)) {\n const packageJsonContent = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(packageJsonContent);\n\n packageJson.version = versionData.newVersion;\n await writeFile(packageJsonPath, JSON.stringify(packageJson));\n } else if (existsSync(cargoTomlPath)) {\n const cargoToml = parseCargoToml(\n await readFile(cargoTomlPath, \"utf8\")\n );\n\n cargoToml.package ??= {};\n cargoToml.package.version = versionData.newVersion;\n await writeFile(cargoTomlPath, stringifyCargoToml(cargoToml));\n }\n }\n })\n );\n } else {\n writeWarning(\"No project nodes found. Skipping manifest updates.\", config);\n }\n}\n","import type { StormWorkspaceConfig } from \"@storm-software/config\";\nimport {\n findWorkspaceRootSafe,\n writeFatal,\n writeInfo,\n writeSuccess\n} from \"@storm-software/config-tools\";\nimport { Command } from \"commander\";\nimport { runCommit } from \"../commit/run\";\nimport { runCommitLint } from \"../commitlint/run\";\nimport { runReadme } from \"../readme/run\";\nimport { runRelease } from \"../release/run\";\nimport type { CommitLintCLIOptions, ReadMeOptions } from \"../types\";\n\nlet _config: Partial<StormWorkspaceConfig> = {};\n\nexport function createProgram(config: StormWorkspaceConfig) {\n _config = config;\n writeInfo(\"⚡ Running Storm Git Tools\", config);\n\n const root = findWorkspaceRootSafe(process.cwd());\n process.env.STORM_WORKSPACE_ROOT ??= root;\n process.env.NX_WORKSPACE_ROOT_PATH ??= root;\n if (root) {\n process.chdir(root);\n }\n\n const program = new Command(\"storm-git\");\n program.version(\"1.0.0\", \"-v --version\", \"display CLI version\");\n\n program\n .command(\"commit\")\n .description(\"Commit changes to git for the workspace.\")\n .option(\"--config <file>\", \"The Commitizen config file path\")\n .option(\n \"--dry-run\",\n \"Should the commit be run in dry-run mode (no updates are made)\"\n )\n .action(commitAction);\n\n program\n .command(\"readme\")\n .description(\"Run the README.md generator using the templates provided.\")\n .option(\n \"--templates <path>\",\n \"The templates directory to use when generating the README.md files.\",\n \"./tools/readme-templates\"\n )\n .option(\n \"--project <project>\",\n \"The specific project to generate a README.md file for\"\n )\n .option(\"--output <path>\", \"Where to output the generated README.md file\")\n .option(\n \"--clean\",\n \"Should the output README.md file be cleaned before generation\",\n true\n )\n .option(\n \"--prettier\",\n \"Should the output README.md file have prettier applied to it\",\n true\n )\n .action(readmeAction);\n\n program\n .command(\"release\")\n .description(\"Run release for a project in the workspace.\")\n .option(\"--project <project>\", \"The specific project to run release for\")\n .option(\"--base <base>\", \"Git base tag value\")\n .option(\"--head <head>\", \"Git head tag value\")\n .option(\n \"--dry-run\",\n \"Should the release be run in dry-run mode (no updates are made)\"\n )\n .action(releaseAction);\n\n program\n .command(\"commitlint\")\n .description(\"Run commitlint for the workspace's commit message.\")\n .option(\"--config <file>\", \"The CommitLint config file path\")\n .option(\"--message <commit-message>\", \"The commit message to lint\")\n .option(\"--file <commit-file>\", \"The commit message to lint\")\n .action(commitLintAction);\n\n return program;\n}\n\nexport async function commitAction({\n config,\n dryRun = false\n}: {\n config: string;\n dryRun: boolean;\n}) {\n try {\n writeInfo(\n `⚡ Preparing to commit your changes. Please provide the requested details below...`,\n _config\n );\n\n await runCommit(config, dryRun);\n\n writeSuccess(\n `🎉 Storm Commit processing completed successfully!\n\nNote: Please run \"pnpm push\" to upload these changes to the remote ${\n _config.name\n ? _config.name\n : _config.namespace\n ? _config.namespace\n : _config.organization\n ? _config.organization\n : \"Storm-Software\"\n } Git repository at ${_config.repository}\n`,\n _config\n );\n } catch (error) {\n writeFatal(\n `A fatal error occurred while running commit action: \\n\\n${\n error.message\n }${\n error.stack ? `\\n\\nStacktrace: ${error.stack}` : \"\"\n }\\n\\nPlease fix any errors and try committing again.`,\n _config\n );\n\n throw new Error(error.message, { cause: error });\n }\n}\n\nexport async function readmeAction(options: ReadMeOptions) {\n try {\n writeInfo(\"⚡ Formatting the workspace's README.md files\", _config);\n\n await runReadme(options);\n\n writeSuccess(\n \"Formatting of the workspace's README.md files is complete\\n\",\n _config\n );\n } catch (error) {\n writeFatal(\n `A fatal error occurred while running README format action: \\n\\n${error.message}`\n );\n throw new Error(error.message, { cause: error });\n }\n}\n\nexport async function releaseAction({\n project,\n base,\n head,\n dryRun\n}: {\n project?: string;\n base?: string;\n head?: string;\n dryRun?: boolean;\n}) {\n try {\n writeInfo(\n \"⚡ Running the Storm Release and Publish process on the workspace\",\n _config\n );\n\n await runRelease(_config as StormWorkspaceConfig, {\n dryRun,\n project,\n base,\n head\n });\n\n writeSuccess(\"Release completed successfully!\\n\", _config);\n } catch (error) {\n writeFatal(\n `A fatal error occurred while running release action: \\n\\n${error.message} ${error.stack ? `\\n\\nStacktrace: ${error.stack}` : \"\"}`,\n _config\n );\n console.error(error);\n\n throw new Error(error.message, { cause: error });\n }\n}\n\nexport async function commitLintAction(options: CommitLintCLIOptions) {\n try {\n writeInfo(\n `⚡ Linting the ${\n _config.repository\n ? _config.repository\n : _config.namespace\n ? _config.namespace\n : _config.name\n ? _config.name\n : typeof _config.organization === \"string\"\n ? _config.organization\n : _config.organization?.name\n ? _config.organization?.name\n : \"Storm-Software\"\n } repository's commit messages.`,\n _config\n );\n\n await runCommitLint(_config as StormWorkspaceConfig, options);\n\n writeSuccess(\n \"Linting the commit messages completed successfully!\\n\",\n _config\n );\n } catch (error) {\n writeFatal(\n `A fatal error occurred while linting the commit messages: \\n\\n${error.message}`,\n _config\n );\n throw new Error(error.message, { cause: error });\n }\n}\n","#!/usr/bin/env node\n\nimport {\n exitWithError,\n exitWithSuccess,\n getConfig,\n handleProcess,\n writeSuccess\n} from \"@storm-software/config-tools\";\nimport { createProgram } from \"../src/cli\";\n\nvoid (async () => {\n const config = await getConfig();\n try {\n handleProcess(config);\n\n const program = createProgram(config);\n await program.parseAsync(process.argv);\n\n writeSuccess(\n `🎉 Git ${process.argv && process.argv.length >= 3 && process.argv[2] ? process.argv[2] : \"tool\"} processing completed successfully!`,\n config\n );\n exitWithSuccess(config);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n exitWithError(config);\n process.exit(1);\n }\n})();\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../config-tools/src/utilities/toml.ts","../../../conventional-changelog/src/commit-types.ts","../../../conventional-changelog/src/utilities/constants.ts","../../../conventional-changelog/src/configs/minimal.ts","../../../conventional-changelog/src/configs/monorepo.ts","../../../conventional-changelog/src/configs/index.ts","../../../conventional-changelog/src/utilities/nx-scopes.ts","../../../conventional-changelog/src/index.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/regex.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/utils.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/options.ts","../../../../node_modules/.pnpm/conventional-commits-parser@6.2.1/node_modules/conventional-commits-parser/src/CommitParser.ts","../../src/commitlint/lint.ts","../../src/commitlint/run.ts","../../src/types.ts","../../src/commit/config/minimal.ts","../../src/commit/config/monorepo.ts","../../src/commit/commit-state.ts","../../src/commit/format-commit-message.ts","../../src/commit/run.ts","../../src/utilities/file-utils.ts","../../src/readme/transform.ts","../../src/readme/doctoc.ts","../../src/readme/nx-docs.ts","../../src/readme/utils.ts","../../src/readme/run.ts","../../src/utilities/title-case.ts","../../src/utilities/changelog-utils.ts","../../src/utilities/git-utils.ts","../../src/utilities/omit.ts","../../src/release/github.ts","../../src/release/changelog-renderer.ts","../../src/release/config.ts","../../src/release/release-client.ts","../../src/release/run.ts","../../src/cli/index.ts","../../bin/git.ts"],"names":["TOML","changelogs","commitlint","config","projectGraph","readCachedProjectGraph","createProjectGraphAsync","readProjectsConfigurationFromProjectGraph","getWorkspaceConfig","defu","createBasePreset","defaultRules","util","valid","message","writeInfo","joinPaths","existsSync","readFile","childProcess","writeWarning","writeDebug","writeSuccess","minimal_default","monorepo_default","execSync","_","chalkTemplate","format","wrap","brandIcon","shellescape","fs","run","default","Path","anchor","Syntax","parse","updateSection","x","Parser","readFileSync","writeFileSync","statSync","extname","join","process","res","readdirSync","name","result","required","start","end","output","rmSync","prettier","resolveConfig","STORM_DEFAULT_RELEASE_BANNER","interpolate","shouldPreferDockerVersionForReleaseGroup","ReleaseVersion","chalk","printAndFlushChanges","noDiffInChangelogMessage","getGitDiff","parseCommits","isPrerelease","prerelease","execCommand","isVerbose","gitAdd","GithubRemoteReleaseClient","defaultCreateReleaseProvider","joinPathFragments","homedir","fsp","axios","DefaultChangelogRenderer","DEFAULT_CONVENTIONAL_COMMITS_CONFIG","major","ReleaseClient","nxJson","readNxJson","FsTree","getCommitHash","getLatestGitTagForPattern","getFirstGitCommit","createFileMapUsingProjectGraph","createGitTagValues","handleDuplicateGitTags","createCommitMessageValues","gitPush","writeFatal","writeTrace","writeFile","findWorkspaceRootSafe","Command","getConfig","handleProcess","exitWithSuccess","exitWithError"],"mappings":"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A;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAA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","file":"git.cjs","sourcesContent":["import TOML from \"@ltd/j-toml\";\nimport { writeError } from \"../logger\";\n\nexport interface CargoToml {\n // Workspace is only applicable to the root Cargo.toml\n workspace?: { members: string[] };\n package: any;\n dependencies?: Record<\n string,\n string | { version: string; features?: string[]; optional?: boolean }\n >;\n \"dev-dependencies\"?: Record<\n string,\n string | { version: string; features: string[] }\n >;\n [key: string]: any;\n}\n\nexport interface CargoMetadata {\n packages: Package[];\n workspace_members: string[];\n resolve: Resolve;\n target_directory: string;\n version: number;\n workspace_root: string;\n metadata: Metadata2;\n}\n\nexport interface Package {\n name: string;\n version: string;\n id: string;\n license: string;\n license_file: string;\n description: string;\n source: any;\n dependencies: Dependency[];\n targets: Target[];\n features: Features;\n manifest_path: string;\n metadata: Metadata;\n /**\n * From the docs:\n * \"List of registries to which this package may be published.\n * Publishing is unrestricted if null, and forbidden if an empty array.\"\n *\n * Additional observation:\n * false can be used by the end user but it will be converted to an empty\n * array in the cargo metadata output.\n */\n publish?: string[] | boolean | null;\n authors: string[];\n categories: string[];\n default_run: any;\n rust_version: string;\n keywords: string[];\n readme: string;\n repository: string;\n homepage: string;\n documentation: string;\n edition: string;\n links: any;\n}\n\nexport interface Dependency {\n name: string;\n source: string;\n req: string;\n kind: any;\n rename: any;\n optional: boolean;\n uses_default_features: boolean;\n features: any[];\n target: string;\n path: string;\n registry: any;\n workspace: boolean;\n}\n\nexport interface Target {\n kind: string[];\n crate_types: string[];\n name: string;\n src_path: string;\n edition: string;\n \"required-features\": string[];\n doc: boolean;\n doctest: boolean;\n test: boolean;\n}\n\nexport interface Features {\n default: string[];\n feat1: any[];\n feat2: any[];\n}\n\nexport interface Metadata {\n docs: Docs;\n}\n\nexport interface Docs {\n rs: Rs;\n}\n\nexport interface Rs {\n \"all-features\": boolean;\n}\n\nexport interface Resolve {\n nodes: Node[];\n root: string;\n}\n\nexport interface Node {\n id: string;\n dependencies: string[];\n deps: Dep[];\n features: string[];\n}\n\nexport interface Dep {\n name: string;\n pkg: string;\n dep_kinds: DepKind[];\n}\n\nexport interface DepKind {\n kind: any;\n target: string;\n}\n\nexport interface Metadata2 {\n docs: Docs2;\n}\n\nexport interface Docs2 {\n rs: Rs2;\n}\n\nexport interface Rs2 {\n \"all-features\": boolean;\n}\n\n/**\n * Virtual file system tree.\n */\nexport interface Tree {\n /**\n * Root of the workspace. All paths are relative to this.\n */\n root: string;\n /**\n * Read the contents of a file.\n * @param filePath A path to a file.\n */\n read(filePath: string): Buffer | null;\n /**\n * Read the contents of a file as string.\n * @param filePath A path to a file.\n * @param encoding the encoding for the result\n */\n read(filePath: string, encoding: BufferEncoding): string | null;\n /**\n * Update the contents of a file or create a new file.\n */\n write(filePath: string, content: Buffer | string, options?: any): void;\n /**\n * Check if a file exists.\n */\n exists(filePath: string): boolean;\n /**\n * Delete the file.\n */\n delete(filePath: string): void;\n /**\n * Rename the file or the folder.\n */\n rename(from: string, to: string): void;\n /**\n * Check if this is a file or not.\n */\n isFile(filePath: string): boolean;\n /**\n * Returns the list of children of a folder.\n */\n children(dirPath: string): string[];\n /**\n * Returns the list of currently recorded changes.\n */\n listChanges(): any[];\n /**\n * Changes permissions of a file.\n * @param filePath A path to a file.\n * @param mode The permission to be granted on the file, given as a string (e.g `755`) or octal integer (e.g `0o755`).\n * See https://nodejs.org/api/fs.html#fs_file_modes.\n */\n changePermissions(filePath: string, mode: string): void;\n}\n\nexport function parseCargoTomlWithTree(\n tree: Tree,\n projectRoot: string,\n projectName: string\n) {\n const cargoTomlString = tree.read(`${projectRoot}/Cargo.toml`)?.toString();\n if (!cargoTomlString) {\n writeError(`Cannot find a Cargo.toml file in the ${projectName}`);\n throw new Error();\n }\n\n return parseCargoToml(cargoTomlString);\n}\n\nexport function parseCargoToml(cargoString?: string) {\n if (!cargoString) {\n throw new Error(\"Cargo.toml is empty\");\n }\n\n return TOML.parse(cargoString, {\n x: { comment: true }\n }) as unknown as CargoToml;\n}\n\nexport function stringifyCargoToml(cargoToml: CargoToml) {\n const tomlString = TOML.stringify(cargoToml, {\n newlineAround: \"section\"\n });\n\n if (Array.isArray(tomlString)) {\n return tomlString.join(\"\\n\");\n }\n\n return tomlString;\n}\n\nexport function modifyCargoTable(\n toml: CargoToml,\n section: string,\n key: string,\n value: string | object | any[] | (() => any)\n) {\n toml[section] ??= TOML.Section({});\n toml[section][key] =\n typeof value === \"object\" && !Array.isArray(value)\n ? TOML.inline(value as any)\n : typeof value === \"function\"\n ? value()\n : value;\n}\n\nexport function modifyCargoNestedTable(\n toml: CargoToml,\n section: string,\n key: string,\n value: object\n) {\n toml[section] ??= {};\n toml[section][key] = TOML.Section(value as any);\n}\n","/**\n * Commit types available for selection in commit messages.\n */\nexport const DEFAULT_COMMIT_TYPES = {\n /* --- Bumps version when selected --- */\n\n \"chore\": {\n \"description\": \"Other changes that don't modify src or test files\",\n \"title\": \"Chore\",\n \"emoji\": \"⚙️ \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Miscellaneous\",\n \"hidden\": false\n }\n },\n \"fix\": {\n \"description\":\n \"A change that resolves an issue previously identified with the package\",\n \"title\": \"Bug Fix\",\n \"emoji\": \"🪲 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Bug Fixes\",\n \"hidden\": false\n }\n },\n \"feat\": {\n \"description\": \"A change that adds a new feature to the package\",\n \"title\": \"Feature\",\n \"emoji\": \"🔑 \",\n \"semverBump\": \"minor\",\n \"changelog\": {\n \"title\": \"Features\",\n \"hidden\": false\n }\n },\n \"ci\": {\n \"description\":\n \"Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)\",\n \"title\": \"Continuous Integration\",\n \"emoji\": \"🧰 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Continuous Integration\",\n \"hidden\": false\n }\n },\n \"refactor\": {\n \"description\": \"A code change that neither fixes a bug nor adds a feature\",\n \"title\": \"Code Refactoring\",\n \"emoji\": \"🧪 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Source Code Improvements\",\n \"hidden\": false\n }\n },\n \"style\": {\n \"description\":\n \"Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)\",\n \"title\": \"Style Improvements\",\n \"emoji\": \"💎 \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Style Improvements\",\n \"hidden\": false\n }\n },\n \"perf\": {\n \"description\": \"A code change that improves performance\",\n \"title\": \"Performance Improvement\",\n \"emoji\": \"⏱️ \",\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Performance Improvements\",\n \"hidden\": false\n }\n },\n\n /* --- Does not bump version when selected --- */\n\n \"docs\": {\n \"description\": \"A change that only includes documentation updates\",\n \"title\": \"Documentation\",\n \"emoji\": \"📜 \",\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Documentation\",\n \"hidden\": false\n }\n },\n \"test\": {\n \"description\": \"Adding missing tests or correcting existing tests\",\n \"title\": \"Testing\",\n \"emoji\": \"🚨 \",\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Testing\",\n \"hidden\": true\n }\n },\n\n /* --- Not included in commitlint but included in changelog --- */\n\n \"deps\": {\n \"description\":\n \"Changes that add, update, or remove dependencies. This includes devDependencies and peerDependencies\",\n \"title\": \"Dependencies\",\n \"emoji\": \"📦 \",\n \"hidden\": true,\n \"semverBump\": \"patch\",\n \"changelog\": {\n \"title\": \"Dependency Upgrades\",\n \"hidden\": false\n }\n },\n\n /* --- Not included in commitlint or changelog --- */\n\n \"build\": {\n \"description\":\n \"Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)\",\n \"title\": \"Build\",\n \"emoji\": \"🛠 \",\n \"hidden\": true,\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Build\",\n \"hidden\": true\n }\n },\n \"release\": {\n \"description\": \"Publishing a commit containing a newly released version\",\n \"title\": \"Publish Release\",\n \"emoji\": \"🚀 \",\n \"hidden\": true,\n \"semverBump\": \"none\",\n \"changelog\": {\n \"title\": \"Publish Release\",\n \"hidden\": true\n }\n }\n} as const;\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { DEFAULT_COMMIT_TYPES } from \"../commit-types\";\n\nexport const CHANGELOG_COMMIT_TYPES_OBJECT = Object.freeze(\n Object.entries(DEFAULT_COMMIT_TYPES).reduce(\n (ret, [key, commitType]) => {\n ret[key] = {\n ...commitType.changelog,\n type: key,\n section: commitType.changelog?.title || commitType.title,\n hidden: commitType.changelog?.hidden\n };\n\n return ret;\n },\n {} as Record<\n string,\n {\n type: string;\n section: string;\n hidden: boolean | undefined;\n }\n >\n )\n);\n\nexport const CHANGELOG_COMMIT_TYPES = [\n CHANGELOG_COMMIT_TYPES_OBJECT.feat!,\n CHANGELOG_COMMIT_TYPES_OBJECT.fix!,\n CHANGELOG_COMMIT_TYPES_OBJECT.chore!,\n CHANGELOG_COMMIT_TYPES_OBJECT.deps!,\n CHANGELOG_COMMIT_TYPES_OBJECT.docs!,\n CHANGELOG_COMMIT_TYPES_OBJECT.style!,\n CHANGELOG_COMMIT_TYPES_OBJECT.refactor!,\n CHANGELOG_COMMIT_TYPES_OBJECT.perf!,\n CHANGELOG_COMMIT_TYPES_OBJECT.build!,\n CHANGELOG_COMMIT_TYPES_OBJECT.ci!,\n CHANGELOG_COMMIT_TYPES_OBJECT.test!\n] as const;\n\nexport const CHANGELOG_COMMIT_TYPE_ORDER = CHANGELOG_COMMIT_TYPES.map(\n entry => entry.type\n);\nexport const CHANGELOG_COMMIT_SECTION_ORDER = CHANGELOG_COMMIT_TYPES.map(\n entry => entry.section\n);\n\nexport const HASH_SHORT_LENGTH = 7;\nexport const HEADER_MAX_LENGTH = 100;\n\nexport const DATETIME_LENGTH = 10;\n","import { DEFAULT_COMMIT_TYPES } from \"../commit-types\";\nimport { RuleConfigCondition, RuleConfigSeverity } from \"../types/commitlint\";\nimport { CHANGELOG_COMMIT_TYPES } from \"../utilities/constants\";\n\nexport const changelogs = {\n props: {\n ignoreCommits: undefined,\n types: CHANGELOG_COMMIT_TYPES,\n bumpStrict: true,\n scope: undefined,\n scopeOnly: false\n }\n};\n\nexport const commitlint = {\n helpUrl: \"https://developer.stormsoftware.com/commitlint/minimal\",\n rules: {\n \"body-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"body-max-length\": [RuleConfigSeverity.Error, \"always\", 600],\n \"footer-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"footer-max-line-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-trim\": [RuleConfigSeverity.Error, \"always\"],\n \"subject-case\": [RuleConfigSeverity.Error, \"always\", [\"sentence-case\"]],\n \"subject-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"subject-full-stop\": [RuleConfigSeverity.Error, \"never\", \".\"],\n \"subject-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"subject-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"type-case\": [RuleConfigSeverity.Error, \"always\", \"kebab-case\"],\n \"type-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"type-enum\": [\n RuleConfigSeverity.Error,\n \"always\",\n Object.keys(DEFAULT_COMMIT_TYPES)\n ] as [RuleConfigSeverity, RuleConfigCondition, string[]],\n \"type-max-length\": [RuleConfigSeverity.Error, \"always\", 20],\n \"type-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"scope-empty\": [RuleConfigSeverity.Error, \"always\"]\n },\n settings: {\n enableMultipleScopes: false,\n disableEmoji: true,\n breakingChangePrefix: \"💣 \",\n closedIssuePrefix: \"✅ \",\n format: \"{type}: {emoji}{subject}\"\n }\n};\n\nconst config = {\n types: DEFAULT_COMMIT_TYPES,\n changelogs,\n commitlint\n};\n\nexport default config;\n","import { DEFAULT_COMMIT_TYPES } from \"../commit-types\";\nimport { RuleConfigCondition, RuleConfigSeverity } from \"../types/commitlint\";\nimport { CHANGELOG_COMMIT_TYPES } from \"../utilities/constants\";\n\nexport const changelogs = {\n props: {\n ignoreCommits: undefined,\n types: CHANGELOG_COMMIT_TYPES,\n bumpStrict: true,\n scope: [\"monorepo\"],\n scopeOnly: true\n }\n};\n\nexport const commitlint = {\n helpUrl: \"https://developer.stormsoftware.com/commitlint/monorepo\",\n rules: {\n \"body-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"body-max-length\": [RuleConfigSeverity.Error, \"always\", 600],\n \"footer-leading-blank\": [RuleConfigSeverity.Warning, \"always\"],\n \"footer-max-line-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"header-trim\": [RuleConfigSeverity.Error, \"always\"],\n \"subject-case\": [RuleConfigSeverity.Error, \"always\", [\"sentence-case\"]],\n \"subject-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"subject-full-stop\": [RuleConfigSeverity.Error, \"never\", \".\"],\n \"subject-max-length\": [RuleConfigSeverity.Error, \"always\", 150],\n \"subject-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"type-case\": [RuleConfigSeverity.Error, \"always\", \"kebab-case\"],\n \"type-empty\": [RuleConfigSeverity.Error, \"never\"],\n \"type-enum\": [\n RuleConfigSeverity.Error,\n \"always\",\n Object.keys(DEFAULT_COMMIT_TYPES)\n ] as [RuleConfigSeverity, RuleConfigCondition, string[]],\n \"type-max-length\": [RuleConfigSeverity.Error, \"always\", 20],\n \"type-min-length\": [RuleConfigSeverity.Error, \"always\", 3],\n \"scope-case\": [RuleConfigSeverity.Error, \"always\", [\"kebab-case\"]],\n \"scope-empty\": [RuleConfigSeverity.Error, \"never\"]\n },\n settings: {\n enableMultipleScopes: false,\n disableEmoji: true,\n breakingChangePrefix: \"💣 \",\n closedIssuePrefix: \"✅ \",\n format: \"{type}({scope}): {emoji}{subject}\"\n }\n};\n\nconst config = {\n types: DEFAULT_COMMIT_TYPES,\n changelogs,\n commitlint\n};\n\nexport default config;\n","import minimal from \"./minimal\";\nimport monorepo from \"./monorepo\";\n\nexport const COMMIT_CONFIGS = { minimal, monorepo };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ProjectGraph } from \"@nx/devkit\";\nimport { StormWorkspaceConfig } from \"@storm-software/config\";\nimport {\n createProjectGraphAsync,\n readCachedProjectGraph,\n readProjectsConfigurationFromProjectGraph\n} from \"nx/src/project-graph/project-graph\";\nimport { RuleConfigCondition, RuleConfigSeverity } from \"../types\";\n\nexport async function getNxScopes(context: {\n config: StormWorkspaceConfig;\n}): Promise<string[]> {\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n await createProjectGraphAsync();\n projectGraph = readCachedProjectGraph();\n }\n\n if (!projectGraph) {\n throw new Error(\n \"The commit process failed because the project graph is not available. Please run the build command again.\"\n );\n }\n\n const projectConfigs =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n\n const result = (\n Object.entries(projectConfigs.projects || {})\n .map(([name, project]) => ({\n name,\n ...project\n }))\n .filter(\n project =>\n project.name &&\n project.root &&\n project.root !== \".\" &&\n project.root !== context.config.workspaceRoot &&\n !project.name.includes(\"e2e\")\n )\n .filter(project => project.targets)\n .map(project => project.name)\n // .map(name => (name.charAt(0) === \"@\" ? name.split(\"/\")[1] : name))\n .filter(Boolean) as string[]\n ).sort((a, b) => a.localeCompare(b));\n result.unshift(\"monorepo\");\n\n return result;\n}\n\nexport function getScopeEnumUtil(context: { config: StormWorkspaceConfig }) {\n return (): Promise<string[]> => getScopeEnum(context);\n}\n\nexport function getScopeEnum(context: {\n config: StormWorkspaceConfig;\n}): Promise<string[]> {\n return getNxScopes(context);\n}\n\nexport function getRuleFromScopeEnum(\n scopeEnum: string[]\n): [RuleConfigSeverity, RuleConfigCondition, string[]] {\n if (!scopeEnum?.filter(Boolean).length) {\n throw new Error(\"No scopes found in the Storm workspace.\");\n }\n\n return [\n RuleConfigSeverity.Error,\n \"always\",\n scopeEnum.filter(Boolean) as string[]\n ];\n}\n","import { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport createBasePreset from \"conventional-changelog-conventionalcommits\";\nimport defu from \"defu\";\nimport { DEFAULT_COMMIT_TYPES } from \"./commit-types\";\nimport { COMMIT_CONFIGS } from \"./configs\";\nimport { Preset } from \"./types/preset\";\nimport { CHANGELOG_COMMIT_TYPES_OBJECT } from \"./utilities/constants\";\nimport { getNxScopes, getRuleFromScopeEnum } from \"./utilities/nx-scopes\";\n\nexport {\n CHANGELOG_COMMIT_TYPES_OBJECT as CHANGELOG_COMMIT_TYPES,\n COMMIT_CONFIGS,\n DEFAULT_COMMIT_TYPES\n};\n\n/**\n * Create a preset configuration for Storm Software changelog conventions.\n *\n * @param config - The configuration object.\n * @returns The preset configuration.\n */\nexport default async function createPreset(\n variant: StormWorkspaceConfig[\"variant\"] = \"monorepo\"\n): Promise<Preset> {\n const workspaceConfig = await getWorkspaceConfig();\n\n if (variant === \"minimal\") {\n return defu(\n await createBasePreset({ ...COMMIT_CONFIGS.minimal.changelogs.props }),\n {\n ...COMMIT_CONFIGS.minimal,\n commitlint: {\n ...COMMIT_CONFIGS.minimal.commitlint,\n regex: new RegExp(\n `(${Object.keys(DEFAULT_COMMIT_TYPES).join(\"|\")})!?:\\\\s([a-z0-9:\\\\-\\\\/\\\\s])+`\n )\n }\n }\n );\n }\n\n const nxScopes = await getNxScopes({ config: workspaceConfig });\n return defu(\n await createBasePreset({\n ...COMMIT_CONFIGS.monorepo.changelogs.props,\n scope: nxScopes\n }),\n {\n ...COMMIT_CONFIGS.monorepo,\n commitlint: {\n ...COMMIT_CONFIGS.monorepo.commitlint,\n rules: {\n ...COMMIT_CONFIGS.monorepo.commitlint.rules,\n [\"scope-enum\"]: getRuleFromScopeEnum(nxScopes)\n },\n regex: new RegExp(\n `(${Object.keys(DEFAULT_COMMIT_TYPES).join(\"|\")})\\\\((${nxScopes.join(\"|\")})\\\\)!?:\\\\s([a-z0-9:\\\\-\\\\/\\\\s])+`\n )\n }\n }\n );\n}\n",null,null,null,null,"import defaultRules from \"@commitlint/rules\";\nimport {\n CommitlintRulesEnum,\n RuleConfigSeverity\n} from \"conventional-changelog-storm-software/types/commitlint\";\nimport { Preset } from \"conventional-changelog-storm-software/types/preset\";\nimport { CommitParser } from \"conventional-commits-parser\";\nimport util from \"node:util\";\nimport { CommitLintOutcome, CommitLintRuleOutcome } from \"../types\";\n\ninterface CommitMessageData {\n header: string | null;\n body?: string | null;\n footer?: string | null;\n}\n\nconst buildCommitMessage = ({\n header,\n body,\n footer\n}: CommitMessageData): string => {\n let message = header;\n\n message = body ? `${message}\\n\\n${body}` : message;\n message = footer ? `${message}\\n\\n${footer}` : message;\n\n return message || \"\";\n};\n\nexport default async function lint(\n message: string,\n config: Preset\n): Promise<CommitLintOutcome> {\n const parser = new CommitParser(config.parser || {});\n const parsed = parser.parse(message);\n\n if (\n parsed.header === null &&\n parsed.body === null &&\n parsed.footer === null\n ) {\n // Commit is empty, skip\n return {\n valid: true,\n errors: [],\n warnings: [],\n input: message\n };\n }\n\n const allRules: Map<string, any> = new Map(Object.entries(defaultRules));\n\n // Find invalid rules configs\n const missing = Object.keys(config.commitlint.rules).filter(\n name => typeof allRules.get(name) !== \"function\"\n );\n\n if (missing.length > 0) {\n const names = [...allRules.keys()];\n throw new RangeError(\n [\n `Found rules without implementation: ${missing.join(\", \")}.`,\n `Supported rules are: ${names.join(\", \")}.`\n ].join(\"\\n\")\n );\n }\n\n const invalid = Object.entries(config.commitlint.rules)\n .map(([name, config]) => {\n if (!Array.isArray(config)) {\n return new Error(\n `config for rule ${name} must be array, received ${util.inspect(\n config\n )} of type ${typeof config}`\n );\n }\n\n const [level] = config;\n\n if (level === RuleConfigSeverity.Disabled && config.length === 1) {\n return null;\n }\n\n const [, when] = config;\n\n if (typeof level !== \"number\" || isNaN(level)) {\n return new Error(\n `level for rule ${name} must be number, received ${util.inspect(\n level\n )} of type ${typeof level}`\n );\n }\n\n if (config.length < 2 || config.length > 3) {\n return new Error(\n `config for rule ${name} must be 2 or 3 items long, received ${util.inspect(\n config\n )} of length ${config.length}`\n );\n }\n\n if (level < 0 || level > 2) {\n return new RangeError(\n `level for rule ${name} must be between 0 and 2, received ${util.inspect(\n level\n )}`\n );\n }\n\n if (typeof when !== \"string\") {\n return new Error(\n `condition for rule ${name} must be string, received ${util.inspect(\n when\n )} of type ${typeof when}`\n );\n }\n\n if (when !== \"never\" && when !== \"always\") {\n return new Error(\n `condition for rule ${name} must be \"always\" or \"never\", received ${util.inspect(\n when\n )}`\n );\n }\n\n return null;\n })\n .filter((item): item is Error => item instanceof Error);\n\n if (invalid.length > 0) {\n throw new Error(invalid.map(i => i.message).join(\"\\n\"));\n }\n\n // Validate against all rules\n const pendingResults = Object.entries(\n config.commitlint.rules as CommitlintRulesEnum\n )\n // Level 0 rules are ignored\n .filter(([, config]) => !!config && config.length && config[0] > 0)\n .map(async entry => {\n const [name, config] = entry;\n const [level, when, value] = config!; //\n\n const rule = allRules.get(name);\n\n if (!rule) {\n throw new Error(`Could not find rule implementation for ${name}`);\n }\n\n const executableRule = rule as any;\n const [valid, message] = await executableRule(parsed, when, value);\n\n return {\n level,\n valid,\n name,\n message\n };\n });\n\n const results = (await Promise.all(pendingResults)).filter(\n (result): result is CommitLintRuleOutcome => result !== null\n );\n\n const errors = results.filter(\n result => result.level === RuleConfigSeverity.Error && !result.valid\n );\n const warnings = results.filter(\n result => result.level === RuleConfigSeverity.Warning && !result.valid\n );\n\n const valid = errors.length === 0;\n\n return {\n valid,\n errors,\n warnings,\n input: buildCommitMessage(parsed)\n };\n}\n","import {\n joinPaths,\n writeDebug,\n writeInfo,\n writeSuccess,\n writeWarning\n} from \"@storm-software/config-tools\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport createPreset from \"conventional-changelog-storm-software\";\nimport { existsSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport childProcess from \"node:child_process\";\nimport { CommitLintCLIOptions } from \"../types\";\nimport lint from \"./lint\";\n\nconst COMMIT_EDITMSG_PATH = \".git/COMMIT_EDITMSG\";\n\nexport async function runCommitLint(\n workspaceConfig: StormWorkspaceConfig,\n options: CommitLintCLIOptions\n) {\n writeInfo(\n \"📝 Validating git commit message aligns with the Storm Software specification\",\n workspaceConfig\n );\n\n let commitMessage;\n if (options.message && options.message !== COMMIT_EDITMSG_PATH) {\n commitMessage = options.message;\n } else {\n const commitFile = joinPaths(\n workspaceConfig.workspaceRoot,\n options.file || options.message || COMMIT_EDITMSG_PATH\n );\n if (existsSync(commitFile)) {\n commitMessage = (await readFile(commitFile, \"utf8\"))?.trim();\n }\n }\n\n if (!commitMessage) {\n let gitLogCmd = \"git log -1 --no-merges\";\n const gitRemotes = childProcess\n .execSync(\"git remote -v\")\n .toString()\n .trim()\n .split(\"\\n\");\n const upstreamRemote = gitRemotes.find(remote =>\n remote.includes(`${workspaceConfig.name}.git`)\n );\n if (upstreamRemote) {\n const upstreamRemoteIdentifier = upstreamRemote.split(\"\\t\")[0]?.trim();\n if (!upstreamRemoteIdentifier) {\n writeWarning(\n `No upstream remote found for ${workspaceConfig.name}.git. Skipping comparison.`,\n workspaceConfig\n );\n return;\n }\n\n writeDebug(`Comparing against remote ${upstreamRemoteIdentifier}`);\n const currentBranch = childProcess\n .execSync(\"git branch --show-current\")\n .toString()\n .trim();\n\n // exclude all commits already present in upstream/main\n gitLogCmd =\n gitLogCmd + ` ${currentBranch} ^${upstreamRemoteIdentifier}/main`;\n } else {\n writeWarning(\n `No upstream remote found for ${workspaceConfig.name}.git. Skipping comparison against upstream main.`,\n workspaceConfig\n );\n return;\n }\n\n commitMessage = childProcess.execSync(gitLogCmd).toString().trim();\n if (!commitMessage) {\n writeWarning(\n \"No commits found. Skipping commit message validation.\",\n workspaceConfig\n );\n return;\n }\n }\n\n const preset = await createPreset(workspaceConfig.variant);\n\n const report = await lint(commitMessage, preset);\n\n if (\n !preset.commitlint.regex.test(commitMessage) ||\n report.errors.length ||\n report.warnings.length\n ) {\n writeSuccess(\n `Commit was processing completed successfully!`,\n workspaceConfig\n );\n } else {\n let errorMessage =\n \" Oh no! Your commit message: \\n\" +\n \"-------------------------------------------------------------------\\n\" +\n commitMessage +\n \"\\n-------------------------------------------------------------------\" +\n `\\n\\n Does not follow the \\`${workspaceConfig.variant}\\` commit message convention specified by the ${\n (typeof workspaceConfig.organization === \"string\"\n ? workspaceConfig.organization\n : workspaceConfig.organization?.name) || \"Storm Software\"\n } team.`;\n errorMessage += preset.changelogs.props.scope?.length\n ? \"\\ntype(scope): subject \\n BLANK LINE \\n body\"\n : \"\\ntype: subject \\n BLANK LINE \\n body\";\n errorMessage += \"\\n\";\n errorMessage += `\\nPossible types: ${preset.changelogs.props.types.map(\n type => `${type.section} (${type.type})`\n )}`;\n if (preset.changelogs.props.scope?.length) {\n errorMessage += `\\nPossible scopes: ${preset.changelogs.props.scope} (if unsure use \"monorepo\")`;\n }\n errorMessage +=\n \"\\n\\nEXAMPLE: \\n\" +\n \"feat(my-lib): add an option to generate lazy-loadable modules\\n\" +\n \"fix(monorepo)!: breaking change should have exclamation mark\\n\";\n errorMessage += `\\n\\nCommitLint Errors: ${\n report.errors.length\n ? report.errors.map(error => ` - ${error.message}`).join(\"\\n\")\n : \"None\"\n }`;\n errorMessage += `\\nCommitLint Warnings: ${\n report.warnings.length\n ? report.warnings.map(warning => ` - ${warning.message}`).join(\"\\n\")\n : \"None\"\n }`;\n errorMessage += \"\\n\\nPlease fix the commit message and rerun storm-commit.\";\n errorMessage += `\\n\\nMore details about the Storm Software commit message specification can be found at: ${\n preset.commitlint.helpUrl\n }`;\n\n throw new Error(errorMessage);\n }\n\n return report.input;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ProjectGraph, ProjectsConfigurations } from \"@nx/devkit\";\nimport { Variant } from \"@storm-software/config/types\";\nimport { CommitEnumItemProps } from \"conventional-changelog-storm-software/types/commit-types\";\nimport { RuleConfigSeverity } from \"conventional-changelog-storm-software/types/commitlint\";\nimport { NxReleaseConfig } from \"nx/src/command-line/release/config/config\";\nimport {\n NxReleaseChangelogConfiguration,\n NxReleaseConfiguration,\n NxReleaseDockerConfiguration,\n NxReleaseVersionConfiguration,\n NxReleaseVersionPlansConfiguration\n} from \"nx/src/config/nx-json\";\n\nexport type DeepPartial<T> = T extends object\n ? {\n [P in keyof T]?: DeepPartial<T[P]>;\n }\n : T;\n\nexport interface CommitLintCLIOptions {\n config?: string;\n message?: string;\n file?: string;\n}\n\nexport type CommitScopeProps = CommitEnumItemProps & {\n projectRoot: string;\n};\n\nexport type CommitScopesEnum = Record<string, CommitScopeProps>;\n\ntype CommitQuestionTypeProp = \"input\" | \"select\" | \"confirm\";\n\nexport type CommitQuestionProps = {\n type?: CommitQuestionTypeProp;\n title: string;\n description: string;\n enum?: Record<string, CommitEnumItemProps>;\n defaultValue?: string | boolean;\n maxLength?: number;\n minLength?: number;\n when?: (answers: Record<string, string>) => boolean;\n};\n\nexport const DEFAULT_COMMIT_PROMPT_MESSAGES = {\n skip: \"press enter to skip\",\n max: \"must be %d chars at most\",\n min: \"must be %d chars at least\",\n emptyWarning: \"can not be empty\",\n upperLimitWarning: \"%s is %d characters longer than the upper limit\",\n lowerLimitWarning: \"%s is %d characters less than the lower limit\",\n closedIssueMessage: \"Closes: \"\n} as const;\n\nexport type DefaultCommitPromptMessagesKeys =\n keyof typeof DEFAULT_COMMIT_PROMPT_MESSAGES;\n\nexport type CommitPromptMessagesEnum<\n TCommitPromptMessagesKeys extends\n DefaultCommitPromptMessagesKeys = DefaultCommitPromptMessagesKeys\n> = Record<TCommitPromptMessagesKeys, string> &\n typeof DEFAULT_COMMIT_PROMPT_MESSAGES;\n\nexport type CommitSettingsEnum = Record<string, any> & {\n scopeEnumSeparator?: string;\n enableMultipleScopes: boolean;\n disableEmoji: boolean;\n breakingChangePrefix?: string;\n closedIssuePrefix?: string;\n format: string;\n};\n\nexport type CommitState<\n TCommitAnswers extends Record<string, string | boolean> = Record<\n string,\n string | boolean\n >,\n TCommitConfig extends Record<string, any> = Record<string, any>\n> = {\n variant: Variant;\n answers: TCommitAnswers;\n config: TCommitConfig;\n root: string;\n};\n\nexport interface CommitLintRuleOutcome {\n /** If the commit is considered valid for the rule */\n valid: boolean;\n /** The \"severity\" of the rule (1 = warning, 2 = error) */\n level: RuleConfigSeverity;\n /** The name of the rule */\n name: string;\n /** The message returned from the rule, if invalid */\n message: string;\n}\n\nexport interface CommitLintOutcome {\n /** The linted commit, as string */\n input: string;\n /** If the linted commit is considered valid */\n valid: boolean;\n /** All errors, per rule, for the commit */\n errors: CommitLintRuleOutcome[];\n /** All warnings, per rule, for the commit */\n warnings: CommitLintRuleOutcome[];\n}\n\nexport type ReleaseOptions = any & {\n npm: boolean;\n github: boolean;\n githubOptions?: Record<string, unknown>;\n buildTarget?: string;\n changelog?: boolean;\n changelogFile?: string;\n outputPath?: string;\n commitMessage?: string;\n gitAssets?: string[];\n packageJsonDir?: string;\n parserOpts?: Record<string, unknown>;\n writerOpts?: Record<string, unknown>;\n linkCompare?: boolean;\n linkReferences?: boolean;\n releaseRules?:\n | string\n | { release: string | boolean; [key: string]: unknown }[];\n preset?: string;\n presetConfig?: Record<string, unknown>;\n plugins?: any[];\n tagFormat?: string;\n git: boolean;\n branches: string[];\n};\n\nexport type ReleaseContext = ReleaseConfig & {\n projectName: string;\n workspaceDir: string;\n projectGraph: ProjectGraph;\n projectConfigs: ProjectsConfigurations;\n};\n\nexport interface ReadMeOptions {\n templates: string;\n project?: string;\n output?: string;\n clean: boolean;\n prettier: boolean;\n}\n\nexport interface ReleaseGroupConfig {\n /**\n * Whether to version and release projects within the group independently, or together in lock step (\"fixed\").\n * If not set on the group, this will be informed by the projectsRelationship config at the top level.\n */\n projectsRelationship?: \"fixed\" | \"independent\";\n\n /**\n * Required list of one or more projects to include in the release group. Any single project can\n * only be used in a maximum of one release group.\n */\n projects: string[] | string;\n\n /**\n * Configure options to handle versioning docker projects for this group.\n * Set to `true` to enable with default settings, or provide a configuration object for custom settings.\n */\n docker?:\n | (NxReleaseDockerConfiguration & {\n /**\n * A command to run after validation of nx release configuration, but before docker versioning begins.\n * Used for preparing docker build artifacts. If --dry-run is passed, the command is still executed, but\n * with the NX_DRY_RUN environment variable set to 'true'.\n * It will run in addition to the global `preVersionCommand`\n */\n groupPreVersionCommand?: string;\n })\n | true;\n\n /**\n * Optionally override version configuration for this group.\n *\n * NOTE: git configuration is not supported at the group level, only the root/command level\n */\n version?: NxReleaseVersionConfiguration & {\n /**\n * A command to run after validation of nx release configuration, but before versioning begins.\n * Used for preparing build artifacts. If --dry-run is passed, the command is still executed, but\n * with the NX_DRY_RUN environment variable set to 'true'.\n * It will run in addition to the global `preVersionCommand`\n */\n groupPreVersionCommand?: string;\n };\n\n /**\n * Project changelogs are disabled by default.\n *\n * Here you can optionally override project changelog configuration for this group.\n * Notes about boolean values:\n *\n * - true = enable project level changelogs using default configuration\n * - false = explicitly disable project level changelogs\n *\n * NOTE: git configuration is not supported at the group level, only the root/command level\n */\n changelog?: NxReleaseChangelogConfiguration | boolean;\n\n /**\n * Configuration for release tag generation and matching.\n */\n releaseTag?: {\n /**\n * The pattern to use for release tags. Supports interpolating {version}, {projectName}, and {releaseGroupName}.\n */\n pattern?: string;\n\n /**\n * By default, we will try and resolve the latest match for the releaseTagPattern from the current branch,\n * falling back to all branches if no match is found on the current branch.\n *\n * - Setting this to true will cause us to ALWAYS check all branches for the latest match.\n * - Setting it to false will cause us to ONLY check the current branch for the latest match.\n * - Setting it to an array of strings will cause us to check all branches WHEN the current branch matches one of the strings in the array. Glob patterns are supported.\n */\n checkAllBranchesWhen?: boolean | string[];\n\n /**\n * By default, we will use semver when searching through the tags to find the latest matching tag.\n *\n * - Setting this to true will cause us to use semver to match the version\n * - Setting this to false will cause us to not use semver to match the version allowing for non-semver versions\n */\n requireSemver?: boolean;\n\n /**\n * Controls how docker versions are used relative to semver versions when creating git tags and changelog entries.\n *\n * - true: Use only the docker version\n * - false: Use only the semver version\n * - 'both': Create tags and changelog entries for both docker and semver versions\n *\n * By default, this is set to true when docker configuration is present, and false otherwise.\n */\n preferDockerVersion?: boolean | \"both\";\n\n /**\n * When set to true and multiple tags match your configured pattern, the git tag matching logic will strictly prefer the tag which contain a semver preid which matches the one\n * given to the nx release invocation.\n *\n * For example, let's say your pattern is \"{projectName}@{version}\" and you have the following tags for project \"my-lib\", which uses semver:\n * - my-lib@1.2.4-beta.1\n * - my-lib@1.2.4-alpha.1\n * - my-lib@1.2.3\n *\n * If \"strictPreid\" is set to true and you run:\n * - `nx release --preid beta`, the git tag \"my-lib@1.2.4-beta.1\" will be resolved.\n * - `nx release --preid alpha`, the git tag \"my-lib@1.2.4-alpha.1\" will be resolved.\n * - `nx release` (no preid), the git tag \"my-lib@1.2.3\" will be resolved.\n *\n * If \"strictPreid\" is set to false, the git tag \"my-lib@1.2.4-beta.1\" will always be resolved as the latest tag that matches the pattern,\n * regardless of any preid which gets passed to nx release.\n *\n * NOTE: This feature was added in a minor version and is therefore set to false by default, but this may change in a future major version.\n */\n strictPreid?: boolean;\n };\n\n /**\n * Enables using version plans as a specifier source for versioning and\n * to determine changes for changelog generation.\n */\n versionPlans?: NxReleaseVersionPlansConfiguration | boolean;\n}\n\nexport type ReleaseConfig = Omit<\n NxReleaseConfiguration,\n \"groups\" | \"conventionalCommits\"\n> &\n Required<Pick<NxReleaseConfig, \"conventionalCommits\">> & {\n groups: Record<string, ReleaseGroupConfig>;\n };\n\n// export interface NxReleaseConfig {\n// /**\n// * Shorthand for amending the projects which will be included in the implicit default release group (all projects by default).\n// * @note Only one of `projects` or `groups` can be specified, the cannot be used together.\n// */\n// projects?: string[] | string;\n// /**\n// * @note When no projects or groups are configured at all (the default), all projects in the workspace are treated as\n// * if they were in a release group together with a fixed relationship.\n// */\n// groups?: Record<\n// string, // group name\n// {\n// /**\n// * Whether to version and release projects within the group independently, or together in lock step (\"fixed\").\n// * If not set on the group, this will be informed by the projectsRelationship config at the top level.\n// */\n// projectsRelationship?: \"fixed\" | \"independent\";\n// /**\n// * Required list of one or more projects to include in the release group. Any single project can\n// * only be used in a maximum of one release group.\n// */\n// projects: string[] | string;\n// /**\n// * Optionally override version configuration for this group.\n// *\n// * NOTE: git configuration is not supported at the group level, only the root/command level\n// */\n// version?: NxReleaseVersionConfiguration;\n// /**\n// * Project changelogs are disabled by default.\n// *\n// * Here you can optionally override project changelog configuration for this group.\n// * Notes about boolean values:\n// *\n// * - true = enable project level changelogs using default configuration\n// * - false = explicitly disable project level changelogs\n// *\n// * NOTE: git configuration is not supported at the group level, only the root/command level\n// */\n// changelog?: NxReleaseChangelogConfiguration | boolean;\n// /**\n// * Optionally override the git/release tag pattern to use for this group.\n// */\n// releaseTagPattern?: string;\n// }\n// >;\n// /**\n// * Configures the default value for all groups that don't explicitly state their own projectsRelationship.\n// *\n// * By default, this is set to \"fixed\" which means all projects in the workspace will be versioned and\n// * released together in lock step.\n// */\n// projectsRelationship?: \"fixed\" | \"independent\";\n// changelog?: {\n// /**\n// * Enable or override configuration for git operations as part of the changelog subcommand\n// */\n// git?: NxReleaseGitConfiguration;\n// /**\n// * Workspace changelog is enabled by default. Notes about boolean values:\n// *\n// * - true = explicitly enable workspace changelog using default configuration\n// * - false = disable workspace changelog\n// */\n// workspaceChangelog?: NxReleaseChangelogConfiguration | boolean;\n// /**\n// * Project changelogs are disabled by default. Notes about boolean values:\n// *\n// * - true = enable project level changelogs using default configuration\n// * - false = explicitly disable project level changelogs\n// */\n// projectChangelogs?: NxReleaseChangelogConfiguration | boolean;\n// /**\n// * Whether or not to automatically look up the first commit for the workspace (or package, if versioning independently)\n// * and use that as the starting point for changelog generation. If this is not enabled, changelog generation will fail\n// * if there is no previous matching git tag to use as a starting point.\n// */\n// automaticFromRef?: boolean;\n// };\n// /**\n// * If no version config is provided, we will assume that @nx/js:release-version\n// * is the desired generator implementation, allowing for terser config for the common case.\n// */\n// version?: NxReleaseVersionConfiguration & {\n// /**\n// * Enable or override configuration for git operations as part of the version subcommand\n// */\n// git?: NxReleaseGitConfiguration;\n// /**\n// * A command to run after validation of nx release configuration, but before versioning begins.\n// * Used for preparing build artifacts. If --dry-run is passed, the command is still executed, but\n// * with the NX_DRY_RUN environment variable set to 'true'.\n// */\n// preVersionCommand?: string;\n// };\n// /**\n// * Optionally override the git/release tag pattern to use. This field is the source of truth\n// * for changelog generation and release tagging, as well as for conventional commits parsing.\n// *\n// * It supports interpolating the version as {version} and (if releasing independently or forcing\n// * project level version control system releases) the project name as {projectName} within the string.\n// *\n// * The default releaseTagPattern for fixed/unified releases is: \"v{version}\"\n// * The default releaseTagPattern for independent releases at the project level is: \"{projectName}@{version}\"\n// */\n// releaseTagPattern?: string;\n// /**\n// * Enable and configure automatic git operations as part of the release\n// */\n// git?: NxReleaseGitConfiguration;\n// conventionalCommits?: NxReleaseConventionalCommitsConfiguration;\n// }\n\n// export type NxReleaseConventionalCommitsConfig = NonNullable<\n// NxReleaseConfig[\"conventionalCommits\"]\n// >;\n// export type NxReleaseProjectsConfig = NonNullable<NxReleaseConfig[\"projects\"]>;\n// export type NxReleaseGroupsConfig = NonNullable<NxReleaseConfig[\"groups\"]>;\n// export type NxReleaseVersionConfig = NonNullable<NxReleaseConfig[\"version\"]>;\n// export type NxReleaseGitConfig = NonNullable<NxReleaseConfig[\"git\"]>;\n// export type NxReleaseChangelogConfig = NonNullable<\n// NxReleaseConfig[\"changelog\"]\n// >;\n\n// export type NxReleaseGroupConfig = NxReleaseGroupsConfig[string];\n\nexport type NxReleaseRequiredGitConfig = Required<{\n commit?: boolean | undefined;\n commitMessage?: string | undefined;\n commitArgs?: string | undefined;\n stageChanges?: boolean | undefined;\n tag?: boolean | undefined;\n tagMessage?: string | undefined;\n tagArgs?: string | undefined;\n}>;\n","import { DEFAULT_COMMIT_TYPES } from \"conventional-changelog-storm-software/commit-types\";\nimport { COMMIT_CONFIGS } from \"conventional-changelog-storm-software/configs\";\nimport {\n CommitTypeProps,\n CommitTypesEnum,\n DefaultCommitTypeKeys\n} from \"conventional-changelog-storm-software/types/commit-types\";\nimport { DEFAULT_COMMIT_PROMPT_MESSAGES } from \"../../types\";\n\nexport const DEFAULT_MINIMAL_COMMIT_QUESTIONS = {\n type: {\n type: \"select\",\n title: \"Commit Type\",\n description: \"Select the commit type that best describes your changes\",\n enum: (\n Object.keys(DEFAULT_COMMIT_TYPES).filter(\n type => DEFAULT_COMMIT_TYPES[type].hidden !== true\n ) as DefaultCommitTypeKeys[]\n ).reduce((ret, type) => {\n ret[type] = DEFAULT_COMMIT_TYPES[type] as CommitTypeProps;\n\n return ret;\n }, {} as CommitTypesEnum),\n defaultValue: \"chore\",\n maxLength: 20,\n minLength: 3\n },\n subject: {\n type: \"input\",\n title: \"Commit Subject\",\n description: \"Write a short, imperative tense description of the change\",\n maxLength: 150,\n minLength: 3\n },\n body: {\n type: \"input\",\n title: \"Commit Body\",\n description: \"Provide a longer description of the change\",\n maxLength: 600\n },\n isBreaking: {\n type: \"confirm\",\n title: \"Breaking Changes\",\n description: \"Are there any breaking changes as a result of this commit?\",\n defaultValue: false\n },\n breakingBody: {\n type: \"input\",\n title: \"Breaking Changes (Details)\",\n description:\n \"A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself\",\n when: (answers: Record<string, any>) => answers.isBreaking === true,\n maxLength: 600,\n minLength: 3\n },\n isIssueAffected: {\n type: \"confirm\",\n title: \"Open Issue Affected\",\n description: \"Does this change impact any open issues?\",\n defaultValue: false\n },\n issuesBody: {\n type: \"input\",\n title: \"Open Issue Affected (Details)\",\n description:\n \"If issues are closed, the commit requires a body. Please enter a longer description of the commit itself\",\n when: (answers: Record<string, any>) => answers.isIssueAffected === true,\n maxLength: 600,\n minLength: 3\n }\n} as const;\n\nconst config = {\n settings: COMMIT_CONFIGS.minimal.commitlint.settings,\n messages: DEFAULT_COMMIT_PROMPT_MESSAGES,\n questions: DEFAULT_MINIMAL_COMMIT_QUESTIONS,\n types: DEFAULT_COMMIT_TYPES\n};\n\nexport default config;\n","import { DEFAULT_COMMIT_TYPES } from \"conventional-changelog-storm-software/commit-types\";\nimport { COMMIT_CONFIGS } from \"conventional-changelog-storm-software/configs\";\nimport { CommitScopesEnum, DEFAULT_COMMIT_PROMPT_MESSAGES } from \"../../types\";\nimport { DEFAULT_MINIMAL_COMMIT_QUESTIONS } from \"./minimal\";\n\nexport const DEFAULT_MONOREPO_COMMIT_QUESTIONS = {\n type: DEFAULT_MINIMAL_COMMIT_QUESTIONS.type,\n scope: {\n type: \"select\",\n title: \"Commit Scope\",\n description: \"Select the project that's the most impacted by this change\",\n enum: {} as CommitScopesEnum,\n defaultValue: \"monorepo\",\n maxLength: 50,\n minLength: 1\n },\n subject: DEFAULT_MINIMAL_COMMIT_QUESTIONS.subject,\n body: DEFAULT_MINIMAL_COMMIT_QUESTIONS.body,\n isBreaking: DEFAULT_MINIMAL_COMMIT_QUESTIONS.isBreaking,\n breakingBody: DEFAULT_MINIMAL_COMMIT_QUESTIONS.breakingBody,\n isIssueAffected: DEFAULT_MINIMAL_COMMIT_QUESTIONS.isIssueAffected,\n issuesBody: DEFAULT_MINIMAL_COMMIT_QUESTIONS.issuesBody\n} as const;\n\nconst config = {\n settings: COMMIT_CONFIGS.monorepo.commitlint.settings,\n messages: DEFAULT_COMMIT_PROMPT_MESSAGES,\n questions: DEFAULT_MONOREPO_COMMIT_QUESTIONS,\n types: DEFAULT_COMMIT_TYPES\n};\n\nexport default config;\n","import { ProjectGraph } from \"@nx/devkit\";\nimport { StormWorkspaceConfig } from \"@storm-software/config\";\nimport { joinPaths } from \"@storm-software/config-tools\";\nimport chalkTemplate from \"chalk-template\";\nimport {\n CommitTypeProps,\n CommitTypesEnum\n} from \"conventional-changelog-storm-software/types/commit-types\";\nimport { getScopeEnum } from \"conventional-changelog-storm-software/utilities/nx-scopes\";\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport {\n createProjectGraphAsync,\n readCachedProjectGraph,\n readProjectsConfigurationFromProjectGraph\n} from \"nx/src/project-graph/project-graph\";\nimport type {\n CommitQuestionProps,\n CommitScopeProps,\n CommitState\n} from \"../types\";\nimport minimalConfig from \"./config/minimal\";\nimport monorepoConfig from \"./config/monorepo\";\n\nexport function getGitDir() {\n const devNull = process.platform === \"win32\" ? \" nul\" : \"/dev/null\";\n const dir = execSync(`git rev-parse --absolute-git-dir 2>${devNull}`)\n .toString()\n .trim();\n\n return dir;\n}\n\nexport function getGitRootDir() {\n const devNull = process.platform === \"win32\" ? \" nul\" : \"/dev/null\";\n const dir = execSync(`git rev-parse --show-toplevel 2>${devNull}`)\n .toString()\n .trim();\n\n return dir;\n}\n\n/**\n * Creates the commit state used to run the commit prompt\n *\n * @param workspaceConfig - The Storm workspace configuration\n * @param configPath - The path to the commit configuration file\n * @returns The commit state\n */\nexport async function createState<\n TWorkspaceConfig extends StormWorkspaceConfig = StormWorkspaceConfig\n>(\n workspaceConfig: TWorkspaceConfig,\n configPath?: string\n): Promise<CommitState> {\n let root: string;\n\n try {\n root = getGitRootDir();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n throw new Error(\"Could not find Git root folder.\");\n }\n\n const state = {\n variant: workspaceConfig.variant,\n config:\n workspaceConfig.variant === \"minimal\" ? minimalConfig : monorepoConfig,\n root,\n answers: {}\n };\n\n if (state.config.questions.type && state.config.questions.type.enum) {\n (state.config.questions.type as CommitQuestionProps).enum = Object.keys(\n state.config.questions.type.enum\n ).reduce((ret, key) => {\n if (state.config.questions.type.enum) {\n ret[key] = {\n ...state.config.questions.type.enum[key],\n title: chalkTemplate`${\n state.config.questions.type.enum[key]?.emoji\n ? `${state.config.questions.type.enum[key]?.emoji} `\n : \"\"\n }{bold ${key}} ${\n state.config.questions.type.enum[key]?.title &&\n state.config.questions.type.enum[key]?.title !== key\n ? `- ${state.config.questions.type.enum[key]?.title}`\n : \"\"\n }${\n (state.config.questions.type.enum[key] as CommitTypeProps)\n ?.semverBump\n ? ` (version bump: ${\n (state.config.questions.type.enum[key] as CommitTypeProps)\n ?.semverBump\n })`\n : \"\"\n }`,\n hidden: false\n };\n }\n\n return ret;\n }, {} as CommitTypesEnum);\n }\n\n if (\n workspaceConfig.variant === \"monorepo\" &&\n (!(state.config.questions as typeof monorepoConfig.questions)?.scope ||\n !(state.config.questions as typeof monorepoConfig.questions)?.scope\n .enum ||\n Object.keys(\n (state.config.questions as typeof monorepoConfig.questions)?.scope.enum\n ).length === 0)\n ) {\n const scopes = await getScopeEnum({\n config: workspaceConfig\n });\n for (const scope of scopes) {\n if (scope === \"monorepo\") {\n (state.config.questions as typeof monorepoConfig.questions).scope.enum[\n scope\n ] = {\n title: chalkTemplate`{bold monorepo} - workspace root`,\n description: \"The base workspace package (workspace root)\",\n hidden: false,\n projectRoot: \"/\"\n } as CommitScopeProps;\n } else {\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n await createProjectGraphAsync();\n projectGraph = readCachedProjectGraph();\n }\n\n if (!projectGraph) {\n throw new Error(\n \"Failed to load the project graph. Please run `nx reset`, then run the `storm-git commit` command again.\"\n );\n }\n\n const projectConfigurations =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n if (!projectConfigurations?.projects?.[scope]) {\n throw new Error(\n `Failed to load the project configuration for project ${scope}. Please run \\`nx reset\\`, then run the \\`storm-git commit\\` command again.`\n );\n }\n\n const project = projectConfigurations.projects[scope];\n if (project) {\n let description = `${project.name} - ${project.root}`;\n\n const packageJsonPath = joinPaths(project.root, \"package.json\");\n if (existsSync(packageJsonPath)) {\n const packageJsonFile = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(packageJsonFile);\n\n description = packageJson.description || description;\n }\n\n (\n state.config.questions as typeof monorepoConfig.questions\n ).scope.enum[scope] = {\n title: chalkTemplate`{bold ${project.name}} - ${project.root}`,\n description,\n hidden: false,\n projectRoot: project.root\n } as CommitScopeProps;\n }\n }\n }\n }\n\n state.answers = Object.keys(state.config.questions).reduce(\n (ret, key) => {\n ret[key] = \"\";\n\n return ret;\n },\n {} as CommitState[\"answers\"]\n );\n\n return state as CommitState;\n}\n","import { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport wrap from \"word-wrap\";\nimport type { CommitState } from \"../types\";\n\nconst MAX_LINE_WIDTH = 72;\n\nexport const formatCommitMessage = (\n state: CommitState,\n workspaceConfig: StormWorkspaceConfig\n) => {\n const { config, answers } = state;\n const wrapOptions = {\n indent: \"\",\n trim: true,\n width: MAX_LINE_WIDTH\n };\n\n if (typeof answers.type !== \"string\") {\n throw new Error(\"Invalid commit type.\");\n }\n if (typeof answers.subject !== \"string\") {\n throw new Error(\"Invalid subject type.\");\n }\n if (\n workspaceConfig.variant !== \"minimal\" &&\n typeof answers.scope !== \"string\"\n ) {\n throw new Error(\"Invalid commit scope.\");\n }\n\n const emoji = answers.type?.[answers.type]?.emoji\n ? answers.type[answers.type].emoji\n : \"\";\n const scope =\n workspaceConfig.variant !== \"minimal\" &&\n typeof answers.scope === \"string\" &&\n answers.scope\n ? answers.scope.trim()\n : \"\";\n const subject = answers.subject?.trim();\n const type = answers.type;\n\n const format =\n config.settings.format ||\n (workspaceConfig.variant !== \"minimal\"\n ? \"{type}({scope}): {emoji}{subject}\"\n : \"{type}: {emoji}{subject}\");\n\n // Wrap these lines at MAX_LINE_WIDTH character\n const body =\n answers.body && typeof answers.body === \"string\"\n ? wrap(answers.body || \"\", wrapOptions)\n : \"\";\n const breaking =\n answers.breakingBody && typeof answers.breakingBody === \"string\"\n ? wrap(answers.breakingBody || \"\", wrapOptions)\n : \"\";\n const issues =\n answers.issuesBody && typeof answers.issuesBody === \"string\"\n ? wrap(answers.issuesBody || \"\", wrapOptions)\n : \"\";\n\n // @note(emoji) Add space after emoji (breakingChangePrefix/closedIssueEmoji)\n const head = format\n .replace(/\\{emoji\\}/g, config.settings.disableEmoji ? \"\" : `${emoji} `)\n .replace(/\\{scope\\}/g, scope)\n .replace(/\\{subject\\}/g, subject || \"\")\n .replace(/\\{type\\}/g, type || \"\");\n\n let msg = head;\n\n if (body) {\n msg += `\\n\\n${body}`;\n }\n\n if (breaking) {\n const breakingEmoji = config.settings.disableEmoji\n ? \"\"\n : config.settings.breakingChangePrefix;\n\n msg += `\\n\\nBREAKING CHANGE: ${breakingEmoji}${breaking}`;\n }\n\n if (issues) {\n const closedIssueEmoji = config.settings.disableEmoji\n ? \"\"\n : config.settings.closedIssuePrefix;\n\n msg += `\\n\\n${closedIssueEmoji}${config.settings.closedIssueMessage}${issues}`;\n }\n\n return msg;\n};\n","import { confirm, input, select } from \"@inquirer/prompts\";\nimport { joinPaths } from \"@storm-software/config-tools\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport {\n brandIcon,\n writeDebug,\n writeInfo\n} from \"@storm-software/config-tools/logger/console\";\nimport { run } from \"@storm-software/config-tools/utilities/run\";\nimport shellescape from \"any-shell-escape\";\nimport chalkTemplate from \"chalk-template\";\nimport fs from \"node:fs/promises\";\nimport { runCommitLint } from \"../commitlint/run\";\nimport { CommitQuestionProps, CommitState } from \"../types\";\nimport { createState, getGitDir } from \"./commit-state\";\nimport { formatCommitMessage } from \"./format-commit-message\";\n\nexport async function runCommit(commitizenFile?: string, dryRun = false) {\n const workspaceConfig = await getWorkspaceConfig();\n\n const state = await createState(workspaceConfig, commitizenFile);\n if (dryRun) {\n writeInfo(\"Running in dry mode.\", workspaceConfig);\n }\n\n console.log(chalkTemplate`\n{bold.#999999 ----------------------------------------}\n\n{bold.#FFFFFF ${brandIcon(workspaceConfig)} Storm Software Git-Tools - Commit}\n{#CCCCCC Please provide the requested details below...}\n`);\n\n state.answers = await askQuestions(state);\n\n const message = formatCommitMessage(state, workspaceConfig);\n const commitMsgFile = joinPaths(getGitDir(), \"COMMIT_EDITMSG\");\n\n console.log(chalkTemplate`\n{bold.#999999 ----------------------------------------}\n\n{bold.#FFFFFF Commit message} - {#DDDDDD ${message}}\n{bold.#FFFFFF Git-Commit File} - {#DDDDDD ${commitMsgFile}}\n\n `);\n\n await runCommitLint(workspaceConfig, { message });\n\n const commandItems = [\"git\", \"commit\", \"-S\"];\n\n commandItems.push(...[\"--file\", commitMsgFile]);\n const command = shellescape(commandItems);\n\n if (dryRun) {\n // The full path is replaced with a relative path to make the test pass on every machine\n writeDebug(\n `Skipping execution [dry-run]: ${command.replace(commitMsgFile, \".git/COMMIT_EDITMSG\")}`,\n workspaceConfig\n );\n writeDebug(`Message [dry-run]: ${message}`, workspaceConfig);\n } else {\n await fs.writeFile(commitMsgFile, message);\n\n run(workspaceConfig, command);\n }\n}\n\nasync function askQuestions<TCommitState extends CommitState = CommitState>(\n state: TCommitState\n): Promise<TCommitState[\"answers\"]> {\n let index = 0;\n for (const key of Object.keys(state.config.questions)) {\n if (\n state.config.questions[key] &&\n !state.config.questions[key].hidden &&\n (!state.config.questions[key].when ||\n state.config.questions[key].when(state.answers))\n ) {\n state.answers[key] = await askQuestion(\n index,\n state.config.questions[key]\n );\n index++;\n }\n }\n\n return state.answers;\n}\n\nexport async function askQuestion(\n index: number,\n question: CommitQuestionProps\n): Promise<string | boolean> {\n const message = chalkTemplate`{bold ${index + 1}. ${question.title}} - ${question.description}\n`;\n\n // const message = `${index + 1}. ${question.title}: ${question.description}`;\n\n if (\n question.type === \"select\" &&\n question.enum &&\n Object.keys(question.enum).length > 1\n ) {\n return select({\n message,\n choices: Object.keys(question.enum)\n .filter(key => !question.enum?.[key]?.hidden)\n .map(key => ({\n name: question.enum?.[key]?.title || key,\n value: key,\n description: question.enum?.[key]?.description || \"\"\n })),\n default: String(question.defaultValue || \"\")\n });\n } else if (question.type === \"confirm\") {\n return confirm({\n message,\n default: Boolean(question.defaultValue)\n });\n } else {\n let validate:\n | ((value: string) => string | boolean | Promise<string | boolean>)\n | undefined = undefined;\n if (question.minLength !== undefined || question.maxLength !== undefined) {\n validate = (value: string) => {\n if (\n question.minLength !== undefined &&\n value.length < question.minLength\n ) {\n return `Minimum length is ${question.minLength} characters.`;\n }\n if (\n question.maxLength !== undefined &&\n value.length > question.maxLength\n ) {\n return `Maximum length is ${question.maxLength} characters.`;\n }\n\n return true;\n };\n }\n\n return input({\n message,\n required: !!(question.minLength !== undefined && question.minLength > 0),\n default: String(question.defaultValue || \"\"),\n validate\n });\n }\n}\n","import { ProjectFileMap } from \"@nx/devkit\";\nimport Path, { dirname, isAbsolute, join } from \"node:path\";\n\nexport function findFileName(filePath: string): string {\n return (\n filePath\n ?.split(\n filePath?.includes(Path.sep)\n ? Path.sep\n : filePath?.includes(\"/\")\n ? \"/\"\n : \"\\\\\"\n )\n ?.pop() ?? \"\"\n );\n}\n\nexport function findFilePath(filePath: string): string {\n return filePath.replace(findFileName(filePath), \"\");\n}\n\nexport function resolvePath(filePath: string, basePath?: string) {\n if (isAbsolute(filePath)) {\n return filePath;\n }\n if (basePath) {\n return join(dirname(basePath), filePath);\n }\n\n return null;\n}\n\n/**\n * Rename the file name with a new name.\n *\n * @param filePath The current file path being processed\n * @param newFileName The updated file name being processed\n * @returns The modified or unmodified file path.\n */\nexport function renameFile(filePath: string, newFileName: string): string {\n const file = Path.parse(filePath);\n return Path.join(\n file.dir,\n newFileName.includes(\".\") ? newFileName : newFileName + file.ext\n );\n}\n\nexport function createFileToProjectMap(\n projectFileMap: ProjectFileMap\n): Record<string, string> {\n const fileToProjectMap = {};\n for (const [projectName, projectFiles] of Object.entries(projectFileMap)) {\n for (const file of projectFiles) {\n fileToProjectMap[file.file] = projectName;\n }\n }\n return fileToProjectMap;\n}\n","import { parse, Syntax } from \"@textlint/markdown-to-ast\";\nimport anchor from \"anchor-markdown-header\";\nimport { Parser } from \"htmlparser2\";\nimport _ from \"underscore\";\nimport updateSection from \"update-section\";\n\nexport const start =\n \"<!-- START doctoc -->\\n\" +\n \"<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\";\nexport const end = \"<!-- END doctoc -->\";\nexport const skipTag = \"<!-- DOCTOC SKIP -->\";\n\nfunction matchesStart(line) {\n return /<!-- START doctoc /.test(line);\n}\n\nfunction matchesEnd(line) {\n return /<!-- END doctoc /.test(line);\n}\n\nfunction notNull(x) {\n return x !== null;\n}\n\nfunction addAnchor(mode, header) {\n header.anchor = anchor(header.name, mode, header.instance);\n return header;\n}\n\nfunction getMarkdownHeaders(lines, maxHeaderLevel) {\n function extractText(header) {\n return header.children\n .map(function (x) {\n if (x.type === Syntax.Link) {\n return extractText(x);\n } else if (x.type === Syntax.Image) {\n // Images (at least on GitHub, untested elsewhere) are given a hyphen\n // in the slug. We can achieve this behavior by adding an '*' to the\n // TOC entry. Think of it as a \"magic char\" that represents the iamge.\n return \"*\";\n } else {\n return x.raw;\n }\n })\n .join(\"\");\n }\n\n return parse(lines.join(\"\\n\"))\n .children.filter(function (x) {\n return x.type === Syntax.Header;\n })\n .map(function (x) {\n return !maxHeaderLevel || x.depth <= maxHeaderLevel\n ? { rank: x.depth, name: extractText(x), line: x.loc.start.line }\n : null;\n })\n .filter(notNull);\n}\n\nfunction countHeaders(headers) {\n const instances = {};\n\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n const name = header.name;\n\n if (Object.prototype.hasOwnProperty.call(instances, name)) {\n // `instances.hasOwnProperty(name)` fails when there’s an instance named \"hasOwnProperty\".\n instances[name]++;\n } else {\n instances[name] = 0;\n }\n\n header.instance = instances[name];\n }\n\n return headers;\n}\n\nfunction getLinesToToc(lines, currentToc, info, processAll) {\n if (processAll || !currentToc) return lines;\n\n let tocableStart = 0;\n\n // when updating an existing toc, we only take the headers into account\n // that are below the existing toc\n if (info.hasEnd) tocableStart = info.endIdx + 1;\n\n return lines.slice(tocableStart);\n}\n\n// Use document context as well as command line args to infer the title\nfunction determineTitle(title, notitle, lines, info) {\n const defaultTitle = \"**Table of Contents** \";\n\n if (notitle) return \"\";\n if (title) return title;\n return info.hasStart ? lines[info.startIdx + 2] : defaultTitle;\n}\n\nexport function transform(\n content,\n mode,\n maxHeaderLevel,\n title,\n notitle,\n entryPrefix,\n processAll,\n updateOnly\n): any {\n if (content.indexOf(skipTag) !== -1) return { transformed: false };\n\n mode = mode || \"github.com\";\n entryPrefix = entryPrefix || \"-\";\n\n // only limit *HTML* headings by default\n const maxHeaderLevelHtml = maxHeaderLevel || 4;\n\n const lines = content.split(\"\\n\"),\n info = updateSection.parse(lines, matchesStart, matchesEnd);\n\n if (!info.hasStart && updateOnly) {\n return { transformed: false };\n }\n\n const inferredTitle = determineTitle(title, notitle, lines, info);\n\n const titleSeparator = inferredTitle ? \"\\n\\n\" : \"\\n\";\n\n const currentToc =\n info.hasStart && lines.slice(info.startIdx, info.endIdx + 1).join(\"\\n\"),\n linesToToc = getLinesToToc(lines, currentToc, info, processAll);\n\n const headers = getMarkdownHeaders(linesToToc, maxHeaderLevel).concat(\n getHtmlHeaders(linesToToc, maxHeaderLevelHtml)\n );\n\n headers.sort((a, b) => {\n if (!a && b) {\n return -1;\n }\n if (a && !b) {\n return 1;\n }\n if (!a && !b) {\n return 0;\n }\n\n return a!.line - b!.line;\n });\n\n const allHeaders = countHeaders(headers),\n lowestRank = _(allHeaders).chain().pluck(\"rank\").min().value(),\n linkedHeaders = _(allHeaders).map(addAnchor.bind(null, mode));\n\n if (linkedHeaders.length === 0) return { transformed: false };\n\n // 4 spaces required for proper indention on Bitbucket and GitLab\n const indentation =\n mode === \"bitbucket.org\" || mode === \"gitlab.com\" ? \" \" : \" \";\n\n const toc =\n inferredTitle +\n titleSeparator +\n linkedHeaders\n .map(function (x) {\n const indent = _(_.range(x.rank - lowestRank)).reduce(function (\n acc,\n x\n ) {\n return acc + indentation;\n }, \"\");\n\n return indent + entryPrefix + \" \" + x.anchor;\n })\n .join(\"\\n\") +\n \"\\n\";\n\n const wrappedToc = start + \"\\n\" + toc + \"\\n\" + end;\n\n if (currentToc === toc) return { transformed: false };\n\n const data = updateSection(\n lines.join(\"\\n\"),\n wrappedToc,\n matchesStart,\n matchesEnd,\n true\n );\n return { transformed: true, data: data, toc: toc, wrappedToc: wrappedToc };\n}\n\nfunction addLinenos(lines, headers) {\n let current = 0,\n line;\n\n return headers.map(function (x) {\n for (let lineno = current; lineno < lines.length; lineno++) {\n line = lines[lineno];\n if (new RegExp(x.text[0]).test(line)) {\n current = lineno;\n x.line = lineno;\n x.name = x.text.join(\"\");\n return x;\n }\n }\n\n // in case we didn't find a matching line, which is odd,\n // we'll have to assume it's right on the next line\n x.line = ++current;\n x.name = x.text.join(\"\");\n return x;\n });\n}\n\nfunction rankify(headers, max) {\n return headers\n .map(function (x) {\n x.rank = parseInt(x.tag.slice(1), 10);\n return x;\n })\n .filter(function (x) {\n return x.rank <= max;\n });\n}\n\nexport function getHtmlHeaders(lines, maxHeaderLevel) {\n const source = parse(lines.join(\"\\n\"))\n .children.filter(function (node) {\n return node.type === Syntax.Html;\n })\n .map(function (node) {\n return node.raw;\n })\n .join(\"\\n\");\n\n let headers = [] as any[];\n const grabbing = [] as any[];\n let text = [] as any[];\n\n const parser = new Parser(\n {\n onopentag: function (name, attr) {\n // Short circuit if we're already inside a pre\n if (grabbing[grabbing.length - 1] === \"pre\") return;\n\n if (name === \"pre\" || /h\\d/.test(name)) {\n grabbing.push(name);\n }\n },\n ontext: function (text_) {\n // Explicitly skip pre tags, and implicitly skip all others\n if (grabbing.length === 0 || grabbing[grabbing.length - 1] === \"pre\")\n return;\n\n text.push(text_);\n },\n onclosetag: function (name) {\n if (grabbing.length === 0) return;\n if (grabbing[grabbing.length - 1] === name) {\n const tag = grabbing.pop();\n headers.push({ text: text, tag: tag });\n text = [];\n }\n }\n },\n { decodeEntities: true }\n );\n\n parser.write(source);\n parser.end();\n\n headers = addLinenos(lines, headers);\n // consider anything past h4 to small to warrant a link, may be made configurable in the future\n headers = rankify(headers, maxHeaderLevel);\n return headers;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { readFileSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { extname, join } from \"node:path\";\nimport { transform } from \"./transform\";\n\nasync function transformAndSave(\n files: any[],\n mode = \"github.com\",\n maxHeaderLevel = 3,\n title = \"## Table of Contents\",\n noTitle = false,\n entryPrefix = undefined,\n processAll = false,\n updateOnly = false\n) {\n if (processAll) {\n console.log(\n \"--all flag is enabled. Including headers before the TOC location.\"\n );\n }\n\n if (updateOnly) {\n console.log(\n \"--update-only flag is enabled. Only updating files that already have a TOC.\"\n );\n }\n\n console.log(\"\\n==================\\n\");\n const transformed = files.map(x => {\n const result = transform(\n readFileSync(x.path, \"utf8\"),\n mode,\n maxHeaderLevel,\n title,\n noTitle,\n entryPrefix,\n processAll,\n updateOnly\n );\n result.path = x.path;\n return result;\n });\n\n const changed = transformed.filter(x => x.transformed);\n const unchanged = transformed.filter(x => {\n return !x.transformed;\n });\n\n for (const x of unchanged) {\n console.log('\"%s\" is up to date', x.path);\n }\n for (const x of changed) {\n console.log('\"%s\" will be updated', x.path);\n writeFileSync(x.path, x.data, \"utf8\");\n }\n}\n\nexport const doctoc = (\n directory: string,\n mode = \"github.com\",\n maxHeaderLevel = 3,\n title = \"## Table of Contents\",\n noTitle = false,\n entryPrefix = undefined,\n processAll = false,\n updateOnly = false\n) => {\n let files: any[] = [];\n\n const stat = statSync(directory);\n if (stat.isDirectory()) {\n console.log(\n '\\nDocToccing \"%s\" and its sub directories for %s.',\n directory,\n mode\n );\n files = findMarkdownFiles(directory);\n } else {\n console.log('\\nDocToccing single file \"%s\" for %s.', directory, mode);\n files = [{ path: directory }];\n }\n\n transformAndSave(\n files,\n mode,\n maxHeaderLevel,\n title,\n noTitle,\n entryPrefix,\n processAll,\n updateOnly\n );\n\n console.log(\"\\nEverything is OK.\");\n};\n\nconst markdownExts = [\".md\", \".markdown\"];\nconst ignoredDirs = [\".\", \"..\", \".git\", \"node_modules\"];\n\nfunction separateFilesAndDirs(fileInfos: FileInfo[]) {\n return {\n directories: fileInfos.filter(x => {\n const stats = statSync(x.path);\n return stats.isDirectory() && !ignoredDirs.includes(x.name);\n }),\n markdownFiles: fileInfos.filter(x => {\n const stats = statSync(x.path);\n return stats.isFile() && markdownExts.includes(extname(x.name));\n })\n };\n}\n\ntype FileInfo = {\n name: string;\n path: string;\n};\n\nfunction findMarkdownFiles(currentPath: string) {\n function getFileInfo(entry: string): FileInfo {\n const target = join(currentPath, entry);\n\n return {\n name: entry,\n path: target\n };\n }\n\n function process(fileInfos: FileInfo[]) {\n const res = separateFilesAndDirs(fileInfos);\n const targets = res.directories.map(directory => directory.path);\n\n if (res.markdownFiles.length > 0)\n console.log(\n '\\nFound %s in \"%s\"',\n res.markdownFiles.map(markdownFile => markdownFile.name).join(\", \"),\n currentPath\n );\n else console.log('\\nFound nothing in \"%s\"', currentPath);\n\n return {\n markdownFiles: res.markdownFiles,\n subDirs: targets\n };\n }\n\n const res = process(readdirSync(currentPath).map(getFileInfo));\n const markdownsInSubDirs: any[] = res.subDirs.map(findMarkdownFiles);\n const allMarkdownsHereAndSub = res.markdownFiles.concat(markdownsInSubDirs);\n\n return allMarkdownsHereAndSub.flat();\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { findFilePath } from \"../utilities/file-utils\";\n\nexport const getExecutorMarkdown = (\n _packageName: string,\n executorsJsonFile: string,\n executorsJson: Record<string, any>\n): string => {\n if (!executorsJson?.executors) {\n return \"\";\n }\n\n return Object.entries(executorsJson.executors)\n .map(([name, executor]: [string, any]) => {\n if (!name || !executor || executor.hidden) {\n return \"\";\n }\n\n let result = \"\";\n let title = \"\";\n let description = \"\";\n let required: string[] = [];\n\n if (executor.schema) {\n const schemaJsonPath = join(\n findFilePath(executorsJsonFile),\n executor.schema\n );\n if (existsSync(schemaJsonPath)) {\n const schemaJson = JSON.parse(\n readFileSync(schemaJsonPath, \"utf8\") ?? \"{}\"\n );\n\n if (schemaJson.title) {\n title = `## ${schemaJson.title}\\n\\n`;\n }\n\n if (schemaJson.description) {\n description = `${schemaJson.description\n .replaceAll(\"`\", \"\\\\`\")\n .replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n required =\n schemaJson.required && Array.isArray(schemaJson.required)\n ? schemaJson.required\n : [];\n if (\n schemaJson.properties &&\n Object.keys(schemaJson.properties).length > 0\n ) {\n result +=\n \"### Options\\n\\nThe following executor options are available:\\n\\n\";\n result += \"| Option | Type | Description | Default | \\n\";\n result += \"| --------- | ------ | ------------- | --------- | \\n\";\n\n result += Object.entries(schemaJson.properties)\n .map(([name, schema]: [string, any]) => {\n let result = \"\";\n if (name) {\n result += `| ${required.includes(name) ? \"**\" : \"\"}${name}${\n required.includes(name) ? \" \\\\*\" : \" \"\n }${required.includes(name) ? \"**\" : \"\"} `;\n if (schema.type) {\n if (\n schema.enum &&\n Array.isArray(schema.enum) &&\n schema.enum.length > 0\n ) {\n result += ` | ${schema.enum\n .map((x: any) =>\n !schema.type || schema.type === \"string\"\n ? `\"${x}\"`\n : `\\`${x}\\``\n )\n .join(\" \\\\| \")} `;\n } else if (schema.type === \"array\" && schema.items?.type) {\n result += ` | \\`${schema.items.type}[]\\` `;\n } else {\n result += ` | \\`${schema.type}\\` `;\n }\n } else {\n result += \" | `string` \";\n }\n\n if (schema.description) {\n result += ` | ${schema.description\n .replaceAll(\"`\", \"\\\\`\")\n .replaceAll(\"*\", \"\\\\*\")} `;\n } else {\n result += \" | \";\n }\n\n if (schema.default) {\n result +=\n schema.type === \"string\" || !schema.type\n ? ` | \"${schema.default}\" `\n : schema.type === \"array\"\n ? \" | `[]` \"\n : ` | \\`${schema.default}\\` `;\n } else {\n result += \" | \";\n }\n\n result += \" | \\n\";\n }\n\n return result;\n })\n .join(\" \");\n\n result += \"\\n\\n\";\n if (required.length > 0) {\n result +=\n \"**Please note:** _Option names followed by \\\\* above are required, and must be provided to run the executor._ \\n\\n\";\n }\n }\n }\n }\n\n if (!title) {\n title = `## ${name}\\n\\n`;\n }\n\n if (!description && executor.description) {\n description = `${executor.description.replaceAll(\"`\", \"\\\\`\").replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n return `${\n title + description\n }### Example \\n\\nThis executor can be used by executing the following in a command line utility: \\n\\n\\`\\`\\`cmd \\nnx run my-project:${name}\\n\\`\\`\\`\\n\\n**Please note:** _The ${name} executor should be included in the desired projects's \\`project.json\\` file.${\n required.length > 0\n ? \"All required options must be included in the `options` property of the json.\"\n : \"\"\n }_ \\n\\n${result}`;\n })\n .join(\"\\n\\n\");\n};\n\nexport const getGeneratorMarkdown = (\n packageName: string,\n generatorsJsonFile: string,\n generatorsJson: Record<string, any>\n): string => {\n if (!generatorsJson?.generators) {\n return \"\";\n }\n\n return Object.entries(generatorsJson.generators)\n .map(([name, generator]: [string, any]) => {\n if (!name || !generator) {\n return \"\";\n }\n\n let result = \"\";\n let title = \"\";\n let description = \"\";\n let example = \"\";\n const required = [];\n\n if (generator.schema) {\n const schemaJsonPath = join(\n findFilePath(generatorsJsonFile),\n generator.schema\n );\n if (existsSync(schemaJsonPath)) {\n const schemaJson = JSON.parse(\n readFileSync(schemaJsonPath, \"utf8\") ?? \"{}\"\n );\n\n if (schemaJson.title) {\n title = `## ${schemaJson.title}\\n\\n`;\n }\n\n if (schemaJson.description) {\n description = `${schemaJson.description.replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n if (\n schemaJson.properties &&\n Object.keys(schemaJson.properties).length > 0\n ) {\n const required =\n schemaJson.required && Array.isArray(schemaJson.required)\n ? schemaJson.required\n : [];\n\n result +=\n \"### Options\\n\\nThe following executor options are available:\\n\\n\";\n result += \"| Option | Type | Description | Default | \\n\";\n result += \"| --------- | ------ | ------------- | --------- | \\n\";\n\n result += Object.entries(schemaJson.properties)\n .map(([name, schema]: [string, any]) => {\n let resultSchema = \"\";\n if (name) {\n resultSchema += `| ${required.includes(name) ? \"**\" : \"\"}${name}${\n required.includes(name) ? \" \\\\*\" : \" \"\n }${required.includes(name) ? \"**\" : \"\"} `;\n if (schema.type) {\n if (\n schema.enum &&\n Array.isArray(schema.enum) &&\n schema.enum.length > 0\n ) {\n resultSchema += ` | ${schema.enum\n .map((x: any) =>\n !schema.type || schema.type === \"string\"\n ? `\"${x}\"`\n : `\\`${x}\\``\n )\n .join(\" \\\\| \")} `;\n } else if (schema.type === \"array\" && schema.items?.type) {\n resultSchema += ` | \\`${schema.items.type}[]\\` `;\n } else {\n resultSchema += ` | \\`${schema.type}\\` `;\n }\n } else {\n resultSchema += \" | `string` \";\n }\n\n if (schema.description) {\n resultSchema += ` | ${schema.description.replaceAll(\"*\", \"\\\\*\")} `;\n } else {\n resultSchema += \" | \";\n }\n\n if (schema.default) {\n resultSchema +=\n schema.type === \"string\" || !schema.type\n ? ` | \"${schema.default}\" `\n : schema.type === \"array\"\n ? \" | `[]` \"\n : ` | \\`${schema.default}\\` `;\n } else {\n resultSchema += \" | \";\n }\n\n resultSchema += \" | \\n\";\n }\n\n return resultSchema;\n })\n .join(\" \");\n\n result += \"\\n\\n\";\n if (required.length > 0) {\n result +=\n \"**Please note:** _Option names followed by \\\\* above are required, and must be provided to run the executor._ \\n\\n\";\n }\n }\n\n if (schemaJson.example) {\n if (\n Array.isArray(schemaJson.example) &&\n schemaJson.example.length > 0\n ) {\n example +=\n \"### Examples \\n\\nThis generator can be used by executing the following examples in a command line utility: \\n\\n\";\n example += schemaJson.example\n .map((exampleCmd: any) => {\n let resultCmd = \"\";\n if (\n exampleCmd.description &&\n typeof exampleCmd.description === \"string\"\n ) {\n resultCmd += `${exampleCmd.description.replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n if (\n exampleCmd.command &&\n typeof exampleCmd.command === \"string\"\n ) {\n resultCmd += `\\`\\`\\`bash \\n${exampleCmd.command}\\n\\`\\`\\`\\n\\n`;\n } else if (typeof exampleCmd === \"string\") {\n resultCmd += `\\`\\`\\`bash \\n${exampleCmd}\\n\\`\\`\\`\\n\\n`;\n }\n\n return resultCmd;\n })\n .join(\"\\n\\n\");\n } else if (\n schemaJson.example.command &&\n typeof schemaJson.example.command === \"string\"\n ) {\n if (\n schemaJson.example.description &&\n typeof schemaJson.example.description === \"string\"\n ) {\n example = `### Example \\n\\n${schemaJson.example.description.replaceAll(\n \"*\",\n \"\\\\*\"\n )} \\n\\n`;\n } else {\n example =\n \"### Example \\n\\nThis generator can be used by executing the following in a command line utility: \\n\\n\";\n }\n\n example += `\\`\\`\\`bash \\n${schemaJson.example.command}\\n\\`\\`\\`\\n\\n`;\n } else if (typeof schemaJson.example === \"string\") {\n example =\n \"### Example \\n\\nThis generator can be used by executing the following in a command line utility: \\n\\n\";\n example += `\\`\\`\\`bash \\n${schemaJson.example}\\n\\`\\`\\`\\n\\n`;\n } else {\n example =\n \"### Example \\n\\nThis generator can be used by executing the following in a command line utility: \\n\\n\";\n example += `\\`\\`\\`bash \\nnx g ${packageName}:${name}\\n\\`\\`\\`\\n\\n`;\n }\n\n if (required.length > 0) {\n example +=\n \"** Please note:** _All required options must be included as parameters when calling the generator._ \\n\\n\";\n }\n }\n }\n }\n\n if (!title) {\n title = `## ${name}\\n\\n`;\n }\n\n if (!description && generator.description) {\n description = `${generator.description.replaceAll(\"*\", \"\\\\*\")}\\n\\n`;\n }\n\n return title + description + example + result;\n })\n .join(\"\\n\\n\");\n};\n","import { readFileSync } from \"node:fs\";\nimport { findFileName } from \"../utilities/file-utils\";\n\nexport const formatReadMe = (\n templatePath: string,\n readMeContent: string\n): string => {\n const templateContent = readFileSync(templatePath, \"utf8\");\n\n const section = findFileName(templatePath)\n .replace(templatePath, \"\")\n .replace(\"README.\", \"\")\n .replace(\".md\", \"\");\n return formatReadMeFromSectionName(section, templateContent, readMeContent);\n};\n\nexport const formatReadMeFromSectionName = (\n sectionName: string,\n templateContent: string,\n readMeContent: string,\n skipLint = true\n): string => {\n const { regex, start, end } = createRegExp(sectionName);\n if (!regex.test(readMeContent)) {\n console.warn(\n `Contents do not contain start/end comments for section \"${sectionName}\".\nStart: \"${start}\"\nEnd: \"${end}\"\nRegex: \"${regex}\"\nContent: \"${readMeContent}\"`\n );\n return readMeContent;\n }\n\n return readMeContent.replace(\n regex,\n `${start}\n${skipLint ? \"<!-- prettier-ignore-start -->\\n\" + \"<!-- markdownlint-disable -->\\n\" : \"\"}\n\n${templateContent}\n\n${skipLint ? \"<!-- markdownlint-restore -->\\n\" + \"<!-- prettier-ignore-end -->\\n\" : \"\"}\n${end}`\n );\n};\n\nexport const createTokens = (sectionName: string) => {\n const start = `<!-- START ${sectionName} -->`;\n const end = `<!-- END ${sectionName} -->`;\n return { start, end };\n};\n\nexport const createRegExp = (sectionName: string) => {\n const { start, end } = createTokens(sectionName);\n\n const regex = new RegExp(`${start}([\\\\s\\\\S]*?)${end}`);\n return { regex, start, end };\n};\n","import {\n existsSync,\n readFileSync,\n readdirSync,\n rmSync,\n writeFileSync\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n createProjectGraphAsync,\n readProjectsConfigurationFromProjectGraph\n} from \"nx/src/project-graph/project-graph.js\";\nimport type { ReadMeOptions } from \"../types\";\nimport { findFileName, findFilePath } from \"../utilities/file-utils\";\nimport { doctoc } from \"./doctoc\";\nimport { getExecutorMarkdown, getGeneratorMarkdown } from \"./nx-docs\";\nimport { createTokens, formatReadMeFromSectionName } from \"./utils\";\n\nexport const runReadme = async ({\n templates = \"./tools/readme-templates\",\n project,\n output,\n clean = true,\n prettier = true\n}: ReadMeOptions) => {\n const projectGraph = await createProjectGraphAsync({\n exitOnError: true\n });\n const projectConfigs =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n\n if (project) {\n await runProjectReadme(project, {\n templates,\n output,\n clean,\n prettier\n });\n } else {\n for (const projectName of Object.keys(projectConfigs.projects)) {\n await runProjectReadme(projectName, {\n templates,\n output,\n clean,\n prettier\n });\n }\n }\n};\n\nexport const runProjectReadme = async (\n projectName: string,\n { templates, output, clean = true, prettier = true }: ReadMeOptions\n) => {\n const projectGraph = await createProjectGraphAsync({\n exitOnError: true\n });\n const projectConfigs =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n\n const project = projectConfigs.projects[projectName];\n\n const inputFile = join(project?.root ?? \"./\", \"README.md\");\n if (existsSync(inputFile)) {\n console.info(`Formatting ${projectName}'s README file at \"${inputFile}\"`);\n\n const outputFilePath = output\n ? output.includes(\"README.md\")\n ? output\n : join(findFilePath(output), \"README.md\")\n : inputFile;\n\n if (clean && existsSync(outputFilePath)) {\n if (outputFilePath === inputFile) {\n console.warn(\n \"Skipping cleaning since output directory + file name is the same as input directory + file name.\"\n );\n } else {\n console.info(\n \"Cleaning output directory (set `clean` parameter to false to skip)...\"\n );\n rmSync(outputFilePath);\n }\n }\n\n let newContent = readdirSync(templates).reduce(\n (ret: string, fileName: string) => {\n console.info(`Using template \"${fileName}\" to format file...`);\n\n const templateFilePath = join(templates, fileName);\n const templateContent = readFileSync(templateFilePath, \"utf8\");\n\n const section = findFileName(templateFilePath)\n .replace(templates, \"\")\n .replace(\"README.\", \"\")\n .replace(\".md\", \"\");\n\n return formatReadMeFromSectionName(section, templateContent, ret);\n },\n readFileSync(inputFile, \"utf8\")\n );\n\n let packageName = projectName;\n const packageJsonPath = join(findFilePath(inputFile), \"package.json\");\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf8\") ?? \"{}\"\n );\n if (packageJson?.version) {\n console.info(\"Adding version...\");\n newContent = newContent.replace(\n \"<!-- VERSION -->\",\n packageJson.version\n );\n }\n if (packageJson?.name) {\n packageName = packageJson.name;\n }\n }\n\n if (newContent.includes(\"<!-- START executors -->\")) {\n const executorsJsonPath = join(findFilePath(inputFile), \"executors.json\");\n if (existsSync(executorsJsonPath)) {\n const executorsJson = JSON.parse(\n readFileSync(executorsJsonPath, \"utf8\") ?? \"{}\"\n );\n if (executorsJson?.executors) {\n console.info(\"Adding executors...\");\n\n newContent = formatReadMeFromSectionName(\n \"executors\",\n getExecutorMarkdown(packageName, executorsJsonPath, executorsJson),\n newContent\n );\n }\n }\n }\n\n if (newContent.includes(\"<!-- START generators -->\")) {\n const generatorsJsonPath = join(\n findFilePath(inputFile),\n \"generators.json\"\n );\n if (existsSync(generatorsJsonPath)) {\n const generatorsJson = JSON.parse(\n readFileSync(generatorsJsonPath, \"utf8\") ?? \"{}\"\n );\n if (generatorsJson?.generators) {\n console.info(\"Adding generators...\");\n\n newContent = formatReadMeFromSectionName(\n \"generators\",\n getGeneratorMarkdown(\n packageName,\n generatorsJsonPath,\n generatorsJson\n ),\n newContent\n );\n }\n }\n }\n\n if (prettier) {\n const prettier = await import(\"prettier\");\n console.info(\"Formatting output with Prettier\");\n\n newContent = await prettier.format(newContent, {\n parser: \"markdown\",\n trailingComma: \"none\",\n tabWidth: 2,\n semi: true,\n singleQuote: false,\n quoteProps: \"preserve\",\n insertPragma: false,\n bracketSameLine: true,\n printWidth: 80,\n bracketSpacing: true,\n arrowParens: \"avoid\",\n endOfLine: \"lf\"\n });\n }\n\n console.info(`Writing output markdown to \"${outputFilePath}\"`);\n writeFileSync(outputFilePath, newContent);\n\n try {\n const { start, end } = createTokens(\"doctoc\");\n if (newContent.includes(start) || newContent.includes(end)) {\n console.info(\"Formatting Table of Contents...\");\n\n doctoc(outputFilePath);\n } else {\n console.warn(\n `Contents do not contain start/end comments for section \"doctoc\", skipping table of contents generation...`\n );\n }\n } catch (e) {\n console.warn(`Failed to format Table of Contents for ${outputFilePath}.`);\n console.warn(e);\n }\n\n console.log(`ReadMe Formatting successfully ran for ${projectName}.`);\n } else {\n console.warn(`Cannot find the input file at ${inputFile}`);\n }\n};\n","const ACRONYMS = [\n \"3D\",\n \"4D\",\n \"5G\",\n \"6G\",\n \"7G\",\n \"8G\",\n \"ACID\",\n \"AES\",\n \"AI\",\n \"AJAX\",\n \"API\",\n \"AR\",\n \"ASCII\",\n \"B2B\",\n \"B2C\",\n \"BFF\",\n \"BI\",\n \"BIOS\",\n \"BGP\",\n \"BOM\",\n \"BYOD\",\n \"C2C\",\n \"CAGR\",\n \"CAPTCHA\",\n \"CD\",\n \"CDN\",\n \"CDP\",\n \"CI\",\n \"CI/CD\",\n \"CIAM\",\n \"CICD\",\n \"CLI\",\n \"CMDB\",\n \"CORS\",\n \"CPU\",\n \"CRUD\",\n \"CSR\",\n \"CSS\",\n \"CX\",\n \"DAG\",\n \"DBMS\",\n \"DDoS\",\n \"DNS\",\n \"DNSSEC\",\n \"DOM\",\n \"DR\",\n \"DRM\",\n \"DWH\",\n \"E2E\",\n \"EAI\",\n \"EKS\",\n \"EOF\",\n \"EOD\",\n \"ETC\",\n \"ETL\",\n \"EULA\",\n \"FIDO\",\n \"FQDN\",\n \"FTP\",\n \"FaaS\",\n \"GDPR\",\n \"GCP\",\n \"GPU\",\n \"GUID\",\n \"GUI\",\n \"GZIP\",\n \"HCI\",\n \"HDD\",\n \"HDFS\",\n \"HIPAA\",\n \"HMAC\",\n \"HOTP\",\n \"HSM\",\n \"HTML\",\n \"HTTP\",\n \"HTTP/2\",\n \"HTTP/2.0\",\n \"HTTP/3\",\n \"HTTP/3.0\",\n \"HTTP2\",\n \"HTTPS\",\n \"HTTPS/2\",\n \"HTTPS/3\",\n \"HTTPS3\",\n \"IAM\",\n \"IAMM\",\n \"IAMT\",\n \"IaaS\",\n \"ID\",\n \"IMAP\",\n \"IP\",\n \"IPFS\",\n \"IoT\",\n \"JSON\",\n \"JSONP\",\n \"JWT\",\n \"K8s\",\n \"KMS\",\n \"KPI\",\n \"LAN\",\n \"LHS\",\n \"LXC\",\n \"MFA\",\n \"ML\",\n \"MLOps\",\n \"MVC\",\n \"MVP\",\n \"NAS\",\n \"NAT\",\n \"NDA\",\n \"NFS\",\n \"NIST\",\n \"NLP\",\n \"NPS\",\n \"OCR\",\n \"OEM\",\n \"OKR\",\n \"OLAP\",\n \"OLTP\",\n \"OOP\",\n \"ORM\",\n \"OS\",\n \"OTP\",\n \"P2P\",\n \"PDP\",\n \"PaaS\",\n \"PCI\",\n \"PKI\",\n \"PP\",\n \"PWA\",\n \"PX\",\n \"QA\",\n \"RAID\",\n \"RAM\",\n \"RDS\",\n \"REST\",\n \"RHS\",\n \"RPC\",\n \"RPA\",\n \"RUM\",\n \"RSS\",\n \"SAN\",\n \"SASE\",\n \"SDLC\",\n \"SDK\",\n \"SEO\",\n \"SFTP\",\n \"SIEM\",\n \"SLA\",\n \"SMB\",\n \"SMTP\",\n \"SOAP\",\n \"SOC\",\n \"SOA\",\n \"SPDY\",\n \"SPF\",\n \"SQL\",\n \"SRV\",\n \"SRE\",\n \"SSH\",\n \"SSDL\",\n \"SSO\",\n \"SSL\",\n \"SSR\",\n \"TDD\",\n \"TLD\",\n \"TLS\",\n \"TLS1.3\",\n \"TOTP\",\n \"TRPC\",\n \"TTL\",\n \"UDP\",\n \"UI\",\n \"UID\",\n \"URI\",\n \"URL\",\n \"UTF\",\n \"UUID\",\n \"UX\",\n \"VM\",\n \"VLAN\",\n \"VPN\",\n \"VR\",\n \"WAF\",\n \"WAN\",\n \"WLAN\",\n \"WPA\",\n \"XACML\",\n \"XML\",\n \"XSRF\",\n \"XSS\",\n \"XR\",\n \"YAML\",\n \"ZTA\"\n];\n\nconst FORMAT_MAPPING = ACRONYMS.reduce(\n (ret, acronym) => {\n ret[acronym.toLowerCase()] = acronym;\n return ret;\n },\n {\n cspell: \"CSpell\",\n eslint: \"ESLint\",\n nx: \"Nx\"\n } as Record<string, string>\n);\n\nconst LOWER_CASE_WHEN_NOT_FIRST: string[] = [\n \"a\",\n \"an\",\n \"the\",\n \"is\",\n \"are\",\n \"of\",\n \"and\",\n \"to\",\n \"in\",\n \"for\",\n \"on\",\n \"with\",\n \"as\",\n \"at\",\n \"by\"\n] as const;\n\n/**\n * Convert the input string to title case.\n *\n * @remarks\n * \"This Is An Example\"\n *\n * @param input - The input string.\n * @returns The title cased string.\n */\nexport function titleCase<T extends string | undefined>(input?: T): T {\n if (!input) {\n return input as T;\n }\n\n const formatSegment = (segment: string) =>\n segment\n .toLowerCase()\n .split(/[\\s\\-_]+/)\n .filter(Boolean)\n .map((word, index) => {\n if (\n LOWER_CASE_WHEN_NOT_FIRST.includes(word.toLowerCase()) &&\n index > 0\n ) {\n return word.toLowerCase();\n }\n\n if (Object.keys(FORMAT_MAPPING).includes(word.toLowerCase())) {\n return FORMAT_MAPPING[word.toLowerCase()];\n }\n\n return `${\n word\n ? word.charAt(0).toUpperCase() + word.toLowerCase().slice(1)\n : word\n }`;\n })\n .join(\" \");\n\n return input\n .split(/\\s+-\\s+/)\n .map(part => formatSegment(part))\n .join(\" - \") as T;\n}\n","import {\n output,\n ProjectGraph,\n ProjectGraphProjectNode,\n Tree\n} from \"@nx/devkit\";\nimport {\n STORM_DEFAULT_RELEASE_BANNER,\n type StormWorkspaceConfig\n} from \"@storm-software/config\";\nimport {\n writeDebug,\n writeWarning\n} from \"@storm-software/config-tools/logger/console\";\nimport { joinPaths } from \"@storm-software/config-tools/utilities/correct-paths\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { DependencyBump } from \"nx/release/changelog-renderer\";\nimport {\n ChangelogChange,\n NxReleaseChangelogResult,\n PostGitTask\n} from \"nx/src/command-line/release/changelog\";\nimport { NxReleaseConfig } from \"nx/src/command-line/release/config/config\";\nimport { ReleaseGroupWithName } from \"nx/src/command-line/release/config/filter-release-groups\";\nimport { printAndFlushChanges } from \"nx/src/command-line/release/utils/print-changes\";\nimport {\n noDiffInChangelogMessage,\n ReleaseVersion,\n shouldPreferDockerVersionForReleaseGroup,\n VersionData\n} from \"nx/src/command-line/release/utils/shared\";\nimport { interpolate } from \"nx/src/tasks-runner/utils\";\nimport { format, resolveConfig } from \"prettier\";\nimport StormChangelogRenderer from \"../release/changelog-renderer\";\nimport {\n getGitHubRepoData,\n resolveTokenData,\n StormGithubRemoteReleaseClient\n} from \"../release/github\";\nimport { ChangelogOptions } from \"../release/release-client\";\nimport { ReleaseConfig } from \"../types\";\nimport { titleCase } from \"./title-case\";\n\nexport async function generateChangelogContent(\n releaseVersion: ReleaseVersion,\n filepath: string,\n newContent: string,\n currentContent?: string,\n project?: string | null,\n workspaceConfig?: StormWorkspaceConfig | null\n): Promise<string> {\n const formatOptions = (await resolveConfig(filepath)) ?? {};\n\n const bannerUrl =\n typeof workspaceConfig?.release.banner === \"string\"\n ? workspaceConfig?.release.banner\n : workspaceConfig?.release.banner?.url;\n\n const header = await format(\n `\n\n# Changelog ${project || workspaceConfig?.name ? \"for\" : \"\"}${workspaceConfig?.name ? ` ${titleCase(workspaceConfig.name)}` : \"\"}${project ? `${workspaceConfig?.name ? \" -\" : \"\"} ${titleCase(project)}` : \"\"}\n\n`,\n {\n ...formatOptions,\n filepath\n }\n );\n\n let changelogContents = (currentContent || \"\").replaceAll(header, \"\").trim();\n const changelogReleases = parseChangelogMarkdown(changelogContents).releases;\n\n const existingVersionToUpdate = changelogReleases.find(\n r => r.version === releaseVersion.rawVersion\n );\n if (existingVersionToUpdate) {\n changelogContents = changelogContents.replace(\n `## ${generateChangelogTitle(releaseVersion.rawVersion, project, workspaceConfig)}\\n\\n\\n${existingVersionToUpdate.body}`,\n newContent\n );\n } else {\n // No existing version, simply prepend the new release to the top of the file\n changelogContents = `${newContent}\\n\\n${changelogContents}`;\n }\n\n return await format(\n `${header}\n\n${changelogContents}`,\n {\n ...formatOptions,\n filepath\n }\n );\n}\n\nexport function generateChangelogTitle(\n version: string,\n project?: string | null,\n workspaceConfig?: StormWorkspaceConfig | null\n): string {\n if (!workspaceConfig?.name || !project) {\n return version;\n }\n\n return `[${version}](https://github.com/${\n typeof workspaceConfig.organization === \"string\"\n ? workspaceConfig.organization\n : workspaceConfig.organization?.name\n }/${workspaceConfig.name}/releases/tag/${project}%40${version}) (${\n new Date().getMonth() + 1 < 10\n ? `0${new Date().getMonth() + 1}`\n : new Date().getMonth() + 1\n }/${\n new Date().getDate() < 10\n ? `0${new Date().getDate()}`\n : new Date().getDate()\n }/${new Date().getFullYear()})`;\n}\n\nexport function parseChangelogMarkdown(contents: string) {\n /**\n * The release header may include prerelease identifiers (e.g., -alpha.13),\n * and major releases may use a single #, instead of the standard ## used\n * for minor and patch releases. This regex matches all of these cases.\n */\n const CHANGELOG_RELEASE_HEAD_RE = new RegExp(\n \"^#+\\\\s*\\\\[?(\\\\d+\\\\.\\\\d+\\\\.\\\\d+(?:-[a-zA-Z0-9\\\\.]+)?)\\\\]?\",\n \"gm\"\n );\n\n const headings = contents\n ? [...contents.matchAll(CHANGELOG_RELEASE_HEAD_RE)]\n : [];\n const releases: { version?: string; body: string }[] = [];\n\n for (let i = 0; i < headings.length; i++) {\n const heading = headings[i];\n if (!heading) {\n continue; // Skip if no match found\n }\n\n const nextHeading = headings[i + 1];\n const version = heading[1];\n\n const release = {\n version: version,\n body: contents\n .slice(\n heading.index + heading[0].length,\n nextHeading ? nextHeading.index : contents.length\n )\n .trim()\n };\n releases.push(release);\n }\n\n return {\n releases\n };\n}\n\nexport function filterHiddenChanges(\n changes: ChangelogChange[],\n conventionalCommitsConfig: NxReleaseConfig[\"conventionalCommits\"]\n): ChangelogChange[] {\n return changes.filter(change => {\n const type = change.type;\n\n const typeConfig = conventionalCommitsConfig.types[type];\n if (!typeConfig) {\n // don't include changes with unknown types\n return false;\n }\n return !typeConfig.changelog.hidden;\n });\n}\n\nexport async function generateChangelogForProjects({\n tree,\n args,\n changes,\n projectGraph,\n projectsVersionData,\n releaseGroup,\n projects,\n releaseConfig,\n projectToAdditionalDependencyBumps,\n workspaceConfig,\n ChangelogRendererClass\n}: {\n tree: Tree;\n args: ChangelogOptions;\n changes: ChangelogChange[];\n projectGraph: ProjectGraph;\n projectsVersionData: VersionData;\n releaseGroup: ReleaseGroupWithName;\n projects: ProjectGraphProjectNode[];\n releaseConfig: ReleaseConfig;\n projectToAdditionalDependencyBumps: Map<string, DependencyBump[]>;\n workspaceConfig: StormWorkspaceConfig;\n ChangelogRendererClass: typeof StormChangelogRenderer;\n}): Promise<NxReleaseChangelogResult[\"projectChangelogs\"] | undefined> {\n const config = releaseGroup.changelog;\n // The entire feature is disabled at the release group level, exit early\n if (config === false) {\n return;\n }\n\n const dryRun = !!args.dryRun;\n\n const repoData = getGitHubRepoData(args.gitRemote, \"github\");\n if (!repoData) {\n throw new Error(\n `Unable to create a remote release client because the GitHub repo slug could not be determined. Please ensure you have a valid GitHub remote configured.`\n );\n }\n\n const remoteReleaseClient = new StormGithubRemoteReleaseClient(\n repoData,\n {\n provider: \"github\",\n hostname: repoData.hostname,\n apiBaseUrl: repoData.apiBaseUrl\n },\n await resolveTokenData(repoData.hostname),\n workspaceConfig\n );\n\n const projectChangelogs: NxReleaseChangelogResult[\"projectChangelogs\"] = {};\n\n for (const project of projects) {\n let interpolatedTreePath = config.file || \"\";\n if (interpolatedTreePath) {\n interpolatedTreePath = interpolate(interpolatedTreePath, {\n projectName: project.name,\n projectRoot: project.data.root,\n workspaceRoot: \"\" // within the tree, workspaceRoot is the root\n });\n }\n\n /**\n * newVersion will be null in the case that no changes were detected (e.g. in conventional commits mode),\n * no changelog entry is relevant in that case.\n */\n if (\n !projectsVersionData[project.name] ||\n (projectsVersionData[project.name]?.newVersion === null &&\n !projectsVersionData[project.name]?.dockerVersion)\n ) {\n continue;\n }\n\n const preferDockerVersion =\n shouldPreferDockerVersionForReleaseGroup(releaseGroup);\n const releaseVersion = new ReleaseVersion({\n version: ((preferDockerVersion === true ||\n preferDockerVersion === \"both\") &&\n projectsVersionData[project.name]?.dockerVersion\n ? projectsVersionData[project.name]?.dockerVersion\n : projectsVersionData[project.name]?.newVersion)!,\n releaseTagPattern: releaseGroup.releaseTag.pattern,\n projectName: project.name\n });\n\n if (interpolatedTreePath) {\n const prefix = dryRun ? \"Previewing\" : \"Generating\";\n output.log({\n title: `${prefix} an entry in ${interpolatedTreePath} for ${chalk.white(\n releaseVersion.gitTag\n )}`\n });\n }\n\n const changelogRenderer = new ChangelogRendererClass({\n changes,\n changelogEntryVersion: releaseVersion.rawVersion,\n project: project.name,\n entryWhenNoChanges:\n typeof config.entryWhenNoChanges === \"string\"\n ? interpolate(config.entryWhenNoChanges, {\n projectName: project.name,\n projectRoot: project.data.root,\n workspaceRoot: \"\" // within the tree, workspaceRoot is the root\n })\n : false,\n changelogRenderOptions: config.renderOptions,\n isVersionPlans: !!releaseGroup.versionPlans,\n conventionalCommitsConfig: releaseConfig.conventionalCommits,\n dependencyBumps: projectToAdditionalDependencyBumps.get(project.name),\n remoteReleaseClient,\n workspaceConfig\n });\n const contents = await changelogRenderer.render();\n\n const postGitTask: PostGitTask | null =\n args.createRelease !== false && config.createRelease\n ? remoteReleaseClient.createPostGitTask(\n releaseVersion,\n contents,\n dryRun\n )\n : null;\n\n projectChangelogs[project.name] = {\n releaseVersion,\n contents,\n postGitTask\n };\n }\n\n for (const [projectName, projectChangelog] of Object.entries(\n projectChangelogs\n )) {\n if (!projectGraph.nodes[projectName]?.data.root) {\n writeWarning(\n `A changelog was generated for ${\n projectName\n }, but it could not be found in the project graph. Skipping writing changelog file.`,\n workspaceConfig\n );\n } else if (projectChangelog.contents) {\n const filePath = joinPaths(\n projectGraph.nodes[projectName].data.root,\n \"CHANGELOG.md\"\n );\n\n let currentContent: string | undefined;\n if (existsSync(filePath)) {\n currentContent = await readFile(filePath, \"utf8\");\n }\n\n writeDebug(\n `✍️ Writing changelog for project ${projectName} to ${filePath}`,\n workspaceConfig\n );\n\n const content = await generateChangelogContent(\n projectChangelog.releaseVersion,\n filePath,\n projectChangelog.contents,\n currentContent,\n projectName,\n workspaceConfig\n );\n\n tree.write(filePath, content);\n\n printAndFlushChanges(\n tree,\n !!args.dryRun,\n 3,\n false,\n noDiffInChangelogMessage,\n // Only print the change for the current changelog file at this point\n f => f.path === filePath\n );\n }\n }\n\n return projectChangelogs;\n}\n","import { FileData } from \"@nx/devkit\";\nimport { execCommand } from \"nx/src/command-line/release/utils/exec-command.js\";\nimport {\n getGitDiff,\n gitAdd,\n GitCommit,\n parseCommits\n} from \"nx/src/command-line/release/utils/git\";\nimport { isPrerelease } from \"nx/src/command-line/release/utils/shared\";\nimport { prerelease } from \"semver\";\n\nexport async function getCommits(\n fromSHA: string,\n toSHA: string\n): Promise<GitCommit[]> {\n const rawCommits = await getGitDiff(fromSHA, toSHA);\n // Parse as conventional commits\n return parseCommits(rawCommits);\n}\n\nexport async function filterProjectCommits({\n fromSHA,\n toSHA,\n projectPath\n}: {\n fromSHA: string;\n toSHA: string;\n projectPath: string;\n}) {\n const allCommits = await getCommits(fromSHA, toSHA);\n return allCommits.filter(c =>\n c.affectedFiles.find(f => f.startsWith(projectPath))\n );\n}\n\nexport function commitChangesNonProjectFiles(\n commit: GitCommit,\n nonProjectFiles: FileData[]\n): boolean {\n return nonProjectFiles.some(fileData =>\n commit.affectedFiles.includes(fileData.file)\n );\n}\n\nexport function getProjectsAffectedByCommit(\n commit: GitCommit,\n fileToProjectMap: Record<string, string>\n): string[] {\n const affectedProjects = new Set<string>();\n for (const file of commit.affectedFiles) {\n affectedProjects.add(fileToProjectMap[file]!);\n }\n return Array.from(affectedProjects);\n}\n\nexport function extractPreid(version: string): string | undefined {\n if (!isPrerelease(version)) {\n return undefined;\n }\n\n const preid = prerelease(version)?.[0];\n if (typeof preid === \"string\") {\n if (preid.trim() === \"\") {\n return undefined;\n }\n\n return preid;\n }\n if (typeof preid === \"number\") {\n return preid.toString();\n }\n return undefined;\n}\n\n// export function createGitTagValues(\n// releaseGroups: ReleaseGroupWithName[],\n// releaseGroupToFilteredProjects: Map<ReleaseGroupWithName, Set<string>>,\n// versionData: VersionData\n// ): string[] {\n// const tags = [] as string[];\n\n// for (const releaseGroup of releaseGroups) {\n// const releaseGroupProjectNames = Array.from(\n// releaseGroupToFilteredProjects.get(releaseGroup) ?? []\n// );\n// // For independent groups we want one tag per project, not one for the overall group\n// if (releaseGroup.projectsRelationship === \"independent\") {\n// for (const project of releaseGroupProjectNames) {\n// const projectVersionData = versionData[project];\n// if (projectVersionData?.newVersion) {\n// tags.push(\n// interpolate(releaseGroup.releaseTag.pattern, {\n// version: projectVersionData.newVersion,\n// projectName: project\n// })\n// );\n// }\n// }\n// continue;\n// }\n\n// if (releaseGroupProjectNames.length > 0 && releaseGroupProjectNames[0]) {\n// // For fixed groups we want one tag for the overall group\n// const projectVersionData = versionData[releaseGroupProjectNames[0]]; // all at the same version, so we can just pick the first one\n// if (projectVersionData?.newVersion) {\n// tags.push(\n// interpolate(releaseGroup.releaseTag.pattern, {\n// version: projectVersionData.newVersion,\n// releaseGroupName: releaseGroup.name\n// })\n// );\n// }\n// }\n// }\n\n// return tags;\n// }\n\n/**\n * Create a git tag for the current commit.\n *\n * @param params - Parameters for the gitTag function\n * @returns A promise that resolves to the output of the git tag command\n */\nexport async function gitTag({\n tag,\n message,\n additionalArgs,\n dryRun,\n verbose,\n logFn\n}: {\n tag: string;\n message?: string;\n additionalArgs?: string | string[];\n dryRun?: boolean;\n verbose?: boolean;\n logFn?: (message: string) => void;\n}): Promise<string> {\n logFn = logFn || console.log;\n\n const commandArgs = [\n \"tag\",\n // Create an annotated tag (recommended for releases here: https://git-scm.com/docs/git-tag)\n \"--annotate\",\n \"--sign\",\n tag,\n \"--message\",\n message || tag\n ];\n if (additionalArgs) {\n if (Array.isArray(additionalArgs)) {\n commandArgs.push(...additionalArgs);\n } else {\n commandArgs.push(...additionalArgs.split(\" \"));\n }\n }\n\n if (verbose) {\n logFn(\n dryRun\n ? `Would tag the current commit in git with the following command, but --dry-run was set:`\n : `Tagging the current commit in git with the following command:`\n );\n logFn(`git ${commandArgs.join(\" \")}`);\n }\n\n if (dryRun) {\n return \"\";\n }\n\n try {\n return await execCommand(\"git\", commandArgs);\n } catch (err) {\n throw new Error(`Unexpected error when creating tag ${tag}:\\n\\n${err}`);\n }\n}\n\n/**\n * Commit staged changes to git.\n *\n * @param params - Parameters for the gitCommit function\n * @returns A promise that resolves to the output of the git commit command\n */\nexport async function gitCommit({\n messages,\n additionalArgs,\n dryRun,\n verbose,\n logFn\n}: {\n messages: string[];\n additionalArgs?: string | string[];\n dryRun?: boolean;\n verbose?: boolean;\n logFn?: (message: string) => void;\n}): Promise<string | undefined> {\n logFn = logFn || console.log;\n\n const commandArgs = [\"commit\", \"-S\"];\n for (const message of messages) {\n commandArgs.push(\"--message\", message);\n }\n if (additionalArgs) {\n if (Array.isArray(additionalArgs)) {\n commandArgs.push(...additionalArgs);\n } else {\n commandArgs.push(...additionalArgs.split(\" \"));\n }\n }\n\n if (verbose) {\n logFn(\n dryRun\n ? `Would commit all previously staged files in git with the following command, but --dry-run was set:`\n : `Committing files in git with the following command:`\n );\n logFn(`git ${commandArgs.join(\" \")}`);\n }\n\n if (dryRun) {\n return;\n }\n\n let hasStagedFiles = false;\n try {\n // This command will error if there are staged changes\n await execCommand(\"git\", [\"diff-index\", \"--quiet\", \"HEAD\", \"--cached\"]);\n } catch {\n hasStagedFiles = true;\n }\n\n if (!hasStagedFiles) {\n logFn(\"\\nNo staged files found. Skipping commit.\");\n return;\n }\n\n return execCommand(\"git\", commandArgs);\n}\n\n/**\n * Commit changes to git.\n *\n * @param params - Parameters for the commitChanges function\n * @throws Error if no changed or deleted files are provided\n * @returns A promise that resolves when the commit is complete\n */\nexport async function commitChanges({\n changedFiles,\n deletedFiles,\n isDryRun,\n isVerbose,\n gitCommitMessages,\n gitCommitArgs,\n logFn\n}: {\n changedFiles?: string[];\n deletedFiles?: string[];\n isDryRun?: boolean;\n isVerbose?: boolean;\n gitCommitMessages?: string[];\n gitCommitArgs?: string | string[];\n logFn?: (message: string) => void;\n}) {\n logFn = logFn || console.log;\n\n if (!changedFiles?.length && !deletedFiles?.length) {\n throw new Error(\"Error: No changed files to commit\");\n }\n\n logFn(`Committing changes with git`);\n\n await gitAdd({\n changedFiles,\n deletedFiles,\n dryRun: isDryRun,\n verbose: isVerbose\n });\n // The extra logs need something breathing room\n if (isVerbose) {\n console.log(\"\");\n }\n await gitCommit({\n messages: gitCommitMessages || [],\n additionalArgs: gitCommitArgs,\n dryRun: isDryRun,\n verbose: isVerbose\n });\n}\n","/**\n * Creates a new object with specified keys omitted.\n *\n * This function takes an object and an array of keys, and returns a new object that\n * excludes the properties corresponding to the specified keys.\n *\n * @template T - The type of object.\n * @template K - The type of keys in object.\n * @param {T} obj - The object to omit keys from.\n * @param {K[]} keys - An array of keys to be omitted from the object.\n * @returns {Omit<T, K>} A new object with the specified keys omitted.\n *\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * const result = omit(obj, ['b', 'c']);\n * // result will be { a: 1 }\n */\nexport function omit<T extends Record<PropertyKey, any>, K extends keyof T>(\n obj: T,\n keys: readonly K[]\n): Omit<T, K>;\n\n/**\n * Creates a new object with specified keys omitted.\n *\n * This overload supports dynamic key arrays determined at runtime,\n * useful when working with keys from Object.keys() or similar operations.\n *\n * @template T - The type of object.\n * @param {T} obj - The object to omit keys from.\n * @param {PropertyKey[]} keys - An array of keys to be omitted from the object. Supports dynamic arrays.\n * @returns {Partial<T>} A new object with the specified keys omitted.\n *\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * const keysToOmit = Object.keys({ b: true, c: true }); // string[]\n * const result = omit(obj, keysToOmit);\n * // result will be { a: 1 }\n */\nexport function omit<T extends Record<PropertyKey, any>>(\n obj: T,\n keys: readonly PropertyKey[]\n): Partial<T>;\nexport function omit<T extends Record<PropertyKey, any>>(\n obj: T,\n keys: readonly PropertyKey[]\n): Partial<T> {\n const result = { ...obj };\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key && key in result) {\n delete result[key];\n }\n }\n\n return result;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { joinPathFragments, output } from \"@nx/devkit\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport type { AxiosRequestConfig } from \"axios\";\nimport axios from \"axios\";\nimport { execSync } from \"node:child_process\";\nimport { existsSync, promises as fsp } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { PostGitTask } from \"nx/src/command-line/release/changelog\";\nimport { ResolvedCreateRemoteReleaseProvider } from \"nx/src/command-line/release/config/config\";\nimport {\n defaultCreateReleaseProvider,\n GithubRemoteReleaseClient\n} from \"nx/src/command-line/release/utils/remote-release-clients/github\";\nimport { RemoteRepoData } from \"nx/src/command-line/release/utils/remote-release-clients/remote-release-client\";\nimport { ReleaseVersion } from \"nx/src/command-line/release/utils/shared\";\nimport { parse } from \"yaml\";\nimport { isCI } from \"../utilities\";\nimport { generateChangelogTitle } from \"../utilities/changelog-utils\";\nimport { titleCase } from \"../utilities/title-case\";\n\n/**\n * Extended {@link GithubRemoteReleaseClient} with Storm Software specific release APIs\n */\nexport class StormGithubRemoteReleaseClient extends GithubRemoteReleaseClient {\n protected repoData: RemoteRepoData;\n protected workspaceConfig: StormWorkspaceConfig;\n\n /**\n * Creates an instance of {@link StormGithubRemoteReleaseClient}.\n *\n * @param remoteRepoData - Data about the remote repository\n * @param createReleaseConfig - Configuration for creating releases\n * @param tokenData - Token data for authentication\n * @param workspaceConfig - The Storm workspace configuration object, which is loaded from the storm-workspace.json file.\n */\n public constructor(\n repoData: RemoteRepoData,\n createReleaseConfig: false | ResolvedCreateRemoteReleaseProvider,\n tokenData: {\n token: string;\n headerName: string;\n },\n workspaceConfig: StormWorkspaceConfig\n ) {\n super(repoData, createReleaseConfig, tokenData);\n\n this.repoData = repoData;\n this.workspaceConfig = workspaceConfig;\n }\n\n public override createPostGitTask(\n releaseVersion: ReleaseVersion,\n changelogContents: string,\n dryRun: boolean\n ): PostGitTask {\n return async (latestCommit: string) => {\n output.logSingleLine(`Creating GitHub Release`);\n\n await this.createOrUpdateRelease(\n releaseVersion,\n changelogContents,\n latestCommit,\n { dryRun }\n );\n };\n }\n\n public override async createOrUpdateRelease(\n releaseVersion: ReleaseVersion,\n changelogContents: string,\n latestCommit: string,\n { dryRun }: { dryRun: boolean }\n ): Promise<void> {\n if (!this.workspaceConfig) {\n this.workspaceConfig = await getWorkspaceConfig();\n }\n\n const name = releaseVersion.gitTag.includes(\"@\")\n ? releaseVersion.gitTag\n .replace(new RegExp(`^@${this.workspaceConfig.name}/`), \"\")\n .replace(/@.*$/, \"\")\n : releaseVersion.gitTag;\n\n return super.createOrUpdateRelease(\n releaseVersion,\n `\n${this.workspaceConfig.release.header || \"\"}\n\n# ${name ? `${titleCase(name)} ` : \"\"}v${releaseVersion.rawVersion}\n\nWe at [${\n this.workspaceConfig.organization\n ? titleCase(\n typeof this.workspaceConfig.organization === \"string\"\n ? this.workspaceConfig.organization\n : this.workspaceConfig.organization.name\n )\n : \"\"\n }](${this.workspaceConfig.homepage}) are very excited to announce the v${\n releaseVersion.rawVersion\n } release of the ${\n name\n ? this.workspaceConfig.name\n ? `${titleCase(this.workspaceConfig.name)} - ${titleCase(name)}`\n : titleCase(name)\n : this.workspaceConfig.name\n ? titleCase(this.workspaceConfig.name)\n : \"Storm Software\"\n } project! 🚀\n\nThese changes are released under the ${\n this.workspaceConfig.license.includes(\"license\")\n ? this.workspaceConfig.license\n : `${this.workspaceConfig.license} license`\n }. You can find more details on [our licensing page](${this.workspaceConfig.licensing}). You can find guides, API references, and other documentation around this release (and much more) on [our documentation site](${\n this.workspaceConfig.docs\n }).\n\nIf you have any questions or comments, feel free to reach out to the team on [Discord](${\n this.workspaceConfig.socials.discord\n }) or [our contact page](${this.workspaceConfig.contact}). Please help us spread the word by giving [this repository](https://github.com/${\n typeof this.workspaceConfig.organization === \"string\"\n ? this.workspaceConfig.organization\n : this.workspaceConfig.organization?.name\n }/${this.workspaceConfig.name}) a star ⭐ on GitHub or [posting on X (Twitter)](https://x.com/intent/tweet?text=Check%20out%20the%20latest%20@${\n this.workspaceConfig.socials.twitter\n }%20release%20${\n name ? `${titleCase(name)?.replaceAll(\" \", \"%20\")}%20` : \"\"\n }v${releaseVersion.rawVersion}%20%F0%9F%9A%80%0D%0A%0D%0Ahttps://github.com/${\n typeof this.workspaceConfig.organization === \"string\"\n ? this.workspaceConfig.organization\n : this.workspaceConfig.organization?.name\n }/${this.workspaceConfig.name}/releases/tag/${releaseVersion.gitTag}) about this release!\n\n## Release Notes\n\n${changelogContents\n .replaceAll(\n `## ${generateChangelogTitle(\n releaseVersion.rawVersion,\n name,\n this.workspaceConfig\n )}`,\n \"\"\n )\n .replaceAll(\n `# ${generateChangelogTitle(releaseVersion.rawVersion, name, this.workspaceConfig)}`,\n \"\"\n )}\n\n---\n\n${this.workspaceConfig.release.footer}\n`,\n latestCommit,\n { dryRun }\n );\n }\n\n /**\n * Get remote repository data, attempting to resolve it if not already set.\n */\n public override getRemoteRepoData<T extends RemoteRepoData>(): T | null {\n if (!this.repoData) {\n let githubRepoData = super.getRemoteRepoData<T>();\n if (!githubRepoData) {\n githubRepoData = getGitHubRepoData() as T;\n if (!githubRepoData) {\n output.error({\n title: `Unable to create a GitHub release because the GitHub repo slug could not be determined.`,\n bodyLines: [\n `Please ensure you have a valid GitHub remote configured. You can run \\`git remote -v\\` to list your current remotes.`\n ]\n });\n process.exit(1);\n }\n }\n\n this.repoData = githubRepoData;\n }\n\n return this.repoData as T;\n }\n}\n\nexport type RepoSlug = `${string}/${string}`;\n\ninterface GithubRequestConfig {\n repo: string;\n hostname: string;\n apiBaseUrl: string;\n token: string | null;\n}\n\n// https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#create-a-release--parameters\ninterface GithubRelease {\n id?: string;\n tag_name: string;\n target_commitish?: string;\n name?: string;\n body?: string;\n draft?: boolean;\n prerelease?: boolean;\n make_latest?: \"legacy\" | boolean;\n}\n\nexport function getGitHubRepoData(\n remoteName = \"origin\",\n createReleaseConfig: ResolvedCreateRemoteReleaseProvider | string = \"github\"\n): RemoteRepoData | undefined {\n try {\n const remoteUrl = execSync(`git remote get-url ${remoteName}`, {\n encoding: \"utf8\",\n stdio: \"pipe\"\n }).trim();\n\n // Use the default provider (github.com) if custom one is not specified or releases are disabled\n let hostname = defaultCreateReleaseProvider.hostname;\n let apiBaseUrl = defaultCreateReleaseProvider.apiBaseUrl;\n if (createReleaseConfig && typeof createReleaseConfig !== \"string\") {\n hostname = createReleaseConfig.hostname;\n apiBaseUrl = createReleaseConfig.apiBaseUrl!;\n }\n\n // Extract the 'user/repo' part from the URL\n const escapedHostname = hostname.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexString = `${escapedHostname}[/:]([\\\\w.-]+/[\\\\w.-]+)(\\\\.git)?`;\n const regex = new RegExp(regexString);\n const match = remoteUrl?.match(regex);\n\n if (match && match[1]) {\n return {\n hostname,\n apiBaseUrl,\n // Ensure any trailing .git is stripped\n slug: match[1].replace(/\\.git$/, \"\") as RepoSlug\n };\n } else {\n throw new Error(\n `Could not extract \"user/repo\" data from the resolved remote URL: ${remoteUrl}`\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n output.error({\n title: `Failed to get GitHub repo data`,\n bodyLines: [error.message]\n });\n\n return undefined;\n }\n}\n\ninterface GithubReleaseOptions {\n version: string;\n body: string;\n prerelease: boolean;\n commit: string;\n}\n\nasync function syncGithubRelease(\n githubRequestConfig: GithubRequestConfig,\n release: GithubReleaseOptions,\n existingGithubReleaseForVersion?: GithubRelease\n) {\n const ghRelease: GithubRelease = {\n tag_name: release.version,\n name: release.version,\n body: release.body,\n prerelease: release.prerelease,\n // legacy specifies that the latest release should be determined based on the release creation date and higher semantic version.\n make_latest: \"legacy\"\n };\n\n try {\n const newGhRelease = await (existingGithubReleaseForVersion\n ? updateGithubRelease(\n githubRequestConfig,\n existingGithubReleaseForVersion.id!,\n ghRelease\n )\n : createGithubRelease(githubRequestConfig, {\n ...ghRelease,\n target_commitish: release.commit\n }));\n return {\n status: existingGithubReleaseForVersion ? \"updated\" : \"created\",\n id: newGhRelease.id,\n url: newGhRelease.html_url\n };\n } catch (error) {\n if (isCI()) {\n console.error(\n `An error occurred while trying to create a release on GitHub, please report this on https://github.com/storm-software/storm-ops (NOTE: make sure to redact your GitHub token from the error message!): ${typeof error?.message === \"string\" ? error?.message : `\\n\\n${error}`}`\n );\n\n throw new Error(\n \"`An error occurred while trying to create a release on GitHub in a CI environment\",\n {\n cause: error\n }\n );\n }\n\n return {\n status: \"manual\",\n error,\n url: githubNewReleaseURL(githubRequestConfig, release),\n requestData: ghRelease\n };\n }\n}\n\n/**\n * Resolve a GitHub token from environment variables or gh CLI\n */\nexport async function resolveTokenData(\n hostname: string\n): Promise<{ token: string; headerName: string }> {\n // Try and resolve from the environment\n const tokenFromEnv =\n process.env.STORM_BOT_GITHUB_TOKEN ||\n process.env.GITHUB_TOKEN ||\n process.env.GH_TOKEN;\n if (tokenFromEnv) {\n return { token: tokenFromEnv, headerName: \"Authorization\" };\n }\n\n // Try and resolve from gh CLI installation\n const ghCLIPath = joinPathFragments(\n process.env.XDG_CONFIG_HOME || joinPathFragments(homedir(), \".config\"),\n \"gh\",\n \"hosts.yml\"\n );\n if (existsSync(ghCLIPath)) {\n const yamlContents = await fsp.readFile(ghCLIPath, \"utf8\");\n\n const ghCLIConfig = parse(yamlContents) as Record<\n string,\n {\n user: string;\n oauth_token?: { token: string; headerName: string };\n git_protocol?: \"https\" | \"ssh\";\n }\n >;\n if (ghCLIConfig[hostname]) {\n // Web based session (the token is already embedded in the config)\n if (ghCLIConfig[hostname].oauth_token) {\n return ghCLIConfig[hostname].oauth_token;\n }\n // SSH based session (we need to dynamically resolve a token using the CLI)\n if (\n ghCLIConfig[hostname].user &&\n ghCLIConfig[hostname].git_protocol === \"ssh\"\n ) {\n const token = execSync(`gh auth token`, {\n encoding: \"utf8\",\n stdio: \"pipe\",\n windowsHide: false\n }).trim();\n return { token, headerName: \"Authorization\" };\n }\n }\n }\n if (hostname !== \"github.com\") {\n console.log(\n `Warning: It was not possible to automatically resolve a GitHub token from your environment for hostname ${hostname}. If you set the GITHUB_TOKEN or GH_TOKEN environment variable, that will be used for GitHub API requests.`\n );\n }\n\n throw new Error(\n `Unable to resolve a GitHub token for hostname ${hostname}. Please set the GITHUB_TOKEN or GH_TOKEN environment variable, or ensure you have an active session via the official gh CLI tool (https://cli.github.com).`\n );\n}\n\nexport async function getGithubReleaseByTag(\n config: GithubRequestConfig,\n tag: string\n): Promise<GithubRelease> {\n return (\n await makeGithubRequest(\n config,\n `/repos/${config.repo}/releases/tags/${tag}`,\n {}\n )\n ).data as GithubRelease;\n}\n\nexport async function makeGithubRequest(\n config: GithubRequestConfig,\n url: string,\n opts: AxiosRequestConfig = {}\n) {\n return await axios(url, {\n ...opts,\n baseURL: config.apiBaseUrl,\n headers: {\n ...(opts.headers as any),\n Authorization: config.token ? `Bearer ${config.token}` : undefined\n }\n });\n}\n\nasync function createGithubRelease(\n config: GithubRequestConfig,\n body: GithubRelease\n) {\n return (\n await makeGithubRequest(config, `/repos/${config.repo}/releases`, {\n method: \"POST\",\n data: body\n })\n ).data;\n}\n\nasync function updateGithubRelease(\n config: GithubRequestConfig,\n id: string,\n body: GithubRelease\n) {\n return (\n await makeGithubRequest(config, `/repos/${config.repo}/releases/${id}`, {\n method: \"PATCH\",\n data: body\n })\n ).data;\n}\n\nfunction githubNewReleaseURL(\n config: GithubRequestConfig,\n release: GithubReleaseOptions\n) {\n // Parameters taken from https://github.com/isaacs/github/issues/1410#issuecomment-442240267\n let url = `https://${config.hostname}/${config.repo}/releases/new?tag=${\n release.version\n }&title=${release.version}&body=${encodeURIComponent(release.body)}&target=${\n release.commit\n }`;\n if (release.prerelease) {\n url += \"&prerelease=true\";\n }\n return url;\n}\n\nexport async function isUserAnOrganizationMember(\n userId: string,\n config: StormWorkspaceConfig,\n remoteName = \"origin\"\n): Promise<boolean> {\n try {\n const repoData = getGitHubRepoData(remoteName, \"github\");\n if (!repoData) {\n throw new Error(\n `Unable to validate GitHub actor because the GitHub repo slug could not be determined. Please ensure you have a valid GitHub remote configured.`\n );\n }\n\n const tokenData = await resolveTokenData(repoData.hostname);\n if (!tokenData.token) {\n throw new Error(\n `Unable to validate GitHub actor because no token was provided. Please set the GITHUB_TOKEN or GH_TOKEN environment variable, or ensure you have an active session via the official gh CLI tool (https://cli.github.com).`\n );\n }\n\n const result = await makeGithubRequest(\n {\n repo: repoData.slug,\n hostname: repoData.hostname,\n apiBaseUrl: repoData.apiBaseUrl,\n token: tokenData?.token || null\n },\n `/orgs/${\n typeof config.organization === \"string\"\n ? config.organization\n : config.organization?.name\n }/members/${userId}`,\n {}\n );\n if (result.status !== 204) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport type { StormWorkspaceConfig } from \"@storm-software/config\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools\";\nimport axios from \"axios\";\nimport DefaultChangelogRenderer, {\n DefaultChangelogRenderOptions,\n DependencyBump\n} from \"nx/release/changelog-renderer\";\nimport { ChangelogChange } from \"nx/src/command-line/release/changelog\";\nimport { NxReleaseConfig } from \"nx/src/command-line/release/config/config\";\nimport { DEFAULT_CONVENTIONAL_COMMITS_CONFIG } from \"nx/src/command-line/release/config/conventional-commits\";\nimport { RemoteReleaseClient } from \"nx/src/command-line/release/utils/remote-release-clients/remote-release-client\";\nimport { major } from \"semver\";\nimport { generateChangelogTitle } from \"../utilities/changelog-utils\";\n\ntype DefaultChangelogRendererParams = ConstructorParameters<\n typeof DefaultChangelogRenderer\n>[0];\n\nexport interface StormChangelogRenderParams {\n changes: ChangelogChange[];\n changelogEntryVersion: string;\n project: string | null;\n entryWhenNoChanges?: string | false;\n isVersionPlans: boolean;\n changelogRenderOptions: DefaultChangelogRenderOptions;\n dependencyBumps?: DependencyBump[];\n conventionalCommitsConfig?: NxReleaseConfig[\"conventionalCommits\"];\n remoteReleaseClient: RemoteReleaseClient<any>;\n workspaceConfig: StormWorkspaceConfig;\n}\n\nexport default class StormChangelogRenderer extends DefaultChangelogRenderer {\n /**\n * The Storm workspace configuration object, which is loaded from the storm-workspace.json file.\n */\n protected workspaceConfig?: StormWorkspaceConfig;\n\n /**\n * A ChangelogRenderer class takes in the determined changes and other relevant metadata and returns a string, or a Promise of a string of changelog contents (usually markdown).\n *\n * @param config - The configuration object for the ChangelogRenderer\n */\n public constructor(config: StormChangelogRenderParams) {\n const resolvedConfig = {\n entryWhenNoChanges: false,\n conventionalCommitsConfig: DEFAULT_CONVENTIONAL_COMMITS_CONFIG,\n ...config\n } as DefaultChangelogRendererParams;\n\n super(resolvedConfig);\n\n this.workspaceConfig = config.workspaceConfig;\n this.remoteReleaseClient = resolvedConfig.remoteReleaseClient;\n }\n\n public override async render(): Promise<string> {\n if (!this.workspaceConfig) {\n this.workspaceConfig = await getWorkspaceConfig();\n }\n\n return super.render();\n }\n\n protected override preprocessChanges(): void {\n this.relevantChanges = [...this.changes];\n this.breakingChanges = [];\n this.additionalChangesForAuthorsSection = [];\n\n // Filter out reverted changes\n for (let i = this.relevantChanges.length - 1; i >= 0; i--) {\n const change = this.relevantChanges[i];\n if (change && change.type === \"revert\" && change.revertedHashes) {\n for (const revertedHash of change.revertedHashes) {\n const revertedCommitIndex = this.relevantChanges.findIndex(\n c => c.shortHash && revertedHash.startsWith(c.shortHash)\n );\n if (revertedCommitIndex !== -1) {\n this.relevantChanges.splice(revertedCommitIndex, 1);\n this.relevantChanges.splice(i, 1);\n i--;\n break;\n }\n }\n }\n }\n\n if (this.isVersionPlans) {\n this.conventionalCommitsConfig = {\n types: {\n feat: DEFAULT_CONVENTIONAL_COMMITS_CONFIG.types.feat,\n fix: DEFAULT_CONVENTIONAL_COMMITS_CONFIG.types.fix\n }\n };\n\n for (let i = this.relevantChanges.length - 1; i >= 0; i--) {\n if (this.relevantChanges[i]?.isBreaking) {\n const change = this.relevantChanges[i];\n if (change) {\n this.additionalChangesForAuthorsSection.push(change);\n const line = this.formatChange(change);\n this.breakingChanges.push(line);\n this.relevantChanges.splice(i, 1);\n }\n }\n }\n } else {\n for (const change of this.relevantChanges) {\n if (change.isBreaking) {\n const breakingChangeExplanation = change.body\n ? this.extractBreakingChangeExplanation(change.body)\n : \"\";\n\n // If the change has a body, we try to extract a more detailed explanation\n this.breakingChanges.push(\n breakingChangeExplanation\n ? `- ${\n change.scope ? `**${change.scope.trim()}:** ` : \"\"\n }${breakingChangeExplanation}`\n : this.formatChange(change)\n );\n }\n }\n }\n }\n\n /**\n * Determines if the changelog entry should be rendered as empty. This is the case when there are no relevant changes, breaking changes, or dependency bumps.\n */\n // protected override shouldRenderEmptyEntry(): boolean {\n // return true;\n // }\n\n protected override renderVersionTitle(): string {\n const isMajorVersion =\n `${major(this.changelogEntryVersion)}.0.0` ===\n this.changelogEntryVersion.replace(/^v/, \"\");\n\n return isMajorVersion\n ? `# ${generateChangelogTitle(\n this.changelogEntryVersion,\n this.project!,\n this.workspaceConfig\n )}`\n : `## ${generateChangelogTitle(\n this.changelogEntryVersion,\n this.project!,\n this.workspaceConfig\n )}`;\n }\n\n protected override renderBreakingChanges(): string[] {\n return [\n \"### Breaking Changes\",\n \"\",\n ...Array.from(new Set(this.breakingChanges))\n ];\n }\n\n protected override renderDependencyBumps(): string[] {\n const markdownLines = [\"\", \"### Updated Dependencies\", \"\"];\n this.dependencyBumps?.forEach(({ dependencyName, newVersion }) => {\n const markdownLine = `- Updated **${dependencyName}** to **v${\n newVersion\n }**`;\n if (!markdownLines.includes(markdownLine)) {\n markdownLines.push(markdownLine);\n }\n });\n\n return markdownLines;\n }\n\n protected override async renderAuthors(): Promise<string[]> {\n const markdownLines: string[] = [];\n const _authors = new Map<string, { email: Set<string>; github?: string }>();\n\n for (const change of [\n ...this.relevantChanges,\n ...this.additionalChangesForAuthorsSection\n ]) {\n if (!change.authors) {\n continue;\n }\n for (const author of change.authors) {\n const name = this.formatName(author.name);\n if (\n !name ||\n name.includes(\"[bot]\") ||\n name === this.workspaceConfig?.bot.name\n ) {\n continue;\n }\n\n if (_authors.has(name)) {\n const entry = _authors.get(name);\n entry?.email.add(author.email);\n } else {\n _authors.set(name, { email: new Set([author.email]) });\n }\n }\n }\n\n if (this.changelogRenderOptions.mapAuthorsToGitHubUsernames) {\n await Promise.all(\n [..._authors.keys()].map(async authorName => {\n const meta = _authors.get(authorName);\n if (!meta) {\n return;\n }\n\n for (const email of meta.email) {\n if (email?.endsWith(\"@users.noreply.github.com\")) {\n const match = email?.match(\n /^(\\d+\\+)?([^@]+)@users\\.noreply\\.github\\.com$/\n );\n if (match && match[2]) {\n meta.github = match[2];\n break;\n }\n }\n\n const { data } = await axios\n .get<\n any,\n { data?: { user?: { username: string } } }\n >(`https://ungh.cc/users/find/${email}`)\n .catch(() => ({ data: { user: null } }));\n if (data?.user) {\n meta.github = data.user.username;\n break;\n }\n }\n })\n );\n }\n\n const authors = [..._authors.entries()].map(e => ({\n name: e[0],\n ...e[1]\n }));\n\n if (authors.length > 0) {\n markdownLines.push(\n \"\",\n \"### \" + \"❤️ Thank You\",\n \"\",\n ...authors\n .sort((a, b) => a.name.localeCompare(b.name))\n .map(i => {\n const github = i.github ? ` @${i.github}` : \"\";\n return `- ${i.name}${github}`;\n })\n );\n }\n\n return markdownLines;\n }\n\n protected override formatChange(change: ChangelogChange): string {\n let description = change.description || \"\";\n let extraLines = [] as string[];\n let extraLinesStr = \"\";\n if (description.includes(\"\\n\")) {\n const lines = description.split(\"\\n\");\n if (lines.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n description = lines[0]!;\n extraLines = lines.slice(1);\n }\n\n const indentation = \" \";\n extraLinesStr = extraLines\n .filter(l => l.trim().length > 0)\n .map(l => `${indentation}${l}`)\n .join(\"\\n\");\n }\n\n let changeLine =\n \"- \" +\n (!this.isVersionPlans && change.scope\n ? `**${change.scope.trim()}:** `\n : \"\") +\n description;\n if (change.githubReferences) {\n changeLine += this.remoteReleaseClient.formatReferences(\n change.githubReferences\n );\n }\n\n if (extraLinesStr) {\n changeLine += \"\\n\\n\" + extraLinesStr;\n }\n\n return changeLine;\n }\n}\n","import { joinPaths } from \"@storm-software/config-tools/utilities/correct-paths\";\nimport { StormWorkspaceConfig } from \"@storm-software/config/types\";\nimport { DEFAULT_COMMIT_TYPES } from \"conventional-changelog-storm-software/commit-types\";\nimport defu from \"defu\";\nimport { NxReleaseChangelogConfiguration } from \"nx/src/config/nx-json\";\nimport { DEFAULT_MONOREPO_COMMIT_QUESTIONS } from \"../commit/config/monorepo\";\nimport { ReleaseConfig, ReleaseGroupConfig } from \"../types\";\nimport { omit } from \"../utilities/omit\";\nimport StormChangelogRenderer from \"./changelog-renderer\";\n\nexport const DEFAULT_CONVENTIONAL_COMMITS_CONFIG = {\n questions: DEFAULT_MONOREPO_COMMIT_QUESTIONS,\n types: DEFAULT_COMMIT_TYPES\n};\n\nexport const DEFAULT_RELEASE_TAG_PATTERN = \"{projectName}@{version}\";\n\nexport const DEFAULT_RELEASE_GROUP_CONFIG = {\n projectsRelationship: \"independent\",\n changelog: {\n createRelease: \"github\",\n entryWhenNoChanges: false,\n file: false,\n renderOptions: {\n authors: false,\n commitReferences: true,\n versionTitleDate: true\n }\n },\n version: {\n currentVersionResolver: \"git-tag\",\n fallbackCurrentVersionResolver: \"disk\",\n specifierSource: \"conventional-commits\",\n groupPreVersionCommand: \"pnpm build\"\n },\n releaseTag: { pattern: DEFAULT_RELEASE_TAG_PATTERN }\n} as const;\n\nexport const DEFAULT_JS_RELEASE_GROUP_CONFIG: ReleaseGroupConfig = {\n ...DEFAULT_RELEASE_GROUP_CONFIG,\n projects: [\"packages/*\"],\n version: {\n ...DEFAULT_RELEASE_GROUP_CONFIG.version,\n versionActions:\n \"@storm-software/workspace-tools/release/js-version-actions\",\n versionActionsOptions: {\n currentVersionResolver: \"git-tag\",\n specifierSource: \"conventional-commits\"\n },\n manifestRootsToUpdate: [\n \"{projectRoot}\",\n {\n path: \"dist/{projectRoot}\",\n preserveLocalDependencyProtocols: false\n }\n ]\n }\n} as const;\n\nexport const DEFAULT_RUST_RELEASE_GROUP_CONFIG: ReleaseGroupConfig = {\n ...DEFAULT_RELEASE_GROUP_CONFIG,\n projects: [\"crates/*\"],\n version: {\n ...DEFAULT_RELEASE_GROUP_CONFIG.version,\n versionActions:\n \"@storm-software/workspace-tools/release/rust-version-actions\",\n versionActionsOptions: {\n currentVersionResolver: \"git-tag\",\n specifierSource: \"conventional-commits\"\n },\n manifestRootsToUpdate: [\"{projectRoot}\"]\n }\n} as const;\n\nexport const DEFAULT_RELEASE_CONFIG: ReleaseConfig = {\n conventionalCommits: DEFAULT_CONVENTIONAL_COMMITS_CONFIG,\n groups: {\n packages: DEFAULT_JS_RELEASE_GROUP_CONFIG,\n crates: DEFAULT_RUST_RELEASE_GROUP_CONFIG\n },\n changelog: {\n automaticFromRef: true,\n workspaceChangelog: false,\n projectChangelogs: true\n },\n releaseTag: { pattern: DEFAULT_RELEASE_TAG_PATTERN }\n} as const;\n\n/**\n * Get the release group configurations, applying defaults where necessary\n *\n * @param releaseConfig - The release configuration to use\n * @param workspaceConfig - The workspace configuration to use\n * @returns The release group configurations\n */\nexport function getReleaseGroupConfig(\n releaseConfig: Partial<ReleaseConfig>,\n workspaceConfig: StormWorkspaceConfig\n) {\n return !releaseConfig?.groups ||\n Object.keys(releaseConfig.groups).length === 0\n ? {}\n : Object.fromEntries(\n Object.entries(releaseConfig.groups).map(([name, group]) => {\n const config = defu(\n {\n ...omit(DEFAULT_RELEASE_GROUP_CONFIG, [\"changelog\", \"version\"]),\n ...group\n },\n {\n version: {\n ...(DEFAULT_RELEASE_GROUP_CONFIG.version as NxReleaseChangelogConfiguration)\n }\n },\n {\n changelog: {\n ...(DEFAULT_RELEASE_GROUP_CONFIG.changelog as NxReleaseChangelogConfiguration),\n renderer: StormChangelogRenderer,\n renderOptions: {\n ...(\n DEFAULT_RELEASE_GROUP_CONFIG.changelog as NxReleaseChangelogConfiguration\n ).renderOptions,\n workspaceConfig\n }\n }\n }\n ) as ReleaseGroupConfig;\n\n if (workspaceConfig?.workspaceRoot) {\n if (\n (config.changelog as NxReleaseChangelogConfiguration)?.renderer &&\n typeof (config.changelog as NxReleaseChangelogConfiguration)\n ?.renderer === \"string\" &&\n (config.changelog as NxReleaseChangelogConfiguration)?.renderer\n ?.toString()\n .startsWith(\"./\")\n ) {\n (config.changelog as NxReleaseChangelogConfiguration).renderer =\n joinPaths(\n workspaceConfig.workspaceRoot,\n (config.changelog as NxReleaseChangelogConfiguration)\n .renderer as string\n );\n }\n\n if (\n config.version?.versionActions &&\n config.version.versionActions.startsWith(\"./\")\n ) {\n config.version.versionActions = joinPaths(\n workspaceConfig.workspaceRoot,\n config.version?.versionActions\n );\n }\n }\n\n return [name, config];\n })\n );\n}\n","import {\n createProjectGraphAsync,\n ProjectGraph,\n ProjectsConfigurations,\n readCachedProjectGraph,\n readProjectsConfigurationFromProjectGraph,\n Tree\n} from \"@nx/devkit\";\nimport { StormWorkspaceConfig } from \"@storm-software/config\";\nimport { joinPaths } from \"@storm-software/config-tools\";\nimport { getWorkspaceConfig } from \"@storm-software/config-tools/get-config\";\nimport {\n writeDebug,\n writeWarning\n} from \"@storm-software/config-tools/logger/console\";\nimport defu from \"defu\";\nimport { existsSync } from \"node:fs\";\nimport { ReleaseClient } from \"nx/release\";\nimport { DependencyBump } from \"nx/release/changelog-renderer\";\nimport {\n ChangelogChange,\n NxReleaseChangelogResult,\n PostGitTask\n} from \"nx/src/command-line/release/changelog\";\nimport { ChangelogOptions as NxChangelogOptions } from \"nx/src/command-line/release/command-object\";\nimport {\n getCommitHash,\n getFirstGitCommit,\n getLatestGitTagForPattern,\n GitCommit,\n gitPush\n} from \"nx/src/command-line/release/utils/git\";\nimport {\n createCommitMessageValues,\n createGitTagValues,\n handleDuplicateGitTags\n} from \"nx/src/command-line/release/utils/shared\";\nimport { NxJsonConfiguration, readNxJson } from \"nx/src/config/nx-json\";\nimport { FsTree } from \"nx/src/generators/tree\";\nimport { createFileMapUsingProjectGraph } from \"nx/src/project-graph/file-map-utils\";\nimport { ReleaseConfig } from \"../types\";\nimport {\n filterHiddenChanges,\n generateChangelogForProjects\n} from \"../utilities/changelog-utils\";\nimport { createFileToProjectMap } from \"../utilities/file-utils\";\nimport {\n commitChanges,\n commitChangesNonProjectFiles,\n extractPreid,\n filterProjectCommits,\n getCommits,\n getProjectsAffectedByCommit,\n gitTag\n} from \"../utilities/git-utils\";\nimport { omit } from \"../utilities/omit\";\nimport StormChangelogRenderer from \"./changelog-renderer\";\nimport { DEFAULT_RELEASE_CONFIG, getReleaseGroupConfig } from \"./config\";\n\nexport type ChangelogOptions = Omit<\n NxChangelogOptions,\n \"versionData\" | \"releaseGraph\"\n> &\n Required<Pick<NxChangelogOptions, \"versionData\" | \"releaseGraph\">>;\n\n/**\n * Extended {@link ReleaseClient} with Storm Software specific release APIs\n */\nexport class StormReleaseClient extends ReleaseClient {\n public static async create(\n releaseConfig: Partial<ReleaseConfig> = {},\n ignoreNxJsonConfig = false,\n workspaceConfig?: StormWorkspaceConfig\n ) {\n if (!workspaceConfig) {\n workspaceConfig = await getWorkspaceConfig();\n }\n\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n projectGraph = await createProjectGraphAsync({\n exitOnError: true,\n resetDaemonClient: true\n });\n }\n\n if (!projectGraph) {\n throw new Error(\n \"Failed to load the project graph. Please run `nx reset`, then run the `storm-git commit` command again.\"\n );\n }\n\n return new StormReleaseClient(\n projectGraph,\n releaseConfig,\n ignoreNxJsonConfig,\n workspaceConfig\n );\n }\n\n /**\n * The release configuration used by this release client.\n */\n protected config: ReleaseConfig;\n\n /**\n * The workspace configuration used by this release client.\n */\n protected workspaceConfig: StormWorkspaceConfig;\n\n /**\n * The project graph of the workspace.\n */\n protected projectGraph: ProjectGraph;\n\n /**\n * The project configurations of the workspace.\n */\n protected projectConfigurations: ProjectsConfigurations;\n\n /**\n * The file system tree used by this release client.\n */\n protected tree: Tree;\n\n /**\n * Creates an instance of {@link StormReleaseClient}.\n *\n * @param projectGraph - The project graph of the workspace.\n * @param releaseConfig - Release configuration to use for the current release client. By default, it will be combined with any configuration in `nx.json`, but you can choose to use it as the sole source of truth by setting {@link ignoreNxJsonConfig} to true.\n * @param ignoreNxJsonConfig - Whether to ignore the nx.json configuration and use only the provided {@link releaseConfig}. Default is false.\n * @param workspaceConfig - Optional Storm workspace configuration object for logging purposes.\n */\n protected constructor(\n projectGraph: ProjectGraph,\n releaseConfig: Partial<ReleaseConfig>,\n ignoreNxJsonConfig: boolean,\n workspaceConfig: StormWorkspaceConfig\n ) {\n let nxJson!: Partial<NxJsonConfiguration>;\n if (\n !ignoreNxJsonConfig &&\n existsSync(joinPaths(workspaceConfig.workspaceRoot, \"nx.json\"))\n ) {\n nxJson = readNxJson();\n }\n\n const config = defu(\n {\n changelog: {\n renderOptions: {\n workspaceConfig\n }\n }\n },\n {\n groups: getReleaseGroupConfig(releaseConfig, workspaceConfig)\n },\n {\n groups: getReleaseGroupConfig(\n (nxJson.release ?? {}) as Partial<ReleaseConfig>,\n workspaceConfig\n )\n },\n omit(releaseConfig, [\"groups\"]),\n nxJson.release ? omit(nxJson.release, [\"groups\"]) : {},\n omit(DEFAULT_RELEASE_CONFIG, [\"groups\"])\n ) as ReleaseConfig;\n\n super(config, true);\n\n writeDebug(\n \"Executing release with the following configuration\",\n workspaceConfig\n );\n writeDebug(config, workspaceConfig);\n\n this.projectGraph = projectGraph;\n this.config = config;\n this.workspaceConfig = workspaceConfig;\n this.tree = new FsTree(workspaceConfig.workspaceRoot, false);\n\n this.projectConfigurations =\n readProjectsConfigurationFromProjectGraph(projectGraph);\n }\n\n public override releaseChangelog = async (options: ChangelogOptions) => {\n const to = options.to || \"HEAD\";\n const toSHA = await getCommitHash(to);\n\n const postGitTasks = [] as PostGitTask[];\n let projectChangelogs: NxReleaseChangelogResult[\"projectChangelogs\"] = {};\n\n const projectsPreid: { [projectName: string]: string | undefined } =\n Object.fromEntries(\n Object.entries(options.versionData).map(([projectName, v]) => [\n projectName,\n v.newVersion ? extractPreid(v.newVersion) : undefined\n ])\n );\n\n /**\n * Compute any additional dependency bumps up front because there could be cases of circular dependencies,\n * and figuring them out during the main iteration would be too late.\n */\n const projectToAdditionalDependencyBumps = new Map<\n string,\n DependencyBump[]\n >();\n for (const releaseGroup of options.releaseGraph.releaseGroups) {\n if (releaseGroup.projectsRelationship !== \"independent\") {\n continue;\n }\n for (const project of releaseGroup.projects) {\n // If the project does not have any changes, do not process its dependents\n if (\n !options.versionData[project] ||\n options.versionData[project].newVersion === null\n ) {\n continue;\n }\n\n const dependentProjects = (\n options.versionData[project].dependentProjects || []\n )\n .map(dep => {\n return {\n dependencyName: dep.source,\n newVersion: options.versionData[dep.source]?.newVersion ?? null\n };\n })\n .filter(b => b.newVersion !== null);\n\n for (const dependent of dependentProjects) {\n const additionalDependencyBumpsForProject = (\n projectToAdditionalDependencyBumps.has(dependent.dependencyName)\n ? projectToAdditionalDependencyBumps.get(dependent.dependencyName)\n : []\n ) as DependencyBump[];\n additionalDependencyBumpsForProject.push({\n dependencyName: project,\n newVersion: options.versionData[project].newVersion\n });\n projectToAdditionalDependencyBumps.set(\n dependent.dependencyName,\n additionalDependencyBumpsForProject\n );\n }\n }\n }\n\n const allProjectChangelogs: NxReleaseChangelogResult[\"projectChangelogs\"] =\n {};\n\n for (const releaseGroup of options.releaseGraph.releaseGroups) {\n const config = releaseGroup.changelog;\n // The entire feature is disabled at the release group level, exit early\n if (config === false) {\n continue;\n }\n\n if (\n !options.releaseGraph.releaseGroupToFilteredProjects.has(releaseGroup)\n ) {\n throw new Error(\n `No filtered projects found for release group ${releaseGroup.name}`\n );\n }\n\n const projects = options.projects?.length\n ? // If the user has passed a list of projects, we need to use the filtered list of projects within the release group, plus any dependents\n Array.from(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.releaseGraph.releaseGroupToFilteredProjects.get(\n releaseGroup\n )!\n ).flatMap(project => {\n return [\n project,\n ...(options.versionData[project]?.dependentProjects.map(\n dep => dep.source\n ) || [])\n ];\n })\n : // Otherwise, we use the full list of projects within the release group\n releaseGroup.projects;\n const projectNodes = projects.map(name => this.projectGraph.nodes[name]);\n\n if (releaseGroup.projectsRelationship === \"independent\") {\n for (const project of projectNodes) {\n let changes: ChangelogChange[] | null = null;\n\n let fromRef =\n options.from ||\n (\n await getLatestGitTagForPattern(\n releaseGroup.releaseTag.pattern,\n {\n projectName: project.name,\n releaseGroupName: releaseGroup.name\n },\n {\n checkAllBranchesWhen:\n releaseGroup.releaseTag.checkAllBranchesWhen,\n preid: projectsPreid[project.name],\n requireSemver: releaseGroup.releaseTag.requireSemver,\n strictPreid: releaseGroup.releaseTag.strictPreid\n }\n )\n )?.tag;\n\n let commits: GitCommit[] | undefined = undefined;\n if (!fromRef) {\n const firstCommit = await getFirstGitCommit();\n commits = await filterProjectCommits({\n fromSHA: firstCommit,\n toSHA,\n projectPath: project.data.root\n });\n\n fromRef = commits[0]?.shortHash;\n if (options.verbose) {\n console.log(\n `Determined --from ref for ${project.name} from the first commit in which it exists: ${fromRef}`\n );\n }\n }\n\n if (!fromRef && !commits) {\n throw new Error(\n `Unable to determine the previous git tag. If this is the first release of your workspace, use the --first-release option or set the \"release.changelog.automaticFromRef\" config property in nx.json to generate a changelog from the first commit. Otherwise, be sure to configure the \"release.releaseTag.pattern\" property in nx.json to match the structure of your repository's git tags.`\n );\n }\n\n if (!commits) {\n commits = await filterProjectCommits({\n fromSHA: fromRef!,\n toSHA,\n projectPath: project.data.root\n });\n }\n\n const { fileMap } = await createFileMapUsingProjectGraph(\n this.projectGraph\n );\n const fileToProjectMap = createFileToProjectMap(\n fileMap.projectFileMap\n );\n\n changes = filterHiddenChanges(\n commits.map(c => ({\n type: c.type,\n scope: c.scope,\n description: c.description,\n body: c.body,\n isBreaking: c.isBreaking,\n githubReferences: c.references,\n authors: c.authors,\n shortHash: c.shortHash,\n revertedHashes: c.revertedHashes,\n affectedProjects: commitChangesNonProjectFiles(\n c,\n fileMap.nonProjectFiles\n )\n ? \"*\"\n : getProjectsAffectedByCommit(c, fileToProjectMap)\n })),\n this.config.conventionalCommits\n );\n\n writeDebug(\n `Running changelog generation for the ${releaseGroup.name} release group`,\n this.workspaceConfig\n );\n\n projectChangelogs = await generateChangelogForProjects({\n tree: this.tree,\n args: options,\n changes,\n projectGraph: this.projectGraph,\n projectsVersionData: options.versionData,\n releaseGroup,\n projects: [project],\n releaseConfig: this.config,\n projectToAdditionalDependencyBumps,\n workspaceConfig: this.workspaceConfig,\n ChangelogRendererClass: StormChangelogRenderer\n });\n if (projectChangelogs) {\n for (const [projectName, projectChangelog] of Object.entries(\n projectChangelogs\n )) {\n // Add the post git task (e.g. create a remote release) for the project changelog, if applicable\n if (projectChangelog.postGitTask) {\n postGitTasks.push(projectChangelog.postGitTask);\n }\n\n allProjectChangelogs[projectName] = projectChangelog;\n }\n }\n }\n } else {\n let changes: ChangelogChange[] = [];\n\n let fromRef =\n options.from ||\n (\n await getLatestGitTagForPattern(\n releaseGroup.releaseTag.pattern,\n {},\n {\n checkAllBranchesWhen:\n releaseGroup.releaseTag.checkAllBranchesWhen,\n preid: Object.keys(projectsPreid)[0]\n ? projectsPreid?.[Object.keys(projectsPreid)[0]!]\n : undefined,\n requireSemver: releaseGroup.releaseTag.requireSemver,\n strictPreid: releaseGroup.releaseTag.strictPreid\n }\n )\n )?.tag;\n if (!fromRef) {\n fromRef = await getFirstGitCommit();\n if (options.verbose) {\n console.log(\n `Determined release group --from ref from the first commit in the workspace: ${fromRef}`\n );\n }\n }\n\n // Make sure that the fromRef is actually resolvable\n const fromSHA = await getCommitHash(fromRef);\n\n const { fileMap } = await createFileMapUsingProjectGraph(\n this.projectGraph\n );\n const fileToProjectMap = createFileToProjectMap(fileMap.projectFileMap);\n\n changes = filterHiddenChanges(\n (await getCommits(fromSHA, toSHA)).map(c => ({\n type: c.type,\n scope: c.scope,\n description: c.description,\n body: c.body,\n isBreaking: c.isBreaking,\n githubReferences: c.references,\n authors: c.authors,\n shortHash: c.shortHash,\n revertedHashes: c.revertedHashes,\n affectedProjects: commitChangesNonProjectFiles(\n c,\n fileMap.nonProjectFiles\n )\n ? \"*\"\n : getProjectsAffectedByCommit(c, fileToProjectMap)\n })),\n this.config.conventionalCommits\n );\n\n writeDebug(\n `Running changelog generation for the ${releaseGroup.name} release group`,\n this.workspaceConfig\n );\n\n projectChangelogs = await generateChangelogForProjects({\n tree: this.tree,\n args: options,\n changes,\n projectGraph: this.projectGraph,\n projectsVersionData: options.versionData,\n releaseGroup,\n projects: projectNodes,\n releaseConfig: this.config,\n projectToAdditionalDependencyBumps,\n workspaceConfig: this.workspaceConfig,\n ChangelogRendererClass: StormChangelogRenderer\n });\n if (projectChangelogs) {\n for (const [projectName, projectChangelog] of Object.entries(\n projectChangelogs\n )) {\n // Add the post git task (e.g. create a remote release) for the project changelog, if applicable\n if (projectChangelog.postGitTask) {\n postGitTasks.push(projectChangelog.postGitTask);\n }\n allProjectChangelogs[projectName] = projectChangelog;\n }\n }\n }\n }\n\n writeDebug(\n `Generated changelogs for ${Object.keys(allProjectChangelogs).length} projects:\n${Object.keys(allProjectChangelogs)\n .map(p => ` - ${p}`)\n .join(\"\\n\")}\n`,\n this.workspaceConfig\n );\n await this.applyChangesAndExit(options, postGitTasks);\n\n return {\n workspaceChangelog: undefined,\n projectChangelogs: allProjectChangelogs\n };\n };\n\n protected applyChangesAndExit = async (\n options: ChangelogOptions,\n postGitTasks: PostGitTask[]\n ) => {\n const to = options.to || \"HEAD\";\n let latestCommit = await getCommitHash(to);\n\n const gitTagValues: string[] = createGitTagValues(\n options.releaseGraph.releaseGroups,\n options.releaseGraph.releaseGroupToFilteredProjects,\n options.versionData\n );\n handleDuplicateGitTags(gitTagValues);\n\n const commitMessageValues: string[] = createCommitMessageValues(\n options.releaseGraph.releaseGroups,\n options.releaseGraph.releaseGroupToFilteredProjects,\n options.versionData,\n options.gitCommitMessage ||\n this.config.changelog?.git?.commitMessage ||\n \"release(monorepo): Publish workspace release updates\"\n );\n\n const changes = this.tree.listChanges();\n if (!changes.length) {\n writeWarning(\n \"No changes were detected for any changelog files, so no changelog entries will be generated.\",\n this.workspaceConfig\n );\n\n if (!postGitTasks.length) {\n // No post git tasks (e.g. remote release creation) to perform so we can just exit\n return;\n }\n\n for (const postGitTask of postGitTasks) {\n await postGitTask(latestCommit);\n }\n\n return;\n }\n\n const changedFiles: string[] = changes.map(f => f.path);\n await commitChanges({\n changedFiles,\n deletedFiles: [],\n isDryRun: !!options.dryRun,\n isVerbose: !!options.verbose,\n gitCommitMessages: commitMessageValues,\n gitCommitArgs:\n options.gitCommitArgs || this.config.changelog?.git?.commitArgs\n });\n\n // Resolve the commit we just made\n latestCommit = await getCommitHash(\"HEAD\");\n\n writeDebug(\n `Creating git tags: ${gitTagValues.join(\", \")}`,\n this.workspaceConfig\n );\n\n for (const tag of gitTagValues) {\n await gitTag({\n tag,\n message:\n options.gitTagMessage || this.config.changelog?.git?.tagMessage,\n additionalArgs:\n options.gitTagArgs || this.config.changelog?.git?.tagArgs,\n dryRun: options.dryRun,\n verbose: options.verbose\n });\n }\n\n writeDebug(\n `Pushing to git remote \"${options.gitRemote ?? \"origin\"}\"`,\n this.workspaceConfig\n );\n\n await gitPush({\n gitRemote: options.gitRemote,\n dryRun: options.dryRun,\n verbose: options.verbose,\n additionalArgs:\n options.gitPushArgs || this.config.changelog?.git?.pushArgs\n });\n\n // Run any post-git tasks in series\n for (const postGitTask of postGitTasks) {\n await postGitTask(latestCommit);\n }\n\n return;\n };\n}\n","import {\n createProjectGraphAsync,\n ProjectGraph,\n readCachedProjectGraph\n} from \"@nx/devkit\";\nimport type { StormWorkspaceConfig } from \"@storm-software/config\";\nimport {\n isVerbose,\n joinPaths,\n parseCargoToml,\n stringifyCargoToml,\n writeDebug,\n writeFatal,\n writeInfo,\n writeSuccess,\n writeTrace,\n writeWarning\n} from \"@storm-software/config-tools\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type {\n ReleaseVersion,\n VersionData\n} from \"nx/src/command-line/release/utils/shared.js\";\nimport { ReleaseConfig } from \"../types\";\nimport { isUserAnOrganizationMember } from \"./github\";\nimport { StormReleaseClient } from \"./release-client\";\n\nexport interface NxReleaseChangelogResult {\n workspaceChangelog?: {\n releaseVersion: ReleaseVersion;\n contents: string;\n };\n projectChangelogs?: {\n [projectName: string]: {\n releaseVersion: ReleaseVersion;\n contents: string;\n };\n };\n}\n\nexport type ReleaseOptions = Partial<ReleaseConfig> & {\n project?: string;\n head?: string;\n base?: string;\n dryRun?: boolean;\n skipPublish?: boolean;\n ignoreNxJsonConfig?: boolean;\n};\n\nexport const runRelease = async (\n config: StormWorkspaceConfig,\n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n project,\n head,\n base,\n dryRun = false,\n skipPublish = false,\n ignoreNxJsonConfig = false,\n ...releaseConfig\n }: ReleaseOptions\n) => {\n if (!process.env.GITHUB_ACTOR) {\n throw new Error(\"The `GITHUB_ACTOR` environment variable is not set.\");\n }\n\n if (!(await isUserAnOrganizationMember(process.env.GITHUB_ACTOR, config))) {\n writeFatal(\n \"You must be a member of the Storm Software organization to run the release process.\",\n config\n );\n throw new Error(\n `The GitHub actor \"${\n process.env.GITHUB_ACTOR\n }\" is not a member of the organization \"${\n typeof config.organization === \"string\"\n ? config.organization\n : config.organization?.name\n }\". Only members of the organization can initiate releases.`\n );\n }\n\n const name = config.bot.name;\n const email = config.bot.email\n ? config.bot.email\n : config.bot.name\n ? `${config.bot.name}@users.noreply.github.com`\n : \"bot@stormsoftware.com\";\n\n process.env.GIT_AUTHOR_NAME = name;\n process.env.GIT_AUTHOR_EMAIL = email;\n process.env.GIT_COMMITTER_NAME = name;\n process.env.GIT_COMMITTER_EMAIL = email;\n\n process.env.NODE_AUTH_TOKEN = process.env.NPM_TOKEN;\n process.env.NPM_AUTH_TOKEN = process.env.NPM_TOKEN;\n process.env.NPM_CONFIG_PROVENANCE = \"true\";\n\n writeDebug(\"Creating Storm release client...\", config);\n\n const releaseClient = await StormReleaseClient.create(\n releaseConfig,\n ignoreNxJsonConfig,\n config\n );\n\n writeDebug(\"Reading in the workspaces release configuration\", config);\n\n const to = head || process.env.NX_HEAD;\n const from = base || process.env.NX_BASE;\n\n writeDebug(\n `Using the following Git SHAs to determine the release content:\n - From: ${from}\n - To: ${to}\n`,\n config\n );\n\n writeDebug(\"Determining the current release versions...\", config);\n\n const { workspaceVersion, projectsVersionData, releaseGraph } =\n await releaseClient.releaseVersion({\n dryRun,\n verbose: isVerbose(config.logLevel),\n preid: config.preid,\n stageChanges: true,\n gitCommit: false\n });\n\n await releaseClient.releaseChangelog({\n version:\n releaseConfig?.projectsRelationship === \"fixed\"\n ? workspaceVersion\n : undefined,\n versionData: projectsVersionData,\n dryRun,\n verbose: isVerbose(config.logLevel),\n to,\n from,\n releaseGraph\n });\n\n writeDebug(\"Tagging commit with git\", config);\n\n if (skipPublish) {\n writeWarning(\n \"Skipping publishing packages since `skipPublish` was provided as `true` in the release options.\",\n config\n );\n } else {\n const changedProjects = Object.keys(projectsVersionData).filter(\n key => projectsVersionData[key]?.newVersion\n );\n if (changedProjects.length > 0) {\n writeInfo(\n `Publishing release for ${changedProjects.length} ${changedProjects.length === 1 ? \"project\" : \"projects\"}:\n${changedProjects.map(changedProject => ` - ${changedProject}`).join(\"\\n\")}\n`,\n config\n );\n\n await updatePackageManifests(projectsVersionData, config);\n\n const result = await releaseClient.releasePublish({\n dryRun,\n verbose: isVerbose(config.logLevel)\n });\n\n const failedProjects = Object.keys(result).filter(\n key => result[key]?.code && result[key]?.code > 0\n );\n if (failedProjects.length > 0) {\n throw new Error(\n `The Storm release process was not completed successfully! One or more errors occured while running the \\`nx-release-publish\\` executor tasks.\n\nPlease review the workflow details for the following project(s):\n${failedProjects.map(failedProject => ` - ${failedProject} (Error Code: ${result[failedProject]?.code})`).join(\"\\n\")}\n`\n );\n }\n } else {\n writeWarning(\"Skipped publishing packages.\", config);\n }\n }\n\n writeSuccess(\"Completed the Storm workspace release process!\", config);\n};\n\nasync function updatePackageManifests(\n projectsVersionData: VersionData,\n config: StormWorkspaceConfig\n) {\n let projectGraph!: ProjectGraph;\n try {\n projectGraph = readCachedProjectGraph();\n } catch {\n await createProjectGraphAsync();\n projectGraph = readCachedProjectGraph();\n }\n\n if (projectGraph) {\n await Promise.all(\n Object.keys(projectsVersionData).map(async node => {\n const projectNode = projectGraph.nodes[node];\n if (!projectNode?.data.root) {\n writeWarning(\n `Project node ${node} not found in the project graph. Skipping manifest update.`,\n config\n );\n return;\n }\n\n const versionData = projectsVersionData[node];\n if (\n projectNode?.data.root &&\n versionData &&\n versionData.newVersion !== null\n ) {\n writeTrace(\n `Writing version ${versionData.newVersion} update to manifest file for ${node}\n `,\n config\n );\n\n const projectRoot = joinPaths(\n config.workspaceRoot,\n projectNode.data.root\n );\n\n const packageJsonPath = joinPaths(projectRoot, \"package.json\");\n const cargoTomlPath = joinPaths(projectRoot, \"Cargo.toml\");\n\n if (existsSync(packageJsonPath)) {\n const packageJsonContent = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(packageJsonContent);\n\n packageJson.version = versionData.newVersion;\n await writeFile(packageJsonPath, JSON.stringify(packageJson));\n } else if (existsSync(cargoTomlPath)) {\n const cargoToml = parseCargoToml(\n await readFile(cargoTomlPath, \"utf8\")\n );\n\n cargoToml.package ??= {};\n cargoToml.package.version = versionData.newVersion;\n await writeFile(cargoTomlPath, stringifyCargoToml(cargoToml));\n }\n }\n })\n );\n } else {\n writeWarning(\"No project nodes found. Skipping manifest updates.\", config);\n }\n}\n","import type { StormWorkspaceConfig } from \"@storm-software/config\";\nimport {\n brandIcon,\n findWorkspaceRootSafe,\n writeFatal,\n writeInfo,\n writeSuccess\n} from \"@storm-software/config-tools\";\nimport { Command } from \"commander\";\nimport { runCommit } from \"../commit/run\";\nimport { runCommitLint } from \"../commitlint/run\";\nimport { runReadme } from \"../readme/run\";\nimport { runRelease } from \"../release/run\";\nimport type { CommitLintCLIOptions, ReadMeOptions } from \"../types\";\n\nlet _config: Partial<StormWorkspaceConfig> = {};\n\nexport function createProgram(config: StormWorkspaceConfig) {\n _config = config;\n writeInfo(`${brandIcon(_config)} Running Storm Git Tools`, config);\n\n const root = findWorkspaceRootSafe(process.cwd());\n process.env.STORM_WORKSPACE_ROOT ??= root;\n process.env.NX_WORKSPACE_ROOT_PATH ??= root;\n if (root) {\n process.chdir(root);\n }\n\n const program = new Command(\"storm-git\");\n program.version(\"1.0.0\", \"-v --version\", \"display CLI version\");\n\n program\n .command(\"commit\")\n .description(\"Commit changes to git for the workspace.\")\n .option(\"--config <file>\", \"The Commitizen config file path\")\n .option(\n \"--dry-run\",\n \"Should the commit be run in dry-run mode (no updates are made)\"\n )\n .action(commitAction);\n\n program\n .command(\"readme\")\n .description(\"Run the README.md generator using the templates provided.\")\n .option(\n \"--templates <path>\",\n \"The templates directory to use when generating the README.md files.\",\n \"./tools/readme-templates\"\n )\n .option(\n \"--project <project>\",\n \"The specific project to generate a README.md file for\"\n )\n .option(\"--output <path>\", \"Where to output the generated README.md file\")\n .option(\n \"--clean\",\n \"Should the output README.md file be cleaned before generation\",\n true\n )\n .option(\n \"--prettier\",\n \"Should the output README.md file have prettier applied to it\",\n true\n )\n .action(readmeAction);\n\n program\n .command(\"release\")\n .description(\"Run release for a project in the workspace.\")\n .option(\"--project <project>\", \"The specific project to run release for\")\n .option(\"--base <base>\", \"Git base tag value\")\n .option(\"--head <head>\", \"Git head tag value\")\n .option(\n \"--dry-run\",\n \"Should the release be run in dry-run mode (no updates are made)\"\n )\n .action(releaseAction);\n\n program\n .command(\"commitlint\")\n .description(\"Run commitlint for the workspace's commit message.\")\n .option(\"--config <file>\", \"The CommitLint config file path\")\n .option(\"--message <commit-message>\", \"The commit message to lint\")\n .option(\"--file <commit-file>\", \"The commit message to lint\")\n .action(commitLintAction);\n\n return program;\n}\n\nexport async function commitAction({\n config,\n dryRun = false\n}: {\n config: string;\n dryRun: boolean;\n}) {\n try {\n writeInfo(\n `${brandIcon(config)} Preparing to commit your changes. Please provide the requested details below...`,\n _config\n );\n\n await runCommit(config, dryRun);\n\n writeSuccess(\n `🎉 Storm Commit processing completed successfully!\n\nNote: Please run \"pnpm push\" to upload these changes to the remote ${\n _config.name\n ? _config.name\n : _config.namespace\n ? _config.namespace\n : _config.organization\n ? _config.organization\n : \"Storm-Software\"\n } Git repository at ${_config.repository}\n`,\n _config\n );\n } catch (error) {\n writeFatal(\n `A fatal error occurred while running commit action: \\n\\n${\n error.message\n }${\n error.stack ? `\\n\\nStacktrace: ${error.stack}` : \"\"\n }\\n\\nPlease fix any errors and try committing again.`,\n _config\n );\n\n throw new Error(error.message, { cause: error });\n }\n}\n\nexport async function readmeAction(options: ReadMeOptions) {\n try {\n writeInfo(\n `${brandIcon(_config)} Formatting the workspace's README.md files`,\n _config\n );\n\n await runReadme(options);\n\n writeSuccess(\n \"Formatting of the workspace's README.md files is complete\\n\",\n _config\n );\n } catch (error) {\n writeFatal(\n `A fatal error occurred while running README format action: \\n\\n${error.message}`\n );\n throw new Error(error.message, { cause: error });\n }\n}\n\nexport async function releaseAction({\n project,\n base,\n head,\n dryRun\n}: {\n project?: string;\n base?: string;\n head?: string;\n dryRun?: boolean;\n}) {\n try {\n writeInfo(\n `${brandIcon(_config)} Running the Storm Release and Publish process on the workspace`,\n _config\n );\n\n await runRelease(_config as StormWorkspaceConfig, {\n dryRun,\n project,\n base,\n head\n });\n\n writeSuccess(\"Release completed successfully!\\n\", _config);\n } catch (error) {\n writeFatal(\n `A fatal error occurred while running release action: \\n\\n${error.message} ${error.stack ? `\\n\\nStacktrace: ${error.stack}` : \"\"}`,\n _config\n );\n console.error(error);\n\n throw new Error(error.message, { cause: error });\n }\n}\n\nexport async function commitLintAction(options: CommitLintCLIOptions) {\n try {\n writeInfo(\n `${brandIcon(_config)} Linting the ${\n _config.repository\n ? _config.repository\n : _config.namespace\n ? _config.namespace\n : _config.name\n ? _config.name\n : typeof _config.organization === \"string\"\n ? _config.organization\n : _config.organization?.name\n ? _config.organization?.name\n : \"Storm-Software\"\n } repository's commit messages.`,\n _config\n );\n\n await runCommitLint(_config as StormWorkspaceConfig, options);\n\n writeSuccess(\n \"Linting the commit messages completed successfully!\\n\",\n _config\n );\n } catch (error) {\n writeFatal(\n `A fatal error occurred while linting the commit messages: \\n\\n${error.message}`,\n _config\n );\n throw new Error(error.message, { cause: error });\n }\n}\n","#!/usr/bin/env node\n\nimport {\n exitWithError,\n exitWithSuccess,\n getConfig,\n handleProcess,\n writeSuccess\n} from \"@storm-software/config-tools\";\nimport { createProgram } from \"../src/cli\";\n\nvoid (async () => {\n const config = await getConfig();\n try {\n handleProcess(config);\n\n const program = createProgram(config);\n await program.parseAsync(process.argv);\n\n writeSuccess(\n `🎉 Git ${process.argv && process.argv.length >= 3 && process.argv[2] ? process.argv[2] : \"tool\"} processing completed successfully!`,\n config\n );\n exitWithSuccess(config);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n exitWithError(config);\n process.exit(1);\n }\n})();\n"]}
|