Skip to content

Commit

Permalink
refactor(api): generate types next to modules (#8392)
Browse files Browse the repository at this point in the history
* refactor(api): generate types next to modules"

this fixes an issue with `moduleResolution: node`

* change file

* Update api-module-resolution-node.md
  • Loading branch information
amrbashir authored Dec 14, 2023
1 parent 3c371aa commit 1c582a9
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 43 deletions.
5 changes: 5 additions & 0 deletions .changes/api-module-resolution-node.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@tauri-apps/api": "patch:bug"
---

Fix a regression where typescript could not find types when using `"moduleResolution": "node"`
9 changes: 8 additions & 1 deletion tooling/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,17 @@
},
"homepage": "https://github.com/tauri-apps/tauri#readme",
"type": "module",
"types": "./types/index.d.ts",
"main": "./index.cjs",
"module": "./index.js",
"exports": {
".": {
"import": "./index.js",
"require": "./index.cjs"
},
"./*": {
"import": "./*.js",
"require": "./*.cjs"
},
"./package.json": "./package.json"
},
"scripts": {
Expand Down
47 changes: 5 additions & 42 deletions tooling/api/rollup.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,7 @@ import typescript from '@rollup/plugin-typescript'
import terser from '@rollup/plugin-terser'
import fg from 'fast-glob'
import { basename, join } from 'path'
import {
writeFileSync,
copyFileSync,
opendirSync,
rmSync,
Dir,
readFileSync
} from 'fs'
import { copyFileSync, opendirSync, rmSync, Dir } from 'fs'
import { fileURLToPath } from 'url'

// cleanup dist dir
Expand Down Expand Up @@ -45,7 +38,7 @@ export default defineConfig([
plugins: [
typescript({
declaration: true,
declarationDir: './dist/types',
declarationDir: './dist',
rootDir: 'src'
}),
makeFlatPackageInDist()
Expand Down Expand Up @@ -75,40 +68,10 @@ function makeFlatPackageInDist(): Plugin {
return {
name: 'makeFlatPackageInDist',
writeBundle() {
// append our api modules to `exports` in `package.json` then write it to `./dist`
const pkg = JSON.parse(readFileSync('package.json', 'utf8'))
const mods = modules.map((p) => basename(p).split('.')[0])

const outputPkg = {
...pkg,
devDependencies: {},
exports: Object.assign(
{},
...mods.map((mod) => {
const exports: Record<
string,
{ types: string; import: string; require: string }
> = {}
const key = mod === 'index' ? '.' : `./${mod}`
exports[key] = {
types: `./types/${mod}.d.ts`,
import: `./${mod}.js`,
require: `./${mod}.cjs`
}
return exports
}),
// if for some reason in the future we manually add something in the `exports` field
// this will ensure it doesn't get overwritten by the logic above
{ ...(pkg.exports || {}) }
)
}
writeFileSync(
'dist/package.json',
JSON.stringify(outputPkg, undefined, 2)
)

// copy necessary files like `CHANGELOG.md` , `README.md` and Licenses to `./dist`
fg.sync('(LICENSE*|*.md)').forEach((f) => copyFileSync(f, `dist/${f}`))
fg.sync('(LICENSE*|*.md|package.json)').forEach((f) =>
copyFileSync(f, `dist/${f}`)
)
}
}
}
Expand Down

0 comments on commit 1c582a9

Please sign in to comment.