@vocab/vite 0.2.5-tsdown-20250922064614 → 0.3.0-fix-messageformat-import-20250923014407

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -5,9 +5,9 @@ import { Plugin } from "vite";
5
5
  type VocabPluginOptions = {
6
6
  vocabConfig: UserConfig;
7
7
  };
8
- declare function vitePluginVocab({
8
+ declare const vitePluginVocab: ({
9
9
  vocabConfig
10
- }: VocabPluginOptions): Plugin;
10
+ }: VocabPluginOptions) => Plugin;
11
11
  //#endregion
12
- export { VocabPluginOptions, vitePluginVocab as default };
12
+ export { VocabPluginOptions, vitePluginVocab };
13
13
  //# sourceMappingURL=index.d.mts.map
package/dist/index.d.ts CHANGED
@@ -5,9 +5,9 @@ import { UserConfig } from "@vocab/core";
5
5
  type VocabPluginOptions = {
6
6
  vocabConfig: UserConfig;
7
7
  };
8
- declare function vitePluginVocab({
8
+ declare const vitePluginVocab: ({
9
9
  vocabConfig
10
- }: VocabPluginOptions): Plugin;
10
+ }: VocabPluginOptions) => Plugin;
11
11
  //#endregion
12
- export { VocabPluginOptions, vitePluginVocab as default };
12
+ export { VocabPluginOptions, vitePluginVocab };
13
13
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -78,7 +78,7 @@ const virtualResourceLoader = (path) => Buffer.from(path.split(sourceQueryKey)[1
78
78
 
79
79
  //#endregion
80
80
  //#region src/index.ts
81
- function vitePluginVocab({ vocabConfig }) {
81
+ const vitePluginVocab = ({ vocabConfig }) => {
82
82
  let isSSR = false;
83
83
  require_logger.trace(`Creating Vocab plugin${vocabConfig ? ` with config file ${vocabConfig}` : ""}`);
84
84
  return {
@@ -104,8 +104,8 @@ function vitePluginVocab({ vocabConfig }) {
104
104
  };
105
105
  }
106
106
  };
107
- }
107
+ };
108
108
 
109
109
  //#endregion
110
- module.exports = vitePluginVocab;
110
+ exports.vitePluginVocab = vitePluginVocab;
111
111
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["trace","_trace","exports","esModuleLexer","cjsModuleLexer","langJson: TranslationMessagesByKey"],"sources":["../src/consts.ts","../src/transform-vocab-file.ts","../src/virtual-resource-loader.ts","../src/index.ts"],"sourcesContent":["export const compiledVocabFileFilter = /\\.vocab[\\\\/]index\\.(?:ts|js|cjs|mjs)$/;\nexport const virtualModuleId = 'virtual:vocab';\nexport const sourceQueryKey = '?source=';\n","import {\n getDevLanguageFileFromTsFile,\n type LoadedTranslation,\n loadTranslation,\n type TranslationMessagesByKey,\n type UserConfig,\n} from '@vocab/core';\n\nimport * as esModuleLexer from 'es-module-lexer';\nimport * as cjsModuleLexer from 'cjs-module-lexer';\n\nimport { sourceQueryKey, virtualModuleId } from './consts';\n\nimport { trace as _trace } from './logger';\n\nconst trace = _trace.extend('transform');\n\nfunction findExportNames(source: string, mode: 'cjs'): string[];\nfunction findExportNames(\n source: string,\n mode: 'esm',\n): esModuleLexer.ExportSpecifier[];\nfunction findExportNames(source: string, mode: 'cjs' | 'esm') {\n if (mode === 'esm') {\n const [, exports] = esModuleLexer.parse(source);\n return exports;\n }\n const { exports } = cjsModuleLexer.parse(source);\n return exports;\n}\n\nexport const transformVocabFile = async (\n code: string,\n id: string,\n config: UserConfig,\n) => {\n trace('Transforming vocab file', id);\n\n let result = code;\n\n const devJsonFilePath = getDevLanguageFileFromTsFile(id);\n\n const loadedTranslation = loadTranslation(\n { filePath: devJsonFilePath, fallbacks: 'all' },\n config,\n );\n\n const renderLanguageLoader = renderLanguageLoaderAsync(loadedTranslation);\n\n const translations = /* ts */ `\n const translations = createTranslationFile({\n ${Object.keys(loadedTranslation.languages)\n .map((lang) => `${JSON.stringify(lang)}: ${renderLanguageLoader(lang)}`)\n .join(',\\n')}\n });\n `;\n\n await esModuleLexer.init;\n const esmExports = findExportNames(code, 'esm');\n if (esmExports.length > 0) {\n const exportName = esmExports[0];\n trace(`Found ESM export '${exportName.n}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n export { translations as ${exportName.n} };\n `;\n } else {\n // init needs to be called and waited upon\n await cjsModuleLexer.init();\n\n const exportName = findExportNames(code, 'cjs')[0];\n trace(`Found CJS export '${exportName}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n exports.${exportName} = translations;\n `;\n }\n trace('Created translation file', result);\n\n return result;\n};\n\nconst renderLanguageLoaderAsync =\n (loadedTranslation: LoadedTranslation) => (lang: string) => {\n const identifier = JSON.stringify(\n createIdentifier(lang, loadedTranslation),\n );\n\n return /* ts */ `createLanguage(() => import(${identifier}))`.trim();\n };\n\nconst createIdentifier = (\n lang: string,\n loadedTranslation: LoadedTranslation,\n) => {\n const languageTranslations = loadedTranslation.languages[lang] ?? {};\n\n const langJson: TranslationMessagesByKey = {};\n\n for (const key of loadedTranslation.keys) {\n langJson[key] = languageTranslations[key].message;\n }\n\n const base64 = Buffer.from(JSON.stringify(langJson), 'utf-8').toString(\n 'base64',\n );\n\n const encodedResource = `${sourceQueryKey}${base64}`;\n\n return `${virtualModuleId}-${lang}.json${encodedResource}`;\n};\n","import { sourceQueryKey } from './consts';\n\nexport const virtualResourceLoader = (path: string) =>\n Buffer.from(path.split(sourceQueryKey)[1] as string, 'base64').toString(\n 'utf-8',\n );\n","import type { Plugin as VitePlugin } from 'vite';\nimport type { UserConfig } from '@vocab/core';\n\nimport { transformVocabFile } from './transform-vocab-file';\nimport { virtualResourceLoader } from './virtual-resource-loader';\n\nimport { trace } from './logger';\n\nimport { compiledVocabFileFilter, virtualModuleId } from './consts';\n\nexport type VocabPluginOptions = {\n vocabConfig: UserConfig;\n};\n\nexport default function vitePluginVocab({\n vocabConfig,\n}: VocabPluginOptions): VitePlugin {\n let isSSR = false;\n\n trace(\n `Creating Vocab plugin${\n vocabConfig ? ` with config file ${vocabConfig}` : ''\n }`,\n );\n\n return {\n name: 'vite-plugin-vocab',\n apply: 'build',\n enforce: 'pre',\n configResolved(config) {\n // Check if the build is for SSR. This plugin should not run for SSR builds.\n isSSR = Boolean(config.build.ssr);\n },\n resolveId(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(virtualModuleId)) {\n return `\\0${id}`;\n }\n },\n load(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(`\\0${virtualModuleId}`)) {\n return virtualResourceLoader(id);\n }\n },\n async transform(code, id) {\n if (isSSR) {\n return null;\n }\n\n if (compiledVocabFileFilter.test(id)) {\n const transformedCode = await transformVocabFile(code, id, vocabConfig);\n\n return {\n code: transformedCode,\n map: null, // provide source map if available\n };\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAa,0BAA0B;AACvC,MAAa,kBAAkB;AAC/B,MAAa,iBAAiB;;;;ACa9B,MAAMA,UAAQC,qBAAO,OAAO,YAAY;AAOxC,SAAS,gBAAgB,QAAgB,MAAqB;AAC5D,KAAI,SAAS,OAAO;EAClB,MAAM,GAAGC,aAAWC,gBAAc,MAAM,OAAO;AAC/C,SAAOD;;CAET,MAAM,EAAE,uBAAYE,iBAAe,MAAM,OAAO;AAChD,QAAOF;;AAGT,MAAa,qBAAqB,OAChC,MACA,IACA,WACG;AACH,SAAM,2BAA2B,GAAG;CAEpC,IAAI,SAAS;CAEb,MAAM,iEAA+C,GAAG;CAExD,MAAM,sDACJ;EAAE,UAAU;EAAiB,WAAW;EAAO,EAC/C,OACD;CAED,MAAM,uBAAuB,0BAA0B,kBAAkB;CAEzE,MAAM,eAAwB;;QAExB,OAAO,KAAK,kBAAkB,UAAU,CACvC,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,GAAG,CACvE,KAAK,MAAM,CAAC;;;AAInB,OAAMC,gBAAc;CACpB,MAAM,aAAa,gBAAgB,MAAM,MAAM;AAC/C,KAAI,WAAW,SAAS,GAAG;EACzB,MAAM,aAAa,WAAW;AAC9B,UAAM,qBAAqB,WAAW,EAAE,OAAO,KAAK;AAEpD,WAAkB;;QAEd,aAAa;iCACY,WAAW,EAAE;;QAErC;AAEL,QAAMC,iBAAe,MAAM;EAE3B,MAAM,aAAa,gBAAgB,MAAM,MAAM,CAAC;AAChD,UAAM,qBAAqB,WAAW,OAAO,KAAK;AAElD,WAAkB;;QAEd,aAAa;gBACL,WAAW;;;AAGzB,SAAM,4BAA4B,OAAO;AAEzC,QAAO;;AAGT,MAAM,6BACH,uBAA0C,SAAiB;AAK1D,QAAgB,+BAJG,KAAK,UACtB,iBAAiB,MAAM,kBAAkB,CAC1C,CAEyD,IAAI,MAAM;;AAGxE,MAAM,oBACJ,MACA,sBACG;CACH,MAAM,uBAAuB,kBAAkB,UAAU,SAAS,EAAE;CAEpE,MAAMC,WAAqC,EAAE;AAE7C,MAAK,MAAM,OAAO,kBAAkB,KAClC,UAAS,OAAO,qBAAqB,KAAK;CAG5C,MAAM,SAAS,OAAO,KAAK,KAAK,UAAU,SAAS,EAAE,QAAQ,CAAC,SAC5D,SACD;CAED,MAAM,kBAAkB,GAAG,iBAAiB;AAE5C,QAAO,GAAG,gBAAgB,GAAG,KAAK,OAAO;;;;;AC/G3C,MAAa,yBAAyB,SACpC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC,IAAc,SAAS,CAAC,SAC7D,QACD;;;;ACSH,SAAwB,gBAAgB,EACtC,eACiC;CACjC,IAAI,QAAQ;AAEZ,sBACE,wBACE,cAAc,qBAAqB,gBAAgB,KAEtD;AAED,QAAO;EACL,MAAM;EACN,OAAO;EACP,SAAS;EACT,eAAe,QAAQ;AAErB,WAAQ,QAAQ,OAAO,MAAM,IAAI;;EAEnC,UAAU,IAAI;AACZ,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,gBAAgB,CAC9B,QAAO,KAAK;;EAGhB,KAAK,IAAI;AACP,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,KAAK,kBAAkB,CACrC,QAAO,sBAAsB,GAAG;;EAGpC,MAAM,UAAU,MAAM,IAAI;AACxB,OAAI,MACF,QAAO;AAGT,OAAI,wBAAwB,KAAK,GAAG,CAGlC,QAAO;IACL,MAHsB,MAAM,mBAAmB,MAAM,IAAI,YAAY;IAIrE,KAAK;IACN;;EAGN"}
1
+ {"version":3,"file":"index.js","names":["trace","_trace","exports","esModuleLexer","cjsModuleLexer","langJson: TranslationMessagesByKey"],"sources":["../src/consts.ts","../src/transform-vocab-file.ts","../src/virtual-resource-loader.ts","../src/index.ts"],"sourcesContent":["export const compiledVocabFileFilter = /\\.vocab[\\\\/]index\\.(?:ts|js|cjs|mjs)$/;\nexport const virtualModuleId = 'virtual:vocab';\nexport const sourceQueryKey = '?source=';\n","import {\n getDevLanguageFileFromTsFile,\n type LoadedTranslation,\n loadTranslation,\n type TranslationMessagesByKey,\n type UserConfig,\n} from '@vocab/core';\n\nimport * as esModuleLexer from 'es-module-lexer';\nimport * as cjsModuleLexer from 'cjs-module-lexer';\n\nimport { sourceQueryKey, virtualModuleId } from './consts';\n\nimport { trace as _trace } from './logger';\n\nconst trace = _trace.extend('transform');\n\nfunction findExportNames(source: string, mode: 'cjs'): string[];\nfunction findExportNames(\n source: string,\n mode: 'esm',\n): esModuleLexer.ExportSpecifier[];\nfunction findExportNames(source: string, mode: 'cjs' | 'esm') {\n if (mode === 'esm') {\n const [, exports] = esModuleLexer.parse(source);\n return exports;\n }\n const { exports } = cjsModuleLexer.parse(source);\n return exports;\n}\n\nexport const transformVocabFile = async (\n code: string,\n id: string,\n config: UserConfig,\n) => {\n trace('Transforming vocab file', id);\n\n let result = code;\n\n const devJsonFilePath = getDevLanguageFileFromTsFile(id);\n\n const loadedTranslation = loadTranslation(\n { filePath: devJsonFilePath, fallbacks: 'all' },\n config,\n );\n\n const renderLanguageLoader = renderLanguageLoaderAsync(loadedTranslation);\n\n const translations = /* ts */ `\n const translations = createTranslationFile({\n ${Object.keys(loadedTranslation.languages)\n .map((lang) => `${JSON.stringify(lang)}: ${renderLanguageLoader(lang)}`)\n .join(',\\n')}\n });\n `;\n\n await esModuleLexer.init;\n const esmExports = findExportNames(code, 'esm');\n if (esmExports.length > 0) {\n const exportName = esmExports[0];\n trace(`Found ESM export '${exportName.n}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n export { translations as ${exportName.n} };\n `;\n } else {\n // init needs to be called and waited upon\n await cjsModuleLexer.init();\n\n const exportName = findExportNames(code, 'cjs')[0];\n trace(`Found CJS export '${exportName}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n exports.${exportName} = translations;\n `;\n }\n trace('Created translation file', result);\n\n return result;\n};\n\nconst renderLanguageLoaderAsync =\n (loadedTranslation: LoadedTranslation) => (lang: string) => {\n const identifier = JSON.stringify(\n createIdentifier(lang, loadedTranslation),\n );\n\n return /* ts */ `createLanguage(() => import(${identifier}))`.trim();\n };\n\nconst createIdentifier = (\n lang: string,\n loadedTranslation: LoadedTranslation,\n) => {\n const languageTranslations = loadedTranslation.languages[lang] ?? {};\n\n const langJson: TranslationMessagesByKey = {};\n\n for (const key of loadedTranslation.keys) {\n langJson[key] = languageTranslations[key].message;\n }\n\n const base64 = Buffer.from(JSON.stringify(langJson), 'utf-8').toString(\n 'base64',\n );\n\n const encodedResource = `${sourceQueryKey}${base64}`;\n\n return `${virtualModuleId}-${lang}.json${encodedResource}`;\n};\n","import { sourceQueryKey } from './consts';\n\nexport const virtualResourceLoader = (path: string) =>\n Buffer.from(path.split(sourceQueryKey)[1] as string, 'base64').toString(\n 'utf-8',\n );\n","import type { Plugin as VitePlugin } from 'vite';\nimport type { UserConfig } from '@vocab/core';\n\nimport { transformVocabFile } from './transform-vocab-file';\nimport { virtualResourceLoader } from './virtual-resource-loader';\n\nimport { trace } from './logger';\n\nimport { compiledVocabFileFilter, virtualModuleId } from './consts';\n\nexport type VocabPluginOptions = {\n vocabConfig: UserConfig;\n};\n\nexport const vitePluginVocab = ({\n vocabConfig,\n}: VocabPluginOptions): VitePlugin => {\n let isSSR = false;\n\n trace(\n `Creating Vocab plugin${\n vocabConfig ? ` with config file ${vocabConfig}` : ''\n }`,\n );\n\n return {\n name: 'vite-plugin-vocab',\n apply: 'build',\n enforce: 'pre',\n configResolved(config) {\n // Check if the build is for SSR. This plugin should not run for SSR builds.\n isSSR = Boolean(config.build.ssr);\n },\n resolveId(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(virtualModuleId)) {\n return `\\0${id}`;\n }\n },\n load(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(`\\0${virtualModuleId}`)) {\n return virtualResourceLoader(id);\n }\n },\n async transform(code, id) {\n if (isSSR) {\n return null;\n }\n\n if (compiledVocabFileFilter.test(id)) {\n const transformedCode = await transformVocabFile(code, id, vocabConfig);\n\n return {\n code: transformedCode,\n map: null, // provide source map if available\n };\n }\n },\n };\n};\n"],"mappings":";;;;;;;;;;AAAA,MAAa,0BAA0B;AACvC,MAAa,kBAAkB;AAC/B,MAAa,iBAAiB;;;;ACa9B,MAAMA,UAAQC,qBAAO,OAAO,YAAY;AAOxC,SAAS,gBAAgB,QAAgB,MAAqB;AAC5D,KAAI,SAAS,OAAO;EAClB,MAAM,GAAGC,aAAWC,gBAAc,MAAM,OAAO;AAC/C,SAAOD;;CAET,MAAM,EAAE,uBAAYE,iBAAe,MAAM,OAAO;AAChD,QAAOF;;AAGT,MAAa,qBAAqB,OAChC,MACA,IACA,WACG;AACH,SAAM,2BAA2B,GAAG;CAEpC,IAAI,SAAS;CAEb,MAAM,iEAA+C,GAAG;CAExD,MAAM,sDACJ;EAAE,UAAU;EAAiB,WAAW;EAAO,EAC/C,OACD;CAED,MAAM,uBAAuB,0BAA0B,kBAAkB;CAEzE,MAAM,eAAwB;;QAExB,OAAO,KAAK,kBAAkB,UAAU,CACvC,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,GAAG,CACvE,KAAK,MAAM,CAAC;;;AAInB,OAAMC,gBAAc;CACpB,MAAM,aAAa,gBAAgB,MAAM,MAAM;AAC/C,KAAI,WAAW,SAAS,GAAG;EACzB,MAAM,aAAa,WAAW;AAC9B,UAAM,qBAAqB,WAAW,EAAE,OAAO,KAAK;AAEpD,WAAkB;;QAEd,aAAa;iCACY,WAAW,EAAE;;QAErC;AAEL,QAAMC,iBAAe,MAAM;EAE3B,MAAM,aAAa,gBAAgB,MAAM,MAAM,CAAC;AAChD,UAAM,qBAAqB,WAAW,OAAO,KAAK;AAElD,WAAkB;;QAEd,aAAa;gBACL,WAAW;;;AAGzB,SAAM,4BAA4B,OAAO;AAEzC,QAAO;;AAGT,MAAM,6BACH,uBAA0C,SAAiB;AAK1D,QAAgB,+BAJG,KAAK,UACtB,iBAAiB,MAAM,kBAAkB,CAC1C,CAEyD,IAAI,MAAM;;AAGxE,MAAM,oBACJ,MACA,sBACG;CACH,MAAM,uBAAuB,kBAAkB,UAAU,SAAS,EAAE;CAEpE,MAAMC,WAAqC,EAAE;AAE7C,MAAK,MAAM,OAAO,kBAAkB,KAClC,UAAS,OAAO,qBAAqB,KAAK;CAG5C,MAAM,SAAS,OAAO,KAAK,KAAK,UAAU,SAAS,EAAE,QAAQ,CAAC,SAC5D,SACD;CAED,MAAM,kBAAkB,GAAG,iBAAiB;AAE5C,QAAO,GAAG,gBAAgB,GAAG,KAAK,OAAO;;;;;AC/G3C,MAAa,yBAAyB,SACpC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC,IAAc,SAAS,CAAC,SAC7D,QACD;;;;ACSH,MAAa,mBAAmB,EAC9B,kBACoC;CACpC,IAAI,QAAQ;AAEZ,sBACE,wBACE,cAAc,qBAAqB,gBAAgB,KAEtD;AAED,QAAO;EACL,MAAM;EACN,OAAO;EACP,SAAS;EACT,eAAe,QAAQ;AAErB,WAAQ,QAAQ,OAAO,MAAM,IAAI;;EAEnC,UAAU,IAAI;AACZ,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,gBAAgB,CAC9B,QAAO,KAAK;;EAGhB,KAAK,IAAI;AACP,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,KAAK,kBAAkB,CACrC,QAAO,sBAAsB,GAAG;;EAGpC,MAAM,UAAU,MAAM,IAAI;AACxB,OAAI,MACF,QAAO;AAGT,OAAI,wBAAwB,KAAK,GAAG,CAGlC,QAAO;IACL,MAHsB,MAAM,mBAAmB,MAAM,IAAI,YAAY;IAIrE,KAAK;IACN;;EAGN"}
package/dist/index.mjs CHANGED
@@ -74,7 +74,7 @@ const virtualResourceLoader = (path) => Buffer.from(path.split(sourceQueryKey)[1
74
74
 
75
75
  //#endregion
76
76
  //#region src/index.ts
77
- function vitePluginVocab({ vocabConfig }) {
77
+ const vitePluginVocab = ({ vocabConfig }) => {
78
78
  let isSSR = false;
79
79
  trace(`Creating Vocab plugin${vocabConfig ? ` with config file ${vocabConfig}` : ""}`);
80
80
  return {
@@ -100,8 +100,8 @@ function vitePluginVocab({ vocabConfig }) {
100
100
  };
101
101
  }
102
102
  };
103
- }
103
+ };
104
104
 
105
105
  //#endregion
106
- export { vitePluginVocab as default };
106
+ export { vitePluginVocab };
107
107
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["trace","_trace","exports","langJson: TranslationMessagesByKey"],"sources":["../src/consts.ts","../src/transform-vocab-file.ts","../src/virtual-resource-loader.ts","../src/index.ts"],"sourcesContent":["export const compiledVocabFileFilter = /\\.vocab[\\\\/]index\\.(?:ts|js|cjs|mjs)$/;\nexport const virtualModuleId = 'virtual:vocab';\nexport const sourceQueryKey = '?source=';\n","import {\n getDevLanguageFileFromTsFile,\n type LoadedTranslation,\n loadTranslation,\n type TranslationMessagesByKey,\n type UserConfig,\n} from '@vocab/core';\n\nimport * as esModuleLexer from 'es-module-lexer';\nimport * as cjsModuleLexer from 'cjs-module-lexer';\n\nimport { sourceQueryKey, virtualModuleId } from './consts';\n\nimport { trace as _trace } from './logger';\n\nconst trace = _trace.extend('transform');\n\nfunction findExportNames(source: string, mode: 'cjs'): string[];\nfunction findExportNames(\n source: string,\n mode: 'esm',\n): esModuleLexer.ExportSpecifier[];\nfunction findExportNames(source: string, mode: 'cjs' | 'esm') {\n if (mode === 'esm') {\n const [, exports] = esModuleLexer.parse(source);\n return exports;\n }\n const { exports } = cjsModuleLexer.parse(source);\n return exports;\n}\n\nexport const transformVocabFile = async (\n code: string,\n id: string,\n config: UserConfig,\n) => {\n trace('Transforming vocab file', id);\n\n let result = code;\n\n const devJsonFilePath = getDevLanguageFileFromTsFile(id);\n\n const loadedTranslation = loadTranslation(\n { filePath: devJsonFilePath, fallbacks: 'all' },\n config,\n );\n\n const renderLanguageLoader = renderLanguageLoaderAsync(loadedTranslation);\n\n const translations = /* ts */ `\n const translations = createTranslationFile({\n ${Object.keys(loadedTranslation.languages)\n .map((lang) => `${JSON.stringify(lang)}: ${renderLanguageLoader(lang)}`)\n .join(',\\n')}\n });\n `;\n\n await esModuleLexer.init;\n const esmExports = findExportNames(code, 'esm');\n if (esmExports.length > 0) {\n const exportName = esmExports[0];\n trace(`Found ESM export '${exportName.n}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n export { translations as ${exportName.n} };\n `;\n } else {\n // init needs to be called and waited upon\n await cjsModuleLexer.init();\n\n const exportName = findExportNames(code, 'cjs')[0];\n trace(`Found CJS export '${exportName}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n exports.${exportName} = translations;\n `;\n }\n trace('Created translation file', result);\n\n return result;\n};\n\nconst renderLanguageLoaderAsync =\n (loadedTranslation: LoadedTranslation) => (lang: string) => {\n const identifier = JSON.stringify(\n createIdentifier(lang, loadedTranslation),\n );\n\n return /* ts */ `createLanguage(() => import(${identifier}))`.trim();\n };\n\nconst createIdentifier = (\n lang: string,\n loadedTranslation: LoadedTranslation,\n) => {\n const languageTranslations = loadedTranslation.languages[lang] ?? {};\n\n const langJson: TranslationMessagesByKey = {};\n\n for (const key of loadedTranslation.keys) {\n langJson[key] = languageTranslations[key].message;\n }\n\n const base64 = Buffer.from(JSON.stringify(langJson), 'utf-8').toString(\n 'base64',\n );\n\n const encodedResource = `${sourceQueryKey}${base64}`;\n\n return `${virtualModuleId}-${lang}.json${encodedResource}`;\n};\n","import { sourceQueryKey } from './consts';\n\nexport const virtualResourceLoader = (path: string) =>\n Buffer.from(path.split(sourceQueryKey)[1] as string, 'base64').toString(\n 'utf-8',\n );\n","import type { Plugin as VitePlugin } from 'vite';\nimport type { UserConfig } from '@vocab/core';\n\nimport { transformVocabFile } from './transform-vocab-file';\nimport { virtualResourceLoader } from './virtual-resource-loader';\n\nimport { trace } from './logger';\n\nimport { compiledVocabFileFilter, virtualModuleId } from './consts';\n\nexport type VocabPluginOptions = {\n vocabConfig: UserConfig;\n};\n\nexport default function vitePluginVocab({\n vocabConfig,\n}: VocabPluginOptions): VitePlugin {\n let isSSR = false;\n\n trace(\n `Creating Vocab plugin${\n vocabConfig ? ` with config file ${vocabConfig}` : ''\n }`,\n );\n\n return {\n name: 'vite-plugin-vocab',\n apply: 'build',\n enforce: 'pre',\n configResolved(config) {\n // Check if the build is for SSR. This plugin should not run for SSR builds.\n isSSR = Boolean(config.build.ssr);\n },\n resolveId(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(virtualModuleId)) {\n return `\\0${id}`;\n }\n },\n load(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(`\\0${virtualModuleId}`)) {\n return virtualResourceLoader(id);\n }\n },\n async transform(code, id) {\n if (isSSR) {\n return null;\n }\n\n if (compiledVocabFileFilter.test(id)) {\n const transformedCode = await transformVocabFile(code, id, vocabConfig);\n\n return {\n code: transformedCode,\n map: null, // provide source map if available\n };\n }\n },\n };\n}\n"],"mappings":";;;;;;AAAA,MAAa,0BAA0B;AACvC,MAAa,kBAAkB;AAC/B,MAAa,iBAAiB;;;;ACa9B,MAAMA,UAAQC,MAAO,OAAO,YAAY;AAOxC,SAAS,gBAAgB,QAAgB,MAAqB;AAC5D,KAAI,SAAS,OAAO;EAClB,MAAM,GAAGC,aAAW,cAAc,MAAM,OAAO;AAC/C,SAAOA;;CAET,MAAM,EAAE,YAAY,eAAe,MAAM,OAAO;AAChD,QAAO;;AAGT,MAAa,qBAAqB,OAChC,MACA,IACA,WACG;AACH,SAAM,2BAA2B,GAAG;CAEpC,IAAI,SAAS;CAEb,MAAM,kBAAkB,6BAA6B,GAAG;CAExD,MAAM,oBAAoB,gBACxB;EAAE,UAAU;EAAiB,WAAW;EAAO,EAC/C,OACD;CAED,MAAM,uBAAuB,0BAA0B,kBAAkB;CAEzE,MAAM,eAAwB;;QAExB,OAAO,KAAK,kBAAkB,UAAU,CACvC,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,GAAG,CACvE,KAAK,MAAM,CAAC;;;AAInB,OAAM,cAAc;CACpB,MAAM,aAAa,gBAAgB,MAAM,MAAM;AAC/C,KAAI,WAAW,SAAS,GAAG;EACzB,MAAM,aAAa,WAAW;AAC9B,UAAM,qBAAqB,WAAW,EAAE,OAAO,KAAK;AAEpD,WAAkB;;QAEd,aAAa;iCACY,WAAW,EAAE;;QAErC;AAEL,QAAM,eAAe,MAAM;EAE3B,MAAM,aAAa,gBAAgB,MAAM,MAAM,CAAC;AAChD,UAAM,qBAAqB,WAAW,OAAO,KAAK;AAElD,WAAkB;;QAEd,aAAa;gBACL,WAAW;;;AAGzB,SAAM,4BAA4B,OAAO;AAEzC,QAAO;;AAGT,MAAM,6BACH,uBAA0C,SAAiB;AAK1D,QAAgB,+BAJG,KAAK,UACtB,iBAAiB,MAAM,kBAAkB,CAC1C,CAEyD,IAAI,MAAM;;AAGxE,MAAM,oBACJ,MACA,sBACG;CACH,MAAM,uBAAuB,kBAAkB,UAAU,SAAS,EAAE;CAEpE,MAAMC,WAAqC,EAAE;AAE7C,MAAK,MAAM,OAAO,kBAAkB,KAClC,UAAS,OAAO,qBAAqB,KAAK;CAG5C,MAAM,SAAS,OAAO,KAAK,KAAK,UAAU,SAAS,EAAE,QAAQ,CAAC,SAC5D,SACD;CAED,MAAM,kBAAkB,GAAG,iBAAiB;AAE5C,QAAO,GAAG,gBAAgB,GAAG,KAAK,OAAO;;;;;AC/G3C,MAAa,yBAAyB,SACpC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC,IAAc,SAAS,CAAC,SAC7D,QACD;;;;ACSH,SAAwB,gBAAgB,EACtC,eACiC;CACjC,IAAI,QAAQ;AAEZ,OACE,wBACE,cAAc,qBAAqB,gBAAgB,KAEtD;AAED,QAAO;EACL,MAAM;EACN,OAAO;EACP,SAAS;EACT,eAAe,QAAQ;AAErB,WAAQ,QAAQ,OAAO,MAAM,IAAI;;EAEnC,UAAU,IAAI;AACZ,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,gBAAgB,CAC9B,QAAO,KAAK;;EAGhB,KAAK,IAAI;AACP,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,KAAK,kBAAkB,CACrC,QAAO,sBAAsB,GAAG;;EAGpC,MAAM,UAAU,MAAM,IAAI;AACxB,OAAI,MACF,QAAO;AAGT,OAAI,wBAAwB,KAAK,GAAG,CAGlC,QAAO;IACL,MAHsB,MAAM,mBAAmB,MAAM,IAAI,YAAY;IAIrE,KAAK;IACN;;EAGN"}
1
+ {"version":3,"file":"index.mjs","names":["trace","_trace","exports","langJson: TranslationMessagesByKey"],"sources":["../src/consts.ts","../src/transform-vocab-file.ts","../src/virtual-resource-loader.ts","../src/index.ts"],"sourcesContent":["export const compiledVocabFileFilter = /\\.vocab[\\\\/]index\\.(?:ts|js|cjs|mjs)$/;\nexport const virtualModuleId = 'virtual:vocab';\nexport const sourceQueryKey = '?source=';\n","import {\n getDevLanguageFileFromTsFile,\n type LoadedTranslation,\n loadTranslation,\n type TranslationMessagesByKey,\n type UserConfig,\n} from '@vocab/core';\n\nimport * as esModuleLexer from 'es-module-lexer';\nimport * as cjsModuleLexer from 'cjs-module-lexer';\n\nimport { sourceQueryKey, virtualModuleId } from './consts';\n\nimport { trace as _trace } from './logger';\n\nconst trace = _trace.extend('transform');\n\nfunction findExportNames(source: string, mode: 'cjs'): string[];\nfunction findExportNames(\n source: string,\n mode: 'esm',\n): esModuleLexer.ExportSpecifier[];\nfunction findExportNames(source: string, mode: 'cjs' | 'esm') {\n if (mode === 'esm') {\n const [, exports] = esModuleLexer.parse(source);\n return exports;\n }\n const { exports } = cjsModuleLexer.parse(source);\n return exports;\n}\n\nexport const transformVocabFile = async (\n code: string,\n id: string,\n config: UserConfig,\n) => {\n trace('Transforming vocab file', id);\n\n let result = code;\n\n const devJsonFilePath = getDevLanguageFileFromTsFile(id);\n\n const loadedTranslation = loadTranslation(\n { filePath: devJsonFilePath, fallbacks: 'all' },\n config,\n );\n\n const renderLanguageLoader = renderLanguageLoaderAsync(loadedTranslation);\n\n const translations = /* ts */ `\n const translations = createTranslationFile({\n ${Object.keys(loadedTranslation.languages)\n .map((lang) => `${JSON.stringify(lang)}: ${renderLanguageLoader(lang)}`)\n .join(',\\n')}\n });\n `;\n\n await esModuleLexer.init;\n const esmExports = findExportNames(code, 'esm');\n if (esmExports.length > 0) {\n const exportName = esmExports[0];\n trace(`Found ESM export '${exportName.n}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n export { translations as ${exportName.n} };\n `;\n } else {\n // init needs to be called and waited upon\n await cjsModuleLexer.init();\n\n const exportName = findExportNames(code, 'cjs')[0];\n trace(`Found CJS export '${exportName}' in ${id}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/vite/runtime';\n ${translations}\n exports.${exportName} = translations;\n `;\n }\n trace('Created translation file', result);\n\n return result;\n};\n\nconst renderLanguageLoaderAsync =\n (loadedTranslation: LoadedTranslation) => (lang: string) => {\n const identifier = JSON.stringify(\n createIdentifier(lang, loadedTranslation),\n );\n\n return /* ts */ `createLanguage(() => import(${identifier}))`.trim();\n };\n\nconst createIdentifier = (\n lang: string,\n loadedTranslation: LoadedTranslation,\n) => {\n const languageTranslations = loadedTranslation.languages[lang] ?? {};\n\n const langJson: TranslationMessagesByKey = {};\n\n for (const key of loadedTranslation.keys) {\n langJson[key] = languageTranslations[key].message;\n }\n\n const base64 = Buffer.from(JSON.stringify(langJson), 'utf-8').toString(\n 'base64',\n );\n\n const encodedResource = `${sourceQueryKey}${base64}`;\n\n return `${virtualModuleId}-${lang}.json${encodedResource}`;\n};\n","import { sourceQueryKey } from './consts';\n\nexport const virtualResourceLoader = (path: string) =>\n Buffer.from(path.split(sourceQueryKey)[1] as string, 'base64').toString(\n 'utf-8',\n );\n","import type { Plugin as VitePlugin } from 'vite';\nimport type { UserConfig } from '@vocab/core';\n\nimport { transformVocabFile } from './transform-vocab-file';\nimport { virtualResourceLoader } from './virtual-resource-loader';\n\nimport { trace } from './logger';\n\nimport { compiledVocabFileFilter, virtualModuleId } from './consts';\n\nexport type VocabPluginOptions = {\n vocabConfig: UserConfig;\n};\n\nexport const vitePluginVocab = ({\n vocabConfig,\n}: VocabPluginOptions): VitePlugin => {\n let isSSR = false;\n\n trace(\n `Creating Vocab plugin${\n vocabConfig ? ` with config file ${vocabConfig}` : ''\n }`,\n );\n\n return {\n name: 'vite-plugin-vocab',\n apply: 'build',\n enforce: 'pre',\n configResolved(config) {\n // Check if the build is for SSR. This plugin should not run for SSR builds.\n isSSR = Boolean(config.build.ssr);\n },\n resolveId(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(virtualModuleId)) {\n return `\\0${id}`;\n }\n },\n load(id) {\n if (isSSR) {\n return null;\n }\n\n if (id.includes(`\\0${virtualModuleId}`)) {\n return virtualResourceLoader(id);\n }\n },\n async transform(code, id) {\n if (isSSR) {\n return null;\n }\n\n if (compiledVocabFileFilter.test(id)) {\n const transformedCode = await transformVocabFile(code, id, vocabConfig);\n\n return {\n code: transformedCode,\n map: null, // provide source map if available\n };\n }\n },\n };\n};\n"],"mappings":";;;;;;AAAA,MAAa,0BAA0B;AACvC,MAAa,kBAAkB;AAC/B,MAAa,iBAAiB;;;;ACa9B,MAAMA,UAAQC,MAAO,OAAO,YAAY;AAOxC,SAAS,gBAAgB,QAAgB,MAAqB;AAC5D,KAAI,SAAS,OAAO;EAClB,MAAM,GAAGC,aAAW,cAAc,MAAM,OAAO;AAC/C,SAAOA;;CAET,MAAM,EAAE,YAAY,eAAe,MAAM,OAAO;AAChD,QAAO;;AAGT,MAAa,qBAAqB,OAChC,MACA,IACA,WACG;AACH,SAAM,2BAA2B,GAAG;CAEpC,IAAI,SAAS;CAEb,MAAM,kBAAkB,6BAA6B,GAAG;CAExD,MAAM,oBAAoB,gBACxB;EAAE,UAAU;EAAiB,WAAW;EAAO,EAC/C,OACD;CAED,MAAM,uBAAuB,0BAA0B,kBAAkB;CAEzE,MAAM,eAAwB;;QAExB,OAAO,KAAK,kBAAkB,UAAU,CACvC,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,GAAG,CACvE,KAAK,MAAM,CAAC;;;AAInB,OAAM,cAAc;CACpB,MAAM,aAAa,gBAAgB,MAAM,MAAM;AAC/C,KAAI,WAAW,SAAS,GAAG;EACzB,MAAM,aAAa,WAAW;AAC9B,UAAM,qBAAqB,WAAW,EAAE,OAAO,KAAK;AAEpD,WAAkB;;QAEd,aAAa;iCACY,WAAW,EAAE;;QAErC;AAEL,QAAM,eAAe,MAAM;EAE3B,MAAM,aAAa,gBAAgB,MAAM,MAAM,CAAC;AAChD,UAAM,qBAAqB,WAAW,OAAO,KAAK;AAElD,WAAkB;;QAEd,aAAa;gBACL,WAAW;;;AAGzB,SAAM,4BAA4B,OAAO;AAEzC,QAAO;;AAGT,MAAM,6BACH,uBAA0C,SAAiB;AAK1D,QAAgB,+BAJG,KAAK,UACtB,iBAAiB,MAAM,kBAAkB,CAC1C,CAEyD,IAAI,MAAM;;AAGxE,MAAM,oBACJ,MACA,sBACG;CACH,MAAM,uBAAuB,kBAAkB,UAAU,SAAS,EAAE;CAEpE,MAAMC,WAAqC,EAAE;AAE7C,MAAK,MAAM,OAAO,kBAAkB,KAClC,UAAS,OAAO,qBAAqB,KAAK;CAG5C,MAAM,SAAS,OAAO,KAAK,KAAK,UAAU,SAAS,EAAE,QAAQ,CAAC,SAC5D,SACD;CAED,MAAM,kBAAkB,GAAG,iBAAiB;AAE5C,QAAO,GAAG,gBAAgB,GAAG,KAAK,OAAO;;;;;AC/G3C,MAAa,yBAAyB,SACpC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC,IAAc,SAAS,CAAC,SAC7D,QACD;;;;ACSH,MAAa,mBAAmB,EAC9B,kBACoC;CACpC,IAAI,QAAQ;AAEZ,OACE,wBACE,cAAc,qBAAqB,gBAAgB,KAEtD;AAED,QAAO;EACL,MAAM;EACN,OAAO;EACP,SAAS;EACT,eAAe,QAAQ;AAErB,WAAQ,QAAQ,OAAO,MAAM,IAAI;;EAEnC,UAAU,IAAI;AACZ,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,gBAAgB,CAC9B,QAAO,KAAK;;EAGhB,KAAK,IAAI;AACP,OAAI,MACF,QAAO;AAGT,OAAI,GAAG,SAAS,KAAK,kBAAkB,CACrC,QAAO,sBAAsB,GAAG;;EAGpC,MAAM,UAAU,MAAM,IAAI;AACxB,OAAI,MACF,QAAO;AAGT,OAAI,wBAAwB,KAAK,GAAG,CAGlC,QAAO;IACL,MAHsB,MAAM,mBAAmB,MAAM,IAAI,YAAY;IAIrE,KAAK;IACN;;EAGN"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vocab/vite",
3
- "version": "0.2.5-tsdown-20250922064614",
3
+ "version": "0.3.0-fix-messageformat-import-20250923014407",
4
4
  "author": "SEEK",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,7 +38,7 @@
38
38
  "debug": "^4.3.1",
39
39
  "es-module-lexer": "^1.0.0",
40
40
  "picocolors": "^1.0.0",
41
- "@vocab/core": "^1.6.5-tsdown-20250922064614"
41
+ "@vocab/core": "^1.6.5-fix-messageformat-import-20250923014407"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/debug": "^4.1.5",