Skip to content

Commit

Permalink
chore: emit .d.cts files
Browse files Browse the repository at this point in the history
This will allow CJS projects using "moduleResolution: node16" to import Vite.
  • Loading branch information
aleclarson committed Nov 15, 2022
1 parent 18c71dc commit c9c53cf
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 2 deletions.
1 change: 1 addition & 0 deletions packages/vite/index.d.cts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './dist/node-cjs/index.cjs'
4 changes: 2 additions & 2 deletions packages/vite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
"types": "./dist/node/index.d.ts",
"exports": {
".": {
"types": "./dist/node/index.d.ts",
"import": "./dist/node/index.js",
"require": "./index.cjs"
},
Expand Down Expand Up @@ -46,12 +45,13 @@
"dev": "rimraf dist && pnpm run build-bundle -w",
"build": "rimraf dist && run-s build-bundle build-types",
"build-bundle": "rollup --config rollup.config.ts --configPlugin typescript",
"build-types": "run-s build-types-temp build-types-pre-patch build-types-roll build-types-post-patch build-types-check",
"build-types": "run-s build-types-temp build-types-pre-patch build-types-roll build-types-post-patch build-types-check build-emit-cjs-types",
"build-types-temp": "tsc --emitDeclarationOnly --outDir temp/node -p src/node",
"build-types-pre-patch": "tsx scripts/prePatchTypes.ts",
"build-types-roll": "api-extractor run && rimraf temp",
"build-types-post-patch": "tsx scripts/postPatchTypes.ts",
"build-types-check": "tsc --project tsconfig.check.json",
"build-emit-cjs-types": "tsx scripts/emitCjsTypes.ts",
"lint": "eslint --cache --ext .ts src/**",
"format": "prettier --write --cache --parser typescript \"src/**/*.ts\"",
"prepublishOnly": "npm run build"
Expand Down
44 changes: 44 additions & 0 deletions packages/vite/scripts/emitCjsTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import fs from 'node:fs'
import path from 'node:path'
import glob from 'fast-glob'
import * as lexer from 'es-module-lexer'

async function main() {
const typeFiles = await glob('**/*.d.ts', {
cwd: 'dist',
absolute: true
})

for (const file of typeFiles) {
let text = fs.readFileSync(file, 'utf8')
const [imports] = lexer.parse(text)
for (const i of [...imports].reverse()) {
let id = i.n
if (!id || !/^\.\.?(?:\/|$)/.test(id)) {
continue
}
const importedFile = path.resolve(path.dirname(file), id)
if (isDirectory(importedFile)) {
id += '/index'
}
const cjsModuleSpec = id + '.cjs'
text = text.slice(0, i.s) + cjsModuleSpec + text.slice(i.e)
}
const outFile = file
.replace('/node/', '/node-cjs/')
.replace(/\.ts$/, '.cts')
fs.mkdirSync(path.dirname(outFile), { recursive: true })
fs.writeFileSync(outFile, text)
console.log('saved', outFile)
}
}

function isDirectory(file: string) {
try {
return fs.statSync(file).isDirectory()
} catch (e) {
return false
}
}

main()

0 comments on commit c9c53cf

Please sign in to comment.