]> Untitled Git - lemmy-ui.git/blob - fuse.ts
Initial commit.
[lemmy-ui.git] / fuse.ts
1 import { CSSPlugin, FuseBox, FuseBoxOptions, Sparky } from "fuse-box";\r
2 import path = require("path");\r
3 import TsTransformClasscat from "ts-transform-classcat";\r
4 import TsTransformInferno from "ts-transform-inferno";\r
5 /**\r
6  * Some of FuseBoxOptions overrides by ts config (module, target, etc)\r
7  * https://fuse-box.org/page/working-with-targets\r
8  */\r
9 let fuse: FuseBox;\r
10 const fuseOptions: FuseBoxOptions = {\r
11    homeDir: "./src",\r
12    output: "dist/$name.js",\r
13    sourceMaps: { inline: false, vendor: false },\r
14    /**\r
15     * Custom TypeScript Transformers (compile Inferno tsx to ts)\r
16     */\r
17    transformers: {\r
18       before: [TsTransformClasscat(), TsTransformInferno()]\r
19    }\r
20 };\r
21 const fuseClientOptions: FuseBoxOptions = {\r
22    ...fuseOptions,\r
23    plugins: [\r
24       /**\r
25        * https://fuse-box.org/page/css-resource-plugin\r
26        * Compile Sass {SassPlugin()}\r
27        * Make .css files modules-like (allow import them like modules) {CSSModules}\r
28        * Make .css files modules like and allow import it from node_modules too {CSSResourcePlugin}\r
29        * Use them all and bundle with {CSSPlugin}\r
30        * */\r
31       CSSPlugin()\r
32    ]\r
33 };\r
34 const fuseServerOptions: FuseBoxOptions = {\r
35    ...fuseOptions\r
36 };\r
37 Sparky.task("clean", () => {\r
38    /**Clean distribute (dist) folder */\r
39    Sparky.src("dist")\r
40       .clean("dist")\r
41       .exec();\r
42 });\r
43 Sparky.task("config", () => {\r
44    fuse = FuseBox.init(fuseOptions);\r
45    fuse.dev();\r
46 });\r
47 Sparky.task("test", ["&clean", "&config"], () => {\r
48    fuse.bundle("client/bundle").test("[**/**.test.tsx]", null);\r
49 });\r
50 Sparky.task("client", () => {\r
51    fuse.opts = fuseClientOptions;\r
52    fuse\r
53       .bundle("client/bundle")\r
54       .target("browser@esnext")\r
55       .watch("client/**")\r
56       .hmr()\r
57       .instructions("> client/index.tsx");\r
58 });\r
59 Sparky.task("server", () => {\r
60    /**Workaround. Should be fixed */\r
61    fuse.opts = fuseServerOptions;\r
62    fuse\r
63       .bundle("server/bundle")\r
64       .watch("**")\r
65       .target("server@esnext")\r
66       .instructions("> [server/index.tsx]")\r
67       .completed(proc => {\r
68          proc.require({\r
69             // tslint:disable-next-line:no-shadowed-variable\r
70             close: ({ FuseBox }) => FuseBox.import(FuseBox.mainFile).shutdown()\r
71          });\r
72       });\r
73 });\r
74 Sparky.task("dev", ["&clean", "&config", "&client", "&server"], () => {\r
75    fuse.run();\r
76 });\r