fork-version 1.4.50 → 1.4.53

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 CHANGED
@@ -1,5 +1,29 @@
1
1
  # Fork Version
2
2
 
3
+ ## 1.4.53 (2024-04-18)
4
+
5
+
6
+ ### Test
7
+
8
+ * update test expectations ([d416dbb](https://github.com/eglavin/fork-version/commit/d416dbbf3e0ad0bf8dddf5a4021394203657c224))
9
+
10
+
11
+ ## 1.4.52 (2024-04-18)
12
+
13
+
14
+ ### Refactor
15
+
16
+ * clean up cli messaging ([630d957](https://github.com/eglavin/fork-version/commit/630d9573d52805eb768fd3d9613ffb8a8c785312))
17
+
18
+
19
+ ## 1.4.51 (2024-04-18)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * ensure files are merged even if no config defined ([9ef08fb](https://github.com/eglavin/fork-version/commit/9ef08fb8b1eb75d0e14d960ac7d85fc647896f3e))
25
+
26
+
3
27
  ## 1.4.50 (2024-04-18)
4
28
 
5
29
 
@@ -335,6 +335,7 @@ async function getUserConfig() {
335
335
  ...DEFAULT_CONFIG,
336
336
  ...cliArguments.flags,
337
337
  path: cwd,
338
+ files: getFiles([], cliArguments.flags?.files),
338
339
  changelogPresetConfig: getChangelogPresetConfig()
339
340
  };
340
341
  }
@@ -581,24 +582,30 @@ var Git = class {
581
582
  this.add = this.add.bind(this);
582
583
  this.commit = this.commit.bind(this);
583
584
  this.tag = this.tag.bind(this);
584
- this.revParse = this.revParse.bind(this);
585
+ this.currentBranch = this.currentBranch.bind(this);
585
586
  }
586
587
  add(...args) {
588
+ if (this.config.dryRun) {
589
+ return Promise.resolve("");
590
+ }
587
591
  return this.execGit("add", args.filter(Boolean));
588
592
  }
589
593
  commit(...args) {
594
+ if (this.config.dryRun) {
595
+ return Promise.resolve("");
596
+ }
590
597
  return this.execGit("commit", args.filter(Boolean));
591
598
  }
592
599
  tag(...args) {
600
+ if (this.config.dryRun) {
601
+ return Promise.resolve("");
602
+ }
593
603
  return this.execGit("tag", args.filter(Boolean));
594
604
  }
595
- revParse(...args) {
596
- return this.execGit("rev-parse", args.filter(Boolean));
605
+ async currentBranch() {
606
+ return (await this.execGit("rev-parse", ["--abbrev-ref", "HEAD"])).trim();
597
607
  }
598
608
  execGit(command, args) {
599
- if (this.config.dryRun) {
600
- return Promise.resolve("");
601
- }
602
609
  this.logger.debug(`Executing: git ${command} ${args.join(" ")}`);
603
610
  return new Promise((onResolve, onReject) => {
604
611
  child_process.execFile(
@@ -797,7 +804,6 @@ var FileManager = class {
797
804
  */
798
805
  write(filePath, newVersion) {
799
806
  if (this.config.dryRun) {
800
- this.logger.log(`[Dry run]: Not updating ${filePath}`);
801
807
  return;
802
808
  }
803
809
  if (filePath.toLowerCase().endsWith(".json")) {
@@ -820,4 +826,4 @@ exports.getUserConfig = getUserConfig;
820
826
  exports.tagChanges = tagChanges;
821
827
  exports.updateChangelog = updateChangelog;
822
828
  //# sourceMappingURL=out.js.map
823
- //# sourceMappingURL=chunk-OMTZL56J.cjs.map
829
+ //# sourceMappingURL=chunk-JD645RQZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/schema.ts","../src/config/user-config.ts","../src/config/defaults.ts","../src/config/cli-arguments.ts","../src/config/changelog-preset-config.ts","../src/process/version.ts","../src/utils/git-tag-version.ts","../src/utils/release-type.ts","../src/process/changelog.ts","../src/utils/file-state.ts","../src/process/commit.ts","../src/utils/git.ts","../src/utils/format-commit-message.ts","../src/process/tag.ts","../src/strategies/json-package.ts","../src/libs/stringify-package.ts","../src/strategies/plain-text.ts","../src/strategies/file-manager.ts"],"names":["semver","resolve","readFileSync","writeFileSync"],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nexport const ChangelogPresetConfigSchema = z.object({\n\t/**\n\t * An array of `type` objects representing the explicitly supported commit message types,\n\t * and whether they should show up in generated `CHANGELOG`s.\n\t */\n\ttypes: z.array(\n\t\tz.object({\n\t\t\ttype: z.string(),\n\t\t\tsection: z.string().optional(),\n\t\t\thidden: z.boolean().optional(),\n\t\t}),\n\t),\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(),\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(),\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(),\n\t/**\n\t * A URL representing the a user's profile URL on GitHub, Gitlab, etc. This URL is used\n\t * for substituting @bcoe with https://github.com/bcoe in commit messages.\n\t * @default \"{{host}}/{{user}}\"\n\t */\n\tuserUrlFormat: z.string(),\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.string(),\n\t/**\n\t * An array of prefixes used to detect references to issues\n\t * @default [\"#\"]\n\t */\n\tissuePrefixes: z.array(z.string()),\n});\n\nexport type ChangelogPresetConfig = z.infer<typeof ChangelogPresetConfigSchema>;\n\nexport const ForkConfigSchema = z.object({\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(),\n\t/**\n\t * Name of the changelog file.\n\t * @default \"CHANGELOG.md\"\n\t */\n\tchangelog: z.string(),\n\t/**\n\t * The header to be used in 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(),\n\t/**\n\t * Files to be updated.\n\t * @default\n\t * ```js\n\t * [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]\n\t * ```\n\t */\n\tfiles: z.array(z.string()),\n\t/**\n\t * Specify a prefix for the git tag fork-version will create.\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 * | 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(),\n\t/**\n\t * Make a pre-release with optional label, if value is a string it will be used as the\n\t * pre-release tag.\n\t *\n\t * | Value | 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\tpreReleaseTag: z.string().or(z.boolean()).optional(),\n\n\t/**\n\t * Commit all staged changes, not just files updated by fork-version.\n\t * @default false\n\t */\n\tcommitAll: z.boolean(),\n\t/**\n\t * If set we'll log debug information.\n\t * @default false\n\t */\n\tdebug: z.boolean(),\n\t/**\n\t * If true, no output will be written to disk or committed.\n\t * @default false\n\t */\n\tdryRun: z.boolean(),\n\t/**\n\t * If true and we cant find a version in the list of `files`, we'll fallback\n\t * and attempt to use the latest git tag to get the current version.\n\t * @default true\n\t */\n\tgitTagFallback: z.boolean(),\n\t/**\n\t * If set, we'll gather information about the current version and exit.\n\t * @default false\n\t */\n\tinspectVersion: z.boolean(),\n\t/**\n\t * Should we sign the git commit using GPG?\n\t * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt GPG Sign Commits}\n\t * @default false\n\t */\n\tsign: z.boolean(),\n\t/**\n\t * If true, no output will be written to stdout.\n\t * @default false\n\t */\n\tsilent: z.boolean(),\n\t/**\n\t * If true, allow git to run git commit hooks.\n\t * @default false\n\t */\n\tverify: z.boolean(),\n\n\t/**\n\t * If set, we'll use this version number instead of trying to find a version from the list of `files`.\n\t * @example \"1.0.0\"\n\t * @default undefined\n\t */\n\tcurrentVersion: z.string().optional(),\n\t/**\n\t * If set, we'll attempt to update the version number to this version, instead of incrementing\n\t * using \"conventional-commit\".\n\t * @example \"2.0.0\"\n\t * @default undefined\n\t */\n\tnextVersion: z.string().optional(),\n\n\t/**\n\t * Override the default conventional-changelog preset configuration.\n\t */\n\tchangelogPresetConfig: ChangelogPresetConfigSchema.partial(),\n});\n\nexport type ForkConfig = z.infer<typeof ForkConfigSchema>;\n\nexport function defineConfig(config: Partial<ForkConfig>): Partial<ForkConfig> {\n\treturn config;\n}\n","import { parse, resolve } from \"node:path\";\nimport JoyCon from \"joycon\";\nimport { bundleRequire } from \"bundle-require\";\n\nimport { ForkConfigSchema, type ForkConfig } from \"./schema\";\nimport { DEFAULT_CONFIG } from \"./defaults\";\nimport { getCliArguments } from \"./cli-arguments\";\nimport { getChangelogPresetConfig } from \"./changelog-preset-config\";\n\nexport async function getUserConfig(): Promise<ForkConfig> {\n\tconst cliArguments = getCliArguments();\n\n\tconst cwd = cliArguments.flags.path ? resolve(cliArguments.flags.path) : process.cwd();\n\tconst joycon = new JoyCon();\n\tconst configFilePath = await joycon.resolve({\n\t\tfiles: [\"fork.config.ts\", \"fork.config.js\", \"fork.config.cjs\", \"fork.config.mjs\"],\n\t\tcwd,\n\t\tstopDir: parse(cwd).root,\n\t});\n\n\tif (!configFilePath) {\n\t\treturn {\n\t\t\t...DEFAULT_CONFIG,\n\t\t\t...cliArguments.flags,\n\t\t\tpath: cwd,\n\t\t\tfiles: getFiles([], cliArguments.flags?.files),\n\t\t\tchangelogPresetConfig: getChangelogPresetConfig(),\n\t\t} as ForkConfig;\n\t}\n\n\tconst foundConfig = await bundleRequire({ filepath: configFilePath });\n\tconst parsedConfig = ForkConfigSchema.partial().safeParse(\n\t\tfoundConfig.mod.default || foundConfig.mod,\n\t);\n\n\tif (!parsedConfig.success) {\n\t\tthrow parsedConfig.error;\n\t}\n\n\tconst usersConfig = {\n\t\t...DEFAULT_CONFIG,\n\t\t...parsedConfig.data,\n\t\t...cliArguments.flags,\n\t} as ForkConfig;\n\n\treturn {\n\t\t...usersConfig,\n\t\tpath: cwd,\n\t\tfiles: getFiles(parsedConfig.data?.files, cliArguments.flags?.files),\n\t\tchangelogPresetConfig: getChangelogPresetConfig(usersConfig?.changelogPresetConfig),\n\t};\n}\n\nfunction getFiles(configFiles: string[] | undefined, cliFiles: string[] | undefined): 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// 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 type { ForkConfig } from \"./schema\";\n\nexport const DEFAULT_CONFIG: ForkConfig = {\n\tpath: process.cwd(),\n\tchangelog: \"CHANGELOG.md\",\n\tfiles: [\n\t\t\"package.json\",\n\t\t\"package-lock.json\",\n\t\t\"npm-shrinkwrap.json\",\n\t\t\"manifest.json\", // Chrome extensions\n\t\t\"bower.json\",\n\t],\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\tcommitAll: false,\n\tdebug: false,\n\tdryRun: false,\n\tgitTagFallback: true,\n\tinspectVersion: false,\n\tsign: false,\n\tsilent: false,\n\tverify: false,\n\n\tchangelogPresetConfig: {},\n};\n","import meow from \"meow\";\n\nexport function getCliArguments() {\n\treturn meow(\n\t\t`\nUsage:\n $ fork-version [options]\n\nOptions:\n --path [Default: process.cwd()]\n The path fork-version will run from.\n --changelog [Default: \"CHANGELOG.md\"]\n Name of the changelog file.\n --header, -H\n The header to be used in the changelog.\n --files, --file, -F [Default: [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]]\n Files to be updated.\n --tag-prefix [Default: \"v\"]\n Specify a prefix for the git tag \"fork-version\" will create.\n --pre-release-tag [Default: undefined]\n Make a pre-release with optional label, If value is a string it\n will be used as the pre-release tag.\n\n --commit-all\n Commit all staged changes, not just files updated by fork-version.\n --debug\n If true, we'll output debug information.\n --dry-run\n If true, no output will be written to disk or committed.\n --git-tag-fallback [Default: true]\n If true and we cant find a version in the given files, we'll fallback\n and attempt to use the latest git tag for the current version.\n --inspect-version\n If set, we'll gather information about the current version and exit.\n --sign\n Should we sign the git commit using GPG?\n --silent\n If true, no output will be written to stdout.\n --verify\n If true, allow git to run git commit hooks.\n\n --current-version\n If set, we'll use this version number instead of trying to find a\n version in a \"file\".\n --next-version\n If set, we'll attempt to update the version number to this version,\n instead of incrementing using \"conventional-commit\".\n`,\n\t\t{\n\t\t\timportMeta: import.meta,\n\t\t\tflags: {\n\t\t\t\tpath: { type: \"string\", default: process.cwd() },\n\t\t\t\tchangelog: { type: \"string\" },\n\t\t\t\theader: { type: \"string\", shortFlag: \"H\" },\n\t\t\t\tfiles: { type: \"string\", isMultiple: true, aliases: [\"file\"], shortFlag: \"F\" },\n\t\t\t\ttagPrefix: { type: \"string\" },\n\t\t\t\tpreReleaseTag: { type: \"string\" },\n\n\t\t\t\tcommitAll: { type: \"boolean\" },\n\t\t\t\tdebug: { type: \"boolean\" },\n\t\t\t\tdryRun: { type: \"boolean\" },\n\t\t\t\tgitTagFallback: { type: \"boolean\" },\n\t\t\t\tinspectVersion: { type: \"boolean\" },\n\t\t\t\tsign: { type: \"boolean\" },\n\t\t\t\tsilent: { type: \"boolean\" },\n\t\t\t\tverify: { type: \"boolean\" },\n\n\t\t\t\tcurrentVersion: { type: \"string\" },\n\t\t\t\tnextVersion: { type: \"string\" },\n\t\t\t},\n\t\t},\n\t);\n}\n","import conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigSchema, type ForkConfig } from \"./schema\";\n\nexport function getChangelogPresetConfig(\n\tusersChangelogPresetConfig?: ForkConfig[\"changelogPresetConfig\"],\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\tpreset[key] = value.default;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Then overwrite with any values from the users config\n\tif (usersChangelogPresetConfig && typeof usersChangelogPresetConfig === \"object\") {\n\t\tObject.entries(usersChangelogPresetConfig).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\treturn ChangelogPresetConfigSchema.passthrough().parse(preset);\n}\n","import semver, { type ReleaseType } from \"semver\";\nimport conventionalRecommendedBump from \"conventional-recommended-bump\";\n\nimport { getLatestGitTagVersion } from \"../utils/git-tag-version\";\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { IFileManager, FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface CurrentVersion {\n\tversion: string;\n\tfiles: FileState[];\n}\n\nexport async function getCurrentVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfileManager: IFileManager,\n): Promise<CurrentVersion> {\n\tconst files: FileState[] = [];\n\tconst versions = new Set<string>();\n\n\tfor (const file of config.files) {\n\t\tconst fileState = fileManager.read(file);\n\n\t\tif (fileState) {\n\t\t\tfiles.push(fileState);\n\n\t\t\tif (config.currentVersion) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tversions.add(fileState.version);\n\t\t}\n\t}\n\n\tif (config.currentVersion) {\n\t\tversions.add(config.currentVersion);\n\t}\n\n\tif (versions.size === 0) {\n\t\tif (config.gitTagFallback) {\n\t\t\tconst version = await getLatestGitTagVersion(config.tagPrefix);\n\t\t\tif (version) {\n\t\t\t\treturn {\n\t\t\t\t\tfiles: [],\n\t\t\t\t\tversion: version,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Unable to find current version\");\n\t} else if (versions.size > 1) {\n\t\tthrow new Error(\"Found multiple versions\");\n\t}\n\n\tconst currentVersion = versions.entries().next().value[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.nextVersion && semver.valid(config.nextVersion)) {\n\t\tlogger.log(`Next version: ${config.nextVersion}`);\n\t\treturn { version: config.nextVersion };\n\t}\n\n\tconst isPreMajor = semver.lt(currentVersion, \"1.0.0\");\n\n\tlet recommendedBump: Awaited<ReturnType<typeof conventionalRecommendedBump>>;\n\ttry {\n\t\trecommendedBump = await conventionalRecommendedBump({\n\t\t\tpreset: {\n\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\tpreMajor: isPreMajor,\n\t\t\t},\n\t\t\tpath: config.path,\n\t\t\ttagPrefix: config.tagPrefix,\n\t\t\tcwd: config.path,\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(`[conventional-recommended-bump] Unable to determine next version`);\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.preReleaseTag,\n\t\t);\n\n\t\tconst state: NextVersion = {\n\t\t\t...recommendedBump,\n\t\t\tpreMajor: isPreMajor,\n\t\t\treleaseType,\n\t\t\tversion:\n\t\t\t\tsemver.inc(\n\t\t\t\t\tcurrentVersion,\n\t\t\t\t\treleaseType,\n\t\t\t\t\ttypeof config.preReleaseTag === \"string\" ? config.preReleaseTag : undefined,\n\t\t\t\t) ?? \"\",\n\t\t};\n\n\t\tlogger.log(`Next version: ${state.version} (${state.releaseType})`);\n\t\treturn state;\n\t}\n\n\tthrow new Error(\"Unable to find next version\");\n}\n","import gitSemverTags from \"git-semver-tags\";\nimport semver from \"semver\";\n\n/**\n * Get the latest git tag version.\n *\n * @example\n * ```ts\n * const tagPrefix = \"v\";\n * await getLatestGitTagVersion(tagPrefix); // 1.2.3\n * ```\n */\nexport async function getLatestGitTagVersion(tagPrefix: string | undefined): Promise<string> {\n\tconst gitTags = await gitSemverTags({ tagPrefix });\n\tif (!gitTags.length) {\n\t\treturn \"1.0.0\";\n\t}\n\n\tconst cleanedTags = [];\n\n\tfor (const tag of gitTags) {\n\t\tconst cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), \"\"));\n\n\t\tif (cleanedTag) {\n\t\t\tcleanedTags.push(cleanedTag);\n\t\t}\n\t}\n\n\treturn cleanedTags.sort(semver.rcompare)[0];\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 { 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/schema\";\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.error(\"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\", (error) => {\n\t\t\t\tlogger.error(\"conventional-changelog: Unable to parse changes\");\n\t\t\t\tthrow error;\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\ninterface UpdateChangelog {\n\tchangelogPath: string;\n\toldContent: string;\n\tnewContent: string;\n}\n\nexport async function updateChangelog(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<UpdateChangelog> {\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\tif (!config.dryRun && !fileExists(changelogPath)) {\n\t\tlogger.log(`Creating Changelog file: ${changelogPath}`);\n\t\twriteFileSync(changelogPath, \"\\n\", \"utf8\");\n\t}\n\n\tconst oldContent = getOldReleaseContent(changelogPath, fileExists(changelogPath));\n\tconst newContent = await getNewReleaseContent(config, logger, nextVersion);\n\n\tlogger.log(`Updating Changelog: ${changelogPath}`);\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\treturn {\n\t\tchangelogPath,\n\t\toldContent,\n\t\tnewContent,\n\t};\n}\n","import { lstatSync } from \"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 (e) {\n\t\treturn false;\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface CommitChanges {\n\tfilesToCommit: string[];\n\tgitAddOutput?: string;\n\tgitCommitOutput?: string;\n}\n\nexport async function commitChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\tnextVersion: string,\n): Promise<CommitChanges> {\n\tconst git = new Git(config, logger);\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\t\tfilesToCommit,\n\t\t};\n\t}\n\n\tconst shouldVerify = config.verify ? undefined : \"--no-verify\";\n\tconst shouldSign = config.sign ? \"--gpg-sign\" : undefined;\n\n\t// If commitAll is set, commit all changed files.\n\tif (config.commitAll) {\n\t\treturn {\n\t\t\tfilesToCommit,\n\t\t\tgitAddOutput: await git.add(\"--all\"),\n\t\t\tgitCommitOutput: await git.commit(\n\t\t\t\tshouldVerify,\n\t\t\t\tshouldSign,\n\t\t\t\t\"--message\",\n\t\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tfilesToCommit,\n\t\tgitAddOutput: await git.add(...filesToCommit),\n\t\tgitCommitOutput: await git.commit(\n\t\t\tshouldVerify,\n\t\t\tshouldSign,\n\t\t\t...filesToCommit,\n\t\t\t\"--message\",\n\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t),\n\t};\n}\n","import { execFile } from \"node:child_process\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"./logger\";\n\nexport class Git {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {\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.currentBranch = this.currentBranch.bind(this);\n\t}\n\n\tpublic add(...args: (string | undefined)[]) {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\treturn this.execGit(\"add\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic commit(...args: (string | undefined)[]) {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\treturn this.execGit(\"commit\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic tag(...args: (string | undefined)[]) {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\treturn this.execGit(\"tag\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic async currentBranch() {\n\t\treturn (await this.execGit(\"rev-parse\", [\"--abbrev-ref\", \"HEAD\"])).trim();\n\t}\n\n\tprivate execGit(command: string, args: string[]): Promise<string> {\n\t\tthis.logger.debug(`Executing: git ${command} ${args.join(\" \")}`);\n\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},\n\t\t\t\t(error, stdout, stderr) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tthis.logger.error(`git ${command}:`);\n\t\t\t\t\t\tonReject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tonResolve(stdout ? stdout : stderr);\n\t\t\t\t},\n\t\t\t);\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 { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface TagChanges {\n\tgitTagOutput: string;\n}\n\nexport async function tagChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<TagChanges> {\n\tconst git = new Git(config, logger);\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 gitTagOutput = await git.tag(\n\t\tconfig.sign ? \"--sign\" : \"--annotate\",\n\t\ttag,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n\n\treturn {\n\t\tgitTagOutput,\n\t};\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport detectIndent from \"detect-indent\";\nimport { detectNewline } from \"detect-newline\";\n\nimport { stringifyPackage } from \"../libs/stringify-package\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\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\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 parsedJson = JSON.parse(fileContents);\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(`Unable to determine json package file: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\t\tconst parsedJson = JSON.parse(fileContents);\n\n\t\tparsedJson.version = newVersion;\n\t\tif (parsedJson.packages?.[\"\"]) {\n\t\t\tparsedJson.packages[\"\"].version = newVersion; // package-lock v2 stores version here too.\n\t\t}\n\n\t\twriteFileSync(\n\t\t\tfilePath,\n\t\t\tstringifyPackage(parsedJson, detectIndent(fileContents).amount, detectNewline(fileContents)),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n}\n","// https://github.com/npm/stringify-package/blob/main/LICENSE\n// Extracted from npm/stringify-package\n//\n// Copyright npm, Inc\n//\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nconst DEFAULT_INDENT = 2;\nconst CRLF = \"\\r\\n\";\nconst LF = \"\\n\";\n\n/**\n * @param data The object to stringify\n * @param indent `2, 4, \" \", \"\\t\"` Number of spaces a string of spaces or tab character, defaults to 2\n * @param newline `\"\\r\\n\", \"\\n\"` Windows or Unix line endings, defaults to Unix\n */\nexport function stringifyPackage(\n\tdata: object,\n\tindent?: string | number,\n\tnewline?: typeof CRLF | typeof LF,\n): string {\n\tconst stringified = JSON.stringify(data, null, indent ?? DEFAULT_INDENT);\n\n\tif (newline === CRLF) {\n\t\treturn stringified.replace(new RegExp(LF, \"g\"), CRLF);\n\t}\n\n\treturn stringified;\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/schema\";\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(`Unable to determine plain text file: ${fileName}`);\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\twriteFileSync(filePath, newVersion, \"utf8\");\n\t}\n}\n","import { JSONPackage } from \"./json-package\";\nimport { PlainText } from \"./plain-text\";\n\nimport type { ForkConfig } from \"../config/schema\";\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(filePath: string, newVersion: string): void;\n}\n\nexport class FileManager implements IFileManager {\n\tprivate JSONPackage: JSONPackage;\n\tprivate PlainText: PlainText;\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.PlainText = new PlainText(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\tif (fileName.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.read(fileName);\n\t\t} else if (fileName.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.read(fileName);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${fileName}`);\n\t}\n\n\t/**\n\t * Write the new version to the given file path.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.write(\"/path/to/package.json\", \"1.2.3\");\n\t * ```\n\t */\n\tpublic write(filePath: string, newVersion: string): void {\n\t\tif (this.config.dryRun) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (filePath.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.write(filePath, newVersion);\n\t\t} else if (filePath.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.write(filePath, newVersion);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${filePath}`);\n\t}\n}\n"]}
@@ -321,6 +321,7 @@ async function getUserConfig() {
321
321
  ...DEFAULT_CONFIG,
322
322
  ...cliArguments.flags,
323
323
  path: cwd,
324
+ files: getFiles([], cliArguments.flags?.files),
324
325
  changelogPresetConfig: getChangelogPresetConfig()
325
326
  };
326
327
  }
@@ -567,24 +568,30 @@ var Git = class {
567
568
  this.add = this.add.bind(this);
568
569
  this.commit = this.commit.bind(this);
569
570
  this.tag = this.tag.bind(this);
570
- this.revParse = this.revParse.bind(this);
571
+ this.currentBranch = this.currentBranch.bind(this);
571
572
  }
572
573
  add(...args) {
574
+ if (this.config.dryRun) {
575
+ return Promise.resolve("");
576
+ }
573
577
  return this.execGit("add", args.filter(Boolean));
574
578
  }
575
579
  commit(...args) {
580
+ if (this.config.dryRun) {
581
+ return Promise.resolve("");
582
+ }
576
583
  return this.execGit("commit", args.filter(Boolean));
577
584
  }
578
585
  tag(...args) {
586
+ if (this.config.dryRun) {
587
+ return Promise.resolve("");
588
+ }
579
589
  return this.execGit("tag", args.filter(Boolean));
580
590
  }
581
- revParse(...args) {
582
- return this.execGit("rev-parse", args.filter(Boolean));
591
+ async currentBranch() {
592
+ return (await this.execGit("rev-parse", ["--abbrev-ref", "HEAD"])).trim();
583
593
  }
584
594
  execGit(command, args) {
585
- if (this.config.dryRun) {
586
- return Promise.resolve("");
587
- }
588
595
  this.logger.debug(`Executing: git ${command} ${args.join(" ")}`);
589
596
  return new Promise((onResolve, onReject) => {
590
597
  execFile(
@@ -783,7 +790,6 @@ var FileManager = class {
783
790
  */
784
791
  write(filePath, newVersion) {
785
792
  if (this.config.dryRun) {
786
- this.logger.log(`[Dry run]: Not updating ${filePath}`);
787
793
  return;
788
794
  }
789
795
  if (filePath.toLowerCase().endsWith(".json")) {
@@ -797,4 +803,4 @@ var FileManager = class {
797
803
 
798
804
  export { FileManager, ForkConfigSchema, Git, commitChanges, defineConfig, getCurrentVersion, getNextVersion, getUserConfig, tagChanges, updateChangelog };
799
805
  //# sourceMappingURL=out.js.map
800
- //# sourceMappingURL=chunk-NKEO7YFB.js.map
806
+ //# sourceMappingURL=chunk-KFBD5WZ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/schema.ts","../src/config/user-config.ts","../src/config/defaults.ts","../src/config/cli-arguments.ts","../src/config/changelog-preset-config.ts","../src/process/version.ts","../src/utils/git-tag-version.ts","../src/utils/release-type.ts","../src/process/changelog.ts","../src/utils/file-state.ts","../src/process/commit.ts","../src/utils/git.ts","../src/utils/format-commit-message.ts","../src/process/tag.ts","../src/strategies/json-package.ts","../src/libs/stringify-package.ts","../src/strategies/plain-text.ts","../src/strategies/file-manager.ts"],"names":["semver","resolve","readFileSync","writeFileSync"],"mappings":";AAAA,SAAS,SAAS;AAEX,IAAM,8BAA8B,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD,OAAO,EAAE;AAAA,IACR,EAAE,OAAO;AAAA,MACR,MAAM,EAAE,OAAO;AAAA,MACf,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,MAC7B,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1B,kBAAkB,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3B,gBAAgB,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzB,eAAe,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,4BAA4B,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC;AAClC,CAAC;AAIM,IAAM,mBAAmB,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxC,MAAM,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,WAAW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUpB,QAAQ,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBzB,WAAW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcpB,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnD,WAAW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrB,OAAO,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjB,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,gBAAgB,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1B,gBAAgB,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,MAAM,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhB,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlB,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKjC,uBAAuB,4BAA4B,QAAQ;AAC5D,CAAC;AAIM,SAAS,aAAa,QAAkD;AAC9E,SAAO;AACR;;;ACxLA,SAAS,OAAO,eAAe;AAC/B,OAAO,YAAY;AACnB,SAAS,qBAAqB;;;ACAvB,IAAM,iBAA6B;AAAA,EACzC,MAAM,QAAQ,IAAI;AAAA,EAClB,WAAW;AAAA,EACX,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,EACD;AAAA,EACA,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,WAAW;AAAA,EAEX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,uBAAuB,CAAC;AACzB;;;AC5BA,OAAO,UAAU;AAEV,SAAS,kBAAkB;AACjC,SAAO;AAAA,IACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA4CA;AAAA,MACC,YAAY;AAAA,MACZ,OAAO;AAAA,QACN,MAAM,EAAE,MAAM,UAAU,SAAS,QAAQ,IAAI,EAAE;AAAA,QAC/C,WAAW,EAAE,MAAM,SAAS;AAAA,QAC5B,QAAQ,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,QACzC,OAAO,EAAE,MAAM,UAAU,YAAY,MAAM,SAAS,CAAC,MAAM,GAAG,WAAW,IAAI;AAAA,QAC7E,WAAW,EAAE,MAAM,SAAS;AAAA,QAC5B,eAAe,EAAE,MAAM,SAAS;AAAA,QAEhC,WAAW,EAAE,MAAM,UAAU;AAAA,QAC7B,OAAO,EAAE,MAAM,UAAU;AAAA,QACzB,QAAQ,EAAE,MAAM,UAAU;AAAA,QAC1B,gBAAgB,EAAE,MAAM,UAAU;AAAA,QAClC,gBAAgB,EAAE,MAAM,UAAU;AAAA,QAClC,MAAM,EAAE,MAAM,UAAU;AAAA,QACxB,QAAQ,EAAE,MAAM,UAAU;AAAA,QAC1B,QAAQ,EAAE,MAAM,UAAU;AAAA,QAE1B,gBAAgB,EAAE,MAAM,SAAS;AAAA,QACjC,aAAa,EAAE,MAAM,SAAS;AAAA,MAC/B;AAAA,IACD;AAAA,EACD;AACD;;;ACxEA,OAAO,qCAAqC;AAIrC,SAAS,yBACf,4BACC;AACD,QAAM,SAAiD;AAAA,IACtD,MAAM;AAAA,EACP;AAGA,MAAI,OAAO,gCAAgC,eAAe,UAAU;AACnE,WAAO,QAAQ,gCAAgC,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACpF,UAAI,aAAa,SAAS,MAAM,YAAY,QAAW;AACtD,eAAO,GAAG,IAAI,MAAM;AAAA,MACrB;AAAA,IACD,CAAC;AAAA,EACF;AAGA,MAAI,8BAA8B,OAAO,+BAA+B,UAAU;AACjF,WAAO,QAAQ,0BAA0B,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACpE,UAAI,UAAU,QAAW;AACxB,eAAO,GAAG,IAAI;AAAA,MACf;AAAA,IACD,CAAC;AAAA,EACF;AAEA,SAAO,4BAA4B,YAAY,EAAE,MAAM,MAAM;AAC9D;;;AHrBA,eAAsB,gBAAqC;AAC1D,QAAM,eAAe,gBAAgB;AAErC,QAAM,MAAM,aAAa,MAAM,OAAO,QAAQ,aAAa,MAAM,IAAI,IAAI,QAAQ,IAAI;AACrF,QAAM,SAAS,IAAI,OAAO;AAC1B,QAAM,iBAAiB,MAAM,OAAO,QAAQ;AAAA,IAC3C,OAAO,CAAC,kBAAkB,kBAAkB,mBAAmB,iBAAiB;AAAA,IAChF;AAAA,IACA,SAAS,MAAM,GAAG,EAAE;AAAA,EACrB,CAAC;AAED,MAAI,CAAC,gBAAgB;AACpB,WAAO;AAAA,MACN,GAAG;AAAA,MACH,GAAG,aAAa;AAAA,MAChB,MAAM;AAAA,MACN,OAAO,SAAS,CAAC,GAAG,aAAa,OAAO,KAAK;AAAA,MAC7C,uBAAuB,yBAAyB;AAAA,IACjD;AAAA,EACD;AAEA,QAAM,cAAc,MAAM,cAAc,EAAE,UAAU,eAAe,CAAC;AACpE,QAAM,eAAe,iBAAiB,QAAQ,EAAE;AAAA,IAC/C,YAAY,IAAI,WAAW,YAAY;AAAA,EACxC;AAEA,MAAI,CAAC,aAAa,SAAS;AAC1B,UAAM,aAAa;AAAA,EACpB;AAEA,QAAM,cAAc;AAAA,IACnB,GAAG;AAAA,IACH,GAAG,aAAa;AAAA,IAChB,GAAG,aAAa;AAAA,EACjB;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,MAAM;AAAA,IACN,OAAO,SAAS,aAAa,MAAM,OAAO,aAAa,OAAO,KAAK;AAAA,IACnE,uBAAuB,yBAAyB,aAAa,qBAAqB;AAAA,EACnF;AACD;AAEA,SAAS,SAAS,aAAmC,UAA0C;AAC9F,QAAM,cAAc,oBAAI,IAAY;AAGpC,MAAI,MAAM,QAAQ,WAAW,GAAG;AAC/B,gBAAY,QAAQ,CAAC,SAAS,YAAY,IAAI,IAAI,CAAC;AAAA,EACpD;AAGA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC5B,aAAS,QAAQ,CAAC,SAAS,YAAY,IAAI,IAAI,CAAC;AAAA,EACjD;AAGA,MAAI,YAAY,MAAM;AACrB,WAAO,MAAM,KAAK,WAAW;AAAA,EAC9B;AAEA,SAAO,eAAe;AACvB;;;AIxEA,OAAOA,aAAkC;AACzC,OAAO,iCAAiC;;;ACDxC,OAAO,mBAAmB;AAC1B,OAAO,YAAY;AAWnB,eAAsB,uBAAuB,WAAgD;AAC5F,QAAM,UAAU,MAAM,cAAc,EAAE,UAAU,CAAC;AACjD,MAAI,CAAC,QAAQ,QAAQ;AACpB,WAAO;AAAA,EACR;AAEA,QAAM,cAAc,CAAC;AAErB,aAAW,OAAO,SAAS;AAC1B,UAAM,aAAa,OAAO,MAAM,IAAI,QAAQ,IAAI,OAAO,IAAI,SAAS,EAAE,GAAG,EAAE,CAAC;AAE5E,QAAI,YAAY;AACf,kBAAY,KAAK,UAAU;AAAA,IAC5B;AAAA,EACD;AAEA,SAAO,YAAY,KAAK,OAAO,QAAQ,EAAE,CAAC;AAC3C;;;AC7BA,OAAOA,aAAkC;AASzC,SAAS,YAAY,MAAuB;AAC3C,SAAO,CAAC,SAAS,SAAS,OAAO,EAAE,QAAQ,QAAQ,EAAE;AACtD;AASA,SAAS,eAAe,SAA0D;AACjF,QAAM,eAAeA,QAAO,MAAM,OAAO;AAEzC,MAAI,cAAc,OAAO;AACxB,WAAO;AAAA,EACR,WAAW,cAAc,OAAO;AAC/B,WAAO;AAAA,EACR,WAAW,cAAc,OAAO;AAC/B,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAUO,SAAS,eACf,aACA,gBACA,eACc;AACd,MAAI,CAAC,eAAe;AACnB,WAAO;AAAA,EACR;AAEA,QAAM,8BAA8B,MAAM,QAAQA,QAAO,WAAW,cAAc,CAAC;AACnF,MAAI,6BAA6B;AAChC,UAAM,qBAAqB,eAAe,cAAc;AAExD,QACC,uBAAuB,eACvB,YAAY,kBAAkB,IAAI,YAAY,WAAW,GACxD;AACD,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO,MAAM,WAAW;AACzB;;;AFlDA,eAAsB,kBACrB,QACA,QACA,aAC0B;AAC1B,QAAM,QAAqB,CAAC;AAC5B,QAAM,WAAW,oBAAI,IAAY;AAEjC,aAAW,QAAQ,OAAO,OAAO;AAChC,UAAM,YAAY,YAAY,KAAK,IAAI;AAEvC,QAAI,WAAW;AACd,YAAM,KAAK,SAAS;AAEpB,UAAI,OAAO,gBAAgB;AAC1B;AAAA,MACD;AAEA,eAAS,IAAI,UAAU,OAAO;AAAA,IAC/B;AAAA,EACD;AAEA,MAAI,OAAO,gBAAgB;AAC1B,aAAS,IAAI,OAAO,cAAc;AAAA,EACnC;AAEA,MAAI,SAAS,SAAS,GAAG;AACxB,QAAI,OAAO,gBAAgB;AAC1B,YAAM,UAAU,MAAM,uBAAuB,OAAO,SAAS;AAC7D,UAAI,SAAS;AACZ,eAAO;AAAA,UACN,OAAO,CAAC;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,IAAI,MAAM,gCAAgC;AAAA,EACjD,WAAW,SAAS,OAAO,GAAG;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AAEA,QAAM,iBAAiB,SAAS,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;AAGxD,MAAI,OAAO,gBAAgB;AAC1B,YAAQ,IAAI,cAAc;AAC1B,YAAQ,KAAK,CAAC;AAAA,EACf;AAEA,SAAO,IAAI,oBAAoB,cAAc,EAAE;AAC/C,SAAO;AAAA,IACN;AAAA,IACA,SAAS;AAAA,EACV;AACD;AAUA,eAAsB,eACrB,QACA,QACA,gBACuB;AACvB,MAAI,OAAO,eAAeA,QAAO,MAAM,OAAO,WAAW,GAAG;AAC3D,WAAO,IAAI,iBAAiB,OAAO,WAAW,EAAE;AAChD,WAAO,EAAE,SAAS,OAAO,YAAY;AAAA,EACtC;AAEA,QAAM,aAAaA,QAAO,GAAG,gBAAgB,OAAO;AAEpD,MAAI;AACJ,MAAI;AACH,sBAAkB,MAAM,4BAA4B;AAAA,MACnD,QAAQ;AAAA,QACP,MAAM;AAAA,QACN,GAAG,OAAO;AAAA,QACV,UAAU;AAAA,MACX;AAAA,MACA,MAAM,OAAO;AAAA,MACb,WAAW,OAAO;AAAA,MAClB,KAAK,OAAO;AAAA,IACb,CAAC;AAAA,EACF,SAAS,OAAO;AACf,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACnF;AAEA,MAAI,gBAAgB,aAAa;AAChC,UAAM,cAAc;AAAA,MACnB,gBAAgB;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,IACR;AAEA,UAAM,QAAqB;AAAA,MAC1B,GAAG;AAAA,MACH,UAAU;AAAA,MACV;AAAA,MACA,SACCA,QAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB;AAAA,MACnE,KAAK;AAAA,IACP;AAEA,WAAO,IAAI,iBAAiB,MAAM,OAAO,KAAK,MAAM,WAAW,GAAG;AAClE,WAAO;AAAA,EACR;AAEA,QAAM,IAAI,MAAM,6BAA6B;AAC9C;;;AGnIA,SAAS,WAAAC,gBAAe;AACxB,SAAS,eAAe,oBAAoB;AAC5C,OAAO,2BAA2B;;;ACFlC,SAAS,iBAAiB;AAUnB,SAAS,WAAW,UAA2B;AACrD,MAAI;AACH,WAAO,UAAU,QAAQ,EAAE,OAAO;AAAA,EACnC,SAAS,GAAG;AACX,WAAO;AAAA,EACR;AACD;;;ADHA,IAAM,kBAAkB;AAMxB,SAAS,qBAAqB,UAAkB,QAAyB;AACxE,MAAI,QAAQ;AACX,UAAM,eAAe,aAAa,UAAU,OAAO;AACnD,UAAM,kBAAkB,aAAa,OAAO,eAAe;AAE3D,QAAI,oBAAoB,IAAI;AAC3B,aAAO,aAAa,UAAU,eAAe;AAAA,IAC9C;AAAA,EACD;AAEA,SAAO;AACR;AAKA,SAAS,qBACR,QACA,QACA,aACkB;AAClB,SAAO,IAAI,QAAgB,CAAC,cAAc;AACzC,QAAI,aAAa;AAEjB;AAAA,MACC;AAAA,QACC,QAAQ;AAAA,UACP,MAAM;AAAA,UACN,GAAG,OAAO;AAAA,QACX;AAAA,QACA,WAAW,OAAO;AAAA,QAClB,MAAM,IAAI,YAAsB,OAAO,MAAM,4BAA4B,GAAG,OAAO;AAAA,QACnF,KAAK,OAAO;AAAA,MACb;AAAA,MACA;AAAA,QACC,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,MAAM,OAAO;AAAA,MACd;AAAA,IACD,EACE,GAAG,SAAS,CAAC,UAAU;AACvB,aAAO,MAAM,iDAAiD;AAC9D,YAAM;AAAA,IACP,CAAC,EACA,GAAG,QAAQ,CAAC,UAAU;AACtB,oBAAc,MAAM,SAAS;AAAA,IAC9B,CAAC,EACA,GAAG,OAAO,MAAM;AAChB,gBAAU,UAAU;AAAA,IACrB,CAAC;AAAA,EACH,CAAC;AACF;AAQA,eAAsB,gBACrB,QACA,QACA,aAC2B;AAC3B,MAAI,OAAO,OAAO,OAAO,eAAe,MAAM,IAAI;AAEjD,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACxD;AAGA,QAAM,gBAAgBA,SAAQ,OAAO,MAAM,OAAO,SAAS;AAC3D,MAAI,CAAC,OAAO,UAAU,CAAC,WAAW,aAAa,GAAG;AACjD,WAAO,IAAI,4BAA4B,aAAa,EAAE;AACtD,kBAAc,eAAe,MAAM,MAAM;AAAA,EAC1C;AAEA,QAAM,aAAa,qBAAqB,eAAe,WAAW,aAAa,CAAC;AAChF,QAAM,aAAa,MAAM,qBAAqB,QAAQ,QAAQ,WAAW;AAEzE,SAAO,IAAI,uBAAuB,aAAa,EAAE;AACjD,MAAI,CAAC,OAAO,UAAU,YAAY;AACjC;AAAA,MACC;AAAA,MACA,GAAG,OAAO,MAAM;AAAA,EACjB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,KAAK;AAAA,MACJ;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AErHA,SAAS,WAAAA,gBAAe;;;ACAxB,SAAS,gBAAgB;AAIlB,IAAM,MAAN,MAAU;AAAA,EAChB,YACS,QACA,QACP;AAFO;AACA;AAER,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAAA,EAClD;AAAA,EAEO,OAAO,MAA8B;AAC3C,QAAI,KAAK,OAAO,QAAQ;AACvB,aAAO,QAAQ,QAAQ,EAAE;AAAA,IAC1B;AAEA,WAAO,KAAK,QAAQ,OAAO,KAAK,OAAO,OAAO,CAAa;AAAA,EAC5D;AAAA,EAEO,UAAU,MAA8B;AAC9C,QAAI,KAAK,OAAO,QAAQ;AACvB,aAAO,QAAQ,QAAQ,EAAE;AAAA,IAC1B;AAEA,WAAO,KAAK,QAAQ,UAAU,KAAK,OAAO,OAAO,CAAa;AAAA,EAC/D;AAAA,EAEO,OAAO,MAA8B;AAC3C,QAAI,KAAK,OAAO,QAAQ;AACvB,aAAO,QAAQ,QAAQ,EAAE;AAAA,IAC1B;AAEA,WAAO,KAAK,QAAQ,OAAO,KAAK,OAAO,OAAO,CAAa;AAAA,EAC5D;AAAA,EAEA,MAAa,gBAAgB;AAC5B,YAAQ,MAAM,KAAK,QAAQ,aAAa,CAAC,gBAAgB,MAAM,CAAC,GAAG,KAAK;AAAA,EACzE;AAAA,EAEQ,QAAQ,SAAiB,MAAiC;AACjE,SAAK,OAAO,MAAM,kBAAkB,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,EAAE;AAE/D,WAAO,IAAI,QAAQ,CAAC,WAAW,aAAa;AAC3C;AAAA,QACC;AAAA,QACA,CAAC,SAAS,GAAG,IAAI;AAAA,QACjB;AAAA,UACC,KAAK,KAAK,OAAO;AAAA,QAClB;AAAA,QACA,CAAC,OAAO,QAAQ,WAAW;AAC1B,cAAI,OAAO;AACV,iBAAK,OAAO,MAAM,OAAO,OAAO,GAAG;AACnC,qBAAS,KAAK;AAAA,UACf;AAEA,oBAAU,SAAS,SAAS,MAAM;AAAA,QACnC;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AACD;;;AC1DO,SAAS,oBAAoB,SAA6B,SAAyB;AACzF,MAAI,CAAC,SAAS;AACb,cAAU;AAAA,EACX;AAEA,SAAO,QAAQ,QAAQ,IAAI,OAAO,kBAAkB,GAAG,GAAG,OAAO;AAClE;;;AFEA,eAAsB,cACrB,QACA,QACA,OACA,aACyB;AACzB,QAAM,MAAM,IAAI,IAAI,QAAQ,MAAM;AAElC,SAAO,IAAI,oBAAoB;AAE/B,QAAM,gBAA0B,CAAC;AACjC,MAAI,WAAWA,SAAQ,OAAO,MAAM,OAAO,SAAS,CAAC,GAAG;AACvD,kBAAc,KAAKA,SAAQ,OAAO,MAAM,OAAO,SAAS,CAAC;AAAA,EAC1D;AACA,aAAW,QAAQ,OAAO;AACzB,kBAAc,KAAK,KAAK,IAAI;AAAA,EAC7B;AAGA,MAAI,cAAc,WAAW,GAAG;AAC/B,WAAO;AAAA,MACN;AAAA,IACD;AAAA,EACD;AAEA,QAAM,eAAe,OAAO,SAAS,SAAY;AACjD,QAAM,aAAa,OAAO,OAAO,eAAe;AAGhD,MAAI,OAAO,WAAW;AACrB,WAAO;AAAA,MACN;AAAA,MACA,cAAc,MAAM,IAAI,IAAI,OAAO;AAAA,MACnC,iBAAiB,MAAM,IAAI;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,QACA,oBAAoB,OAAO,uBAAuB,4BAA4B,WAAW;AAAA,MAC1F;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA,cAAc,MAAM,IAAI,IAAI,GAAG,aAAa;AAAA,IAC5C,iBAAiB,MAAM,IAAI;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,MACA,oBAAoB,OAAO,uBAAuB,4BAA4B,WAAW;AAAA,IAC1F;AAAA,EACD;AACD;;;AG1DA,eAAsB,WACrB,QACA,QACA,aACsB;AACtB,QAAM,MAAM,IAAI,IAAI,QAAQ,MAAM;AAGlC,QAAM,MAAM,GAAG,OAAO,SAAS,GAAG,WAAW;AAE7C,SAAO,IAAI,iBAAiB,GAAG,EAAE;AAEjC,QAAM,eAAe,MAAM,IAAI;AAAA,IAC9B,OAAO,OAAO,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,IACA,oBAAoB,OAAO,uBAAuB,4BAA4B,WAAW;AAAA,EAC1F;AAEA,SAAO;AAAA,IACN;AAAA,EACD;AACD;;;AC/BA,SAAS,WAAAA,gBAAe;AACxB,SAAS,gBAAAC,eAAc,iBAAAC,sBAAqB;AAC5C,OAAO,kBAAkB;AACzB,SAAS,qBAAqB;;;ACc9B,IAAM,iBAAiB;AACvB,IAAM,OAAO;AACb,IAAM,KAAK;AAOJ,SAAS,iBACf,MACA,QACA,SACS;AACT,QAAM,cAAc,KAAK,UAAU,MAAM,MAAM,UAAU,cAAc;AAEvE,MAAI,YAAY,MAAM;AACrB,WAAO,YAAY,QAAQ,IAAI,OAAO,IAAI,GAAG,GAAG,IAAI;AAAA,EACrD;AAEA,SAAO;AACR;;;ADdO,IAAM,cAAN,MAA0C;AAAA,EAChD,YACS,QACA,QACP;AAFO;AACA;AAAA,EACN;AAAA,EAEI,KAAK,UAAyC;AACpD,UAAM,WAAWF,SAAQ,KAAK,OAAO,MAAM,QAAQ;AAEnD,QAAI,WAAW,QAAQ,GAAG;AACzB,YAAM,eAAeC,cAAa,UAAU,MAAM;AAClD,YAAM,aAAa,KAAK,MAAM,YAAY;AAE1C,UAAI,WAAW,SAAS;AACvB,eAAO;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,WAAW;AAAA,UAEpB,WAAW,OAAO,YAAY,YAAY,YAAY,WAAW,UAAU;AAAA,QAC5E;AAAA,MACD;AAEA,WAAK,OAAO,KAAK,0CAA0C,QAAQ,EAAE;AAAA,IACtE;AAAA,EACD;AAAA,EAEO,MAAM,UAAkB,YAAoB;AAClD,UAAM,eAAeA,cAAa,UAAU,MAAM;AAClD,UAAM,aAAa,KAAK,MAAM,YAAY;AAE1C,eAAW,UAAU;AACrB,QAAI,WAAW,WAAW,EAAE,GAAG;AAC9B,iBAAW,SAAS,EAAE,EAAE,UAAU;AAAA,IACnC;AAEA,IAAAC;AAAA,MACC;AAAA,MACA,iBAAiB,YAAY,aAAa,YAAY,EAAE,QAAQ,cAAc,YAAY,CAAC;AAAA,MAC3F;AAAA,IACD;AAAA,EACD;AACD;;;AElEA,SAAS,WAAAF,gBAAe;AACxB,SAAS,gBAAAC,eAAc,iBAAAC,sBAAqB;AAerC,IAAM,YAAN,MAAwC;AAAA,EAC9C,YACS,QACA,QACP;AAFO;AACA;AAAA,EACN;AAAA,EAEI,KAAK,UAAyC;AACpD,UAAM,WAAWF,SAAQ,KAAK,OAAO,MAAM,QAAQ;AAEnD,QAAI,WAAW,QAAQ,GAAG;AACzB,YAAM,eAAeC,cAAa,UAAU,MAAM;AAElD,aAAO;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,gBAAgB;AAAA,MAC1B;AAAA,IACD;AAEA,SAAK,OAAO,KAAK,wCAAwC,QAAQ,EAAE;AAAA,EACpE;AAAA,EAEO,MAAM,UAAkB,YAAoB;AAClD,IAAAC,eAAc,UAAU,YAAY,MAAM;AAAA,EAC3C;AACD;;;ACtBO,IAAM,cAAN,MAA0C;AAAA,EAIhD,YACS,QACA,QACP;AAFO;AACA;AAER,SAAK,cAAc,IAAI,YAAY,QAAQ,MAAM;AACjD,SAAK,YAAY,IAAI,UAAU,QAAQ,MAAM;AAAA,EAC9C;AAAA,EATQ;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBD,KAAK,UAAyC;AACpD,QAAI,SAAS,YAAY,EAAE,SAAS,OAAO,GAAG;AAC7C,aAAO,KAAK,YAAY,KAAK,QAAQ;AAAA,IACtC,WAAW,SAAS,YAAY,EAAE,SAAS,aAAa,GAAG;AAC1D,aAAO,KAAK,UAAU,KAAK,QAAQ;AAAA,IACpC;AAEA,SAAK,OAAO,MAAM,0BAA0B,QAAQ,EAAE;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,MAAM,UAAkB,YAA0B;AACxD,QAAI,KAAK,OAAO,QAAQ;AACvB;AAAA,IACD;AAEA,QAAI,SAAS,YAAY,EAAE,SAAS,OAAO,GAAG;AAC7C,aAAO,KAAK,YAAY,MAAM,UAAU,UAAU;AAAA,IACnD,WAAW,SAAS,YAAY,EAAE,SAAS,aAAa,GAAG;AAC1D,aAAO,KAAK,UAAU,MAAM,UAAU,UAAU;AAAA,IACjD;AAEA,SAAK,OAAO,MAAM,0BAA0B,QAAQ,EAAE;AAAA,EACvD;AACD","sourcesContent":["import { z } from \"zod\";\n\nexport const ChangelogPresetConfigSchema = z.object({\n\t/**\n\t * An array of `type` objects representing the explicitly supported commit message types,\n\t * and whether they should show up in generated `CHANGELOG`s.\n\t */\n\ttypes: z.array(\n\t\tz.object({\n\t\t\ttype: z.string(),\n\t\t\tsection: z.string().optional(),\n\t\t\thidden: z.boolean().optional(),\n\t\t}),\n\t),\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(),\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(),\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(),\n\t/**\n\t * A URL representing the a user's profile URL on GitHub, Gitlab, etc. This URL is used\n\t * for substituting @bcoe with https://github.com/bcoe in commit messages.\n\t * @default \"{{host}}/{{user}}\"\n\t */\n\tuserUrlFormat: z.string(),\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.string(),\n\t/**\n\t * An array of prefixes used to detect references to issues\n\t * @default [\"#\"]\n\t */\n\tissuePrefixes: z.array(z.string()),\n});\n\nexport type ChangelogPresetConfig = z.infer<typeof ChangelogPresetConfigSchema>;\n\nexport const ForkConfigSchema = z.object({\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(),\n\t/**\n\t * Name of the changelog file.\n\t * @default \"CHANGELOG.md\"\n\t */\n\tchangelog: z.string(),\n\t/**\n\t * The header to be used in 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(),\n\t/**\n\t * Files to be updated.\n\t * @default\n\t * ```js\n\t * [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]\n\t * ```\n\t */\n\tfiles: z.array(z.string()),\n\t/**\n\t * Specify a prefix for the git tag fork-version will create.\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 * | 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(),\n\t/**\n\t * Make a pre-release with optional label, if value is a string it will be used as the\n\t * pre-release tag.\n\t *\n\t * | Value | 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\tpreReleaseTag: z.string().or(z.boolean()).optional(),\n\n\t/**\n\t * Commit all staged changes, not just files updated by fork-version.\n\t * @default false\n\t */\n\tcommitAll: z.boolean(),\n\t/**\n\t * If set we'll log debug information.\n\t * @default false\n\t */\n\tdebug: z.boolean(),\n\t/**\n\t * If true, no output will be written to disk or committed.\n\t * @default false\n\t */\n\tdryRun: z.boolean(),\n\t/**\n\t * If true and we cant find a version in the list of `files`, we'll fallback\n\t * and attempt to use the latest git tag to get the current version.\n\t * @default true\n\t */\n\tgitTagFallback: z.boolean(),\n\t/**\n\t * If set, we'll gather information about the current version and exit.\n\t * @default false\n\t */\n\tinspectVersion: z.boolean(),\n\t/**\n\t * Should we sign the git commit using GPG?\n\t * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt GPG Sign Commits}\n\t * @default false\n\t */\n\tsign: z.boolean(),\n\t/**\n\t * If true, no output will be written to stdout.\n\t * @default false\n\t */\n\tsilent: z.boolean(),\n\t/**\n\t * If true, allow git to run git commit hooks.\n\t * @default false\n\t */\n\tverify: z.boolean(),\n\n\t/**\n\t * If set, we'll use this version number instead of trying to find a version from the list of `files`.\n\t * @example \"1.0.0\"\n\t * @default undefined\n\t */\n\tcurrentVersion: z.string().optional(),\n\t/**\n\t * If set, we'll attempt to update the version number to this version, instead of incrementing\n\t * using \"conventional-commit\".\n\t * @example \"2.0.0\"\n\t * @default undefined\n\t */\n\tnextVersion: z.string().optional(),\n\n\t/**\n\t * Override the default conventional-changelog preset configuration.\n\t */\n\tchangelogPresetConfig: ChangelogPresetConfigSchema.partial(),\n});\n\nexport type ForkConfig = z.infer<typeof ForkConfigSchema>;\n\nexport function defineConfig(config: Partial<ForkConfig>): Partial<ForkConfig> {\n\treturn config;\n}\n","import { parse, resolve } from \"node:path\";\nimport JoyCon from \"joycon\";\nimport { bundleRequire } from \"bundle-require\";\n\nimport { ForkConfigSchema, type ForkConfig } from \"./schema\";\nimport { DEFAULT_CONFIG } from \"./defaults\";\nimport { getCliArguments } from \"./cli-arguments\";\nimport { getChangelogPresetConfig } from \"./changelog-preset-config\";\n\nexport async function getUserConfig(): Promise<ForkConfig> {\n\tconst cliArguments = getCliArguments();\n\n\tconst cwd = cliArguments.flags.path ? resolve(cliArguments.flags.path) : process.cwd();\n\tconst joycon = new JoyCon();\n\tconst configFilePath = await joycon.resolve({\n\t\tfiles: [\"fork.config.ts\", \"fork.config.js\", \"fork.config.cjs\", \"fork.config.mjs\"],\n\t\tcwd,\n\t\tstopDir: parse(cwd).root,\n\t});\n\n\tif (!configFilePath) {\n\t\treturn {\n\t\t\t...DEFAULT_CONFIG,\n\t\t\t...cliArguments.flags,\n\t\t\tpath: cwd,\n\t\t\tfiles: getFiles([], cliArguments.flags?.files),\n\t\t\tchangelogPresetConfig: getChangelogPresetConfig(),\n\t\t} as ForkConfig;\n\t}\n\n\tconst foundConfig = await bundleRequire({ filepath: configFilePath });\n\tconst parsedConfig = ForkConfigSchema.partial().safeParse(\n\t\tfoundConfig.mod.default || foundConfig.mod,\n\t);\n\n\tif (!parsedConfig.success) {\n\t\tthrow parsedConfig.error;\n\t}\n\n\tconst usersConfig = {\n\t\t...DEFAULT_CONFIG,\n\t\t...parsedConfig.data,\n\t\t...cliArguments.flags,\n\t} as ForkConfig;\n\n\treturn {\n\t\t...usersConfig,\n\t\tpath: cwd,\n\t\tfiles: getFiles(parsedConfig.data?.files, cliArguments.flags?.files),\n\t\tchangelogPresetConfig: getChangelogPresetConfig(usersConfig?.changelogPresetConfig),\n\t};\n}\n\nfunction getFiles(configFiles: string[] | undefined, cliFiles: string[] | undefined): 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// 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 type { ForkConfig } from \"./schema\";\n\nexport const DEFAULT_CONFIG: ForkConfig = {\n\tpath: process.cwd(),\n\tchangelog: \"CHANGELOG.md\",\n\tfiles: [\n\t\t\"package.json\",\n\t\t\"package-lock.json\",\n\t\t\"npm-shrinkwrap.json\",\n\t\t\"manifest.json\", // Chrome extensions\n\t\t\"bower.json\",\n\t],\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\tcommitAll: false,\n\tdebug: false,\n\tdryRun: false,\n\tgitTagFallback: true,\n\tinspectVersion: false,\n\tsign: false,\n\tsilent: false,\n\tverify: false,\n\n\tchangelogPresetConfig: {},\n};\n","import meow from \"meow\";\n\nexport function getCliArguments() {\n\treturn meow(\n\t\t`\nUsage:\n $ fork-version [options]\n\nOptions:\n --path [Default: process.cwd()]\n The path fork-version will run from.\n --changelog [Default: \"CHANGELOG.md\"]\n Name of the changelog file.\n --header, -H\n The header to be used in the changelog.\n --files, --file, -F [Default: [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]]\n Files to be updated.\n --tag-prefix [Default: \"v\"]\n Specify a prefix for the git tag \"fork-version\" will create.\n --pre-release-tag [Default: undefined]\n Make a pre-release with optional label, If value is a string it\n will be used as the pre-release tag.\n\n --commit-all\n Commit all staged changes, not just files updated by fork-version.\n --debug\n If true, we'll output debug information.\n --dry-run\n If true, no output will be written to disk or committed.\n --git-tag-fallback [Default: true]\n If true and we cant find a version in the given files, we'll fallback\n and attempt to use the latest git tag for the current version.\n --inspect-version\n If set, we'll gather information about the current version and exit.\n --sign\n Should we sign the git commit using GPG?\n --silent\n If true, no output will be written to stdout.\n --verify\n If true, allow git to run git commit hooks.\n\n --current-version\n If set, we'll use this version number instead of trying to find a\n version in a \"file\".\n --next-version\n If set, we'll attempt to update the version number to this version,\n instead of incrementing using \"conventional-commit\".\n`,\n\t\t{\n\t\t\timportMeta: import.meta,\n\t\t\tflags: {\n\t\t\t\tpath: { type: \"string\", default: process.cwd() },\n\t\t\t\tchangelog: { type: \"string\" },\n\t\t\t\theader: { type: \"string\", shortFlag: \"H\" },\n\t\t\t\tfiles: { type: \"string\", isMultiple: true, aliases: [\"file\"], shortFlag: \"F\" },\n\t\t\t\ttagPrefix: { type: \"string\" },\n\t\t\t\tpreReleaseTag: { type: \"string\" },\n\n\t\t\t\tcommitAll: { type: \"boolean\" },\n\t\t\t\tdebug: { type: \"boolean\" },\n\t\t\t\tdryRun: { type: \"boolean\" },\n\t\t\t\tgitTagFallback: { type: \"boolean\" },\n\t\t\t\tinspectVersion: { type: \"boolean\" },\n\t\t\t\tsign: { type: \"boolean\" },\n\t\t\t\tsilent: { type: \"boolean\" },\n\t\t\t\tverify: { type: \"boolean\" },\n\n\t\t\t\tcurrentVersion: { type: \"string\" },\n\t\t\t\tnextVersion: { type: \"string\" },\n\t\t\t},\n\t\t},\n\t);\n}\n","import conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigSchema, type ForkConfig } from \"./schema\";\n\nexport function getChangelogPresetConfig(\n\tusersChangelogPresetConfig?: ForkConfig[\"changelogPresetConfig\"],\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\tpreset[key] = value.default;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Then overwrite with any values from the users config\n\tif (usersChangelogPresetConfig && typeof usersChangelogPresetConfig === \"object\") {\n\t\tObject.entries(usersChangelogPresetConfig).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\treturn ChangelogPresetConfigSchema.passthrough().parse(preset);\n}\n","import semver, { type ReleaseType } from \"semver\";\nimport conventionalRecommendedBump from \"conventional-recommended-bump\";\n\nimport { getLatestGitTagVersion } from \"../utils/git-tag-version\";\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { IFileManager, FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface CurrentVersion {\n\tversion: string;\n\tfiles: FileState[];\n}\n\nexport async function getCurrentVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfileManager: IFileManager,\n): Promise<CurrentVersion> {\n\tconst files: FileState[] = [];\n\tconst versions = new Set<string>();\n\n\tfor (const file of config.files) {\n\t\tconst fileState = fileManager.read(file);\n\n\t\tif (fileState) {\n\t\t\tfiles.push(fileState);\n\n\t\t\tif (config.currentVersion) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tversions.add(fileState.version);\n\t\t}\n\t}\n\n\tif (config.currentVersion) {\n\t\tversions.add(config.currentVersion);\n\t}\n\n\tif (versions.size === 0) {\n\t\tif (config.gitTagFallback) {\n\t\t\tconst version = await getLatestGitTagVersion(config.tagPrefix);\n\t\t\tif (version) {\n\t\t\t\treturn {\n\t\t\t\t\tfiles: [],\n\t\t\t\t\tversion: version,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Unable to find current version\");\n\t} else if (versions.size > 1) {\n\t\tthrow new Error(\"Found multiple versions\");\n\t}\n\n\tconst currentVersion = versions.entries().next().value[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.nextVersion && semver.valid(config.nextVersion)) {\n\t\tlogger.log(`Next version: ${config.nextVersion}`);\n\t\treturn { version: config.nextVersion };\n\t}\n\n\tconst isPreMajor = semver.lt(currentVersion, \"1.0.0\");\n\n\tlet recommendedBump: Awaited<ReturnType<typeof conventionalRecommendedBump>>;\n\ttry {\n\t\trecommendedBump = await conventionalRecommendedBump({\n\t\t\tpreset: {\n\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\tpreMajor: isPreMajor,\n\t\t\t},\n\t\t\tpath: config.path,\n\t\t\ttagPrefix: config.tagPrefix,\n\t\t\tcwd: config.path,\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(`[conventional-recommended-bump] Unable to determine next version`);\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.preReleaseTag,\n\t\t);\n\n\t\tconst state: NextVersion = {\n\t\t\t...recommendedBump,\n\t\t\tpreMajor: isPreMajor,\n\t\t\treleaseType,\n\t\t\tversion:\n\t\t\t\tsemver.inc(\n\t\t\t\t\tcurrentVersion,\n\t\t\t\t\treleaseType,\n\t\t\t\t\ttypeof config.preReleaseTag === \"string\" ? config.preReleaseTag : undefined,\n\t\t\t\t) ?? \"\",\n\t\t};\n\n\t\tlogger.log(`Next version: ${state.version} (${state.releaseType})`);\n\t\treturn state;\n\t}\n\n\tthrow new Error(\"Unable to find next version\");\n}\n","import gitSemverTags from \"git-semver-tags\";\nimport semver from \"semver\";\n\n/**\n * Get the latest git tag version.\n *\n * @example\n * ```ts\n * const tagPrefix = \"v\";\n * await getLatestGitTagVersion(tagPrefix); // 1.2.3\n * ```\n */\nexport async function getLatestGitTagVersion(tagPrefix: string | undefined): Promise<string> {\n\tconst gitTags = await gitSemverTags({ tagPrefix });\n\tif (!gitTags.length) {\n\t\treturn \"1.0.0\";\n\t}\n\n\tconst cleanedTags = [];\n\n\tfor (const tag of gitTags) {\n\t\tconst cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), \"\"));\n\n\t\tif (cleanedTag) {\n\t\t\tcleanedTags.push(cleanedTag);\n\t\t}\n\t}\n\n\treturn cleanedTags.sort(semver.rcompare)[0];\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 { 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/schema\";\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.error(\"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\", (error) => {\n\t\t\t\tlogger.error(\"conventional-changelog: Unable to parse changes\");\n\t\t\t\tthrow error;\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\ninterface UpdateChangelog {\n\tchangelogPath: string;\n\toldContent: string;\n\tnewContent: string;\n}\n\nexport async function updateChangelog(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<UpdateChangelog> {\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\tif (!config.dryRun && !fileExists(changelogPath)) {\n\t\tlogger.log(`Creating Changelog file: ${changelogPath}`);\n\t\twriteFileSync(changelogPath, \"\\n\", \"utf8\");\n\t}\n\n\tconst oldContent = getOldReleaseContent(changelogPath, fileExists(changelogPath));\n\tconst newContent = await getNewReleaseContent(config, logger, nextVersion);\n\n\tlogger.log(`Updating Changelog: ${changelogPath}`);\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\treturn {\n\t\tchangelogPath,\n\t\toldContent,\n\t\tnewContent,\n\t};\n}\n","import { lstatSync } from \"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 (e) {\n\t\treturn false;\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface CommitChanges {\n\tfilesToCommit: string[];\n\tgitAddOutput?: string;\n\tgitCommitOutput?: string;\n}\n\nexport async function commitChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\tnextVersion: string,\n): Promise<CommitChanges> {\n\tconst git = new Git(config, logger);\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\t\tfilesToCommit,\n\t\t};\n\t}\n\n\tconst shouldVerify = config.verify ? undefined : \"--no-verify\";\n\tconst shouldSign = config.sign ? \"--gpg-sign\" : undefined;\n\n\t// If commitAll is set, commit all changed files.\n\tif (config.commitAll) {\n\t\treturn {\n\t\t\tfilesToCommit,\n\t\t\tgitAddOutput: await git.add(\"--all\"),\n\t\t\tgitCommitOutput: await git.commit(\n\t\t\t\tshouldVerify,\n\t\t\t\tshouldSign,\n\t\t\t\t\"--message\",\n\t\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tfilesToCommit,\n\t\tgitAddOutput: await git.add(...filesToCommit),\n\t\tgitCommitOutput: await git.commit(\n\t\t\tshouldVerify,\n\t\t\tshouldSign,\n\t\t\t...filesToCommit,\n\t\t\t\"--message\",\n\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t),\n\t};\n}\n","import { execFile } from \"node:child_process\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"./logger\";\n\nexport class Git {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {\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.currentBranch = this.currentBranch.bind(this);\n\t}\n\n\tpublic add(...args: (string | undefined)[]) {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\treturn this.execGit(\"add\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic commit(...args: (string | undefined)[]) {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\treturn this.execGit(\"commit\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic tag(...args: (string | undefined)[]) {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\treturn this.execGit(\"tag\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic async currentBranch() {\n\t\treturn (await this.execGit(\"rev-parse\", [\"--abbrev-ref\", \"HEAD\"])).trim();\n\t}\n\n\tprivate execGit(command: string, args: string[]): Promise<string> {\n\t\tthis.logger.debug(`Executing: git ${command} ${args.join(\" \")}`);\n\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},\n\t\t\t\t(error, stdout, stderr) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tthis.logger.error(`git ${command}:`);\n\t\t\t\t\t\tonReject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tonResolve(stdout ? stdout : stderr);\n\t\t\t\t},\n\t\t\t);\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 { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface TagChanges {\n\tgitTagOutput: string;\n}\n\nexport async function tagChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<TagChanges> {\n\tconst git = new Git(config, logger);\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 gitTagOutput = await git.tag(\n\t\tconfig.sign ? \"--sign\" : \"--annotate\",\n\t\ttag,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n\n\treturn {\n\t\tgitTagOutput,\n\t};\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport detectIndent from \"detect-indent\";\nimport { detectNewline } from \"detect-newline\";\n\nimport { stringifyPackage } from \"../libs/stringify-package\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\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\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 parsedJson = JSON.parse(fileContents);\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(`Unable to determine json package file: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\t\tconst parsedJson = JSON.parse(fileContents);\n\n\t\tparsedJson.version = newVersion;\n\t\tif (parsedJson.packages?.[\"\"]) {\n\t\t\tparsedJson.packages[\"\"].version = newVersion; // package-lock v2 stores version here too.\n\t\t}\n\n\t\twriteFileSync(\n\t\t\tfilePath,\n\t\t\tstringifyPackage(parsedJson, detectIndent(fileContents).amount, detectNewline(fileContents)),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n}\n","// https://github.com/npm/stringify-package/blob/main/LICENSE\n// Extracted from npm/stringify-package\n//\n// Copyright npm, Inc\n//\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nconst DEFAULT_INDENT = 2;\nconst CRLF = \"\\r\\n\";\nconst LF = \"\\n\";\n\n/**\n * @param data The object to stringify\n * @param indent `2, 4, \" \", \"\\t\"` Number of spaces a string of spaces or tab character, defaults to 2\n * @param newline `\"\\r\\n\", \"\\n\"` Windows or Unix line endings, defaults to Unix\n */\nexport function stringifyPackage(\n\tdata: object,\n\tindent?: string | number,\n\tnewline?: typeof CRLF | typeof LF,\n): string {\n\tconst stringified = JSON.stringify(data, null, indent ?? DEFAULT_INDENT);\n\n\tif (newline === CRLF) {\n\t\treturn stringified.replace(new RegExp(LF, \"g\"), CRLF);\n\t}\n\n\treturn stringified;\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/schema\";\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(`Unable to determine plain text file: ${fileName}`);\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\twriteFileSync(filePath, newVersion, \"utf8\");\n\t}\n}\n","import { JSONPackage } from \"./json-package\";\nimport { PlainText } from \"./plain-text\";\n\nimport type { ForkConfig } from \"../config/schema\";\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(filePath: string, newVersion: string): void;\n}\n\nexport class FileManager implements IFileManager {\n\tprivate JSONPackage: JSONPackage;\n\tprivate PlainText: PlainText;\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.PlainText = new PlainText(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\tif (fileName.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.read(fileName);\n\t\t} else if (fileName.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.read(fileName);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${fileName}`);\n\t}\n\n\t/**\n\t * Write the new version to the given file path.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.write(\"/path/to/package.json\", \"1.2.3\");\n\t * ```\n\t */\n\tpublic write(filePath: string, newVersion: string): void {\n\t\tif (this.config.dryRun) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (filePath.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.write(filePath, newVersion);\n\t\t} else if (filePath.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.write(filePath, newVersion);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${filePath}`);\n\t}\n}\n"]}
package/dist/cli.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var chunkOMTZL56J_cjs = require('./chunk-OMTZL56J.cjs');
4
+ var chunkJD645RQZ_cjs = require('./chunk-JD645RQZ.cjs');
5
5
 
6
6
  // src/utils/logger.ts
7
7
  var Logger = class {
@@ -38,10 +38,11 @@ var Logger = class {
38
38
 
39
39
  // src/process/message.ts
40
40
  async function completedMessage(config, logger, files, releaseType) {
41
- const git = new chunkOMTZL56J_cjs.Git(config, logger);
42
- const branchName = (await git.revParse("--abbrev-ref", "HEAD")).trim();
41
+ const git = new chunkJD645RQZ_cjs.Git(config, logger);
42
+ const branchName = await git.currentBranch();
43
43
  logger.log(
44
- `Run \`git push --follow-tags origin ${branchName}\` to push the changes and the tag.`
44
+ `
45
+ Run \`git push --follow-tags origin ${branchName}\` to push the changes and the tag.`
45
46
  );
46
47
  if (files.some((file) => file.name === "package.json" && file.isPrivate === false)) {
47
48
  const npmTag = typeof config.preReleaseTag === "string" ? config.preReleaseTag : "prerelease";
@@ -53,21 +54,21 @@ async function completedMessage(config, logger, files, releaseType) {
53
54
 
54
55
  // src/cli.ts
55
56
  async function runFork() {
56
- const config = await chunkOMTZL56J_cjs.getUserConfig();
57
+ const config = await chunkJD645RQZ_cjs.getUserConfig();
57
58
  const logger = new Logger(config);
58
- const fileManager = new chunkOMTZL56J_cjs.FileManager(config, logger);
59
- logger.log(`Running Fork: ${(/* @__PURE__ */ new Date()).toLocaleString()}`);
60
- logger.log(config.dryRun ? "Dry run, no changes will be written to disk.\n" : "");
61
- const current = await chunkOMTZL56J_cjs.getCurrentVersion(config, logger, fileManager);
62
- const next = await chunkOMTZL56J_cjs.getNextVersion(config, logger, current.version);
59
+ const fileManager = new chunkJD645RQZ_cjs.FileManager(config, logger);
60
+ logger.log(`Running fork-version: ${(/* @__PURE__ */ new Date()).toLocaleString()}`);
61
+ logger.log(config.dryRun ? "[DRY RUN] No changes will be written to disk.\n" : "\n");
62
+ const current = await chunkJD645RQZ_cjs.getCurrentVersion(config, logger, fileManager);
63
+ const next = await chunkJD645RQZ_cjs.getNextVersion(config, logger, current.version);
63
64
  logger.log("Updating Files: ");
64
65
  for (const outFile of current.files) {
65
66
  logger.log(` ${outFile.path}`);
66
67
  fileManager.write(outFile.path, next.version);
67
68
  }
68
- const changelogResult = await chunkOMTZL56J_cjs.updateChangelog(config, logger, next.version);
69
- const commitResult = await chunkOMTZL56J_cjs.commitChanges(config, logger, current.files, next.version);
70
- const tagResult = await chunkOMTZL56J_cjs.tagChanges(config, logger, next.version);
69
+ const changelogResult = await chunkJD645RQZ_cjs.updateChangelog(config, logger, next.version);
70
+ const commitResult = await chunkJD645RQZ_cjs.commitChanges(config, logger, current.files, next.version);
71
+ const tagResult = await chunkJD645RQZ_cjs.tagChanges(config, logger, next.version);
71
72
  completedMessage(config, logger, current.files, next.releaseType);
72
73
  const result = {
73
74
  config,
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/logger.ts","../src/process/message.ts","../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAIO,IAAM,SAAN,MAAa;AAAA,EAGnB,YAAoB,QAAiE;AAAjE;AACnB,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAGjC,SAAK,cAAc,KAAK,OAAO,UAAU,KAAK,OAAO;AAAA,EACtD;AAAA,EAVA,cAAc;AAAA,EAYP,OAAO,UAAiB;AAC9B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,IAAI,GAAG,QAAQ;AAAA,IACxB;AAAA,EACD;AAAA,EAEO,QAAQ,UAAiB;AAC/B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,KAAK,GAAG,QAAQ;AAAA,IACzB;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,KAAK,OAAO,SAAS,CAAC,KAAK,aAAa;AAC3C,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AACD;;;ACnCA,eAAsB,iBACrB,QACA,QACA,OACA,aACC;AACD,QAAM,MAAM,IAAI,IAAI,QAAQ,MAAM;AAGlC,QAAM,cAAc,MAAM,IAAI,SAAS,gBAAgB,MAAM,GAAG,KAAK;AAErE,SAAO;AAAA,IACN,uCAAuC,UAAU;AAAA,EAClD;AAGA,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,kBAAkB,KAAK,cAAc,KAAK,GAAG;AACnF,UAAM,SAAS,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB;AAEjF,WAAO;AAAA,MACN,GAAG,WAAW,GAAG,WAAW,KAAK,IAC9B,2BAA2B,MAAM,+BACjC;AAAA,IACJ;AAAA,EACD;AACD;;;AClBA,eAAe,UAAU;AACxB,QAAM,SAAS,MAAM,cAAc;AACnC,QAAM,SAAS,IAAI,OAAO,MAAM;AAChC,QAAM,cAAc,IAAI,YAAY,QAAQ,MAAM;AAElD,SAAO,IAAI,kBAAiB,oBAAI,KAAK,GAAE,eAAe,CAAC,EAAE;AACzD,SAAO,IAAI,OAAO,SAAS,mDAAmD,EAAE;AAEhF,QAAM,UAAU,MAAM,kBAAkB,QAAQ,QAAQ,WAAW;AACnE,QAAM,OAAO,MAAM,eAAe,QAAQ,QAAQ,QAAQ,OAAO;AAEjE,SAAO,IAAI,kBAAkB;AAC7B,aAAW,WAAW,QAAQ,OAAO;AACpC,WAAO,IAAI,IAAK,QAAQ,IAAI,EAAE;AAE9B,gBAAY,MAAM,QAAQ,MAAM,KAAK,OAAO;AAAA,EAC7C;AAEA,QAAM,kBAAkB,MAAM,gBAAgB,QAAQ,QAAQ,KAAK,OAAO;AAC1E,QAAM,eAAe,MAAM,cAAc,QAAQ,QAAQ,QAAQ,OAAO,KAAK,OAAO;AACpF,QAAM,YAAY,MAAM,WAAW,QAAQ,QAAQ,KAAK,OAAO;AAE/D,mBAAiB,QAAQ,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAEhE,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAE5C,SAAO;AACR;AAEA,QAAQ","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ForkConfig } from \"../config/schema\";\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 { Git } from \"../utils/git\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport async function completedMessage(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\treleaseType: string | undefined,\n) {\n\tconst git = new Git(config, logger);\n\n\t// Print git push command\n\tconst branchName = (await git.revParse(\"--abbrev-ref\", \"HEAD\")).trim();\n\n\tlogger.log(\n\t\t`Run \\`git push --follow-tags origin ${branchName}\\` to push the changes and the tag.`,\n\t);\n\n\t// Print npm publish command\n\tif (files.some((file) => file.name === \"package.json\" && file.isPrivate === false)) {\n\t\tconst npmTag = typeof config.preReleaseTag === \"string\" ? config.preReleaseTag : \"prerelease\";\n\n\t\tlogger.log(\n\t\t\t`${releaseType}`.startsWith(\"pre\")\n\t\t\t\t? `Run \\`npm publish --tag ${npmTag}\\` to publish the package.`\n\t\t\t\t: \"Run `npm publish` to publish the package.\",\n\t\t);\n\t}\n}\n","#!/usr/bin/env node\n\nimport { getUserConfig } from \"./config/user-config\";\nimport { Logger } from \"./utils/logger\";\nimport { FileManager } from \"./strategies/file-manager\";\n\nimport { getCurrentVersion, getNextVersion } from \"./process/version\";\nimport { updateChangelog } from \"./process/changelog\";\nimport { commitChanges } from \"./process/commit\";\nimport { tagChanges } from \"./process/tag\";\nimport { completedMessage } from \"./process/message\";\n\nasync function runFork() {\n\tconst config = await getUserConfig();\n\tconst logger = new Logger(config);\n\tconst fileManager = new FileManager(config, logger);\n\n\tlogger.log(`Running Fork: ${new Date().toLocaleString()}`);\n\tlogger.log(config.dryRun ? \"Dry run, no changes will be written to disk.\\n\" : \"\");\n\n\tconst current = await getCurrentVersion(config, logger, fileManager);\n\tconst next = await getNextVersion(config, logger, current.version);\n\n\tlogger.log(\"Updating Files: \");\n\tfor (const outFile of current.files) {\n\t\tlogger.log(`\\t${outFile.path}`);\n\n\t\tfileManager.write(outFile.path, next.version);\n\t}\n\n\tconst changelogResult = await updateChangelog(config, logger, next.version);\n\tconst commitResult = await commitChanges(config, logger, current.files, next.version);\n\tconst tagResult = await tagChanges(config, logger, next.version);\n\n\tcompletedMessage(config, logger, current.files, next.releaseType);\n\n\tconst result = {\n\t\tconfig,\n\t\tcurrent,\n\t\tnext,\n\t\tchangelogResult,\n\t\tcommitResult,\n\t\ttagResult,\n\t};\n\n\tlogger.debug(JSON.stringify(result, null, 2));\n\n\treturn result;\n}\n\nrunFork();\n"]}
1
+ {"version":3,"sources":["../src/utils/logger.ts","../src/process/message.ts","../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAIO,IAAM,SAAN,MAAa;AAAA,EAGnB,YAAoB,QAAiE;AAAjE;AACnB,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAGjC,SAAK,cAAc,KAAK,OAAO,UAAU,KAAK,OAAO;AAAA,EACtD;AAAA,EAVA,cAAc;AAAA,EAYP,OAAO,UAAiB;AAC9B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,IAAI,GAAG,QAAQ;AAAA,IACxB;AAAA,EACD;AAAA,EAEO,QAAQ,UAAiB;AAC/B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,KAAK,GAAG,QAAQ;AAAA,IACzB;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,KAAK,OAAO,SAAS,CAAC,KAAK,aAAa;AAC3C,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AACD;;;ACnCA,eAAsB,iBACrB,QACA,QACA,OACA,aACC;AACD,QAAM,MAAM,IAAI,IAAI,QAAQ,MAAM;AAGlC,QAAM,aAAa,MAAM,IAAI,cAAc;AAE3C,SAAO;AAAA,IACN;AAAA,sCAAyC,UAAU;AAAA,EACpD;AAGA,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,kBAAkB,KAAK,cAAc,KAAK,GAAG;AACnF,UAAM,SAAS,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB;AAEjF,WAAO;AAAA,MACN,GAAG,WAAW,GAAG,WAAW,KAAK,IAC9B,2BAA2B,MAAM,+BACjC;AAAA,IACJ;AAAA,EACD;AACD;;;AClBA,eAAe,UAAU;AACxB,QAAM,SAAS,MAAM,cAAc;AACnC,QAAM,SAAS,IAAI,OAAO,MAAM;AAChC,QAAM,cAAc,IAAI,YAAY,QAAQ,MAAM;AAElD,SAAO,IAAI,0BAAyB,oBAAI,KAAK,GAAE,eAAe,CAAC,EAAE;AACjE,SAAO,IAAI,OAAO,SAAS,oDAAoD,IAAI;AAEnF,QAAM,UAAU,MAAM,kBAAkB,QAAQ,QAAQ,WAAW;AACnE,QAAM,OAAO,MAAM,eAAe,QAAQ,QAAQ,QAAQ,OAAO;AAEjE,SAAO,IAAI,kBAAkB;AAC7B,aAAW,WAAW,QAAQ,OAAO;AACpC,WAAO,IAAI,IAAK,QAAQ,IAAI,EAAE;AAE9B,gBAAY,MAAM,QAAQ,MAAM,KAAK,OAAO;AAAA,EAC7C;AAEA,QAAM,kBAAkB,MAAM,gBAAgB,QAAQ,QAAQ,KAAK,OAAO;AAC1E,QAAM,eAAe,MAAM,cAAc,QAAQ,QAAQ,QAAQ,OAAO,KAAK,OAAO;AACpF,QAAM,YAAY,MAAM,WAAW,QAAQ,QAAQ,KAAK,OAAO;AAE/D,mBAAiB,QAAQ,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAEhE,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAE5C,SAAO;AACR;AAEA,QAAQ","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ForkConfig } from \"../config/schema\";\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 { Git } from \"../utils/git\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport async function completedMessage(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\treleaseType: string | undefined,\n) {\n\tconst git = new Git(config, logger);\n\n\t// Print git push command\n\tconst branchName = await git.currentBranch();\n\n\tlogger.log(\n\t\t`\\nRun \\`git push --follow-tags origin ${branchName}\\` to push the changes and the tag.`,\n\t);\n\n\t// Print npm publish command\n\tif (files.some((file) => file.name === \"package.json\" && file.isPrivate === false)) {\n\t\tconst npmTag = typeof config.preReleaseTag === \"string\" ? config.preReleaseTag : \"prerelease\";\n\n\t\tlogger.log(\n\t\t\t`${releaseType}`.startsWith(\"pre\")\n\t\t\t\t? `Run \\`npm publish --tag ${npmTag}\\` to publish the package.`\n\t\t\t\t: \"Run `npm publish` to publish the package.\",\n\t\t);\n\t}\n}\n","#!/usr/bin/env node\n\nimport { getUserConfig } from \"./config/user-config\";\nimport { Logger } from \"./utils/logger\";\nimport { FileManager } from \"./strategies/file-manager\";\n\nimport { getCurrentVersion, getNextVersion } from \"./process/version\";\nimport { updateChangelog } from \"./process/changelog\";\nimport { commitChanges } from \"./process/commit\";\nimport { tagChanges } from \"./process/tag\";\nimport { completedMessage } from \"./process/message\";\n\nasync function runFork() {\n\tconst config = await getUserConfig();\n\tconst logger = new Logger(config);\n\tconst fileManager = new FileManager(config, logger);\n\n\tlogger.log(`Running fork-version: ${new Date().toLocaleString()}`);\n\tlogger.log(config.dryRun ? \"[DRY RUN] No changes will be written to disk.\\n\" : \"\\n\");\n\n\tconst current = await getCurrentVersion(config, logger, fileManager);\n\tconst next = await getNextVersion(config, logger, current.version);\n\n\tlogger.log(\"Updating Files: \");\n\tfor (const outFile of current.files) {\n\t\tlogger.log(`\\t${outFile.path}`);\n\n\t\tfileManager.write(outFile.path, next.version);\n\t}\n\n\tconst changelogResult = await updateChangelog(config, logger, next.version);\n\tconst commitResult = await commitChanges(config, logger, current.files, next.version);\n\tconst tagResult = await tagChanges(config, logger, next.version);\n\n\tcompletedMessage(config, logger, current.files, next.releaseType);\n\n\tconst result = {\n\t\tconfig,\n\t\tcurrent,\n\t\tnext,\n\t\tchangelogResult,\n\t\tcommitResult,\n\t\ttagResult,\n\t};\n\n\tlogger.debug(JSON.stringify(result, null, 2));\n\n\treturn result;\n}\n\nrunFork();\n"]}
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { getUserConfig, FileManager, getCurrentVersion, getNextVersion, updateChangelog, commitChanges, tagChanges, Git } from './chunk-NKEO7YFB.js';
2
+ import { getUserConfig, FileManager, getCurrentVersion, getNextVersion, updateChangelog, commitChanges, tagChanges, Git } from './chunk-KFBD5WZ4.js';
3
3
 
4
4
  // src/utils/logger.ts
5
5
  var Logger = class {
@@ -37,9 +37,10 @@ var Logger = class {
37
37
  // src/process/message.ts
38
38
  async function completedMessage(config, logger, files, releaseType) {
39
39
  const git = new Git(config, logger);
40
- const branchName = (await git.revParse("--abbrev-ref", "HEAD")).trim();
40
+ const branchName = await git.currentBranch();
41
41
  logger.log(
42
- `Run \`git push --follow-tags origin ${branchName}\` to push the changes and the tag.`
42
+ `
43
+ Run \`git push --follow-tags origin ${branchName}\` to push the changes and the tag.`
43
44
  );
44
45
  if (files.some((file) => file.name === "package.json" && file.isPrivate === false)) {
45
46
  const npmTag = typeof config.preReleaseTag === "string" ? config.preReleaseTag : "prerelease";
@@ -54,8 +55,8 @@ async function runFork() {
54
55
  const config = await getUserConfig();
55
56
  const logger = new Logger(config);
56
57
  const fileManager = new FileManager(config, logger);
57
- logger.log(`Running Fork: ${(/* @__PURE__ */ new Date()).toLocaleString()}`);
58
- logger.log(config.dryRun ? "Dry run, no changes will be written to disk.\n" : "");
58
+ logger.log(`Running fork-version: ${(/* @__PURE__ */ new Date()).toLocaleString()}`);
59
+ logger.log(config.dryRun ? "[DRY RUN] No changes will be written to disk.\n" : "\n");
59
60
  const current = await getCurrentVersion(config, logger, fileManager);
60
61
  const next = await getNextVersion(config, logger, current.version);
61
62
  logger.log("Updating Files: ");
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/logger.ts","../src/process/message.ts","../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAIO,IAAM,SAAN,MAAa;AAAA,EAGnB,YAAoB,QAAiE;AAAjE;AACnB,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAGjC,SAAK,cAAc,KAAK,OAAO,UAAU,KAAK,OAAO;AAAA,EACtD;AAAA,EAVA,cAAc;AAAA,EAYP,OAAO,UAAiB;AAC9B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,IAAI,GAAG,QAAQ;AAAA,IACxB;AAAA,EACD;AAAA,EAEO,QAAQ,UAAiB;AAC/B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,KAAK,GAAG,QAAQ;AAAA,IACzB;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,KAAK,OAAO,SAAS,CAAC,KAAK,aAAa;AAC3C,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AACD;;;ACnCA,eAAsB,iBACrB,QACA,QACA,OACA,aACC;AACD,QAAM,MAAM,IAAI,IAAI,QAAQ,MAAM;AAGlC,QAAM,cAAc,MAAM,IAAI,SAAS,gBAAgB,MAAM,GAAG,KAAK;AAErE,SAAO;AAAA,IACN,uCAAuC,UAAU;AAAA,EAClD;AAGA,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,kBAAkB,KAAK,cAAc,KAAK,GAAG;AACnF,UAAM,SAAS,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB;AAEjF,WAAO;AAAA,MACN,GAAG,WAAW,GAAG,WAAW,KAAK,IAC9B,2BAA2B,MAAM,+BACjC;AAAA,IACJ;AAAA,EACD;AACD;;;AClBA,eAAe,UAAU;AACxB,QAAM,SAAS,MAAM,cAAc;AACnC,QAAM,SAAS,IAAI,OAAO,MAAM;AAChC,QAAM,cAAc,IAAI,YAAY,QAAQ,MAAM;AAElD,SAAO,IAAI,kBAAiB,oBAAI,KAAK,GAAE,eAAe,CAAC,EAAE;AACzD,SAAO,IAAI,OAAO,SAAS,mDAAmD,EAAE;AAEhF,QAAM,UAAU,MAAM,kBAAkB,QAAQ,QAAQ,WAAW;AACnE,QAAM,OAAO,MAAM,eAAe,QAAQ,QAAQ,QAAQ,OAAO;AAEjE,SAAO,IAAI,kBAAkB;AAC7B,aAAW,WAAW,QAAQ,OAAO;AACpC,WAAO,IAAI,IAAK,QAAQ,IAAI,EAAE;AAE9B,gBAAY,MAAM,QAAQ,MAAM,KAAK,OAAO;AAAA,EAC7C;AAEA,QAAM,kBAAkB,MAAM,gBAAgB,QAAQ,QAAQ,KAAK,OAAO;AAC1E,QAAM,eAAe,MAAM,cAAc,QAAQ,QAAQ,QAAQ,OAAO,KAAK,OAAO;AACpF,QAAM,YAAY,MAAM,WAAW,QAAQ,QAAQ,KAAK,OAAO;AAE/D,mBAAiB,QAAQ,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAEhE,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAE5C,SAAO;AACR;AAEA,QAAQ","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ForkConfig } from \"../config/schema\";\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 { Git } from \"../utils/git\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport async function completedMessage(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\treleaseType: string | undefined,\n) {\n\tconst git = new Git(config, logger);\n\n\t// Print git push command\n\tconst branchName = (await git.revParse(\"--abbrev-ref\", \"HEAD\")).trim();\n\n\tlogger.log(\n\t\t`Run \\`git push --follow-tags origin ${branchName}\\` to push the changes and the tag.`,\n\t);\n\n\t// Print npm publish command\n\tif (files.some((file) => file.name === \"package.json\" && file.isPrivate === false)) {\n\t\tconst npmTag = typeof config.preReleaseTag === \"string\" ? config.preReleaseTag : \"prerelease\";\n\n\t\tlogger.log(\n\t\t\t`${releaseType}`.startsWith(\"pre\")\n\t\t\t\t? `Run \\`npm publish --tag ${npmTag}\\` to publish the package.`\n\t\t\t\t: \"Run `npm publish` to publish the package.\",\n\t\t);\n\t}\n}\n","#!/usr/bin/env node\n\nimport { getUserConfig } from \"./config/user-config\";\nimport { Logger } from \"./utils/logger\";\nimport { FileManager } from \"./strategies/file-manager\";\n\nimport { getCurrentVersion, getNextVersion } from \"./process/version\";\nimport { updateChangelog } from \"./process/changelog\";\nimport { commitChanges } from \"./process/commit\";\nimport { tagChanges } from \"./process/tag\";\nimport { completedMessage } from \"./process/message\";\n\nasync function runFork() {\n\tconst config = await getUserConfig();\n\tconst logger = new Logger(config);\n\tconst fileManager = new FileManager(config, logger);\n\n\tlogger.log(`Running Fork: ${new Date().toLocaleString()}`);\n\tlogger.log(config.dryRun ? \"Dry run, no changes will be written to disk.\\n\" : \"\");\n\n\tconst current = await getCurrentVersion(config, logger, fileManager);\n\tconst next = await getNextVersion(config, logger, current.version);\n\n\tlogger.log(\"Updating Files: \");\n\tfor (const outFile of current.files) {\n\t\tlogger.log(`\\t${outFile.path}`);\n\n\t\tfileManager.write(outFile.path, next.version);\n\t}\n\n\tconst changelogResult = await updateChangelog(config, logger, next.version);\n\tconst commitResult = await commitChanges(config, logger, current.files, next.version);\n\tconst tagResult = await tagChanges(config, logger, next.version);\n\n\tcompletedMessage(config, logger, current.files, next.releaseType);\n\n\tconst result = {\n\t\tconfig,\n\t\tcurrent,\n\t\tnext,\n\t\tchangelogResult,\n\t\tcommitResult,\n\t\ttagResult,\n\t};\n\n\tlogger.debug(JSON.stringify(result, null, 2));\n\n\treturn result;\n}\n\nrunFork();\n"]}
1
+ {"version":3,"sources":["../src/utils/logger.ts","../src/process/message.ts","../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAIO,IAAM,SAAN,MAAa;AAAA,EAGnB,YAAoB,QAAiE;AAAjE;AACnB,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAGjC,SAAK,cAAc,KAAK,OAAO,UAAU,KAAK,OAAO;AAAA,EACtD;AAAA,EAVA,cAAc;AAAA,EAYP,OAAO,UAAiB;AAC9B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,IAAI,GAAG,QAAQ;AAAA,IACxB;AAAA,EACD;AAAA,EAEO,QAAQ,UAAiB;AAC/B,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,KAAK,GAAG,QAAQ;AAAA,IACzB;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,CAAC,KAAK,aAAa;AACtB,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AAAA,EAEO,SAAS,UAAiB;AAChC,QAAI,KAAK,OAAO,SAAS,CAAC,KAAK,aAAa;AAC3C,cAAQ,MAAM,GAAG,QAAQ;AAAA,IAC1B;AAAA,EACD;AACD;;;ACnCA,eAAsB,iBACrB,QACA,QACA,OACA,aACC;AACD,QAAM,MAAM,IAAI,IAAI,QAAQ,MAAM;AAGlC,QAAM,aAAa,MAAM,IAAI,cAAc;AAE3C,SAAO;AAAA,IACN;AAAA,sCAAyC,UAAU;AAAA,EACpD;AAGA,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,kBAAkB,KAAK,cAAc,KAAK,GAAG;AACnF,UAAM,SAAS,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB;AAEjF,WAAO;AAAA,MACN,GAAG,WAAW,GAAG,WAAW,KAAK,IAC9B,2BAA2B,MAAM,+BACjC;AAAA,IACJ;AAAA,EACD;AACD;;;AClBA,eAAe,UAAU;AACxB,QAAM,SAAS,MAAM,cAAc;AACnC,QAAM,SAAS,IAAI,OAAO,MAAM;AAChC,QAAM,cAAc,IAAI,YAAY,QAAQ,MAAM;AAElD,SAAO,IAAI,0BAAyB,oBAAI,KAAK,GAAE,eAAe,CAAC,EAAE;AACjE,SAAO,IAAI,OAAO,SAAS,oDAAoD,IAAI;AAEnF,QAAM,UAAU,MAAM,kBAAkB,QAAQ,QAAQ,WAAW;AACnE,QAAM,OAAO,MAAM,eAAe,QAAQ,QAAQ,QAAQ,OAAO;AAEjE,SAAO,IAAI,kBAAkB;AAC7B,aAAW,WAAW,QAAQ,OAAO;AACpC,WAAO,IAAI,IAAK,QAAQ,IAAI,EAAE;AAE9B,gBAAY,MAAM,QAAQ,MAAM,KAAK,OAAO;AAAA,EAC7C;AAEA,QAAM,kBAAkB,MAAM,gBAAgB,QAAQ,QAAQ,KAAK,OAAO;AAC1E,QAAM,eAAe,MAAM,cAAc,QAAQ,QAAQ,QAAQ,OAAO,KAAK,OAAO;AACpF,QAAM,YAAY,MAAM,WAAW,QAAQ,QAAQ,KAAK,OAAO;AAE/D,mBAAiB,QAAQ,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAEhE,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAE5C,SAAO;AACR;AAEA,QAAQ","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ForkConfig } from \"../config/schema\";\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 { Git } from \"../utils/git\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport async function completedMessage(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\treleaseType: string | undefined,\n) {\n\tconst git = new Git(config, logger);\n\n\t// Print git push command\n\tconst branchName = await git.currentBranch();\n\n\tlogger.log(\n\t\t`\\nRun \\`git push --follow-tags origin ${branchName}\\` to push the changes and the tag.`,\n\t);\n\n\t// Print npm publish command\n\tif (files.some((file) => file.name === \"package.json\" && file.isPrivate === false)) {\n\t\tconst npmTag = typeof config.preReleaseTag === \"string\" ? config.preReleaseTag : \"prerelease\";\n\n\t\tlogger.log(\n\t\t\t`${releaseType}`.startsWith(\"pre\")\n\t\t\t\t? `Run \\`npm publish --tag ${npmTag}\\` to publish the package.`\n\t\t\t\t: \"Run `npm publish` to publish the package.\",\n\t\t);\n\t}\n}\n","#!/usr/bin/env node\n\nimport { getUserConfig } from \"./config/user-config\";\nimport { Logger } from \"./utils/logger\";\nimport { FileManager } from \"./strategies/file-manager\";\n\nimport { getCurrentVersion, getNextVersion } from \"./process/version\";\nimport { updateChangelog } from \"./process/changelog\";\nimport { commitChanges } from \"./process/commit\";\nimport { tagChanges } from \"./process/tag\";\nimport { completedMessage } from \"./process/message\";\n\nasync function runFork() {\n\tconst config = await getUserConfig();\n\tconst logger = new Logger(config);\n\tconst fileManager = new FileManager(config, logger);\n\n\tlogger.log(`Running fork-version: ${new Date().toLocaleString()}`);\n\tlogger.log(config.dryRun ? \"[DRY RUN] No changes will be written to disk.\\n\" : \"\\n\");\n\n\tconst current = await getCurrentVersion(config, logger, fileManager);\n\tconst next = await getNextVersion(config, logger, current.version);\n\n\tlogger.log(\"Updating Files: \");\n\tfor (const outFile of current.files) {\n\t\tlogger.log(`\\t${outFile.path}`);\n\n\t\tfileManager.write(outFile.path, next.version);\n\t}\n\n\tconst changelogResult = await updateChangelog(config, logger, next.version);\n\tconst commitResult = await commitChanges(config, logger, current.files, next.version);\n\tconst tagResult = await tagChanges(config, logger, next.version);\n\n\tcompletedMessage(config, logger, current.files, next.releaseType);\n\n\tconst result = {\n\t\tconfig,\n\t\tcurrent,\n\t\tnext,\n\t\tchangelogResult,\n\t\tcommitResult,\n\t\ttagResult,\n\t};\n\n\tlogger.debug(JSON.stringify(result, null, 2));\n\n\treturn result;\n}\n\nrunFork();\n"]}
package/dist/index.cjs CHANGED
@@ -1,44 +1,44 @@
1
1
  'use strict';
2
2
 
3
- var chunkOMTZL56J_cjs = require('./chunk-OMTZL56J.cjs');
3
+ var chunkJD645RQZ_cjs = require('./chunk-JD645RQZ.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "FileManager", {
8
8
  enumerable: true,
9
- get: function () { return chunkOMTZL56J_cjs.FileManager; }
9
+ get: function () { return chunkJD645RQZ_cjs.FileManager; }
10
10
  });
11
11
  Object.defineProperty(exports, "ForkConfigSchema", {
12
12
  enumerable: true,
13
- get: function () { return chunkOMTZL56J_cjs.ForkConfigSchema; }
13
+ get: function () { return chunkJD645RQZ_cjs.ForkConfigSchema; }
14
14
  });
15
15
  Object.defineProperty(exports, "commitChanges", {
16
16
  enumerable: true,
17
- get: function () { return chunkOMTZL56J_cjs.commitChanges; }
17
+ get: function () { return chunkJD645RQZ_cjs.commitChanges; }
18
18
  });
19
19
  Object.defineProperty(exports, "defineConfig", {
20
20
  enumerable: true,
21
- get: function () { return chunkOMTZL56J_cjs.defineConfig; }
21
+ get: function () { return chunkJD645RQZ_cjs.defineConfig; }
22
22
  });
23
23
  Object.defineProperty(exports, "getCurrentVersion", {
24
24
  enumerable: true,
25
- get: function () { return chunkOMTZL56J_cjs.getCurrentVersion; }
25
+ get: function () { return chunkJD645RQZ_cjs.getCurrentVersion; }
26
26
  });
27
27
  Object.defineProperty(exports, "getNextVersion", {
28
28
  enumerable: true,
29
- get: function () { return chunkOMTZL56J_cjs.getNextVersion; }
29
+ get: function () { return chunkJD645RQZ_cjs.getNextVersion; }
30
30
  });
31
31
  Object.defineProperty(exports, "getUserConfig", {
32
32
  enumerable: true,
33
- get: function () { return chunkOMTZL56J_cjs.getUserConfig; }
33
+ get: function () { return chunkJD645RQZ_cjs.getUserConfig; }
34
34
  });
35
35
  Object.defineProperty(exports, "tagChanges", {
36
36
  enumerable: true,
37
- get: function () { return chunkOMTZL56J_cjs.tagChanges; }
37
+ get: function () { return chunkJD645RQZ_cjs.tagChanges; }
38
38
  });
39
39
  Object.defineProperty(exports, "updateChangelog", {
40
40
  enumerable: true,
41
- get: function () { return chunkOMTZL56J_cjs.updateChangelog; }
41
+ get: function () { return chunkJD645RQZ_cjs.updateChangelog; }
42
42
  });
43
43
  //# sourceMappingURL=out.js.map
44
44
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { FileManager, ForkConfigSchema, commitChanges, defineConfig, getCurrentVersion, getNextVersion, getUserConfig, tagChanges, updateChangelog } from './chunk-NKEO7YFB.js';
1
+ export { FileManager, ForkConfigSchema, commitChanges, defineConfig, getCurrentVersion, getNextVersion, getUserConfig, tagChanges, updateChangelog } from './chunk-KFBD5WZ4.js';
2
2
  //# sourceMappingURL=out.js.map
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fork-version",
3
- "version": "1.4.50",
3
+ "version": "1.4.53",
4
4
  "license": "ISC",
5
5
  "description": "Replacement for standard version written with modern syntax",
6
6
  "homepage": "https://github.com/eglavin/fork-version",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config/schema.ts","../src/config/user-config.ts","../src/config/defaults.ts","../src/config/cli-arguments.ts","../src/config/changelog-preset-config.ts","../src/process/version.ts","../src/utils/git-tag-version.ts","../src/utils/release-type.ts","../src/process/changelog.ts","../src/utils/file-state.ts","../src/process/commit.ts","../src/utils/git.ts","../src/utils/format-commit-message.ts","../src/process/tag.ts","../src/strategies/json-package.ts","../src/libs/stringify-package.ts","../src/strategies/plain-text.ts","../src/strategies/file-manager.ts"],"names":["semver","resolve","readFileSync","writeFileSync"],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nexport const ChangelogPresetConfigSchema = z.object({\n\t/**\n\t * An array of `type` objects representing the explicitly supported commit message types,\n\t * and whether they should show up in generated `CHANGELOG`s.\n\t */\n\ttypes: z.array(\n\t\tz.object({\n\t\t\ttype: z.string(),\n\t\t\tsection: z.string().optional(),\n\t\t\thidden: z.boolean().optional(),\n\t\t}),\n\t),\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(),\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(),\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(),\n\t/**\n\t * A URL representing the a user's profile URL on GitHub, Gitlab, etc. This URL is used\n\t * for substituting @bcoe with https://github.com/bcoe in commit messages.\n\t * @default \"{{host}}/{{user}}\"\n\t */\n\tuserUrlFormat: z.string(),\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.string(),\n\t/**\n\t * An array of prefixes used to detect references to issues\n\t * @default [\"#\"]\n\t */\n\tissuePrefixes: z.array(z.string()),\n});\n\nexport type ChangelogPresetConfig = z.infer<typeof ChangelogPresetConfigSchema>;\n\nexport const ForkConfigSchema = z.object({\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(),\n\t/**\n\t * Name of the changelog file.\n\t * @default \"CHANGELOG.md\"\n\t */\n\tchangelog: z.string(),\n\t/**\n\t * The header to be used in 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(),\n\t/**\n\t * Files to be updated.\n\t * @default\n\t * ```js\n\t * [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]\n\t * ```\n\t */\n\tfiles: z.array(z.string()),\n\t/**\n\t * Specify a prefix for the git tag fork-version will create.\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 * | 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(),\n\t/**\n\t * Make a pre-release with optional label, if value is a string it will be used as the\n\t * pre-release tag.\n\t *\n\t * | Value | 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\tpreReleaseTag: z.string().or(z.boolean()).optional(),\n\n\t/**\n\t * Commit all staged changes, not just files updated by fork-version.\n\t * @default false\n\t */\n\tcommitAll: z.boolean(),\n\t/**\n\t * If set we'll log debug information.\n\t * @default false\n\t */\n\tdebug: z.boolean(),\n\t/**\n\t * If true, no output will be written to disk or committed.\n\t * @default false\n\t */\n\tdryRun: z.boolean(),\n\t/**\n\t * If true and we cant find a version in the list of `files`, we'll fallback\n\t * and attempt to use the latest git tag to get the current version.\n\t * @default true\n\t */\n\tgitTagFallback: z.boolean(),\n\t/**\n\t * If set, we'll gather information about the current version and exit.\n\t * @default false\n\t */\n\tinspectVersion: z.boolean(),\n\t/**\n\t * Should we sign the git commit using GPG?\n\t * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt GPG Sign Commits}\n\t * @default false\n\t */\n\tsign: z.boolean(),\n\t/**\n\t * If true, no output will be written to stdout.\n\t * @default false\n\t */\n\tsilent: z.boolean(),\n\t/**\n\t * If true, allow git to run git commit hooks.\n\t * @default false\n\t */\n\tverify: z.boolean(),\n\n\t/**\n\t * If set, we'll use this version number instead of trying to find a version from the list of `files`.\n\t * @example \"1.0.0\"\n\t * @default undefined\n\t */\n\tcurrentVersion: z.string().optional(),\n\t/**\n\t * If set, we'll attempt to update the version number to this version, instead of incrementing\n\t * using \"conventional-commit\".\n\t * @example \"2.0.0\"\n\t * @default undefined\n\t */\n\tnextVersion: z.string().optional(),\n\n\t/**\n\t * Override the default conventional-changelog preset configuration.\n\t */\n\tchangelogPresetConfig: ChangelogPresetConfigSchema.partial(),\n});\n\nexport type ForkConfig = z.infer<typeof ForkConfigSchema>;\n\nexport function defineConfig(config: Partial<ForkConfig>): Partial<ForkConfig> {\n\treturn config;\n}\n","import { parse, resolve } from \"node:path\";\nimport JoyCon from \"joycon\";\nimport { bundleRequire } from \"bundle-require\";\n\nimport { ForkConfigSchema, type ForkConfig } from \"./schema\";\nimport { DEFAULT_CONFIG } from \"./defaults\";\nimport { getCliArguments } from \"./cli-arguments\";\nimport { getChangelogPresetConfig } from \"./changelog-preset-config\";\n\nexport async function getUserConfig(): Promise<ForkConfig> {\n\tconst cliArguments = getCliArguments();\n\n\tconst cwd = cliArguments.flags.path ? resolve(cliArguments.flags.path) : process.cwd();\n\tconst joycon = new JoyCon();\n\tconst configFilePath = await joycon.resolve({\n\t\tfiles: [\"fork.config.ts\", \"fork.config.js\", \"fork.config.cjs\", \"fork.config.mjs\"],\n\t\tcwd,\n\t\tstopDir: parse(cwd).root,\n\t});\n\n\tif (!configFilePath) {\n\t\treturn {\n\t\t\t...DEFAULT_CONFIG,\n\t\t\t...cliArguments.flags,\n\t\t\tpath: cwd,\n\t\t\tchangelogPresetConfig: getChangelogPresetConfig(),\n\t\t} as ForkConfig;\n\t}\n\n\tconst foundConfig = await bundleRequire({ filepath: configFilePath });\n\tconst parsedConfig = ForkConfigSchema.partial().safeParse(\n\t\tfoundConfig.mod.default || foundConfig.mod,\n\t);\n\n\tif (!parsedConfig.success) {\n\t\tthrow parsedConfig.error;\n\t}\n\n\tconst usersConfig = {\n\t\t...DEFAULT_CONFIG,\n\t\t...parsedConfig.data,\n\t\t...cliArguments.flags,\n\t} as ForkConfig;\n\n\treturn {\n\t\t...usersConfig,\n\t\tpath: cwd,\n\t\tfiles: getFiles(parsedConfig.data?.files, cliArguments.flags?.files),\n\t\tchangelogPresetConfig: getChangelogPresetConfig(usersConfig?.changelogPresetConfig),\n\t};\n}\n\nfunction getFiles(configFiles: string[] | undefined, cliFiles: string[] | undefined): 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// 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 type { ForkConfig } from \"./schema\";\n\nexport const DEFAULT_CONFIG: ForkConfig = {\n\tpath: process.cwd(),\n\tchangelog: \"CHANGELOG.md\",\n\tfiles: [\n\t\t\"package.json\",\n\t\t\"package-lock.json\",\n\t\t\"npm-shrinkwrap.json\",\n\t\t\"manifest.json\", // Chrome extensions\n\t\t\"bower.json\",\n\t],\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\tcommitAll: false,\n\tdebug: false,\n\tdryRun: false,\n\tgitTagFallback: true,\n\tinspectVersion: false,\n\tsign: false,\n\tsilent: false,\n\tverify: false,\n\n\tchangelogPresetConfig: {},\n};\n","import meow from \"meow\";\n\nexport function getCliArguments() {\n\treturn meow(\n\t\t`\nUsage:\n $ fork-version [options]\n\nOptions:\n --path [Default: process.cwd()]\n The path fork-version will run from.\n --changelog [Default: \"CHANGELOG.md\"]\n Name of the changelog file.\n --header, -H\n The header to be used in the changelog.\n --files, --file, -F [Default: [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]]\n Files to be updated.\n --tag-prefix [Default: \"v\"]\n Specify a prefix for the git tag \"fork-version\" will create.\n --pre-release-tag [Default: undefined]\n Make a pre-release with optional label, If value is a string it\n will be used as the pre-release tag.\n\n --commit-all\n Commit all staged changes, not just files updated by fork-version.\n --debug\n If true, we'll output debug information.\n --dry-run\n If true, no output will be written to disk or committed.\n --git-tag-fallback [Default: true]\n If true and we cant find a version in the given files, we'll fallback\n and attempt to use the latest git tag for the current version.\n --inspect-version\n If set, we'll gather information about the current version and exit.\n --sign\n Should we sign the git commit using GPG?\n --silent\n If true, no output will be written to stdout.\n --verify\n If true, allow git to run git commit hooks.\n\n --current-version\n If set, we'll use this version number instead of trying to find a\n version in a \"file\".\n --next-version\n If set, we'll attempt to update the version number to this version,\n instead of incrementing using \"conventional-commit\".\n`,\n\t\t{\n\t\t\timportMeta: import.meta,\n\t\t\tflags: {\n\t\t\t\tpath: { type: \"string\", default: process.cwd() },\n\t\t\t\tchangelog: { type: \"string\" },\n\t\t\t\theader: { type: \"string\", shortFlag: \"H\" },\n\t\t\t\tfiles: { type: \"string\", isMultiple: true, aliases: [\"file\"], shortFlag: \"F\" },\n\t\t\t\ttagPrefix: { type: \"string\" },\n\t\t\t\tpreReleaseTag: { type: \"string\" },\n\n\t\t\t\tcommitAll: { type: \"boolean\" },\n\t\t\t\tdebug: { type: \"boolean\" },\n\t\t\t\tdryRun: { type: \"boolean\" },\n\t\t\t\tgitTagFallback: { type: \"boolean\" },\n\t\t\t\tinspectVersion: { type: \"boolean\" },\n\t\t\t\tsign: { type: \"boolean\" },\n\t\t\t\tsilent: { type: \"boolean\" },\n\t\t\t\tverify: { type: \"boolean\" },\n\n\t\t\t\tcurrentVersion: { type: \"string\" },\n\t\t\t\tnextVersion: { type: \"string\" },\n\t\t\t},\n\t\t},\n\t);\n}\n","import conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigSchema, type ForkConfig } from \"./schema\";\n\nexport function getChangelogPresetConfig(\n\tusersChangelogPresetConfig?: ForkConfig[\"changelogPresetConfig\"],\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\tpreset[key] = value.default;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Then overwrite with any values from the users config\n\tif (usersChangelogPresetConfig && typeof usersChangelogPresetConfig === \"object\") {\n\t\tObject.entries(usersChangelogPresetConfig).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\treturn ChangelogPresetConfigSchema.passthrough().parse(preset);\n}\n","import semver, { type ReleaseType } from \"semver\";\nimport conventionalRecommendedBump from \"conventional-recommended-bump\";\n\nimport { getLatestGitTagVersion } from \"../utils/git-tag-version\";\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { IFileManager, FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface CurrentVersion {\n\tversion: string;\n\tfiles: FileState[];\n}\n\nexport async function getCurrentVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfileManager: IFileManager,\n): Promise<CurrentVersion> {\n\tconst files: FileState[] = [];\n\tconst versions = new Set<string>();\n\n\tfor (const file of config.files) {\n\t\tconst fileState = fileManager.read(file);\n\n\t\tif (fileState) {\n\t\t\tfiles.push(fileState);\n\n\t\t\tif (config.currentVersion) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tversions.add(fileState.version);\n\t\t}\n\t}\n\n\tif (config.currentVersion) {\n\t\tversions.add(config.currentVersion);\n\t}\n\n\tif (versions.size === 0) {\n\t\tif (config.gitTagFallback) {\n\t\t\tconst version = await getLatestGitTagVersion(config.tagPrefix);\n\t\t\tif (version) {\n\t\t\t\treturn {\n\t\t\t\t\tfiles: [],\n\t\t\t\t\tversion: version,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Unable to find current version\");\n\t} else if (versions.size > 1) {\n\t\tthrow new Error(\"Found multiple versions\");\n\t}\n\n\tconst currentVersion = versions.entries().next().value[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.nextVersion && semver.valid(config.nextVersion)) {\n\t\tlogger.log(`Next version: ${config.nextVersion}`);\n\t\treturn { version: config.nextVersion };\n\t}\n\n\tconst isPreMajor = semver.lt(currentVersion, \"1.0.0\");\n\n\tlet recommendedBump: Awaited<ReturnType<typeof conventionalRecommendedBump>>;\n\ttry {\n\t\trecommendedBump = await conventionalRecommendedBump({\n\t\t\tpreset: {\n\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\tpreMajor: isPreMajor,\n\t\t\t},\n\t\t\tpath: config.path,\n\t\t\ttagPrefix: config.tagPrefix,\n\t\t\tcwd: config.path,\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(`[conventional-recommended-bump] Unable to determine next version`);\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.preReleaseTag,\n\t\t);\n\n\t\tconst state: NextVersion = {\n\t\t\t...recommendedBump,\n\t\t\tpreMajor: isPreMajor,\n\t\t\treleaseType,\n\t\t\tversion:\n\t\t\t\tsemver.inc(\n\t\t\t\t\tcurrentVersion,\n\t\t\t\t\treleaseType,\n\t\t\t\t\ttypeof config.preReleaseTag === \"string\" ? config.preReleaseTag : undefined,\n\t\t\t\t) ?? \"\",\n\t\t};\n\n\t\tlogger.log(`Next version: ${state.version} (${state.releaseType})`);\n\t\treturn state;\n\t}\n\n\tthrow new Error(\"Unable to find next version\");\n}\n","import gitSemverTags from \"git-semver-tags\";\nimport semver from \"semver\";\n\n/**\n * Get the latest git tag version.\n *\n * @example\n * ```ts\n * const tagPrefix = \"v\";\n * await getLatestGitTagVersion(tagPrefix); // 1.2.3\n * ```\n */\nexport async function getLatestGitTagVersion(tagPrefix: string | undefined): Promise<string> {\n\tconst gitTags = await gitSemverTags({ tagPrefix });\n\tif (!gitTags.length) {\n\t\treturn \"1.0.0\";\n\t}\n\n\tconst cleanedTags = [];\n\n\tfor (const tag of gitTags) {\n\t\tconst cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), \"\"));\n\n\t\tif (cleanedTag) {\n\t\t\tcleanedTags.push(cleanedTag);\n\t\t}\n\t}\n\n\treturn cleanedTags.sort(semver.rcompare)[0];\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 { 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/schema\";\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.error(\"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\", (error) => {\n\t\t\t\tlogger.error(\"conventional-changelog: Unable to parse changes\");\n\t\t\t\tthrow error;\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\ninterface UpdateChangelog {\n\tchangelogPath: string;\n\toldContent: string;\n\tnewContent: string;\n}\n\nexport async function updateChangelog(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<UpdateChangelog> {\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\tif (!config.dryRun && !fileExists(changelogPath)) {\n\t\tlogger.log(`Creating Changelog file: ${changelogPath}`);\n\t\twriteFileSync(changelogPath, \"\\n\", \"utf8\");\n\t}\n\n\tconst oldContent = getOldReleaseContent(changelogPath, fileExists(changelogPath));\n\tconst newContent = await getNewReleaseContent(config, logger, nextVersion);\n\n\tlogger.log(`Updating Changelog: ${changelogPath}`);\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\treturn {\n\t\tchangelogPath,\n\t\toldContent,\n\t\tnewContent,\n\t};\n}\n","import { lstatSync } from \"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 (e) {\n\t\treturn false;\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface CommitChanges {\n\tfilesToCommit: string[];\n\tgitAddOutput?: string;\n\tgitCommitOutput?: string;\n}\n\nexport async function commitChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\tnextVersion: string,\n): Promise<CommitChanges> {\n\tconst git = new Git(config, logger);\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\t\tfilesToCommit,\n\t\t};\n\t}\n\n\tconst shouldVerify = config.verify ? undefined : \"--no-verify\";\n\tconst shouldSign = config.sign ? \"--gpg-sign\" : undefined;\n\n\t// If commitAll is set, commit all changed files.\n\tif (config.commitAll) {\n\t\treturn {\n\t\t\tfilesToCommit,\n\t\t\tgitAddOutput: await git.add(\"--all\"),\n\t\t\tgitCommitOutput: await git.commit(\n\t\t\t\tshouldVerify,\n\t\t\t\tshouldSign,\n\t\t\t\t\"--message\",\n\t\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tfilesToCommit,\n\t\tgitAddOutput: await git.add(...filesToCommit),\n\t\tgitCommitOutput: await git.commit(\n\t\t\tshouldVerify,\n\t\t\tshouldSign,\n\t\t\t...filesToCommit,\n\t\t\t\"--message\",\n\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t),\n\t};\n}\n","import { execFile } from \"node:child_process\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"./logger\";\n\nexport class Git {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {\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.revParse = this.revParse.bind(this);\n\t}\n\n\tpublic add(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"add\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic commit(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"commit\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic tag(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"tag\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic revParse(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"rev-parse\", args.filter(Boolean) as string[]);\n\t}\n\n\tprivate execGit(command: string, args: string[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\tthis.logger.debug(`Executing: git ${command} ${args.join(\" \")}`);\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},\n\t\t\t\t(error, stdout, stderr) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tthis.logger.error(`git ${command}:`);\n\t\t\t\t\t\tonReject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tonResolve(stdout ? stdout : stderr);\n\t\t\t\t},\n\t\t\t);\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 { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface TagChanges {\n\tgitTagOutput: string;\n}\n\nexport async function tagChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<TagChanges> {\n\tconst git = new Git(config, logger);\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 gitTagOutput = await git.tag(\n\t\tconfig.sign ? \"--sign\" : \"--annotate\",\n\t\ttag,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n\n\treturn {\n\t\tgitTagOutput,\n\t};\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport detectIndent from \"detect-indent\";\nimport { detectNewline } from \"detect-newline\";\n\nimport { stringifyPackage } from \"../libs/stringify-package\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\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\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 parsedJson = JSON.parse(fileContents);\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(`Unable to determine json package file: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\t\tconst parsedJson = JSON.parse(fileContents);\n\n\t\tparsedJson.version = newVersion;\n\t\tif (parsedJson.packages?.[\"\"]) {\n\t\t\tparsedJson.packages[\"\"].version = newVersion; // package-lock v2 stores version here too.\n\t\t}\n\n\t\twriteFileSync(\n\t\t\tfilePath,\n\t\t\tstringifyPackage(parsedJson, detectIndent(fileContents).amount, detectNewline(fileContents)),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n}\n","// https://github.com/npm/stringify-package/blob/main/LICENSE\n// Extracted from npm/stringify-package\n//\n// Copyright npm, Inc\n//\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nconst DEFAULT_INDENT = 2;\nconst CRLF = \"\\r\\n\";\nconst LF = \"\\n\";\n\n/**\n * @param data The object to stringify\n * @param indent `2, 4, \" \", \"\\t\"` Number of spaces a string of spaces or tab character, defaults to 2\n * @param newline `\"\\r\\n\", \"\\n\"` Windows or Unix line endings, defaults to Unix\n */\nexport function stringifyPackage(\n\tdata: object,\n\tindent?: string | number,\n\tnewline?: typeof CRLF | typeof LF,\n): string {\n\tconst stringified = JSON.stringify(data, null, indent ?? DEFAULT_INDENT);\n\n\tif (newline === CRLF) {\n\t\treturn stringified.replace(new RegExp(LF, \"g\"), CRLF);\n\t}\n\n\treturn stringified;\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/schema\";\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(`Unable to determine plain text file: ${fileName}`);\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\twriteFileSync(filePath, newVersion, \"utf8\");\n\t}\n}\n","import { JSONPackage } from \"./json-package\";\nimport { PlainText } from \"./plain-text\";\n\nimport type { ForkConfig } from \"../config/schema\";\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(filePath: string, newVersion: string): void;\n}\n\nexport class FileManager implements IFileManager {\n\tprivate JSONPackage: JSONPackage;\n\tprivate PlainText: PlainText;\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.PlainText = new PlainText(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\tif (fileName.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.read(fileName);\n\t\t} else if (fileName.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.read(fileName);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${fileName}`);\n\t}\n\n\t/**\n\t * Write the new version to the given file path.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.write(\"/path/to/package.json\", \"1.2.3\");\n\t * ```\n\t */\n\tpublic write(filePath: string, newVersion: string): void {\n\t\tif (this.config.dryRun) {\n\t\t\tthis.logger.log(`[Dry run]: Not updating ${filePath}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (filePath.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.write(filePath, newVersion);\n\t\t} else if (filePath.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.write(filePath, newVersion);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${filePath}`);\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config/schema.ts","../src/config/user-config.ts","../src/config/defaults.ts","../src/config/cli-arguments.ts","../src/config/changelog-preset-config.ts","../src/process/version.ts","../src/utils/git-tag-version.ts","../src/utils/release-type.ts","../src/process/changelog.ts","../src/utils/file-state.ts","../src/process/commit.ts","../src/utils/git.ts","../src/utils/format-commit-message.ts","../src/process/tag.ts","../src/strategies/json-package.ts","../src/libs/stringify-package.ts","../src/strategies/plain-text.ts","../src/strategies/file-manager.ts"],"names":["semver","resolve","readFileSync","writeFileSync"],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nexport const ChangelogPresetConfigSchema = z.object({\n\t/**\n\t * An array of `type` objects representing the explicitly supported commit message types,\n\t * and whether they should show up in generated `CHANGELOG`s.\n\t */\n\ttypes: z.array(\n\t\tz.object({\n\t\t\ttype: z.string(),\n\t\t\tsection: z.string().optional(),\n\t\t\thidden: z.boolean().optional(),\n\t\t}),\n\t),\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(),\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(),\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(),\n\t/**\n\t * A URL representing the a user's profile URL on GitHub, Gitlab, etc. This URL is used\n\t * for substituting @bcoe with https://github.com/bcoe in commit messages.\n\t * @default \"{{host}}/{{user}}\"\n\t */\n\tuserUrlFormat: z.string(),\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.string(),\n\t/**\n\t * An array of prefixes used to detect references to issues\n\t * @default [\"#\"]\n\t */\n\tissuePrefixes: z.array(z.string()),\n});\n\nexport type ChangelogPresetConfig = z.infer<typeof ChangelogPresetConfigSchema>;\n\nexport const ForkConfigSchema = z.object({\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(),\n\t/**\n\t * Name of the changelog file.\n\t * @default \"CHANGELOG.md\"\n\t */\n\tchangelog: z.string(),\n\t/**\n\t * The header to be used in 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(),\n\t/**\n\t * Files to be updated.\n\t * @default\n\t * ```js\n\t * [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]\n\t * ```\n\t */\n\tfiles: z.array(z.string()),\n\t/**\n\t * Specify a prefix for the git tag fork-version will create.\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 * | 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(),\n\t/**\n\t * Make a pre-release with optional label, if value is a string it will be used as the\n\t * pre-release tag.\n\t *\n\t * | Value | 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\tpreReleaseTag: z.string().or(z.boolean()).optional(),\n\n\t/**\n\t * Commit all staged changes, not just files updated by fork-version.\n\t * @default false\n\t */\n\tcommitAll: z.boolean(),\n\t/**\n\t * If set we'll log debug information.\n\t * @default false\n\t */\n\tdebug: z.boolean(),\n\t/**\n\t * If true, no output will be written to disk or committed.\n\t * @default false\n\t */\n\tdryRun: z.boolean(),\n\t/**\n\t * If true and we cant find a version in the list of `files`, we'll fallback\n\t * and attempt to use the latest git tag to get the current version.\n\t * @default true\n\t */\n\tgitTagFallback: z.boolean(),\n\t/**\n\t * If set, we'll gather information about the current version and exit.\n\t * @default false\n\t */\n\tinspectVersion: z.boolean(),\n\t/**\n\t * Should we sign the git commit using GPG?\n\t * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt GPG Sign Commits}\n\t * @default false\n\t */\n\tsign: z.boolean(),\n\t/**\n\t * If true, no output will be written to stdout.\n\t * @default false\n\t */\n\tsilent: z.boolean(),\n\t/**\n\t * If true, allow git to run git commit hooks.\n\t * @default false\n\t */\n\tverify: z.boolean(),\n\n\t/**\n\t * If set, we'll use this version number instead of trying to find a version from the list of `files`.\n\t * @example \"1.0.0\"\n\t * @default undefined\n\t */\n\tcurrentVersion: z.string().optional(),\n\t/**\n\t * If set, we'll attempt to update the version number to this version, instead of incrementing\n\t * using \"conventional-commit\".\n\t * @example \"2.0.0\"\n\t * @default undefined\n\t */\n\tnextVersion: z.string().optional(),\n\n\t/**\n\t * Override the default conventional-changelog preset configuration.\n\t */\n\tchangelogPresetConfig: ChangelogPresetConfigSchema.partial(),\n});\n\nexport type ForkConfig = z.infer<typeof ForkConfigSchema>;\n\nexport function defineConfig(config: Partial<ForkConfig>): Partial<ForkConfig> {\n\treturn config;\n}\n","import { parse, resolve } from \"node:path\";\nimport JoyCon from \"joycon\";\nimport { bundleRequire } from \"bundle-require\";\n\nimport { ForkConfigSchema, type ForkConfig } from \"./schema\";\nimport { DEFAULT_CONFIG } from \"./defaults\";\nimport { getCliArguments } from \"./cli-arguments\";\nimport { getChangelogPresetConfig } from \"./changelog-preset-config\";\n\nexport async function getUserConfig(): Promise<ForkConfig> {\n\tconst cliArguments = getCliArguments();\n\n\tconst cwd = cliArguments.flags.path ? resolve(cliArguments.flags.path) : process.cwd();\n\tconst joycon = new JoyCon();\n\tconst configFilePath = await joycon.resolve({\n\t\tfiles: [\"fork.config.ts\", \"fork.config.js\", \"fork.config.cjs\", \"fork.config.mjs\"],\n\t\tcwd,\n\t\tstopDir: parse(cwd).root,\n\t});\n\n\tif (!configFilePath) {\n\t\treturn {\n\t\t\t...DEFAULT_CONFIG,\n\t\t\t...cliArguments.flags,\n\t\t\tpath: cwd,\n\t\t\tchangelogPresetConfig: getChangelogPresetConfig(),\n\t\t} as ForkConfig;\n\t}\n\n\tconst foundConfig = await bundleRequire({ filepath: configFilePath });\n\tconst parsedConfig = ForkConfigSchema.partial().safeParse(\n\t\tfoundConfig.mod.default || foundConfig.mod,\n\t);\n\n\tif (!parsedConfig.success) {\n\t\tthrow parsedConfig.error;\n\t}\n\n\tconst usersConfig = {\n\t\t...DEFAULT_CONFIG,\n\t\t...parsedConfig.data,\n\t\t...cliArguments.flags,\n\t} as ForkConfig;\n\n\treturn {\n\t\t...usersConfig,\n\t\tpath: cwd,\n\t\tfiles: getFiles(parsedConfig.data?.files, cliArguments.flags?.files),\n\t\tchangelogPresetConfig: getChangelogPresetConfig(usersConfig?.changelogPresetConfig),\n\t};\n}\n\nfunction getFiles(configFiles: string[] | undefined, cliFiles: string[] | undefined): 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// 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 type { ForkConfig } from \"./schema\";\n\nexport const DEFAULT_CONFIG: ForkConfig = {\n\tpath: process.cwd(),\n\tchangelog: \"CHANGELOG.md\",\n\tfiles: [\n\t\t\"package.json\",\n\t\t\"package-lock.json\",\n\t\t\"npm-shrinkwrap.json\",\n\t\t\"manifest.json\", // Chrome extensions\n\t\t\"bower.json\",\n\t],\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\tcommitAll: false,\n\tdebug: false,\n\tdryRun: false,\n\tgitTagFallback: true,\n\tinspectVersion: false,\n\tsign: false,\n\tsilent: false,\n\tverify: false,\n\n\tchangelogPresetConfig: {},\n};\n","import meow from \"meow\";\n\nexport function getCliArguments() {\n\treturn meow(\n\t\t`\nUsage:\n $ fork-version [options]\n\nOptions:\n --path [Default: process.cwd()]\n The path fork-version will run from.\n --changelog [Default: \"CHANGELOG.md\"]\n Name of the changelog file.\n --header, -H\n The header to be used in the changelog.\n --files, --file, -F [Default: [\"bower.json\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]]\n Files to be updated.\n --tag-prefix [Default: \"v\"]\n Specify a prefix for the git tag \"fork-version\" will create.\n --pre-release-tag [Default: undefined]\n Make a pre-release with optional label, If value is a string it\n will be used as the pre-release tag.\n\n --commit-all\n Commit all staged changes, not just files updated by fork-version.\n --debug\n If true, we'll output debug information.\n --dry-run\n If true, no output will be written to disk or committed.\n --git-tag-fallback [Default: true]\n If true and we cant find a version in the given files, we'll fallback\n and attempt to use the latest git tag for the current version.\n --inspect-version\n If set, we'll gather information about the current version and exit.\n --sign\n Should we sign the git commit using GPG?\n --silent\n If true, no output will be written to stdout.\n --verify\n If true, allow git to run git commit hooks.\n\n --current-version\n If set, we'll use this version number instead of trying to find a\n version in a \"file\".\n --next-version\n If set, we'll attempt to update the version number to this version,\n instead of incrementing using \"conventional-commit\".\n`,\n\t\t{\n\t\t\timportMeta: import.meta,\n\t\t\tflags: {\n\t\t\t\tpath: { type: \"string\", default: process.cwd() },\n\t\t\t\tchangelog: { type: \"string\" },\n\t\t\t\theader: { type: \"string\", shortFlag: \"H\" },\n\t\t\t\tfiles: { type: \"string\", isMultiple: true, aliases: [\"file\"], shortFlag: \"F\" },\n\t\t\t\ttagPrefix: { type: \"string\" },\n\t\t\t\tpreReleaseTag: { type: \"string\" },\n\n\t\t\t\tcommitAll: { type: \"boolean\" },\n\t\t\t\tdebug: { type: \"boolean\" },\n\t\t\t\tdryRun: { type: \"boolean\" },\n\t\t\t\tgitTagFallback: { type: \"boolean\" },\n\t\t\t\tinspectVersion: { type: \"boolean\" },\n\t\t\t\tsign: { type: \"boolean\" },\n\t\t\t\tsilent: { type: \"boolean\" },\n\t\t\t\tverify: { type: \"boolean\" },\n\n\t\t\t\tcurrentVersion: { type: \"string\" },\n\t\t\t\tnextVersion: { type: \"string\" },\n\t\t\t},\n\t\t},\n\t);\n}\n","import conventionalChangelogConfigSpec from \"conventional-changelog-config-spec\";\n\nimport { ChangelogPresetConfigSchema, type ForkConfig } from \"./schema\";\n\nexport function getChangelogPresetConfig(\n\tusersChangelogPresetConfig?: ForkConfig[\"changelogPresetConfig\"],\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\tpreset[key] = value.default;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Then overwrite with any values from the users config\n\tif (usersChangelogPresetConfig && typeof usersChangelogPresetConfig === \"object\") {\n\t\tObject.entries(usersChangelogPresetConfig).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\treturn ChangelogPresetConfigSchema.passthrough().parse(preset);\n}\n","import semver, { type ReleaseType } from \"semver\";\nimport conventionalRecommendedBump from \"conventional-recommended-bump\";\n\nimport { getLatestGitTagVersion } from \"../utils/git-tag-version\";\nimport { getReleaseType } from \"../utils/release-type\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { IFileManager, FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface CurrentVersion {\n\tversion: string;\n\tfiles: FileState[];\n}\n\nexport async function getCurrentVersion(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfileManager: IFileManager,\n): Promise<CurrentVersion> {\n\tconst files: FileState[] = [];\n\tconst versions = new Set<string>();\n\n\tfor (const file of config.files) {\n\t\tconst fileState = fileManager.read(file);\n\n\t\tif (fileState) {\n\t\t\tfiles.push(fileState);\n\n\t\t\tif (config.currentVersion) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tversions.add(fileState.version);\n\t\t}\n\t}\n\n\tif (config.currentVersion) {\n\t\tversions.add(config.currentVersion);\n\t}\n\n\tif (versions.size === 0) {\n\t\tif (config.gitTagFallback) {\n\t\t\tconst version = await getLatestGitTagVersion(config.tagPrefix);\n\t\t\tif (version) {\n\t\t\t\treturn {\n\t\t\t\t\tfiles: [],\n\t\t\t\t\tversion: version,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Unable to find current version\");\n\t} else if (versions.size > 1) {\n\t\tthrow new Error(\"Found multiple versions\");\n\t}\n\n\tconst currentVersion = versions.entries().next().value[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.nextVersion && semver.valid(config.nextVersion)) {\n\t\tlogger.log(`Next version: ${config.nextVersion}`);\n\t\treturn { version: config.nextVersion };\n\t}\n\n\tconst isPreMajor = semver.lt(currentVersion, \"1.0.0\");\n\n\tlet recommendedBump: Awaited<ReturnType<typeof conventionalRecommendedBump>>;\n\ttry {\n\t\trecommendedBump = await conventionalRecommendedBump({\n\t\t\tpreset: {\n\t\t\t\tname: \"conventionalcommits\",\n\t\t\t\t...config.changelogPresetConfig,\n\t\t\t\tpreMajor: isPreMajor,\n\t\t\t},\n\t\t\tpath: config.path,\n\t\t\ttagPrefix: config.tagPrefix,\n\t\t\tcwd: config.path,\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(`[conventional-recommended-bump] Unable to determine next version`);\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.preReleaseTag,\n\t\t);\n\n\t\tconst state: NextVersion = {\n\t\t\t...recommendedBump,\n\t\t\tpreMajor: isPreMajor,\n\t\t\treleaseType,\n\t\t\tversion:\n\t\t\t\tsemver.inc(\n\t\t\t\t\tcurrentVersion,\n\t\t\t\t\treleaseType,\n\t\t\t\t\ttypeof config.preReleaseTag === \"string\" ? config.preReleaseTag : undefined,\n\t\t\t\t) ?? \"\",\n\t\t};\n\n\t\tlogger.log(`Next version: ${state.version} (${state.releaseType})`);\n\t\treturn state;\n\t}\n\n\tthrow new Error(\"Unable to find next version\");\n}\n","import gitSemverTags from \"git-semver-tags\";\nimport semver from \"semver\";\n\n/**\n * Get the latest git tag version.\n *\n * @example\n * ```ts\n * const tagPrefix = \"v\";\n * await getLatestGitTagVersion(tagPrefix); // 1.2.3\n * ```\n */\nexport async function getLatestGitTagVersion(tagPrefix: string | undefined): Promise<string> {\n\tconst gitTags = await gitSemverTags({ tagPrefix });\n\tif (!gitTags.length) {\n\t\treturn \"1.0.0\";\n\t}\n\n\tconst cleanedTags = [];\n\n\tfor (const tag of gitTags) {\n\t\tconst cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), \"\"));\n\n\t\tif (cleanedTag) {\n\t\t\tcleanedTags.push(cleanedTag);\n\t\t}\n\t}\n\n\treturn cleanedTags.sort(semver.rcompare)[0];\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 { 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/schema\";\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.error(\"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\", (error) => {\n\t\t\t\tlogger.error(\"conventional-changelog: Unable to parse changes\");\n\t\t\t\tthrow error;\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\ninterface UpdateChangelog {\n\tchangelogPath: string;\n\toldContent: string;\n\tnewContent: string;\n}\n\nexport async function updateChangelog(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<UpdateChangelog> {\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\tif (!config.dryRun && !fileExists(changelogPath)) {\n\t\tlogger.log(`Creating Changelog file: ${changelogPath}`);\n\t\twriteFileSync(changelogPath, \"\\n\", \"utf8\");\n\t}\n\n\tconst oldContent = getOldReleaseContent(changelogPath, fileExists(changelogPath));\n\tconst newContent = await getNewReleaseContent(config, logger, nextVersion);\n\n\tlogger.log(`Updating Changelog: ${changelogPath}`);\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\treturn {\n\t\tchangelogPath,\n\t\toldContent,\n\t\tnewContent,\n\t};\n}\n","import { lstatSync } from \"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 (e) {\n\t\treturn false;\n\t}\n}\n","import { resolve } from \"node:path\";\nimport { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { FileState } from \"../strategies/file-manager\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface CommitChanges {\n\tfilesToCommit: string[];\n\tgitAddOutput?: string;\n\tgitCommitOutput?: string;\n}\n\nexport async function commitChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tfiles: FileState[],\n\tnextVersion: string,\n): Promise<CommitChanges> {\n\tconst git = new Git(config, logger);\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\t\tfilesToCommit,\n\t\t};\n\t}\n\n\tconst shouldVerify = config.verify ? undefined : \"--no-verify\";\n\tconst shouldSign = config.sign ? \"--gpg-sign\" : undefined;\n\n\t// If commitAll is set, commit all changed files.\n\tif (config.commitAll) {\n\t\treturn {\n\t\t\tfilesToCommit,\n\t\t\tgitAddOutput: await git.add(\"--all\"),\n\t\t\tgitCommitOutput: await git.commit(\n\t\t\t\tshouldVerify,\n\t\t\t\tshouldSign,\n\t\t\t\t\"--message\",\n\t\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tfilesToCommit,\n\t\tgitAddOutput: await git.add(...filesToCommit),\n\t\tgitCommitOutput: await git.commit(\n\t\t\tshouldVerify,\n\t\t\tshouldSign,\n\t\t\t...filesToCommit,\n\t\t\t\"--message\",\n\t\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t\t),\n\t};\n}\n","import { execFile } from \"node:child_process\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"./logger\";\n\nexport class Git {\n\tconstructor(\n\t\tprivate config: ForkConfig,\n\t\tprivate logger: Logger,\n\t) {\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.revParse = this.revParse.bind(this);\n\t}\n\n\tpublic add(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"add\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic commit(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"commit\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic tag(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"tag\", args.filter(Boolean) as string[]);\n\t}\n\n\tpublic revParse(...args: (string | undefined)[]) {\n\t\treturn this.execGit(\"rev-parse\", args.filter(Boolean) as string[]);\n\t}\n\n\tprivate execGit(command: string, args: string[]): Promise<string> {\n\t\tif (this.config.dryRun) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\n\t\tthis.logger.debug(`Executing: git ${command} ${args.join(\" \")}`);\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},\n\t\t\t\t(error, stdout, stderr) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tthis.logger.error(`git ${command}:`);\n\t\t\t\t\t\tonReject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tonResolve(stdout ? stdout : stderr);\n\t\t\t\t},\n\t\t\t);\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 { Git } from \"../utils/git\";\nimport { formatCommitMessage } from \"../utils/format-commit-message\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\n\ninterface TagChanges {\n\tgitTagOutput: string;\n}\n\nexport async function tagChanges(\n\tconfig: ForkConfig,\n\tlogger: Logger,\n\tnextVersion: string,\n): Promise<TagChanges> {\n\tconst git = new Git(config, logger);\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 gitTagOutput = await git.tag(\n\t\tconfig.sign ? \"--sign\" : \"--annotate\",\n\t\ttag,\n\t\t\"--message\",\n\t\tformatCommitMessage(config.changelogPresetConfig?.releaseCommitMessageFormat, nextVersion),\n\t);\n\n\treturn {\n\t\tgitTagOutput,\n\t};\n}\n","import { resolve } from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport detectIndent from \"detect-indent\";\nimport { detectNewline } from \"detect-newline\";\n\nimport { stringifyPackage } from \"../libs/stringify-package\";\nimport { fileExists } from \"../utils/file-state\";\nimport type { ForkConfig } from \"../config/schema\";\nimport type { Logger } from \"../utils/logger\";\nimport type { FileState, IFileManager } from \"./file-manager\";\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\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 parsedJson = JSON.parse(fileContents);\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(`Unable to determine json package file: ${fileName}`);\n\t\t}\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\tconst fileContents = readFileSync(filePath, \"utf8\");\n\t\tconst parsedJson = JSON.parse(fileContents);\n\n\t\tparsedJson.version = newVersion;\n\t\tif (parsedJson.packages?.[\"\"]) {\n\t\t\tparsedJson.packages[\"\"].version = newVersion; // package-lock v2 stores version here too.\n\t\t}\n\n\t\twriteFileSync(\n\t\t\tfilePath,\n\t\t\tstringifyPackage(parsedJson, detectIndent(fileContents).amount, detectNewline(fileContents)),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n}\n","// https://github.com/npm/stringify-package/blob/main/LICENSE\n// Extracted from npm/stringify-package\n//\n// Copyright npm, Inc\n//\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nconst DEFAULT_INDENT = 2;\nconst CRLF = \"\\r\\n\";\nconst LF = \"\\n\";\n\n/**\n * @param data The object to stringify\n * @param indent `2, 4, \" \", \"\\t\"` Number of spaces a string of spaces or tab character, defaults to 2\n * @param newline `\"\\r\\n\", \"\\n\"` Windows or Unix line endings, defaults to Unix\n */\nexport function stringifyPackage(\n\tdata: object,\n\tindent?: string | number,\n\tnewline?: typeof CRLF | typeof LF,\n): string {\n\tconst stringified = JSON.stringify(data, null, indent ?? DEFAULT_INDENT);\n\n\tif (newline === CRLF) {\n\t\treturn stringified.replace(new RegExp(LF, \"g\"), CRLF);\n\t}\n\n\treturn stringified;\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/schema\";\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(`Unable to determine plain text file: ${fileName}`);\n\t}\n\n\tpublic write(filePath: string, newVersion: string) {\n\t\twriteFileSync(filePath, newVersion, \"utf8\");\n\t}\n}\n","import { JSONPackage } from \"./json-package\";\nimport { PlainText } from \"./plain-text\";\n\nimport type { ForkConfig } from \"../config/schema\";\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(filePath: string, newVersion: string): void;\n}\n\nexport class FileManager implements IFileManager {\n\tprivate JSONPackage: JSONPackage;\n\tprivate PlainText: PlainText;\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.PlainText = new PlainText(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\tif (fileName.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.read(fileName);\n\t\t} else if (fileName.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.read(fileName);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${fileName}`);\n\t}\n\n\t/**\n\t * Write the new version to the given file path.\n\t *\n\t * @example\n\t * ```ts\n\t * fileManager.write(\"/path/to/package.json\", \"1.2.3\");\n\t * ```\n\t */\n\tpublic write(filePath: string, newVersion: string): void {\n\t\tif (this.config.dryRun) {\n\t\t\tthis.logger.log(`[Dry run]: Not updating ${filePath}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (filePath.toLowerCase().endsWith(\".json\")) {\n\t\t\treturn this.JSONPackage.write(filePath, newVersion);\n\t\t} else if (filePath.toLowerCase().endsWith(\"version.txt\")) {\n\t\t\treturn this.PlainText.write(filePath, newVersion);\n\t\t}\n\n\t\tthis.logger.error(`Unsupported file type: ${filePath}`);\n\t}\n}\n"]}