From c4dd73fa041fd69faf76ff558076133bef9f675d Mon Sep 17 00:00:00 2001 From: klg Date: Mon, 1 Jul 2024 14:50:00 +0800 Subject: [PATCH 1/3] feat: esbuild inlne css --- packages/esbuild-plugin/src/index.ts | 45 +++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/packages/esbuild-plugin/src/index.ts b/packages/esbuild-plugin/src/index.ts index c86aa777b..c91a38ffc 100644 --- a/packages/esbuild-plugin/src/index.ts +++ b/packages/esbuild-plugin/src/index.ts @@ -9,6 +9,7 @@ import { vanillaExtractTransformPlugin, IdentifierOption, CompileOptions, + hash, } from '@vanilla-extract/integration'; import type { Plugin } from 'esbuild'; @@ -16,6 +17,7 @@ const vanillaCssNamespace = 'vanilla-extract-css-ns'; interface VanillaExtractPluginOptions { outputCss?: boolean; + inlineCss?: boolean; /** * @deprecated Use `esbuildOptions.external` instead. */ @@ -27,6 +29,7 @@ interface VanillaExtractPluginOptions { } export function vanillaExtractPlugin({ outputCss, + inlineCss, externals = [], runtime = false, processCss, @@ -42,6 +45,7 @@ export function vanillaExtractPlugin({ name: 'vanilla-extract', setup(build) { build.onResolve({ filter: virtualCssFileFilter }, (args) => { + console.log(args) return { path: args.path, namespace: vanillaCssNamespace, @@ -56,16 +60,34 @@ export function vanillaExtractPlugin({ if (typeof processCss === 'function') { source = await processCss(source); } + if (inlineCss) { + const id = `css_${hash(source)}`; + const injectStyles = String.raw` + var css = ${JSON.stringify(source)} + var style = document.getElementById('${id}'); + if (!style) { + style = document.createElement("style"); + style.id = "${id}"; + style.setAttribute("type", "text/css"); + document.head.appendChild(style); + } + style.innerHTML = css; + ` + return { + contents: injectStyles, + loader: 'js' + } + } else { + const rootDir = build.initialOptions.absWorkingDir ?? process.cwd(); - const rootDir = build.initialOptions.absWorkingDir ?? process.cwd(); - - const resolveDir = dirname(join(rootDir, fileName)); + const resolveDir = dirname(join(rootDir, fileName)); - return { - contents: source, - loader: 'css', - resolveDir, - }; + return { + contents: source, + loader: 'css', + resolveDir, + }; + } }, ); @@ -107,3 +129,10 @@ export function vanillaExtractPlugin({ }, }; } + +async function hashString(str: string) { + const encoder = new TextEncoder(); + const data = encoder.encode(str); + const hash = await crypto.subtle.digest('SHA-256', data); + return hash; +} From f197f2677a8c0d2143728fd2859d260e598f61e9 Mon Sep 17 00:00:00 2001 From: klg Date: Mon, 1 Jul 2024 14:58:14 +0800 Subject: [PATCH 2/3] changeset --- .changeset/tiny-shoes-change.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tiny-shoes-change.md diff --git a/.changeset/tiny-shoes-change.md b/.changeset/tiny-shoes-change.md new file mode 100644 index 000000000..d5ae1a8ec --- /dev/null +++ b/.changeset/tiny-shoes-change.md @@ -0,0 +1,5 @@ +--- +'@vanilla-extract/esbuild-plugin': patch +--- + +feat: esbuild inline css From a8c771f1956b9ea9f2406a35c7b192fd1d0369a5 Mon Sep 17 00:00:00 2001 From: klg Date: Mon, 1 Jul 2024 17:18:02 +0800 Subject: [PATCH 3/3] del code by of never used --- packages/esbuild-plugin/src/index.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/esbuild-plugin/src/index.ts b/packages/esbuild-plugin/src/index.ts index c91a38ffc..0670587c1 100644 --- a/packages/esbuild-plugin/src/index.ts +++ b/packages/esbuild-plugin/src/index.ts @@ -45,7 +45,6 @@ export function vanillaExtractPlugin({ name: 'vanilla-extract', setup(build) { build.onResolve({ filter: virtualCssFileFilter }, (args) => { - console.log(args) return { path: args.path, namespace: vanillaCssNamespace, @@ -129,10 +128,3 @@ export function vanillaExtractPlugin({ }, }; } - -async function hashString(str: string) { - const encoder = new TextEncoder(); - const data = encoder.encode(str); - const hash = await crypto.subtle.digest('SHA-256', data); - return hash; -}