From 8b5bd3a2ced451efda0c68041f002d9c21ce4b98 Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 16 Mar 2022 00:43:26 -0500 Subject: [PATCH] fix: fleck styles --- packages/http/package.json | 2 ++ packages/http/src/server/index.js | 10 +++++++++- packages/http/src/server/style-loader.js | 22 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 packages/http/src/server/style-loader.js diff --git a/packages/http/package.json b/packages/http/package.json index 9d7e75e..3038f54 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -34,6 +34,8 @@ "server/build/template.ejs", "server/build/http.neutrinorc.js", "server/build/http.neutrinorc.js.map", + "server/style-loader.js", + "server/style-loader.js.map", "src", "tests.js", "tests.js.map" diff --git a/packages/http/src/server/index.js b/packages/http/src/server/index.js index 537675a..70f377a 100644 --- a/packages/http/src/server/index.js +++ b/packages/http/src/server/index.js @@ -1,5 +1,5 @@ import {D, Hooks} from '@flecks/core'; -import {Flecks, spawnWith} from '@flecks/core/server'; +import {Flecks, require as R, spawnWith} from '@flecks/core/server'; import fontLoader from '@neutrinojs/font-loader'; import imageLoader from '@neutrinojs/image-loader'; import styleLoader from '@neutrinojs/style-loader'; @@ -45,6 +45,14 @@ export default { }), ); }); + if ('fleck' === target) { + config.use.push((neutrino) => { + neutrino.config.module.rule('compile').use('babel').tap((options) => ({ + ...options, + plugins: [...options.plugins, R.resolve('@flecks/http/server/style-loader')], + })); + }); + } config.use.push(fontLoader()); config.use.push(imageLoader()); }, diff --git a/packages/http/src/server/style-loader.js b/packages/http/src/server/style-loader.js new file mode 100644 index 0000000..7fd1462 --- /dev/null +++ b/packages/http/src/server/style-loader.js @@ -0,0 +1,22 @@ +const parser = require('@babel/parser'); +const types = require('@babel/types'); + +let id = 0; + +module.exports = () => ({ + visitor: { + /* eslint-disable no-param-reassign */ + ImportDeclaration(path) { + if (path.node.source.value.match(/\.(c|s[ac])ss$/)) { + let defaultSpecifier = path.node.specifiers.find(types.isImportDefaultSpecifier); + if (!defaultSpecifier) { + defaultSpecifier = types.importDefaultSpecifier(types.identifier(`FLECKS_STYLES_${id++}`)); + path.node.specifiers.unshift(defaultSpecifier); + } + const {name} = defaultSpecifier.local; + path.insertAfter(parser.parse(`if ('undefined' !== typeof document) ${name}.use();`)); + } + }, + /* eslint-enable no-param-reassign */ + }, +});