Skip to content

Commit f3d9623

Browse files
committed
refactor(transformers): refactor transformers into array of transformation factory
1 parent 6889f52 commit f3d9623

File tree

3 files changed

+36
-25
lines changed

3 files changed

+36
-25
lines changed

rollup.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
import * as path from 'path';
33
import tsTransformer from './transform';
4-
//import { terser } from 'rollup-plugin-terser';
4+
// import { terser } from 'rollup-plugin-terser';
55

66
const typescript = require('rollup-plugin-typescript2');
77
const resolve = require('rollup-plugin-node-resolve');
@@ -13,7 +13,7 @@ const bundleOptions = {
1313
plugins: [
1414
typescript({
1515
transformers: [service => ({
16-
before: [ tsTransformer(service.getProgram()) ],
16+
before: [[],...tsTransformer(service.getProgram())],
1717
after: []
1818
})],
1919
useTsconfigDeclarationDir: true,

transform.ts

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,19 @@
11
// TODO: figuire out how to use this on rollup.config.js
22
import * as ts from 'typescript';
33

4-
export default function transformer(program: ts.Program): ts.TransformerFactory<ts.SourceFile> {
5-
return (context: ts.TransformationContext) => (file: ts.SourceFile) => changeTransform(program, context, file);
4+
export default function transformer(program: ts.Program): Array<ts.TransformerFactory<ts.SourceFile>> {
5+
const tsSourceTransformers: Array<ts.TransformerFactory<ts.SourceFile>> = [
6+
(context: ts.TransformationContext) => (file: ts.SourceFile) => extendClass(program, context, file),
7+
(context: ts.TransformationContext) => (file: ts.SourceFile) => addImports(context, file)
8+
]
9+
return tsSourceTransformers;
610
}
711

812
// Simple transform add extends CustomElement
9-
export function changeTransform(program: ts.Program, context: ts.TransformationContext, sf: ts.SourceFile) {
13+
export function extendClass(program: ts.Program, context: ts.TransformationContext, sf: ts.SourceFile) {
1014
const visitor: ts.Visitor = (node) => {
1115
// Add CustomHTMLElement to import
1216
if (!ts.isClassDeclaration(node)) {
13-
if (ts.isImportDeclaration(node) && isElementImport(node, sf)) {
14-
const { importClause: { namedBindings } } = node
15-
const { elements } = namedBindings as ts.NamedImports
16-
17-
const specifiers: Array<ts.ImportSpecifier> = [...elements]
18-
19-
const hasCustomHTMLElementImport = elements.some(n => n.getText().indexOf('CustomHTMLElement') > -1)
20-
21-
if (!hasCustomHTMLElementImport) {
22-
specifiers.push(ts.createImportSpecifier(void 0, ts.createIdentifier('CustomHTMLElement')))
23-
}
24-
25-
return ts.createImportDeclaration(
26-
[],
27-
node.modifiers,
28-
ts.createImportClause(void 0, ts.createNamedImports(specifiers)),
29-
node.moduleSpecifier
30-
)
31-
}
3217
return ts.visitEachChild(node, visitor, context);
3318
}
3419

@@ -67,6 +52,31 @@ export function changeTransform(program: ts.Program, context: ts.TransformationC
6752
return ts.visitNode(sf, visitor);
6853
};
6954

55+
export function addImports(context: ts.TransformationContext, sf: ts.SourceFile) {
56+
const visitor: ts.Visitor = (node) => {
57+
if (ts.isImportDeclaration(node) && isElementImport(node, sf)) {
58+
const { importClause: { namedBindings } } = node
59+
const { elements } = namedBindings as ts.NamedImports
60+
61+
const specifiers: Array<ts.ImportSpecifier> = [...elements]
62+
63+
const hasCustomHTMLElementImport = elements.some(n => n.getText().indexOf('CustomHTMLElement') > -1)
64+
65+
if (!hasCustomHTMLElementImport) {
66+
specifiers.push(ts.createImportSpecifier(void 0, ts.createIdentifier('CustomHTMLElement')))
67+
}
68+
69+
return ts.createImportDeclaration(
70+
[],
71+
node.modifiers,
72+
ts.createImportClause(void 0, ts.createNamedImports(specifiers)),
73+
node.moduleSpecifier
74+
)
75+
}
76+
return ts.visitEachChild(node, visitor, context);
77+
};
78+
return ts.visitNode(sf, visitor);
79+
};
7080

7181
function isElementDecorator(node: ts.Decorator, typeChecker: ts.TypeChecker): boolean {
7282
if (!ts.isCallExpression(node.expression)) {

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"custom-elements-ts": ["src/custom-element"]
1616
},
1717
"removeComments": true,
18-
"target": "es6"
18+
"target": "es6",
19+
"sourceMap": true
1920
},
2021
"include": [
2122
"./**/*.ts"

0 commit comments

Comments
 (0)