conventional-changelog 7.0.0 → 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/ConventionalChangelog.d.ts +120 -0
  2. package/dist/ConventionalChangelog.d.ts.map +1 -0
  3. package/dist/ConventionalChangelog.js +429 -0
  4. package/dist/cli/cli.d.ts +82 -0
  5. package/dist/cli/cli.d.ts.map +1 -0
  6. package/dist/cli/cli.js +161 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +36 -0
  10. package/dist/cli/options.d.ts +6 -0
  11. package/dist/cli/options.d.ts.map +1 -0
  12. package/dist/cli/options.js +47 -0
  13. package/dist/cli/utils.d.ts +3 -0
  14. package/dist/cli/utils.d.ts.map +1 -0
  15. package/dist/cli/utils.js +25 -0
  16. package/dist/hostedGitInfo.d.ts +3 -0
  17. package/dist/hostedGitInfo.d.ts.map +1 -0
  18. package/dist/hostedGitInfo.js +118 -0
  19. package/dist/hostedGitInfo.mock.d.ts +2496 -0
  20. package/dist/hostedGitInfo.mock.d.ts.map +1 -0
  21. package/dist/hostedGitInfo.mock.js +4161 -0
  22. package/dist/hosts/bitbucket.d.ts +7 -0
  23. package/dist/hosts/bitbucket.d.ts.map +1 -0
  24. package/dist/hosts/bitbucket.js +20 -0
  25. package/dist/hosts/github.d.ts +7 -0
  26. package/dist/hosts/github.d.ts.map +1 -0
  27. package/dist/hosts/github.js +17 -0
  28. package/dist/hosts/gitlab.d.ts +7 -0
  29. package/dist/hosts/gitlab.d.ts.map +1 -0
  30. package/dist/hosts/gitlab.js +16 -0
  31. package/dist/hosts/index.d.ts +3 -0
  32. package/dist/hosts/index.d.ts.map +1 -0
  33. package/dist/hosts/index.js +9 -0
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +3 -0
  37. package/dist/types.d.ts +84 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +2 -0
  40. package/dist/utils.d.ts +10 -0
  41. package/dist/utils.d.ts.map +1 -0
  42. package/dist/utils.js +64 -0
  43. package/package.json +4 -4
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env node
2
+ import { createReadStream, createWriteStream } from 'fs';
3
+ import {} from '../index.js';
4
+ import { parseOptions, parseCommitsOptions, parseTagsOptions } from './options.js';
5
+ import { loadDataFile, isFileExists } from './utils.js';
6
+ export const flags = {
7
+ infile: {
8
+ shortFlag: 'i',
9
+ default: 'CHANGELOG.md',
10
+ type: 'string'
11
+ },
12
+ outfile: {
13
+ shortFlag: 'o',
14
+ type: 'string'
15
+ },
16
+ stdout: {
17
+ type: 'boolean'
18
+ },
19
+ preset: {
20
+ shortFlag: 'p',
21
+ type: 'string'
22
+ },
23
+ pkg: {
24
+ shortFlag: 'k',
25
+ type: 'string'
26
+ },
27
+ append: {
28
+ shortFlag: 'a',
29
+ type: 'boolean'
30
+ },
31
+ releaseCount: {
32
+ shortFlag: 'r',
33
+ type: 'number'
34
+ },
35
+ skipUnstable: {
36
+ type: 'boolean'
37
+ },
38
+ outputUnreleased: {
39
+ shortFlag: 'u',
40
+ type: 'boolean'
41
+ },
42
+ verbose: {
43
+ shortFlag: 'v',
44
+ type: 'boolean'
45
+ },
46
+ config: {
47
+ shortFlag: 'n',
48
+ type: 'string'
49
+ },
50
+ context: {
51
+ shortFlag: 'c',
52
+ type: 'string'
53
+ },
54
+ firstRelease: {
55
+ shortFlag: 'f',
56
+ type: 'boolean'
57
+ },
58
+ lernaPackage: {
59
+ shortFlag: 'l',
60
+ type: 'string'
61
+ },
62
+ tagPrefix: {
63
+ shortFlag: 't',
64
+ type: 'string'
65
+ }
66
+ };
67
+ export async function runProgram(generator, flags) {
68
+ let { infile, outfile, stdout, verbose, pkg, preset, config, context } = flags;
69
+ generator.readPackage(pkg);
70
+ if (preset) {
71
+ generator.loadPreset(preset);
72
+ }
73
+ if (config) {
74
+ const configOptions = await loadDataFile(config);
75
+ if (configOptions.tags) {
76
+ generator.tags(configOptions.tags);
77
+ }
78
+ if (configOptions.commits || configOptions.parser) {
79
+ generator.commits(configOptions.commits || {}, configOptions.parser);
80
+ }
81
+ if (configOptions.writer) {
82
+ generator.writer(configOptions.writer);
83
+ }
84
+ }
85
+ if (context) {
86
+ const writerContext = await loadDataFile(context);
87
+ if (writerContext) {
88
+ generator.context(writerContext);
89
+ }
90
+ }
91
+ const options = parseOptions(flags);
92
+ if (options) {
93
+ generator.options(options);
94
+ }
95
+ const tagsOptions = parseTagsOptions(flags);
96
+ if (tagsOptions) {
97
+ generator.tags(tagsOptions);
98
+ }
99
+ const commitsOptions = parseCommitsOptions(flags);
100
+ if (commitsOptions) {
101
+ generator.commits(commitsOptions);
102
+ }
103
+ if (verbose) {
104
+ generator.options({
105
+ debug(namespace, payload) {
106
+ console.info(`[${namespace}]:`, payload);
107
+ },
108
+ warn(namespace, payload) {
109
+ console.warn(`[${namespace}]:`, payload);
110
+ }
111
+ });
112
+ }
113
+ outfile ||= infile;
114
+ const sameFile = !stdout && infile === outfile;
115
+ const changelog = generator.write();
116
+ const streams = [];
117
+ if (infile && options?.releaseCount !== 0) {
118
+ const isInfileExists = await isFileExists(infile);
119
+ const input = isInfileExists
120
+ ? createReadStream(infile)
121
+ : [];
122
+ if (!isInfileExists && verbose) {
123
+ console.warn(`"${infile}" does not exist.`);
124
+ }
125
+ if (sameFile) {
126
+ if (options?.append) {
127
+ streams.push(changelog);
128
+ }
129
+ else {
130
+ const buffer = [];
131
+ for await (const chunk of changelog) {
132
+ buffer.push(chunk);
133
+ }
134
+ for await (const chunk of input) {
135
+ buffer.push(chunk);
136
+ }
137
+ streams.push(buffer);
138
+ }
139
+ }
140
+ else if (options?.append) {
141
+ streams.push(input, changelog);
142
+ }
143
+ else {
144
+ streams.push(changelog, input);
145
+ }
146
+ }
147
+ else {
148
+ streams.push(changelog);
149
+ }
150
+ const output = (outfile && !stdout
151
+ ? createWriteStream(outfile, {
152
+ flags: sameFile && options?.append ? 'a' : 'w'
153
+ })
154
+ : process.stdout);
155
+ for (const stream of streams) {
156
+ for await (const chunk of stream) {
157
+ output.write(chunk);
158
+ }
159
+ }
160
+ }
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2xCLE1BQU0sSUFBSSxDQUFBO0FBQ1gsT0FBTyxFQUdOLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNqQixNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDYixNQUFNLFlBQVksQ0FBQTtBQW9CbkIsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLE1BQU0sRUFBRTtRQUNOLFNBQVMsRUFBRSxHQUFHO1FBQ2QsT0FBTyxFQUFFLGNBQWM7UUFDdkIsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNELE9BQU8sRUFBRTtRQUNQLFNBQVMsRUFBRSxHQUFHO1FBQ2QsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNELE1BQU0sRUFBRTtRQUNOLElBQUksRUFBRSxTQUFTO0tBQ2hCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sU0FBUyxFQUFFLEdBQUc7UUFDZCxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsU0FBUyxFQUFFLEdBQUc7UUFDZCxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsTUFBTSxFQUFFO1FBQ04sU0FBUyxFQUFFLEdBQUc7UUFDZCxJQUFJLEVBQUUsU0FBUztLQUNoQjtJQUNELFlBQVksRUFBRTtRQUNaLFNBQVMsRUFBRSxHQUFHO1FBQ2QsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNELFlBQVksRUFBRTtRQUNaLElBQUksRUFBRSxTQUFTO0tBQ2hCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEdBQUc7UUFDZCxJQUFJLEVBQUUsU0FBUztLQUNoQjtJQUNELE9BQU8sRUFBRTtRQUNQLFNBQVMsRUFBRSxHQUFHO1FBQ2QsSUFBSSxFQUFFLFNBQVM7S0FDaEI7SUFDRCxNQUFNLEVBQUU7UUFDTixTQUFTLEVBQUUsR0FBRztRQUNkLElBQUksRUFBRSxRQUFRO0tBQ2Y7SUFDRCxPQUFPLEVBQUU7UUFDUCxTQUFTLEVBQUUsR0FBRztRQUNkLElBQUksRUFBRSxRQUFRO0tBQ2Y7SUFDRCxZQUFZLEVBQUU7UUFDWixTQUFTLEVBQUUsR0FBRztRQUNkLElBQUksRUFBRSxTQUFTO0tBQ2hCO0lBQ0QsWUFBWSxFQUFFO1FBQ1osU0FBUyxFQUFFLEdBQUc7UUFDZCxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsU0FBUyxFQUFFLEdBQUc7UUFDZCxJQUFJLEVBQUUsUUFBUTtLQUNmO0NBQ08sQ0FBQTtBQUVWLE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUM5QixTQUFnQyxFQUNoQyxLQUFZO0lBRVosSUFBSSxFQUNGLE1BQU0sRUFDTixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sRUFDUCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sRUFDTixPQUFPLEVBQ1IsR0FBRyxLQUFLLENBQUE7SUFFVCxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTFCLElBQUksTUFBTSxFQUFFO1FBQ1YsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtLQUM3QjtJQUVELElBQUksTUFBTSxFQUFFO1FBQ1YsTUFBTSxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFXLENBQUE7UUFFMUQsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ25DO1FBRUQsSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDakQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDckU7UUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDdkM7S0FDRjtJQUVELElBQUksT0FBTyxFQUFFO1FBQ1gsTUFBTSxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFakQsSUFBSSxhQUFhLEVBQUU7WUFDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUNqQztLQUNGO0lBRUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQWdDLENBQUMsQ0FBQTtJQUU5RCxJQUFJLE9BQU8sRUFBRTtRQUNYLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7S0FDM0I7SUFFRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFnQyxDQUFDLENBQUE7SUFFdEUsSUFBSSxXQUFXLEVBQUU7UUFDZixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQzVCO0lBRUQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsS0FBZ0MsQ0FBQyxDQUFBO0lBRTVFLElBQUksY0FBYyxFQUFFO1FBQ2xCLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7S0FDbEM7SUFFRCxJQUFJLE9BQU8sRUFBRTtRQUNYLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDaEIsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDMUMsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTztnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzFDLENBQUM7U0FDRixDQUFDLENBQUE7S0FDSDtJQUVELE9BQU8sS0FBSyxNQUFNLENBQUE7SUFFbEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLE9BQU8sQ0FBQTtJQUM5QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBRWxCLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRSxZQUFZLEtBQUssQ0FBQyxFQUFFO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pELE1BQU0sS0FBSyxHQUFHLGNBQWM7WUFDMUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFBO1FBRU4sSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLEVBQUU7WUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sbUJBQW1CLENBQUMsQ0FBQTtTQUM1QztRQUVELElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFO2dCQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2FBQ3hCO2lCQUFNO2dCQUNMLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtnQkFFakIsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFO29CQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2lCQUNuQjtnQkFFRCxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxLQUFLLEVBQUU7b0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7aUJBQ25CO2dCQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDckI7U0FDRjthQUNDLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtTQUMvQjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDL0I7S0FDSjtTQUFNO1FBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtLQUN4QjtJQUVELE1BQU0sTUFBTSxHQUFHLENBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTTtRQUNoQixDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFO1lBQzNCLEtBQUssRUFBRSxRQUFRLElBQUksT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO1NBQy9DLENBQUM7UUFDRixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDSixDQUFBO0lBRWhCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQzVCLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtZQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ3BCO0tBQ0Y7QUFDSCxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import meow from 'meow';
3
+ import { ConventionalChangelog } from '../index.js';
4
+ import { flags, runProgram } from './cli.js';
5
+ const cli = meow(`
6
+ Usage
7
+ conventional-changelog
8
+
9
+ Example
10
+ conventional-changelog -i changelog -o CHANGELOG.md
11
+
12
+ Options
13
+ -i, --infile Read the CHANGELOG from this file (default: CHANGELOG.md)
14
+ -o, --outfile Write the CHANGELOG to this file (default: infile)
15
+ --stdout Output the result to stdout
16
+ -p, --preset Name of the preset you want to use
17
+ -k, --pkg A filepath of where your package.json is located (default: closest package.json)
18
+ -a, --append Should the newer release be appended to the older release (default: false)
19
+ -f, --first-release Generate the CHANGELOG for the first time
20
+ -r, --release-count How many releases to be generated from the latest (default: 1)
21
+ If 0, the whole changelog will be regenerated and the outfile will be overwritten
22
+ --skip-unstable If given, unstable tags will be skipped, e.g., x.x.x-alpha.1, x.x.x-rc.2
23
+ -u, --output-unreleased Output unreleased changelog
24
+ -v, --verbose Verbose output. Use this for debugging (default: false)
25
+ -n, --config A filepath of your config script
26
+ -c, --context A filepath of a json that is used to define template variables
27
+ -l, --lerna-package Generate a changelog for a specific lerna package (:pkg-name@1.0.0)
28
+ -t, --tag-prefix Tag prefix to consider when reading the tags
29
+ --commit-path Generate a changelog scoped to a specific directory
30
+ `, {
31
+ importMeta: import.meta,
32
+ booleanDefault: undefined,
33
+ flags
34
+ });
35
+ await runProgram(new ConventionalChangelog(process.cwd()), cli.flags);
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ25ELE9BQU8sRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNYLE1BQU0sVUFBVSxDQUFBO0FBRWpCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlCaEIsRUFBRTtJQUNELFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSTtJQUN2QixjQUFjLEVBQUUsU0FBUztJQUN6QixLQUFLO0NBQ04sQ0FBQyxDQUFBO0FBRUYsTUFBTSxVQUFVLENBQ2QsSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFDeEMsR0FBRyxDQUFDLEtBQUssQ0FDVixDQUFBIn0=
@@ -0,0 +1,6 @@
1
+ import type { GetCommitsParams, GetSemverTagsParams } from '@conventional-changelog/git-client';
2
+ import type { Options } from '../types.js';
3
+ export declare function parseOptions(options: Record<string, unknown>): Options | null;
4
+ export declare function parseTagsOptions(options: Record<string, unknown>): GetSemverTagsParams | null;
5
+ export declare function parseCommitsOptions(options: Record<string, unknown>): GetCommitsParams | null;
6
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,CAuB7E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAoB7F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAY7F"}
@@ -0,0 +1,47 @@
1
+ import { packagePrefix } from '@conventional-changelog/git-client';
2
+ export function parseOptions(options) {
3
+ const result = {};
4
+ if (typeof options.append === 'boolean') {
5
+ result.append = options.append;
6
+ }
7
+ if (options.firstRelease === true) {
8
+ result.releaseCount = 0;
9
+ }
10
+ else if (typeof options.releaseCount === 'number') {
11
+ result.releaseCount = options.releaseCount;
12
+ }
13
+ if (typeof options.outputUnreleased === 'boolean') {
14
+ result.outputUnreleased = options.outputUnreleased;
15
+ }
16
+ if (!Object.keys(result).length) {
17
+ return null;
18
+ }
19
+ return result;
20
+ }
21
+ export function parseTagsOptions(options) {
22
+ const result = {};
23
+ if (typeof options.tagPrefix === 'string') {
24
+ result.prefix = options.tagPrefix;
25
+ }
26
+ if (typeof options.lernaPackage === 'string') {
27
+ result.prefix = packagePrefix(options.lernaPackage);
28
+ }
29
+ if (options.skipUnstable) {
30
+ result.skipUnstable = true;
31
+ }
32
+ if (!Object.keys(result).length) {
33
+ return null;
34
+ }
35
+ return result;
36
+ }
37
+ export function parseCommitsOptions(options) {
38
+ const result = {};
39
+ if (typeof options.commitPath === 'string') {
40
+ result.path = options.commitPath;
41
+ }
42
+ if (!Object.keys(result).length) {
43
+ return null;
44
+ }
45
+ return result;
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFHbEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQztJQUMzRCxNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUE7SUFFMUIsSUFBSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQTtLQUMvQjtJQUVELElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7UUFDakMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUE7S0FDeEI7U0FDQyxJQUFJLE9BQU8sT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDNUMsTUFBTSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFBO0tBQzNDO0lBRUgsSUFBSSxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDakQsTUFBTSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQTtLQUNuRDtJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQTtLQUNaO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQWdDO0lBQy9ELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUE7SUFFdEMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO1FBQ3pDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQTtLQUNsQztJQUVELElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUM1QyxNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7S0FDcEQ7SUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7UUFDeEIsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7S0FDM0I7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFnQztJQUNsRSxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFBO0lBRW5DLElBQUksT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUE7S0FDakM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export declare function loadDataFile(filePath: string): Promise<object>;
2
+ export declare function isFileExists(filePath: string): Promise<boolean>;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAWA,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMrE"}
@@ -0,0 +1,25 @@
1
+ import { resolve, extname } from 'path';
2
+ import { pathToFileURL } from 'url';
3
+ import { readFile, stat } from 'fs/promises';
4
+ function relativeResolve(filePath) {
5
+ return pathToFileURL(resolve(process.cwd(), filePath));
6
+ }
7
+ export async function loadDataFile(filePath) {
8
+ const resolvedFilePath = relativeResolve(filePath);
9
+ const ext = extname(resolvedFilePath.toString());
10
+ if (ext === '.json') {
11
+ return JSON.parse(await readFile(resolvedFilePath, 'utf8'));
12
+ }
13
+ // @ts-expect-error Dynamic import actually works with file URLs
14
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
15
+ return (await import(resolvedFilePath)).default;
16
+ }
17
+ export async function isFileExists(filePath) {
18
+ try {
19
+ return (await stat(filePath)).isFile();
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDbkMsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxhQUFhLENBQUE7QUFFcEIsU0FBUyxlQUFlLENBQUMsUUFBZ0I7SUFDdkMsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3hELENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxRQUFnQjtJQUNqRCxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUVoRCxJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUU7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFXLENBQUE7S0FDdEU7SUFFRCxnRUFBZ0U7SUFDaEUsc0VBQXNFO0lBQ3RFLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsT0FBaUIsQ0FBQTtBQUMzRCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsUUFBZ0I7SUFDakQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0tBQ3ZDO0lBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSyxDQUFBO0tBQ2I7QUFDSCxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ import type { HostedGitInfo } from './types.js';
2
+ export declare function parseHostedGitUrl(input: string): HostedGitInfo | null;
3
+ //# sourceMappingURL=hostedGitInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostedGitInfo.d.ts","sourceRoot":"","sources":["../src/hostedGitInfo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,YAAY,CAAA;AA6DnB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAuFrE"}
@@ -0,0 +1,118 @@
1
+ function getType(domain) {
2
+ if (domain.includes('github')) {
3
+ return 'github';
4
+ }
5
+ if (domain.includes('gitlab')) {
6
+ return 'gitlab';
7
+ }
8
+ if (domain.includes('bitbucket')) {
9
+ return 'bitbucket';
10
+ }
11
+ if (domain.includes('git.sr.ht')) {
12
+ return 'sourcehut';
13
+ }
14
+ return '';
15
+ }
16
+ function getHost(type) {
17
+ switch (type) {
18
+ case 'github':
19
+ return 'https://github.com';
20
+ case 'gitlab':
21
+ return 'https://gitlab.com';
22
+ case 'bitbucket':
23
+ return 'https://bitbucket.org';
24
+ case 'sourcehut':
25
+ return 'https://git.sr.ht';
26
+ default:
27
+ return '';
28
+ }
29
+ }
30
+ function getRepositoryUrl(type, host, owner, project, branch) {
31
+ if (!host) {
32
+ return '';
33
+ }
34
+ let treepath = '';
35
+ if (branch) {
36
+ if (type === 'bitbucket') {
37
+ treepath = `/src/${encodeURIComponent(branch)}`;
38
+ }
39
+ else {
40
+ treepath = `/tree/${encodeURIComponent(branch)}`;
41
+ }
42
+ }
43
+ return `${host}/${owner}/${project}${treepath}`;
44
+ }
45
+ export function parseHostedGitUrl(input) {
46
+ // github edge case with branch in the url
47
+ let matches = input.match(/^(?:https:\/\/)?github\.com\/([^/]+)\/([^/.#]+)(?:\/tree\/[^/]+)?$/);
48
+ if (matches) {
49
+ return {
50
+ url: input,
51
+ type: 'github',
52
+ host: 'https://github.com',
53
+ owner: matches[1],
54
+ project: matches[2]
55
+ };
56
+ }
57
+ let type;
58
+ let host;
59
+ let owner;
60
+ let project;
61
+ // git+ssh and ssh urls
62
+ matches = input.match(/^(?:(?:git\+)?ssh:\/\/(?:[^@]+@)?|[^@]+@)(?:www\.)?([^@:]+):([^/]+(?:\/[^/]+)?)\/([^/.#]+)(?:\.git)?(?:#(.+))?/);
63
+ if (matches) {
64
+ type = getType(matches[1]);
65
+ host = `https://${matches[1]}`;
66
+ owner = matches[2];
67
+ project = matches[3];
68
+ return {
69
+ url: getRepositoryUrl(type, host, owner, project, matches[4]),
70
+ type,
71
+ host,
72
+ owner,
73
+ project
74
+ };
75
+ }
76
+ // git+https and https urls
77
+ matches = input.match(/^(?:(?:git\+)?https|git):\/\/(?:[^@]+@)?(?:www\.)?([^@/]+)\/([^/]+(?:\/[^/]+)?)\/([^/.#]+)(?:\.git)?(?:#(.+))?/);
78
+ if (matches) {
79
+ type = getType(matches[1]);
80
+ host = `http${type || input.includes('https://') ? 's' : ''}://${matches[1]}`;
81
+ owner = matches[2];
82
+ project = matches[3];
83
+ return {
84
+ url: getRepositoryUrl(type, host, owner, project, matches[4]),
85
+ type,
86
+ host,
87
+ owner,
88
+ project
89
+ };
90
+ }
91
+ // shortcuts
92
+ matches = input.match(/^(?:([^@:]+):)?(?:[^@:]+@|[^@:]*:[^@:]+@)?([^/#]+(?:\/[^/]+)?)\/([^/.#]+)(?:\.git)?(?:#(.+))?/);
93
+ if (matches) {
94
+ type = matches[1] || 'github';
95
+ host = getHost(type);
96
+ owner = matches[2];
97
+ project = matches[3];
98
+ return {
99
+ url: getRepositoryUrl(type, host, owner, project, matches[4]),
100
+ type,
101
+ host,
102
+ owner,
103
+ project
104
+ };
105
+ }
106
+ matches = input.match(/^\w+:\/\/([^/]+)(\/[^#]+)?/);
107
+ if (matches) {
108
+ type = getType(matches[1]);
109
+ host = `http${type || input.includes('https://') ? 's' : ''}://${matches[1]}`;
110
+ return {
111
+ url: `${host}${matches[2]?.replace(/\/?\.git.*/, '') || ''}`,
112
+ type,
113
+ host
114
+ };
115
+ }
116
+ return null;
117
+ }
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkR2l0SW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ob3N0ZWRHaXRJbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLFNBQVMsT0FBTyxDQUFDLE1BQWM7SUFDN0IsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzdCLE9BQU8sUUFBUSxDQUFBO0tBQ2hCO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzdCLE9BQU8sUUFBUSxDQUFBO0tBQ2hCO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sV0FBVyxDQUFBO0tBQ25CO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sV0FBVyxDQUFBO0tBQ25CO0lBRUQsT0FBTyxFQUFFLENBQUE7QUFDWCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixRQUFRLElBQUksRUFBRTtRQUNaLEtBQUssUUFBUTtZQUNYLE9BQU8sb0JBQW9CLENBQUE7UUFDN0IsS0FBSyxRQUFRO1lBQ1gsT0FBTyxvQkFBb0IsQ0FBQTtRQUM3QixLQUFLLFdBQVc7WUFDZCxPQUFPLHVCQUF1QixDQUFBO1FBQ2hDLEtBQUssV0FBVztZQUNkLE9BQU8sbUJBQW1CLENBQUE7UUFDNUI7WUFDRSxPQUFPLEVBQUUsQ0FBQTtLQUNaO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLElBQWMsRUFDZCxJQUFZLEVBQ1osS0FBYSxFQUNiLE9BQWUsRUFDZixNQUFjO0lBRWQsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE9BQU8sRUFBRSxDQUFBO0tBQ1Y7SUFFRCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFFakIsSUFBSSxNQUFNLEVBQUU7UUFDVixJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7WUFD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