{"version":3,"sources":["../src/config/schema.js","../src/services/git.ts","../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/services/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/commands/validate-config.ts","../src/process/get-current-version.ts","../src/commands/inspect-version.ts","../src/commands/inspect-tag.ts","../src/utils/trim-string-array.ts","../src/commit-parser/options.ts","../src/commit-parser/parser-error.ts","../src/commit-parser/commit-parser.ts","../src/commit-parser/filter-reverted-commits.ts","../src/process/get-commits.ts","../src/utils/release-type.ts","../src/process/get-next-version.ts","../src/process/changelog.ts","../src/utils/format-commit-message.ts","../src/process/commit.ts","../src/process/tag.ts","../src/commands/main.ts"],"names":["z","execFile","semver","conventionalChangelogConfigSpec","JoyCon","parse","fileContent","readFileSync","parsed","bundleRequire","resolve","glob","lstatSync","modify","applyEdits","writeFileSync","parseDocument","cheerio","conventionalChangelog"],"mappings":"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","file":"chunk-BPV4HZ7U.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 * The command to run, can be one of the following:\n\t *\n\t * - `main` - Bumps the version, update files, generate changelog, commit, and tag.\n\t * - `inspect-version` - Prints the current version and exits.\n\t * - `inspect-tag` - Prints the current git tag and exits.\n\t * - `validate-config` - Validates the configuration and exits.\n\t *\n\t * @default \"main\"\n\t */\n\tcommand: z\n\t\t.literal([\"main\", \"inspect-version\", \"inspect-tag\", \"validate-config\"])\n\t\t.describe(\n\t\t\t\"The command to run. Can be one of: main, inspect-version, inspect-tag, validate-config. Defaults to main.\",\n\t\t),\n\t/**\n\t * If set, Fork-Version will print the current version and exit.\n\t * @default false\n\t *\n\t * @deprecated Set the `inspect-version` command instead.\n\t */\n\tinspectVersion: z\n\t\t.boolean()\n\t\t.optional()\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 { 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.log = this.log.bind(this);\n\t\tthis.isIgnored = this.isIgnored.bind(this);\n\t\tthis.getBranchName = this.getBranchName.bind(this);\n\t\tthis.getRemoteUrl = this.getRemoteUrl.bind(this);\n\t\tthis.getTags = this.getTags.bind(this);\n\t\tthis.getMostRecentTag = this.getMostRecentTag.bind(this);\n\t\tthis.getCleanedTags = this.getCleanedTags.bind(this);\n\t\tthis.getHighestSemverVersionFromTags = this.getHighestSemverVersionFromTags.bind(this);\n\t\tthis.getCommits = this.getCommits.bind(this);\n\t}\n\n\tasync #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 * Add file contents to the index\n\t *\n\t * [git-add Documentation](https://git-scm.com/docs/git-add)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.add(\"CHANGELOG.md\");\n\t * ```\n\t */\n\tasync 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 * Record changes to the repository\n\t *\n\t * [git-commit Documentation](https://git-scm.com/docs/git-commit)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.commit(\"--message\", \"chore(release): 1.2.3\");\n\t * ```\n\t */\n\tasync 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 * Create, list, delete or verify a tag object\n\t *\n\t * [git-tag Documentation](https://git-scm.com/docs/git-tag)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.tag(\"--annotate\", \"v1.2.3\", \"--message\", \"chore(release): 1.2.3\");\n\t * ```\n\t */\n\tasync 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 * Show commit logs\n\t *\n\t * - [git-log Documentation](https://git-scm.com/docs/git-log)\n\t * - [pretty-formats Documentation](https://git-scm.com/docs/pretty-formats)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.log(\"--oneline\");\n\t * ```\n\t */\n\tasync log(...args: (string | undefined)[]): Promise<string> {\n\t\ttry {\n\t\t\treturn await this.#execGit(\"log\", args.filter(Boolean) as string[]);\n\t\t} catch {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\t/**\n\t * Check if a file is ignored by git\n\t *\n\t * [git-check-ignore Documentation](https://git-scm.com/docs/git-check-ignore)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.isIgnored(\"src/my-file.txt\");\n\t * ```\n\t */\n\tasync 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\t/**\n\t * Get the name of the current branch\n\t *\n\t * [git-rev-parse Documentation](https://git-scm.com/docs/git-rev-parse)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.getBranchName(); // \"main\"\n\t * ```\n\t */\n\tasync getBranchName(): Promise<string> {\n\t\ttry {\n\t\t\tconst branchName = await this.#execGit(\"rev-parse\", [\"--abbrev-ref\", \"HEAD\"]);\n\n\t\t\treturn branchName.trim();\n\t\t} catch {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\t/**\n\t * Get the URL of the remote repository\n\t *\n\t * [git-config Documentation](https://git-scm.com/docs/git-config)\n\t *\n\t * @example\n\t * ```ts\n\t * await git.getRemoteUrl(); // \"https://github.com/eglavin/fork-version\"\n\t * ```\n\t */\n\tasync getRemoteUrl(): Promise<string> {\n\t\ttry {\n\t\t\tconst remoteUrl = await this.#execGit(\"config\", [\"--get\", \"remote.origin.url\"]);\n\n\t\t\treturn remoteUrl.trim();\n\t\t} catch (_error) {\n\t\t\treturn \"\";\n\t\t}\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 * ```txt\n\t * commit 3841b1d05750d42197fe958e3d8e06df378a842d (HEAD -> main, tag: v1.0.2, tag: v1.0.1, tag: v1.0.0)\n\t * Author: Username <username@example.com>\n\t * Date:   Sat Nov 9 15:00:00 2024 +0000\n\t *\n\t *     chore(release): v1.0.0\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\t * @example\n\t * ```ts\n\t * await git.getTags(\"v\"); // [\"v1.0.2\", \"v1.0.1\", \"v1.0.0\"]\n\t * ```\n\t */\n\tasync getTags(tagPrefix: string | undefined): Promise<string[]> {\n\t\tconst logOutput = await this.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*(?<tag>.+?)[,)]/gi;\n\t\tconst tags: string[] = [];\n\n\t\tlet tagMatch: RegExpExecArray | null = null;\n\t\twhile ((tagMatch = TAG_REGEX.exec(logOutput))) {\n\t\t\tconst { tag = \"\" } = tagMatch.groups ?? {};\n\n\t\t\tif (tagPrefix) {\n\t\t\t\tif (tag.startsWith(tagPrefix)) {\n\t\t\t\t\tconst tagWithoutPrefix = tag.replace(new RegExp(`^${tagPrefix}`), \"\");\n\t\t\t\t\tif (semver.valid(tagWithoutPrefix)) {\n\t\t\t\t\t\ttags.push(tag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If no tagPrefix is provided, only include tags that start with a digit and are valid semver\n\t\t\telse if (/^\\d/.test(tag) && semver.valid(tag)) {\n\t\t\t\ttags.push(tag);\n\t\t\t}\n\t\t}\n\n\t\treturn tags;\n\t}\n\n\t/**\n\t * Returns the latest git tag based on commit date\n\t *\n\t * @example\n\t * ```ts\n\t * await git.getMostRecentTag(\"v\"); // \"1.2.3\"\n\t * ```\n\t */\n\tasync getMostRecentTag(tagPrefix: string | undefined): Promise<string | undefined> {\n\t\tconst tags = await this.getTags(tagPrefix);\n\t\treturn tags[0] || undefined;\n\t}\n\n\t/**\n\t * Get cleaned semver tags, with any tag prefix's removed\n\t *\n\t * @example\n\t * ```ts\n\t * await git.getCleanedTags(\"v\"); // [\"1.2.3\", \"1.2.2\", \"1.2.1\"]\n\t * ```\n\t */\n\tasync getCleanedTags(tagPrefix: string | undefined): Promise<string[]> {\n\t\tconst tags = await this.getTags(tagPrefix);\n\n\t\tconst cleanedTags = [];\n\t\tfor (const tag of tags) {\n\t\t\tconst tagWithoutPrefix = tag.replace(new RegExp(`^${tagPrefix}`), \"\");\n\t\t\tconst cleanedTag = semver.clean(tagWithoutPrefix);\n\t\t\tif (cleanedTag) {\n\t\t\t\tcleanedTags.push(cleanedTag);\n\t\t\t}\n\t\t}\n\n\t\treturn cleanedTags;\n\t}\n\n\t/**\n\t * Get the highest semver version from git tags. This will return the highest\n\t * semver version found for the given tag prefix, regardless of the commit date.\n\t *\n\t * @example\n\t * ```ts\n\t * await git.getHighestSemverVersionFromTags(\"v\"); // \"1.2.3\"\n\t * ```\n\t */\n\tasync getHighestSemverVersionFromTags(\n\t\ttagPrefix: string | undefined,\n\t): Promise<string | undefined> {\n\t\tconst cleanedTags = await this.getCleanedTags(tagPrefix);\n\t\treturn cleanedTags.sort(semver.rcompare)[0] || undefined;\n\t}\n\n\t/**\n\t * Get commit history in a parsable format\n\t *\n\t * An array of strings with commit details is returned in the following format:\n\t * ```txt\n\t * subject\n\t * body\n\t * hash\n\t * committer date\n\t * committer name\n\t * committer email\n\t * ```\n\t *\n\t * @example\n\t * ```ts\n\t * await git.getCommits(\"v1.0.0\", \"HEAD\", \"src/utils\");\n\t * ```\n\t */\n\tasync getCommits(from = \"\", to = \"HEAD\", ...paths: string[]): Promise<string[]> {\n\t\tconst SCISSOR = \"^----------- FORK VERSION -----------^\";\n\n\t\tconst LOG_FORMAT = [\n\t\t\t\"%s\", // subject\n\t\t\t\"%b\", // body\n\t\t\t\"%H\", // hash\n\t\t\t\"%cI\", // committer date\n\t\t\t\"%cN\", // committer name\n\t\t\t\"%cE\", // committer email\n\t\t\tSCISSOR,\n\t\t].join(\"%n\");\n\n\t\tconst commits = await this.log(\n\t\t\t`--format=${LOG_FORMAT}`,\n\t\t\t[from, to].filter(Boolean).join(\"..\"),\n\t\t\tpaths.length ? \"--\" : \"\",\n\t\t\t...paths,\n\t\t);\n\n\t\tconst splitCommits = commits.split(`\\n${SCISSOR}\\n`);\n\n\t\tif (splitCommits.length === 0) {\n\t\t\treturn splitCommits;\n\t\t}\n\n\t\tif (splitCommits[0] === SCISSOR) {\n\t\t\tsplitCommits.shift();\n\t\t}\n\n\t\tif (splitCommits[splitCommits.length - 1] === \"\") {\n\t\t\tsplitCommits.pop();\n\t\t}\n\n\t\treturn splitCommits;\n\t}\n}\n","import { z } from \"zod\";\nimport conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigTypeSchema, ChangelogPresetConfigSchema } from \"./schema\";\nimport type { ForkVersionCLIArgs, ForkConfig } from \"./types\";\nimport type { DetectedGitHost } from \"./detect-git-host\";\n\nexport function getChangelogPresetConfig(\n\tmergedConfig: Partial<ForkConfig> | undefined,\n\tcliArguments: ForkVersionCLIArgs[\"flags\"],\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\tcommand: \"main\",\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 { Git } from \"../services/git\";\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 Git({\n\t\tpath: cwd,\n\t\tdryRun: false,\n\t}).getRemoteUrl();\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 { ForkVersionCLIArgs, ForkConfig } from \"./types\";\n\nexport async function getUserConfig(cliArguments: ForkVersionCLIArgs): Promise<ForkConfig> {\n\tconst cwd = cliArguments.flags.path ? resolve(cliArguments.flags.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.flags,\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.flags.files, globResults);\n\tconst detectedGitHost = await detectGitHost(cwd);\n\tconst changelogPresetConfig = getChangelogPresetConfig(\n\t\tmergedConfig,\n\t\tcliArguments.flags,\n\t\tdetectedGitHost,\n\t);\n\n\tlet command: ForkConfig[\"command\"] = DEFAULT_CONFIG.command;\n\tif (cliArguments.input.length > 0 && cliArguments.input[0].trim()) {\n\t\tcommand = cliArguments.input[0].trim().toLowerCase() as ForkConfig[\"command\"];\n\t} else if (mergedConfig.command.trim()) {\n\t\tcommand = mergedConfig.command.trim().toLowerCase() as ForkConfig[\"command\"];\n\t}\n\n\t// Support deprecated `--inspect-version` flag. Will be removed in a future major release.\n\tif (mergedConfig.inspectVersion) {\n\t\tcommand = \"inspect-version\";\n\t}\n\n\t// Force silent mode to avoid printing unnecessary information when running other commands.\n\tconst shouldBeSilent = ![DEFAULT_CONFIG.command].includes(command);\n\n\treturn {\n\t\t...mergedConfig,\n\n\t\tcommand,\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.flags.preReleaseTag ?? cliArguments.flags.preRelease ?? configFile.preRelease,\n\t\tsilent: shouldBeSilent || mergedConfig.silent,\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\">) {\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\n\t\tthis.disableLogs = this.config.silent;\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 \"../services/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 \"../services/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 \"../services/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 \"../services/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 \"../services/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 \"../services/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 type { ForkConfig } from \"../config/types\";\n\nexport function validateConfig(config: ForkConfig): void {\n\t// Validation is done during config initialisation, so if we reach this point the config is valid.\n\t// The default flow already prints errors, so we just print the valid config here.\n\n\tconsole.log(`\n⚙️ Configuration:\n${JSON.stringify(config, null, 2)}\n\n✅ Configuration is valid.\n`);\n}\n","import semver from \"semver\";\n\nimport type { ForkConfig } from \"../config/types\";\nimport type { FileManager, FileState } from \"../files/file-manager\";\nimport type { Logger } from \"../services/logger\";\nimport type { Git } from \"../services/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 highest version from git tags\n\tif (versions.size === 0 && config.gitTagFallback) {\n\t\tconst version = await git.getHighestSemverVersionFromTags(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\tlogger.log(`Current version: ${currentVersion}`);\n\treturn {\n\t\tfiles,\n\t\tversion: currentVersion,\n\t};\n}\n","import { getCurrentVersion } from \"../process/get-current-version\";\n\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../services/logger\";\nimport type { FileManager } from \"../files/file-manager\";\nimport type { Git } from \"../services/git\";\n\nexport async function inspectVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfileManager: FileManager,\n\tgit: Git,\n) {\n\tlet foundVersion = \"\";\n\n\ttry {\n\t\tconst currentVersion = await getCurrentVersion(config, logger, git, fileManager, config.files);\n\t\tif (currentVersion) foundVersion = currentVersion.version;\n\t} catch {\n\t\t// No version found\n\t}\n\n\tconsole.log(foundVersion);\n}\n","import type { ForkConfig } from \"../config/types\";\nimport type { Git } from \"../services/git\";\n\nexport async function inspectTag(config: ForkConfig, git: Git) {\n\tconst tag = await git.getMostRecentTag(config.tagPrefix);\n\n\tconsole.log(tag ?? \"\");\n}\n","export function trimStringArray(array: string[] | undefined): string[] | undefined {\n\tconst items = [];\n\n\tif (Array.isArray(array)) {\n\t\tfor (const item of array) {\n\t\t\tconst _item = item.trim();\n\t\t\tif (_item) {\n\t\t\t\titems.push(_item);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (items.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn items;\n}\n","import { trimStringArray } from \"../utils/trim-string-array\";\n\nexport interface ParserOptions {\n\t/**\n\t * Pattern to match commit subjects\n\t * - Expected capture groups: `type` `title`\n\t * - Optional capture groups: `scope`, `breakingChange`\n\t */\n\tsubjectPattern: RegExp | undefined;\n\n\t/**\n\t * Pattern to match merge commits\n\t * - Expected capture groups: `id`, `source`\n\t */\n\tmergePattern: RegExp | undefined;\n\n\t/**\n\t * Pattern to match revert commits\n\t * - Expected capture groups: `subject`, `hash`\n\t */\n\trevertPattern: RegExp | undefined;\n\n\t/**\n\t * Pattern to match commented out lines which will be trimmed\n\t */\n\tcommentPattern: RegExp | undefined;\n\n\t/**\n\t * Pattern to match mentions\n\t * - Expected capture groups: `username`\n\t */\n\tmentionPattern: RegExp | undefined;\n\n\t/**\n\t * List of action labels to match reference sections\n\t * @default\n\t * [\"close\", \"closes\", \"closed\", \"fix\", \"fixes\", \"fixed\", \"resolve\", \"resolves\", \"resolved\"]\n\t */\n\treferenceActions?: string[];\n\t/**\n\t * Pattern to match reference sections\n\t * - Expected capture groups: `action`, `reference`\n\t */\n\treferenceActionPattern: RegExp | undefined;\n\n\t/**\n\t * List of issue prefixes to match issue ids\n\t * @default\n\t * [\"#\"]\n\t */\n\tissuePrefixes?: string[];\n\t/**\n\t * Pattern to match issue references\n\t * - Expected capture groups: `repository`, `prefix`, `issue`\n\t */\n\tissuePattern: RegExp | undefined;\n\n\t/**\n\t * List of keywords to match note titles\n\t * @default\n\t * [\"BREAKING CHANGE\", \"BREAKING-CHANGE\"]\n\t */\n\tnoteKeywords?: string[];\n\t/**\n\t * Pattern to match note sections\n\t * - Expected capture groups: `title`\n\t * - Optional capture groups: `text`\n\t */\n\tnotePattern: RegExp | undefined;\n}\n\nexport function createParserOptions(userOptions?: Partial<ParserOptions>): ParserOptions {\n\tconst referenceActions = trimStringArray(userOptions?.referenceActions) ?? [\n\t\t\"close\",\n\t\t\"closes\",\n\t\t\"closed\",\n\t\t\"fix\",\n\t\t\"fixes\",\n\t\t\"fixed\",\n\t\t\"resolve\",\n\t\t\"resolves\",\n\t\t\"resolved\",\n\t];\n\tconst joinedReferenceActions = referenceActions.join(\"|\");\n\n\tconst issuePrefixes = trimStringArray(userOptions?.issuePrefixes) ?? [\"#\"];\n\tconst joinedIssuePrefixes = issuePrefixes.join(\"|\");\n\n\tconst noteKeywords = trimStringArray(userOptions?.noteKeywords) ?? [\n\t\t\"BREAKING CHANGE\",\n\t\t\"BREAKING-CHANGE\",\n\t];\n\tconst joinedNoteKeywords = noteKeywords.join(\"|\");\n\n\treturn {\n\t\tsubjectPattern: /^(?<type>\\w+)(?:\\((?<scope>.*)\\))?(?<breakingChange>!)?:\\s+(?<title>.*)/,\n\n\t\tmergePattern: /^Merge pull request #(?<id>\\d*) from (?<source>.*)/,\n\n\t\trevertPattern: /^[Rr]evert \"(?<subject>.*)\"(\\s*This reverts commit (?<hash>[a-zA-Z0-9]*)\\.)?/,\n\n\t\tcommentPattern: /^#(?!\\d+\\s)/,\n\n\t\tmentionPattern: /(?<!\\w)@(?<username>[\\w-]+)/,\n\n\t\treferenceActions,\n\t\treferenceActionPattern: joinedReferenceActions\n\t\t\t? new RegExp(\n\t\t\t\t\t`(?<action>${joinedReferenceActions})(?:\\\\s+(?<reference>.*?))(?=(?:${joinedReferenceActions})|$)`,\n\t\t\t\t)\n\t\t\t: undefined,\n\n\t\tissuePrefixes,\n\t\tissuePattern: joinedIssuePrefixes\n\t\t\t? new RegExp(\n\t\t\t\t\t`(?:.*?)??\\\\s*(?<repository>[\\\\w-\\\\.\\\\/]*?)??(?<prefix>${joinedIssuePrefixes})(?<issue>[\\\\w-]*\\\\d+)`,\n\t\t\t\t)\n\t\t\t: undefined,\n\n\t\tnoteKeywords,\n\t\tnotePattern: joinedNoteKeywords\n\t\t\t? new RegExp(`^(?<title>${joinedNoteKeywords}):(\\\\s*(?<text>.*))`)\n\t\t\t: undefined,\n\n\t\t// Override defaults with user options\n\t\t...userOptions,\n\t};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Error thrown when commit parser encounters an error.\n */\nexport class ParserError extends Error {\n\tdetail: unknown;\n\n\tconstructor(message: string, detail?: any) {\n\t\tsuper(message);\n\t\tthis.name = \"ParserError\";\n\t\tthis.detail = detail;\n\t}\n}\n","import { createParserOptions, type ParserOptions } from \"./options\";\nimport { ParserError } from \"./parser-error\";\nimport type { Logger } from \"../services/logger\";\nimport type { Commit, CommitNote, CommitReference } from \"./types\";\n\nexport class CommitParser {\n\t#options: ParserOptions;\n\t#logger?: Logger;\n\n\tconstructor(userOptions?: Partial<ParserOptions>) {\n\t\tthis.#options = createParserOptions(userOptions);\n\n\t\tthis.setLogger = this.setLogger.bind(this);\n\t\tthis.createCommit = this.createCommit.bind(this);\n\t\tthis.parseRawCommit = this.parseRawCommit.bind(this);\n\t\tthis.parseSubject = this.parseSubject.bind(this);\n\t\tthis.parseMerge = this.parseMerge.bind(this);\n\t\tthis.parseRevert = this.parseRevert.bind(this);\n\t\tthis.parseMentions = this.parseMentions.bind(this);\n\t\tthis.parseReferenceParts = this.parseReferenceParts.bind(this);\n\t\tthis.parseReferences = this.parseReferences.bind(this);\n\t\tthis.parseNotes = this.parseNotes.bind(this);\n\t\tthis.parseRawLines = this.parseRawLines.bind(this);\n\t\tthis.parse = this.parse.bind(this);\n\t}\n\n\tsetLogger(logger: Logger) {\n\t\tthis.#logger = logger;\n\t\treturn this;\n\t}\n\n\tcreateCommit(): Commit {\n\t\treturn {\n\t\t\traw: \"\",\n\n\t\t\tsubject: \"\",\n\t\t\tbody: \"\",\n\t\t\thash: \"\",\n\t\t\tdate: \"\",\n\t\t\tname: \"\",\n\t\t\temail: \"\",\n\n\t\t\ttype: \"\",\n\t\t\tscope: \"\",\n\t\t\tbreakingChange: \"\",\n\t\t\ttitle: \"\",\n\n\t\t\tmerge: null,\n\t\t\trevert: null,\n\t\t\tnotes: [],\n\t\t\tmentions: [],\n\t\t\treferences: [],\n\t\t};\n\t}\n\n\t/**\n\t * Parse the raw commit message into its expected parts\n\t * - subject\n\t * - body\n\t * - hash\n\t * - date\n\t * - name\n\t * - email\n\t *\n\t * @throws {ParserError}\n\t */\n\tparseRawCommit(rawCommit: string): Commit {\n\t\tconst parsedCommit = this.createCommit();\n\n\t\tconst parts = rawCommit.split(/\\r?\\n/);\n\t\tif (parts.length < 6) {\n\t\t\tthrow new ParserError(\"Commit doesn't contain enough parts\", rawCommit);\n\t\t}\n\n\t\t// Walk backwards through the parts array to extract the data in the expected order\n\t\t// - committer email\n\t\t// - committer name\n\t\t// - committer date\n\t\t// - hash\n\n\t\tconst email = parts.pop();\n\t\tconst name = parts.pop();\n\t\tconst date = parts.pop();\n\t\tconst hash = parts.pop();\n\n\t\tif (email) parsedCommit.email = email.trim();\n\t\tif (name) parsedCommit.name = name.trim();\n\t\tif (date) {\n\t\t\tparsedCommit.date = date.trim();\n\n\t\t\t// Date is one of the only fields we can properly validate, check to ensure its in the correct position\n\t\t\tif (Number.isNaN(Date.parse(parsedCommit.date))) {\n\t\t\t\tthrow new ParserError(\"Unable to parse commit date\", rawCommit);\n\t\t\t}\n\t\t}\n\t\tif (hash) parsedCommit.hash = hash.trim();\n\n\t\t// Take the subject from the front of the array, the remainder is the commit body\n\n\t\tconst subject = parts.shift()?.trimStart();\n\t\tif (subject) {\n\t\t\tparsedCommit.subject = subject;\n\t\t\tparsedCommit.raw = subject;\n\t\t}\n\n\t\tparsedCommit.body = parts\n\t\t\t.filter((line) => {\n\t\t\t\tif (this.#options.commentPattern) {\n\t\t\t\t\treturn !this.#options.commentPattern.test(line.trim());\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\n\t\tconst raw = parts.join(\"\\n\").trim();\n\t\tif (raw) parsedCommit.raw += \"\\n\" + raw;\n\n\t\treturn parsedCommit;\n\t}\n\n\t/**\n\t * Parse the commit subject into its expected parts\n\t * - type\n\t * - scope (optional)\n\t * - breaking change (optional)\n\t * - title\n\t *\n\t * @throws {ParserError}\n\t */\n\tparseSubject(commit: Commit) {\n\t\tif (!this.#options.subjectPattern) return false;\n\n\t\tconst subjectMatch = new RegExp(this.#options.subjectPattern, \"i\").exec(commit.subject);\n\n\t\tif (subjectMatch?.groups) {\n\t\t\tconst { type = \"\", scope = \"\", breakingChange = \"\", title = \"\" } = subjectMatch.groups;\n\n\t\t\tif (!type || !title) {\n\t\t\t\tthrow new ParserError(\"Unable to parse commit subject\", commit);\n\t\t\t}\n\n\t\t\tcommit.type = type;\n\t\t\tcommit.scope = scope;\n\t\t\tif (breakingChange) commit.breakingChange = breakingChange;\n\t\t\tcommit.title = title;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Parse merge information from the commit subject\n\t * @example\n\t * ```txt\n\t * \"Merge pull request #123 from fork-version/feature\"\n\t * ```\n\t */\n\tparseMerge(commit: Commit) {\n\t\tif (!this.#options.mergePattern) return false;\n\n\t\tconst mergeMatch = new RegExp(this.#options.mergePattern).exec(commit.subject);\n\n\t\tif (mergeMatch?.groups) {\n\t\t\tconst { id = \"\", source = \"\" } = mergeMatch.groups;\n\n\t\t\tcommit.merge = {\n\t\t\t\tid,\n\t\t\t\tsource,\n\t\t\t};\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Parse revert information from the commit body\n\t * @example\n\t * ```txt\n\t * \"Revert \"feat: initial commit\"\n\t *\n\t * This reverts commit 4a79e9e546b4020d2882b7810dc549fa71960f4f.\"\n\t * ```\n\t */\n\tparseRevert(commit: Commit) {\n\t\tif (!this.#options.revertPattern) return false;\n\n\t\tconst revertMatch = new RegExp(this.#options.revertPattern).exec(commit.raw);\n\n\t\tif (revertMatch?.groups) {\n\t\t\tconst { hash = \"\", subject = \"\" } = revertMatch.groups;\n\n\t\t\tcommit.revert = {\n\t\t\t\thash,\n\t\t\t\tsubject,\n\t\t\t};\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Search for mentions from the commit line\n\t * @example\n\t * ```txt\n\t * \"@fork-version\"\n\t * ```\n\t */\n\tparseMentions(line: string, outMentions: Set<string>) {\n\t\tif (!this.#options.mentionPattern) return false;\n\n\t\tconst mentionRegex = new RegExp(this.#options.mentionPattern, \"g\");\n\n\t\tlet foundMention = false;\n\t\tlet mentionMatch: RegExpExecArray | null;\n\t\twhile ((mentionMatch = mentionRegex.exec(line))) {\n\t\t\tif (!mentionMatch) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst { username = \"\" } = mentionMatch.groups ?? {};\n\n\t\t\toutMentions.add(username);\n\t\t\tfoundMention = true;\n\t\t}\n\n\t\treturn foundMention;\n\t}\n\n\t/**\n\t * Search for references from the commit line\n\t * @example\n\t * ```txt\n\t * \"#1234\"\n\t * \"owner/repo#1234\"\n\t * ```\n\t */\n\tparseReferenceParts(referenceText: string, action: string | null): CommitReference[] | undefined {\n\t\tif (!this.#options.issuePattern) return undefined;\n\n\t\tconst references: CommitReference[] = [];\n\n\t\tconst issueRegex = new RegExp(this.#options.issuePattern, \"gi\");\n\t\tlet issueMatch: RegExpExecArray | null;\n\t\twhile ((issueMatch = issueRegex.exec(referenceText))) {\n\t\t\tif (!issueMatch) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst { repository = \"\", prefix = \"\", issue = \"\" } = issueMatch.groups ?? {};\n\n\t\t\tconst reference: CommitReference = {\n\t\t\t\tprefix,\n\t\t\t\tissue,\n\t\t\t\taction,\n\t\t\t\towner: null,\n\t\t\t\trepository: null,\n\t\t\t};\n\n\t\t\tif (repository) {\n\t\t\t\tconst slashIndex = repository.indexOf(\"/\");\n\t\t\t\tif (slashIndex !== -1) {\n\t\t\t\t\treference.owner = repository.slice(0, slashIndex);\n\t\t\t\t\treference.repository = repository.slice(slashIndex + 1);\n\t\t\t\t} else {\n\t\t\t\t\treference.repository = repository;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treferences.push(reference);\n\t\t}\n\n\t\tif (references.length > 0) {\n\t\t\treturn references;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Search for actions and references from the commit line\n\t * @example\n\t * ```txt\n\t * \"Closes #1234\"\n\t * \"fixes owner/repo#1234\"\n\t * ```\n\t */\n\tparseReferences(line: string, outReferences: CommitReference[]) {\n\t\tif (!this.#options.referenceActionPattern || !this.#options.issuePattern) return false;\n\n\t\tconst referenceActionRegex = new RegExp(this.#options.referenceActionPattern, \"gi\").test(line)\n\t\t\t? new RegExp(this.#options.referenceActionPattern, \"gi\")\n\t\t\t: /(?<reference>.*)/g;\n\n\t\tlet foundReference = false;\n\t\tlet referenceActionMatch: RegExpExecArray | null;\n\t\twhile ((referenceActionMatch = referenceActionRegex.exec(line))) {\n\t\t\tif (!referenceActionMatch) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst { action = \"\", reference = \"\" } = referenceActionMatch.groups ?? {};\n\n\t\t\tconst parsedReferences = this.parseReferenceParts(reference, action || null);\n\t\t\tif (!parsedReferences) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tfor (const ref of parsedReferences) {\n\t\t\t\tif (!outReferences.some((r) => r.prefix === ref.prefix && r.issue === ref.issue)) {\n\t\t\t\t\toutReferences.push(ref);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfoundReference = true;\n\t\t}\n\n\t\treturn foundReference;\n\t}\n\n\t/**\n\t * Search for notes from the commit line\n\t * @example\n\t * ```txt\n\t * \"BREAKING CHANGE: this is a breaking change\"\n\t * ```\n\t */\n\tparseNotes(line: string, outNotes: CommitNote[]) {\n\t\tif (!this.#options.notePattern) return false;\n\n\t\tconst noteMatch = new RegExp(this.#options.notePattern, \"ig\").exec(line);\n\n\t\tif (noteMatch?.groups) {\n\t\t\tconst { title = \"\", text = \"\" } = noteMatch.groups;\n\n\t\t\toutNotes.push({\n\t\t\t\ttitle,\n\t\t\t\ttext,\n\t\t\t});\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Parse the raw commit for mentions, references and notes\n\t */\n\tparseRawLines(commit: Commit) {\n\t\tconst mentions = new Set<string>();\n\t\tconst references: CommitReference[] = [];\n\t\tconst notes: CommitNote[] = [];\n\t\tlet lastNoteLine = -1;\n\n\t\tconst splitMessage = commit.raw.split(\"\\n\");\n\t\tfor (let index = 0; index < splitMessage.length; index++) {\n\t\t\tconst line = splitMessage[index];\n\t\t\tconst trimmedLine = line.trim();\n\n\t\t\tif (this.#options.commentPattern?.test(trimmedLine)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.parseMentions(trimmedLine, mentions);\n\t\t\tconst foundReference = this.parseReferences(trimmedLine, references);\n\n\t\t\t// If we find a reference, we can assume the previous note is complete.\n\t\t\tif (foundReference) {\n\t\t\t\tlastNoteLine = -1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Once we find a note line, we want to keep adding to the last note object\n\t\t\t// until we find a new note line which will create a new note object.\n\t\t\tif (this.parseNotes(trimmedLine, notes)) {\n\t\t\t\tlastNoteLine = index;\n\t\t\t} else if (lastNoteLine !== -1) {\n\t\t\t\tnotes[notes.length - 1].text += `\\n${line}`;\n\t\t\t\tlastNoteLine = index;\n\t\t\t}\n\t\t}\n\n\t\tif (mentions.size > 0) {\n\t\t\tcommit.mentions = Array.from(mentions);\n\t\t}\n\t\tif (references.length > 0) {\n\t\t\tcommit.references = references;\n\t\t}\n\t\tif (notes.length > 0) {\n\t\t\tcommit.notes = notes.map((note) => ({\n\t\t\t\t...note,\n\t\t\t\ttext: note.text.trim(),\n\t\t\t}));\n\t\t}\n\t}\n\n\t/**\n\t * Parse a commit log with the following format separated by new line characters:\n\t * ```txt\n\t * refactor: add test file\n\t * Add a test file to the project\n\t * 4ef2c86d393a9660aa9f753144256b1f200c16bd\n\t * 2024-12-22T17:36:50Z\n\t * Fork Version\n\t * fork-version@example.com\n\t * ```\n\t *\n\t * @example\n\t * ```ts\n\t * parse(\"refactor: add test file\\nAdd a test file to the project\\n4ef2c86d393a9660aa9f753144256b1f200c16bd\\n2024-12-22T17:36:50Z\\nFork Version\\nfork-version@example.com\");\n\t * ```\n\t *\n\t * The expected input value can be generated by running the following command:\n\t * ```sh\n\t * git log --format=\"%s%n%b%n%H%n%cI%n%cN%n%cE%n\"\n\t * ```\n\t * @see {@link https://git-scm.com/docs/pretty-formats|Git Pretty Format Documentation}\n\t */\n\tparse(rawCommit: string): Commit | undefined {\n\t\ttry {\n\t\t\tconst commit = this.parseRawCommit(rawCommit);\n\n\t\t\tthis.parseSubject(commit);\n\t\t\tthis.parseMerge(commit);\n\t\t\tthis.parseRevert(commit);\n\t\t\tthis.parseRawLines(commit);\n\n\t\t\treturn commit;\n\t\t} catch (error) {\n\t\t\tif (this.#logger) {\n\t\t\t\tthis.#logger.debug(\"[Commit Parser] Failed to parse commit\", { error });\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n","import type { Commit } from \"./types\";\n\n/**\n * Filter out revert commits and their corresponding reverted commits,\n * this function expects the input to be sorted by date in descending order\n * from the most recent to the oldest commit.\n *\n * @example\n * ```ts\n * const commits: Commit[] = [...];\n * const filteredCommits = filterRevertedCommits(commits);\n * ```\n */\nexport function filterRevertedCommits(parsedCommits: Commit[]): Commit[] {\n\tconst revertedCommits: Commit[] = [];\n\n\tfor (const commit of parsedCommits) {\n\t\tif (!commit.revert) continue;\n\n\t\t// If this \"revert commit\" has been reverted, skip it\n\t\tif (\n\t\t\trevertedCommits.some(\n\t\t\t\t(r) => r.revert?.hash === commit.hash || r.revert?.subject === commit.subject,\n\t\t\t)\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\trevertedCommits.push(commit);\n\t}\n\n\t// If there are no reverts, return the original data\n\tif (revertedCommits.length === 0) {\n\t\treturn parsedCommits;\n\t}\n\n\tconst commitsWithoutReverts: Commit[] = [];\n\n\tfor (const commit of parsedCommits) {\n\t\tif (commit.revert) continue;\n\n\t\tconst revertedIndex = revertedCommits.findIndex(\n\t\t\t(r) => r.revert?.hash === commit.hash || r.revert?.subject === commit.subject,\n\t\t);\n\t\tif (revertedIndex !== -1) {\n\t\t\t// Remove the reverted commit from the list to prevent multiple removals.\n\t\t\trevertedCommits.splice(revertedIndex, 1);\n\t\t\tcontinue;\n\t\t}\n\n\t\tcommitsWithoutReverts.push(commit);\n\t}\n\n\treturn commitsWithoutReverts;\n}\n","import { CommitParser } from \"../commit-parser/commit-parser\";\nimport { filterRevertedCommits } from \"../commit-parser/filter-reverted-commits\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../services/logger\";\nimport type { Git } from \"../services/git\";\nimport type { Commit } from \"../commit-parser/types\";\n\nexport interface CommitsSinceTag {\n\tlatestTag: string | undefined;\n\tcommits: Commit[];\n}\n\nexport async function getCommitsSinceTag(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tgit: Git,\n): Promise<CommitsSinceTag> {\n\tconst commitParser = new CommitParser();\n\tif (config.debug) commitParser.setLogger(logger);\n\n\tconst latestTag = await git.getMostRecentTag(config.tagPrefix);\n\tif (!latestTag) {\n\t\tlogger.warn(\"No previous tag found, using all commits\");\n\t}\n\n\tconst foundCommits = await git.getCommits(latestTag, \"HEAD\");\n\tlogger.debug(`Found ${foundCommits.length} commits since last tag (${latestTag ?? \"none\"})`);\n\n\tconst commits = foundCommits.reduce((acc, commit) => {\n\t\tconst parsed = commitParser.parse(commit);\n\t\tif (parsed) {\n\t\t\tacc.push(parsed);\n\t\t}\n\t\treturn acc;\n\t}, [] as Commit[]);\n\tlogger.debug(`Parsed ${commits.length} commits after applying commit parser`);\n\n\tconst filteredCommits = filterRevertedCommits(commits);\n\tlogger.debug(`Filtered to ${filteredCommits.length} commits after removing reverts`);\n\n\treturn {\n\t\tlatestTag,\n\t\tcommits: filteredCommits,\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\";\n\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../services/logger\";\nimport type { Commit } from \"../commit-parser/types\";\n\nexport interface NextVersion {\n\tversion: string;\n\treleaseType?: ReleaseType;\n\tpreMajor?: boolean;\n\tchanges?: {\n\t\tmajor: number;\n\t\tminor: number;\n\t\tpatch: number;\n\t};\n}\n\nexport async function getNextVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tcommits: Commit[],\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) {\n\t\tif (!semver.valid(config.nextVersion)) {\n\t\t\tthrow new Error(`Invalid Version: ${config.nextVersion}`);\n\t\t}\n\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\tlet releaseType: \"major\" | \"minor\" | \"patch\" = \"patch\";\n\tconst changes = { major: 0, minor: 0, patch: 0 } satisfies NextVersion[\"changes\"];\n\n\tif (config.releaseAs) {\n\t\treleaseType = config.releaseAs;\n\t} else {\n\t\t/**\n\t\t * - 0 = major\n\t\t * - 1 = minor\n\t\t * - 2 = patch\n\t\t */\n\t\tlet level = 2;\n\t\tconst MINOR_TYPES = [\"feat\", \"feature\"];\n\n\t\tfor (const commit of commits) {\n\t\t\t// We shouldn't consider merge commits or reverts as changes.\n\t\t\tif (commit.merge || commit.revert) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (commit.notes.length > 0 || commit.breakingChange) {\n\t\t\t\tchanges.major += commit.notes.length + (commit.breakingChange ? 1 : 0);\n\t\t\t\tlevel = 0;\n\t\t\t} else if (MINOR_TYPES.includes(commit.type.toLowerCase())) {\n\t\t\t\tchanges.minor += 1;\n\t\t\t\tif (level === 2) {\n\t\t\t\t\tlevel = 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tchanges.patch += 1;\n\t\t\t}\n\t\t}\n\n\t\t// If we are pre 1.0.0, we want to downgrade major bumps to minor, and minor bumps to patch.\n\t\t// This is because 0.x.y versions are considered unstable, and breaking changes are expected.\n\t\tif (isPreMajor && level < 2) {\n\t\t\tlevel++;\n\t\t\tchanges.patch += changes.minor;\n\t\t\tchanges.minor = changes.major;\n\t\t\tchanges.major = 0;\n\t\t}\n\n\t\tif (level === 0) {\n\t\t\treleaseType = \"major\";\n\t\t} else if (level === 1) {\n\t\t\treleaseType = \"minor\";\n\t\t} else {\n\t\t\treleaseType = \"patch\";\n\t\t}\n\t}\n\n\tconst releaseTypeOrPreRelease = getReleaseType(releaseType, currentVersion, config.preRelease);\n\tconst nextVersion =\n\t\tsemver.inc(\n\t\t\tcurrentVersion,\n\t\t\treleaseTypeOrPreRelease,\n\t\t\ttypeof config.preRelease === \"string\" ? config.preRelease : \"\",\n\t\t) ?? \"\";\n\n\tlogger.log(`Next version: ${nextVersion} (${releaseTypeOrPreRelease})`);\n\n\tif (commits.length > 0) {\n\t\tlogger.log(\n\t\t\t`  - Commits: ${commits.length}` +\n\t\t\t\t(changes.major > 0 ? `, Breaking Changes: ${changes.major}` : \"\") +\n\t\t\t\t(changes.minor > 0 ? `, New Features: ${changes.minor}` : \"\") +\n\t\t\t\t(changes.patch > 0 ? `, Bug Fixes: ${changes.patch}` : \"\"),\n\t\t);\n\t} else {\n\t\tlogger.log(\"  - No commits found.\");\n\t}\n\n\treturn {\n\t\tversion: nextVersion,\n\t\treleaseType: releaseTypeOrPreRelease,\n\t\tpreMajor: isPreMajor,\n\t\tchanges,\n\t};\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 \"../services/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 \"../services/logger\";\nimport type { Git } from \"../services/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 \"../services/logger\";\nimport type { Git } from \"../services/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","import { getCommitsSinceTag } from \"../process/get-commits\";\nimport { getCurrentVersion } from \"../process/get-current-version\";\nimport { getNextVersion } from \"../process/get-next-version\";\nimport { updateChangelog } from \"../process/changelog\";\nimport { commitChanges } from \"../process/commit\";\nimport { tagChanges } from \"../process/tag\";\n\nimport type { ForkConfig } from \"../config/types\";\nimport type { Logger } from \"../services/logger\";\nimport type { FileManager } from \"../files/file-manager\";\nimport type { Git } from \"../services/git\";\n\nexport async function main(config: ForkConfig, logger: Logger, fileManager: FileManager, git: Git) {\n\tlogger.log(`Running fork-version - ${new Date().toUTCString()}`);\n\tlogger.warn(config.dryRun ? \"[Dry Run] No changes will be written to disk.\\n\" : \"\");\n\n\tconst commits = await getCommitsSinceTag(config, logger, git);\n\tconst current = await getCurrentVersion(config, logger, git, fileManager, config.files);\n\tconst next = await getNextVersion(config, logger, commits.commits, current.version);\n\n\tlogger.log(\"Updating files: \");\n\tfor (const outFile of current.files) {\n\t\tlogger.log(`  - ${outFile.path}`);\n\n\t\tfileManager.write(outFile, next.version);\n\t}\n\n\tawait updateChangelog(config, logger, next.version);\n\tawait commitChanges(config, logger, git, current.files, next.version);\n\tawait tagChanges(config, logger, git, next.version);\n\n\treturn {\n\t\tconfig,\n\t\tcommits,\n\t\tcurrent,\n\t\tnext,\n\t};\n}\n"]}