diff --git a/package.json b/package.json index 32c76c0e..c65c9e18 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "listr2": "^8.0.2", "process": "^0.11.10", "semver": "^7.6.0", + "sort-package-json": "^2.8.0", "tsx": "^4.7.1", "turbo": "^1.12.3", "type-fest": "^4.10.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8cf0e8cc..db1c7789 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: semver: specifier: ^7.6.0 version: 7.6.0 + sort-package-json: + specifier: ^2.8.0 + version: 2.8.0 tsx: specifier: ^4.7.1 version: 4.7.1 @@ -4153,6 +4156,11 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + /detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -4164,6 +4172,11 @@ packages: engines: {node: '>=8'} dev: true + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5389,6 +5402,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -5420,6 +5438,10 @@ packages: resolve-pkg-maps: 1.0.0 dev: true + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + /github-url-from-git@1.5.0: resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==} dev: true @@ -6174,6 +6196,11 @@ packages: engines: {node: '>=12'} dev: true + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -8649,6 +8676,23 @@ packages: - pg-native dev: true + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-package-json@2.8.0: + resolution: {integrity: sha512-PxeNg93bTJWmDGnu0HADDucoxfFiKkIr73Kv85EBThlI1YQPdc0XovBgg2llD0iABZbu2SlKo8ntGmOP9wOj/g==} + hasBin: true + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + sort-object-keys: 1.1.3 + dev: true + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} diff --git a/scripts/publish.ts b/scripts/publish.ts index f3d4225c..5277f50a 100644 --- a/scripts/publish.ts +++ b/scripts/publish.ts @@ -3,9 +3,9 @@ import {Listr, ListrTaskWrapper} from 'listr2' import * as fs from 'fs' import * as path from 'path' import {ListrEnquirerPromptAdapter} from '@listr2/prompt-adapter-enquirer' -import * as assert from 'assert' import * as semver from 'semver' import {inspect} from 'util' +import sortPackageJson from 'sort-package-json' const main = async () => { const packageJsonFilepath = (pkg: PkgMeta, type: 'local' | 'registry') => @@ -139,14 +139,17 @@ const main = async () => { ...ctx.packages.map(pkg => pkg.version), ...(ctx.packages.map(pkg => loadRegistryPackageJson(pkg)?.version).filter(Boolean) as string[]), ] - const maxVersion = allVersions.sort(semver.compare).at(-1) + const maxVersion = allVersions.sort(semver.compare).at(-1) || '0.0.0' if (!maxVersion) throw new Error(`No versions found`) + const releaseTypes: semver.ReleaseType[] = ['patch', 'minor', 'major', 'prepatch', 'preminor', 'premajor'] + semver.prerelease(maxVersion) ? releaseTypes.unshift('prerelease') : releaseTypes.push('prerelease') + let bumpedVersion = await task.prompt(ListrEnquirerPromptAdapter).run({ type: 'Select', message: `Select semver increment or specify new version (current latest is ${maxVersion})`, choices: [ - ...(['patch', 'minor', 'major', 'prepatch', 'preminor', 'premajor', 'prerelease'] as const).map(type => { + ...releaseTypes.map(type => { const result = semver.inc(maxVersion, type)! return { message: `${type} ${result}`, @@ -168,11 +171,6 @@ const main = async () => { }) } - if (Math.random()) { - console.error({newBumpedVersion: bumpedVersion}) - throw new Error('random error') - } - // todo: use enquirer to ask ctx.versionStrategy = {type: 'fixed', version: bumpedVersion} task.output = inspect(ctx.versionStrategy) @@ -227,7 +225,10 @@ const main = async () => { } }) - fs.writeFileSync(packageJsonFilepath(pkg, 'local'), JSON.stringify(packageJson, null, 2)) + fs.writeFileSync( + packageJsonFilepath(pkg, 'local'), + sortPackageJson(JSON.stringify(packageJson, null, 2)), + ) }, })), )