From 613dc0283185f87b6d828f27a84e83b968e7cf45 Mon Sep 17 00:00:00 2001 From: Igor Oleinikov Date: Tue, 21 Jan 2020 11:23:21 -0800 Subject: [PATCH 1/2] Add fixtures and baselines --- .../minification-only/issue142.tsx.baseline | 40 +++++++++++++++++++ .../minification/issue142.tsx.baseline | 40 +++++++++++++++++++ .../fixtures/minification/issue142.tsx | 10 +++++ 3 files changed, 90 insertions(+) create mode 100644 src/__tests__/baselines/minification-only/issue142.tsx.baseline create mode 100644 src/__tests__/baselines/minification/issue142.tsx.baseline create mode 100644 src/__tests__/fixtures/minification/issue142.tsx diff --git a/src/__tests__/baselines/minification-only/issue142.tsx.baseline b/src/__tests__/baselines/minification-only/issue142.tsx.baseline new file mode 100644 index 0000000..674b191 --- /dev/null +++ b/src/__tests__/baselines/minification-only/issue142.tsx.baseline @@ -0,0 +1,40 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`issue142.tsx 1`] = ` + +File: issue142.tsx +Source code: + + declare const styled: any; + + const Header = styled.div\` + display: flex; + \\t align-items: center; + justify-content: space-between; + \\t \\t font-weight: 600; + padding: 0.8em 1.6em;\\t \\t + background: peachpuff; + \`; + + +TypeScript before transform: + + declare const styled: any; + const Header = styled.div \` + display: flex; + \\t align-items: center; + justify-content: space-between; + \\t \\t font-weight: 600; + padding: 0.8em 1.6em;\\t \\t + background: peachpuff; + \`; + + +TypeScript after transform: + + declare const styled: any; + const Header = styled.div \` display:flex; align-items:center; justify-content:space-between; font-weight:600; padding:0.8em 1.6em; background:peachpuff;\`; + + + +`; diff --git a/src/__tests__/baselines/minification/issue142.tsx.baseline b/src/__tests__/baselines/minification/issue142.tsx.baseline new file mode 100644 index 0000000..64c1405 --- /dev/null +++ b/src/__tests__/baselines/minification/issue142.tsx.baseline @@ -0,0 +1,40 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`issue142.tsx 1`] = ` + +File: issue142.tsx +Source code: + + declare const styled: any; + + const Header = styled.div\` + display: flex; + \\t align-items: center; + justify-content: space-between; + \\t \\t font-weight: 600; + padding: 0.8em 1.6em;\\t \\t + background: peachpuff; + \`; + + +TypeScript before transform: + + declare const styled: any; + const Header = styled.div \` + display: flex; + \\t align-items: center; + justify-content: space-between; + \\t \\t font-weight: 600; + padding: 0.8em 1.6em;\\t \\t + background: peachpuff; + \`; + + +TypeScript after transform: + + declare const styled: any; + const Header = styled.div.withConfig({ displayName: "Header" }) \` display:flex; align-items:center; justify-content:space-between; font-weight:600; padding:0.8em 1.6em; background:peachpuff;\`; + + + +`; diff --git a/src/__tests__/fixtures/minification/issue142.tsx b/src/__tests__/fixtures/minification/issue142.tsx new file mode 100644 index 0000000..9bb9ac2 --- /dev/null +++ b/src/__tests__/fixtures/minification/issue142.tsx @@ -0,0 +1,10 @@ +declare const styled: any; + +const Header = styled.div` + display: flex; +\t align-items: center; + justify-content: space-between; +\t \t font-weight: 600; + padding: 0.8em 1.6em;\t \t + background: peachpuff; +`; From 519cbcefcefb7df725b5591ad3a526613c5dbe13 Mon Sep 17 00:00:00 2001 From: Igor Oleinikov Date: Tue, 21 Jan 2020 11:25:59 -0800 Subject: [PATCH 2/2] Fix tab minification --- .../minification-only/issue142.tsx.baseline | 2 +- .../baselines/minification/issue142.tsx.baseline | 2 +- src/minify.ts | 14 +++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/__tests__/baselines/minification-only/issue142.tsx.baseline b/src/__tests__/baselines/minification-only/issue142.tsx.baseline index 674b191..897ef04 100644 --- a/src/__tests__/baselines/minification-only/issue142.tsx.baseline +++ b/src/__tests__/baselines/minification-only/issue142.tsx.baseline @@ -33,7 +33,7 @@ TypeScript before transform: TypeScript after transform: declare const styled: any; - const Header = styled.div \` display:flex; align-items:center; justify-content:space-between; font-weight:600; padding:0.8em 1.6em; background:peachpuff;\`; + const Header = styled.div \`display:flex;align-items:center;justify-content:space-between;font-weight:600;padding:0.8em 1.6em;background:peachpuff;\`; diff --git a/src/__tests__/baselines/minification/issue142.tsx.baseline b/src/__tests__/baselines/minification/issue142.tsx.baseline index 64c1405..9ad0559 100644 --- a/src/__tests__/baselines/minification/issue142.tsx.baseline +++ b/src/__tests__/baselines/minification/issue142.tsx.baseline @@ -33,7 +33,7 @@ TypeScript before transform: TypeScript after transform: declare const styled: any; - const Header = styled.div.withConfig({ displayName: "Header" }) \` display:flex; align-items:center; justify-content:space-between; font-weight:600; padding:0.8em 1.6em; background:peachpuff;\`; + const Header = styled.div.withConfig({ displayName: "Header" }) \`display:flex;align-items:center;justify-content:space-between;font-weight:600;padding:0.8em 1.6em;background:peachpuff;\`; diff --git a/src/minify.ts b/src/minify.ts index 64927ea..ca3112b 100644 --- a/src/minify.ts +++ b/src/minify.ts @@ -14,11 +14,15 @@ function isSymbol(ch: string) { return ch == ';' || ch == ':' || ch == '{' || ch == '}' || ch == ','; } +function isSpace(ch: string) { + return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t'; +} + const stateMachine: StateMachine = { ';': { next(ch) { if (ch == '\'' || ch == '"' || ch == '(') return { state: ch } - if (ch == ' ' || ch == '\n' || ch == '\r') return { skipEmit: true } + if (isSpace(ch)) return { skipEmit: true } if (ch == '/') return { state: ';/', skipEmit: true } if (isSymbol(ch)) return; return { state: 'x' } @@ -30,7 +34,7 @@ const stateMachine: StateMachine = { ';$': { // after placeholder next(ch) { if (ch == '\'' || ch == '"' || ch == '(') return { state: ch } - if (ch == ' ' || ch == '\n' || ch == '\r') return { skipEmit: true, state: ' ' } // we may need a space + if (isSpace(ch)) return { skipEmit: true, state: ' ' } // we may need a space if (ch == '/') return { state: '/', skipEmit: true } if (isSymbol(ch)) return { state: ';' }; return { state: 'x' } @@ -39,7 +43,7 @@ const stateMachine: StateMachine = { 'x': { next(ch) { if (ch == '\'' || ch == '"' || ch == '(') return { state: ch } - if (ch == ' ' || ch == '\n' || ch == '\r') return { state: ' ', skipEmit: true } + if (isSpace(ch)) return { state: ' ', skipEmit: true } if (ch == '/') return { state: '/', skipEmit: true } if (isSymbol(ch)) return { state: ';' }; } @@ -47,7 +51,7 @@ const stateMachine: StateMachine = { ' ': { // may need space next(ch) { if (ch == '\'' || ch == '"' || ch == '(') return { state: ch, emit: ' ' + ch } - if (ch == ' ' || ch == '\n' || ch == '\r') return { state: ' ', skipEmit: true } + if (isSpace(ch)) return { state: ' ', skipEmit: true } if (ch == '/') return { state: '/', skipEmit: true } if (isSymbol(ch)) return { state: ';' }; return { state: 'x', emit: ' ' + ch }; @@ -59,7 +63,7 @@ const stateMachine: StateMachine = { '\n': { // may need new line next(ch) { if (ch == '\'' || ch == '"' || ch == '(') return { state: ch, emit: '\n' + ch } - if (ch == ' ' || ch == '\n' || ch == '\r') return { state: '\n', skipEmit: true } + if (isSpace(ch)) return { state: '\n', skipEmit: true } if (ch == '/') return { state: '/', emit: '\n' } if (isSymbol(ch)) return { state: ';', emit: '\n' + ch }; return { state: 'x', emit: '\n' + ch };