From 256e70a8d3fff2b25ce884cbda2725630d03e7c1 Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Tue, 13 Feb 2018 10:28:42 -0600 Subject: [PATCH] fix(transpile): remove unneded remove-imports transform because it is causing issues with wildcard imports. fixes #526 --- src/compiler/transpile/test/transpile.spec.ts | 29 +++++++ .../transpile/transformers/remove-imports.ts | 84 ------------------- src/compiler/transpile/transpile.ts | 2 - 3 files changed, 29 insertions(+), 86 deletions(-) delete mode 100644 src/compiler/transpile/transformers/remove-imports.ts diff --git a/src/compiler/transpile/test/transpile.spec.ts b/src/compiler/transpile/test/transpile.spec.ts index 14812dfb0cb..286aa9d0bba 100644 --- a/src/compiler/transpile/test/transpile.spec.ts +++ b/src/compiler/transpile/test/transpile.spec.ts @@ -376,6 +376,35 @@ describe('transpile', () => { expect(r.components[0].dependencies).toEqual(['cmp-b', 'cmp-c']); }); + it('wildcard imports should remain within component files', async () => { + c.config.bundles = [ { components: ['cmp-a']}, { components: ['cmp-b'] } ]; + await c.fs.writeFiles({ + '/src/new-dir/cmp-a.tsx': ` + import * as file from './file'; + @Component({ tag: 'cmp-a' }) export class CmpA { + render() { + return file.file; + } + } + `, + '/src/new-dir/cmp-b.tsx': ` + import * as file from './file'; + @Component({ tag: 'cmp-b' }) export class CmpB { + render() { + return file.file; + } + } + `, + '/src/new-dir/file.ts': `export const file = 'filetext';`, + }, { clearFileCache: true }); + + await c.fs.commit(); + + const r = await c.build(); + expect(r.diagnostics).toEqual([]); + expect(r.bundleBuildCount).toEqual(3); + }); + }); }); diff --git a/src/compiler/transpile/transformers/remove-imports.ts b/src/compiler/transpile/transformers/remove-imports.ts deleted file mode 100644 index 065cfa47233..00000000000 --- a/src/compiler/transpile/transformers/remove-imports.ts +++ /dev/null @@ -1,84 +0,0 @@ -import * as ts from 'typescript'; - - -// same as the "declare" variables in the root index.ts file -const REMOVE_GLOBALS = [ - 'Component', - 'Element', - 'Event', - 'h', - 'Listen', - 'Method', - 'Prop', - 'PropDidChange', - 'PropWillChange', - 'State', - 'Watch' -]; - - -export function removeImports(): ts.TransformerFactory { - - return (transformContext) => { - - function visitImport(importNode: ts.ImportDeclaration) { - if (!importNode.importClause || typeof importNode.importClause.namedBindings === 'undefined') { - return ts.visitEachChild(importNode, visit, transformContext); - } - - const importSpecifiers: ts.ImportSpecifier[] = []; - let hasKeeperImport = false; - - importNode.importClause.namedBindings.forEachChild(nb => { - if (nb.kind === ts.SyntaxKind.ImportSpecifier) { - const importSpecifier = nb as ts.ImportSpecifier; - - if (!isStencilDecorator(importNode, importSpecifier)) { - importSpecifiers.push(importSpecifier); - } - - } else { - hasKeeperImport = true; - } - }); - - if (importSpecifiers.length === 0 && !hasKeeperImport) { - // no named imports left, so let's remove the import statement entirely - return null; - } - - const namedImports = ts.createNamedImports(importSpecifiers); - const newImportClause = ts.updateImportClause(importNode.importClause, importNode.importClause.name, namedImports); - - return ts.updateImportDeclaration(importNode, importNode.decorators, importNode.modifiers, newImportClause, importNode.moduleSpecifier); - } - - - function visit(node: ts.Node): ts.VisitResult { - switch (node.kind) { - case ts.SyntaxKind.ImportDeclaration: - return visitImport(node as ts.ImportDeclaration); - default: - return ts.visitEachChild(node, visit, transformContext); - } - } - - return (tsSourceFile) => { - return visit(tsSourceFile) as ts.SourceFile; - }; - }; - -} - - -function isStencilDecorator(importNode: ts.ImportDeclaration, importSpecifier: ts.ImportSpecifier) { - if (importNode.moduleSpecifier) { - const importPath = importNode.moduleSpecifier.getText().replace(/\'|\"|\`/g, ''); - - if (importPath === '@stencil/core') { - return (REMOVE_GLOBALS.indexOf(importSpecifier.name.text) > -1); - } - } - - return false; -} diff --git a/src/compiler/transpile/transpile.ts b/src/compiler/transpile/transpile.ts index c3713f2b701..b1bf0da7fa1 100644 --- a/src/compiler/transpile/transpile.ts +++ b/src/compiler/transpile/transpile.ts @@ -12,7 +12,6 @@ import { moduleGraph } from './transformers/module-graph'; import { normalizeAssetsDir } from '../component-plugins/assets-plugin'; import { normalizeStyles } from './normalize-styles'; import { removeDecorators } from './transformers/remove-decorators'; -import { removeImports } from './transformers/remove-imports'; import { removeStencilImports } from './transformers/remove-stencil-imports'; import * as ts from 'typescript'; @@ -114,7 +113,6 @@ function transpileProgram(program: ts.Program, tsHost: ts.CompilerHost, config: addComponentMetadata(compilerCtx.moduleFiles) ], after: [ - removeImports(), removeStencilImports(), moduleGraph(config, buildCtx), componentDependencies(compilerCtx, buildCtx)