From fd850b0eb8aac3c8915de608ca59841b8ff9d162 Mon Sep 17 00:00:00 2001 From: Bobbie Goede Date: Fri, 9 May 2025 21:44:08 +0200 Subject: [PATCH 1/2] refactor: extract default options to constant object --- packages/bundle-utils/src/js.ts | 67 ++++++++++++++------------------- packages/bundle-utils/src/ts.ts | 44 +++------------------- 2 files changed, 34 insertions(+), 77 deletions(-) diff --git a/packages/bundle-utils/src/js.ts b/packages/bundle-utils/src/js.ts index 34d6df1c..22573be5 100644 --- a/packages/bundle-utils/src/js.ts +++ b/packages/bundle-utils/src/js.ts @@ -19,57 +19,46 @@ import type { CodeGenerator, CodeGenFunction, CodeGenOptions, CodeGenResult } fr export class DynamicResourceError extends Error {} +/** + * @internal + */ +export const DEFAULT_OPTIONS: CodeGenOptions = { + type: 'plain', + filename: 'vue-i18n-loader.js', + inSourceMap: undefined, + locale: '', + isGlobal: false, + sourceMap: false, + env: 'development', + forceStringify: false, + onError: undefined, + onWarn: undefined, + strictMessage: true, + escapeHtml: false, + allowDynamic: false, + jit: false +} + /** * @internal */ export function generate( targetSource: string | Buffer, - { - type = 'plain', - filename = 'vue-i18n-loader.js', - inSourceMap = undefined, - locale = '', - isGlobal = false, - sourceMap = false, - env = 'development', - forceStringify = false, - onError = undefined, - onWarn = undefined, - strictMessage = true, - escapeHtml = false, - allowDynamic = false, - jit = false - }: CodeGenOptions + options: CodeGenOptions ): CodeGenResult { const value = Buffer.isBuffer(targetSource) ? targetSource.toString() : targetSource - const options = { - type, - source: value, - sourceMap, - locale, - isGlobal, - inSourceMap, - env, - filename, - forceStringify, - onError, - onWarn, - strictMessage, - escapeHtml, - jit - } as CodeGenOptions - const generator = createCodeGenerator(options) - + const _options = Object.assign({}, DEFAULT_OPTIONS, options, { source: value }) + const generator = createCodeGenerator(_options) const ast = parseJavaScript(value, { ecmaVersion: 'latest', sourceType: 'module', - sourceFile: filename, + sourceFile: _options.filename, allowImportExportEverywhere: true }) as Node const exportResult = scanAst(ast) - if (!allowDynamic) { + if (!_options.allowDynamic) { if (!exportResult) { throw new Error(`You need to define an object as the locale message with 'export default'.`) } @@ -95,17 +84,17 @@ export function generate( return { ast, code: value, - map: inSourceMap + map: _options.inSourceMap } } } - const codeMaps = _generate(generator, ast, options) + const codeMaps = _generate(generator, ast, _options) const { code, map } = generator.context() // prettier-ignore const newMap = map - ? mapLinesColumns((map as any).toJSON(), codeMaps, inSourceMap) || null + ? mapLinesColumns((map as any).toJSON(), codeMaps, _options.inSourceMap) || null : null return { ast, diff --git a/packages/bundle-utils/src/ts.ts b/packages/bundle-utils/src/ts.ts index bc65edec..6e75371f 100644 --- a/packages/bundle-utils/src/ts.ts +++ b/packages/bundle-utils/src/ts.ts @@ -7,58 +7,26 @@ import { transform } from 'esbuild' import { Node } from 'estree' import { CodeGenOptions, CodeGenResult } from './codegen' -import { generate as generateJavaScript } from './js' +import { DEFAULT_OPTIONS, generate as generateJavaScript } from './js' /** * @internal */ export async function generate( targetSource: string | Buffer, - { - type = 'plain', - filename = 'vue-i18n-loader.js', - inSourceMap = undefined, - locale = '', - isGlobal = false, - sourceMap = false, - env = 'development', - forceStringify = false, - onError = undefined, - onWarn = undefined, - strictMessage = true, - escapeHtml = false, - allowDynamic = false, - jit = false - }: CodeGenOptions + options: CodeGenOptions ): Promise> { let value = Buffer.isBuffer(targetSource) ? targetSource.toString() : targetSource - const options = { - type, - source: value, - sourceMap, - locale, - isGlobal, - inSourceMap, - env, - filename, - forceStringify, - onError, - onWarn, - strictMessage, - escapeHtml, - allowDynamic, - jit - } as CodeGenOptions - - if (options.filename && /.[c|m]?ts$/.test(options.filename)) { + const _options = Object.assign({}, DEFAULT_OPTIONS, options, { source: value }) + if (_options.filename && /.[c|m]?ts$/.test(_options.filename)) { const transformed = await transform(value, { loader: 'ts' }) if (transformed && transformed.code) { value = transformed.code - options.source = transformed.code + _options.source = transformed.code } } - return generateJavaScript(value, options) + return generateJavaScript(value, _options) } From 2f13f1be8597232cde56d533d965d1bd1239e087 Mon Sep 17 00:00:00 2001 From: Bobbie Goede Date: Fri, 9 May 2025 21:44:42 +0200 Subject: [PATCH 2/2] chore: spelling --- packages/bundle-utils/src/js.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bundle-utils/src/js.ts b/packages/bundle-utils/src/js.ts index 22573be5..84e19edf 100644 --- a/packages/bundle-utils/src/js.ts +++ b/packages/bundle-utils/src/js.ts @@ -151,7 +151,7 @@ function _generate( const componentNamespace = '_Component' const variableDeclarations: string[] = [] - // slice and reseuse imports and top-level variable declarations as-is + // slice and reuse imports and top-level variable declarations as-is // NOTE: this prevents optimization/compilation of top-level variables, we may be able to add support for this walk(node, { /**