]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
build: use rollup-plugin-dts for dts build
authorEvan You <yyx990803@gmail.com>
Fri, 3 Feb 2023 07:48:12 +0000 (15:48 +0800)
committerEvan You <yyx990803@gmail.com>
Fri, 3 Feb 2023 07:51:07 +0000 (15:51 +0800)
.gitignore
package.json
pnpm-lock.yaml
rollup.dts.config.mjs [new file with mode: 0644]
scripts/aliases.mjs
tsconfig.build.json [new file with mode: 0644]
tsconfig.json

index 75c8139bd9b4a01cd623ccdbad01dd63b78acf72..810f8852690d6b7ffb456349cc405196168f8cbb 100644 (file)
@@ -8,3 +8,5 @@ TODOs.md
 *.log
 .idea
 .eslintcache
+dts-build/packages
+*.tsbuildinfo
index 7aef6ced2544a393fbd34e280bb5f098bb4fcf35..befa8188be99bf99a253004083db4f90afd26838 100644 (file)
@@ -5,6 +5,7 @@
   "scripts": {
     "dev": "node scripts/dev.mjs",
     "build": "node scripts/build.mjs",
+    "build-dts": "tsc -p tsconfig.build.json && rollup -c rollup.dts.config.mjs",
     "size": "run-s size-global size-baseline",
     "size-global": "node scripts/build.mjs vue runtime-dom -f global -p",
     "size-baseline": "node scripts/build.mjs runtime-dom runtime-core reactivity shared -f esm-bundler && cd packages/size-check && vite build && node brotli",
@@ -15,8 +16,8 @@
     "test": "vitest",
     "test-unit": "vitest -c vitest.unit.config.ts",
     "test-e2e": "node scripts/build.mjs vue -f global -d && vitest -c vitest.e2e.config.ts",
-    "test-dts": "node scripts/build.mjs shared reactivity runtime-core runtime-dom -dt -f esm-bundler && npm run test-dts-only",
-    "test-dts-only": "tsc -p ./test-dts/tsconfig.json && tsc -p ./test-dts/tsconfig.build.json",
+    "test-dts": "run-s build-dts test-dts-only",
+    "test-dts-only": "tsc -p ./test-dts/tsconfig.build.json",
     "test-coverage": "vitest -c vitest.unit.config.ts --coverage",
     "release": "node scripts/release.mjs",
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
@@ -57,7 +58,7 @@
     "@babel/parser": "^7.20.15",
     "@babel/types": "^7.20.7",
     "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
-    "@microsoft/api-extractor": "~7.20.0",
+    "@microsoft/api-extractor": "~7.34.2",
     "@rollup/plugin-alias": "^4.0.3",
     "@rollup/plugin-commonjs": "^23.0.2",
     "@rollup/plugin-json": "^5.0.1",
@@ -92,6 +93,7 @@
     "pug": "^3.0.1",
     "puppeteer": "^19.2.2",
     "rollup": "~3.10.0",
+    "rollup-plugin-dts": "^5.1.1",
     "rollup-plugin-esbuild": "^5.0.0",
     "rollup-plugin-node-builtins": "^2.1.2",
     "rollup-plugin-node-globals": "^1.4.0",
index 78a878323f778f4c526008b7d34b56312b331e3b..f3adc1b9b1ca1543e45ed3e1f4f16df4a48e5047 100644 (file)
@@ -7,7 +7,7 @@ importers:
       '@babel/parser': ^7.20.15
       '@babel/types': ^7.20.7
       '@esbuild-plugins/node-modules-polyfill': ^0.1.4
-      '@microsoft/api-extractor': ~7.20.0
+      '@microsoft/api-extractor': ~7.34.2
       '@rollup/plugin-alias': ^4.0.3
       '@rollup/plugin-commonjs': ^23.0.2
       '@rollup/plugin-json': ^5.0.1
@@ -42,6 +42,7 @@ importers:
       pug: ^3.0.1
       puppeteer: ^19.2.2
       rollup: ~3.10.0
+      rollup-plugin-dts: ^5.1.1
       rollup-plugin-esbuild: ^5.0.0
       rollup-plugin-node-builtins: ^2.1.2
       rollup-plugin-node-globals: ^1.4.0
@@ -60,7 +61,7 @@ importers:
       '@babel/parser': 7.20.15
       '@babel/types': 7.20.7
       '@esbuild-plugins/node-modules-polyfill': 0.1.4_esbuild@0.17.5
-      '@microsoft/api-extractor': 7.20.1
+      '@microsoft/api-extractor': 7.34.2_@types+node@16.18.11
       '@rollup/plugin-alias': 4.0.3_rollup@3.10.1
       '@rollup/plugin-commonjs': 23.0.7_rollup@3.10.1
       '@rollup/plugin-json': 5.0.2_rollup@3.10.1
@@ -95,6 +96,7 @@ importers:
       pug: 3.0.2
       puppeteer: 19.6.3
       rollup: 3.10.1
+      rollup-plugin-dts: 5.1.1_3md6k4iljipbt7fzll35epzd3m
       rollup-plugin-esbuild: 5.0.0_vnogblvxo6egyqdp3slxc3bipy
       rollup-plugin-node-builtins: 2.1.2
       rollup-plugin-node-globals: 1.4.0
@@ -1000,43 +1002,47 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.14
     dev: true
 
-  /@microsoft/api-extractor-model/7.16.0:
-    resolution: {integrity: sha512-0FOrbNIny8mzBrzQnSIkEjAXk0JMSnPmWYxt3ZDTPVg9S8xIPzB6lfgTg9+Mimu0RKCpGKBpd+v2WcR5vGzyUQ==}
+  /@microsoft/api-extractor-model/7.26.2_@types+node@16.18.11:
+    resolution: {integrity: sha512-V9tTHbYTNelTrNDXBzeDlszq29nQcjJdP6s27QJiATbqSRjEbKTeztlSVsCRHL2Wkkv5IN5jT4xkYjnFFPbK0A==}
     dependencies:
-      '@microsoft/tsdoc': 0.13.2
-      '@microsoft/tsdoc-config': 0.15.2
-      '@rushstack/node-core-library': 3.45.1
+      '@microsoft/tsdoc': 0.14.2
+      '@microsoft/tsdoc-config': 0.16.2
+      '@rushstack/node-core-library': 3.55.0_@types+node@16.18.11
+    transitivePeerDependencies:
+      - '@types/node'
     dev: true
 
-  /@microsoft/api-extractor/7.20.1:
-    resolution: {integrity: sha512-T7cqcK+JpvHGOj7cD2ZCCWS7Xgru1uOqZwrV/FSUdyKVs5fopZcbBSuetwD/akst3O7Ypryg3UOLP54S/vnVmA==}
+  /@microsoft/api-extractor/7.34.2_@types+node@16.18.11:
+    resolution: {integrity: sha512-oREyUU7p3JgjrqapJxEHe83gA1SXOWgaA4XCiY9PvsiLkgGHtn2ibTRgw9GCI/4kZzcb+OQv5waUDxsnQSKfwQ==}
     hasBin: true
     dependencies:
-      '@microsoft/api-extractor-model': 7.16.0
-      '@microsoft/tsdoc': 0.13.2
-      '@microsoft/tsdoc-config': 0.15.2
-      '@rushstack/node-core-library': 3.45.1
-      '@rushstack/rig-package': 0.3.8
-      '@rushstack/ts-command-line': 4.10.7
+      '@microsoft/api-extractor-model': 7.26.2_@types+node@16.18.11
+      '@microsoft/tsdoc': 0.14.2
+      '@microsoft/tsdoc-config': 0.16.2
+      '@rushstack/node-core-library': 3.55.0_@types+node@16.18.11
+      '@rushstack/rig-package': 0.3.17
+      '@rushstack/ts-command-line': 4.13.1
       colors: 1.2.5
       lodash: 4.17.21
-      resolve: 1.17.0
+      resolve: 1.22.1
       semver: 7.3.8
       source-map: 0.6.1
-      typescript: 4.5.5
+      typescript: 4.8.4
+    transitivePeerDependencies:
+      - '@types/node'
     dev: true
 
-  /@microsoft/tsdoc-config/0.15.2:
-    resolution: {integrity: sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==}
+  /@microsoft/tsdoc-config/0.16.2:
+    resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
     dependencies:
-      '@microsoft/tsdoc': 0.13.2
+      '@microsoft/tsdoc': 0.14.2
       ajv: 6.12.6
       jju: 1.4.0
       resolve: 1.19.0
     dev: true
 
-  /@microsoft/tsdoc/0.13.2:
-    resolution: {integrity: sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==}
+  /@microsoft/tsdoc/0.14.2:
+    resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
     dev: true
 
   /@nodelib/fs.scandir/2.1.5:
@@ -1179,29 +1185,33 @@ packages:
       rollup: 3.10.1
     dev: true
 
-  /@rushstack/node-core-library/3.45.1:
-    resolution: {integrity: sha512-BwdssTNe007DNjDBxJgInHg8ePytIPyT0La7ZZSQZF9+rSkT42AygXPGvbGsyFfEntjr4X37zZSJI7yGzL16cQ==}
+  /@rushstack/node-core-library/3.55.0_@types+node@16.18.11:
+    resolution: {integrity: sha512-6lSel8w3DeGaD/JCKw64wfezEBijlCQlMwBoYg9Ci5VPy+dZ+FpBkIBrY8mi3Ge4xNzr4gyTbQ5XEt0QP1Kv/w==}
+    peerDependencies:
+      '@types/node': ^14.18.36
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
     dependencies:
-      '@types/node': 12.20.24
+      '@types/node': 16.18.11
       colors: 1.2.5
       fs-extra: 7.0.1
       import-lazy: 4.0.0
       jju: 1.4.0
-      resolve: 1.17.0
+      resolve: 1.22.1
       semver: 7.3.8
-      timsort: 0.3.0
       z-schema: 5.0.5
     dev: true
 
-  /@rushstack/rig-package/0.3.8:
-    resolution: {integrity: sha512-MDWg1xovea99PWloSiYMjFcCLsrdjFtYt6aOyHNs5ojn5mxrzR6U9F83hvbQjTWnKPMvZtr0vcek+4n+OQOp3Q==}
+  /@rushstack/rig-package/0.3.17:
+    resolution: {integrity: sha512-nxvAGeIMnHl1LlZSQmacgcRV4y1EYtgcDIrw6KkeVjudOMonlxO482PhDj3LVZEp6L7emSf6YSO2s5JkHlwfZA==}
     dependencies:
       resolve: 1.17.0
       strip-json-comments: 3.1.1
     dev: true
 
-  /@rushstack/ts-command-line/4.10.7:
-    resolution: {integrity: sha512-CjS+DfNXUSO5Ab2wD1GBGtUTnB02OglRWGqfaTcac9Jn45V5MeUOsq/wA8wEeS5Y/3TZ2P1k+IWdVDiuOFP9Og==}
+  /@rushstack/ts-command-line/4.13.1:
+    resolution: {integrity: sha512-UTQMRyy/jH1IS2U+6pyzyn9xQ2iMcoUKkTcZUzOP/aaMiKlWLwCTDiBVwhw/M1crDx6apF9CwyjuWO9r1SBdJQ==}
     dependencies:
       '@types/argparse': 1.0.38
       argparse: 1.0.10
@@ -1252,10 +1262,6 @@ packages:
     resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
     dev: true
 
-  /@types/node/12.20.24:
-    resolution: {integrity: sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==}
-    dev: true
-
   /@types/node/16.18.11:
     resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==}
     dev: true
@@ -5435,6 +5441,20 @@ packages:
       inherits: 2.0.4
     dev: true
 
+  /rollup-plugin-dts/5.1.1_3md6k4iljipbt7fzll35epzd3m:
+    resolution: {integrity: sha512-zpgo52XmnLg8w4k3MScinFHZK1+ro6r7uVe34fJ0Ee8AM45FvgvTuvfWWaRgIpA4pQ1BHJuu2ospncZhkcJVeA==}
+    engines: {node: '>=v14'}
+    peerDependencies:
+      rollup: ^3.0.0
+      typescript: ^4.1
+    dependencies:
+      magic-string: 0.27.0
+      rollup: 3.10.1
+      typescript: 4.9.5
+    optionalDependencies:
+      '@babel/code-frame': 7.18.6
+    dev: true
+
   /rollup-plugin-esbuild/5.0.0_vnogblvxo6egyqdp3slxc3bipy:
     resolution: {integrity: sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==}
     engines: {node: '>=14.18.0', npm: '>=8.0.0'}
@@ -6047,10 +6067,6 @@ packages:
       readable-stream: 3.6.0
     dev: true
 
-  /timsort/0.3.0:
-    resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==}
-    dev: true
-
   /tinybench/2.3.1:
     resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==}
     dev: true
@@ -6188,8 +6204,8 @@ packages:
     resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
     dev: true
 
-  /typescript/4.5.5:
-    resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==}
+  /typescript/4.8.4:
+    resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
     engines: {node: '>=4.2.0'}
     hasBin: true
     dev: true
diff --git a/rollup.dts.config.mjs b/rollup.dts.config.mjs
new file mode 100644 (file)
index 0000000..b245ed2
--- /dev/null
@@ -0,0 +1,53 @@
+// @ts-check
+import { existsSync, readdirSync, readFileSync } from 'fs'
+import dts from 'rollup-plugin-dts'
+
+if (!existsSync('temp/packages')) {
+  console.warn(
+    'no temp dts files found. run `tsc -p tsconfig.build.json` first.'
+  )
+  process.exit(1)
+}
+
+export default readdirSync('temp/packages').map(pkg => {
+  return {
+    input: `./temp/packages/${pkg}/src/index.d.ts`,
+    output: {
+      file: `packages/${pkg}/dist/${pkg}.d.ts`,
+      format: 'es'
+    },
+    plugins: [dts(), patchTypes(pkg)],
+    onwarn(warning, warn) {
+      // during dts rollup, everything is externalized by default
+      if (
+        warning.code === 'UNRESOLVED_IMPORT' &&
+        !warning.exporter.startsWith('.')
+      ) {
+        return
+      }
+      warn(warning)
+    }
+  }
+})
+
+/**
+ * @returns {import('rollup').Plugin}
+ */
+function patchTypes(pkg) {
+  return {
+    name: 'patch-types',
+    renderChunk(code) {
+      // 1. TODO remove entries marked with @private
+      // 2. append pkg specific types
+      const additionalTypeDir = `packages/${pkg}/types`
+      if (existsSync(additionalTypeDir)) {
+        code +=
+          '\n' +
+          readdirSync(additionalTypeDir)
+            .map(file => readFileSync(`${additionalTypeDir}/${file}`, 'utf-8'))
+            .join('\n')
+      }
+      return code
+    }
+  }
+}
index 0d3c20d7e4b1f4f49d76660b5bc95bad390d6f78..4cbdf10b256318484b50e295122bf389ae77cfb4 100644 (file)
@@ -1,11 +1,14 @@
 // @ts-check
 // these aliases are shared between vitest and rollup
-import { readdirSync } from 'node:fs'
+import { readdirSync, statSync } from 'node:fs'
 import path from 'node:path'
 import { fileURLToPath } from 'node:url'
 
 const resolveEntryForPkg = p =>
-  path.resolve(fileURLToPath(import.meta.url), `../../packages/${p}/src/index.ts`)
+  path.resolve(
+    fileURLToPath(import.meta.url),
+    `../../packages/${p}/src/index.ts`
+  )
 
 const dirs = readdirSync(new URL('../packages', import.meta.url))
 
@@ -15,9 +18,21 @@ const entries = {
   'vue/server-renderer': resolveEntryForPkg('server-renderer'),
   '@vue/compat': resolveEntryForPkg('vue-compat')
 }
+
+const nonSrcPackages = [
+  'sfc-playground',
+  'size-check',
+  'template-explorer'
+]
+
 for (const dir of dirs) {
   const key = `@vue/${dir}`
-  if (dir !== 'vue' && !(key in entries)) {
+  if (
+    dir !== 'vue' &&
+    !nonSrcPackages.includes(dir) &&
+    !(key in entries) &&
+    statSync(new URL(`../packages/${dir}`, import.meta.url)).isDirectory()
+  ) {
     entries[key] = resolveEntryForPkg(dir)
   }
 }
diff --git a/tsconfig.build.json b/tsconfig.build.json
new file mode 100644 (file)
index 0000000..8e93e99
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "declaration": true,
+    "emitDeclarationOnly": true
+  },
+  "exclude": [
+    "packages/*/__tests__",
+    "packages/runtime-test",
+    "packages/template-explorer",
+    "packages/sfc-playground",
+    "packages/size-check",
+    "test-dts"
+  ]
+}
index 36b360eba85a27b0527f3c086831b4ba64abdb60..2a3f429d8ad0dd44be76efb857fd97968855762b 100644 (file)
@@ -1,7 +1,7 @@
 {
   "compilerOptions": {
     "baseUrl": ".",
-    "outDir": "dist",
+    "outDir": "temp",
     "sourceMap": false,
     "target": "es2016",
     "newLine": "LF",