UNPKG

@wuchale/svelte

Version:

Protobuf-like i18n from normal code

70 lines 2.59 kB
import { glob } from "tinyglobby"; import { defaultGenerateLoadID, defaultHeuristic } from 'wuchale/adapters'; import { deepMergeObjects } from 'wuchale/config'; import { dataModuleHotUpdate } from 'wuchale/adapter-vanilla'; import { SvelteTransformer } from "./transformer.js"; const topLevelDeclarationsInside = ['$derived', '$derived.by']; const ignoreElements = ['style', 'path']; const dataModuleDev = ({ loadID, eventSend, eventReceive, compiled, plural }) => ` import { ReactiveArray } from '@wuchale/svelte/reactive' export const p = ${plural} export const c = new ReactiveArray(...${compiled}) ${dataModuleHotUpdate(loadID, eventSend, eventReceive)} `; const svelteHeuristic = (text, details) => { if (!defaultHeuristic(text, details)) { return false; } if (ignoreElements.includes(details.element)) { return false; } if (details.scope !== 'script') { return true; } if (details.declaring === 'variable' && !topLevelDeclarationsInside.includes(details.topLevelCall)) { return false; } if (details.call === '$inspect') { return false; } return true; }; const defaultArgs = { files: ['src/**/*.svelte', 'src/**/*.svelte.{js,ts}'], catalog: './src/locales/{locale}', pluralsFunc: 'plural', heuristic: svelteHeuristic, granularLoad: false, bundleLoad: false, generateLoadID: defaultGenerateLoadID, writeFiles: {}, initInsideFunc: false, }; export const adapter = (args = defaultArgs) => { const { heuristic, pluralsFunc, files, catalog, granularLoad, bundleLoad, generateLoadID, writeFiles, initInsideFunc, } = deepMergeObjects(args, defaultArgs); return { transform: ({ content, filename, index, header }) => { const transformer = new SvelteTransformer(content, filename, index, heuristic, pluralsFunc, initInsideFunc ? header.expr : null); return transformer.transformSv(header); }, files, catalog, granularLoad, bundleLoad, generateLoadID, loaderExts: ['.svelte.js', '.svelte.ts'], dataModuleDev, writeFiles, defaultLoaders: async () => { const available = ['default', 'kit']; if ((await glob('svelte.config.js')).length) { available.reverse(); } return available; }, defaultLoaderPath: (loader) => { return new URL(`../src/loaders/${loader}.svelte.js`, import.meta.url).pathname; }, }; }; //# sourceMappingURL=index.js.map