Skip to content

Commit

Permalink
fix(dynamic-script): Use addVirtualImports to hande dynamic values …
Browse files Browse the repository at this point in the history
…for `localStorageKey` in script

Also adds `virtual.d.ts` for types in dev
  • Loading branch information
AVGVSTVS96 committed Jul 20, 2024
1 parent 6927885 commit 18177a6
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 25 deletions.
60 changes: 35 additions & 25 deletions package/src/integration.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,46 @@
import { defineIntegration } from "astro-integration-kit";
import { defineIntegration, addVirtualImports } from "astro-integration-kit";
import { z } from "astro/zod";

export const astroFoucKiller = defineIntegration({
name: "astro-fouc-killer",
optionsSchema: z
.object({
localStorageKey: z.string(),
})
.optional(),
setup({ options }) {
const localStorageKey = options?.localStorageKey ?? "themeToggle";

optionsSchema: z.object({
localStorageKey: z.string().default("themeToggle"),
}),
setup({ name, options }) {
return {
hooks: {
"astro:config:setup": ({ injectScript }) => {
"astro:config:setup": (params) => {
const { injectScript } = params;

addVirtualImports(params, {
name,
imports: {
"virtual:astro-fouc-killer/config": `
export const localStorageKey = '${options.localStorageKey}';
`,
"virtual:astro-fouc-killer/script": `
import { localStorageKey } from 'virtual:astro-fouc-killer/config';
const preferredTheme =
localStorage.getItem(localStorageKey) ||
(window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light');
document.documentElement.classList.toggle(
'dark',
preferredTheme === 'dark'
);
window.addEventListener('storage', () => {
const isDark = localStorage.getItem(localStorageKey) === 'dark';
document.documentElement.classList.toggle('dark', isDark);
});
`,
},
});

injectScript(
"head-inline",
`
const preferredTheme =
localStorage.getItem('${localStorageKey}') ||
(window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light');
document.documentElement.classList.toggle(
'dark',
preferredTheme === 'dark'
);
window.addEventListener('storage', () => {
const isDark = localStorage.getItem('${localStorageKey}') === 'dark';
document.documentElement.classList.toggle('dark', isDark);
});
`
`import 'virtual:astro-fouc-killer/script'`
);
},
},
Expand Down
8 changes: 8 additions & 0 deletions package/virtual.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
declare module "virtual:astro-fouc-killer/config" {
export const localStorageKey: string;
}

declare module "virtual:astro-fouc-killer/script" {
const script: void;
export default script;
}

0 comments on commit 18177a6

Please sign in to comment.