build: generate shims for esnext
also cleaned up build script a bit
This commit is contained in:
parent
4acd0d58e9
commit
3d38cc4500
1 changed files with 39 additions and 43 deletions
|
@ -32,7 +32,6 @@ const buildConfig = {
|
||||||
buildTs: true,
|
buildTs: true,
|
||||||
buildCjs: true,
|
buildCjs: true,
|
||||||
removeReferenceComments: true,
|
removeReferenceComments: true,
|
||||||
replaceSrcImports: true,
|
|
||||||
esmOnlyDirectives: false,
|
esmOnlyDirectives: false,
|
||||||
esmImportDirectives: false,
|
esmImportDirectives: false,
|
||||||
before: () => {},
|
before: () => {},
|
||||||
|
@ -349,28 +348,9 @@ if (buildConfig.buildTs && !IS_JSR) {
|
||||||
let content = fs.readFileSync(f, 'utf8')
|
let content = fs.readFileSync(f, 'utf8')
|
||||||
let changed = false
|
let changed = false
|
||||||
|
|
||||||
if (content.indexOf('/// <reference types="node" />') !== -1) {
|
if (content.indexOf('/// <reference types="') !== -1) {
|
||||||
changed = true
|
changed = true
|
||||||
content = content.replace('/// <reference types="node" />', '')
|
content = content.replace(/\/\/\/ <reference types="(node|deno\/ns)".+?\/>\n?/g, '')
|
||||||
}
|
|
||||||
|
|
||||||
if (content.match(/@mtcute\/[a-z-]+\/src/)) {
|
|
||||||
changed = true
|
|
||||||
content = content.replace(/(@mtcute\/[a-z-]+)\/src/g, '$1')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed) fs.writeFileSync(f, content)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buildConfig.replaceSrcImports) {
|
|
||||||
for (const f of glob.sync(path.join(outDir, '**/*.js'))) {
|
|
||||||
let content = fs.readFileSync(f, 'utf8')
|
|
||||||
let changed = false
|
|
||||||
|
|
||||||
if (content.match(/@mtcute\/[a-z-]+\/src/)) {
|
|
||||||
changed = true
|
|
||||||
content = content.replace(/(@mtcute\/[a-z-]+)\/src/g, '$1')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed) fs.writeFileSync(f, content)
|
if (changed) fs.writeFileSync(f, content)
|
||||||
|
@ -497,6 +477,15 @@ if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WAR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validate exports
|
||||||
|
if (typeof builtPkgJson.exports === 'object') {
|
||||||
|
for (const [name, target] of Object.entries(builtPkgJson.exports)) {
|
||||||
|
if (name.includes('*')) {
|
||||||
|
throw new Error(`Wildcards are not supported: ${name} -> ${target}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_JSR) {
|
if (IS_JSR) {
|
||||||
// generate deno.json from package.json
|
// generate deno.json from package.json
|
||||||
// https://jsr.io/docs/package-configuration
|
// https://jsr.io/docs/package-configuration
|
||||||
|
@ -517,27 +506,6 @@ if (IS_JSR) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [name, target] of Object.entries(builtPkgJson.exports)) {
|
|
||||||
// jsr doesn't support wildcards, so we need to flatten those
|
|
||||||
if (!name.includes('*')) continue
|
|
||||||
|
|
||||||
if (!name.endsWith('*') || !target.endsWith('*')) {
|
|
||||||
// for simplicity + it's the only one supported in some bundlers
|
|
||||||
throw new Error(`Invalid wildcard in export map: ${name} -> ${target}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
const base = name.slice(0, -1)
|
|
||||||
const targetBase = target.slice(0, -1)
|
|
||||||
|
|
||||||
for (const file of glob.sync(path.join(outDir, base, '**/*'))) {
|
|
||||||
const newName = (base + path.relative(path.join(outDir, base), file)).replace(/\.ts$/, '.js')
|
|
||||||
const newTarget = targetBase + path.relative(path.join(outDir, base), file)
|
|
||||||
builtPkgJson.exports[newName] = newTarget
|
|
||||||
}
|
|
||||||
|
|
||||||
delete builtPkgJson.exports[name]
|
|
||||||
}
|
|
||||||
|
|
||||||
const denoJson = path.join(outDir, 'deno.json')
|
const denoJson = path.join(outDir, 'deno.json')
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
denoJson,
|
denoJson,
|
||||||
|
@ -596,6 +564,34 @@ if (IS_JSR) {
|
||||||
console.log('[v] Changed %d files', unsavedSourceFiles.length)
|
console.log('[v] Changed %d files', unsavedSourceFiles.length)
|
||||||
project.saveSync()
|
project.saveSync()
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// make shims for esnext resolution (that doesn't respect package.json `exports` field)
|
||||||
|
function makeShim(name, target) {
|
||||||
|
if (name === '.') name = './index.js'
|
||||||
|
|
||||||
|
if (!fs.existsSync(path.join(outDir, name))) {
|
||||||
|
fs.writeFileSync(path.join(outDir, name), `export * from '${target}'\n`)
|
||||||
|
fs.writeFileSync(path.join(outDir, name.replace(/\.js$/, '.d.ts')), `export * from '${target}'\n`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof builtPkgJson.exports === 'string') {
|
||||||
|
makeShim('.', builtPkgJson.exports)
|
||||||
|
} else if (typeof builtPkgJson.exports === 'object') {
|
||||||
|
for (const [name, target] of Object.entries(builtPkgJson.exports)) {
|
||||||
|
let esmTarget
|
||||||
|
|
||||||
|
if (typeof target === 'object') {
|
||||||
|
if (!target.import) throw new Error(`Invalid export target: ${name} -> ${JSON.stringify(target)}`)
|
||||||
|
esmTarget = target.import
|
||||||
|
} else if (typeof target === 'string') {
|
||||||
|
if (buildConfig.buildCjs) throw new Error(`Invalid export target (with cjs): ${name} -> ${target}`)
|
||||||
|
esmTarget = target
|
||||||
|
}
|
||||||
|
|
||||||
|
makeShim(name, esmTarget)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue