diff --git a/scripts/build-package.js b/scripts/build-package.js
index 151c2075..7f98bfce 100644
--- a/scripts/build-package.js
+++ b/scripts/build-package.js
@@ -32,7 +32,6 @@ const buildConfig = {
buildTs: true,
buildCjs: true,
removeReferenceComments: true,
- replaceSrcImports: true,
esmOnlyDirectives: false,
esmImportDirectives: false,
before: () => {},
@@ -349,28 +348,9 @@ if (buildConfig.buildTs && !IS_JSR) {
let content = fs.readFileSync(f, 'utf8')
let changed = false
- if (content.indexOf('/// ') !== -1) {
+ if (content.indexOf('/// ', '')
- }
-
- 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')
+ content = content.replace(/\/\/\/ \n?/g, '')
}
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) {
// generate deno.json from package.json
// 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')
fs.writeFileSync(
denoJson,
@@ -596,6 +564,34 @@ if (IS_JSR) {
console.log('[v] Changed %d files', unsavedSourceFiles.length)
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 {