wuchale
Version:
Protobuf-like i18n from plain code
58 lines (57 loc) • 2.01 kB
JavaScript
// $$ cd .. && npm run test
import { defaultGenerateLoadID, defaultHeuristicFuncOnly } from '../adapters.js';
import { deepMergeObjects } from "../config.js";
import { Transformer } from "./transformer.js";
import { loaderPathResolver } from '../adapter-utils/index.js';
export { Transformer };
export { parseScript, scriptParseOptions, scriptParseOptionsWithComments } from './transformer.js';
export const pluralPattern = {
name: 'plural',
args: ['other', 'message', 'pluralFunc'],
};
const defaultArgs = {
files: { include: 'src/**/*.{js,ts}', ignore: '**/*.d.ts' },
localesDir: './src/locales',
patterns: [pluralPattern],
heuristic: defaultHeuristicFuncOnly,
granularLoad: false,
bundleLoad: false,
generateLoadID: defaultGenerateLoadID,
loader: 'vite',
runtime: {
useReactive: ({ nested }) => ({
init: nested ? null : false,
use: false,
}),
plain: {
wrapInit: expr => expr,
wrapUse: expr => expr,
}
}
};
const resolveLoaderPath = loaderPathResolver(import.meta.url, '../../src/adapter-vanilla/loaders', 'js');
export function getDefaultLoaderPath(loader, bundle) {
if (loader === 'custom') {
return null;
}
if (bundle) {
return resolveLoaderPath('bundle');
}
if (loader === 'vite') {
return {
client: resolveLoaderPath('vite'),
server: resolveLoaderPath('vite.ssr'),
};
}
return resolveLoaderPath(loader);
}
export const adapter = (args = defaultArgs) => {
const { heuristic, patterns, runtime, loader, ...rest } = deepMergeObjects(args, defaultArgs);
return {
transform: ({ content, filename, index, expr, matchUrl }) => new Transformer(content, filename, index, heuristic, patterns, expr, runtime, matchUrl).transform(),
loaderExts: ['.js', '.ts'],
defaultLoaderPath: getDefaultLoaderPath(loader, rest.bundleLoad),
runtime,
...rest,
};
};