diff --git a/src/package.ts b/src/package.ts index 2d96ff73..ec8f2d3f 100644 --- a/src/package.ts +++ b/src/package.ts @@ -922,13 +922,20 @@ class LaunchEntryPointProcessor extends BaseProcessor { constructor(manifest: Manifest) { super(manifest); if (manifest.main) { - this.entryPoints.add(util.normalize(path.join('extension', manifest.main))); + this.entryPoints.add(util.normalize(path.join('extension', this.appendJSExt(manifest.main)))); } if (manifest.browser) { - this.entryPoints.add(util.normalize(path.join('extension', manifest.browser))); + this.entryPoints.add(util.normalize(path.join('extension', this.appendJSExt(manifest.browser)))); } } + appendJSExt(filePath: string): string { + if (filePath.endsWith('.js')) { + return filePath; + } + return filePath + '.js'; + } + onFile(file: IFile): Promise { this.entryPoints.delete(util.normalize(file.path)); return Promise.resolve(file); @@ -937,7 +944,9 @@ class LaunchEntryPointProcessor extends BaseProcessor { async onEnd(): Promise { if (this.entryPoints.size > 0) { const files: string = [...this.entryPoints].join(',\n '); - throw new Error(`Extension entrypoint(s) missing. Make sure these files exist and aren't ignored by '.vscodeignore':\n ${files}`); + throw new Error( + `Extension entrypoint(s) missing. Make sure these files exist and aren't ignored by '.vscodeignore':\n ${files}` + ); } } } diff --git a/src/test/package.test.ts b/src/test/package.test.ts index c780af1b..d8ee284b 100644 --- a/src/test/package.test.ts +++ b/src/test/package.test.ts @@ -1796,20 +1796,27 @@ describe('toContentTypes', () => { describe('LaunchEntryPointProcessor', () => { it('should detect when declared entrypoint is not in package', async () => { - const manifest = createManifest({ - main: 'main.js', - }); + const manifest = createManifest({ main: 'main.js' }); const files = [{ path: 'extension/browser.js', contents: Buffer.from('') }]; + let didErr = false; + try { await _toVsixManifest(manifest, files); } catch (err: any) { const message = err.message; didErr = message.includes('entrypoint(s) missing') && message.includes('main.js'); } + assert.ok(didErr); }); + it('should work even if .js extension is not used', async () => { + const manifest = createManifest({ main: 'out/src/extension' }); + const files = [{ path: 'extension/out/src/extension.js', contents: Buffer.from('') }]; + await _toVsixManifest(manifest, files); + }); + it('should accept manifest if no entrypoints defined', async () => { const manifest = createManifest({}); const files = [{ path: 'extension/something.js', contents: Buffer.from('') }];