@vitejs/release-scripts 1.6.0 → 1.7.1

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/README.md CHANGED
@@ -12,15 +12,10 @@ release({
12
12
  repo: "release-scripts",
13
13
  // List of options. Choice will be available in following callback as `pkg`
14
14
  packages: ["release-scripts"],
15
- toTag: (pkg, version) =>
16
- pkg === "vite" ? `v${version}` : `${pkg}@${version}`,
15
+ toTag: (pkg, version) => (pkg === "vite" ? `v${version}` : `${pkg}@${version}`),
17
16
  // Not shared until we find a new changelog process
18
17
  logChangelog: (pkg) =>
19
- console.log(
20
- execSync(
21
- "git log $(git describe --tags --abbrev=0)..HEAD --oneline",
22
- ).toString(),
23
- ),
18
+ console.log(execSync("git log $(git describe --tags --abbrev=0)..HEAD --oneline").toString()),
24
19
  generateChangelog: (pkg, version) => {},
25
20
  // Use getPkgDir when not using a monorepo. Default to `packages/${pkg}`
26
21
  getPkgDir: (pkg) => ".",
package/dist/index.d.ts CHANGED
@@ -21,6 +21,8 @@ export declare function publish(options: {
21
21
  }): Promise<void>;
22
22
 
23
23
  export declare function release(options: {
24
+ /** @default 'vitejs' */
25
+ org?: string;
24
26
  repo: string;
25
27
  packages: string[];
26
28
  logChangelog: (pkg: string) => void | Promise<void>;
package/dist/index.js CHANGED
@@ -1,282 +1,243 @@
1
- // src/publish.ts
2
- import semver2 from "semver";
3
-
4
- // src/utils.ts
5
- import { writeFileSync, readFileSync } from "node:fs";
1
+ import * as semver$1 from "semver";
2
+ import semver from "semver";
3
+ import fs, { readFileSync, writeFileSync } from "node:fs";
6
4
  import path from "node:path";
7
5
  import colors from "picocolors";
8
- import { execa } from "execa";
9
- import semver from "semver";
6
+ import { exec } from "tinyexec";
10
7
  import mri from "mri";
11
- var args = mri(process.argv.slice(2));
12
- var isDryRun = !!args.dry;
8
+ import prompts from "prompts";
9
+ import { publint } from "publint";
10
+ import { formatMessage } from "publint/utils";
11
+ import { ConventionalChangelog } from "conventional-changelog";
12
+ import createPreset, { DEFAULT_COMMIT_TYPES } from "conventional-changelog-conventionalcommits";
13
+ //#region src/utils.ts
14
+ const args = mri(process.argv.slice(2));
15
+ const isDryRun = !!args.dry;
13
16
  if (isDryRun) {
14
- console.log(colors.inverse(colors.yellow(" DRY RUN ")));
15
- console.log();
17
+ console.log(colors.inverse(colors.yellow(" DRY RUN ")));
18
+ console.log();
16
19
  }
17
20
  function getPackageInfo(pkgName, getPkgDir = (pkg) => `packages/${pkg}`) {
18
- const pkgDir = path.resolve(getPkgDir(pkgName));
19
- const pkgPath = path.resolve(pkgDir, "package.json");
20
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
21
- if (pkg.private) {
22
- throw new Error(`Package ${pkgName} is private`);
23
- }
24
- return { pkg, pkgDir, pkgPath };
21
+ const pkgDir = path.resolve(getPkgDir(pkgName));
22
+ const pkgPath = path.resolve(pkgDir, "package.json");
23
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
24
+ if (pkg.private) throw new Error(`Package ${pkgName} is private`);
25
+ return {
26
+ pkg,
27
+ pkgDir,
28
+ pkgPath
29
+ };
25
30
  }
26
- async function run(bin, args2, opts = {}) {
27
- return execa(bin, args2, { stdio: "inherit", ...opts });
31
+ async function run(bin, args, opts = {}) {
32
+ return exec(bin, args, {
33
+ throwOnError: true,
34
+ ...opts,
35
+ nodeOptions: {
36
+ stdio: "inherit",
37
+ ...opts.nodeOptions
38
+ }
39
+ });
28
40
  }
29
- async function dryRun(bin, args2, opts) {
30
- return console.log(
31
- colors.blue(`[dryrun] ${bin} ${args2.join(" ")}`),
32
- opts || ""
33
- );
41
+ async function dryRun(bin, args, opts) {
42
+ return console.log(colors.blue(`[dryrun] ${bin} ${args.join(" ")}`), opts || "");
34
43
  }
35
- var runIfNotDry = isDryRun ? dryRun : run;
44
+ const runIfNotDry = isDryRun ? dryRun : run;
36
45
  function step(msg) {
37
- return console.log(colors.cyan(msg));
46
+ return console.log(colors.cyan(msg));
38
47
  }
39
48
  function getVersionChoices(currentVersion) {
40
- const currentBeta = currentVersion.includes("beta");
41
- const currentAlpha = currentVersion.includes("alpha");
42
- const isStable = !currentBeta && !currentAlpha;
43
- function inc(i, tag = currentAlpha ? "alpha" : "beta") {
44
- return semver.inc(currentVersion, i, tag);
45
- }
46
- let versionChoices = [
47
- {
48
- title: "next",
49
- value: inc(isStable ? "patch" : "prerelease")
50
- }
51
- ];
52
- if (isStable) {
53
- versionChoices.push(
54
- {
55
- title: "beta-minor",
56
- value: inc("preminor")
57
- },
58
- {
59
- title: "beta-major",
60
- value: inc("premajor")
61
- },
62
- {
63
- title: "alpha-minor",
64
- value: inc("preminor", "alpha")
65
- },
66
- {
67
- title: "alpha-major",
68
- value: inc("premajor", "alpha")
69
- },
70
- {
71
- title: "minor",
72
- value: inc("minor")
73
- },
74
- {
75
- title: "major",
76
- value: inc("major")
77
- }
78
- );
79
- } else if (currentAlpha) {
80
- versionChoices.push({
81
- title: "beta",
82
- value: inc("patch") + "-beta.0"
83
- });
84
- } else {
85
- versionChoices.push({
86
- title: "stable",
87
- value: inc("patch")
88
- });
89
- }
90
- versionChoices.push({ value: "custom", title: "custom" });
91
- versionChoices = versionChoices.map((i) => {
92
- i.title = `${i.title} (${i.value})`;
93
- return i;
94
- });
95
- return versionChoices;
49
+ const currentBeta = currentVersion.includes("beta");
50
+ const currentAlpha = currentVersion.includes("alpha");
51
+ const isStable = !currentBeta && !currentAlpha;
52
+ function inc(i, tag = currentAlpha ? "alpha" : "beta") {
53
+ return semver$1.inc(currentVersion, i, tag);
54
+ }
55
+ let versionChoices = [{
56
+ title: "next",
57
+ value: inc(isStable ? "patch" : "prerelease")
58
+ }];
59
+ if (isStable) versionChoices.push({
60
+ title: "beta-minor",
61
+ value: inc("preminor")
62
+ }, {
63
+ title: "beta-major",
64
+ value: inc("premajor")
65
+ }, {
66
+ title: "alpha-minor",
67
+ value: inc("preminor", "alpha")
68
+ }, {
69
+ title: "alpha-major",
70
+ value: inc("premajor", "alpha")
71
+ }, {
72
+ title: "minor",
73
+ value: inc("minor")
74
+ }, {
75
+ title: "major",
76
+ value: inc("major")
77
+ });
78
+ else if (currentAlpha) versionChoices.push({
79
+ title: "beta",
80
+ value: inc("patch") + "-beta.0"
81
+ });
82
+ else versionChoices.push({
83
+ title: "stable",
84
+ value: inc("patch")
85
+ });
86
+ versionChoices.push({
87
+ value: "custom",
88
+ title: "custom"
89
+ });
90
+ versionChoices = versionChoices.map((i) => {
91
+ i.title = `${i.title} (${i.value})`;
92
+ return i;
93
+ });
94
+ return versionChoices;
96
95
  }
97
96
  function updateVersion(pkgPath, version) {
98
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
99
- pkg.version = version;
100
- writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
97
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
98
+ pkg.version = version;
99
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
101
100
  }
102
101
  async function publishPackage(pkgDir, tag, provenance, packageManager = "npm") {
103
- const publicArgs = ["publish", "--access", "public"];
104
- if (tag) {
105
- publicArgs.push(`--tag`, tag);
106
- }
107
- if (provenance) {
108
- publicArgs.push(`--provenance`);
109
- }
110
- if (packageManager === "pnpm") {
111
- publicArgs.push(`--no-git-checks`);
112
- }
113
- await runIfNotDry(packageManager, publicArgs, {
114
- cwd: pkgDir
115
- });
102
+ const publicArgs = [
103
+ "publish",
104
+ "--access",
105
+ "public"
106
+ ];
107
+ if (tag) publicArgs.push(`--tag`, tag);
108
+ if (provenance) publicArgs.push(`--provenance`);
109
+ if (packageManager === "pnpm") publicArgs.push(`--no-git-checks`);
110
+ await runIfNotDry(packageManager, publicArgs, { nodeOptions: { cwd: pkgDir } });
116
111
  }
117
112
  async function getActiveVersion(npmName) {
118
- try {
119
- const { stdout } = await run(
120
- "npm",
121
- ["info", npmName, "version", "--json"],
122
- { stdio: "pipe" }
123
- );
124
- return JSON.parse(stdout);
125
- } catch (e) {
126
- if (e.stdout) {
127
- const stdout = JSON.parse(e.stdout);
128
- if (stdout.error.code === "E404") {
129
- return;
130
- }
131
- }
132
- throw e;
133
- }
113
+ try {
114
+ const { stdout } = await run("npm", [
115
+ "info",
116
+ npmName,
117
+ "version",
118
+ "--json"
119
+ ], { nodeOptions: { stdio: "pipe" } });
120
+ return JSON.parse(stdout);
121
+ } catch (e) {
122
+ if (e.stdout) {
123
+ if (JSON.parse(e.stdout).error.code === "E404") return;
124
+ }
125
+ throw e;
126
+ }
134
127
  }
135
-
136
- // src/publish.ts
137
- var publish = async ({
138
- defaultPackage,
139
- getPkgDir,
140
- provenance,
141
- packageManager
142
- }) => {
143
- const tag = args._[0];
144
- if (!tag) throw new Error("No tag specified");
145
- let pkgName = defaultPackage;
146
- let version;
147
- if (tag.includes("@")) [pkgName, version] = tag.split("@");
148
- else version = tag;
149
- if (version.startsWith("v")) version = version.slice(1);
150
- if (pkgName === void 0)
151
- throw new Error(
152
- `Package name should be specified in tag "${tag}" when defaultPackage is not set`
153
- );
154
- const { pkg, pkgDir } = getPackageInfo(pkgName, getPkgDir);
155
- if (pkg.version !== version)
156
- throw new Error(
157
- `Package version from tag "${version}" mismatches with current version "${pkg.version}"`
158
- );
159
- const activeVersion = await getActiveVersion(pkg.name);
160
- step("Publishing package...");
161
- const releaseTag = version.includes("beta") ? "beta" : version.includes("alpha") ? "alpha" : activeVersion && semver2.lt(pkg.version, activeVersion) ? "previous" : void 0;
162
- await publishPackage(pkgDir, releaseTag, provenance, packageManager);
128
+ //#endregion
129
+ //#region src/publish.ts
130
+ const publish = async ({ defaultPackage, getPkgDir, provenance, packageManager }) => {
131
+ const tag = args._[0];
132
+ if (!tag) throw new Error("No tag specified");
133
+ let pkgName = defaultPackage;
134
+ let version;
135
+ if (tag.includes("@")) [pkgName, version] = tag.split("@");
136
+ else version = tag;
137
+ if (version.startsWith("v")) version = version.slice(1);
138
+ if (pkgName === void 0) throw new Error(`Package name should be specified in tag "${tag}" when defaultPackage is not set`);
139
+ const { pkg, pkgDir } = getPackageInfo(pkgName, getPkgDir);
140
+ if (pkg.version !== version) throw new Error(`Package version from tag "${version}" mismatches with current version "${pkg.version}"`);
141
+ const activeVersion = await getActiveVersion(pkg.name);
142
+ step("Publishing package...");
143
+ await publishPackage(pkgDir, version.includes("beta") ? "beta" : version.includes("alpha") ? "alpha" : activeVersion && semver$1.lt(pkg.version, activeVersion) ? "previous" : void 0, provenance, packageManager);
163
144
  };
164
-
165
- // src/release.ts
166
- import prompts from "prompts";
167
- import semver3 from "semver";
168
- import colors2 from "picocolors";
169
- import { publint } from "publint";
170
- import { formatMessage } from "publint/utils";
171
- var release = async ({
172
- repo,
173
- packages,
174
- logChangelog,
175
- generateChangelog: generateChangelog2,
176
- toTag,
177
- getPkgDir
178
- }) => {
179
- let targetVersion;
180
- const selectedPkg = packages.length === 1 ? packages[0] : (await prompts({
181
- type: "select",
182
- name: "pkg",
183
- message: "Select package",
184
- choices: packages.map((i) => ({ value: i, title: i }))
185
- })).pkg;
186
- if (!selectedPkg) return;
187
- await logChangelog(selectedPkg);
188
- const { pkg, pkgPath, pkgDir } = getPackageInfo(selectedPkg, getPkgDir);
189
- const { messages } = await publint({ pkgDir });
190
- if (messages.length) {
191
- for (const message of messages) console.log(formatMessage(message, pkg));
192
- const { yes: yes2 } = await prompts({
193
- type: "confirm",
194
- name: "yes",
195
- message: `${messages.length} messages from publint. Continue anyway?`
196
- });
197
- if (!yes2) process.exit(1);
198
- }
199
- if (!targetVersion) {
200
- const { release: release2 } = await prompts({
201
- type: "select",
202
- name: "release",
203
- message: "Select release type",
204
- choices: getVersionChoices(pkg.version)
205
- });
206
- if (release2 === "custom") {
207
- const res = await prompts({
208
- type: "text",
209
- name: "version",
210
- message: "Input custom version",
211
- initial: pkg.version
212
- });
213
- targetVersion = res.version;
214
- } else {
215
- targetVersion = release2;
216
- }
217
- }
218
- if (!semver3.valid(targetVersion)) {
219
- throw new Error(`invalid target version: ${targetVersion}`);
220
- }
221
- const tag = toTag(selectedPkg, targetVersion);
222
- if (targetVersion.includes("beta") && !args.tag) {
223
- args.tag = "beta";
224
- }
225
- if (targetVersion.includes("alpha") && !args.tag) {
226
- args.tag = "alpha";
227
- }
228
- const { yes } = await prompts({
229
- type: "confirm",
230
- name: "yes",
231
- message: `Releasing ${colors2.yellow(tag)} Confirm?`
232
- });
233
- if (!yes) return;
234
- step("\nUpdating package version...");
235
- updateVersion(pkgPath, targetVersion);
236
- await generateChangelog2(selectedPkg, targetVersion);
237
- const { stdout } = await run("git", ["diff"], { stdio: "pipe" });
238
- if (stdout) {
239
- step("\nCommitting changes...");
240
- await runIfNotDry("git", ["add", "-A"]);
241
- await runIfNotDry("git", ["commit", "-m", `release: ${tag}`]);
242
- await runIfNotDry("git", ["tag", "-a", "-m", tag, tag]);
243
- } else {
244
- console.log("No changes to commit.");
245
- return;
246
- }
247
- step("\nPushing to GitHub...");
248
- await runIfNotDry("git", ["push", "origin", `refs/tags/${tag}`]);
249
- await runIfNotDry("git", ["push"]);
250
- if (isDryRun) {
251
- console.log(`
252
- Dry run finished - run git diff to see package changes.`);
253
- } else {
254
- console.log(
255
- colors2.green(
256
- `
145
+ //#endregion
146
+ //#region src/release.ts
147
+ const release = async ({ org = "vitejs", repo, packages, logChangelog, generateChangelog, toTag, getPkgDir }) => {
148
+ let targetVersion;
149
+ const selectedPkg = packages.length === 1 ? packages[0] : (await prompts({
150
+ type: "select",
151
+ name: "pkg",
152
+ message: "Select package",
153
+ choices: packages.map((i) => ({
154
+ value: i,
155
+ title: i
156
+ }))
157
+ })).pkg;
158
+ if (!selectedPkg) return;
159
+ await logChangelog(selectedPkg);
160
+ const { pkg, pkgPath, pkgDir } = getPackageInfo(selectedPkg, getPkgDir);
161
+ const { messages } = await publint({ pkgDir });
162
+ if (messages.length) {
163
+ for (const message of messages) console.log(formatMessage(message, pkg));
164
+ const { yes } = await prompts({
165
+ type: "confirm",
166
+ name: "yes",
167
+ message: `${messages.length} messages from publint. Continue anyway?`
168
+ });
169
+ if (!yes) process.exit(1);
170
+ }
171
+ if (!targetVersion) {
172
+ const { release } = await prompts({
173
+ type: "select",
174
+ name: "release",
175
+ message: "Select release type",
176
+ choices: getVersionChoices(pkg.version)
177
+ });
178
+ if (release === "custom") targetVersion = (await prompts({
179
+ type: "text",
180
+ name: "version",
181
+ message: "Input custom version",
182
+ initial: pkg.version
183
+ })).version;
184
+ else targetVersion = release;
185
+ }
186
+ if (!semver.valid(targetVersion)) throw new Error(`invalid target version: ${targetVersion}`);
187
+ const tag = toTag(selectedPkg, targetVersion);
188
+ if (targetVersion.includes("beta") && !args.tag) args.tag = "beta";
189
+ if (targetVersion.includes("alpha") && !args.tag) args.tag = "alpha";
190
+ const { yes } = await prompts({
191
+ type: "confirm",
192
+ name: "yes",
193
+ message: `Releasing ${colors.yellow(tag)} Confirm?`
194
+ });
195
+ if (!yes) return;
196
+ step("\nUpdating package version...");
197
+ updateVersion(pkgPath, targetVersion);
198
+ await generateChangelog(selectedPkg, targetVersion);
199
+ const { stdout } = await run("git", ["diff"], { nodeOptions: { stdio: "pipe" } });
200
+ if (stdout) {
201
+ step("\nCommitting changes...");
202
+ await runIfNotDry("git", ["add", "-A"]);
203
+ await runIfNotDry("git", [
204
+ "commit",
205
+ "-m",
206
+ `release: ${tag}`
207
+ ]);
208
+ await runIfNotDry("git", [
209
+ "tag",
210
+ "-a",
211
+ "-m",
212
+ tag,
213
+ tag
214
+ ]);
215
+ } else {
216
+ console.log("No changes to commit.");
217
+ return;
218
+ }
219
+ step("\nPushing to GitHub...");
220
+ await runIfNotDry("git", [
221
+ "push",
222
+ "origin",
223
+ `refs/tags/${tag}`
224
+ ]);
225
+ await runIfNotDry("git", ["push"]);
226
+ if (isDryRun) console.log(`\nDry run finished - run git diff to see package changes.`);
227
+ else console.log(colors.green(`
257
228
  Pushed, publishing should starts shortly on CI.
258
- https://github.com/vitejs/${repo}/actions/workflows/publish.yml`
259
- )
260
- );
261
- }
262
- console.log();
229
+ https://github.com/${org}/${repo}/actions/workflows/publish.yml`));
230
+ console.log();
263
231
  };
264
-
265
- // src/changelog.ts
266
- import fs from "node:fs";
267
- import { ConventionalChangelog } from "conventional-changelog";
268
- import createPreset, {
269
- DEFAULT_COMMIT_TYPES
270
- } from "conventional-changelog-conventionalcommits";
271
- var generateChangelog = async ({
272
- getPkgDir,
273
- tagPrefix
274
- }) => {
275
- const preset = await createPreset({
276
- types: DEFAULT_COMMIT_TYPES.map((t) => ({ ...t, hidden: false }))
277
- });
278
- preset.writer ??= {};
279
- preset.writer.headerPartial = `
232
+ //#endregion
233
+ //#region src/changelog.ts
234
+ const generateChangelog = async ({ getPkgDir, tagPrefix }) => {
235
+ const preset = await createPreset({ types: DEFAULT_COMMIT_TYPES.map((t) => ({
236
+ ...t,
237
+ hidden: false
238
+ })) });
239
+ preset.writer ??= {};
240
+ preset.writer.headerPartial = `
280
241
  ## {{#if isPatch~}} <small> {{~/if~}}
281
242
  {{#if @root.linkCompare~}}
282
243
  [{{version}}](
@@ -301,21 +262,36 @@ var generateChangelog = async ({
301
262
  {{~/if}}
302
263
  {{~#if isPatch~}} </small> {{~/if}}
303
264
  `.trim();
304
- preset.writer.mainTemplate += "\n";
305
- const pkgDir = getPkgDir();
306
- const generator = new ConventionalChangelog().readPackage(`${pkgDir}/package.json`).config(preset).options({ releaseCount: 1 }).commits({ path: pkgDir });
307
- if (tagPrefix) {
308
- generator.tags({ prefix: tagPrefix });
309
- }
310
- const originalChangelog = fs.readFileSync(`${pkgDir}/CHANGELOG.md`, "utf-8");
311
- const writeStream = fs.createWriteStream(`${pkgDir}/CHANGELOG.md`);
312
- for await (const chunk of generator.write()) {
313
- writeStream.write(chunk);
314
- }
315
- writeStream.write(originalChangelog);
316
- };
317
- export {
318
- generateChangelog,
319
- publish,
320
- release
265
+ preset.writer.mainTemplate = `
266
+ {{> header}}
267
+ {{#if noteGroups}}
268
+ {{#each noteGroups}}
269
+
270
+ ### ⚠ {{title}}
271
+
272
+ {{#each notes}}
273
+ * {{#if commit.scope}}**{{commit.scope}}:** {{/if}}{{commit.subject}} {{#if commit.hash}}([{{commit.shortHash}}](https://github.com/{{@root.owner}}/{{@root.repository}}/commit/{{commit.hash}})){{/if}}
274
+ {{/each}}
275
+ {{/each}}
276
+ {{/if}}
277
+ {{#each commitGroups}}
278
+
279
+ {{#if title}}
280
+ ### {{title}}
281
+
282
+ {{/if}}
283
+ {{#each commits}}
284
+ {{> commit root=@root}}
285
+ {{/each}}
286
+ {{/each}}`.trim() + "\n";
287
+ const pkgDir = getPkgDir();
288
+ const generator = new ConventionalChangelog(pkgDir).readPackage().config(preset).options({ releaseCount: 1 }).commits({ path: "." });
289
+ if (tagPrefix) generator.tags({ prefix: tagPrefix });
290
+ const originalChangelog = fs.existsSync(path.join(pkgDir, "CHANGELOG.md")) ? fs.readFileSync(path.join(pkgDir, "CHANGELOG.md"), "utf-8") : "";
291
+ const writeStream = fs.createWriteStream(path.join(pkgDir, "CHANGELOG.md"));
292
+ for await (const chunk of generator.write()) writeStream.write(chunk);
293
+ writeStream.write("\n");
294
+ writeStream.write(originalChangelog);
321
295
  };
296
+ //#endregion
297
+ export { generateChangelog, publish, release };
package/package.json CHANGED
@@ -1,48 +1,43 @@
1
1
  {
2
2
  "name": "@vitejs/release-scripts",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
4
4
  "description": "@vitejs release scripts",
5
5
  "license": "MIT",
6
- "main": "dist/index.js",
7
- "type": "module",
8
- "files": [
9
- "dist"
10
- ],
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js"
15
- }
16
- },
17
6
  "repository": {
18
7
  "type": "git",
19
8
  "url": "git+https://github.com/vitejs/release-scripts.git"
20
9
  },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "type": "module",
14
+ "exports": "./dist/index.js",
21
15
  "scripts": {
22
- "build": "tnode scripts/build.ts",
23
- "prettier": "pnpm prettier-ci --write",
24
- "prettier-ci": "prettier --cache --ignore-path=.gitignore --check '**/*.{ts,json,md,yml}'",
25
- "qa": "tsc && pnpm prettier-ci && pnpm build",
26
- "release": "tnode scripts/release.ts"
16
+ "build": "rolldown -c",
17
+ "test": "vitest",
18
+ "format": "oxfmt",
19
+ "qa": "tsc && pnpm format --check && pnpm build && vitest run",
20
+ "release": "node scripts/release.ts"
27
21
  },
28
22
  "dependencies": {
29
- "conventional-changelog": "^7.1.0",
30
- "conventional-changelog-conventionalcommits": "^9.0.0",
31
- "execa": "^8.0.1",
23
+ "conventional-changelog": "^7.2.0",
24
+ "conventional-changelog-conventionalcommits": "^9.3.1",
32
25
  "mri": "^1.2.0",
33
26
  "picocolors": "^1.1.1",
34
27
  "prompts": "^2.4.2",
35
- "publint": "^0.3.12",
36
- "semver": "^7.7.2"
28
+ "publint": "^0.3.20",
29
+ "semver": "^7.8.0",
30
+ "tinyexec": "^1.1.2"
37
31
  },
38
32
  "devDependencies": {
39
- "@arnaud-barre/tnode": "^0.25.0",
40
- "@types/node": "^22.15.33",
33
+ "@types/node": "^24.12.3",
41
34
  "@types/prompts": "^2.4.9",
42
- "@types/semver": "^7.7.0",
43
- "esbuild": "^0.25.0",
44
- "prettier": "^3.6.2",
45
- "typescript": "^5.8.3"
35
+ "@types/semver": "^7.7.1",
36
+ "fs-fixture": "^2.13.0",
37
+ "oxfmt": "^0.48.0",
38
+ "rolldown": "^1.0.0",
39
+ "typescript": "^6.0.3",
40
+ "vitest": "^4.1.5"
46
41
  },
47
- "packageManager": "pnpm@10.12.4"
42
+ "packageManager": "pnpm@10.33.4"
48
43
  }