From c61f31475529834653a6cddbd76a1b5df9ffb9d0 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 24 Aug 2021 12:32:46 +0200 Subject: [PATCH] fix: support cjs stubbing (#220) --- src/core/package/index.spec.ts | 27 ++++++++++++++++++--------- src/core/package/index.ts | 21 ++++++++++++++++----- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/core/package/index.spec.ts b/src/core/package/index.spec.ts index 40876c3..9d1a050 100644 --- a/src/core/package/index.spec.ts +++ b/src/core/package/index.spec.ts @@ -59,24 +59,33 @@ describe('package class', () => { // TODO: move to fixture test('should generate package stub', async () => { const defaultPath = getFixturePath('default') - const files = [ - resolve(defaultPath, 'dist/index.js'), - resolve(defaultPath, 'dist/index.es.js'), - resolve(defaultPath, 'dist/index.d.ts'), - ] - for (const file of files) { + const files = { + [resolve(defaultPath, 'dist/index.js')]: [ + `const jiti = require('jiti')()`, + `module.exports = jiti('./../src/index')`, + ].join('\n'), + [resolve( + defaultPath, + 'dist/index.es.js' + )]: `export * from './../src/index'`, + [resolve( + defaultPath, + 'dist/index.d.ts' + )]: `export * from './../src/index'`, + } + for (const file in files) { await remove(file) expect(existsSync(file)).toBeFalsy() } await core.createStubs() - for (const file of files) { + for (const file in files) { expect( readFileSync(file) .toString() - .replace(/from '.*\/fixture/, "from '/fixture") - ).toBe(`export * from './../src/index'`) + .replace(/'.*\/fixture/, "'/fixture") + ).toBe(files[file]) } }) diff --git a/src/core/package/index.ts b/src/core/package/index.ts index c7f898c..a2bd10b 100644 --- a/src/core/package/index.ts +++ b/src/core/package/index.ts @@ -342,29 +342,40 @@ export class Package { const absPath = entrypoint.replace(/(\.[jt]s)$/, '') await writeFile( binary, - `#!/usr/bin/env node\nconst jiti = require('jiti')()\nmodule.exports = jiti('${absPath}')` + [ + `#!/usr/bin/env node`, + `const jiti = require('jiti')()`, + `module.exports = jiti('${absPath}')`, + ].join('\n') ) await this.setBinaryPermissions() }) } - async createStub(path: string | undefined) { + async createStub(path: string | undefined, cjs = false) { if (!path || !this.entrypoint || !this.options.build) return const outFile = this.resolvePath(path) const outDir = dirname(outFile) if (!existsSync(outDir)) await mkdirp(outDir) const relativeEntrypoint = relative(outDir, this.entrypoint).replace( - /(\.[jt]s)$/, + /(\.[cm]?[jt]s)$/, '' ) - await writeFile(outFile, `export * from './${relativeEntrypoint}'`) + const stub = cjs + ? [ + `const jiti = require('jiti')()`, + `module.exports = jiti('./${relativeEntrypoint}')`, + ].join('\n') + : `export * from './${relativeEntrypoint}'` + + await writeFile(outFile, stub) } async createStubs() { return Promise.all([ this.createBinaryStubs(), - this.createStub(this.pkg.main), + this.createStub(this.pkg.main, true), this.createStub(this.pkg.module), this.createStub(this.pkg.types), ])