Skip to content

Commit 395e98c

Browse files
committedJul 14, 2020
wip
1 parent 9fedf05 commit 395e98c

15 files changed

+88
-20
lines changed
 

‎docs/getting-started.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ Now we're in need of a SCSS file to hold some variables. Let's assume it's creat
213213
$primary-color: red;
214214
```
215215

216-
As in any SCSS project, we could just `@use './path/to/variables.scss`, but that can also become boring. `svelte-preprocess` [accepts a `prependData`](/docs/preprocessing.md#preprocessors) for almost every processor. Let's use it to prepend our import!
216+
As in any SCSS project, we could just `@use './path/to/variables.scss`, but that can also become boring. `svelte-preprocess` [accepts a `additionalData`](/docs/preprocessing.md#preprocessors) for almost every processor. Let's use it to prepend our import!
217217

218218
```diff
219219
import svelte from 'rollup-plugin-svelte'
@@ -240,7 +240,7 @@ export default {
240240
+ // We can use a path relative to the root because
241241
+ // svelte-preprocess automatically adds it to `includePaths`
242242
+ // if none is defined.
243-
+ prependData: `@import 'src/styles/variables.scss';`
243+
+ additionalData: `@import 'src/styles/variables.scss';`
244244
+ },
245245
postcss: {
246246
plugins: [require('autoprefixer')()]

‎docs/migration-guide.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ sveltePreprocess({
2828
});
2929
```
3030

31-
In `v4`, not only `scss`, but every language preprocessor accepts the new `prependData` property. The `data` property is no longer supported.
31+
In `v4`, not only `scss`, but every language preprocessor accepts the new `additionalData` property. The `data` property is no longer supported.
3232

3333
```js
3434
import sveltePreprocess from 'svelte-preprocess';
3535

3636
sveltePreprocess({
3737
scss: {
38-
prependData: '// prepended content for scss',
38+
additionalData: '// prepended content for scss',
3939
},
4040
typescript: {
41-
prependData: '// prepended content for ts',
41+
additionalData: '// prepended content for ts',
4242
},
4343
});
4444
```

‎docs/preprocessing.md

+42-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- [Stand-alone processors](#stand-alone-processors)
1010
- [Difference between the auto and stand-alone modes](#difference-between-the-auto-and-stand-alone-modes)
1111
- [Preprocessors](#preprocessors)
12+
- [Options](#options)
1213
- [Babel](#babel)
1314
- [CoffeeScript](#coffeescript)
1415
- [Less](#less)
@@ -247,11 +248,49 @@ export default {
247248

248249
## Preprocessors
249250

251+
### Options
252+
250253
Besides the options of each preprocessors, `svelte-preprocess` also supports these custom options:
251254

252-
| Option | Default | Description |
253-
| ------------- | ------- | -------------------------------------------------------------------------------------- |
254-
| `prependData` | `''` | `string` will be prepended to every component part that runs through the preprocessor. |
255+
| Option | Default | Description |
256+
| ----------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
257+
| [`additionalData`](#additionalData) | `undefined` | If a `string`, the value will be prepended to every component part that runs through the preprocessor. If a `function`, it expects to return the content to be preprocessed. |
258+
259+
#### `additionalData`
260+
261+
Type: `string | ({ content: string, filename: string }) => string`
262+
263+
If a `string`, the value will be prepended to every component part that runs through the preprocessor. If a `function`, it expects to return the content to be preprocessed.
264+
265+
```js
266+
import svelte from 'rollup-plugin-svelte';
267+
268+
import autoPreprocess from 'svelte-preprocess';
269+
270+
export default {
271+
plugins: [
272+
svelte({
273+
preprocess: autoPreprocess({
274+
typescript: {
275+
additionalData: '// prepended content',
276+
},
277+
scss: {
278+
// Passing a function
279+
additionalData({ content, filename }) {
280+
return [
281+
// prepended
282+
`// I'm at the top of the file`,
283+
content,
284+
// appended
285+
`// And I'm at the bottom!`,
286+
].join('\n');
287+
},
288+
},
289+
}),
290+
}),
291+
],
292+
};
293+
```
255294

256295
### Babel
257296

‎src/autoProcess.ts

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ export function autoPreprocess(
169169
const transformerOptions = getTransformerOptions(lang, alias);
170170

171171
content = prepareContent({
172+
filename,
172173
options: transformerOptions,
173174
content,
174175
});

‎src/modules/prepareContent.ts

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import stripIndent from 'strip-indent';
22

3+
import { ContentModifier } from '../types/options';
4+
35
export function prepareContent({
46
options,
57
content,
8+
filename,
69
}: {
7-
options: any;
10+
options: ContentModifier & unknown;
811
content: string;
12+
filename: string;
913
}) {
1014
if (typeof options !== 'object') {
1115
return content;
@@ -14,7 +18,21 @@ export function prepareContent({
1418
content = stripIndent(content);
1519

1620
if (options.prependData) {
17-
content = `${options.prependData}\n${content}`;
21+
console.warn(
22+
'[svelte-preprocess] 🙊 `options.prependData` is deprecated. Use `options.additionalData` instead.',
23+
);
24+
25+
if (!options.additionalData) {
26+
content = `${options.prependData}\n${content}`;
27+
}
28+
}
29+
30+
if (options.additionalData) {
31+
if (typeof options.additionalData === 'function') {
32+
content = options.additionalData({ content, filename });
33+
} else {
34+
content = `${options.prependData}\n${content}`;
35+
}
1836
}
1937

2038
return content;

‎src/processors/babel.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default (options?: Options.Babel): PreprocessorGroup => ({
1111
svelteFile,
1212
);
1313

14-
content = prepareContent({ options, content });
14+
content = prepareContent({ options, content, filename });
1515

1616
const transformed = await transformer({
1717
content,

‎src/processors/coffeescript.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default (options?: Options.Coffeescript): PreprocessorGroup => ({
1515
dependencies,
1616
} = await getTagInfo(svelteFile);
1717

18-
content = prepareContent({ options, content });
18+
content = prepareContent({ options, content, filename });
1919

2020
if (lang !== 'coffeescript') {
2121
return { code: content };

‎src/processors/less.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default (options?: Options.Less): PreprocessorGroup => ({
1414
dependencies,
1515
} = await getTagInfo(svelteFile);
1616

17-
content = prepareContent({ options, content });
17+
content = prepareContent({ options, content, filename });
1818

1919
if (lang !== 'less') {
2020
return { code: content };

‎src/processors/postcss.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default (options?: Options.Postcss): PreprocessorGroup => ({
1111
svelteFile,
1212
);
1313

14-
content = prepareContent({ options, content });
14+
content = prepareContent({ options, content, filename });
1515

1616
/** If manually passed a plugins array, use it as the postcss config */
1717
const transformed = await transformer({

‎src/processors/pug.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export default (options?: Options.Pug): PreprocessorGroup => ({
55
async markup({ content, filename }) {
66
const { transformer } = await import('../transformers/pug');
77

8-
content = prepareContent({ options, content });
8+
content = prepareContent({ options, content, filename });
99

1010
return transformer({ content, filename, options });
1111
},

‎src/processors/scss.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default (options?: Options.Sass): PreprocessorGroup => ({
1515
dependencies,
1616
} = await getTagInfo(svelteFile);
1717

18-
content = prepareContent({ options, content });
18+
content = prepareContent({ options, content, filename });
1919

2020
if (lang !== 'scss') {
2121
return { code: content };

‎src/processors/stylus.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default (options?: Options.Stylus): PreprocessorGroup => ({
1414
dependencies,
1515
} = await getTagInfo(svelteFile);
1616

17-
content = prepareContent({ options, content });
17+
content = prepareContent({ options, content, filename });
1818

1919
if (lang !== 'stylus') {
2020
return { code: content };

‎src/processors/typescript.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default (options?: Options.Typescript): PreprocessorGroup => ({
1414
dependencies,
1515
} = await getTagInfo(svelteFile);
1616

17-
content = prepareContent({ options, content });
17+
content = prepareContent({ options, content, filename });
1818

1919
if (lang !== 'typescript') {
2020
return { code: content };

‎src/transformers/scss.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const transformer: Transformer<Options.Sass> = async ({
3333
implementation = sass = mod.default;
3434
}
3535

36-
const { renderSync, prependData, ...restOptions } = {
36+
const { renderSync, ...restOptions } = {
3737
...options,
3838
includePaths: getIncludePaths(filename, options.includePaths),
3939
outFile: `${filename}.css`,

‎src/types/options.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,18 @@ import { Options as SassOptions, render, renderSync } from 'sass';
33
import { Options as PugOptions } from 'pug';
44
import { TransformOptions as BabelOptions } from '@babel/core';
55

6-
type ContentModifier = {
6+
type AdditionalDataMethod = ({
7+
content,
8+
filename,
9+
}: {
10+
content: string;
11+
filename: string;
12+
}) => string;
13+
14+
export type ContentModifier = {
15+
/** @deprecated Use additionalData instead */
716
prependData?: string;
17+
additionalData?: string | AdditionalDataMethod;
818
};
919

1020
export type Coffeescript = {

0 commit comments

Comments
 (0)
Failed to load comments.