diff --git a/docs/svelte.md b/docs/svelte.md
new file mode 100644
index 000000000..fe08acf9e
--- /dev/null
+++ b/docs/svelte.md
@@ -0,0 +1,78 @@
+# Svelte
+
+`modular-css-svelte` provides a [svelte preprocessor](https://svelte.technology/guide#preprocessing) that can convert inline `"
`;
+
+exports[`/svelte.js should support external css via 1`] = `
+"
+
+
+"
+`;
+
+exports[`/svelte.js should support external css via 2`] = `
+"/* packages/svelte/test/specimens/simple.css */
+.fooga {
+ color: red;
+}
+/* packages/svelte/test/specimens/dependencies.css */
+.wooga {
+
+ background: blue;
+}
+/* packages/svelte/test/specimens/external.css */
+.flex {
+ display: flex;
+}
+.text {
+ color: #000;
+}
+.active {
+ color: #F00;
+}
+"
+`;
diff --git a/packages/svelte/test/rollup.test.js b/packages/svelte/test/rollup.test.js
index 60b52fa9a..a9b4e968f 100644
--- a/packages/svelte/test/rollup.test.js
+++ b/packages/svelte/test/rollup.test.js
@@ -61,4 +61,29 @@ describe("/rollup.js", () => {
expect(() => read("svelte.css")).toThrow();
});
});
+
+ it("should support external css via ", () => {
+ const { preprocess, plugin } = processor({
+ css : "./packages/svelte/test/output/svelte.css",
+ namer
+ });
+
+ return rollup({
+ input : require.resolve("./specimens/svelte-external.html"),
+ plugins : [
+ require("rollup-plugin-svelte")({
+ preprocess
+ }),
+ plugin
+ ]
+ })
+ .then((bundle) => bundle.write({
+ format : "es",
+ file : "./packages/svelte/test/output/svelte.js"
+ }))
+ .then(() => {
+ expect(cleanup(read("svelte.js"))).toMatchSnapshot();
+ expect(read("svelte.css")).toMatchSnapshot();
+ });
+ });
});
diff --git a/packages/svelte/test/specimens/external.css b/packages/svelte/test/specimens/external.css
new file mode 100644
index 000000000..1d1fc5ed7
--- /dev/null
+++ b/packages/svelte/test/specimens/external.css
@@ -0,0 +1,24 @@
+.flex {
+ display: flex;
+}
+
+.wrapper {
+ composes: flex;
+}
+
+.hd {
+ composes: flex;
+ composes: fooga from "./simple.css";
+}
+
+.bd {
+ composes: wooga from "./dependencies.css";
+}
+
+.text {
+ color: #000;
+}
+
+.active {
+ color: #F00;
+}
diff --git a/packages/svelte/test/specimens/svelte-both.html b/packages/svelte/test/specimens/svelte-both.html
new file mode 100644
index 000000000..a494e4a90
--- /dev/null
+++ b/packages/svelte/test/specimens/svelte-both.html
@@ -0,0 +1,35 @@
+
+
+
+
+
diff --git a/packages/svelte/test/specimens/svelte-external.html b/packages/svelte/test/specimens/svelte-external.html
new file mode 100644
index 000000000..996f3d7e2
--- /dev/null
+++ b/packages/svelte/test/specimens/svelte-external.html
@@ -0,0 +1,8 @@
+
+
+
diff --git a/packages/svelte/test/svelte.test.js b/packages/svelte/test/svelte.test.js
index 1732a7416..39b8138e1 100644
--- a/packages/svelte/test/svelte.test.js
+++ b/packages/svelte/test/svelte.test.js
@@ -34,6 +34,28 @@ describe("/svelte.js", () => {
);
});
+ it("should support external css via ", () => {
+ const { processor, preprocess } = plugin({
+ css : "./packages/svelte/test/output/svelte.css",
+ namer
+ });
+
+ const filename = require.resolve("./specimens/svelte-external.html");
+
+ return svelte.preprocess(
+ fs.readFileSync(filename, "utf8"),
+ Object.assign({}, preprocess, { filename })
+ )
+ .then((processed) => {
+ expect(processed.toString()).toMatchSnapshot();
+
+ return processor.output();
+ })
+ .then((output) =>
+ expect(output.css).toMatchSnapshot()
+ );
+ });
+
it("should ignore files without