Skip to content

Commit 24e90d1

Browse files
committed
fix: πŸ› prevent including external file if content is not empty
βœ… Closes: #183
1 parent cdc7050 commit 24e90d1

13 files changed

+63
-28
lines changed

Diff for: β€Žsrc/modules/language.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { basename } from 'path';
22

33
import { PreprocessorArgs } from '../types';
44

5-
export const LANG_DICT = new Map([
5+
export const ALIAS_MAP = new Map([
66
['pcss', 'css'],
77
['postcss', 'css'],
88
['sass', 'scss'],
@@ -13,7 +13,7 @@ export const LANG_DICT = new Map([
1313
]);
1414

1515
export const addLanguageAlias = (entries: Array<[string, string]>) =>
16-
entries.forEach((entry) => LANG_DICT.set(...entry));
16+
entries.forEach((entry) => ALIAS_MAP.set(...entry));
1717

1818
export const getLanguage = (
1919
attributes: PreprocessorArgs['attributes'],
@@ -44,7 +44,7 @@ export const getLanguage = (
4444
}
4545

4646
return {
47-
lang: LANG_DICT.get(lang) || lang,
47+
lang: ALIAS_MAP.get(lang) || lang,
4848
alias: lang,
4949
};
5050
};

Diff for: β€Žsrc/modules/parseFile.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ export const parseFile = async (
2727
) => {
2828
const dependencies = [];
2929

30-
if (attributes.src) {
30+
/** only include src file if content of tag is empty */
31+
if (attributes.src && content.trim().length === 0) {
3132
// istanbul ignore if
3233
if (typeof attributes.src !== 'string') {
3334
throw new Error('src attribute must be string');

Diff for: β€Žsrc/processors/babel.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { PreprocessorGroup, Options } from '../types';
22
import { concat } from '../modules/concat';
33
import { parseFile } from '../modules/parseFile';
44

5-
export default (options: Options.Babel): PreprocessorGroup => ({
5+
export default (options?: Options.Babel): PreprocessorGroup => ({
66
async script(svelteFile) {
77
const { default: transformer } = await import('../transformers/babel');
88

Diff for: β€Žsrc/processors/coffeescript.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { PreprocessorGroup, Options } from '../types';
22
import { parseFile } from '../modules/parseFile';
33
import { concat } from '../modules/concat';
44

5-
export default (options: Options.Coffeescript): PreprocessorGroup => ({
5+
export default (options?: Options.Coffeescript): PreprocessorGroup => ({
66
async script(svelteFile) {
77
const { default: transformer } = await import(
88
'../transformers/coffeescript'

Diff for: β€Žsrc/processors/less.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { PreprocessorGroup, Options } from '../types';
22
import { parseFile } from '../modules/parseFile';
33
import { concat } from '../modules/concat';
44

5-
export default (options: Options.Less): PreprocessorGroup => ({
5+
export default (options?: Options.Less): PreprocessorGroup => ({
66
async style(svelteFile) {
77
const { default: transformer } = await import('../transformers/less');
88
const {

Diff for: β€Žsrc/processors/postcss.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { PreprocessorGroup, Options } from '../types';
33
import { concat } from '../modules/concat';
44

55
/** Adapted from https://github.com/TehShrike/svelte-preprocess-postcss */
6-
export default (options: Options.Postcss): PreprocessorGroup => ({
6+
export default (options?: Options.Postcss): PreprocessorGroup => ({
77
async style(svelteFile) {
88
const { default: transformer } = await import('../transformers/postcss');
99
const { content, filename, attributes, dependencies } = await parseFile(

Diff for: β€Žsrc/processors/pug.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Options, PreprocessorGroup } from '../types';
22

3-
export default (options: Options.Pug): PreprocessorGroup => ({
3+
export default (options?: Options.Pug): PreprocessorGroup => ({
44
async markup({ content, filename }) {
55
const { default: transformer } = await import('../transformers/pug');
66

Diff for: β€Žsrc/processors/scss.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { parseFile } from '../modules/parseFile';
22
import { PreprocessorGroup, Options } from '../types';
33
import { concat } from '../modules/concat';
44

5-
export default (options: Options.Sass): PreprocessorGroup => ({
5+
export default (options?: Options.Sass): PreprocessorGroup => ({
66
async style(svelteFile) {
77
const { default: transformer } = await import('../transformers/scss');
88
const {

Diff for: β€Žsrc/processors/stylus.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { parseFile } from '../modules/parseFile';
22
import { Options, PreprocessorGroup } from '../types';
33
import { concat } from '../modules/concat';
44

5-
export default (options: Options.Stylus): PreprocessorGroup => ({
5+
export default (options?: Options.Stylus): PreprocessorGroup => ({
66
async style(svelteFile) {
77
const { default: transformer } = await import('../transformers/stylus');
88
const {

Diff for: β€Žsrc/processors/typescript.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Options, PreprocessorGroup } from '../types';
22
import { parseFile } from '../modules/parseFile';
33
import { concat } from '../modules/concat';
44

5-
export default (options: Options.Typescript): PreprocessorGroup => ({
5+
export default (options?: Options.Typescript): PreprocessorGroup => ({
66
async script(svelteFile) {
77
const { default: transformer } = await import('../transformers/typescript');
88
const {

Diff for: β€Žtest/autoProcess/externalFiles.test.ts

+20-15
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,29 @@ const {
1010
style: styleProcessor,
1111
} = getAutoPreprocess();
1212

13-
const getBaseObj = (src: string) => ({
14-
content: `<template src="./fixtures/template.html"></template>
15-
<style src="./fixtures/style.css"></style>
16-
<script src="./fixtures/script.js"></script>`,
17-
filename: resolve(__dirname, '..', 'App.svelte'),
18-
attributes: { src: `./fixtures/${src}` },
19-
});
20-
21-
let markup: Processed;
22-
let script: Processed;
23-
let style: Processed;
24-
2513
describe('external files', () => {
14+
let markup: Processed;
15+
let script: Processed;
16+
let style: Processed;
17+
2618
beforeAll(async () => {
2719
[markup, script, style] = [
28-
await markupProcessor(getBaseObj('template.html')),
29-
await scriptProcessor(getBaseObj('script.js')),
30-
await styleProcessor(getBaseObj('style.css')),
20+
await markupProcessor({
21+
content: `<template src="./fixtures/template.html"></template>
22+
<style src="./fixtures/style.css"></style>
23+
<script src="./fixtures/script.js"></script>`,
24+
filename: resolve(__dirname, '..', 'App.svelte'),
25+
}),
26+
await scriptProcessor({
27+
content: ``,
28+
filename: resolve(__dirname, '..', 'App.svelte'),
29+
attributes: { src: `./fixtures/script.js` },
30+
}),
31+
await styleProcessor({
32+
content: ``,
33+
filename: resolve(__dirname, '..', 'App.svelte'),
34+
attributes: { src: `./fixtures/style.css` },
35+
}),
3136
];
3237
});
3338

Diff for: β€Žtest/modules.test.ts

+27
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { resolve } from 'path';
22

3+
import { getTestAppFilename, getFixtureContent } from './utils';
4+
import { parseFile } from '../src/modules/parseFile';
35
import { importAny } from '../src/modules/importAny';
46
import { getIncludePaths } from '../src/modules/getIncludePaths';
57
import { globalifySelector } from '../src/modules/globalifySelector';
@@ -70,3 +72,28 @@ describe('globalifySelector', () => {
7072
expect(globalifySelector(selector2)).toEqual(':global(div), :global(span)');
7173
});
7274
});
75+
76+
describe(`parse svelte file`, () => {
77+
it('should only include src files if content is empty', async () => {
78+
let parsedFile = await parseFile(
79+
{
80+
content: '',
81+
attributes: { src: './fixtures/style.scss' },
82+
filename: getTestAppFilename(),
83+
},
84+
'css',
85+
);
86+
87+
expect(parsedFile.content).toEqual(getFixtureContent('style.scss'));
88+
89+
parsedFile = await parseFile(
90+
{
91+
...parsedFile,
92+
attributes: { src: './fixtures/style.css' },
93+
},
94+
'css',
95+
);
96+
97+
expect(parsedFile.content).toEqual(getFixtureContent('style.scss'));
98+
});
99+
});

Diff for: β€Žtest/utils.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import {
88

99
export const CSS_PATTERN = /div(\.svelte-\w{4,7})?\s*\{\s*color:\s*(red|#f00);?\s*\}/;
1010

11+
export const getTestAppFilename = () => resolve(__dirname, 'App.svelte');
12+
1113
export const preprocess = async (input: string, opts: any) =>
12-
sveltePreprocess(input, opts, { filename: resolve(__dirname, 'App.svelte') });
14+
sveltePreprocess(input, opts, { filename: getTestAppFilename() });
1315

1416
const compile = async (input: string, opts: any) => {
1517
const preprocessed = await exports.preprocess(input, opts);

0 commit comments

Comments
Β (0)