fork-version 1.4.14 → 1.4.48

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.
@@ -1,712 +0,0 @@
1
- import path, { resolve, extname } from 'node:path';
2
- import JoyCon from 'joycon';
3
- import { bundleRequire } from 'bundle-require';
4
- import { z } from 'zod';
5
- import conventionalChangelogConfigSpec from 'conventional-changelog-config-spec';
6
- import meow from 'meow';
7
- import { writeFileSync, lstatSync, readFileSync, accessSync, constants, existsSync } from 'node:fs';
8
- import gitSemverTags from 'git-semver-tags';
9
- import semver from 'semver';
10
- import conventionalRecommendedBump from 'conventional-recommended-bump';
11
- import detectIndent from 'detect-indent';
12
- import detectNewLine from 'detect-newline';
13
- import conventionalChangelog from 'conventional-changelog';
14
- import { execFile } from 'node:child_process';
15
-
16
- // src/configuration.ts
17
- var ForkConfigSchema = z.object({
18
- /**
19
- * The path where the changes should be calculated from.
20
- * @default
21
- * ```js
22
- * process.cwd()
23
- * ```
24
- */
25
- changePath: z.string(),
26
- /**
27
- * The name of the changelog file.
28
- * @default "CHANGELOG.md"
29
- */
30
- changelog: z.string(),
31
- /**
32
- * Files to be updated.
33
- * @default
34
- * ```js
35
- * ["bower.json", "manifest.json", "npm-shrinkwrap.json", "package-lock.json", "package.json"]
36
- * ```
37
- */
38
- outFiles: z.array(z.string()),
39
- /**
40
- * The header to be used in the changelog.
41
- * @default
42
- * ```markdown
43
- * # Changelog
44
- *
45
- * All notable changes to this project will be documented in this file. See [fork-version](https://github.com/eglavin/fork-version) for commit guidelines.
46
- * ```
47
- */
48
- header: z.string(),
49
- /**
50
- * Specify a prefix for the git tag that will be taken into account during the comparison.
51
- *
52
- * For instance if your version tag is prefixed by `version/` instead of `v` you would
53
- * have to specify `tagPrefix: "version/"`.
54
- * @default `v`
55
- */
56
- tagPrefix: z.string(),
57
- /**
58
- * Make a pre-release with optional label to specify a tag id.
59
- * @example true, "alpha", "beta", "rc", etc.
60
- * @default undefined
61
- */
62
- preReleaseTag: z.string().or(z.boolean()).optional(),
63
- /**
64
- * Commit all staged changes, not just files updated by fork-version.
65
- * @default false
66
- */
67
- commitAll: z.boolean(),
68
- /**
69
- * If true, no output will be written to disk or committed.
70
- * @default false
71
- */
72
- dryRun: z.boolean(),
73
- /**
74
- * If true and we cant find a version in an `outFiles`, we'll fallback and attempt
75
- * to use the latest git tag for the current version.
76
- * @default true
77
- */
78
- gitTagFallback: z.boolean(),
79
- /**
80
- * Should we sign the git commit using GPG?
81
- * @see {@link https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--Sltkeyidgt GPG Sign Commits}
82
- * @default false
83
- */
84
- sign: z.boolean(),
85
- /**
86
- * If true, no output will be written to stdout.
87
- * @default false
88
- */
89
- silent: z.boolean(),
90
- /**
91
- * If true, allow git to run git commit hooks.
92
- * @default false
93
- */
94
- verify: z.boolean(),
95
- /**
96
- * If set, we'll use this version number instead of trying to find it in an `outFiles`.
97
- * @example "1.0.0"
98
- * @default undefined
99
- */
100
- currentVersion: z.string().optional(),
101
- /**
102
- * If set, we'll attempt to update the version number to this version.
103
- * @example "2.0.0"
104
- * @default undefined
105
- */
106
- nextVersion: z.string().optional(),
107
- /**
108
- * Override the default conventional-changelog preset configuration.
109
- */
110
- changelogPresetConfig: z.object({
111
- /**
112
- * An array of `type` objects representing the explicitly supported commit message types, and whether they should show up in generated `CHANGELOG`s.
113
- */
114
- types: z.array(
115
- z.object({
116
- type: z.string(),
117
- section: z.string().optional(),
118
- hidden: z.boolean().optional()
119
- })
120
- ).optional(),
121
- /**
122
- * A URL representing a specific commit at a hash.
123
- */
124
- commitUrlFormat: z.string().optional(),
125
- /**
126
- * A URL representing the comparison between two git SHAs.
127
- */
128
- compareUrlFormat: z.string().optional(),
129
- /**
130
- * A URL representing the issue format (allowing a different URL format to be swapped in for Gitlab, Bitbucket, etc).
131
- */
132
- issueUrlFormat: z.string().optional(),
133
- /**
134
- * A URL representing the a user's profile URL on GitHub, Gitlab, etc. This URL is used for substituting @bcoe with https://github.com/bcoe in commit messages.
135
- */
136
- userUrlFormat: z.string().optional(),
137
- /**
138
- * A string to be used to format the auto-generated release commit message.
139
- */
140
- releaseCommitMessageFormat: z.string().optional(),
141
- /**
142
- * An array of prefixes used to detect references to issues
143
- */
144
- issuePrefixes: z.array(z.string()).optional()
145
- }),
146
- /**
147
- * Log function, can be used to override the default `console.log` function
148
- * to log to a file or another service.
149
- * @default console.log
150
- */
151
- log: z.function().args(z.string()).returns(z.void()),
152
- /**
153
- * Error logger function, can be used to override the default `console.error`
154
- * function to log to a file or another service.
155
- * @default console.error
156
- */
157
- error: z.function().args(z.string()).returns(z.void()),
158
- /**
159
- * Debug logger function, by default this is a noop function, but can be replaced
160
- * with a custom logger function or `console.info` to print output.
161
- * @default () => {}
162
- */
163
- debug: z.function().args(z.string()).returns(z.void())
164
- });
165
- var DEFAULT_CONFIG = {
166
- changePath: process.cwd(),
167
- changelog: "CHANGELOG.md",
168
- outFiles: [
169
- "bower.json",
170
- "manifest.json",
171
- // Chrome extensions
172
- "npm-shrinkwrap.json",
173
- "package-lock.json",
174
- "package.json"
175
- ],
176
- header: "# 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",
177
- tagPrefix: "v",
178
- commitAll: false,
179
- dryRun: false,
180
- gitTagFallback: true,
181
- sign: false,
182
- silent: false,
183
- verify: false,
184
- changelogPresetConfig: {},
185
- log: console.log,
186
- // eslint-disable-line no-console
187
- error: console.error,
188
- // eslint-disable-line no-console
189
- debug: () => {
190
- }
191
- };
192
- function defineConfig(config) {
193
- return config;
194
- }
195
- function getPresetDefaults(usersChangelogPresetConfig) {
196
- const preset = {
197
- name: "conventionalcommits"
198
- };
199
- if (typeof conventionalChangelogConfigSpec.properties === "object") {
200
- Object.entries(conventionalChangelogConfigSpec.properties).forEach(([key, value]) => {
201
- const _value = value;
202
- if ("default" in _value && _value.default !== void 0) {
203
- preset[key] = _value.default;
204
- }
205
- });
206
- }
207
- if (usersChangelogPresetConfig && typeof usersChangelogPresetConfig === "object") {
208
- Object.entries(usersChangelogPresetConfig).forEach(([key, value]) => {
209
- if (value !== void 0) {
210
- preset[key] = value;
211
- }
212
- });
213
- }
214
- return preset;
215
- }
216
- function getCliArguments() {
217
- return meow(
218
- `
219
- Usage:
220
- $ fork-version
221
-
222
- Options:
223
- --changelog
224
- Name of the changelog file. [Default: "CHANGELOG.md"]
225
- --outFiles
226
- Files to be updated. [Default: ["bower.json", "manifest.json", "npm-shrinkwrap.json", "package-lock.json", "package.json"]]
227
- --header, -H
228
- The header to be used in the changelog.
229
-
230
- --tagPrefix
231
- Specify a prefix for the git tag that will be taken into account during the comparison. [Default: "v"]
232
- --preReleaseTag
233
- Make a pre-release with optional label to specify a tag id. [Default: undefined]
234
-
235
- --commitAll
236
- Commit all staged changes, not just files updated by fork-version.
237
- --dryRun
238
- If true, no output will be written to disk or committed.
239
- --gitTagFallback
240
- If true and we cant find a version in an outFiles, we'll fallback and attempt to use the latest git tag for the current version. [Default: true]
241
- --sign
242
- Should we sign the git commit using GPG?
243
- --silent
244
- If true, no output will be written to stdout.
245
- --verify
246
- If true, allow git to run git commit hooks.
247
-
248
- --currentVersion
249
- If set, we'll use this current version number instead of trying to find it in an outFiles.
250
- --nextVersion
251
- If set, we'll attempt to update to this version.
252
- `,
253
- {
254
- importMeta: import.meta,
255
- flags: {
256
- changelog: {
257
- type: "string"
258
- },
259
- outFiles: {
260
- type: "string",
261
- isMultiple: true
262
- },
263
- header: {
264
- type: "string",
265
- shortFlag: "H"
266
- },
267
- tagPrefix: {
268
- type: "string"
269
- },
270
- preReleaseTag: {
271
- type: "string"
272
- },
273
- commitAll: {
274
- type: "boolean"
275
- },
276
- dryRun: {
277
- type: "boolean"
278
- },
279
- gitTagFallback: {
280
- type: "boolean"
281
- },
282
- sign: {
283
- type: "boolean"
284
- },
285
- silent: {
286
- type: "boolean"
287
- },
288
- verify: {
289
- type: "boolean"
290
- },
291
- currentVersion: {
292
- type: "string"
293
- },
294
- nextVersion: {
295
- type: "string"
296
- }
297
- }
298
- }
299
- );
300
- }
301
- async function getForkConfig() {
302
- const cwd = process.cwd();
303
- const joycon = new JoyCon.default();
304
- const configPath = await joycon.resolve({
305
- files: ["fork.config.js"],
306
- cwd,
307
- stopDir: path.parse(cwd).root
308
- });
309
- const cliArguments = getCliArguments();
310
- if (configPath) {
311
- const foundConfig = await bundleRequire({ filepath: configPath });
312
- const parsedConfig = ForkConfigSchema.partial().safeParse(
313
- foundConfig.mod.default || foundConfig.mod
314
- );
315
- if (parsedConfig.success) {
316
- const usersConfig = Object.assign({}, DEFAULT_CONFIG, parsedConfig.data, cliArguments.flags);
317
- if ("debug" in parsedConfig && typeof parsedConfig.debug === "function") {
318
- usersConfig.debug = parsedConfig.debug;
319
- }
320
- if (usersConfig.silent) {
321
- usersConfig.log = () => {
322
- };
323
- usersConfig.error = () => {
324
- };
325
- usersConfig.debug = () => {
326
- };
327
- }
328
- const mergedOutFiles = DEFAULT_CONFIG.outFiles.concat(
329
- parsedConfig.data?.outFiles || [],
330
- cliArguments.flags?.outFiles || []
331
- );
332
- return Object.assign(usersConfig, {
333
- changelogPresetConfig: getPresetDefaults(usersConfig?.changelogPresetConfig),
334
- outFiles: Array.from(new Set(mergedOutFiles))
335
- });
336
- } else {
337
- throw parsedConfig.error;
338
- }
339
- }
340
- return Object.assign(DEFAULT_CONFIG, cliArguments.flags, {
341
- changelogPresetConfig: getPresetDefaults()
342
- });
343
- }
344
-
345
- // src/libs/stringify-package.ts
346
- var DEFAULT_INDENT = 2;
347
- var CRLF = "\r\n";
348
- var LF = "\n";
349
- function stringifyPackage(data, indent, newline) {
350
- const stringified = JSON.stringify(data, null, indent || (indent === 0 ? 0 : DEFAULT_INDENT));
351
- if (newline === CRLF) {
352
- return stringified.replace(new RegExp(LF, "g"), CRLF);
353
- }
354
- return stringified;
355
- }
356
-
357
- // src/process/version.ts
358
- function getFile(options, fileToGet) {
359
- try {
360
- const fileExtension = extname(fileToGet);
361
- if (fileExtension === ".json") {
362
- const filePath = resolve(options.changePath, fileToGet);
363
- if (existsSync(filePath)) {
364
- const fileContents = readFileSync(filePath, "utf8");
365
- const parsedJson = JSON.parse(fileContents);
366
- if (parsedJson.version) {
367
- return {
368
- name: fileToGet,
369
- path: filePath,
370
- type: "package-file",
371
- version: parsedJson.version,
372
- isPrivate: "private" in parsedJson && (typeof parsedJson.private === "boolean" ? parsedJson.private : false)
373
- };
374
- } else {
375
- options.log(`Unable to find version in file: ${fileToGet}`);
376
- }
377
- }
378
- }
379
- } catch (error) {
380
- options.error(`Error reading file: ${fileToGet}`, error);
381
- }
382
- }
383
- async function getLatestGitTagVersion(tagPrefix) {
384
- const gitTags = await gitSemverTags({ tagPrefix });
385
- if (!gitTags.length) {
386
- return "1.0.0";
387
- }
388
- const cleanedTags = [];
389
- for (const tag of gitTags) {
390
- const cleanedTag = semver.clean(tag.replace(new RegExp(`^${tagPrefix}`), ""));
391
- if (cleanedTag) {
392
- cleanedTags.push(cleanedTag);
393
- }
394
- }
395
- return cleanedTags.sort(semver.rcompare)[0];
396
- }
397
- async function getCurrentVersion(options) {
398
- const files = [];
399
- const versions = [];
400
- for (const file of options.outFiles) {
401
- const fileState = getFile(options, file);
402
- if (fileState) {
403
- files.push(fileState);
404
- if (options.currentVersion) {
405
- continue;
406
- }
407
- if (!versions.includes(fileState.version)) {
408
- versions.push(fileState.version);
409
- }
410
- }
411
- }
412
- if (options.currentVersion) {
413
- versions.push(options.currentVersion);
414
- }
415
- if (versions.length === 0) {
416
- if (options.gitTagFallback) {
417
- const version = await getLatestGitTagVersion(options.tagPrefix);
418
- if (version) {
419
- return {
420
- files: [],
421
- currentVersion: version
422
- };
423
- }
424
- }
425
- throw new Error("Unable to find current version");
426
- } else if (versions.length > 1) {
427
- throw new Error("Found multiple versions");
428
- }
429
- return {
430
- files,
431
- currentVersion: versions[0]
432
- };
433
- }
434
- function getPriority(type) {
435
- return ["patch", "minor", "major"].indexOf(type || "");
436
- }
437
- function getVersionType(version) {
438
- const parseVersion = semver.parse(version);
439
- if (parseVersion?.major) {
440
- return "major";
441
- } else if (parseVersion?.minor) {
442
- return "minor";
443
- } else if (parseVersion?.patch) {
444
- return "patch";
445
- }
446
- return void 0;
447
- }
448
- function getReleaseType(releaseType, currentVersion, preReleaseTag) {
449
- if (!preReleaseTag) {
450
- return releaseType;
451
- }
452
- if (Array.isArray(semver.prerelease(currentVersion))) {
453
- const currentReleaseType = getVersionType(currentVersion);
454
- if (currentReleaseType === releaseType || getPriority(currentReleaseType) > getPriority(releaseType)) {
455
- return "prerelease";
456
- }
457
- }
458
- return `pre${releaseType}`;
459
- }
460
- async function getNextVersion(options, currentVersion) {
461
- if (options.nextVersion && semver.valid(options.nextVersion)) {
462
- return { nextVersion: options.nextVersion };
463
- }
464
- const preMajor = semver.lt(currentVersion, "1.0.0");
465
- const recommendedBump = await conventionalRecommendedBump({
466
- preset: {
467
- name: "conventionalcommits",
468
- ...options.changelogPresetConfig || {},
469
- preMajor
470
- },
471
- path: options.changePath,
472
- tagPrefix: options.tagPrefix,
473
- cwd: options.changePath
474
- });
475
- if (recommendedBump.releaseType) {
476
- const releaseType = getReleaseType(
477
- recommendedBump.releaseType,
478
- currentVersion,
479
- options.preReleaseTag
480
- );
481
- return Object.assign(recommendedBump, {
482
- preMajor,
483
- releaseType,
484
- nextVersion: semver.inc(
485
- currentVersion,
486
- releaseType,
487
- typeof options.preReleaseTag === "string" ? options.preReleaseTag : void 0
488
- ) || ""
489
- });
490
- }
491
- throw new Error("Unable to find next version");
492
- }
493
- function updateFile(options, fileToUpdate, type, nextVersion) {
494
- try {
495
- if (type === "package-file") {
496
- if (!lstatSync(fileToUpdate).isFile())
497
- return;
498
- const fileContents = readFileSync(fileToUpdate, "utf8");
499
- const indent = detectIndent(fileContents).indent;
500
- const newline = detectNewLine(fileContents);
501
- const parsedJson = JSON.parse(fileContents);
502
- parsedJson.version = nextVersion;
503
- if (parsedJson.packages && parsedJson.packages[""]) {
504
- parsedJson.packages[""].version = nextVersion;
505
- }
506
- if (!options.dryRun) {
507
- writeFileSync(fileToUpdate, stringifyPackage(parsedJson, indent, newline), "utf8");
508
- }
509
- }
510
- } catch (error) {
511
- options.error("Error writing: ", error);
512
- }
513
- }
514
- async function bumpVersion(options) {
515
- const current = await getCurrentVersion(options);
516
- const next = await getNextVersion(options, current.currentVersion);
517
- options.log(`Current version: ${current.currentVersion}
518
- Next version: ${next.nextVersion} (${next.releaseType})
519
- Updating Files: `);
520
- for (const outFile of current.files) {
521
- options.log(` ${outFile.path}`);
522
- updateFile(options, outFile.path, outFile.type, next.nextVersion);
523
- }
524
- return {
525
- currentVersion: current.currentVersion,
526
- files: current.files,
527
- nextVersion: next.nextVersion,
528
- level: next.level,
529
- preMajor: next.preMajor,
530
- reason: next.reason,
531
- releaseType: next.releaseType
532
- };
533
- }
534
- function createChangelog(options) {
535
- const changelogPath = resolve(options.changelog);
536
- try {
537
- accessSync(changelogPath, constants.F_OK);
538
- } catch (err) {
539
- if (!options.dryRun && err.code === "ENOENT") {
540
- options.log(`Creating Changelog file: ${changelogPath}`);
541
- writeFileSync(changelogPath, "\n", "utf8");
542
- }
543
- }
544
- return {
545
- path: changelogPath,
546
- exists: existsSync(changelogPath)
547
- };
548
- }
549
- var RELEASE_PATTERN = /(^#+ \[?[0-9]+\.[0-9]+\.[0-9]+|<a name=)/m;
550
- function getOldReleaseContent(changelog) {
551
- if (changelog.exists) {
552
- const fileContents = readFileSync(changelog.path, "utf-8");
553
- const oldContentStart = fileContents.search(RELEASE_PATTERN);
554
- if (oldContentStart !== -1) {
555
- return fileContents.substring(oldContentStart);
556
- }
557
- }
558
- return "";
559
- }
560
- function getNewReleaseContent(options, bumpResult) {
561
- return new Promise((resolve3) => {
562
- let newContent = "";
563
- conventionalChangelog(
564
- {
565
- preset: {
566
- name: "conventionalcommits",
567
- ...options.changelogPresetConfig || {}
568
- },
569
- tagPrefix: options.tagPrefix,
570
- warn: (...message) => options.error("conventional-changelog: ", ...message),
571
- cwd: options.changePath
572
- },
573
- {
574
- version: bumpResult.nextVersion
575
- },
576
- {
577
- merges: null,
578
- path: options.changePath
579
- }
580
- ).on("error", (error) => {
581
- options.error("conventional-changelog: Unable to parse changes");
582
- throw error;
583
- }).on("data", (chunk) => {
584
- newContent += chunk.toString();
585
- }).on("end", () => {
586
- resolve3(newContent);
587
- });
588
- });
589
- }
590
- async function updateChangelog(options, bumpResult) {
591
- if (options.header.search(RELEASE_PATTERN) !== -1) {
592
- throw new Error("Header cannot contain release pattern");
593
- }
594
- const changelog = createChangelog(options);
595
- const oldContent = getOldReleaseContent(changelog);
596
- const newContent = await getNewReleaseContent(options, bumpResult);
597
- options.log(`Updating Changelog:
598
- ${changelog.path}`);
599
- if (!options.dryRun && newContent) {
600
- writeFileSync(changelog.path, `${options.header}
601
- ${newContent}
602
- ${oldContent}`, "utf8");
603
- }
604
- return {
605
- changelog,
606
- oldContent,
607
- newContent
608
- };
609
- }
610
- function createExecute(options) {
611
- async function executeGit(...execArgs) {
612
- const args = execArgs.filter(Boolean);
613
- options.debug(`Executing: git ${args.join(" ")}`);
614
- if (!options.dryRun) {
615
- return new Promise((resolve3) => {
616
- execFile("git", args, (error, stdout, stderr) => {
617
- if (error) {
618
- options.error(`git ${args[0]}:`);
619
- throw error;
620
- }
621
- resolve3(stdout ? stdout : stderr);
622
- });
623
- });
624
- }
625
- return "";
626
- }
627
- return {
628
- executeGit
629
- };
630
- }
631
-
632
- // src/utils/format-commit-message.ts
633
- function formatCommitMessage(message, newVersion) {
634
- if (!message) {
635
- message = "chore(release): {{currentTag}}";
636
- }
637
- return message.replace(new RegExp("{{currentTag}}", "g"), newVersion);
638
- }
639
-
640
- // src/process/commit.ts
641
- async function commitChanges(options, bumpResult) {
642
- const { executeGit } = createExecute(options);
643
- options.log("Committing changes");
644
- const filesToCommit = [options.changelog];
645
- for (const file of bumpResult.files) {
646
- filesToCommit.push(file.name);
647
- }
648
- if (filesToCommit.length === 0) {
649
- return {
650
- filesToCommit
651
- };
652
- }
653
- const gitAddOutput = await executeGit("add", ...filesToCommit);
654
- const shouldVerify = options.verify ? void 0 : "--no-verify";
655
- const shouldSign = options.sign ? "-S" : void 0;
656
- const shouldCommitAll = options.commitAll ? [] : filesToCommit;
657
- const gitCommitOutput = await executeGit(
658
- "commit",
659
- shouldVerify,
660
- shouldSign,
661
- ...shouldCommitAll,
662
- "-m",
663
- formatCommitMessage(
664
- options.changelogPresetConfig?.releaseCommitMessageFormat,
665
- bumpResult.nextVersion
666
- )
667
- );
668
- return {
669
- filesToCommit,
670
- gitAddOutput,
671
- gitCommitOutput
672
- };
673
- }
674
-
675
- // src/process/tag.ts
676
- async function tagChanges(options, bumpResult) {
677
- const { executeGit } = createExecute(options);
678
- const shouldSign = options.sign ? "-s" : "-a";
679
- const tag = `${options.tagPrefix}${bumpResult.nextVersion}`;
680
- options.log(`Creating Tag: ${tag}`);
681
- const gitTagOutput = await executeGit(
682
- "tag",
683
- shouldSign,
684
- tag,
685
- "-m",
686
- formatCommitMessage(
687
- options.changelogPresetConfig?.releaseCommitMessageFormat,
688
- bumpResult.nextVersion
689
- )
690
- );
691
- const currentBranchName = await executeGit("rev-parse", "--abbrev-ref", "HEAD");
692
- const hasPublicPackageFile = bumpResult.files.some(
693
- (file) => file.name === "package.json" && file.isPrivate === false
694
- );
695
- const isPreRelease = `${bumpResult.releaseType}`.startsWith("pre");
696
- const pushMessage = `Run \`git push --follow-tags origin ${currentBranchName.trim()}\` to push the changes and the tag.`;
697
- const publishMessage = isPreRelease ? `Run \`npm publish --tag ${typeof options.preReleaseTag === "string" ? options.preReleaseTag : "prerelease"}\` to publish the package.` : "Run `npm publish` to publish the package.";
698
- options.log(`
699
- ${pushMessage}
700
- ${hasPublicPackageFile ? publishMessage : ""}`);
701
- return {
702
- gitTagOutput,
703
- currentBranchName,
704
- hasPublicPackageFile,
705
- pushMessage,
706
- publishMessage
707
- };
708
- }
709
-
710
- export { bumpVersion, commitChanges, defineConfig, getForkConfig, tagChanges, updateChangelog };
711
- //# sourceMappingURL=out.js.map
712
- //# sourceMappingURL=chunk-X4ZM273H.js.map