|
1 | | -import latestSemver from 'latest-semver' |
2 | | -import * as fs from 'fs/promises' |
3 | | -import assert from 'assert' |
| 1 | +import PackageJson from '@npmcli/package-json' |
| 2 | +import assert from 'node:assert' |
| 3 | +import semver from 'semver' |
4 | 4 |
|
5 | | -async function bumpVersion() { |
6 | | - let res = await fetch( |
7 | | - 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery', |
8 | | - { |
9 | | - method: 'POST', |
10 | | - headers: { |
11 | | - accept: 'application/json;api-version=7.2-preview.1;excludeUrls=true', |
12 | | - 'content-type': 'application/json', |
| 5 | +let res = await fetch('https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery', { |
| 6 | + method: 'POST', |
| 7 | + headers: { |
| 8 | + accept: 'application/json;api-version=7.2-preview.1;excludeUrls=true', |
| 9 | + 'content-type': 'application/json', |
| 10 | + }, |
| 11 | + body: JSON.stringify({ |
| 12 | + assetTypes: null, |
| 13 | + flags: 2151, |
| 14 | + filters: [ |
| 15 | + { |
| 16 | + criteria: [{ filterType: 7, value: 'bradlc.vscode-tailwindcss' }], |
| 17 | + direction: 2, |
| 18 | + pageSize: 100, |
| 19 | + pageNumber: 1, |
| 20 | + sortBy: 0, |
| 21 | + sortOrder: 0, |
| 22 | + pagingToken: null, |
13 | 23 | }, |
14 | | - body: JSON.stringify({ |
15 | | - assetTypes: null, |
16 | | - flags: 2151, |
17 | | - filters: [ |
18 | | - { |
19 | | - criteria: [{ filterType: 7, value: 'bradlc.vscode-tailwindcss' }], |
20 | | - direction: 2, |
21 | | - pageSize: 100, |
22 | | - pageNumber: 1, |
23 | | - sortBy: 0, |
24 | | - sortOrder: 0, |
25 | | - pagingToken: null, |
26 | | - }, |
27 | | - ], |
28 | | - }), |
29 | | - } |
30 | | - ) |
31 | | - let { results } = await res.json() |
32 | | - let versions = results[0].extensions[0].versions.map(({ version }) => version) |
33 | | - let latest = latestSemver(versions) |
34 | | - let parts = latest.split('.') |
| 24 | + ], |
| 25 | + }), |
| 26 | +}) |
35 | 27 |
|
36 | | - assert(Number(parts[1]) % 2 === 1) |
| 28 | +let { results } = await res.json() |
37 | 29 |
|
38 | | - let nextVersion = `${parts[0]}.${parts[1]}.${Number(parts[2]) + 1}` |
39 | | - let pkgFilename = 'packages/vscode-tailwindcss/package.json' |
40 | | - let pkg = JSON.parse(await fs.readFile(pkgFilename, 'utf8')) |
41 | | - await fs.writeFile(pkgFilename, JSON.stringify({ ...pkg, version: nextVersion }, null, 2), 'utf8') |
42 | | -} |
| 30 | +/** @type {string[]} */ |
| 31 | +let versions = results[0].extensions[0].versions.map(({ version }) => version) |
43 | 32 |
|
44 | | -bumpVersion() |
| 33 | +// Determine the latest version of the extension |
| 34 | +let latest = versions |
| 35 | + .map((v) => semver.parse(v, { includePrerelease: true, loose: false })) |
| 36 | + .filter((v) => v !== null) |
| 37 | + .filter((v) => v.prerelease.length === 0) |
| 38 | + .sort((a, b) => b.compare(a) || b.compareBuild(a)) |
| 39 | + .at(0) |
| 40 | + |
| 41 | +// Require the minor version to be odd. This is done because |
| 42 | +// the VSCode Marketplace suggests using odd numbers for |
| 43 | +// pre-release builds and even ones for release builds |
| 44 | +assert(latest && latest.minor % 2 === 1) |
| 45 | + |
| 46 | +// Bump the patch version in `package.json` |
| 47 | +let nextVersion = latest.inc('patch').format() |
| 48 | +let pkg = await PackageJson.load('packages/vscode-tailwindcss/package.json') |
| 49 | +await pkg.update({ version: nextVersion }).save() |
0 commit comments