mirror of https://github.com/vuejs/core.git
Merge branch 'main' into handle-symbol-unscopables-access
This commit is contained in:
commit
6998c896db
|
@ -31,4 +31,4 @@ jobs:
|
||||||
- name: Run prettier
|
- name: Run prettier
|
||||||
run: pnpm run format
|
run: pnpm run format
|
||||||
|
|
||||||
- uses: autofix-ci/action@dd55f44df8f7cdb7a6bf74c78677eb8acd40cd0a
|
- uses: autofix-ci/action@2891949f3779a1cafafae1523058501de3d4e944
|
||||||
|
|
|
@ -36,7 +36,7 @@ jobs:
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|
||||||
- name: Download PR number
|
- name: Download PR number
|
||||||
uses: dawidd6/action-download-artifact@v3
|
uses: dawidd6/action-download-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: pr-number
|
name: pr-number
|
||||||
run_id: ${{ github.event.workflow_run.id }}
|
run_id: ${{ github.event.workflow_run.id }}
|
||||||
|
|
33
package.json
33
package.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "3.4.31",
|
"version": "3.4.31",
|
||||||
"packageManager": "pnpm@9.4.0",
|
"packageManager": "pnpm@9.5.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "node scripts/dev.js",
|
"dev": "node scripts/dev.js",
|
||||||
|
@ -59,44 +59,41 @@
|
||||||
"node": ">=18.12.0"
|
"node": ">=18.12.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/parser": "^7.24.7",
|
"@babel/parser": "catalog:",
|
||||||
"@babel/types": "^7.24.7",
|
"@babel/types": "catalog:",
|
||||||
"@codspeed/vitest-plugin": "^3.1.0",
|
"@codspeed/vitest-plugin": "^3.1.0",
|
||||||
"@rollup/plugin-alias": "^5.1.0",
|
"@rollup/plugin-alias": "^5.1.0",
|
||||||
"@rollup/plugin-commonjs": "^25.0.8",
|
"@rollup/plugin-commonjs": "^26.0.1",
|
||||||
"@rollup/plugin-json": "^6.1.0",
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||||
"@rollup/plugin-replace": "5.0.4",
|
"@rollup/plugin-replace": "5.0.4",
|
||||||
"@swc/core": "^1.6.5",
|
"@swc/core": "^1.6.13",
|
||||||
"@types/hash-sum": "^1.0.2",
|
"@types/hash-sum": "^1.0.2",
|
||||||
"@types/minimist": "^1.2.5",
|
"@types/node": "^20.14.10",
|
||||||
"@types/node": "^20.14.8",
|
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
"@vitest/coverage-istanbul": "^1.6.0",
|
"@vitest/coverage-istanbul": "^1.6.0",
|
||||||
"@vue/consolidate": "1.0.0",
|
"@vue/consolidate": "1.0.0",
|
||||||
"conventional-changelog-cli": "^4.1.0",
|
"conventional-changelog-cli": "^4.1.0",
|
||||||
"enquirer": "^2.4.1",
|
"enquirer": "^2.4.1",
|
||||||
"esbuild": "^0.21.5",
|
"esbuild": "^0.23.0",
|
||||||
"esbuild-plugin-polyfill-node": "^0.3.0",
|
"esbuild-plugin-polyfill-node": "^0.3.0",
|
||||||
"eslint": "^9.5.0",
|
"eslint": "^9.6.0",
|
||||||
"eslint-plugin-import-x": "^0.5.1",
|
"eslint-plugin-import-x": "^0.5.3",
|
||||||
"eslint-plugin-vitest": "^0.5.4",
|
"eslint-plugin-vitest": "^0.5.4",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"execa": "^9.3.0",
|
|
||||||
"jsdom": "^24.1.0",
|
"jsdom": "^24.1.0",
|
||||||
"lint-staged": "^15.2.7",
|
"lint-staged": "^15.2.7",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"magic-string": "^0.30.10",
|
"magic-string": "^0.30.10",
|
||||||
"markdown-table": "^3.0.3",
|
"markdown-table": "^3.0.3",
|
||||||
"marked": "^12.0.2",
|
"marked": "^12.0.2",
|
||||||
"minimist": "^1.2.8",
|
"npm-run-all2": "^6.2.2",
|
||||||
"npm-run-all2": "^6.2.0",
|
|
||||||
"picocolors": "^1.0.1",
|
"picocolors": "^1.0.1",
|
||||||
"prettier": "^3.3.2",
|
"prettier": "^3.3.2",
|
||||||
"pretty-bytes": "^6.1.1",
|
"pretty-bytes": "^6.1.1",
|
||||||
"pug": "^3.0.3",
|
"pug": "^3.0.3",
|
||||||
"puppeteer": "~22.12.0",
|
"puppeteer": "~22.12.1",
|
||||||
"rimraf": "^5.0.7",
|
"rimraf": "^5.0.8",
|
||||||
"rollup": "^4.18.0",
|
"rollup": "^4.18.0",
|
||||||
"rollup-plugin-dts": "^6.1.1",
|
"rollup-plugin-dts": "^6.1.1",
|
||||||
"rollup-plugin-esbuild": "^6.1.1",
|
"rollup-plugin-esbuild": "^6.1.1",
|
||||||
|
@ -107,10 +104,10 @@
|
||||||
"terser": "^5.31.1",
|
"terser": "^5.31.1",
|
||||||
"todomvc-app-css": "^2.4.3",
|
"todomvc-app-css": "^2.4.3",
|
||||||
"tslib": "^2.6.3",
|
"tslib": "^2.6.3",
|
||||||
"tsx": "^4.15.7",
|
"tsx": "^4.16.2",
|
||||||
"typescript": "~5.4.5",
|
"typescript": "~5.4.5",
|
||||||
"typescript-eslint": "^7.13.1",
|
"typescript-eslint": "^7.15.0",
|
||||||
"vite": "^5.3.1",
|
"vite": "catalog:",
|
||||||
"vitest": "^1.6.0"
|
"vitest": "^1.6.0"
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
|
|
|
@ -46,13 +46,13 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme",
|
"homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.24.7",
|
"@babel/parser": "catalog:",
|
||||||
"@vue/shared": "workspace:*",
|
"@vue/shared": "workspace:*",
|
||||||
"entities": "^4.5.0",
|
"entities": "^4.5.0",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "catalog:",
|
||||||
"source-map-js": "^1.2.0"
|
"source-map-js": "catalog:"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/types": "^7.24.7"
|
"@babel/types": "catalog:"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,23 +42,23 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme",
|
"homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.24.7",
|
"@babel/parser": "catalog:",
|
||||||
"@vue/compiler-core": "workspace:*",
|
"@vue/compiler-core": "workspace:*",
|
||||||
"@vue/compiler-dom": "workspace:*",
|
"@vue/compiler-dom": "workspace:*",
|
||||||
"@vue/compiler-ssr": "workspace:*",
|
"@vue/compiler-ssr": "workspace:*",
|
||||||
"@vue/shared": "workspace:*",
|
"@vue/shared": "workspace:*",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "catalog:",
|
||||||
"magic-string": "^0.30.10",
|
"magic-string": "catalog:",
|
||||||
"postcss": "^8.4.38",
|
"postcss": "^8.4.39",
|
||||||
"source-map-js": "^1.2.0"
|
"source-map-js": "catalog:"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/types": "^7.24.7",
|
"@babel/types": "catalog:",
|
||||||
"@vue/consolidate": "^1.0.0",
|
"@vue/consolidate": "^1.0.0",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
"lru-cache": "10.1.0",
|
"lru-cache": "10.1.0",
|
||||||
"merge-source-map": "^1.1.0",
|
"merge-source-map": "^1.1.0",
|
||||||
"minimatch": "^9.0.4",
|
"minimatch": "^9.0.5",
|
||||||
"postcss-modules": "^6.0.0",
|
"postcss-modules": "^6.0.0",
|
||||||
"postcss-selector-parser": "^6.1.0",
|
"postcss-selector-parser": "^6.1.0",
|
||||||
"pug": "^3.0.3",
|
"pug": "^3.0.3",
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.0.5",
|
"@vitejs/plugin-vue": "^5.0.5",
|
||||||
"vite": "^5.3.1"
|
"vite": "catalog:"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/repl": "^4.2.1",
|
"@vue/repl": "^4.3.1",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"jszip": "^3.10.1",
|
"jszip": "^3.10.1",
|
||||||
"vue": "workspace:*"
|
"vue": "workspace:*"
|
||||||
|
|
|
@ -12,6 +12,6 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.0.5",
|
"@vitejs/plugin-vue": "^5.0.5",
|
||||||
"vite": "^5.3.1"
|
"vite": "^5.3.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,11 @@ import fs from 'node:fs'
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import { type Plugin, defineConfig } from 'vite'
|
import { type Plugin, defineConfig } from 'vite'
|
||||||
import vue from '@vitejs/plugin-vue'
|
import vue from '@vitejs/plugin-vue'
|
||||||
import { execaSync } from 'execa'
|
import { spawnSync } from 'node:child_process'
|
||||||
|
|
||||||
const commit = execaSync('git', ['rev-parse', '--short=7', 'HEAD']).stdout
|
const commit = spawnSync('git', ['rev-parse', '--short=7', 'HEAD'])
|
||||||
|
.stdout.toString()
|
||||||
|
.trim()
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|
|
@ -52,9 +52,9 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/vuejs/core/tree/main/packages/vue-compat#readme",
|
"homepage": "https://github.com/vuejs/core/tree/main/packages/vue-compat#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.24.7",
|
"@babel/parser": "catalog:",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "catalog:",
|
||||||
"source-map-js": "^1.2.0"
|
"source-map-js": "catalog:"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vue": "workspace:*"
|
"vue": "workspace:*"
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
- Contains hard-coded prod/dev branches, and the prod build is pre-minified. Use the `*.prod.js` files for production.
|
- Contains hard-coded prod/dev branches, and the prod build is pre-minified. Use the `*.prod.js` files for production.
|
||||||
|
|
||||||
- **`vue(.runtime).esm-browser(.prod).js`**:
|
- **`vue(.runtime).esm-browser(.prod).js`**:
|
||||||
- For usage via native ES modules imports (in browser via `<script type="module">`.
|
- For usage via native ES modules imports (in browser via `<script type="module">`).
|
||||||
- Shares the same runtime compilation, dependency inlining and hard-coded prod/dev behavior with the global build.
|
- Shares the same runtime compilation, dependency inlining and hard-coded prod/dev behavior with the global build.
|
||||||
|
|
||||||
### With a Bundler
|
### With a Bundler
|
||||||
|
|
1716
pnpm-lock.yaml
1716
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -1,2 +1,10 @@
|
||||||
packages:
|
packages:
|
||||||
- 'packages/*'
|
- 'packages/*'
|
||||||
|
|
||||||
|
catalog:
|
||||||
|
'@babel/parser': ^7.24.7
|
||||||
|
'@babel/types': ^7.2.47
|
||||||
|
'estree-walker': ^2.0.2
|
||||||
|
'magic-string': ^0.30.10
|
||||||
|
'source-map-js': ^1.2.0
|
||||||
|
'vite': ^5.3.3
|
||||||
|
|
|
@ -17,31 +17,67 @@ nr build core --formats cjs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import fs from 'node:fs/promises'
|
import fs from 'node:fs/promises'
|
||||||
import { existsSync } from 'node:fs'
|
import { parseArgs } from 'node:util'
|
||||||
|
import { existsSync, readFileSync } from 'node:fs'
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import minimist from 'minimist'
|
|
||||||
import { brotliCompressSync, gzipSync } from 'node:zlib'
|
import { brotliCompressSync, gzipSync } from 'node:zlib'
|
||||||
import pico from 'picocolors'
|
import pico from 'picocolors'
|
||||||
import { execa, execaSync } from 'execa'
|
|
||||||
import { cpus } from 'node:os'
|
import { cpus } from 'node:os'
|
||||||
import { createRequire } from 'node:module'
|
import { targets as allTargets, exec, fuzzyMatchTarget } from './utils.js'
|
||||||
import { targets as allTargets, fuzzyMatchTarget } from './utils.js'
|
|
||||||
import { scanEnums } from './inline-enums.js'
|
import { scanEnums } from './inline-enums.js'
|
||||||
import prettyBytes from 'pretty-bytes'
|
import prettyBytes from 'pretty-bytes'
|
||||||
|
import { spawnSync } from 'node:child_process'
|
||||||
|
|
||||||
const require = createRequire(import.meta.url)
|
const commit = spawnSync('git', ['rev-parse', '--short=7', 'HEAD'])
|
||||||
const args = minimist(process.argv.slice(2))
|
.stdout.toString()
|
||||||
const targets = args._
|
.trim()
|
||||||
const formats = args.formats || args.f
|
|
||||||
const devOnly = args.devOnly || args.d
|
const { values, positionals: targets } = parseArgs({
|
||||||
const prodOnly = !devOnly && (args.prodOnly || args.p)
|
allowPositionals: true,
|
||||||
const buildTypes = args.withTypes || args.t
|
options: {
|
||||||
const sourceMap = args.sourcemap || args.s
|
formats: {
|
||||||
const isRelease = args.release
|
type: 'string',
|
||||||
/** @type {boolean | undefined} */
|
short: 'f',
|
||||||
const buildAllMatching = args.all || args.a
|
},
|
||||||
const writeSize = args.size
|
devOnly: {
|
||||||
const commit = execaSync('git', ['rev-parse', '--short=7', 'HEAD']).stdout
|
type: 'boolean',
|
||||||
|
short: 'd',
|
||||||
|
},
|
||||||
|
prodOnly: {
|
||||||
|
type: 'boolean',
|
||||||
|
short: 'p',
|
||||||
|
},
|
||||||
|
withTypes: {
|
||||||
|
type: 'boolean',
|
||||||
|
short: 't',
|
||||||
|
},
|
||||||
|
sourceMap: {
|
||||||
|
type: 'boolean',
|
||||||
|
short: 's',
|
||||||
|
},
|
||||||
|
release: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
all: {
|
||||||
|
type: 'boolean',
|
||||||
|
short: 'a',
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const {
|
||||||
|
formats,
|
||||||
|
all: buildAllMatching,
|
||||||
|
devOnly,
|
||||||
|
prodOnly,
|
||||||
|
withTypes: buildTypes,
|
||||||
|
sourceMap,
|
||||||
|
release: isRelease,
|
||||||
|
size: writeSize,
|
||||||
|
} = values
|
||||||
|
|
||||||
const sizeDir = path.resolve('temp/size')
|
const sizeDir = path.resolve('temp/size')
|
||||||
|
|
||||||
|
@ -57,7 +93,7 @@ async function run() {
|
||||||
await buildAll(resolvedTargets)
|
await buildAll(resolvedTargets)
|
||||||
await checkAllSizes(resolvedTargets)
|
await checkAllSizes(resolvedTargets)
|
||||||
if (buildTypes) {
|
if (buildTypes) {
|
||||||
await execa(
|
await exec(
|
||||||
'pnpm',
|
'pnpm',
|
||||||
[
|
[
|
||||||
'run',
|
'run',
|
||||||
|
@ -114,6 +150,7 @@ async function runParallel(maxConcurrency, source, iteratorFn) {
|
||||||
}
|
}
|
||||||
return Promise.all(ret)
|
return Promise.all(ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the target.
|
* Builds the target.
|
||||||
* @param {string} target - The target to build.
|
* @param {string} target - The target to build.
|
||||||
|
@ -121,7 +158,7 @@ async function runParallel(maxConcurrency, source, iteratorFn) {
|
||||||
*/
|
*/
|
||||||
async function build(target) {
|
async function build(target) {
|
||||||
const pkgDir = path.resolve(`packages/${target}`)
|
const pkgDir = path.resolve(`packages/${target}`)
|
||||||
const pkg = require(`${pkgDir}/package.json`)
|
const pkg = JSON.parse(readFileSync(`${pkgDir}/package.json`, 'utf-8'))
|
||||||
|
|
||||||
// if this is a full build (no specific targets), ignore private packages
|
// if this is a full build (no specific targets), ignore private packages
|
||||||
if ((isRelease || !targets.length) && pkg.private) {
|
if ((isRelease || !targets.length) && pkg.private) {
|
||||||
|
@ -136,7 +173,8 @@ async function build(target) {
|
||||||
const env =
|
const env =
|
||||||
(pkg.buildOptions && pkg.buildOptions.env) ||
|
(pkg.buildOptions && pkg.buildOptions.env) ||
|
||||||
(devOnly ? 'development' : 'production')
|
(devOnly ? 'development' : 'production')
|
||||||
await execa(
|
|
||||||
|
await exec(
|
||||||
'rollup',
|
'rollup',
|
||||||
[
|
[
|
||||||
'-c',
|
'-c',
|
||||||
|
|
|
@ -8,16 +8,38 @@ import esbuild from 'esbuild'
|
||||||
import { dirname, relative, resolve } from 'node:path'
|
import { dirname, relative, resolve } from 'node:path'
|
||||||
import { fileURLToPath } from 'node:url'
|
import { fileURLToPath } from 'node:url'
|
||||||
import { createRequire } from 'node:module'
|
import { createRequire } from 'node:module'
|
||||||
import minimist from 'minimist'
|
import { parseArgs } from 'node:util'
|
||||||
import { polyfillNode } from 'esbuild-plugin-polyfill-node'
|
import { polyfillNode } from 'esbuild-plugin-polyfill-node'
|
||||||
|
|
||||||
const require = createRequire(import.meta.url)
|
const require = createRequire(import.meta.url)
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||||
const args = minimist(process.argv.slice(2))
|
|
||||||
const targets = args._.length ? args._ : ['vue']
|
const {
|
||||||
const format = args.f || 'global'
|
values: { format: rawFormat, prod, inline: inlineDeps },
|
||||||
const prod = args.p || false
|
positionals,
|
||||||
const inlineDeps = args.i || args.inline
|
} = parseArgs({
|
||||||
|
allowPositionals: true,
|
||||||
|
options: {
|
||||||
|
format: {
|
||||||
|
type: 'string',
|
||||||
|
short: 'f',
|
||||||
|
default: 'global',
|
||||||
|
},
|
||||||
|
prod: {
|
||||||
|
type: 'boolean',
|
||||||
|
short: 'p',
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
inline: {
|
||||||
|
type: 'boolean',
|
||||||
|
short: 'i',
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const format = rawFormat || 'global'
|
||||||
|
const targets = positionals.length ? positionals : ['vue']
|
||||||
|
|
||||||
// resolve output
|
// resolve output
|
||||||
const outputFormat = format.startsWith('global')
|
const outputFormat = format.startsWith('global')
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {
|
||||||
} from 'node:fs'
|
} from 'node:fs'
|
||||||
import * as path from 'node:path'
|
import * as path from 'node:path'
|
||||||
import { parse } from '@babel/parser'
|
import { parse } from '@babel/parser'
|
||||||
import { execaSync } from 'execa'
|
import { spawnSync } from 'node:child_process'
|
||||||
import MagicString from 'magic-string'
|
import MagicString from 'magic-string'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,8 +49,16 @@ export function scanEnums() {
|
||||||
const defines = Object.create(null)
|
const defines = Object.create(null)
|
||||||
|
|
||||||
// 1. grep for files with exported enum
|
// 1. grep for files with exported enum
|
||||||
const { stdout } = execaSync('git', ['grep', `export enum`])
|
const { stdout } = spawnSync('git', ['grep', `export enum`])
|
||||||
const files = [...new Set(stdout.split('\n').map(line => line.split(':')[0]))]
|
const files = [
|
||||||
|
...new Set(
|
||||||
|
stdout
|
||||||
|
.toString()
|
||||||
|
.trim()
|
||||||
|
.split('\n')
|
||||||
|
.map(line => line.split(':')[0]),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
// 2. parse matched files to collect enum info
|
// 2. parse matched files to collect enum info
|
||||||
for (const relativeFile of files) {
|
for (const relativeFile of files) {
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
import minimist from 'minimist'
|
|
||||||
import fs from 'node:fs'
|
import fs from 'node:fs'
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import pico from 'picocolors'
|
import pico from 'picocolors'
|
||||||
import semver from 'semver'
|
import semver from 'semver'
|
||||||
import enquirer from 'enquirer'
|
import enquirer from 'enquirer'
|
||||||
import { execa } from 'execa'
|
|
||||||
import { createRequire } from 'node:module'
|
import { createRequire } from 'node:module'
|
||||||
import { fileURLToPath } from 'node:url'
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { exec } from './utils.js'
|
||||||
|
import { parseArgs } from 'node:util'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{
|
* @typedef {{
|
||||||
|
@ -23,12 +23,34 @@ let versionUpdated = false
|
||||||
const { prompt } = enquirer
|
const { prompt } = enquirer
|
||||||
const currentVersion = createRequire(import.meta.url)('../package.json').version
|
const currentVersion = createRequire(import.meta.url)('../package.json').version
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
const args = minimist(process.argv.slice(2), {
|
|
||||||
alias: {
|
const { values: args, positionals } = parseArgs({
|
||||||
skipBuild: 'skip-build',
|
allowPositionals: true,
|
||||||
skipTests: 'skip-tests',
|
options: {
|
||||||
skipGit: 'skip-git',
|
preid: {
|
||||||
skipPrompts: 'skip-prompts',
|
type: 'string',
|
||||||
|
},
|
||||||
|
dry: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
tag: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
canary: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
skipBuild: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
skipTests: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
skipGit: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
skipPrompts: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -94,16 +116,16 @@ const versionIncrements = [
|
||||||
]
|
]
|
||||||
|
|
||||||
const inc = (/** @type {import('semver').ReleaseType} */ i) =>
|
const inc = (/** @type {import('semver').ReleaseType} */ i) =>
|
||||||
semver.inc(currentVersion, i, preId)
|
semver.inc(currentVersion, i, typeof preId === 'string' ? preId : undefined)
|
||||||
const run = async (
|
const run = async (
|
||||||
/** @type {string} */ bin,
|
/** @type {string} */ bin,
|
||||||
/** @type {ReadonlyArray<string>} */ args,
|
/** @type {ReadonlyArray<string>} */ args,
|
||||||
/** @type {import('execa').Options} */ opts = {},
|
/** @type {import('node:child_process').SpawnOptions} */ opts = {},
|
||||||
) => execa(bin, args, { stdio: 'inherit', ...opts })
|
) => exec(bin, args, { stdio: 'inherit', ...opts })
|
||||||
const dryRun = async (
|
const dryRun = async (
|
||||||
/** @type {string} */ bin,
|
/** @type {string} */ bin,
|
||||||
/** @type {ReadonlyArray<string>} */ args,
|
/** @type {ReadonlyArray<string>} */ args,
|
||||||
/** @type {import('execa').Options} */ opts = {},
|
/** @type {import('node:child_process').SpawnOptions} */ opts = {},
|
||||||
) => console.log(pico.blue(`[dryrun] ${bin} ${args.join(' ')}`), opts)
|
) => console.log(pico.blue(`[dryrun] ${bin} ${args.join(' ')}`), opts)
|
||||||
const runIfNotDry = isDryRun ? dryRun : run
|
const runIfNotDry = isDryRun ? dryRun : run
|
||||||
const getPkgRoot = (/** @type {string} */ pkg) =>
|
const getPkgRoot = (/** @type {string} */ pkg) =>
|
||||||
|
@ -117,7 +139,7 @@ async function main() {
|
||||||
console.log(`${pico.green(`✓`)} commit is up-to-date with remote.\n`)
|
console.log(`${pico.green(`✓`)} commit is up-to-date with remote.\n`)
|
||||||
}
|
}
|
||||||
|
|
||||||
let targetVersion = args._[0]
|
let targetVersion = positionals[0]
|
||||||
|
|
||||||
if (isCanary) {
|
if (isCanary) {
|
||||||
// The canary version string format is `3.yyyyMMdd.0` (or `3.yyyyMMdd.0-minor.0` for minor)
|
// The canary version string format is `3.yyyyMMdd.0` (or `3.yyyyMMdd.0-minor.0` for minor)
|
||||||
|
@ -392,11 +414,11 @@ async function isInSyncWithRemote() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getSha() {
|
async function getSha() {
|
||||||
return (await execa('git', ['rev-parse', 'HEAD'])).stdout
|
return (await exec('git', ['rev-parse', 'HEAD'])).stdout
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getBranch() {
|
async function getBranch() {
|
||||||
return (await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'])).stdout
|
return (await exec('git', ['rev-parse', '--abbrev-ref', 'HEAD'])).stdout
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import fs from 'node:fs'
|
import fs from 'node:fs'
|
||||||
import pico from 'picocolors'
|
import pico from 'picocolors'
|
||||||
import { createRequire } from 'node:module'
|
import { createRequire } from 'node:module'
|
||||||
|
import { spawn } from 'node:child_process'
|
||||||
|
|
||||||
const require = createRequire(import.meta.url)
|
const require = createRequire(import.meta.url)
|
||||||
|
|
||||||
|
@ -51,3 +52,50 @@ export function fuzzyMatchTarget(partialTargets, includeAllMatching) {
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} command
|
||||||
|
* @param {ReadonlyArray<string>} args
|
||||||
|
* @param {object} [options]
|
||||||
|
*/
|
||||||
|
export async function exec(command, args, options) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const process = spawn(command, args, {
|
||||||
|
stdio: [
|
||||||
|
'ignore', // stdin
|
||||||
|
'pipe', // stdout
|
||||||
|
'pipe', // stderr
|
||||||
|
],
|
||||||
|
...options,
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Buffer[]}
|
||||||
|
*/
|
||||||
|
const stderrChunks = []
|
||||||
|
/**
|
||||||
|
* @type {Buffer[]}
|
||||||
|
*/
|
||||||
|
const stdoutChunks = []
|
||||||
|
|
||||||
|
process.stderr?.on('data', chunk => {
|
||||||
|
stderrChunks.push(chunk)
|
||||||
|
})
|
||||||
|
|
||||||
|
process.stdout?.on('data', chunk => {
|
||||||
|
stdoutChunks.push(chunk)
|
||||||
|
})
|
||||||
|
|
||||||
|
process.on('error', error => {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
|
||||||
|
process.on('exit', code => {
|
||||||
|
const ok = code === 0
|
||||||
|
const stderr = Buffer.concat(stderrChunks).toString().trim()
|
||||||
|
const stdout = Buffer.concat(stdoutChunks).toString().trim()
|
||||||
|
const result = { ok, code, stderr, stdout }
|
||||||
|
resolve(result)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
import fs from 'node:fs'
|
import fs from 'node:fs'
|
||||||
import { execa } from 'execa'
|
import { exec } from './utils.js'
|
||||||
|
|
||||||
execa('pnpm', ['build', 'vue', '-f', 'global-runtime']).then(() => {
|
exec('pnpm', ['build', 'vue', '-f', 'global-runtime']).then(() => {
|
||||||
const errors = []
|
const errors = []
|
||||||
|
|
||||||
const devBuild = fs.readFileSync(
|
const devBuild = fs.readFileSync(
|
||||||
|
|
Loading…
Reference in New Issue