fork-version 1.8.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/{chunk-RLGF46N7.js → chunk-D2PQT6ZM.js} +806 -147
- package/dist/chunk-D2PQT6ZM.js.map +1 -0
- package/dist/{chunk-EAMGFCWC.cjs → chunk-RJRVHSEG.cjs} +808 -146
- package/dist/chunk-RJRVHSEG.cjs.map +1 -0
- package/dist/cli.cjs +14 -13
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +8 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +27 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +400 -326
- package/dist/index.d.ts +400 -326
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +30 -31
- package/dist/chunk-EAMGFCWC.cjs.map +0 -1
- package/dist/chunk-RLGF46N7.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { FileManager, ForkConfigSchema, Git, Logger, commitChanges, getCurrentVersion, getNextVersion, getUserConfig, tagChanges, updateChangelog } from './chunk-
|
|
1
|
+
export { CommitParser, FileManager, ForkConfigSchema, Git, Logger, commitChanges, createParserOptions, filterRevertedCommits, getCommitsSinceTag, getCurrentVersion, getNextVersion, getUserConfig, tagChanges, updateChangelog } from './chunk-D2PQT6ZM.js';
|
|
2
2
|
|
|
3
3
|
// src/config/define-config.ts
|
|
4
4
|
function defineConfig(config) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/define-config.ts"],"names":[],"mappings":";;;AAKO,SAAS,aAAa,
|
|
1
|
+
{"version":3,"sources":["../src/config/define-config.ts"],"names":[],"mappings":";;;AAKO,SAAS,aAAa,MAAA,EAAwB;AACpD,EAAA,OAAO,MAAA;AACR","file":"index.js","sourcesContent":["import type { Config } from \"./types\";\n\n/**\n * [Fork-Version - Config Properties](https://github.com/eglavin/fork-version/blob/main/README.md#config-properties)\n */\nexport function defineConfig(config: Config): Config {\n\treturn config;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fork-version",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fork-Version automates version control tasks such as determining, updating, and committing versions, files, and changelogs, simplifying the process when adhering to the conventional commit standard.",
|
|
6
6
|
"keywords": [
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
25
|
-
"url": "https://github.com/eglavin/fork-version.git"
|
|
25
|
+
"url": "git+https://github.com/eglavin/fork-version.git"
|
|
26
26
|
},
|
|
27
27
|
"author": {
|
|
28
28
|
"name": "Eanna Glavin",
|
|
29
29
|
"url": "https://eglavin.com"
|
|
30
30
|
},
|
|
31
|
-
"packageManager": "pnpm@
|
|
31
|
+
"packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a",
|
|
32
32
|
"engines": {
|
|
33
33
|
"node": ">=18.0.0",
|
|
34
|
-
"pnpm": ">=
|
|
34
|
+
"pnpm": ">=10.0.0"
|
|
35
35
|
},
|
|
36
36
|
"private": false,
|
|
37
37
|
"type": "module",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"./package.json": "./package.json"
|
|
63
63
|
},
|
|
64
64
|
"bin": {
|
|
65
|
-
"fork-version": "
|
|
65
|
+
"fork-version": "dist/cli.js"
|
|
66
66
|
},
|
|
67
67
|
"files": [
|
|
68
68
|
"dist",
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
"build": "tsup",
|
|
76
76
|
"update-json-schema": "node scripts/update-json-schema.js",
|
|
77
77
|
"update-readme-cli-options": "node scripts/update-readme-cli-options.js",
|
|
78
|
-
"lint": "eslint --fix \"src/**/*.ts\"",
|
|
79
|
-
"lint:check": "eslint \"src/**/*.ts\"",
|
|
80
|
-
"lint:format": "prettier --write \"src/**/*.ts\"",
|
|
78
|
+
"lint": "eslint --fix \"src/**/*.{js,ts}\"",
|
|
79
|
+
"lint:check": "eslint \"src/**/*.{js,ts}\"",
|
|
80
|
+
"lint:format": "prettier --write \"src/**/*.{js,ts}\"",
|
|
81
81
|
"typecheck": "tsc --noEmit",
|
|
82
82
|
"test": "vitest",
|
|
83
83
|
"test:cover": "vitest --coverage",
|
|
@@ -86,37 +86,36 @@
|
|
|
86
86
|
"test:cleanup": "rimraf -g ../fork-version.tests/*"
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
|
-
"bundle-require": "5.
|
|
90
|
-
"cheerio": "1.
|
|
89
|
+
"bundle-require": "5.1.0",
|
|
90
|
+
"cheerio": "1.1.2",
|
|
91
91
|
"conventional-changelog": "5.1.0",
|
|
92
92
|
"conventional-changelog-config-spec": "2.1.0",
|
|
93
93
|
"conventional-changelog-conventionalcommits": "7.0.2",
|
|
94
|
-
"
|
|
95
|
-
"esbuild": "0.24.0",
|
|
94
|
+
"esbuild": "0.25.10",
|
|
96
95
|
"glob": "10.3.12",
|
|
97
96
|
"joycon": "3.1.1",
|
|
98
|
-
"jsonc-parser": "
|
|
97
|
+
"jsonc-parser": "3.3.1",
|
|
99
98
|
"meow": "13.2.0",
|
|
100
|
-
"semver": "7.
|
|
101
|
-
"yaml": "2.
|
|
102
|
-
"zod": "
|
|
99
|
+
"semver": "7.7.2",
|
|
100
|
+
"yaml": "2.8.1",
|
|
101
|
+
"zod": "4.1.11"
|
|
103
102
|
},
|
|
104
103
|
"devDependencies": {
|
|
104
|
+
"@eslint/js": "9.36.0",
|
|
105
105
|
"@types/json-schema": "7.0.15",
|
|
106
|
-
"@types/node": "20.
|
|
107
|
-
"@types/semver": "7.
|
|
108
|
-
"@vitest/coverage-v8": "2.
|
|
109
|
-
"@vitest/ui": "2.
|
|
110
|
-
"eslint": "9.
|
|
111
|
-
"eslint-config-prettier": "
|
|
112
|
-
"eslint-plugin-prettier": "5.
|
|
113
|
-
"globals": "
|
|
114
|
-
"prettier": "3.
|
|
106
|
+
"@types/node": "20.19.0",
|
|
107
|
+
"@types/semver": "7.7.1",
|
|
108
|
+
"@vitest/coverage-v8": "3.2.4",
|
|
109
|
+
"@vitest/ui": "3.2.4",
|
|
110
|
+
"eslint": "9.36.0",
|
|
111
|
+
"eslint-config-prettier": "10.1.8",
|
|
112
|
+
"eslint-plugin-prettier": "5.5.4",
|
|
113
|
+
"globals": "16.4.0",
|
|
114
|
+
"prettier": "3.6.2",
|
|
115
115
|
"rimraf": "6.0.1",
|
|
116
|
-
"tsup": "8.
|
|
117
|
-
"typescript": "5.
|
|
118
|
-
"typescript-eslint": "8.
|
|
119
|
-
"vitest": "2.
|
|
120
|
-
"zod-to-json-schema": "3.23.5"
|
|
116
|
+
"tsup": "8.5.0",
|
|
117
|
+
"typescript": "5.9.2",
|
|
118
|
+
"typescript-eslint": "8.45.0",
|
|
119
|
+
"vitest": "3.2.4"
|
|
121
120
|
}
|
|
122
|
-
}
|
|
121
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/schema.js","../src/config/changelog-preset-config.ts","../src/config/defaults.ts","../src/config/detect-git-host.ts","../src/config/load-config.ts","../src/config/merge-files.ts","../src/config/user-config.ts","../src/utils/logger.ts","../src/utils/file-state.ts","../src/files/json-package.ts","../src/files/yaml-package.ts","../src/files/plain-text.ts","../src/files/ms-build-project.ts","../src/files/arm-bicep.ts","../src/files/file-manager.ts","../src/utils/git.ts","../src/utils/release-type.ts","../src/process/version.ts","../src/process/changelog.ts","../src/utils/format-commit-message.ts","../src/process/commit.ts","../src/process/tag.ts"],"names":["z","conventionalChangelogConfigSpec","execFile","JoyCon","parse","fileContent","readFileSync","parsed","bundleRequire","resolve","glob","lstatSync","modify","applyEdits","writeFileSync","parseDocument","cheerio","semver","conventionalRecommendedBump","conventionalChangelog"],"mappings":"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","file":"chunk-EAMGFCWC.cjs","sourcesContent":["import { z } from \"zod\";\n\nexport const ChangelogPresetConfigTypeSchema = z.object({\n\t/**\n\t * The type of commit message.\n\t * @example \"feat\", \"fix\", \"chore\", etc..\n\t */\n\ttype: z.string().describe('The type of commit message, such as \"feat\", \"fix\", \"chore\".'),\n\t/**\n\t * The scope of the commit message.\n\t */\n\tscope: z.string().optional().describe(\"The scope of the commit message.\"),\n\t/**\n\t * The section of the `CHANGELOG` the commit should show up in.\n\t */\n\tsection: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"The section of the `CHANGELOG` the commit should show up in.\"),\n\t/**\n\t * Should show in the generated changelog message?\n\t */\n\thidden: z.boolean().optional().describe(\"Should show in the generated changelog message?\"),\n});\n\nexport const ChangelogPresetConfigSchema = z.object({\n\t/**\n\t * List of explicitly supported commit message types.\n\t */\n\ttypes: z\n\t\t.array(ChangelogPresetConfigTypeSchema)\n\t\t.describe(\"List of explicitly supported commit message types.\"),\n\t/**\n\t * A URL representing a specific commit at a hash.\n\t * @default \"{{host}}/{{owner}}/{{repository}}/commit/{{hash}}\"\n\t */\n\tcommitUrlFormat: z.string().describe(\"A URL representing a specific commit at a hash.\"),\n\t/**\n\t * A URL representing the comparison between two git SHAs.\n\t * @default \"{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...{{currentTag}}\"\n\t */\n\tcompareUrlFormat: z.string().describe(\"A URL representing the comparison between two git SHAs.\"),\n\t/**\n\t * A URL representing the issue format (allowing a different URL format to be swapped in\n\t * for Gitlab, Bitbucket, etc).\n\t * @default \"{{host}}/{{owner}}/{{repository}}/issues/{{id}}\"\n\t */\n\tissueUrlFormat: z.string().describe(\"A URL representing the issue format.\"),\n\t/**\n\t * A URL representing a user's profile on GitHub, Gitlab, etc. This URL is used\n\t * for substituting @eglavin with https://github.com/eglavin in commit messages.\n\t * @default \"{{host}}/{{user}}\"\n\t */\n\tuserUrlFormat: z.string().describe(\"A URL representing a user's profile on GitHub, Gitlab, etc.\"),\n\t/**\n\t * A string to be used to format the auto-generated release commit message.\n\t * @default \"chore(release): {{currentTag}}\"\n\t */\n\treleaseCommitMessageFormat: z\n\t\t.string()\n\t\t.describe(\"A string to be used to format the auto-generated release commit message.\"),\n\t/**\n\t * List of prefixes used to detect references to issues.\n\t * @default [\"#\"]\n\t */\n\tissuePrefixes: z\n\t\t.array(z.string())\n\t\t.describe(\"List of prefixes used to detect references to issues.\"),\n});\n\nexport const ForkConfigSchema = z.object({\n\t// Commands\n\t//\n\n\t/**\n\t * If set, Fork-Version will print the current version and exit.\n\t * @default false\n\t */\n\tinspectVersion: z\n\t\t.boolean()\n\t\t.describe(\"If set, Fork-Version will print the current version and exit.\"),\n\n\t// Options\n\t//\n\n\t/**\n\t * List of the files to be updated.\n\t * @default\n\t * ```js\n\t * [\"bower.json\", \"deno.json\", \"deno.jsonc\", \"jsr.json\", \"jsr.jsonc\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]\n\t * ```\n\t */\n\tfiles: z.array(z.string()).describe(\"List of the files to be updated.\"),\n\t/**\n\t * Glob pattern to match files to be updated.\n\t *\n\t * Internally we're using [glob](https://github.com/isaacs/node-glob) to match files.\n\t *\n\t * Read more about the pattern syntax [here](https://github.com/isaacs/node-glob/tree/v10.3.12?tab=readme-ov-file#glob-primer).\n\t *\n\t * @default undefined\n\t * @example \"*.json\"\n\t */\n\tglob: z.string().optional().describe(\"Glob pattern to match files to be updated.\"),\n\t/**\n\t * The path Fork-Version will run from.\n\t * @default\n\t * ```js\n\t * process.cwd()\n\t * ```\n\t */\n\tpath: z.string().describe('The path Fork-Version will run from. Defaults to \"process.cwd()\".'),\n\t/**\n\t * Name of the changelog file.\n\t * @default \"CHANGELOG.md\"\n\t */\n\tchangelog: z.string().describe('Name of the changelog file. Defaults to \"CHANGELOG.md\".'),\n\t/**\n\t * The header text for the changelog.\n\t * @default\n\t * ```markdown\n\t * # Changelog\n\t *\n\t * All notable changes to this project will be documented in this file. See [fork-version](https://github.com/eglavin/fork-version) for commit guidelines.\n\t * ```\n\t */\n\theader: z.string().describe(\"The header text for the changelog.\"),\n\t/**\n\t * Specify a prefix for the created tag.\n\t *\n\t * For instance if your version tag is prefixed by \"version/\" instead of \"v\" you have to specify\n\t * `tagPrefix: \"version/\"`.\n\t *\n\t * `tagPrefix` can also be used for a monorepo environment where you might want to deploy\n\t * multiple package from the same repository. In this case you can specify a prefix for\n\t * each package:\n\t *\n\t * | Example Value | Tag Created |\n\t * |:-------------------------|:------------------------------|\n\t * | \"\" | `1.2.3` |\n\t * | \"version/\" | `version/1.2.3` |\n\t * | \"@eglavin/fork-version-\" | `@eglavin/fork-version-1.2.3` |\n\t *\n\t * @example \"\", \"version/\", \"@eglavin/fork-version-\"\n\t * @default \"v\"\n\t */\n\ttagPrefix: z.string().describe('Specify a prefix for the created tag. Defaults to \"v\".'),\n\t/**\n\t * Make a pre-release with optional label if given value is a string.\n\t *\n\t * | Example Value | Produced Version |\n\t * |:--------------|:-----------------|\n\t * | true | `1.2.3-0` |\n\t * | \"alpha\" | `1.2.3-alpha-0` |\n\t * | \"beta\" | `1.2.3-beta-0` |\n\t *\n\t * @example true, \"alpha\", \"beta\", \"rc\"\n\t * @default undefined\n\t */\n\tpreRelease: z\n\t\t.string()\n\t\t.or(z.boolean())\n\t\t.optional()\n\t\t.describe(\"Make a pre-release with optional label if given value is a string.\"),\n\t/**\n\t * If set, Fork-Version will use this version instead of trying to determine one.\n\t * @example \"1.0.0\"\n\t * @default undefined\n\t */\n\tcurrentVersion: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"If set, Fork-Version will use this version instead of trying to determine one.\"),\n\t/**\n\t * If set, Fork-Version will attempt to update to this version, instead of incrementing using \"conventional-commit\".\n\t * @example \"2.0.0\"\n\t * @default undefined\n\t */\n\tnextVersion: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'If set, Fork-Version will attempt to update to this version, instead of incrementing using \"conventional-commit\".',\n\t\t),\n\t/**\n\t * Release as increments the version by the specified level. Overrides the default behaviour of \"conventional-commit\".\n\t * @example \"major\", \"minor\", \"patch\"\n\t * @default undefined\n\t */\n\treleaseAs: z\n\t\t.union([z.literal(\"major\"), z.literal(\"minor\"), z.literal(\"patch\")])\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Release as increments the version by the specified level. Overrides the default behaviour of \"conventional-commit\".',\n\t\t),\n\n\t// Flags\n\t//\n\n\t/**\n\t * Don't throw an error if multiple versions are found in the given files.\n\t * @default true\n\t */\n\tallowMultipleVersions: z\n\t\t.boolean()\n\t\t.describe(\"Don't throw an error if multiple versions are found in the given files.\"),\n\t/**\n\t * Commit all changes, not just files updated by Fork-Version.\n\t * @default false\n\t */\n\tcommitAll: z.boolean().describe(\"Commit all changes, not just files updated by Fork-Version.\"),\n\t/**\n\t * By default the conventional-changelog spec will only add commit types of `feat` and `fix` to the generated changelog.\n\t * If this flag is set, all [default commit types](https://github.com/conventional-changelog/conventional-changelog-config-spec/blob/238093090c14bd7d5151eb5316e635623ce633f9/versions/2.2.0/schema.json#L18)\n\t * will be added to the changelog.\n\t * @default false\n\t */\n\tchangelogAll: z\n\t\t.boolean()\n\t\t.describe(\n\t\t\t\"If this flag is set, all default commit types will be added to the changelog, not just `feat` and `fix`.\",\n\t\t),\n\t/**\n\t * Output debug information.\n\t * @default false\n\t */\n\tdebug: z.boolean().describe(\"Output debug information.\"),\n\t/**\n\t * No output will be written to disk or committed.\n\t * @default false\n\t */\n\tdryRun: z.boolean().describe(\"No output will be written to disk or committed.\"),\n\t/**\n\t * Run without logging to the terminal.\n\t * @default false\n\t */\n\tsilent: z.boolean().describe(\"Run without logging to the terminal.\"),\n\t/**\n\t * If unable to find a version in the given files, fallback and attempt to use the latest git tag.\n\t * @default true\n\t */\n\tgitTagFallback: z\n\t\t.boolean()\n\t\t.describe(\n\t\t\t\"If unable to find a version in the given files, fallback and attempt to use the latest git tag. Defaults to true.\",\n\t\t),\n\t/**\n\t * If true, git will sign the commit with the systems GPG key.\n\t * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt Git - GPG Sign Commits}\n\t * @default false\n\t */\n\tsign: z.boolean().describe(\"If true, git will sign the commit with the systems GPG key.\"),\n\t/**\n\t * If true, git will run user defined git hooks before committing.\n\t * @see {@link https://git-scm.com/docs/githooks Git - Git Hooks}\n\t * @default false\n\t */\n\tverify: z.boolean().describe(\"If true, git will run user defined git hooks before committing.\"),\n\n\t// Skip Steps\n\t//\n\n\t/**\n\t * Skip the bump step.\n\t * @default false\n\t */\n\tskipBump: z.boolean().describe(\"Skip the bump step.\"),\n\t/**\n\t * Skip the changelog step.\n\t * @default false\n\t */\n\tskipChangelog: z.boolean().describe(\"Skip the changelog step.\"),\n\t/**\n\t * Skip the commit step.\n\t * @default false\n\t */\n\tskipCommit: z.boolean().describe(\"Skip the commit step.\"),\n\t/**\n\t * Skip the tag step.\n\t * @default false\n\t */\n\tskipTag: z.boolean().describe(\"Skip the tag step.\"),\n\n\t/**\n\t * Override the default \"conventional-changelog-conventionalcommits\" preset configuration.\n\t */\n\tchangelogPresetConfig: ChangelogPresetConfigSchema.partial().describe(\n\t\t'Override the default \"conventional-changelog-conventionalcommits\" preset configuration.',\n\t),\n\n\t/**\n\t * Add a suffix to the release commit message.\n\t * @example \"[skip ci]\"\n\t */\n\treleaseMessageSuffix: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Add a suffix to the release commit message.\"),\n});\n","import { z } from \"zod\";\nimport conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigTypeSchema, ChangelogPresetConfigSchema } from \"./schema\";\nimport type { ForkConfig } from \"./types\";\nimport type { getCliArguments } from \"./cli-arguments\";\nimport type { DetectedGitHost } from \"./detect-git-host\";\n\nexport function getChangelogPresetConfig(\n\tmergedConfig: Partial<ForkConfig> | undefined,\n\tcliArguments: Partial<ReturnType<typeof getCliArguments>>,\n\tdetectedGitHost: DetectedGitHost | null,\n) {\n\tconst preset: { name: string; [_: string]: unknown } = {\n\t\tname: \"conventionalcommits\",\n\t};\n\n\t// First take any default values from the conventional-changelog-config-spec\n\tif (typeof conventionalChangelogConfigSpec.properties === \"object\") {\n\t\tObject.entries(conventionalChangelogConfigSpec.properties).forEach(([key, value]) => {\n\t\t\tif (\"default\" in value && value.default !== undefined) {\n\t\t\t\t// If the user has requested to see all types, we need to remove the hidden flag from the default types.\n\t\t\t\tif (mergedConfig?.changelogAll && key === \"types\") {\n\t\t\t\t\tconst parsedTypes = z.array(ChangelogPresetConfigTypeSchema).safeParse(value.default);\n\n\t\t\t\t\tif (parsedTypes.success) {\n\t\t\t\t\t\tparsedTypes.data.forEach((type) => {\n\t\t\t\t\t\t\tif (!type.section) {\n\t\t\t\t\t\t\t\tdelete type.hidden;\n\t\t\t\t\t\t\t\ttype.section = \"Other Changes\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpreset[key] = parsedTypes.data;\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpreset[key] = value.default;\n\t\t\t}\n\t\t});\n\t}\n\n\t// If we've detected a git host, use the values from the detected host now so that they can\n\t// be overwritten by the users config later\n\tif (detectedGitHost) {\n\t\tObject.entries(detectedGitHost).forEach(([key, value]) => {\n\t\t\tif (value !== undefined) {\n\t\t\t\tpreset[key] = value;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Then overwrite with any values from the users config\n\tif (\n\t\tmergedConfig?.changelogPresetConfig &&\n\t\ttypeof mergedConfig.changelogPresetConfig === \"object\"\n\t) {\n\t\tObject.entries(mergedConfig.changelogPresetConfig).forEach(([key, value]) => {\n\t\t\tif (value !== undefined) {\n\t\t\t\tpreset[key] = value;\n\t\t\t}\n\t\t});\n\t}\n\n\t// If the user has defined a releaseMessageSuffix, append it to the releaseCommitMessageFormat\n\tif (mergedConfig?.releaseMessageSuffix && !cliArguments?.releaseMessageSuffix) {\n\t\tpreset.releaseCommitMessageFormat = `${preset.releaseCommitMessageFormat} ${mergedConfig.releaseMessageSuffix}`;\n\t}\n\n\t// Finally overwrite with any values from the CLI arguments\n\tif (cliArguments?.commitUrlFormat) {\n\t\tpreset.commitUrlFormat = cliArguments.commitUrlFormat;\n\t}\n\tif (cliArguments?.compareUrlFormat) {\n\t\tpreset.compareUrlFormat = cliArguments.compareUrlFormat;\n\t}\n\tif (cliArguments?.issueUrlFormat) {\n\t\tpreset.issueUrlFormat = cliArguments.issueUrlFormat;\n\t}\n\tif (cliArguments?.userUrlFormat) {\n\t\tpreset.userUrlFormat = cliArguments.userUrlFormat;\n\t}\n\tif (cliArguments?.releaseCommitMessageFormat) {\n\t\tpreset.releaseCommitMessageFormat = cliArguments.releaseCommitMessageFormat;\n\t}\n\tif (cliArguments?.releaseMessageSuffix) {\n\t\tpreset.releaseCommitMessageFormat = `${preset.releaseCommitMessageFormat} ${cliArguments.releaseMessageSuffix}`;\n\t}\n\n\treturn ChangelogPresetConfigSchema.passthrough().parse(preset);\n}\n","import type { ForkConfig } from \"./types\";\n\nexport const DEFAULT_CONFIG: ForkConfig = {\n\t// Commands\n\tinspectVersion: false,\n\n\t// Options\n\tfiles: [\n\t\t\"package.json\",\n\t\t\"package-lock.json\",\n\t\t\"npm-shrinkwrap.json\",\n\t\t\"jsr.json\",\n\t\t\"jsr.jsonc\",\n\t\t\"deno.json\",\n\t\t\"deno.jsonc\",\n\t\t\"manifest.json\", // Chrome extensions\n\t\t\"bower.json\",\n\t],\n\tpath: process.cwd(),\n\tchangelog: \"CHANGELOG.md\",\n\theader: `# Changelog\n\nAll notable changes to this project will be documented in this file. See [fork-version](https://github.com/eglavin/fork-version) for commit guidelines.\n`,\n\ttagPrefix: \"v\",\n\n\t// Flags\n\tallowMultipleVersions: true,\n\tcommitAll: false,\n\tchangelogAll: false,\n\tdebug: false,\n\tdryRun: false,\n\tsilent: false,\n\tgitTagFallback: true,\n\tsign: false,\n\tverify: false,\n\n\t// Skip Steps\n\tskipBump: false,\n\tskipChangelog: false,\n\tskipCommit: false,\n\tskipTag: false,\n\n\tchangelogPresetConfig: {},\n};\n","import { execFile } from \"node:child_process\";\n\nexport interface DetectedGitHost {\n\tdetectedGitHost: string;\n\tcommitUrlFormat: string;\n\tcompareUrlFormat: string;\n\tissueUrlFormat: string;\n}\n\n/**\n * Conventional-Changelog already supports the following git hosts:\n * - Github\n * - Gitlab\n * - Bitbucket\n *\n * We want to detect if the user is using another host such as Azure DevOps,\n * if so we need to create the correct URLs so the changelog is generated\n * correctly.\n */\nexport async function detectGitHost(cwd: string): Promise<DetectedGitHost | null> {\n\tconst remoteUrl = await new Promise<string>((onResolve) => {\n\t\texecFile(\"git\", [\"config\", \"--get\", \"remote.origin.url\"], { cwd }, (_error, stdout) => {\n\t\t\tonResolve(stdout ? stdout.trim() : \"\");\n\t\t});\n\t});\n\n\t// A checked out Azure DevOps remote URL looks like one of these:\n\t//\n\t// | Checkout Type | Remote URL |\n\t// | ------------- | --------------------------------------------------------------------------------------- |\n\t// | HTTPS | https://{{ORGANISATION}}@dev.azure.com/{{ORGANISATION}}/{{PROJECT}}/_git/{{REPOSITORY}} |\n\t// | SSH | git@ssh.dev.azure.com:v3/{{ORGANISATION}}/{{PROJECT}}/{{REPOSITORY}} |\n\t//\n\tif (remoteUrl.startsWith(\"https://\") && remoteUrl.includes(\"@dev.azure.com/\")) {\n\t\t/**\n\t\t * [Regex101.com](https://regex101.com/r/fF7HUc/1)\n\t\t */\n\t\tconst match =\n\t\t\t/^https:\\/\\/(?<atorganisation>.*?)@dev.azure.com\\/(?<organisation>.*?)\\/(?<project>.*?)\\/_git\\/(?<repository>.*?)(?:\\.git)?$/.exec(\n\t\t\t\tremoteUrl,\n\t\t\t);\n\n\t\tif (match?.groups) {\n\t\t\tconst { organisation = \"\", project = \"\", repository = \"\" } = match.groups;\n\n\t\t\treturn {\n\t\t\t\tdetectedGitHost: \"Azure\",\n\t\t\t\tcommitUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/commit/{{hash}}`,\n\t\t\t\tcompareUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/branchCompare?baseVersion=GT{{previousTag}}&targetVersion=GT{{currentTag}}`,\n\t\t\t\tissueUrlFormat: `{{host}}/${organisation}/${project}/_workitems/edit/{{id}}`,\n\t\t\t};\n\t\t}\n\t} else if (remoteUrl.startsWith(\"git@ssh.dev.azure.com:\")) {\n\t\t/**\n\t\t * [Regex101.com](https://regex101.com/r/VhNxWr/1)\n\t\t */\n\t\tconst match =\n\t\t\t/^git@ssh.dev.azure.com:v\\d\\/(?<organisation>.*?)\\/(?<project>.*?)\\/(?<repository>.*?)(?:\\.git)?$/.exec(\n\t\t\t\tremoteUrl,\n\t\t\t);\n\n\t\tif (match?.groups) {\n\t\t\tconst { organisation = \"\", project = \"\", repository = \"\" } = match.groups;\n\n\t\t\treturn {\n\t\t\t\tdetectedGitHost: \"Azure\",\n\t\t\t\tcommitUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/commit/{{hash}}`,\n\t\t\t\tcompareUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/branchCompare?baseVersion=GT{{previousTag}}&targetVersion=GT{{currentTag}}`,\n\t\t\t\tissueUrlFormat: `{{host}}/${organisation}/${project}/_workitems/edit/{{id}}`,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { parse } from \"node:path\";\nimport { readFileSync } from \"node:fs\";\nimport JoyCon from \"joycon\";\nimport { bundleRequire } from \"bundle-require\";\n\nimport { ForkConfigSchema } from \"./schema\";\n\n/**\n * Name of the key in the package.json file that contains the users configuration.\n */\nconst PACKAGE_JSON_CONFIG_KEY = \"fork-version\";\n\nexport async function loadConfigFile(cwd: string) {\n\tconst joycon = new JoyCon({\n\t\tcwd,\n\t\tpackageKey: PACKAGE_JSON_CONFIG_KEY,\n\t\tstopDir: parse(cwd).root,\n\t});\n\tconst configFilePath = await joycon.resolve([\n\t\t\"fork.config.ts\",\n\t\t\"fork.config.js\",\n\t\t\"fork.config.cjs\",\n\t\t\"fork.config.mjs\",\n\t\t\"fork.config.json\",\n\t\t\"package.json\",\n\t]);\n\n\tif (!configFilePath) {\n\t\treturn {};\n\t}\n\n\t// Handle json config file.\n\tif (configFilePath.endsWith(\"json\")) {\n\t\tconst fileContent = JSON.parse(readFileSync(configFilePath).toString());\n\n\t\t// Handle package.json config file.\n\t\tif (configFilePath.endsWith(\"package.json\")) {\n\t\t\tif (\n\t\t\t\tfileContent[PACKAGE_JSON_CONFIG_KEY] &&\n\t\t\t\ttypeof fileContent[PACKAGE_JSON_CONFIG_KEY] === \"object\"\n\t\t\t) {\n\t\t\t\tconst parsed = ForkConfigSchema.partial().safeParse(fileContent[PACKAGE_JSON_CONFIG_KEY]);\n\t\t\t\tif (!parsed.success) {\n\t\t\t\t\tthrow new Error(`Validation error in: ${configFilePath}`, { cause: parsed.error });\n\t\t\t\t}\n\t\t\t\treturn parsed.data;\n\t\t\t}\n\n\t\t\treturn {};\n\t\t}\n\n\t\tconst parsed = ForkConfigSchema.partial().safeParse(fileContent);\n\t\tif (!parsed.success) {\n\t\t\tthrow new Error(`Validation error in: ${configFilePath}`, { cause: parsed.error });\n\t\t}\n\t\treturn parsed.data;\n\t}\n\n\t// Otherwise expect config file to use js or ts.\n\tconst fileContent = await bundleRequire({ filepath: configFilePath });\n\n\tconst parsed = ForkConfigSchema.partial().safeParse(fileContent.mod.default || fileContent.mod);\n\tif (!parsed.success) {\n\t\tthrow new Error(`Validation error in: ${configFilePath}`, { cause: parsed.error });\n\t}\n\treturn parsed.data;\n}\n","import { DEFAULT_CONFIG } from \"./defaults\";\n\nexport function mergeFiles(\n\tconfigFiles: string[] | undefined,\n\tcliFiles: string[] | undefined,\n\tglobResults: string[],\n): string[] {\n\tconst listOfFiles = new Set<string>();\n\n\t// Add files from the users config file\n\tif (Array.isArray(configFiles)) {\n\t\tconfigFiles.forEach((file) => listOfFiles.add(file));\n\t}\n\n\t// Add files from the cli arguments\n\tif (Array.isArray(cliFiles)) {\n\t\tcliFiles.forEach((file) => listOfFiles.add(file));\n\t}\n\n\t// Add files from glob results\n\tglobResults.forEach((file) => listOfFiles.add(file));\n\n\t// If the user has defined files use them, otherwise use the default list of files.\n\tif (listOfFiles.size) {\n\t\treturn Array.from(listOfFiles);\n\t}\n\n\treturn DEFAULT_CONFIG.files;\n}\n","import { resolve } from \"node:path\";\nimport { glob } from \"glob\";\n\nimport { getChangelogPresetConfig } from \"./changelog-preset-config\";\nimport { DEFAULT_CONFIG } from \"./defaults\";\nimport { detectGitHost } from \"./detect-git-host\";\nimport { loadConfigFile } from \"./load-config\";\nimport { mergeFiles } from \"./merge-files\";\nimport type { getCliArguments } from \"./cli-arguments\";\nimport type { ForkConfig } from \"./types\";\n\nexport async function getUserConfig(\n\tcliArguments: Partial<ReturnType<typeof getCliArguments>>,\n): Promise<ForkConfig> {\n\tconst cwd = cliArguments.path ? resolve(cliArguments.path) : process.cwd();\n\n\tconst configFile = await loadConfigFile(cwd);\n\n\tconst mergedConfig = {\n\t\t...DEFAULT_CONFIG,\n\t\t...configFile,\n\t\t...cliArguments,\n\t} as ForkConfig;\n\n\tlet globResults: string[] = [];\n\tif (mergedConfig.glob) {\n\t\tglobResults = await glob(mergedConfig.glob, {\n\t\t\tcwd,\n\t\t\tignore: [\"node_modules/**\"],\n\t\t\tnodir: true,\n\t\t});\n\t}\n\n\tconst files = mergeFiles(configFile?.files, cliArguments?.files, globResults);\n\tconst detectedGitHost = await detectGitHost(cwd);\n\tconst changelogPresetConfig = getChangelogPresetConfig(\n\t\tmergedConfig,\n\t\tcliArguments,\n\t\tdetectedGitHost,\n\t);\n\n\treturn {\n\t\t...mergedConfig,\n\n\t\tfiles,\n\t\tpath: cwd,\n\t\tpreRelease:\n\t\t\t// Meow doesn't support multiple flags with the same name, so we need to check both.\n\t\t\tcliArguments.preReleaseTag ?? cliArguments.preRelease ?? configFile.preRelease,\n\t\tchangelogPresetConfig,\n\t};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ForkConfig } from \"../config/types\";\n\nexport class Logger {\n\tdisableLogs = false;\n\n\tconstructor(private config: Pick<ForkConfig, \"silent\" | \"debug\" | \"inspectVersion\">) {\n\t\tthis.log = this.log.bind(this);\n\t\tthis.warn = this.warn.bind(this);\n\t\tthis.error = this.error.bind(this);\n\t\tthis.debug = this.debug.bind(this);\n\n\t\t// Disable logs if silent or inspectVersion is set\n\t\tthis.disableLogs = this.config.silent || this.config.inspectVersion;\n\t}\n\n\tpublic log(...messages: any[]) {\n\t\tif (!this.disableLogs) {\n\t\t\tconsole.log(...messages);\n\t\t}\n\t}\n\n\tpublic warn(...messages: any[]) {\n\t\tif (!this.disableLogs) {\n\t\t\tconsole.warn(...messages);\n\t\t}\n\t}\n\n\tpublic error(...messages: any[]) {\n\t\tif (!this.disableLogs) {\n\t\t\tconsole.error(...messages);\n\t\t}\n\t}\n\n\tpublic debug(...messages: any[]) {\n\t\tif (this.config.debug && !this.disableLogs) {\n\t\t\tconsole.debug(...messages);\n\t\t}\n\t}\n}\n","import { lstatSync } from \"node:fs\";\n\n/**\n * Determine if a file exists.\n * @example\n * ```ts\n * fileExists(\"~/.bashrc\"); // true\n * fileExists(\"~/missing-file.txt\"); // false\n * ```\n */\nexport function fileExists(filePath: string): boolean {\n\ttry {\n\t\treturn lstatSync(filePath).isFile();\n\t} catch (_error) {\n\t\treturn false;\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport {\n\tapplyEdits,\n\ttype JSONPath,\n\tmodify,\n\tparse,\n\ttype ParseError,\n\ttype ParseOptions,\n} from \"jsonc-parser\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/** The things we are interested in, in package.json-like files. */\ninterface PackageJsonish {\n\tversion?: string;\n\tprivate?: unknown;\n\tpackages?: {\n\t\t\"\"?: {\n\t\t\tversion?: string;\n\t\t};\n\t};\n}\n\n/**\n * A json package file should have a version property, like what can be seen\n * in the package.json file in the root of this project.\n *\n * @example\n * ```json\n * {\n * \"name\": \"fork-version\",\n * \"version\": \"1.2.3\",\n * \"private\": true,\n * }\n * ```\n */\nexport class JSONPackage implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\t/** Options for parsing JSON and JSONC files. */\n\tprivate PARSE_OPTIONS: ParseOptions = {\n\t\tallowEmptyContent: false,\n\t\tallowTrailingComma: true,\n\t\tdisallowComments: false,\n\t};\n\n\t/**\n\t * Sets a new string value at the given path in a JSON or JSONC string.\n\t * @param jsonc the JSON or JSONC string (the contents of a file)\n\t * @param jsonPath path to the value to set, as an array of segments\n\t * @param newString string to set the value to\n\t * @returns the JSON or JSONC string with the value set\n\t */\n\tprivate setStringInJsonc(jsonc: string, jsonPath: JSONPath, newString: string): string {\n\t\tconst edits = modify(jsonc, jsonPath, newString, {});\n\t\treturn applyEdits(jsonc, edits);\n\t}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\n\t\t\tconst parseErrors: ParseError[] = [];\n\t\t\tconst parsedJson: PackageJsonish = parse(fileContents, parseErrors, this.PARSE_OPTIONS);\n\t\t\tif (parseErrors.length) {\n\t\t\t\tthis.logger.warn(`[File Manager] Unable to parse JSON: ${fileName}`, parseErrors);\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (parsedJson?.version) {\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: parsedJson.version,\n\n\t\t\t\t\tisPrivate: typeof parsedJson?.private === \"boolean\" ? parsedJson.private : true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.logger.warn(`[File Manager] Unable to determine json version: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\tlet fileContents = readFileSync(fileState.path, \"utf8\");\n\n\t\tconst parseErrors: ParseError[] = [];\n\t\tconst parsedJson: PackageJsonish = parse(fileContents, parseErrors, this.PARSE_OPTIONS);\n\t\tif (parseErrors.length) {\n\t\t\tthis.logger.warn(`[File Manager] Unable to parse JSON: ${fileState.path}`, parseErrors);\n\t\t\treturn;\n\t\t}\n\n\t\tfileContents = this.setStringInJsonc(fileContents, [\"version\"], newVersion);\n\t\tif (parsedJson?.packages?.[\"\"]) {\n\t\t\t// package-lock v2 stores version here too.\n\t\t\tfileContents = this.setStringInJsonc(fileContents, [\"packages\", \"\", \"version\"], newVersion);\n\t\t}\n\n\t\twriteFileSync(fileState.path, fileContents, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\".json\") || fileName.endsWith(\".jsonc\");\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport { parse, parseDocument } from \"yaml\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * A yaml package file should have a version property on the top level, like what can be seen\n * in [this example project](https://github.com/eglavin/wordionary/blob/01ae9b9d604cecdf9d320ed6028a727be5e5349e/pubspec.yaml#L19C1-L19C17).\n *\n * @example\n * ```yaml\n * name: wordionary\n * description: \"A Flutter project.\"\n * publish_to: 'none'\n * version: 1.2.3\n * ```\n */\nexport class YAMLPackage implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\t/**\n\t * If the version is returned with a \"+\" symbol in the value then the version might be from a\n\t * flutter `pubspec.yaml` file, if so we want to retain the input builderNumber by splitting it\n\t * and joining it again later.\n\t */\n\tprivate handleBuildNumber(fileVersion: string): {\n\t\tversion: string;\n\t\tbuilderNumber?: string;\n\t} {\n\t\tconst [version, builderNumber] = fileVersion.split(\"+\");\n\n\t\t// If the builderNumber is an integer then we'll return the split value.\n\t\tif (/^\\d+$/.test(builderNumber)) {\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tbuilderNumber,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tversion: fileVersion,\n\t\t};\n\t}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf-8\");\n\n\t\t\tconst fileVersion = parse(fileContents)?.version;\n\t\t\tif (fileVersion) {\n\t\t\t\tconst parsedVersion = this.handleBuildNumber(fileVersion);\n\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: parsedVersion.version || \"\",\n\t\t\t\t\tbuilderNumber: parsedVersion.builderNumber ?? undefined,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tthis.logger.warn(`[File Manager] Unable to determine yaml version: ${fileName}`);\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string): void {\n\t\tconst fileContents = readFileSync(fileState.path, \"utf8\");\n\t\tconst yamlDocument = parseDocument(fileContents);\n\n\t\tlet newFileVersion = newVersion;\n\t\tif (fileState.builderNumber !== undefined) {\n\t\t\tnewFileVersion += `+${fileState.builderNumber}`; // Reattach builderNumber if previously set.\n\t\t}\n\n\t\tyamlDocument.set(\"version\", newFileVersion);\n\n\t\twriteFileSync(fileState.path, yamlDocument.toString(), \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\".yaml\") || fileName.endsWith(\".yml\");\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * A plain text file will have just the version as the content.\n *\n * @example\n * ```txt\n * 1.2.3\n * ```\n */\nexport class PlainText implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\n\t\t\treturn {\n\t\t\t\tname: fileName,\n\t\t\t\tpath: filePath,\n\t\t\t\tversion: fileContents || \"\",\n\t\t\t};\n\t\t}\n\n\t\tthis.logger.warn(`[File Manager] Unable to determine plain text version: ${fileName}`);\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\twriteFileSync(fileState.path, newVersion, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\"version.txt\");\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport * as cheerio from \"cheerio/slim\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * A ms-build file is an xml file with a version property under the Project > PropertyGroup node.\n *\n * [Microsoft Learn - MSBuild Reference](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild?view=vs-2022)\n *\n * @example\n * ```xml\n * <Project Sdk=\"Microsoft.NET.Sdk\">\n * <PropertyGroup>\n * <Version>1.2.3</Version>\n * </PropertyGroup>\n * </Project>\n * ```\n */\nexport class MSBuildProject implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\t\t\tconst $ = cheerio.load(fileContents, {\n\t\t\t\txmlMode: true,\n\t\t\t\txml: { decodeEntities: false },\n\t\t\t});\n\n\t\t\tconst version = $(\"Project > PropertyGroup > Version\").text();\n\t\t\tif (version) {\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: version,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.logger.warn(`[File Manager] Unable to determine ms-build version: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\tconst fileContents = readFileSync(fileState.path, \"utf8\");\n\t\tconst $ = cheerio.load(fileContents, {\n\t\t\txmlMode: true,\n\t\t\txml: { decodeEntities: false },\n\t\t});\n\n\t\t$(\"Project > PropertyGroup > Version\").text(newVersion);\n\n\t\t// Cheerio doesn't handle self-closing tags well,\n\t\t// so we're manually adding a space before the closing tag.\n\t\tconst updatedContent = $.xml().replaceAll('\"/>', '\" />');\n\n\t\twriteFileSync(fileState.path, updatedContent, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\t// List of known ms-build project file extensions.\n\t\t// https://stackoverflow.com/questions/2007689/is-there-a-standard-file-extension-for-msbuild-files\n\t\treturn (\n\t\t\t[\".csproj\", \".dbproj\", \".esproj\", \".fsproj\", \".props\", \".vbproj\", \".vcxproj\"].findIndex(\n\t\t\t\t(ext) => fileName.endsWith(ext),\n\t\t\t) !== -1\n\t\t);\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * An ARM bicep file with metadata and variable called contentVersion.\n *\n * @example\n * ```bicep\n * metadata contentVersion = '1.2.3.4'\n * var contentVersion string = '1.2.3.4'\n * ```\n */\nexport class ARMBicep implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\t/** https://regex101.com/r/Lriphb/2 */\n\tprivate metadataRegex = /(metadata contentVersion *= *['\"])(?<version>[^'\"]+)(['\"])/;\n\n\t/** https://regex101.com/r/iKCTF9/1 */\n\tprivate varRegex = /(var contentVersion(?: string)? *= *['\"])(?<version>[^'\"]+)(['\"])/;\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\n\t\t\tconst metadataMatch = this.metadataRegex.exec(fileContents);\n\t\t\tconst varMatch = this.varRegex.exec(fileContents);\n\n\t\t\tif (metadataMatch?.groups?.version && varMatch?.groups?.version) {\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: metadataMatch.groups.version,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!metadataMatch) {\n\t\t\t\tthis.logger.warn(\n\t\t\t\t\t`[File Manager] Missing 'metadata contentVersion' in bicep file: ${fileName}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!varMatch) {\n\t\t\t\tthis.logger.warn(`[File Manager] Missing 'var contentVersion' in bicep file: ${fileName}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\tconst fileContents = readFileSync(fileState.path, \"utf8\");\n\n\t\tconst updatedContent = fileContents\n\t\t\t.replace(this.metadataRegex, `$1${newVersion}$3`)\n\t\t\t.replace(this.varRegex, `$1${newVersion}$3`);\n\n\t\twriteFileSync(fileState.path, updatedContent, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\".bicep\");\n\t}\n}\n","import { JSONPackage } from \"./json-package\";\nimport { YAMLPackage } from \"./yaml-package\";\nimport { PlainText } from \"./plain-text\";\nimport { MSBuildProject } from \"./ms-build-project\";\nimport { ARMBicep } from \"./arm-bicep\";\n\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface FileState {\n\tname: string;\n\tpath: string;\n\tversion: string;\n\n\t[other: string]: unknown;\n}\n\nexport interface IFileManager {\n\tread(fileName: string): FileState | undefined;\n\twrite(fileState: FileState, newVersion: string): void;\n\tisSupportedFile(fileName: string): boolean;\n}\n\nexport class FileManager {\n\tprivate JSONPackage: JSONPackage;\n\tprivate YAMLPackage: YAMLPackage;\n\tprivate PlainText: PlainText;\n\tprivate MSBuildProject: MSBuildProject;\n\tprivate ARMBicep: ARMBicep;\n\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {\n\t\tthis.JSONPackage = new JSONPackage(config, logger);\n\t\tthis.YAMLPackage = new YAMLPackage(config, logger);\n\t\tthis.PlainText = new PlainText(config, logger);\n\t\tthis.MSBuildProject = new MSBuildProject(config, logger);\n\t\tthis.ARMBicep = new ARMBicep(config, logger);\n\t}\n\n\t/**\n\t * Get the state from the given file name.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.read(\"package.json\");\n\t * ```\n\t *\n\t * @returns\n\t * ```json\n\t * { \"name\": \"package.json\", \"path\": \"/path/to/package.json\", \"version\": \"1.2.3\", \"isPrivate\": true }\n\t * ```\n\t */\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst _fileName = fileName.toLowerCase();\n\n\t\tif (this.JSONPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.JSONPackage.read(fileName);\n\t\t}\n\n\t\tif (this.YAMLPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.YAMLPackage.read(fileName);\n\t\t}\n\n\t\tif (this.PlainText.isSupportedFile(_fileName)) {\n\t\t\treturn this.PlainText.read(fileName);\n\t\t}\n\n\t\tif (this.MSBuildProject.isSupportedFile(_fileName)) {\n\t\t\treturn this.MSBuildProject.read(fileName);\n\t\t}\n\n\t\tif (this.ARMBicep.isSupportedFile(_fileName)) {\n\t\t\treturn this.ARMBicep.read(fileName);\n\t\t}\n\n\t\tthis.logger.error(`[File Manager] Unsupported file: ${fileName}`);\n\t}\n\n\t/**\n\t * Write the new version to the given file.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.write(\n\t * { name: \"package.json\", path: \"/path/to/package.json\", version: \"1.2.2\" },\n\t * \"1.2.3\"\n\t * );\n\t * ```\n\t */\n\tpublic write(fileState: FileState, newVersion: string): void {\n\t\tif (this.config.dryRun) {\n\t\t\treturn;\n\t\t}\n\t\tconst _fileName = fileState.name.toLowerCase();\n\n\t\tif (this.JSONPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.JSONPackage.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.YAMLPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.YAMLPackage.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.PlainText.isSupportedFile(_fileName)) {\n\t\t\treturn this.PlainText.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.MSBuildProject.isSupportedFile(_fileName)) {\n\t\t\treturn this.MSBuildProject.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.ARMBicep.isSupportedFile(_fileName)) {\n\t\t\treturn this.ARMBicep.write(fileState, newVersion);\n\t\t}\n\n\t\tthis.logger.error(`[File Manager] Unsupported file: ${fileState.path}`);\n\t}\n}\n","import { execFile } from \"node:child_process\";\nimport semver from \"semver\";\nimport type { ForkConfig } from \"../config/types\";\n\nexport class Git {\n\tconstructor(private config: Pick<ForkConfig, \"path\" | \"dryRun\">) {\n\t\tthis.add = this.add.bind(this);\n\t\tthis.commit = this.commit.bind(this);\n\t\tthis.tag = this.tag.bind(this);\n\t\tthis.isIgnored = this.isIgnored.bind(this);\n\t\tthis.getCurrentBranchName = this.getCurrentBranchName.bind(this);\n\t\tthis.getTags = this.getTags.bind(this);\n\t\tthis.getLatestTag = this.getLatestTag.bind(this);\n\t}\n\n\tprivate async execGit(command: string, args: string[]): Promise<string> {\n\t\treturn new Promise((onResolve, onReject) => {\n\t\t\texecFile(\n\t\t\t\t\"git\",\n\t\t\t\t[command, ...args],\n\t\t\t\t{\n\t\t\t\t\tcwd: this.config.path,\n\t\t\t\t\tmaxBuffer: Infinity,\n\t\t\t\t},\n\t\t\t\t(error, stdout, stderr) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tonReject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonResolve(stdout ? stdout : stderr);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * - [git-add Documentation](https://git-scm.com/docs/git-add)\n\t */\n\tpublic async add(...args: (string | undefined)[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.execGit(\"add\", args.filter(Boolean) as string[]);\n\t}\n\n\t/**\n\t * - [git-commit Documentation](https://git-scm.com/docs/git-commit)\n\t */\n\tpublic async commit(...args: (string | undefined)[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.execGit(\"commit\", args.filter(Boolean) as string[]);\n\t}\n\n\t/**\n\t * - [git-tag Documentation](https://git-scm.com/docs/git-tag)\n\t */\n\tpublic async tag(...args: (string | undefined)[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.execGit(\"tag\", args.filter(Boolean) as string[]);\n\t}\n\n\t/**\n\t * - [git-check-ignore Documentation](https://git-scm.com/docs/git-check-ignore)\n\t */\n\tpublic async isIgnored(file: string): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.execGit(\"check-ignore\", [\"--no-index\", file]);\n\n\t\t\treturn true;\n\t\t} catch (_error) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic async getCurrentBranchName(): Promise<string> {\n\t\treturn (await this.execGit(\"rev-parse\", [\"--abbrev-ref\", \"HEAD\"])).trim();\n\t}\n\n\t/**\n\t * `getTags` returns valid semver version tags in order of the commit history.\n\t *\n\t * Using `git log` to get the commit history, we then parse the tags from the\n\t * commit details which is expected to be in the following format:\n\t * @example\n\t * ```txt\n\t * commit 3841b1d05750d42197fe958e3d8e06df378a842d (HEAD -> main, tag: 1.0.2)\n\t * Author: Username <username@example.com>\n\t * Date: Sat Nov 9 15:00:00 2024 +0000\n\t *\n\t * chore(release): 1.2.3\n\t * ```\n\t *\n\t * - [Functionality extracted from the conventional-changelog - git-semver-tags project](https://github.com/conventional-changelog/conventional-changelog/blob/fac8045242099c016f5f3905e54e02b7d466bd7b/packages/git-semver-tags/index.js)\n\t * - [conventional-changelog git-semver-tags MIT Licence](https://github.com/conventional-changelog/conventional-changelog/blob/fac8045242099c016f5f3905e54e02b7d466bd7b/packages/git-semver-tags/LICENSE.md)\n\t */\n\tpublic async getTags(tagPrefix: string | undefined): Promise<string[]> {\n\t\tconst logOutput = await this.execGit(\"log\", [\"--decorate\", \"--no-color\", \"--date-order\"]);\n\n\t\t/**\n\t\t * Search for tags in the following formats:\n\t\t * @example \"tag: 1.2.3,\" or \"tag: 1.2.3)\"\n\t\t */\n\t\tconst TAG_REGEX = /tag:\\s*(.+?)[,)]/gi;\n\n\t\tconst tags: string[] = [];\n\t\tlet match: RegExpExecArray | null = null;\n\t\tlet tag: string;\n\t\tlet tagWithoutPrefix: string;\n\n\t\tfor (const logOutputLine of logOutput.split(\"\\n\")) {\n\t\t\twhile ((match = TAG_REGEX.exec(logOutputLine))) {\n\t\t\t\ttag = match[1];\n\n\t\t\t\tif (tagPrefix) {\n\t\t\t\t\tif (tag.startsWith(tagPrefix)) {\n\t\t\t\t\t\ttagWithoutPrefix = tag.replace(tagPrefix, \"\");\n\n\t\t\t\t\t\tif (semver.valid(tagWithoutPrefix)) {\n\t\t\t\t\t\t\ttags.push(tag);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (semver.valid(tag)) {\n\t\t\t\t\ttags.push(tag);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn tags;\n\t}\n\n\tpublic async getLatestTag(tagPrefix: string | undefined): Promise<string> {\n\t\tconst tags = await this.getTags(tagPrefix);\n\t\tif (!tags.length) return \"\";\n\n\t\tconst cleanedTags = [];\n\t\tfor (const tag of tags) {\n\t\t\tconst cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), \"\"));\n\t\t\tif (cleanedTag) {\n\t\t\t\tcleanedTags.push(cleanedTag);\n\t\t\t}\n\t\t}\n\n\t\treturn cleanedTags.sort(semver.rcompare)[0];\n\t}\n}\n","import semver, { type ReleaseType } from \"semver\";\n\n/**\n * Get the priority of given type.\n * @example\n * - \"patch\" => 0\n * - \"minor\" => 1\n * - \"major\" => 2\n */\nfunction getPriority(type?: string): number {\n\treturn [\"patch\", \"minor\", \"major\"].indexOf(type ?? \"\");\n}\n\n/**\n * Get the given versions highest state.\n * @example\n * - \"patch\"\n * - \"minor\"\n * - \"major\"\n */\nfunction getVersionType(version: string): \"patch\" | \"minor\" | \"major\" | undefined {\n\tconst parseVersion = semver.parse(version);\n\n\tif (parseVersion?.major) {\n\t\treturn \"major\";\n\t} else if (parseVersion?.minor) {\n\t\treturn \"minor\";\n\t} else if (parseVersion?.patch) {\n\t\treturn \"patch\";\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Get the recommended release type for the given version depending on if\n * the user asks for a prerelease with or without a tag.\n * ```js\n * getReleaseType(\"patch\", \"1.0.0\", false) => \"patch\"\n * getReleaseType(\"major\", \"0.0.0-beta\", \"beta\") => \"premajor\"\n * ```\n */\nexport function getReleaseType(\n\treleaseType: \"major\" | \"minor\" | \"patch\",\n\tcurrentVersion: string,\n\tpreReleaseTag?: string | boolean,\n): ReleaseType {\n\tif (!preReleaseTag) {\n\t\treturn releaseType;\n\t}\n\n\tconst currentVersionsIsPreRelease = Array.isArray(semver.prerelease(currentVersion));\n\tif (currentVersionsIsPreRelease) {\n\t\tconst currentReleaseType = getVersionType(currentVersion);\n\n\t\tif (\n\t\t\tcurrentReleaseType === releaseType ||\n\t\t\tgetPriority(currentReleaseType) > getPriority(releaseType)\n\t\t) {\n\t\t\treturn \"prerelease\";\n\t\t}\n\t}\n\n\treturn `pre${releaseType}`;\n}\n","import semver, { type ReleaseType } from \"semver\";\nimport conventionalRecommendedBump from \"conventional-recommended-bump\";\n\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { FileManager, FileState } from \"../files/file-manager\";\nimport type { Logger } from \"../utils/logger\";\nimport type { Git } from \"../utils/git\";\n\nexport interface CurrentVersion {\n\tversion: string;\n\tfiles: FileState[];\n}\n\nexport async function getCurrentVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n\tfileManager: FileManager,\n\tfilesToUpdate: string[],\n): Promise<CurrentVersion> {\n\tconst files: FileState[] = [];\n\tconst versions = new Set<string>();\n\n\tfor (const file of filesToUpdate) {\n\t\tif (await git.isIgnored(file)) {\n\t\t\tlogger.debug(`[Git Ignored] ${file}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst fileState = fileManager.read(file);\n\t\tif (fileState) {\n\t\t\tfiles.push(fileState);\n\n\t\t\tif (!config.currentVersion) {\n\t\t\t\tversions.add(fileState.version);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.currentVersion) {\n\t\tversions.add(config.currentVersion);\n\t}\n\n\t// If we still don't have a version, try to get the latest git tag\n\tif (versions.size === 0 && config.gitTagFallback) {\n\t\tconst version = await git.getLatestTag(config.tagPrefix);\n\t\tif (version) {\n\t\t\tlogger.warn(`Using latest git tag as fallback`);\n\t\t\tversions.add(version);\n\t\t}\n\t}\n\n\tif (versions.size === 0) {\n\t\tthrow new Error(\"Unable to find current version\");\n\t} else if (versions.size > 1) {\n\t\tif (!config.allowMultipleVersions) {\n\t\t\tthrow new Error(\"Found multiple versions\");\n\t\t}\n\t\tlogger.warn(\n\t\t\t`Found multiple versions (${Array.from(versions).join(\", \")}), using the higher semver version`,\n\t\t);\n\t}\n\n\tconst currentVersion = semver.rsort(Array.from(versions))[0];\n\n\t// If we're just inspecting the version, output the version and exit\n\tif (config.inspectVersion) {\n\t\tconsole.log(currentVersion);\n\t\tprocess.exit(0);\n\t}\n\n\tlogger.log(`Current version: ${currentVersion}`);\n\treturn {\n\t\tfiles,\n\t\tversion: currentVersion,\n\t};\n}\n\nexport interface NextVersion {\n\tversion: string;\n\tlevel?: number;\n\tpreMajor?: boolean;\n\treason?: string;\n\treleaseType?: ReleaseType;\n}\n\nexport async function getNextVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tcurrentVersion: string,\n): Promise<NextVersion> {\n\tif (config.skipBump) {\n\t\tlogger.warn(`Skip bump, using ${currentVersion} as the next version`);\n\t\treturn {\n\t\t\tversion: currentVersion,\n\t\t};\n\t}\n\n\tif (config.nextVersion && semver.valid(config.nextVersion)) {\n\t\tlogger.log(`Next version: ${config.nextVersion}`);\n\t\treturn {\n\t\t\tversion: config.nextVersion,\n\t\t};\n\t}\n\n\tconst isPreMajor = semver.lt(currentVersion, \"1.0.0\");\n\n\tlet recommendedBump: Awaited<ReturnType<typeof conventionalRecommendedBump>>;\n\tif (config.releaseAs) {\n\t\trecommendedBump = {\n\t\t\treleaseType: config.releaseAs,\n\t\t\tlevel: -1,\n\t\t\treason: \"User defined\",\n\t\t};\n\t} else {\n\t\ttry {\n\t\t\trecommendedBump = await conventionalRecommendedBump({\n\t\t\t\tpreset: {\n\t\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\t\tpreMajor: isPreMajor,\n\t\t\t\t},\n\t\t\t\tpath: config.path,\n\t\t\t\ttagPrefix: config.tagPrefix,\n\t\t\t\tcwd: config.path,\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthrow new Error(`[conventional-recommended-bump] Unable to determine next version`, {\n\t\t\t\tcause,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (recommendedBump.releaseType) {\n\t\tconst releaseType = getReleaseType(\n\t\t\trecommendedBump.releaseType,\n\t\t\tcurrentVersion,\n\t\t\tconfig.preRelease,\n\t\t);\n\t\tconst nextVersion =\n\t\t\tsemver.inc(\n\t\t\t\tcurrentVersion,\n\t\t\t\treleaseType,\n\t\t\t\ttypeof config.preRelease === \"string\" ? config.preRelease : undefined,\n\t\t\t) ?? \"\";\n\n\t\tlogger.log(`Next version: ${nextVersion} (${releaseType})`);\n\t\treturn {\n\t\t\t...recommendedBump,\n\t\t\tpreMajor: isPreMajor,\n\t\t\treleaseType,\n\t\t\tversion: nextVersion,\n\t\t};\n\t}\n\n\tthrow new Error(\"Unable to find next version\");\n}\n","import { resolve } from \"node:path\";\nimport { writeFileSync, readFileSync } from \"node:fs\";\nimport conventionalChangelog from \"conventional-changelog\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\n\n/**\n * Matches the following changelog header formats:\n * - `## [1.2.3]`\n * - `<a name=\"1.2.3\"></a>`\n */\nconst RELEASE_PATTERN = /(^#+ \\[?[0-9]+\\.[0-9]+\\.[0-9]+|<a name=)/m;\n\n/**\n * Get the existing changelog content from the latest release onwards.\n * @see {@link RELEASE_PATTERN}\n */\nfunction getOldReleaseContent(filePath: string, exists: boolean): string {\n\tif (exists) {\n\t\tconst fileContents = readFileSync(filePath, \"utf-8\");\n\t\tconst oldContentStart = fileContents.search(RELEASE_PATTERN);\n\n\t\tif (oldContentStart !== -1) {\n\t\t\treturn fileContents.substring(oldContentStart);\n\t\t}\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Generate the new changelog content for this release.\n */\nfunction getNewReleaseContent(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<string> {\n\treturn new Promise<string>((onResolve) => {\n\t\tlet newContent = \"\";\n\n\t\tconventionalChangelog(\n\t\t\t{\n\t\t\t\tpreset: {\n\t\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\t},\n\t\t\t\ttagPrefix: config.tagPrefix,\n\t\t\t\twarn: (...message: string[]) => logger.debug(\"[conventional-changelog] \", ...message),\n\t\t\t\tcwd: config.path,\n\t\t\t},\n\t\t\t{\n\t\t\t\tversion: nextVersion,\n\t\t\t},\n\t\t\t{\n\t\t\t\tmerges: null,\n\t\t\t\tpath: config.path,\n\t\t\t},\n\t\t)\n\t\t\t.on(\"error\", (cause) => {\n\t\t\t\tthrow new Error(\"[conventional-changelog] Unable to parse changes\", { cause });\n\t\t\t})\n\t\t\t.on(\"data\", (chunk) => {\n\t\t\t\tnewContent += chunk.toString();\n\t\t\t})\n\t\t\t.on(\"end\", () => {\n\t\t\t\tonResolve(newContent);\n\t\t\t});\n\t});\n}\n\nexport async function updateChangelog(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<void> {\n\tif (config.skipChangelog) {\n\t\tlogger.warn(\"Skip changelog update\");\n\t\treturn;\n\t}\n\n\tif (config.header.search(RELEASE_PATTERN) !== -1) {\n\t\t// Need to ensure the header doesn't contain the release pattern\n\t\tthrow new Error(\"Header cannot contain release pattern\");\n\t}\n\n\t// Create the changelog file if it doesn't exist\n\tconst changelogPath = resolve(config.path, config.changelog);\n\n\tif (!config.dryRun && !fileExists(changelogPath)) {\n\t\tlogger.log(`Creating changelog: ${changelogPath}`);\n\t\twriteFileSync(changelogPath, \"\\n\", \"utf8\");\n\t} else {\n\t\tlogger.log(`Updating changelog: ${changelogPath}`);\n\t}\n\n\tconst oldContent = getOldReleaseContent(changelogPath, fileExists(changelogPath));\n\tconst newContent = await getNewReleaseContent(config, logger, nextVersion);\n\n\tif (!config.dryRun && newContent) {\n\t\twriteFileSync(\n\t\t\tchangelogPath,\n\t\t\t`${config.header}\n${newContent}\n${oldContent}\n`.trim(),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n}\n","/**\n * Formats the commit message by replacing the `{{currentTag}}` placeholder\n * globally with the new version.\n *\n * Falls back to `chore(release): {{currentTag}}` if message is argument is falsy.\n */\nexport function formatCommitMessage(message: string | undefined, version: string): string {\n\tif (!message) {\n\t\tmessage = \"chore(release): {{currentTag}}\";\n\t}\n\n\treturn message.replace(new RegExp(\"{{currentTag}}\", \"g\"), version);\n}\n","import { resolve } from \"node:path\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { FileState } from \"../files/file-manager\";\nimport type { Logger } from \"../utils/logger\";\nimport type { Git } from \"../utils/git\";\n\nexport async function commitChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n\tfiles: FileState[],\n\tnextVersion: string,\n): Promise<void> {\n\tif (config.skipCommit) {\n\t\tlogger.warn(\"Skip commit\");\n\t\treturn;\n\t}\n\n\tlogger.log(\"Committing changes\");\n\n\tconst filesToCommit: string[] = [];\n\tif (fileExists(resolve(config.path, config.changelog))) {\n\t\tfilesToCommit.push(resolve(config.path, config.changelog));\n\t}\n\tfor (const file of files) {\n\t\tfilesToCommit.push(file.path);\n\t}\n\n\t// If there are no files to commit don't continue.\n\tif (filesToCommit.length === 0) {\n\t\treturn;\n\t}\n\n\tif (config.commitAll) {\n\t\tawait git.add(\"--all\");\n\t} else {\n\t\tawait git.add(...filesToCommit);\n\t}\n\n\tconst shouldVerify = config.verify ? undefined : \"--no-verify\";\n\tconst shouldSign = config.sign ? \"--gpg-sign\" : \"--no-gpg-sign\";\n\n\tawait git.commit(\n\t\tshouldVerify,\n\t\tshouldSign,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n}\n","import { formatCommitMessage } from \"../utils/format-commit-message\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { Git } from \"../utils/git\";\n\nexport async function tagChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n\tnextVersion: string,\n): Promise<void> {\n\tif (config.skipTag) {\n\t\tlogger.warn(\"Skip tag creation\");\n\t\treturn;\n\t}\n\n\t/** @example \"v1.2.3\" or \"version/1.2.3\" */\n\tconst tag = `${config.tagPrefix}${nextVersion}`;\n\n\tlogger.log(`Creating tag: ${tag}`);\n\n\tconst shouldSign = config.sign ? \"--sign\" : \"--no-sign\";\n\n\tawait git.tag(\n\t\tshouldSign,\n\t\t\"--annotate\",\n\t\ttag,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/schema.js","../src/config/changelog-preset-config.ts","../src/config/defaults.ts","../src/config/detect-git-host.ts","../src/config/load-config.ts","../src/config/merge-files.ts","../src/config/user-config.ts","../src/utils/logger.ts","../src/utils/file-state.ts","../src/files/json-package.ts","../src/files/yaml-package.ts","../src/files/plain-text.ts","../src/files/ms-build-project.ts","../src/files/arm-bicep.ts","../src/files/file-manager.ts","../src/utils/git.ts","../src/utils/release-type.ts","../src/process/version.ts","../src/process/changelog.ts","../src/utils/format-commit-message.ts","../src/process/commit.ts","../src/process/tag.ts"],"names":["z","fileContent","parsed","resolve","readFileSync","parse","writeFileSync","execFile","semver"],"mappings":"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","file":"chunk-RLGF46N7.js","sourcesContent":["import { z } from \"zod\";\n\nexport const ChangelogPresetConfigTypeSchema = z.object({\n\t/**\n\t * The type of commit message.\n\t * @example \"feat\", \"fix\", \"chore\", etc..\n\t */\n\ttype: z.string().describe('The type of commit message, such as \"feat\", \"fix\", \"chore\".'),\n\t/**\n\t * The scope of the commit message.\n\t */\n\tscope: z.string().optional().describe(\"The scope of the commit message.\"),\n\t/**\n\t * The section of the `CHANGELOG` the commit should show up in.\n\t */\n\tsection: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"The section of the `CHANGELOG` the commit should show up in.\"),\n\t/**\n\t * Should show in the generated changelog message?\n\t */\n\thidden: z.boolean().optional().describe(\"Should show in the generated changelog message?\"),\n});\n\nexport const ChangelogPresetConfigSchema = z.object({\n\t/**\n\t * List of explicitly supported commit message types.\n\t */\n\ttypes: z\n\t\t.array(ChangelogPresetConfigTypeSchema)\n\t\t.describe(\"List of explicitly supported commit message types.\"),\n\t/**\n\t * A URL representing a specific commit at a hash.\n\t * @default \"{{host}}/{{owner}}/{{repository}}/commit/{{hash}}\"\n\t */\n\tcommitUrlFormat: z.string().describe(\"A URL representing a specific commit at a hash.\"),\n\t/**\n\t * A URL representing the comparison between two git SHAs.\n\t * @default \"{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...{{currentTag}}\"\n\t */\n\tcompareUrlFormat: z.string().describe(\"A URL representing the comparison between two git SHAs.\"),\n\t/**\n\t * A URL representing the issue format (allowing a different URL format to be swapped in\n\t * for Gitlab, Bitbucket, etc).\n\t * @default \"{{host}}/{{owner}}/{{repository}}/issues/{{id}}\"\n\t */\n\tissueUrlFormat: z.string().describe(\"A URL representing the issue format.\"),\n\t/**\n\t * A URL representing a user's profile on GitHub, Gitlab, etc. This URL is used\n\t * for substituting @eglavin with https://github.com/eglavin in commit messages.\n\t * @default \"{{host}}/{{user}}\"\n\t */\n\tuserUrlFormat: z.string().describe(\"A URL representing a user's profile on GitHub, Gitlab, etc.\"),\n\t/**\n\t * A string to be used to format the auto-generated release commit message.\n\t * @default \"chore(release): {{currentTag}}\"\n\t */\n\treleaseCommitMessageFormat: z\n\t\t.string()\n\t\t.describe(\"A string to be used to format the auto-generated release commit message.\"),\n\t/**\n\t * List of prefixes used to detect references to issues.\n\t * @default [\"#\"]\n\t */\n\tissuePrefixes: z\n\t\t.array(z.string())\n\t\t.describe(\"List of prefixes used to detect references to issues.\"),\n});\n\nexport const ForkConfigSchema = z.object({\n\t// Commands\n\t//\n\n\t/**\n\t * If set, Fork-Version will print the current version and exit.\n\t * @default false\n\t */\n\tinspectVersion: z\n\t\t.boolean()\n\t\t.describe(\"If set, Fork-Version will print the current version and exit.\"),\n\n\t// Options\n\t//\n\n\t/**\n\t * List of the files to be updated.\n\t * @default\n\t * ```js\n\t * [\"bower.json\", \"deno.json\", \"deno.jsonc\", \"jsr.json\", \"jsr.jsonc\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]\n\t * ```\n\t */\n\tfiles: z.array(z.string()).describe(\"List of the files to be updated.\"),\n\t/**\n\t * Glob pattern to match files to be updated.\n\t *\n\t * Internally we're using [glob](https://github.com/isaacs/node-glob) to match files.\n\t *\n\t * Read more about the pattern syntax [here](https://github.com/isaacs/node-glob/tree/v10.3.12?tab=readme-ov-file#glob-primer).\n\t *\n\t * @default undefined\n\t * @example \"*.json\"\n\t */\n\tglob: z.string().optional().describe(\"Glob pattern to match files to be updated.\"),\n\t/**\n\t * The path Fork-Version will run from.\n\t * @default\n\t * ```js\n\t * process.cwd()\n\t * ```\n\t */\n\tpath: z.string().describe('The path Fork-Version will run from. Defaults to \"process.cwd()\".'),\n\t/**\n\t * Name of the changelog file.\n\t * @default \"CHANGELOG.md\"\n\t */\n\tchangelog: z.string().describe('Name of the changelog file. Defaults to \"CHANGELOG.md\".'),\n\t/**\n\t * The header text for the changelog.\n\t * @default\n\t * ```markdown\n\t * # Changelog\n\t *\n\t * All notable changes to this project will be documented in this file. See [fork-version](https://github.com/eglavin/fork-version) for commit guidelines.\n\t * ```\n\t */\n\theader: z.string().describe(\"The header text for the changelog.\"),\n\t/**\n\t * Specify a prefix for the created tag.\n\t *\n\t * For instance if your version tag is prefixed by \"version/\" instead of \"v\" you have to specify\n\t * `tagPrefix: \"version/\"`.\n\t *\n\t * `tagPrefix` can also be used for a monorepo environment where you might want to deploy\n\t * multiple package from the same repository. In this case you can specify a prefix for\n\t * each package:\n\t *\n\t * | Example Value | Tag Created |\n\t * |:-------------------------|:------------------------------|\n\t * | \"\" | `1.2.3` |\n\t * | \"version/\" | `version/1.2.3` |\n\t * | \"@eglavin/fork-version-\" | `@eglavin/fork-version-1.2.3` |\n\t *\n\t * @example \"\", \"version/\", \"@eglavin/fork-version-\"\n\t * @default \"v\"\n\t */\n\ttagPrefix: z.string().describe('Specify a prefix for the created tag. Defaults to \"v\".'),\n\t/**\n\t * Make a pre-release with optional label if given value is a string.\n\t *\n\t * | Example Value | Produced Version |\n\t * |:--------------|:-----------------|\n\t * | true | `1.2.3-0` |\n\t * | \"alpha\" | `1.2.3-alpha-0` |\n\t * | \"beta\" | `1.2.3-beta-0` |\n\t *\n\t * @example true, \"alpha\", \"beta\", \"rc\"\n\t * @default undefined\n\t */\n\tpreRelease: z\n\t\t.string()\n\t\t.or(z.boolean())\n\t\t.optional()\n\t\t.describe(\"Make a pre-release with optional label if given value is a string.\"),\n\t/**\n\t * If set, Fork-Version will use this version instead of trying to determine one.\n\t * @example \"1.0.0\"\n\t * @default undefined\n\t */\n\tcurrentVersion: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"If set, Fork-Version will use this version instead of trying to determine one.\"),\n\t/**\n\t * If set, Fork-Version will attempt to update to this version, instead of incrementing using \"conventional-commit\".\n\t * @example \"2.0.0\"\n\t * @default undefined\n\t */\n\tnextVersion: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'If set, Fork-Version will attempt to update to this version, instead of incrementing using \"conventional-commit\".',\n\t\t),\n\t/**\n\t * Release as increments the version by the specified level. Overrides the default behaviour of \"conventional-commit\".\n\t * @example \"major\", \"minor\", \"patch\"\n\t * @default undefined\n\t */\n\treleaseAs: z\n\t\t.union([z.literal(\"major\"), z.literal(\"minor\"), z.literal(\"patch\")])\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Release as increments the version by the specified level. Overrides the default behaviour of \"conventional-commit\".',\n\t\t),\n\n\t// Flags\n\t//\n\n\t/**\n\t * Don't throw an error if multiple versions are found in the given files.\n\t * @default true\n\t */\n\tallowMultipleVersions: z\n\t\t.boolean()\n\t\t.describe(\"Don't throw an error if multiple versions are found in the given files.\"),\n\t/**\n\t * Commit all changes, not just files updated by Fork-Version.\n\t * @default false\n\t */\n\tcommitAll: z.boolean().describe(\"Commit all changes, not just files updated by Fork-Version.\"),\n\t/**\n\t * By default the conventional-changelog spec will only add commit types of `feat` and `fix` to the generated changelog.\n\t * If this flag is set, all [default commit types](https://github.com/conventional-changelog/conventional-changelog-config-spec/blob/238093090c14bd7d5151eb5316e635623ce633f9/versions/2.2.0/schema.json#L18)\n\t * will be added to the changelog.\n\t * @default false\n\t */\n\tchangelogAll: z\n\t\t.boolean()\n\t\t.describe(\n\t\t\t\"If this flag is set, all default commit types will be added to the changelog, not just `feat` and `fix`.\",\n\t\t),\n\t/**\n\t * Output debug information.\n\t * @default false\n\t */\n\tdebug: z.boolean().describe(\"Output debug information.\"),\n\t/**\n\t * No output will be written to disk or committed.\n\t * @default false\n\t */\n\tdryRun: z.boolean().describe(\"No output will be written to disk or committed.\"),\n\t/**\n\t * Run without logging to the terminal.\n\t * @default false\n\t */\n\tsilent: z.boolean().describe(\"Run without logging to the terminal.\"),\n\t/**\n\t * If unable to find a version in the given files, fallback and attempt to use the latest git tag.\n\t * @default true\n\t */\n\tgitTagFallback: z\n\t\t.boolean()\n\t\t.describe(\n\t\t\t\"If unable to find a version in the given files, fallback and attempt to use the latest git tag. Defaults to true.\",\n\t\t),\n\t/**\n\t * If true, git will sign the commit with the systems GPG key.\n\t * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt Git - GPG Sign Commits}\n\t * @default false\n\t */\n\tsign: z.boolean().describe(\"If true, git will sign the commit with the systems GPG key.\"),\n\t/**\n\t * If true, git will run user defined git hooks before committing.\n\t * @see {@link https://git-scm.com/docs/githooks Git - Git Hooks}\n\t * @default false\n\t */\n\tverify: z.boolean().describe(\"If true, git will run user defined git hooks before committing.\"),\n\n\t// Skip Steps\n\t//\n\n\t/**\n\t * Skip the bump step.\n\t * @default false\n\t */\n\tskipBump: z.boolean().describe(\"Skip the bump step.\"),\n\t/**\n\t * Skip the changelog step.\n\t * @default false\n\t */\n\tskipChangelog: z.boolean().describe(\"Skip the changelog step.\"),\n\t/**\n\t * Skip the commit step.\n\t * @default false\n\t */\n\tskipCommit: z.boolean().describe(\"Skip the commit step.\"),\n\t/**\n\t * Skip the tag step.\n\t * @default false\n\t */\n\tskipTag: z.boolean().describe(\"Skip the tag step.\"),\n\n\t/**\n\t * Override the default \"conventional-changelog-conventionalcommits\" preset configuration.\n\t */\n\tchangelogPresetConfig: ChangelogPresetConfigSchema.partial().describe(\n\t\t'Override the default \"conventional-changelog-conventionalcommits\" preset configuration.',\n\t),\n\n\t/**\n\t * Add a suffix to the release commit message.\n\t * @example \"[skip ci]\"\n\t */\n\treleaseMessageSuffix: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Add a suffix to the release commit message.\"),\n});\n","import { z } from \"zod\";\nimport conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigTypeSchema, ChangelogPresetConfigSchema } from \"./schema\";\nimport type { ForkConfig } from \"./types\";\nimport type { getCliArguments } from \"./cli-arguments\";\nimport type { DetectedGitHost } from \"./detect-git-host\";\n\nexport function getChangelogPresetConfig(\n\tmergedConfig: Partial<ForkConfig> | undefined,\n\tcliArguments: Partial<ReturnType<typeof getCliArguments>>,\n\tdetectedGitHost: DetectedGitHost | null,\n) {\n\tconst preset: { name: string; [_: string]: unknown } = {\n\t\tname: \"conventionalcommits\",\n\t};\n\n\t// First take any default values from the conventional-changelog-config-spec\n\tif (typeof conventionalChangelogConfigSpec.properties === \"object\") {\n\t\tObject.entries(conventionalChangelogConfigSpec.properties).forEach(([key, value]) => {\n\t\t\tif (\"default\" in value && value.default !== undefined) {\n\t\t\t\t// If the user has requested to see all types, we need to remove the hidden flag from the default types.\n\t\t\t\tif (mergedConfig?.changelogAll && key === \"types\") {\n\t\t\t\t\tconst parsedTypes = z.array(ChangelogPresetConfigTypeSchema).safeParse(value.default);\n\n\t\t\t\t\tif (parsedTypes.success) {\n\t\t\t\t\t\tparsedTypes.data.forEach((type) => {\n\t\t\t\t\t\t\tif (!type.section) {\n\t\t\t\t\t\t\t\tdelete type.hidden;\n\t\t\t\t\t\t\t\ttype.section = \"Other Changes\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpreset[key] = parsedTypes.data;\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpreset[key] = value.default;\n\t\t\t}\n\t\t});\n\t}\n\n\t// If we've detected a git host, use the values from the detected host now so that they can\n\t// be overwritten by the users config later\n\tif (detectedGitHost) {\n\t\tObject.entries(detectedGitHost).forEach(([key, value]) => {\n\t\t\tif (value !== undefined) {\n\t\t\t\tpreset[key] = value;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Then overwrite with any values from the users config\n\tif (\n\t\tmergedConfig?.changelogPresetConfig &&\n\t\ttypeof mergedConfig.changelogPresetConfig === \"object\"\n\t) {\n\t\tObject.entries(mergedConfig.changelogPresetConfig).forEach(([key, value]) => {\n\t\t\tif (value !== undefined) {\n\t\t\t\tpreset[key] = value;\n\t\t\t}\n\t\t});\n\t}\n\n\t// If the user has defined a releaseMessageSuffix, append it to the releaseCommitMessageFormat\n\tif (mergedConfig?.releaseMessageSuffix && !cliArguments?.releaseMessageSuffix) {\n\t\tpreset.releaseCommitMessageFormat = `${preset.releaseCommitMessageFormat} ${mergedConfig.releaseMessageSuffix}`;\n\t}\n\n\t// Finally overwrite with any values from the CLI arguments\n\tif (cliArguments?.commitUrlFormat) {\n\t\tpreset.commitUrlFormat = cliArguments.commitUrlFormat;\n\t}\n\tif (cliArguments?.compareUrlFormat) {\n\t\tpreset.compareUrlFormat = cliArguments.compareUrlFormat;\n\t}\n\tif (cliArguments?.issueUrlFormat) {\n\t\tpreset.issueUrlFormat = cliArguments.issueUrlFormat;\n\t}\n\tif (cliArguments?.userUrlFormat) {\n\t\tpreset.userUrlFormat = cliArguments.userUrlFormat;\n\t}\n\tif (cliArguments?.releaseCommitMessageFormat) {\n\t\tpreset.releaseCommitMessageFormat = cliArguments.releaseCommitMessageFormat;\n\t}\n\tif (cliArguments?.releaseMessageSuffix) {\n\t\tpreset.releaseCommitMessageFormat = `${preset.releaseCommitMessageFormat} ${cliArguments.releaseMessageSuffix}`;\n\t}\n\n\treturn ChangelogPresetConfigSchema.passthrough().parse(preset);\n}\n","import type { ForkConfig } from \"./types\";\n\nexport const DEFAULT_CONFIG: ForkConfig = {\n\t// Commands\n\tinspectVersion: false,\n\n\t// Options\n\tfiles: [\n\t\t\"package.json\",\n\t\t\"package-lock.json\",\n\t\t\"npm-shrinkwrap.json\",\n\t\t\"jsr.json\",\n\t\t\"jsr.jsonc\",\n\t\t\"deno.json\",\n\t\t\"deno.jsonc\",\n\t\t\"manifest.json\", // Chrome extensions\n\t\t\"bower.json\",\n\t],\n\tpath: process.cwd(),\n\tchangelog: \"CHANGELOG.md\",\n\theader: `# Changelog\n\nAll notable changes to this project will be documented in this file. See [fork-version](https://github.com/eglavin/fork-version) for commit guidelines.\n`,\n\ttagPrefix: \"v\",\n\n\t// Flags\n\tallowMultipleVersions: true,\n\tcommitAll: false,\n\tchangelogAll: false,\n\tdebug: false,\n\tdryRun: false,\n\tsilent: false,\n\tgitTagFallback: true,\n\tsign: false,\n\tverify: false,\n\n\t// Skip Steps\n\tskipBump: false,\n\tskipChangelog: false,\n\tskipCommit: false,\n\tskipTag: false,\n\n\tchangelogPresetConfig: {},\n};\n","import { execFile } from \"node:child_process\";\n\nexport interface DetectedGitHost {\n\tdetectedGitHost: string;\n\tcommitUrlFormat: string;\n\tcompareUrlFormat: string;\n\tissueUrlFormat: string;\n}\n\n/**\n * Conventional-Changelog already supports the following git hosts:\n * - Github\n * - Gitlab\n * - Bitbucket\n *\n * We want to detect if the user is using another host such as Azure DevOps,\n * if so we need to create the correct URLs so the changelog is generated\n * correctly.\n */\nexport async function detectGitHost(cwd: string): Promise<DetectedGitHost | null> {\n\tconst remoteUrl = await new Promise<string>((onResolve) => {\n\t\texecFile(\"git\", [\"config\", \"--get\", \"remote.origin.url\"], { cwd }, (_error, stdout) => {\n\t\t\tonResolve(stdout ? stdout.trim() : \"\");\n\t\t});\n\t});\n\n\t// A checked out Azure DevOps remote URL looks like one of these:\n\t//\n\t// | Checkout Type | Remote URL |\n\t// | ------------- | --------------------------------------------------------------------------------------- |\n\t// | HTTPS | https://{{ORGANISATION}}@dev.azure.com/{{ORGANISATION}}/{{PROJECT}}/_git/{{REPOSITORY}} |\n\t// | SSH | git@ssh.dev.azure.com:v3/{{ORGANISATION}}/{{PROJECT}}/{{REPOSITORY}} |\n\t//\n\tif (remoteUrl.startsWith(\"https://\") && remoteUrl.includes(\"@dev.azure.com/\")) {\n\t\t/**\n\t\t * [Regex101.com](https://regex101.com/r/fF7HUc/1)\n\t\t */\n\t\tconst match =\n\t\t\t/^https:\\/\\/(?<atorganisation>.*?)@dev.azure.com\\/(?<organisation>.*?)\\/(?<project>.*?)\\/_git\\/(?<repository>.*?)(?:\\.git)?$/.exec(\n\t\t\t\tremoteUrl,\n\t\t\t);\n\n\t\tif (match?.groups) {\n\t\t\tconst { organisation = \"\", project = \"\", repository = \"\" } = match.groups;\n\n\t\t\treturn {\n\t\t\t\tdetectedGitHost: \"Azure\",\n\t\t\t\tcommitUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/commit/{{hash}}`,\n\t\t\t\tcompareUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/branchCompare?baseVersion=GT{{previousTag}}&targetVersion=GT{{currentTag}}`,\n\t\t\t\tissueUrlFormat: `{{host}}/${organisation}/${project}/_workitems/edit/{{id}}`,\n\t\t\t};\n\t\t}\n\t} else if (remoteUrl.startsWith(\"git@ssh.dev.azure.com:\")) {\n\t\t/**\n\t\t * [Regex101.com](https://regex101.com/r/VhNxWr/1)\n\t\t */\n\t\tconst match =\n\t\t\t/^git@ssh.dev.azure.com:v\\d\\/(?<organisation>.*?)\\/(?<project>.*?)\\/(?<repository>.*?)(?:\\.git)?$/.exec(\n\t\t\t\tremoteUrl,\n\t\t\t);\n\n\t\tif (match?.groups) {\n\t\t\tconst { organisation = \"\", project = \"\", repository = \"\" } = match.groups;\n\n\t\t\treturn {\n\t\t\t\tdetectedGitHost: \"Azure\",\n\t\t\t\tcommitUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/commit/{{hash}}`,\n\t\t\t\tcompareUrlFormat: `{{host}}/${organisation}/${project}/_git/${repository}/branchCompare?baseVersion=GT{{previousTag}}&targetVersion=GT{{currentTag}}`,\n\t\t\t\tissueUrlFormat: `{{host}}/${organisation}/${project}/_workitems/edit/{{id}}`,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { parse } from \"node:path\";\nimport { readFileSync } from \"node:fs\";\nimport JoyCon from \"joycon\";\nimport { bundleRequire } from \"bundle-require\";\n\nimport { ForkConfigSchema } from \"./schema\";\n\n/**\n * Name of the key in the package.json file that contains the users configuration.\n */\nconst PACKAGE_JSON_CONFIG_KEY = \"fork-version\";\n\nexport async function loadConfigFile(cwd: string) {\n\tconst joycon = new JoyCon({\n\t\tcwd,\n\t\tpackageKey: PACKAGE_JSON_CONFIG_KEY,\n\t\tstopDir: parse(cwd).root,\n\t});\n\tconst configFilePath = await joycon.resolve([\n\t\t\"fork.config.ts\",\n\t\t\"fork.config.js\",\n\t\t\"fork.config.cjs\",\n\t\t\"fork.config.mjs\",\n\t\t\"fork.config.json\",\n\t\t\"package.json\",\n\t]);\n\n\tif (!configFilePath) {\n\t\treturn {};\n\t}\n\n\t// Handle json config file.\n\tif (configFilePath.endsWith(\"json\")) {\n\t\tconst fileContent = JSON.parse(readFileSync(configFilePath).toString());\n\n\t\t// Handle package.json config file.\n\t\tif (configFilePath.endsWith(\"package.json\")) {\n\t\t\tif (\n\t\t\t\tfileContent[PACKAGE_JSON_CONFIG_KEY] &&\n\t\t\t\ttypeof fileContent[PACKAGE_JSON_CONFIG_KEY] === \"object\"\n\t\t\t) {\n\t\t\t\tconst parsed = ForkConfigSchema.partial().safeParse(fileContent[PACKAGE_JSON_CONFIG_KEY]);\n\t\t\t\tif (!parsed.success) {\n\t\t\t\t\tthrow new Error(`Validation error in: ${configFilePath}`, { cause: parsed.error });\n\t\t\t\t}\n\t\t\t\treturn parsed.data;\n\t\t\t}\n\n\t\t\treturn {};\n\t\t}\n\n\t\tconst parsed = ForkConfigSchema.partial().safeParse(fileContent);\n\t\tif (!parsed.success) {\n\t\t\tthrow new Error(`Validation error in: ${configFilePath}`, { cause: parsed.error });\n\t\t}\n\t\treturn parsed.data;\n\t}\n\n\t// Otherwise expect config file to use js or ts.\n\tconst fileContent = await bundleRequire({ filepath: configFilePath });\n\n\tconst parsed = ForkConfigSchema.partial().safeParse(fileContent.mod.default || fileContent.mod);\n\tif (!parsed.success) {\n\t\tthrow new Error(`Validation error in: ${configFilePath}`, { cause: parsed.error });\n\t}\n\treturn parsed.data;\n}\n","import { DEFAULT_CONFIG } from \"./defaults\";\n\nexport function mergeFiles(\n\tconfigFiles: string[] | undefined,\n\tcliFiles: string[] | undefined,\n\tglobResults: string[],\n): string[] {\n\tconst listOfFiles = new Set<string>();\n\n\t// Add files from the users config file\n\tif (Array.isArray(configFiles)) {\n\t\tconfigFiles.forEach((file) => listOfFiles.add(file));\n\t}\n\n\t// Add files from the cli arguments\n\tif (Array.isArray(cliFiles)) {\n\t\tcliFiles.forEach((file) => listOfFiles.add(file));\n\t}\n\n\t// Add files from glob results\n\tglobResults.forEach((file) => listOfFiles.add(file));\n\n\t// If the user has defined files use them, otherwise use the default list of files.\n\tif (listOfFiles.size) {\n\t\treturn Array.from(listOfFiles);\n\t}\n\n\treturn DEFAULT_CONFIG.files;\n}\n","import { resolve } from \"node:path\";\nimport { glob } from \"glob\";\n\nimport { getChangelogPresetConfig } from \"./changelog-preset-config\";\nimport { DEFAULT_CONFIG } from \"./defaults\";\nimport { detectGitHost } from \"./detect-git-host\";\nimport { loadConfigFile } from \"./load-config\";\nimport { mergeFiles } from \"./merge-files\";\nimport type { getCliArguments } from \"./cli-arguments\";\nimport type { ForkConfig } from \"./types\";\n\nexport async function getUserConfig(\n\tcliArguments: Partial<ReturnType<typeof getCliArguments>>,\n): Promise<ForkConfig> {\n\tconst cwd = cliArguments.path ? resolve(cliArguments.path) : process.cwd();\n\n\tconst configFile = await loadConfigFile(cwd);\n\n\tconst mergedConfig = {\n\t\t...DEFAULT_CONFIG,\n\t\t...configFile,\n\t\t...cliArguments,\n\t} as ForkConfig;\n\n\tlet globResults: string[] = [];\n\tif (mergedConfig.glob) {\n\t\tglobResults = await glob(mergedConfig.glob, {\n\t\t\tcwd,\n\t\t\tignore: [\"node_modules/**\"],\n\t\t\tnodir: true,\n\t\t});\n\t}\n\n\tconst files = mergeFiles(configFile?.files, cliArguments?.files, globResults);\n\tconst detectedGitHost = await detectGitHost(cwd);\n\tconst changelogPresetConfig = getChangelogPresetConfig(\n\t\tmergedConfig,\n\t\tcliArguments,\n\t\tdetectedGitHost,\n\t);\n\n\treturn {\n\t\t...mergedConfig,\n\n\t\tfiles,\n\t\tpath: cwd,\n\t\tpreRelease:\n\t\t\t// Meow doesn't support multiple flags with the same name, so we need to check both.\n\t\t\tcliArguments.preReleaseTag ?? cliArguments.preRelease ?? configFile.preRelease,\n\t\tchangelogPresetConfig,\n\t};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ForkConfig } from \"../config/types\";\n\nexport class Logger {\n\tdisableLogs = false;\n\n\tconstructor(private config: Pick<ForkConfig, \"silent\" | \"debug\" | \"inspectVersion\">) {\n\t\tthis.log = this.log.bind(this);\n\t\tthis.warn = this.warn.bind(this);\n\t\tthis.error = this.error.bind(this);\n\t\tthis.debug = this.debug.bind(this);\n\n\t\t// Disable logs if silent or inspectVersion is set\n\t\tthis.disableLogs = this.config.silent || this.config.inspectVersion;\n\t}\n\n\tpublic log(...messages: any[]) {\n\t\tif (!this.disableLogs) {\n\t\t\tconsole.log(...messages);\n\t\t}\n\t}\n\n\tpublic warn(...messages: any[]) {\n\t\tif (!this.disableLogs) {\n\t\t\tconsole.warn(...messages);\n\t\t}\n\t}\n\n\tpublic error(...messages: any[]) {\n\t\tif (!this.disableLogs) {\n\t\t\tconsole.error(...messages);\n\t\t}\n\t}\n\n\tpublic debug(...messages: any[]) {\n\t\tif (this.config.debug && !this.disableLogs) {\n\t\t\tconsole.debug(...messages);\n\t\t}\n\t}\n}\n","import { lstatSync } from \"node:fs\";\n\n/**\n * Determine if a file exists.\n * @example\n * ```ts\n * fileExists(\"~/.bashrc\"); // true\n * fileExists(\"~/missing-file.txt\"); // false\n * ```\n */\nexport function fileExists(filePath: string): boolean {\n\ttry {\n\t\treturn lstatSync(filePath).isFile();\n\t} catch (_error) {\n\t\treturn false;\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport {\n\tapplyEdits,\n\ttype JSONPath,\n\tmodify,\n\tparse,\n\ttype ParseError,\n\ttype ParseOptions,\n} from \"jsonc-parser\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/** The things we are interested in, in package.json-like files. */\ninterface PackageJsonish {\n\tversion?: string;\n\tprivate?: unknown;\n\tpackages?: {\n\t\t\"\"?: {\n\t\t\tversion?: string;\n\t\t};\n\t};\n}\n\n/**\n * A json package file should have a version property, like what can be seen\n * in the package.json file in the root of this project.\n *\n * @example\n * ```json\n * {\n * \"name\": \"fork-version\",\n * \"version\": \"1.2.3\",\n * \"private\": true,\n * }\n * ```\n */\nexport class JSONPackage implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\t/** Options for parsing JSON and JSONC files. */\n\tprivate PARSE_OPTIONS: ParseOptions = {\n\t\tallowEmptyContent: false,\n\t\tallowTrailingComma: true,\n\t\tdisallowComments: false,\n\t};\n\n\t/**\n\t * Sets a new string value at the given path in a JSON or JSONC string.\n\t * @param jsonc the JSON or JSONC string (the contents of a file)\n\t * @param jsonPath path to the value to set, as an array of segments\n\t * @param newString string to set the value to\n\t * @returns the JSON or JSONC string with the value set\n\t */\n\tprivate setStringInJsonc(jsonc: string, jsonPath: JSONPath, newString: string): string {\n\t\tconst edits = modify(jsonc, jsonPath, newString, {});\n\t\treturn applyEdits(jsonc, edits);\n\t}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\n\t\t\tconst parseErrors: ParseError[] = [];\n\t\t\tconst parsedJson: PackageJsonish = parse(fileContents, parseErrors, this.PARSE_OPTIONS);\n\t\t\tif (parseErrors.length) {\n\t\t\t\tthis.logger.warn(`[File Manager] Unable to parse JSON: ${fileName}`, parseErrors);\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (parsedJson?.version) {\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: parsedJson.version,\n\n\t\t\t\t\tisPrivate: typeof parsedJson?.private === \"boolean\" ? parsedJson.private : true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.logger.warn(`[File Manager] Unable to determine json version: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\tlet fileContents = readFileSync(fileState.path, \"utf8\");\n\n\t\tconst parseErrors: ParseError[] = [];\n\t\tconst parsedJson: PackageJsonish = parse(fileContents, parseErrors, this.PARSE_OPTIONS);\n\t\tif (parseErrors.length) {\n\t\t\tthis.logger.warn(`[File Manager] Unable to parse JSON: ${fileState.path}`, parseErrors);\n\t\t\treturn;\n\t\t}\n\n\t\tfileContents = this.setStringInJsonc(fileContents, [\"version\"], newVersion);\n\t\tif (parsedJson?.packages?.[\"\"]) {\n\t\t\t// package-lock v2 stores version here too.\n\t\t\tfileContents = this.setStringInJsonc(fileContents, [\"packages\", \"\", \"version\"], newVersion);\n\t\t}\n\n\t\twriteFileSync(fileState.path, fileContents, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\".json\") || fileName.endsWith(\".jsonc\");\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport { parse, parseDocument } from \"yaml\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * A yaml package file should have a version property on the top level, like what can be seen\n * in [this example project](https://github.com/eglavin/wordionary/blob/01ae9b9d604cecdf9d320ed6028a727be5e5349e/pubspec.yaml#L19C1-L19C17).\n *\n * @example\n * ```yaml\n * name: wordionary\n * description: \"A Flutter project.\"\n * publish_to: 'none'\n * version: 1.2.3\n * ```\n */\nexport class YAMLPackage implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\t/**\n\t * If the version is returned with a \"+\" symbol in the value then the version might be from a\n\t * flutter `pubspec.yaml` file, if so we want to retain the input builderNumber by splitting it\n\t * and joining it again later.\n\t */\n\tprivate handleBuildNumber(fileVersion: string): {\n\t\tversion: string;\n\t\tbuilderNumber?: string;\n\t} {\n\t\tconst [version, builderNumber] = fileVersion.split(\"+\");\n\n\t\t// If the builderNumber is an integer then we'll return the split value.\n\t\tif (/^\\d+$/.test(builderNumber)) {\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tbuilderNumber,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tversion: fileVersion,\n\t\t};\n\t}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf-8\");\n\n\t\t\tconst fileVersion = parse(fileContents)?.version;\n\t\t\tif (fileVersion) {\n\t\t\t\tconst parsedVersion = this.handleBuildNumber(fileVersion);\n\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: parsedVersion.version || \"\",\n\t\t\t\t\tbuilderNumber: parsedVersion.builderNumber ?? undefined,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tthis.logger.warn(`[File Manager] Unable to determine yaml version: ${fileName}`);\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string): void {\n\t\tconst fileContents = readFileSync(fileState.path, \"utf8\");\n\t\tconst yamlDocument = parseDocument(fileContents);\n\n\t\tlet newFileVersion = newVersion;\n\t\tif (fileState.builderNumber !== undefined) {\n\t\t\tnewFileVersion += `+${fileState.builderNumber}`; // Reattach builderNumber if previously set.\n\t\t}\n\n\t\tyamlDocument.set(\"version\", newFileVersion);\n\n\t\twriteFileSync(fileState.path, yamlDocument.toString(), \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\".yaml\") || fileName.endsWith(\".yml\");\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * A plain text file will have just the version as the content.\n *\n * @example\n * ```txt\n * 1.2.3\n * ```\n */\nexport class PlainText implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\n\t\t\treturn {\n\t\t\t\tname: fileName,\n\t\t\t\tpath: filePath,\n\t\t\t\tversion: fileContents || \"\",\n\t\t\t};\n\t\t}\n\n\t\tthis.logger.warn(`[File Manager] Unable to determine plain text version: ${fileName}`);\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\twriteFileSync(fileState.path, newVersion, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\"version.txt\");\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport * as cheerio from \"cheerio/slim\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * A ms-build file is an xml file with a version property under the Project > PropertyGroup node.\n *\n * [Microsoft Learn - MSBuild Reference](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild?view=vs-2022)\n *\n * @example\n * ```xml\n * <Project Sdk=\"Microsoft.NET.Sdk\">\n * <PropertyGroup>\n * <Version>1.2.3</Version>\n * </PropertyGroup>\n * </Project>\n * ```\n */\nexport class MSBuildProject implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\t\t\tconst $ = cheerio.load(fileContents, {\n\t\t\t\txmlMode: true,\n\t\t\t\txml: { decodeEntities: false },\n\t\t\t});\n\n\t\t\tconst version = $(\"Project > PropertyGroup > Version\").text();\n\t\t\tif (version) {\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: version,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.logger.warn(`[File Manager] Unable to determine ms-build version: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\tconst fileContents = readFileSync(fileState.path, \"utf8\");\n\t\tconst $ = cheerio.load(fileContents, {\n\t\t\txmlMode: true,\n\t\t\txml: { decodeEntities: false },\n\t\t});\n\n\t\t$(\"Project > PropertyGroup > Version\").text(newVersion);\n\n\t\t// Cheerio doesn't handle self-closing tags well,\n\t\t// so we're manually adding a space before the closing tag.\n\t\tconst updatedContent = $.xml().replaceAll('\"/>', '\" />');\n\n\t\twriteFileSync(fileState.path, updatedContent, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\t// List of known ms-build project file extensions.\n\t\t// https://stackoverflow.com/questions/2007689/is-there-a-standard-file-extension-for-msbuild-files\n\t\treturn (\n\t\t\t[\".csproj\", \".dbproj\", \".esproj\", \".fsproj\", \".props\", \".vbproj\", \".vcxproj\"].findIndex(\n\t\t\t\t(ext) => fileName.endsWith(ext),\n\t\t\t) !== -1\n\t\t);\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\n\n/**\n * An ARM bicep file with metadata and variable called contentVersion.\n *\n * @example\n * ```bicep\n * metadata contentVersion = '1.2.3.4'\n * var contentVersion string = '1.2.3.4'\n * ```\n */\nexport class ARMBicep implements IFileManager {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {}\n\n\t/** https://regex101.com/r/Lriphb/2 */\n\tprivate metadataRegex = /(metadata contentVersion *= *['\"])(?<version>[^'\"]+)(['\"])/;\n\n\t/** https://regex101.com/r/iKCTF9/1 */\n\tprivate varRegex = /(var contentVersion(?: string)? *= *['\"])(?<version>[^'\"]+)(['\"])/;\n\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst filePath = resolve(this.config.path, fileName);\n\n\t\tif (fileExists(filePath)) {\n\t\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\n\t\t\tconst metadataMatch = this.metadataRegex.exec(fileContents);\n\t\t\tconst varMatch = this.varRegex.exec(fileContents);\n\n\t\t\tif (metadataMatch?.groups?.version && varMatch?.groups?.version) {\n\t\t\t\treturn {\n\t\t\t\t\tname: fileName,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tversion: metadataMatch.groups.version,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!metadataMatch) {\n\t\t\t\tthis.logger.warn(\n\t\t\t\t\t`[File Manager] Missing 'metadata contentVersion' in bicep file: ${fileName}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!varMatch) {\n\t\t\t\tthis.logger.warn(`[File Manager] Missing 'var contentVersion' in bicep file: ${fileName}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic write(fileState: FileState, newVersion: string) {\n\t\tconst fileContents = readFileSync(fileState.path, \"utf8\");\n\n\t\tconst updatedContent = fileContents\n\t\t\t.replace(this.metadataRegex, `$1${newVersion}$3`)\n\t\t\t.replace(this.varRegex, `$1${newVersion}$3`);\n\n\t\twriteFileSync(fileState.path, updatedContent, \"utf8\");\n\t}\n\n\tpublic isSupportedFile(fileName: string): boolean {\n\t\treturn fileName.endsWith(\".bicep\");\n\t}\n}\n","import { JSONPackage } from \"./json-package\";\nimport { YAMLPackage } from \"./yaml-package\";\nimport { PlainText } from \"./plain-text\";\nimport { MSBuildProject } from \"./ms-build-project\";\nimport { ARMBicep } from \"./arm-bicep\";\n\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface FileState {\n\tname: string;\n\tpath: string;\n\tversion: string;\n\n\t[other: string]: unknown;\n}\n\nexport interface IFileManager {\n\tread(fileName: string): FileState | undefined;\n\twrite(fileState: FileState, newVersion: string): void;\n\tisSupportedFile(fileName: string): boolean;\n}\n\nexport class FileManager {\n\tprivate JSONPackage: JSONPackage;\n\tprivate YAMLPackage: YAMLPackage;\n\tprivate PlainText: PlainText;\n\tprivate MSBuildProject: MSBuildProject;\n\tprivate ARMBicep: ARMBicep;\n\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {\n\t\tthis.JSONPackage = new JSONPackage(config, logger);\n\t\tthis.YAMLPackage = new YAMLPackage(config, logger);\n\t\tthis.PlainText = new PlainText(config, logger);\n\t\tthis.MSBuildProject = new MSBuildProject(config, logger);\n\t\tthis.ARMBicep = new ARMBicep(config, logger);\n\t}\n\n\t/**\n\t * Get the state from the given file name.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.read(\"package.json\");\n\t * ```\n\t *\n\t * @returns\n\t * ```json\n\t * { \"name\": \"package.json\", \"path\": \"/path/to/package.json\", \"version\": \"1.2.3\", \"isPrivate\": true }\n\t * ```\n\t */\n\tpublic read(fileName: string): FileState | undefined {\n\t\tconst _fileName = fileName.toLowerCase();\n\n\t\tif (this.JSONPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.JSONPackage.read(fileName);\n\t\t}\n\n\t\tif (this.YAMLPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.YAMLPackage.read(fileName);\n\t\t}\n\n\t\tif (this.PlainText.isSupportedFile(_fileName)) {\n\t\t\treturn this.PlainText.read(fileName);\n\t\t}\n\n\t\tif (this.MSBuildProject.isSupportedFile(_fileName)) {\n\t\t\treturn this.MSBuildProject.read(fileName);\n\t\t}\n\n\t\tif (this.ARMBicep.isSupportedFile(_fileName)) {\n\t\t\treturn this.ARMBicep.read(fileName);\n\t\t}\n\n\t\tthis.logger.error(`[File Manager] Unsupported file: ${fileName}`);\n\t}\n\n\t/**\n\t * Write the new version to the given file.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.write(\n\t * { name: \"package.json\", path: \"/path/to/package.json\", version: \"1.2.2\" },\n\t * \"1.2.3\"\n\t * );\n\t * ```\n\t */\n\tpublic write(fileState: FileState, newVersion: string): void {\n\t\tif (this.config.dryRun) {\n\t\t\treturn;\n\t\t}\n\t\tconst _fileName = fileState.name.toLowerCase();\n\n\t\tif (this.JSONPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.JSONPackage.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.YAMLPackage.isSupportedFile(_fileName)) {\n\t\t\treturn this.YAMLPackage.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.PlainText.isSupportedFile(_fileName)) {\n\t\t\treturn this.PlainText.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.MSBuildProject.isSupportedFile(_fileName)) {\n\t\t\treturn this.MSBuildProject.write(fileState, newVersion);\n\t\t}\n\n\t\tif (this.ARMBicep.isSupportedFile(_fileName)) {\n\t\t\treturn this.ARMBicep.write(fileState, newVersion);\n\t\t}\n\n\t\tthis.logger.error(`[File Manager] Unsupported file: ${fileState.path}`);\n\t}\n}\n","import { execFile } from \"node:child_process\";\nimport semver from \"semver\";\nimport type { ForkConfig } from \"../config/types\";\n\nexport class Git {\n\tconstructor(private config: Pick<ForkConfig, \"path\" | \"dryRun\">) {\n\t\tthis.add = this.add.bind(this);\n\t\tthis.commit = this.commit.bind(this);\n\t\tthis.tag = this.tag.bind(this);\n\t\tthis.isIgnored = this.isIgnored.bind(this);\n\t\tthis.getCurrentBranchName = this.getCurrentBranchName.bind(this);\n\t\tthis.getTags = this.getTags.bind(this);\n\t\tthis.getLatestTag = this.getLatestTag.bind(this);\n\t}\n\n\tprivate async execGit(command: string, args: string[]): Promise<string> {\n\t\treturn new Promise((onResolve, onReject) => {\n\t\t\texecFile(\n\t\t\t\t\"git\",\n\t\t\t\t[command, ...args],\n\t\t\t\t{\n\t\t\t\t\tcwd: this.config.path,\n\t\t\t\t\tmaxBuffer: Infinity,\n\t\t\t\t},\n\t\t\t\t(error, stdout, stderr) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tonReject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonResolve(stdout ? stdout : stderr);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * - [git-add Documentation](https://git-scm.com/docs/git-add)\n\t */\n\tpublic async add(...args: (string | undefined)[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.execGit(\"add\", args.filter(Boolean) as string[]);\n\t}\n\n\t/**\n\t * - [git-commit Documentation](https://git-scm.com/docs/git-commit)\n\t */\n\tpublic async commit(...args: (string | undefined)[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.execGit(\"commit\", args.filter(Boolean) as string[]);\n\t}\n\n\t/**\n\t * - [git-tag Documentation](https://git-scm.com/docs/git-tag)\n\t */\n\tpublic async tag(...args: (string | undefined)[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.execGit(\"tag\", args.filter(Boolean) as string[]);\n\t}\n\n\t/**\n\t * - [git-check-ignore Documentation](https://git-scm.com/docs/git-check-ignore)\n\t */\n\tpublic async isIgnored(file: string): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.execGit(\"check-ignore\", [\"--no-index\", file]);\n\n\t\t\treturn true;\n\t\t} catch (_error) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic async getCurrentBranchName(): Promise<string> {\n\t\treturn (await this.execGit(\"rev-parse\", [\"--abbrev-ref\", \"HEAD\"])).trim();\n\t}\n\n\t/**\n\t * `getTags` returns valid semver version tags in order of the commit history.\n\t *\n\t * Using `git log` to get the commit history, we then parse the tags from the\n\t * commit details which is expected to be in the following format:\n\t * @example\n\t * ```txt\n\t * commit 3841b1d05750d42197fe958e3d8e06df378a842d (HEAD -> main, tag: 1.0.2)\n\t * Author: Username <username@example.com>\n\t * Date: Sat Nov 9 15:00:00 2024 +0000\n\t *\n\t * chore(release): 1.2.3\n\t * ```\n\t *\n\t * - [Functionality extracted from the conventional-changelog - git-semver-tags project](https://github.com/conventional-changelog/conventional-changelog/blob/fac8045242099c016f5f3905e54e02b7d466bd7b/packages/git-semver-tags/index.js)\n\t * - [conventional-changelog git-semver-tags MIT Licence](https://github.com/conventional-changelog/conventional-changelog/blob/fac8045242099c016f5f3905e54e02b7d466bd7b/packages/git-semver-tags/LICENSE.md)\n\t */\n\tpublic async getTags(tagPrefix: string | undefined): Promise<string[]> {\n\t\tconst logOutput = await this.execGit(\"log\", [\"--decorate\", \"--no-color\", \"--date-order\"]);\n\n\t\t/**\n\t\t * Search for tags in the following formats:\n\t\t * @example \"tag: 1.2.3,\" or \"tag: 1.2.3)\"\n\t\t */\n\t\tconst TAG_REGEX = /tag:\\s*(.+?)[,)]/gi;\n\n\t\tconst tags: string[] = [];\n\t\tlet match: RegExpExecArray | null = null;\n\t\tlet tag: string;\n\t\tlet tagWithoutPrefix: string;\n\n\t\tfor (const logOutputLine of logOutput.split(\"\\n\")) {\n\t\t\twhile ((match = TAG_REGEX.exec(logOutputLine))) {\n\t\t\t\ttag = match[1];\n\n\t\t\t\tif (tagPrefix) {\n\t\t\t\t\tif (tag.startsWith(tagPrefix)) {\n\t\t\t\t\t\ttagWithoutPrefix = tag.replace(tagPrefix, \"\");\n\n\t\t\t\t\t\tif (semver.valid(tagWithoutPrefix)) {\n\t\t\t\t\t\t\ttags.push(tag);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (semver.valid(tag)) {\n\t\t\t\t\ttags.push(tag);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn tags;\n\t}\n\n\tpublic async getLatestTag(tagPrefix: string | undefined): Promise<string> {\n\t\tconst tags = await this.getTags(tagPrefix);\n\t\tif (!tags.length) return \"\";\n\n\t\tconst cleanedTags = [];\n\t\tfor (const tag of tags) {\n\t\t\tconst cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), \"\"));\n\t\t\tif (cleanedTag) {\n\t\t\t\tcleanedTags.push(cleanedTag);\n\t\t\t}\n\t\t}\n\n\t\treturn cleanedTags.sort(semver.rcompare)[0];\n\t}\n}\n","import semver, { type ReleaseType } from \"semver\";\n\n/**\n * Get the priority of given type.\n * @example\n * - \"patch\" => 0\n * - \"minor\" => 1\n * - \"major\" => 2\n */\nfunction getPriority(type?: string): number {\n\treturn [\"patch\", \"minor\", \"major\"].indexOf(type ?? \"\");\n}\n\n/**\n * Get the given versions highest state.\n * @example\n * - \"patch\"\n * - \"minor\"\n * - \"major\"\n */\nfunction getVersionType(version: string): \"patch\" | \"minor\" | \"major\" | undefined {\n\tconst parseVersion = semver.parse(version);\n\n\tif (parseVersion?.major) {\n\t\treturn \"major\";\n\t} else if (parseVersion?.minor) {\n\t\treturn \"minor\";\n\t} else if (parseVersion?.patch) {\n\t\treturn \"patch\";\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Get the recommended release type for the given version depending on if\n * the user asks for a prerelease with or without a tag.\n * ```js\n * getReleaseType(\"patch\", \"1.0.0\", false) => \"patch\"\n * getReleaseType(\"major\", \"0.0.0-beta\", \"beta\") => \"premajor\"\n * ```\n */\nexport function getReleaseType(\n\treleaseType: \"major\" | \"minor\" | \"patch\",\n\tcurrentVersion: string,\n\tpreReleaseTag?: string | boolean,\n): ReleaseType {\n\tif (!preReleaseTag) {\n\t\treturn releaseType;\n\t}\n\n\tconst currentVersionsIsPreRelease = Array.isArray(semver.prerelease(currentVersion));\n\tif (currentVersionsIsPreRelease) {\n\t\tconst currentReleaseType = getVersionType(currentVersion);\n\n\t\tif (\n\t\t\tcurrentReleaseType === releaseType ||\n\t\t\tgetPriority(currentReleaseType) > getPriority(releaseType)\n\t\t) {\n\t\t\treturn \"prerelease\";\n\t\t}\n\t}\n\n\treturn `pre${releaseType}`;\n}\n","import semver, { type ReleaseType } from \"semver\";\nimport conventionalRecommendedBump from \"conventional-recommended-bump\";\n\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { FileManager, FileState } from \"../files/file-manager\";\nimport type { Logger } from \"../utils/logger\";\nimport type { Git } from \"../utils/git\";\n\nexport interface CurrentVersion {\n\tversion: string;\n\tfiles: FileState[];\n}\n\nexport async function getCurrentVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n\tfileManager: FileManager,\n\tfilesToUpdate: string[],\n): Promise<CurrentVersion> {\n\tconst files: FileState[] = [];\n\tconst versions = new Set<string>();\n\n\tfor (const file of filesToUpdate) {\n\t\tif (await git.isIgnored(file)) {\n\t\t\tlogger.debug(`[Git Ignored] ${file}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst fileState = fileManager.read(file);\n\t\tif (fileState) {\n\t\t\tfiles.push(fileState);\n\n\t\t\tif (!config.currentVersion) {\n\t\t\t\tversions.add(fileState.version);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.currentVersion) {\n\t\tversions.add(config.currentVersion);\n\t}\n\n\t// If we still don't have a version, try to get the latest git tag\n\tif (versions.size === 0 && config.gitTagFallback) {\n\t\tconst version = await git.getLatestTag(config.tagPrefix);\n\t\tif (version) {\n\t\t\tlogger.warn(`Using latest git tag as fallback`);\n\t\t\tversions.add(version);\n\t\t}\n\t}\n\n\tif (versions.size === 0) {\n\t\tthrow new Error(\"Unable to find current version\");\n\t} else if (versions.size > 1) {\n\t\tif (!config.allowMultipleVersions) {\n\t\t\tthrow new Error(\"Found multiple versions\");\n\t\t}\n\t\tlogger.warn(\n\t\t\t`Found multiple versions (${Array.from(versions).join(\", \")}), using the higher semver version`,\n\t\t);\n\t}\n\n\tconst currentVersion = semver.rsort(Array.from(versions))[0];\n\n\t// If we're just inspecting the version, output the version and exit\n\tif (config.inspectVersion) {\n\t\tconsole.log(currentVersion);\n\t\tprocess.exit(0);\n\t}\n\n\tlogger.log(`Current version: ${currentVersion}`);\n\treturn {\n\t\tfiles,\n\t\tversion: currentVersion,\n\t};\n}\n\nexport interface NextVersion {\n\tversion: string;\n\tlevel?: number;\n\tpreMajor?: boolean;\n\treason?: string;\n\treleaseType?: ReleaseType;\n}\n\nexport async function getNextVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tcurrentVersion: string,\n): Promise<NextVersion> {\n\tif (config.skipBump) {\n\t\tlogger.warn(`Skip bump, using ${currentVersion} as the next version`);\n\t\treturn {\n\t\t\tversion: currentVersion,\n\t\t};\n\t}\n\n\tif (config.nextVersion && semver.valid(config.nextVersion)) {\n\t\tlogger.log(`Next version: ${config.nextVersion}`);\n\t\treturn {\n\t\t\tversion: config.nextVersion,\n\t\t};\n\t}\n\n\tconst isPreMajor = semver.lt(currentVersion, \"1.0.0\");\n\n\tlet recommendedBump: Awaited<ReturnType<typeof conventionalRecommendedBump>>;\n\tif (config.releaseAs) {\n\t\trecommendedBump = {\n\t\t\treleaseType: config.releaseAs,\n\t\t\tlevel: -1,\n\t\t\treason: \"User defined\",\n\t\t};\n\t} else {\n\t\ttry {\n\t\t\trecommendedBump = await conventionalRecommendedBump({\n\t\t\t\tpreset: {\n\t\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\t\tpreMajor: isPreMajor,\n\t\t\t\t},\n\t\t\t\tpath: config.path,\n\t\t\t\ttagPrefix: config.tagPrefix,\n\t\t\t\tcwd: config.path,\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthrow new Error(`[conventional-recommended-bump] Unable to determine next version`, {\n\t\t\t\tcause,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (recommendedBump.releaseType) {\n\t\tconst releaseType = getReleaseType(\n\t\t\trecommendedBump.releaseType,\n\t\t\tcurrentVersion,\n\t\t\tconfig.preRelease,\n\t\t);\n\t\tconst nextVersion =\n\t\t\tsemver.inc(\n\t\t\t\tcurrentVersion,\n\t\t\t\treleaseType,\n\t\t\t\ttypeof config.preRelease === \"string\" ? config.preRelease : undefined,\n\t\t\t) ?? \"\";\n\n\t\tlogger.log(`Next version: ${nextVersion} (${releaseType})`);\n\t\treturn {\n\t\t\t...recommendedBump,\n\t\t\tpreMajor: isPreMajor,\n\t\t\treleaseType,\n\t\t\tversion: nextVersion,\n\t\t};\n\t}\n\n\tthrow new Error(\"Unable to find next version\");\n}\n","import { resolve } from \"node:path\";\nimport { writeFileSync, readFileSync } from \"node:fs\";\nimport conventionalChangelog from \"conventional-changelog\";\n\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\n\n/**\n * Matches the following changelog header formats:\n * - `## [1.2.3]`\n * - `<a name=\"1.2.3\"></a>`\n */\nconst RELEASE_PATTERN = /(^#+ \\[?[0-9]+\\.[0-9]+\\.[0-9]+|<a name=)/m;\n\n/**\n * Get the existing changelog content from the latest release onwards.\n * @see {@link RELEASE_PATTERN}\n */\nfunction getOldReleaseContent(filePath: string, exists: boolean): string {\n\tif (exists) {\n\t\tconst fileContents = readFileSync(filePath, \"utf-8\");\n\t\tconst oldContentStart = fileContents.search(RELEASE_PATTERN);\n\n\t\tif (oldContentStart !== -1) {\n\t\t\treturn fileContents.substring(oldContentStart);\n\t\t}\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Generate the new changelog content for this release.\n */\nfunction getNewReleaseContent(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<string> {\n\treturn new Promise<string>((onResolve) => {\n\t\tlet newContent = \"\";\n\n\t\tconventionalChangelog(\n\t\t\t{\n\t\t\t\tpreset: {\n\t\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\t},\n\t\t\t\ttagPrefix: config.tagPrefix,\n\t\t\t\twarn: (...message: string[]) => logger.debug(\"[conventional-changelog] \", ...message),\n\t\t\t\tcwd: config.path,\n\t\t\t},\n\t\t\t{\n\t\t\t\tversion: nextVersion,\n\t\t\t},\n\t\t\t{\n\t\t\t\tmerges: null,\n\t\t\t\tpath: config.path,\n\t\t\t},\n\t\t)\n\t\t\t.on(\"error\", (cause) => {\n\t\t\t\tthrow new Error(\"[conventional-changelog] Unable to parse changes\", { cause });\n\t\t\t})\n\t\t\t.on(\"data\", (chunk) => {\n\t\t\t\tnewContent += chunk.toString();\n\t\t\t})\n\t\t\t.on(\"end\", () => {\n\t\t\t\tonResolve(newContent);\n\t\t\t});\n\t});\n}\n\nexport async function updateChangelog(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<void> {\n\tif (config.skipChangelog) {\n\t\tlogger.warn(\"Skip changelog update\");\n\t\treturn;\n\t}\n\n\tif (config.header.search(RELEASE_PATTERN) !== -1) {\n\t\t// Need to ensure the header doesn't contain the release pattern\n\t\tthrow new Error(\"Header cannot contain release pattern\");\n\t}\n\n\t// Create the changelog file if it doesn't exist\n\tconst changelogPath = resolve(config.path, config.changelog);\n\n\tif (!config.dryRun && !fileExists(changelogPath)) {\n\t\tlogger.log(`Creating changelog: ${changelogPath}`);\n\t\twriteFileSync(changelogPath, \"\\n\", \"utf8\");\n\t} else {\n\t\tlogger.log(`Updating changelog: ${changelogPath}`);\n\t}\n\n\tconst oldContent = getOldReleaseContent(changelogPath, fileExists(changelogPath));\n\tconst newContent = await getNewReleaseContent(config, logger, nextVersion);\n\n\tif (!config.dryRun && newContent) {\n\t\twriteFileSync(\n\t\t\tchangelogPath,\n\t\t\t`${config.header}\n${newContent}\n${oldContent}\n`.trim(),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n}\n","/**\n * Formats the commit message by replacing the `{{currentTag}}` placeholder\n * globally with the new version.\n *\n * Falls back to `chore(release): {{currentTag}}` if message is argument is falsy.\n */\nexport function formatCommitMessage(message: string | undefined, version: string): string {\n\tif (!message) {\n\t\tmessage = \"chore(release): {{currentTag}}\";\n\t}\n\n\treturn message.replace(new RegExp(\"{{currentTag}}\", \"g\"), version);\n}\n","import { resolve } from \"node:path\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { FileState } from \"../files/file-manager\";\nimport type { Logger } from \"../utils/logger\";\nimport type { Git } from \"../utils/git\";\n\nexport async function commitChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n\tfiles: FileState[],\n\tnextVersion: string,\n): Promise<void> {\n\tif (config.skipCommit) {\n\t\tlogger.warn(\"Skip commit\");\n\t\treturn;\n\t}\n\n\tlogger.log(\"Committing changes\");\n\n\tconst filesToCommit: string[] = [];\n\tif (fileExists(resolve(config.path, config.changelog))) {\n\t\tfilesToCommit.push(resolve(config.path, config.changelog));\n\t}\n\tfor (const file of files) {\n\t\tfilesToCommit.push(file.path);\n\t}\n\n\t// If there are no files to commit don't continue.\n\tif (filesToCommit.length === 0) {\n\t\treturn;\n\t}\n\n\tif (config.commitAll) {\n\t\tawait git.add(\"--all\");\n\t} else {\n\t\tawait git.add(...filesToCommit);\n\t}\n\n\tconst shouldVerify = config.verify ? undefined : \"--no-verify\";\n\tconst shouldSign = config.sign ? \"--gpg-sign\" : \"--no-gpg-sign\";\n\n\tawait git.commit(\n\t\tshouldVerify,\n\t\tshouldSign,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n}\n","import { formatCommitMessage } from \"../utils/format-commit-message\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../utils/logger\";\nimport type { Git } from \"../utils/git\";\n\nexport async function tagChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n\tnextVersion: string,\n): Promise<void> {\n\tif (config.skipTag) {\n\t\tlogger.warn(\"Skip tag creation\");\n\t\treturn;\n\t}\n\n\t/** @example \"v1.2.3\" or \"version/1.2.3\" */\n\tconst tag = `${config.tagPrefix}${nextVersion}`;\n\n\tlogger.log(`Creating tag: ${tag}`);\n\n\tconst shouldSign = config.sign ? \"--sign\" : \"--no-sign\";\n\n\tawait git.tag(\n\t\tshouldSign,\n\t\t\"--annotate\",\n\t\ttag,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n}\n"]}
|