@vocab/webpack 1.2.19 → 1.2.20
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/chunk-name.cjs +8 -2
- package/dist/chunk-name.cjs.map +1 -0
- package/dist/chunk-name.mjs +7 -2
- package/dist/chunk-name.mjs.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/loader.cjs +11 -11
- package/dist/loader.cjs.map +1 -1
- package/dist/loader.mjs +9 -9
- package/dist/loader.mjs.map +1 -1
- package/dist/web.cjs +4 -4
- package/dist/web.cjs.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-name-C8ocQx-9.cjs +0 -14
- package/dist/chunk-name-C8ocQx-9.cjs.map +0 -1
- package/dist/chunk-name-CyGZnQAJ.mjs +0 -8
- package/dist/chunk-name-CyGZnQAJ.mjs.map +0 -1
package/dist/chunk-name.cjs
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
const require_chunk_name = require('./chunk-name-C8ocQx-9.cjs');
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
//#region src/chunk-name.ts
|
|
3
|
+
function getChunkName(lang) {
|
|
4
|
+
return `${lang}-translations`;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
exports.getChunkName = getChunkName;
|
|
9
|
+
//# sourceMappingURL=chunk-name.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-name.cjs","names":[],"sources":["../src/chunk-name.ts"],"sourcesContent":["export function getChunkName(lang: string) {\n return `${lang}-translations`;\n}\n"],"mappings":";;AAAA,SAAgB,aAAa,MAAc;AACzC,QAAO,GAAG,KAAK"}
|
package/dist/chunk-name.mjs
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/chunk-name.ts
|
|
2
|
+
function getChunkName(lang) {
|
|
3
|
+
return `${lang}-translations`;
|
|
4
|
+
}
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
//#endregion
|
|
7
|
+
export { getChunkName };
|
|
8
|
+
//# sourceMappingURL=chunk-name.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-name.mjs","names":[],"sources":["../src/chunk-name.ts"],"sourcesContent":["export function getChunkName(lang: string) {\n return `${lang}-translations`;\n}\n"],"mappings":";AAAA,SAAgB,aAAa,MAAc;AACzC,QAAO,GAAG,KAAK"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
const require_logger = require('./logger-rOiUqgqu.cjs');
|
|
2
|
-
let
|
|
2
|
+
let _vocab_core = require("@vocab/core");
|
|
3
3
|
|
|
4
4
|
//#region src/index.ts
|
|
5
5
|
/**
|
|
6
6
|
* @deprecated Import from `@vocab/core` instead
|
|
7
7
|
*/
|
|
8
|
-
const compiledVocabFileFilter =
|
|
8
|
+
const compiledVocabFileFilter = _vocab_core.compiledVocabFileFilter;
|
|
9
9
|
var VocabWebpackPlugin = class {
|
|
10
10
|
options;
|
|
11
11
|
constructor({ configFile, ...rest } = {}) {
|
|
12
12
|
require_logger.trace(`Creating Vocab plugin${configFile ? ` with config file ${configFile}` : ""}`);
|
|
13
13
|
this.options = {
|
|
14
|
-
...(0,
|
|
14
|
+
...(0, _vocab_core.resolveConfigSync)(configFile),
|
|
15
15
|
...rest
|
|
16
16
|
};
|
|
17
|
-
(0,
|
|
17
|
+
(0, _vocab_core.validateConfig)(this.options);
|
|
18
18
|
}
|
|
19
19
|
apply(compiler) {
|
|
20
20
|
require_logger.trace(`Applying plugin: ${compiler.options.name} (${compiler.options.target})`);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["_compiledVocabFileFilter"],"sources":["../src/index.ts"],"sourcesContent":["import {\n type UserConfig,\n resolveConfigSync,\n validateConfig,\n compiledVocabFileFilter as _compiledVocabFileFilter,\n} from '@vocab/core';\nimport type { Compiler } from 'webpack';\nimport { trace } from './logger';\n\ninterface UserOptions extends Partial<UserConfig> {\n configFile?: string;\n}\n\n/**\n * @deprecated Import from `@vocab/core` instead\n */\nexport const compiledVocabFileFilter = _compiledVocabFileFilter;\n\nexport class VocabWebpackPlugin {\n options: UserConfig;\n\n constructor({ configFile, ...rest }: UserOptions = {}) {\n trace(\n `Creating Vocab plugin${\n configFile ? ` with config file ${configFile}` : ''\n }`,\n );\n this.options = {\n ...resolveConfigSync(configFile),\n ...rest,\n } as UserConfig;\n\n validateConfig(this.options);\n }\n\n apply(compiler: Compiler) {\n trace(\n `Applying plugin: ${compiler.options.name} (${compiler.options.target})`,\n );\n if (!compiler.options.module) {\n // @ts-expect-error Support for older versions of webpack that may not have module defined at this stage\n compiler.options.module = { rules: [] };\n }\n if (!compiler.options.module.rules) {\n compiler.options.module.rules = [];\n }\n compiler.options.module.rules.splice(0, 0, {\n test: compiledVocabFileFilter,\n loader: require.resolve('@vocab/webpack/loader'),\n options: this.options,\n });\n }\n}\n"],"mappings":";;;;;;;AAgBA,MAAa,0BAA0BA;AAEvC,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,EAAE,YAAY,GAAG,SAAsB,EAAE,EAAE;AACrD,uBACE,wBACE,aAAa,qBAAqB,eAAe,KAEpD;AACD,OAAK,UAAU;GACb,
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["_compiledVocabFileFilter"],"sources":["../src/index.ts"],"sourcesContent":["import {\n type UserConfig,\n resolveConfigSync,\n validateConfig,\n compiledVocabFileFilter as _compiledVocabFileFilter,\n} from '@vocab/core';\nimport type { Compiler } from 'webpack';\nimport { trace } from './logger';\n\ninterface UserOptions extends Partial<UserConfig> {\n configFile?: string;\n}\n\n/**\n * @deprecated Import from `@vocab/core` instead\n */\nexport const compiledVocabFileFilter = _compiledVocabFileFilter;\n\nexport class VocabWebpackPlugin {\n options: UserConfig;\n\n constructor({ configFile, ...rest }: UserOptions = {}) {\n trace(\n `Creating Vocab plugin${\n configFile ? ` with config file ${configFile}` : ''\n }`,\n );\n this.options = {\n ...resolveConfigSync(configFile),\n ...rest,\n } as UserConfig;\n\n validateConfig(this.options);\n }\n\n apply(compiler: Compiler) {\n trace(\n `Applying plugin: ${compiler.options.name} (${compiler.options.target})`,\n );\n if (!compiler.options.module) {\n // @ts-expect-error Support for older versions of webpack that may not have module defined at this stage\n compiler.options.module = { rules: [] };\n }\n if (!compiler.options.module.rules) {\n compiler.options.module.rules = [];\n }\n compiler.options.module.rules.splice(0, 0, {\n test: compiledVocabFileFilter,\n loader: require.resolve('@vocab/webpack/loader'),\n options: this.options,\n });\n }\n}\n"],"mappings":";;;;;;;AAgBA,MAAa,0BAA0BA;AAEvC,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,EAAE,YAAY,GAAG,SAAsB,EAAE,EAAE;AACrD,uBACE,wBACE,aAAa,qBAAqB,eAAe,KAEpD;AACD,OAAK,UAAU;GACb,sCAAqB,WAAW;GAChC,GAAG;GACJ;AAED,kCAAe,KAAK,QAAQ;;CAG9B,MAAM,UAAoB;AACxB,uBACE,oBAAoB,SAAS,QAAQ,KAAK,IAAI,SAAS,QAAQ,OAAO,GACvE;AACD,MAAI,CAAC,SAAS,QAAQ,OAEpB,UAAS,QAAQ,SAAS,EAAE,OAAO,EAAE,EAAE;AAEzC,MAAI,CAAC,SAAS,QAAQ,OAAO,MAC3B,UAAS,QAAQ,OAAO,QAAQ,EAAE;AAEpC,WAAS,QAAQ,OAAO,MAAM,OAAO,GAAG,GAAG;GACzC,MAAM;GACN,QAAQ,QAAQ,QAAQ,wBAAwB;GAChD,SAAS,KAAK;GACf,CAAC"}
|
package/dist/loader.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_logger = require('./logger-rOiUqgqu.cjs');
|
|
2
|
-
const require_chunk_name = require('./chunk-name
|
|
3
|
-
let
|
|
2
|
+
const require_chunk_name = require('./chunk-name.cjs');
|
|
3
|
+
let _vocab_core = require("@vocab/core");
|
|
4
4
|
let path = require("path");
|
|
5
5
|
path = require_logger.__toESM(path);
|
|
6
6
|
let cjs_module_lexer = require("cjs-module-lexer");
|
|
@@ -9,10 +9,10 @@ let es_module_lexer = require("es-module-lexer");
|
|
|
9
9
|
es_module_lexer = require_logger.__toESM(es_module_lexer);
|
|
10
10
|
|
|
11
11
|
//#region src/loader.ts
|
|
12
|
-
const trace
|
|
12
|
+
const trace = require_logger.trace.extend("loader");
|
|
13
13
|
const virtualResourceLoader = require.resolve("virtual-resource-loader");
|
|
14
14
|
function createIdentifier(lang, resourcePath, loadedTranslation) {
|
|
15
|
-
trace
|
|
15
|
+
trace("Creating identifier for language", lang);
|
|
16
16
|
const languageTranslations = loadedTranslation.languages[lang] ?? {};
|
|
17
17
|
const langJson = {};
|
|
18
18
|
for (const key of loadedTranslation.keys) langJson[key] = languageTranslations[key].message;
|
|
@@ -46,18 +46,18 @@ function findExportNames(source, mode) {
|
|
|
46
46
|
return exports$1;
|
|
47
47
|
}
|
|
48
48
|
async function vocabLoader(source) {
|
|
49
|
-
trace
|
|
49
|
+
trace(`Using vocab loader for ${this.resourcePath}`);
|
|
50
50
|
const callback = this.async();
|
|
51
51
|
if (!callback) throw new Error(`Webpack didn't provide an async callback`);
|
|
52
52
|
const config = this.getOptions();
|
|
53
|
-
const devJsonFilePath = (0,
|
|
54
|
-
const loadedTranslation = (0,
|
|
53
|
+
const devJsonFilePath = (0, _vocab_core.getDevLanguageFileFromTsFile)(this.resourcePath);
|
|
54
|
+
const loadedTranslation = (0, _vocab_core.loadTranslation)({
|
|
55
55
|
filePath: devJsonFilePath,
|
|
56
56
|
fallbacks: "all"
|
|
57
57
|
}, config);
|
|
58
58
|
const target = this.target;
|
|
59
59
|
if (target && target !== "web") {
|
|
60
|
-
trace
|
|
60
|
+
trace(`Why are you using the loader on ${target}?`);
|
|
61
61
|
callback(/* @__PURE__ */ new Error("Called Vocab Loader with non-web target"));
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
@@ -72,7 +72,7 @@ async function vocabLoader(source) {
|
|
|
72
72
|
const esmExports = findExportNames(source, "esm");
|
|
73
73
|
if (esmExports.length > 0) {
|
|
74
74
|
const exportName = esmExports[0];
|
|
75
|
-
trace
|
|
75
|
+
trace(`Found ESM export '${exportName.n}' in ${this.resourcePath}`);
|
|
76
76
|
result = `
|
|
77
77
|
import { createLanguage, createTranslationFile } from '@vocab/webpack/${target}';
|
|
78
78
|
${translations}
|
|
@@ -81,14 +81,14 @@ async function vocabLoader(source) {
|
|
|
81
81
|
} else {
|
|
82
82
|
await cjs_module_lexer.init();
|
|
83
83
|
const exportName = findExportNames(source, "cjs")[0];
|
|
84
|
-
trace
|
|
84
|
+
trace(`Found CJS export '${exportName}' in ${this.resourcePath}`);
|
|
85
85
|
result = `
|
|
86
86
|
const { createLanguage, createTranslationFile } = require('@vocab/webpack/${target}');
|
|
87
87
|
${translations}
|
|
88
88
|
exports.${exportName} = translations;
|
|
89
89
|
`;
|
|
90
90
|
}
|
|
91
|
-
trace
|
|
91
|
+
trace("Created translation file", result);
|
|
92
92
|
callback(null, result);
|
|
93
93
|
}
|
|
94
94
|
|
package/dist/loader.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.cjs","names":["
|
|
1
|
+
{"version":3,"file":"loader.cjs","names":["_trace","langJson: TranslationMessagesByKey","getChunkName","exports","esModuleLexer","cjsModuleLexer"],"sources":["../src/loader.ts"],"sourcesContent":["import path from 'path';\nimport {\n type LoadedTranslation,\n type UserConfig,\n type TranslationMessagesByKey,\n getDevLanguageFileFromTsFile,\n loadTranslation,\n} from '@vocab/core';\nimport * as cjsModuleLexer from 'cjs-module-lexer';\nimport * as esModuleLexer from 'es-module-lexer';\nimport type { LoaderContext as WebpackLoaderContext } from 'webpack';\n\nimport { getChunkName } from './chunk-name';\nimport { trace as _trace } from './logger';\n\ntype LoaderContext = WebpackLoaderContext<UserConfig>;\n\nconst trace = _trace.extend('loader');\n\n// Resolve virtual-resource-loader dependency from current package\nconst virtualResourceLoader = require.resolve('virtual-resource-loader');\n\nfunction createIdentifier(\n lang: string,\n resourcePath: string,\n loadedTranslation: LoadedTranslation,\n) {\n trace('Creating identifier for language', lang);\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 unloader = `${virtualResourceLoader}?source=${encodeURIComponent(\n base64,\n )}`;\n const fileIdent = path.basename(resourcePath, 'translations.json');\n\n return `./${fileIdent}-${lang}-virtual.json!=!${unloader}!`;\n}\n\n// reimplement `stringifyRequest` from loader-utils 2.x\n// https://github.com/webpack/loader-utils/blob/master/CHANGELOG.md#300-2021-10-20\nfunction stringifyRequest(this: LoaderContext, request: string) {\n return JSON.stringify(this.utils.contextify(this.context, request));\n}\n\nfunction renderLanguageLoaderAsync(\n this: LoaderContext,\n resourcePath: string,\n loadedTranslation: LoadedTranslation,\n) {\n return (lang: string) => {\n const identifier = stringifyRequest.call(\n this,\n createIdentifier(lang, resourcePath, loadedTranslation),\n );\n\n return /* ts */ `\n createLanguage(\n require.resolveWeak(${identifier}),\n () => import(\n /* webpackChunkName: ${JSON.stringify(getChunkName(lang))} */\n ${identifier}\n )\n )\n `.trim();\n };\n}\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 default async function vocabLoader(this: LoaderContext, source: string) {\n trace(`Using vocab loader for ${this.resourcePath}`);\n const callback = this.async();\n\n if (!callback) {\n throw new Error(`Webpack didn't provide an async callback`);\n }\n\n const config = this.getOptions();\n\n const devJsonFilePath = getDevLanguageFileFromTsFile(this.resourcePath);\n\n const loadedTranslation = loadTranslation(\n { filePath: devJsonFilePath, fallbacks: 'all' },\n config,\n );\n\n const target = this.target;\n if (target && target !== 'web') {\n trace(`Why are you using the loader on ${target}?`);\n callback(new Error('Called Vocab Loader with non-web target'));\n return;\n }\n\n const renderLanguageLoader = renderLanguageLoaderAsync.call(\n this,\n devJsonFilePath,\n loadedTranslation,\n );\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 let result;\n\n // this is necessary for the Web Assembly boot\n await esModuleLexer.init;\n const esmExports = findExportNames(source, 'esm');\n if (esmExports.length > 0) {\n const exportName = esmExports[0];\n trace(`Found ESM export '${exportName.n}' in ${this.resourcePath}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/webpack/${target}';\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(source, 'cjs')[0];\n trace(`Found CJS export '${exportName}' in ${this.resourcePath}`);\n\n result = /* ts */ `\n const { createLanguage, createTranslationFile } = require('@vocab/webpack/${target}');\n ${translations}\n exports.${exportName} = translations;\n `;\n }\n\n trace('Created translation file', result);\n\n callback(null, result);\n}\n"],"mappings":";;;;;;;;;;;AAiBA,MAAM,QAAQA,qBAAO,OAAO,SAAS;AAGrC,MAAM,wBAAwB,QAAQ,QAAQ,0BAA0B;AAExE,SAAS,iBACP,MACA,cACA,mBACA;AACA,OAAM,oCAAoC,KAAK;CAC/C,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,WAAW,GAAG,sBAAsB,UAAU,mBAClD,OACD;AAGD,QAAO,KAFW,aAAK,SAAS,cAAc,oBAAoB,CAE5C,GAAG,KAAK,kBAAkB,SAAS;;AAK3D,SAAS,iBAAsC,SAAiB;AAC9D,QAAO,KAAK,UAAU,KAAK,MAAM,WAAW,KAAK,SAAS,QAAQ,CAAC;;AAGrE,SAAS,0BAEP,cACA,mBACA;AACA,SAAQ,SAAiB;EACvB,MAAM,aAAa,iBAAiB,KAClC,MACA,iBAAiB,MAAM,cAAc,kBAAkB,CACxD;AAED,SAAgB;;8BAEU,WAAW;;iCAER,KAAK,UAAUC,gCAAa,KAAK,CAAC,CAAC;YACxD,WAAW;;;MAGjB,MAAM;;;AASZ,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,eAA8B,YAAiC,QAAgB;AAC7E,OAAM,0BAA0B,KAAK,eAAe;CACpD,MAAM,WAAW,KAAK,OAAO;AAE7B,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,2CAA2C;CAG7D,MAAM,SAAS,KAAK,YAAY;CAEhC,MAAM,gEAA+C,KAAK,aAAa;CAEvE,MAAM,qDACJ;EAAE,UAAU;EAAiB,WAAW;EAAO,EAC/C,OACD;CAED,MAAM,SAAS,KAAK;AACpB,KAAI,UAAU,WAAW,OAAO;AAC9B,QAAM,mCAAmC,OAAO,GAAG;AACnD,2BAAS,IAAI,MAAM,0CAA0C,CAAC;AAC9D;;CAGF,MAAM,uBAAuB,0BAA0B,KACrD,MACA,iBACA,kBACD;CAED,MAAM,eAAwB;;QAExB,OAAO,KAAK,kBAAkB,UAAU,CACvC,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,GAAG,CACvE,KAAK,MAAM,CAAC;;;CAGnB,IAAI;AAGJ,OAAMC,gBAAc;CACpB,MAAM,aAAa,gBAAgB,QAAQ,MAAM;AACjD,KAAI,WAAW,SAAS,GAAG;EACzB,MAAM,aAAa,WAAW;AAC9B,QAAM,qBAAqB,WAAW,EAAE,OAAO,KAAK,eAAe;AAEnE,WAAkB;8EACwD,OAAO;QAC7E,aAAa;iCACY,WAAW,EAAE;;QAErC;AAEL,QAAMC,iBAAe,MAAM;EAE3B,MAAM,aAAa,gBAAgB,QAAQ,MAAM,CAAC;AAClD,QAAM,qBAAqB,WAAW,OAAO,KAAK,eAAe;AAEjE,WAAkB;kFAC4D,OAAO;QACjF,aAAa;gBACL,WAAW;;;AAIzB,OAAM,4BAA4B,OAAO;AAEzC,UAAS,MAAM,OAAO"}
|
package/dist/loader.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { n as __require, t as trace } from "./logger-Cse01Ceq.mjs";
|
|
2
|
-
import {
|
|
1
|
+
import { n as __require, t as trace$1 } from "./logger-Cse01Ceq.mjs";
|
|
2
|
+
import { getChunkName } from "./chunk-name.mjs";
|
|
3
3
|
import { getDevLanguageFileFromTsFile, loadTranslation } from "@vocab/core";
|
|
4
4
|
import path from "path";
|
|
5
5
|
import * as cjsModuleLexer from "cjs-module-lexer";
|
|
6
6
|
import * as esModuleLexer from "es-module-lexer";
|
|
7
7
|
|
|
8
8
|
//#region src/loader.ts
|
|
9
|
-
const trace
|
|
9
|
+
const trace = trace$1.extend("loader");
|
|
10
10
|
const virtualResourceLoader = __require.resolve("virtual-resource-loader");
|
|
11
11
|
function createIdentifier(lang, resourcePath, loadedTranslation) {
|
|
12
|
-
trace
|
|
12
|
+
trace("Creating identifier for language", lang);
|
|
13
13
|
const languageTranslations = loadedTranslation.languages[lang] ?? {};
|
|
14
14
|
const langJson = {};
|
|
15
15
|
for (const key of loadedTranslation.keys) langJson[key] = languageTranslations[key].message;
|
|
@@ -43,7 +43,7 @@ function findExportNames(source, mode) {
|
|
|
43
43
|
return exports;
|
|
44
44
|
}
|
|
45
45
|
async function vocabLoader(source) {
|
|
46
|
-
trace
|
|
46
|
+
trace(`Using vocab loader for ${this.resourcePath}`);
|
|
47
47
|
const callback = this.async();
|
|
48
48
|
if (!callback) throw new Error(`Webpack didn't provide an async callback`);
|
|
49
49
|
const config = this.getOptions();
|
|
@@ -54,7 +54,7 @@ async function vocabLoader(source) {
|
|
|
54
54
|
}, config);
|
|
55
55
|
const target = this.target;
|
|
56
56
|
if (target && target !== "web") {
|
|
57
|
-
trace
|
|
57
|
+
trace(`Why are you using the loader on ${target}?`);
|
|
58
58
|
callback(/* @__PURE__ */ new Error("Called Vocab Loader with non-web target"));
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
@@ -69,7 +69,7 @@ async function vocabLoader(source) {
|
|
|
69
69
|
const esmExports = findExportNames(source, "esm");
|
|
70
70
|
if (esmExports.length > 0) {
|
|
71
71
|
const exportName = esmExports[0];
|
|
72
|
-
trace
|
|
72
|
+
trace(`Found ESM export '${exportName.n}' in ${this.resourcePath}`);
|
|
73
73
|
result = `
|
|
74
74
|
import { createLanguage, createTranslationFile } from '@vocab/webpack/${target}';
|
|
75
75
|
${translations}
|
|
@@ -78,14 +78,14 @@ async function vocabLoader(source) {
|
|
|
78
78
|
} else {
|
|
79
79
|
await cjsModuleLexer.init();
|
|
80
80
|
const exportName = findExportNames(source, "cjs")[0];
|
|
81
|
-
trace
|
|
81
|
+
trace(`Found CJS export '${exportName}' in ${this.resourcePath}`);
|
|
82
82
|
result = `
|
|
83
83
|
const { createLanguage, createTranslationFile } = require('@vocab/webpack/${target}');
|
|
84
84
|
${translations}
|
|
85
85
|
exports.${exportName} = translations;
|
|
86
86
|
`;
|
|
87
87
|
}
|
|
88
|
-
trace
|
|
88
|
+
trace("Created translation file", result);
|
|
89
89
|
callback(null, result);
|
|
90
90
|
}
|
|
91
91
|
|
package/dist/loader.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.mjs","names":["
|
|
1
|
+
{"version":3,"file":"loader.mjs","names":["_trace","langJson: TranslationMessagesByKey","exports"],"sources":["../src/loader.ts"],"sourcesContent":["import path from 'path';\nimport {\n type LoadedTranslation,\n type UserConfig,\n type TranslationMessagesByKey,\n getDevLanguageFileFromTsFile,\n loadTranslation,\n} from '@vocab/core';\nimport * as cjsModuleLexer from 'cjs-module-lexer';\nimport * as esModuleLexer from 'es-module-lexer';\nimport type { LoaderContext as WebpackLoaderContext } from 'webpack';\n\nimport { getChunkName } from './chunk-name';\nimport { trace as _trace } from './logger';\n\ntype LoaderContext = WebpackLoaderContext<UserConfig>;\n\nconst trace = _trace.extend('loader');\n\n// Resolve virtual-resource-loader dependency from current package\nconst virtualResourceLoader = require.resolve('virtual-resource-loader');\n\nfunction createIdentifier(\n lang: string,\n resourcePath: string,\n loadedTranslation: LoadedTranslation,\n) {\n trace('Creating identifier for language', lang);\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 unloader = `${virtualResourceLoader}?source=${encodeURIComponent(\n base64,\n )}`;\n const fileIdent = path.basename(resourcePath, 'translations.json');\n\n return `./${fileIdent}-${lang}-virtual.json!=!${unloader}!`;\n}\n\n// reimplement `stringifyRequest` from loader-utils 2.x\n// https://github.com/webpack/loader-utils/blob/master/CHANGELOG.md#300-2021-10-20\nfunction stringifyRequest(this: LoaderContext, request: string) {\n return JSON.stringify(this.utils.contextify(this.context, request));\n}\n\nfunction renderLanguageLoaderAsync(\n this: LoaderContext,\n resourcePath: string,\n loadedTranslation: LoadedTranslation,\n) {\n return (lang: string) => {\n const identifier = stringifyRequest.call(\n this,\n createIdentifier(lang, resourcePath, loadedTranslation),\n );\n\n return /* ts */ `\n createLanguage(\n require.resolveWeak(${identifier}),\n () => import(\n /* webpackChunkName: ${JSON.stringify(getChunkName(lang))} */\n ${identifier}\n )\n )\n `.trim();\n };\n}\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 default async function vocabLoader(this: LoaderContext, source: string) {\n trace(`Using vocab loader for ${this.resourcePath}`);\n const callback = this.async();\n\n if (!callback) {\n throw new Error(`Webpack didn't provide an async callback`);\n }\n\n const config = this.getOptions();\n\n const devJsonFilePath = getDevLanguageFileFromTsFile(this.resourcePath);\n\n const loadedTranslation = loadTranslation(\n { filePath: devJsonFilePath, fallbacks: 'all' },\n config,\n );\n\n const target = this.target;\n if (target && target !== 'web') {\n trace(`Why are you using the loader on ${target}?`);\n callback(new Error('Called Vocab Loader with non-web target'));\n return;\n }\n\n const renderLanguageLoader = renderLanguageLoaderAsync.call(\n this,\n devJsonFilePath,\n loadedTranslation,\n );\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 let result;\n\n // this is necessary for the Web Assembly boot\n await esModuleLexer.init;\n const esmExports = findExportNames(source, 'esm');\n if (esmExports.length > 0) {\n const exportName = esmExports[0];\n trace(`Found ESM export '${exportName.n}' in ${this.resourcePath}`);\n\n result = /* ts */ `\n import { createLanguage, createTranslationFile } from '@vocab/webpack/${target}';\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(source, 'cjs')[0];\n trace(`Found CJS export '${exportName}' in ${this.resourcePath}`);\n\n result = /* ts */ `\n const { createLanguage, createTranslationFile } = require('@vocab/webpack/${target}');\n ${translations}\n exports.${exportName} = translations;\n `;\n }\n\n trace('Created translation file', result);\n\n callback(null, result);\n}\n"],"mappings":";;;;;;;;AAiBA,MAAM,QAAQA,QAAO,OAAO,SAAS;AAGrC,MAAM,kCAAgC,QAAQ,0BAA0B;AAExE,SAAS,iBACP,MACA,cACA,mBACA;AACA,OAAM,oCAAoC,KAAK;CAC/C,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,WAAW,GAAG,sBAAsB,UAAU,mBAClD,OACD;AAGD,QAAO,KAFW,KAAK,SAAS,cAAc,oBAAoB,CAE5C,GAAG,KAAK,kBAAkB,SAAS;;AAK3D,SAAS,iBAAsC,SAAiB;AAC9D,QAAO,KAAK,UAAU,KAAK,MAAM,WAAW,KAAK,SAAS,QAAQ,CAAC;;AAGrE,SAAS,0BAEP,cACA,mBACA;AACA,SAAQ,SAAiB;EACvB,MAAM,aAAa,iBAAiB,KAClC,MACA,iBAAiB,MAAM,cAAc,kBAAkB,CACxD;AAED,SAAgB;;8BAEU,WAAW;;iCAER,KAAK,UAAU,aAAa,KAAK,CAAC,CAAC;YACxD,WAAW;;;MAGjB,MAAM;;;AASZ,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,eAA8B,YAAiC,QAAgB;AAC7E,OAAM,0BAA0B,KAAK,eAAe;CACpD,MAAM,WAAW,KAAK,OAAO;AAE7B,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,2CAA2C;CAG7D,MAAM,SAAS,KAAK,YAAY;CAEhC,MAAM,kBAAkB,6BAA6B,KAAK,aAAa;CAEvE,MAAM,oBAAoB,gBACxB;EAAE,UAAU;EAAiB,WAAW;EAAO,EAC/C,OACD;CAED,MAAM,SAAS,KAAK;AACpB,KAAI,UAAU,WAAW,OAAO;AAC9B,QAAM,mCAAmC,OAAO,GAAG;AACnD,2BAAS,IAAI,MAAM,0CAA0C,CAAC;AAC9D;;CAGF,MAAM,uBAAuB,0BAA0B,KACrD,MACA,iBACA,kBACD;CAED,MAAM,eAAwB;;QAExB,OAAO,KAAK,kBAAkB,UAAU,CACvC,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,GAAG,CACvE,KAAK,MAAM,CAAC;;;CAGnB,IAAI;AAGJ,OAAM,cAAc;CACpB,MAAM,aAAa,gBAAgB,QAAQ,MAAM;AACjD,KAAI,WAAW,SAAS,GAAG;EACzB,MAAM,aAAa,WAAW;AAC9B,QAAM,qBAAqB,WAAW,EAAE,OAAO,KAAK,eAAe;AAEnE,WAAkB;8EACwD,OAAO;QAC7E,aAAa;iCACY,WAAW,EAAE;;QAErC;AAEL,QAAM,eAAe,MAAM;EAE3B,MAAM,aAAa,gBAAgB,QAAQ,MAAM,CAAC;AAClD,QAAM,qBAAqB,WAAW,OAAO,KAAK,eAAe;AAEjE,WAAkB;kFAC4D,OAAO;QACjF,aAAa;gBACL,WAAW;;;AAIzB,OAAM,4BAA4B,OAAO;AAEzC,UAAS,MAAM,OAAO"}
|
package/dist/web.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_logger = require('./logger-rOiUqgqu.cjs');
|
|
2
|
-
let
|
|
3
|
-
let
|
|
2
|
+
let _vocab_core_icu_handler = require("@vocab/core/icu-handler");
|
|
3
|
+
let _vocab_core_translation_file = require("@vocab/core/translation-file");
|
|
4
4
|
|
|
5
5
|
//#region src/web.ts
|
|
6
6
|
const createLanguage = (moduleId, loadImport) => {
|
|
@@ -8,7 +8,7 @@ const createLanguage = (moduleId, loadImport) => {
|
|
|
8
8
|
return {
|
|
9
9
|
getValue: (locale) => {
|
|
10
10
|
if (!__webpack_modules__[moduleId]) return;
|
|
11
|
-
return (0,
|
|
11
|
+
return (0, _vocab_core_icu_handler.getParsedICUMessages)(__webpack_require__(moduleId), locale);
|
|
12
12
|
},
|
|
13
13
|
load: () => {
|
|
14
14
|
if (!promiseValue) promiseValue = loadImport();
|
|
@@ -22,7 +22,7 @@ exports.createLanguage = createLanguage;
|
|
|
22
22
|
Object.defineProperty(exports, 'createTranslationFile', {
|
|
23
23
|
enumerable: true,
|
|
24
24
|
get: function () {
|
|
25
|
-
return
|
|
25
|
+
return _vocab_core_translation_file.createTranslationFile;
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
28
|
//# sourceMappingURL=web.cjs.map
|
package/dist/web.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.cjs","names":["promiseValue: Promise<any>"],"sources":["../src/web.ts"],"sourcesContent":["import type { TranslationModule, TranslationMessagesByKey } from '@vocab/core';\nimport { getParsedICUMessages } from '@vocab/core/icu-handler';\n\nexport { createTranslationFile } from '@vocab/core/translation-file';\n\nexport const createLanguage = (\n moduleId: string,\n loadImport: () => Promise<any>,\n): TranslationModule<any> => {\n let promiseValue: Promise<any>;\n\n return {\n getValue: (locale) => {\n // @ts-expect-error Missing webpack types\n if (!__webpack_modules__[moduleId]) {\n return undefined;\n }\n\n // @ts-expect-error Missing webpack types\n const m = __webpack_require__(moduleId) as TranslationMessagesByKey;\n\n return getParsedICUMessages(m, locale);\n },\n load: () => {\n if (!promiseValue) {\n promiseValue = loadImport();\n }\n return promiseValue;\n },\n };\n};\n"],"mappings":";;;;;AAKA,MAAa,kBACX,UACA,eAC2B;CAC3B,IAAIA;AAEJ,QAAO;EACL,WAAW,WAAW;AAEpB,OAAI,CAAC,oBAAoB,UACvB;AAMF,
|
|
1
|
+
{"version":3,"file":"web.cjs","names":["promiseValue: Promise<any>"],"sources":["../src/web.ts"],"sourcesContent":["import type { TranslationModule, TranslationMessagesByKey } from '@vocab/core';\nimport { getParsedICUMessages } from '@vocab/core/icu-handler';\n\nexport { createTranslationFile } from '@vocab/core/translation-file';\n\nexport const createLanguage = (\n moduleId: string,\n loadImport: () => Promise<any>,\n): TranslationModule<any> => {\n let promiseValue: Promise<any>;\n\n return {\n getValue: (locale) => {\n // @ts-expect-error Missing webpack types\n if (!__webpack_modules__[moduleId]) {\n return undefined;\n }\n\n // @ts-expect-error Missing webpack types\n const m = __webpack_require__(moduleId) as TranslationMessagesByKey;\n\n return getParsedICUMessages(m, locale);\n },\n load: () => {\n if (!promiseValue) {\n promiseValue = loadImport();\n }\n return promiseValue;\n },\n };\n};\n"],"mappings":";;;;;AAKA,MAAa,kBACX,UACA,eAC2B;CAC3B,IAAIA;AAEJ,QAAO;EACL,WAAW,WAAW;AAEpB,OAAI,CAAC,oBAAoB,UACvB;AAMF,4DAFU,oBAAoB,SAAS,EAER,OAAO;;EAExC,YAAY;AACV,OAAI,CAAC,aACH,gBAAe,YAAY;AAE7B,UAAO;;EAEV"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vocab/webpack",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.20",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/seek-oss/vocab.git",
|
|
@@ -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.7.
|
|
41
|
+
"@vocab/core": "^1.7.5",
|
|
42
42
|
"virtual-resource-loader": "^2.0.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/chunk-name.ts
|
|
3
|
-
function getChunkName(lang) {
|
|
4
|
-
return `${lang}-translations`;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
//#endregion
|
|
8
|
-
Object.defineProperty(exports, 'getChunkName', {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function () {
|
|
11
|
-
return getChunkName;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=chunk-name-C8ocQx-9.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-name-C8ocQx-9.cjs","names":[],"sources":["../src/chunk-name.ts"],"sourcesContent":["export function getChunkName(lang: string) {\n return `${lang}-translations`;\n}\n"],"mappings":";;AAAA,SAAgB,aAAa,MAAc;AACzC,QAAO,GAAG,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-name-CyGZnQAJ.mjs","names":[],"sources":["../src/chunk-name.ts"],"sourcesContent":["export function getChunkName(lang: string) {\n return `${lang}-translations`;\n}\n"],"mappings":";AAAA,SAAgB,aAAa,MAAc;AACzC,QAAO,GAAG,KAAK"}
|