|
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