@zohodesk/client_build_tool 0.0.1
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/.babelrc +12 -0
- package/.lintstagedrc +3 -0
- package/.vscode/settings.json +5 -0
- package/CHANGELOG.md +9 -0
- package/ConfigurationDocumentation.md +401 -0
- package/ContributionGuide.md +2 -0
- package/NOTES-Dec12.md +12 -0
- package/README.md +91 -0
- package/README_backup.md +82 -0
- package/TODO.md +35 -0
- package/cli.js +31 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-final.json +2 -0
- package/coverage/coverage-summary.json +3 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +116 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/updateArrayWithDefault.js.html +196 -0
- package/docs/CSSCustomPluginsDocumentation.md +71 -0
- package/docs/CustomChunksConfiguration.md +0 -0
- package/docs/EFCFileTemplate.md +0 -0
- package/docs/MockApi.md +61 -0
- package/docs/NameTemplateUtility.md +93 -0
- package/docs/ServiseWorkerTemplate.md +0 -0
- package/docs/SupportedBrowserVersions.md +61 -0
- package/helpDocs/check.js +7 -0
- package/helpDocs/commmands/build.md +0 -0
- package/helpDocs/commmands/start.md +0 -0
- package/helpDocs/examples/buildWithContentHash.md +0 -0
- package/helpDocs/examples/startDevServer.md +0 -0
- package/helpDocs/examples/startWithMockAPI.md +0 -0
- package/helpDocs/node18-env.md +30 -0
- package/helpDocs/troubleshootings/NewMachineSetup.md +71 -0
- package/helpDocs/troubleshootings/README.md +9 -0
- package/helpDocs/troubleshootings/hg_install.sh +18 -0
- package/helpDocs/troubleshootings/newMachineMac.sh +86 -0
- package/helpDocs/troubleshootings/newMachineUbundu.bash +84 -0
- package/lib/allCommandsConfigs.js +25 -0
- package/lib/commands/build/commandExecutor.js +17 -0
- package/lib/commands/build/config.js +12 -0
- package/lib/commands/build/errorHander.js +10 -0
- package/lib/commands/build/optionsProcessor.js +35 -0
- package/lib/commands/buildEs/commandExecutor.js +33 -0
- package/lib/commands/buildEs/config.js +12 -0
- package/lib/commands/buildLib/commandExecutor.js +33 -0
- package/lib/commands/buildLib/config.js +12 -0
- package/lib/commands/mockserver/commandExecutor.js +43 -0
- package/lib/commands/mockserver/config.js +12 -0
- package/lib/commands/start/commandExecutor.js +12 -0
- package/lib/commands/start/config.js +12 -0
- package/lib/commands/start/deprecationHandler.js +10 -0
- package/lib/commands/start/errorHander.js +10 -0
- package/lib/commands/start/optionsProcessor.js +30 -0
- package/lib/commands/start/postProcessor.js +10 -0
- package/lib/commands/start/preProcessor.js +10 -0
- package/lib/commands/template/commandExecutor.js +28 -0
- package/lib/commands/template/config.js +12 -0
- package/lib/commands/version/commandExecutor.js +14 -0
- package/lib/commands/version/config.js +12 -0
- package/lib/commands/version/errorHander.js +10 -0
- package/lib/commandsRouter.js +74 -0
- package/lib/index.js +12 -0
- package/lib/logger.js +34 -0
- package/lib/schemas/applyValuesToSchema/index.js +34 -0
- package/lib/schemas/applyValuesToSchema/isObject.js +10 -0
- package/lib/schemas/applyValuesToSchema/isValid.js +14 -0
- package/lib/schemas/cliArgsToObject.js +39 -0
- package/lib/schemas/defaultConfigValues.js +276 -0
- package/lib/schemas/defaultConfigValuesOnly.js +161 -0
- package/lib/schemas/deprecatedOptionsHandler.js +67 -0
- package/lib/schemas/getNpmVersion.js +22 -0
- package/lib/schemas/giveDefaultValue.js +18 -0
- package/lib/schemas/npmConfigToObject.js +35 -0
- package/lib/schemas/readOptions.js +54 -0
- package/lib/schemas/readOptionsForConfigFile.js +42 -0
- package/lib/shared/babel/babelWebConfig.js +51 -0
- package/lib/shared/babel/babel_plugins/removeAttributesPlugin.js +23 -0
- package/lib/shared/babel/defaultBabelPlugins.js +26 -0
- package/lib/shared/babel/runBabelForJSFile.js +24 -0
- package/lib/shared/bundler/webpack/common/decidePublicPath.js +52 -0
- package/lib/shared/bundler/webpack/common/libAlias.js +31 -0
- package/lib/shared/bundler/webpack/common/modeUtils.js +31 -0
- package/lib/shared/bundler/webpack/common/nameTemplates.js +78 -0
- package/lib/shared/bundler/webpack/common/resourceBasedPublicPath.js +21 -0
- package/lib/shared/bundler/webpack/configCustomLoaders.js +10 -0
- package/lib/shared/bundler/webpack/cssLoaders.js +16 -0
- package/lib/shared/bundler/webpack/custom_plugins/CdnChangePlugin.js +95 -0
- package/lib/shared/bundler/webpack/custom_plugins/EFCTemplatePlugin.js +112 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ContributionGuide.md +11 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nFilesEmitPlugin.js +172 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nKeysIdentifer.js +76 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nRuntimeDealerPlugin.js +203 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nSplit.md +95 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/LocaleChunkAssetsStore.js +73 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ModulesI18nKeysStore.js +88 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/README.md +25 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/constants.js +29 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/createHash.js +24 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/getI18nLoadingRuntimeModule.js +76 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/index.js +39 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/iterateModulesInChunk.js +50 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/optionsHandler.js +68 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/pathCreator.js +23 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/readI18nValues.js +29 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateFileName.js +43 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateHashHelpers.js +77 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/collectI18nKeys.js +66 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/getChunkModules.js +13 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/hashUtils.js +19 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/index.js +31 -0
- package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/propertiesUtils.js +129 -0
- package/lib/shared/bundler/webpack/custom_plugins/InitialHtmlPlugin.js +54 -0
- package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/addFilesNamesToManifestJson.js +24 -0
- package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createInitialEntries.js +17 -0
- package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createManifestJson.js +35 -0
- package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/findInitialFileNames.js +18 -0
- package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/index.js +44 -0
- package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/removeHashFromFileName.js +18 -0
- package/lib/shared/bundler/webpack/custom_plugins/RTLSplitPlugin.js +1 -0
- package/lib/shared/bundler/webpack/custom_plugins/ResourceHintsPlugin.js +191 -0
- package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/OverwriteCssPathForRTL.js +62 -0
- package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtlCssPlugin.js +84 -0
- package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtrSplit.md +34 -0
- package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/replaceCssDirTemplate.js +27 -0
- package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/classHandling.js +20 -0
- package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/index.js +78 -0
- package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/selectorWeightPrefixAdder.js +51 -0
- package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/windowsModification.js +16 -0
- package/lib/shared/bundler/webpack/custom_plugins/ServiceWorkerPlugin.js +110 -0
- package/lib/shared/bundler/webpack/custom_plugins/SourceMapPlugin/index.js +38 -0
- package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/addHashToFilePath.js +22 -0
- package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/index.js +55 -0
- package/lib/shared/bundler/webpack/custom_plugins/UglifyCSSPlugin/index.js.js +49 -0
- package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/ErrorHandler.js +62 -0
- package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/index.js +362 -0
- package/lib/shared/bundler/webpack/custom_plugins/emitAsset.js +14 -0
- package/lib/shared/bundler/webpack/custom_plugins/getInitialAssetsFuncTemplate.js +57 -0
- package/lib/shared/bundler/webpack/custom_plugins/getInitialI18nAssetsArrayStr.js +87 -0
- package/lib/shared/bundler/webpack/defaultVendorPatternList.js +13 -0
- package/lib/shared/bundler/webpack/entryConfig.js +28 -0
- package/lib/shared/bundler/webpack/externals.js +13 -0
- package/lib/shared/bundler/webpack/getCSSLoaders.js +27 -0
- package/lib/shared/bundler/webpack/getFilenameFromModule.js +24 -0
- package/lib/shared/bundler/webpack/getSourceMapType.js +10 -0
- package/lib/shared/bundler/webpack/jsLoaders.js +17 -0
- package/lib/shared/bundler/webpack/loaderConfigs/assetLoaders.js +12 -0
- package/lib/shared/bundler/webpack/loaderConfigs/babelLoaderConfig.js +18 -0
- package/lib/shared/bundler/webpack/loaderConfigs/checkIsPatternsMatchFilename.js +56 -0
- package/lib/shared/bundler/webpack/loaderConfigs/configHtmlTemplateLoader.js +18 -0
- package/lib/shared/bundler/webpack/loaderConfigs/configPostCssLoader.js +37 -0
- package/lib/shared/bundler/webpack/loaderConfigs/configWebWorkerLoader.js +21 -0
- package/lib/shared/bundler/webpack/loaderConfigs/configsAssetsLoaders.js +138 -0
- package/lib/shared/bundler/webpack/loaderConfigs/cssClassNameGenerate.js +60 -0
- package/lib/shared/bundler/webpack/loaderConfigs/getCssLoaderOptions.js +21 -0
- package/lib/shared/bundler/webpack/loaders/workerLoader.js +133 -0
- package/lib/shared/bundler/webpack/optimizationConfig.js +43 -0
- package/lib/shared/bundler/webpack/outputConfig.js +28 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configBundleAnalyzer.js +40 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configCSSMinifierPlugin.js +24 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configCdnChangePlugin.js +27 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configCopyPublicFolders.js +63 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configEFCTemplatePlugin.js +46 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configEnvVariables.js +36 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configHtmlWebpackPlugin.js +56 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configI18nSplitPlugin.js +41 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configIgnorePlugin.js +16 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configManifestJsonPlugin.js +32 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configMiniCSSExtractPlugin.js +23 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configProgressPlugin.js +24 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configResourceHintsPlugin.js +21 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configRtlCssPlugin.js +27 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configSelectorWeightPlugin.js +28 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configServiceWorkerPlugin.js +40 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configSourceMapPlugin.js +20 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configTPHashMappingPlugin.js +32 -0
- package/lib/shared/bundler/webpack/pluginConfigs/configVariableConversionPlugin.js +25 -0
- package/lib/shared/bundler/webpack/plugins.js +50 -0
- package/lib/shared/bundler/webpack/resolvers.js +81 -0
- package/lib/shared/bundler/webpack/splitChunksConfig.js +113 -0
- package/lib/shared/bundler/webpack/statsConfig.js +21 -0
- package/lib/shared/bundler/webpack/utils/index.js +26 -0
- package/lib/shared/bundler/webpack/utils/updateArrayWithDefault.js +34 -0
- package/lib/shared/bundler/webpack/webpackBuild.js +27 -0
- package/lib/shared/bundler/webpack/webpackConfig.js +56 -0
- package/lib/shared/commands-utils/doBasicRequirementCheck.js +17 -0
- package/lib/shared/commands-utils/getCliPath.js +39 -0
- package/lib/shared/commands-utils/index.js +29 -0
- package/lib/shared/commands-utils/log.js +13 -0
- package/lib/shared/commands-utils/readArgsFormCommandLine.js +11 -0
- package/lib/shared/commands-utils/readOptionFormCommandLine.js +11 -0
- package/lib/shared/commands-utils/spawnSyncIO.js +38 -0
- package/lib/shared/constants.js +45 -0
- package/lib/shared/fileUtils/copyFile.js +38 -0
- package/lib/shared/fileUtils/directoryIterator.js +21 -0
- package/lib/shared/fileUtils/watchRun.js +100 -0
- package/lib/shared/postcss/custom_postcss_plugins/EmptyPlugin.js +21 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/constants.js +10 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/handleIgnores.js +66 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/index.js +136 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/insertBefore.js +32 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/isPreviouslyProcessed.js +20 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/replaceUtils.js +20 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/separateHoveredSelectorAndNormalSelector.js +24 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/specialCases.js +43 -0
- package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/typeCheckUtils.js +52 -0
- package/lib/shared/postcss/custom_postcss_plugins/RTLSplitPlugin.js +139 -0
- package/lib/shared/postcss/custom_postcss_plugins/SelectorReplace.js +90 -0
- package/lib/shared/postcss/custom_postcss_plugins/ValueReplacer.js +57 -0
- package/lib/shared/postcss/custom_postcss_plugins/VariableModificationPlugin/index.js +343 -0
- package/lib/shared/postcss/filterPluginsAllowedForSpecficFile.js +55 -0
- package/lib/shared/postcss/getAllowedPostCssPlugins.js +30 -0
- package/lib/shared/postcss/getSpecificPostCssPlugin.js +58 -0
- package/lib/shared/postcss/runPostCssForCssFile.js +37 -0
- package/lib/shared/server/configWebpackDevMiddleware.js +41 -0
- package/lib/shared/server/corsHandling.js +21 -0
- package/lib/shared/server/getIp.js +30 -0
- package/lib/shared/server/getServerURL.js +29 -0
- package/lib/shared/server/httpsOptions.js +46 -0
- package/lib/shared/server/initExpressApp.js +19 -0
- package/lib/shared/server/initialHTMLHandling.js +99 -0
- package/lib/shared/server/mockApiHandler.js +60 -0
- package/lib/shared/server/mockServer.js +41 -0
- package/lib/shared/server/serveContextFiles.js +27 -0
- package/lib/shared/server/serverBywebpackDevMiddleware.js +35 -0
- package/lib/shared/server/startHttpServer.js +26 -0
- package/lib/shared/server/startHttpsServer.js +38 -0
- package/lib/shared/server/unwanted/addHttp2Server.js +41 -0
- package/lib/shared/server/unwanted/configWebpackDevMiddleware.js +44 -0
- package/lib/shared/server/unwanted/mockApiSupport.js +19 -0
- package/lib/shared/server/unwanted/websocketMockSetup.js +48 -0
- package/lib/shared/server/urlConcat.js +32 -0
- package/lib/shared/utils/requireLocalOrGlobal.js +81 -0
- package/lib/shared/utils/utils.js +1 -0
- package/lib/shared/utils/versionPrint.js +20 -0
- package/npm-shrinkwrap.json +14102 -0
- package/package.json +54 -0
- package/polyfillForOldNodeVersion.js +10 -0
- package/result.json +1 -0
- package/templates/app/README.MD +30 -0
- package/templates/app/package.json +12 -0
- package/templates/library/README.MD +28 -0
- package/templates/library/package.json +11 -0
- package/templates/wms/index.html +43 -0
- package/unittest/index.html +37 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isI18nFile = void 0;
|
|
7
|
+
exports.nameTemplates = nameTemplates;
|
|
8
|
+
|
|
9
|
+
var _modeUtils = require("./modeUtils");
|
|
10
|
+
|
|
11
|
+
// nameTemplate.js
|
|
12
|
+
// NOTE: these below code can be done in js,
|
|
13
|
+
// we did copy paste in order to avoid unnecessary confusion
|
|
14
|
+
// NOTE: array[0] is dev mode file templates and array[1] is prod mode file templates
|
|
15
|
+
const templates = {
|
|
16
|
+
html: ['index.html', 'index.[contenthash].html'],
|
|
17
|
+
js: ['js/[name].js', 'js/[name].[contenthash].js'],
|
|
18
|
+
chunkjs: ['js-chunks/[name].js', 'js-chunks/[name].[contenthash].js'],
|
|
19
|
+
i18njs: ['i18n-chunks/[locale]/[name].i18n.js', 'i18n-chunks/[locale]/[name].[chunkhash].i18n.js'],
|
|
20
|
+
i18nchunkjs: ['i18n-chunks/[locale]/[name].i18n.js', // 'i18n-chunks/[locale]/[name].[chunkhash].i18n.js'
|
|
21
|
+
'i18n-chunks/[locale]/[name].[contenthash].i18n.js'],
|
|
22
|
+
i18nmanifest: ['i18n-manifest.json', 'i18n-manifest.json'],
|
|
23
|
+
workerjs: ['js/[name].js', 'js/[name].[contenthash].js'],
|
|
24
|
+
css: ['css/[name].css', 'css/[name].[contenthash].css'],
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* NOTE: when you change (cssdir) this line it will have affect on Below files will be affected
|
|
28
|
+
* custom_plugins/RtlSplitPlugin/*
|
|
29
|
+
* pluginConfigs/configMiniCSSExtractPlugin.js
|
|
30
|
+
* pluginConfigs/configRtlCssPlugin.js
|
|
31
|
+
* */
|
|
32
|
+
cssdir: ['css/[name].[dir].css', 'css/[name].[contenthash].[dir].css'],
|
|
33
|
+
image: ['images/[name][ext]', 'images/[name].[contenthash][ext]'],
|
|
34
|
+
font: ['fonts/[name][ext]', 'fonts/[name].[contenthash][ext]'],
|
|
35
|
+
svg: ['fonts/[name][ext]', 'fonts/[name].[contenthash][ext]'],
|
|
36
|
+
audio: ['fonts/[name][ext]', 'fonts/[name].[contenthash][ext]'],
|
|
37
|
+
video: ['videos/[name][ext]', 'videos/[name].[contenthash][ext]']
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function createNameTemplate(name, useHash) {
|
|
41
|
+
// const ext = `${useHash ? '.[hash:20]' : ''}[ext]`;
|
|
42
|
+
return useHash ? name[1] : name[0];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const devModeContentHashAllowedTypes = {
|
|
46
|
+
image: true,
|
|
47
|
+
font: true,
|
|
48
|
+
svg: true,
|
|
49
|
+
audio: true,
|
|
50
|
+
video: true
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
function nameTemplates(type, options) {
|
|
54
|
+
const {
|
|
55
|
+
enableChunkHash,
|
|
56
|
+
mode
|
|
57
|
+
} = options;
|
|
58
|
+
const templateName = templates[type];
|
|
59
|
+
|
|
60
|
+
if (!templateName) {
|
|
61
|
+
throw Error(`specified type not valid Type: ${type}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let useHash = enableChunkHash;
|
|
65
|
+
|
|
66
|
+
if ((0, _modeUtils.isDevelopmentMode)(mode) && enableChunkHash && !devModeContentHashAllowedTypes[type]) {
|
|
67
|
+
useHash = false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return createNameTemplate(templateName, useHash);
|
|
71
|
+
} // export function cssDirNameTemplate(dir, options) {
|
|
72
|
+
// return nameTemplates('cssdir', options).replace(/\[dir\]/g, dir);
|
|
73
|
+
// }
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
const isI18nFile = url => url.endsWith('.i18n.js');
|
|
77
|
+
|
|
78
|
+
exports.isI18nFile = isI18nFile;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.publicPathAsExpression = publicPathAsExpression;
|
|
7
|
+
exports.resourceBasedPublicPath = resourceBasedPublicPath;
|
|
8
|
+
|
|
9
|
+
// const publicPaths = {
|
|
10
|
+
// };
|
|
11
|
+
function resourceBasedPublicPath(resoruceType, options) {
|
|
12
|
+
return options.publicPath;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function publicPathAsExpression(resoruceType, options) {
|
|
16
|
+
if (resoruceType === 'i18n') {
|
|
17
|
+
return options.i18nChunkSplit.localeVarName;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return JSON.stringify(options.publicPath);
|
|
21
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cssLoaders = cssLoaders;
|
|
7
|
+
|
|
8
|
+
var _getCSSLoaders = require("./getCSSLoaders");
|
|
9
|
+
|
|
10
|
+
function cssLoaders(options) {
|
|
11
|
+
return [{
|
|
12
|
+
test: /\.css$/,
|
|
13
|
+
// exclude: /\.module\.css$/,
|
|
14
|
+
use: (0, _getCSSLoaders.getCSSLoaders)(options)
|
|
15
|
+
}];
|
|
16
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
|
|
9
|
+
|
|
10
|
+
var _nameTemplates = require("../common/nameTemplates");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
// import { RuntimeGlobals, RuntimeModule } from 'webpack';
|
|
15
|
+
// import { Template } from 'webpack';
|
|
16
|
+
const pluginName = 'CdnChangePlugin'; // const MODULE_TYPE = 'css/mini-extract';
|
|
17
|
+
// class CdnChangeRuntimePlugin extends RuntimeModule {
|
|
18
|
+
// constructor(compiler, { variableName }) {
|
|
19
|
+
// super('cdn loading', 10);
|
|
20
|
+
// this.variableName = variableName;
|
|
21
|
+
// }
|
|
22
|
+
// generate() {
|
|
23
|
+
// return `${RuntimeGlobals.getChunkCssFilename} = function(chunkId) {
|
|
24
|
+
// const cssCdnUrl = window[${this.variableName}] || chunkId;
|
|
25
|
+
// return cssCdnUrl;
|
|
26
|
+
// }`;
|
|
27
|
+
// }
|
|
28
|
+
// }
|
|
29
|
+
|
|
30
|
+
class CdnChangePlugin {
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.createSeparateSMap = options.createSeparateSMap;
|
|
33
|
+
this.i18nTemplate = options.i18nTemplate || '{{__I18N_CDN__}}';
|
|
34
|
+
this.variableName = options.variableName || '__CSS_CDN__';
|
|
35
|
+
this.cssTemplate = options.cssTemplate || '{{__CSS_CDN__}}';
|
|
36
|
+
this.jsTemplate = options.jsTemplate || '{{__JS_CDN__}}';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
apply(compiler) {
|
|
40
|
+
// compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
41
|
+
// const enabledChunks = new WeakSet();
|
|
42
|
+
// const handler = (entryRuntimeChunk, set) => {
|
|
43
|
+
// if (enabledChunks.has(entryRuntimeChunk)) {
|
|
44
|
+
// return;
|
|
45
|
+
// }
|
|
46
|
+
// enabledChunks.add(entryRuntimeChunk);
|
|
47
|
+
// set.add(RuntimeGlobals.getFullHash);
|
|
48
|
+
// set.add(RuntimeGlobals.getChunkCssFilename);
|
|
49
|
+
// compilation.addRuntimeModule(
|
|
50
|
+
// entryRuntimeChunk,
|
|
51
|
+
// new CdnChangeRuntimePlugin(set, {
|
|
52
|
+
// compiler,
|
|
53
|
+
// variableName: this.variableName
|
|
54
|
+
// })
|
|
55
|
+
// );
|
|
56
|
+
// };
|
|
57
|
+
// compilation.hooks.runtimeRequirementInTree
|
|
58
|
+
// .for(RuntimeGlobals.ensureChunkHandlers)
|
|
59
|
+
// .tap(pluginName, handler);
|
|
60
|
+
// });
|
|
61
|
+
compiler.hooks.compilation.tap(pluginName, compilation => {
|
|
62
|
+
_htmlWebpackPlugin.default.getHooks(compilation).beforeAssetTagGeneration.tap(pluginName, (data, cb) => {
|
|
63
|
+
const {
|
|
64
|
+
createSeparateSMap
|
|
65
|
+
} = this; // eslint-disable-next-line no-param-reassign
|
|
66
|
+
|
|
67
|
+
data.assets = { ...data.assets,
|
|
68
|
+
css: data.assets.css.map(css => `${this.cssTemplate}${css}`),
|
|
69
|
+
js: data.assets.js.map(js => {
|
|
70
|
+
if (createSeparateSMap && !(0, _nameTemplates.isI18nFile)(js)) {
|
|
71
|
+
js = js.replace('js/', `{{--js-smap}}js/`); //eslint-disable-line
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return `${(0, _nameTemplates.isI18nFile)(js) ? this.i18nTemplate : this.jsTemplate}${js}`;
|
|
75
|
+
})
|
|
76
|
+
};
|
|
77
|
+
cb && cb(null, data);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var _default = CdnChangePlugin; // Cdn Change Plugin for runtime chunks???
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* the filename of the script part of the chunk
|
|
88
|
+
*/
|
|
89
|
+
// exports.getChunkScriptFilename = "__webpack_require__.u";
|
|
90
|
+
// /**
|
|
91
|
+
// * the filename of the css part of the chunk
|
|
92
|
+
// */
|
|
93
|
+
// exports.getChunkCssFilename = "__webpack_require__.k";
|
|
94
|
+
|
|
95
|
+
exports.default = _default;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EFCTemplatePlugin = void 0;
|
|
7
|
+
|
|
8
|
+
var _fs = require("fs");
|
|
9
|
+
|
|
10
|
+
var _logger = require("../../../../logger");
|
|
11
|
+
|
|
12
|
+
var _LocaleChunkAssetsStore = require("./I18nSplitPlugin/LocaleChunkAssetsStore");
|
|
13
|
+
|
|
14
|
+
var _constants = require("../../../constants");
|
|
15
|
+
|
|
16
|
+
var _getInitialAssetsFuncTemplate = require("./getInitialAssetsFuncTemplate");
|
|
17
|
+
|
|
18
|
+
const INITIAL_ASSETS_TEMPLATE = '// <--getInitialAssets-->';
|
|
19
|
+
const PUBLIC_PATH_TEMPLATE = '"<--publicPath-->"';
|
|
20
|
+
const pluginName = 'EFCTemplatePlugin';
|
|
21
|
+
|
|
22
|
+
class EFCTemplatePlugin {
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
const {
|
|
25
|
+
i18nFileNameTemplate,
|
|
26
|
+
entryPointName,
|
|
27
|
+
outputFile,
|
|
28
|
+
version,
|
|
29
|
+
publicPath,
|
|
30
|
+
templateFilePath
|
|
31
|
+
} = options;
|
|
32
|
+
this.options = options;
|
|
33
|
+
this.templateFilePath = (0, _constants.joinWithAppPath)(templateFilePath);
|
|
34
|
+
this.i18nFileNameTemplate = i18nFileNameTemplate;
|
|
35
|
+
this.publicPath = publicPath; // NOTE: this logic may be needed for i18n splitted file name with contenthash cases
|
|
36
|
+
// this.i18nManifestFileName = options.i18nManifestFileName;
|
|
37
|
+
// IMPORTANT: here we merging options from package.json and options via constructor
|
|
38
|
+
// So when debugging consider this as well
|
|
39
|
+
// this.options = Object.assign({}, efcOptions, options);
|
|
40
|
+
|
|
41
|
+
this.entryPointName = entryPointName || 'efc';
|
|
42
|
+
this.outputFile = outputFile.replace('[version]', version);
|
|
43
|
+
} // NOTE: this logic may be needed for i18n splitted file name with contenthash cases
|
|
44
|
+
// getI18nManifest(compilation) {
|
|
45
|
+
// const i18nManifestFile =
|
|
46
|
+
// compilation.assets[this.options.i18nManifestFileName];
|
|
47
|
+
// if (i18nManifestFile) {
|
|
48
|
+
// const manifest = JSON.parse(i18nManifestFile.source());
|
|
49
|
+
// return manifest;
|
|
50
|
+
// }
|
|
51
|
+
// return {};
|
|
52
|
+
// }
|
|
53
|
+
// eslint-disable-next-line class-methods-use-this
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
templateReplacer(entryPoint, compilation) {
|
|
57
|
+
const {
|
|
58
|
+
enableRTLSplit
|
|
59
|
+
} = this.options; // const i18nManifest = this.getI18nManifest(compilation);
|
|
60
|
+
|
|
61
|
+
const initialAssetsFuncTemplate = (0, _getInitialAssetsFuncTemplate.getInitialAssetsFuncTemplate)({
|
|
62
|
+
entryPoint,
|
|
63
|
+
compilation,
|
|
64
|
+
enableRTLSplit,
|
|
65
|
+
i18nStore: this.store,
|
|
66
|
+
chunkSplitEnable: this.options.chunkSplitEnable,
|
|
67
|
+
i18nFileNameTemplate: this.i18nFileNameTemplate,
|
|
68
|
+
functionName: 'getInitialAssets'
|
|
69
|
+
});
|
|
70
|
+
const templateStr = (0, _fs.readFileSync)(this.templateFilePath).toString();
|
|
71
|
+
return templateStr.replace(INITIAL_ASSETS_TEMPLATE, initialAssetsFuncTemplate).replace(PUBLIC_PATH_TEMPLATE, this.publicPath);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
apply(compiler) {
|
|
75
|
+
const {
|
|
76
|
+
RawSource
|
|
77
|
+
} = compiler.webpack.sources;
|
|
78
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
79
|
+
// Get store for cache
|
|
80
|
+
this.store = (0, _LocaleChunkAssetsStore.getLocaleChunkAssetsStore)(compilation);
|
|
81
|
+
});
|
|
82
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
83
|
+
compilation.hooks.processAssets.tap({
|
|
84
|
+
name: pluginName,
|
|
85
|
+
stage: compilation.PROCESS_ASSETS_STAGE_DERIVED
|
|
86
|
+
}, () => {
|
|
87
|
+
const {
|
|
88
|
+
entryPointName,
|
|
89
|
+
outputFile
|
|
90
|
+
} = this;
|
|
91
|
+
const entryPoint = compilation.entrypoints.get(entryPointName);
|
|
92
|
+
|
|
93
|
+
if (!entryPoint) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!(0, _fs.existsSync)(this.templateFilePath)) {
|
|
98
|
+
(0, _logger.errorLogger)(`EFC Template file not exists ${this.templateFilePath}`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const source = new RawSource(this.templateReplacer(entryPoint, compilation));
|
|
103
|
+
compilation.emitAsset(outputFile, source);
|
|
104
|
+
(0, _logger.messageLogger)('The EFC embedded code was created successfully..!!!');
|
|
105
|
+
(0, _logger.messageLogger)(`The EFC SDK File name ${outputFile}`);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
exports.EFCTemplatePlugin = EFCTemplatePlugin;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# I18n Split Plugin ContributionGuide
|
|
2
|
+
we have modifyed mini-css-extract-plugin to sute our needs of i18n related extraction and downloading.
|
|
3
|
+
So In future may be when we need to update mini-css-extract-plugin Kindly cross check with this I18n Plugin as well.
|
|
4
|
+
|
|
5
|
+
Even not breaking change, may be just performacne update or feature update. addeding that to this plugin will be use full. Kindly consider it.
|
|
6
|
+
|
|
7
|
+
## Thing we Ignored
|
|
8
|
+
* we use webpack ast hook for adding I18nDependency. So we did not need `loader.js`
|
|
9
|
+
* we ignore order of import in single chunk since I18n going to be download as object.
|
|
10
|
+
we did not need it.
|
|
11
|
+
*
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.I18nFilesEmitPlugin = void 0;
|
|
7
|
+
|
|
8
|
+
var _webpack = require("webpack");
|
|
9
|
+
|
|
10
|
+
var _createHash = require("./createHash");
|
|
11
|
+
|
|
12
|
+
var _pathCreator = require("./pathCreator");
|
|
13
|
+
|
|
14
|
+
var _propertiesUtils = require("./utils/propertiesUtils");
|
|
15
|
+
|
|
16
|
+
var _LocaleChunkAssetsStore = require("./LocaleChunkAssetsStore");
|
|
17
|
+
|
|
18
|
+
/* eslint-disable no-restricted-syntax */
|
|
19
|
+
const pluginName = 'I18nFilesEmitPlugin';
|
|
20
|
+
const {
|
|
21
|
+
RawSource
|
|
22
|
+
} = _webpack.sources;
|
|
23
|
+
|
|
24
|
+
class I18nFilesEmitPlugin {
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.options = options; // this.options = {
|
|
27
|
+
// locales: options.locales,
|
|
28
|
+
// chunkFilename: options.chunkFilename,
|
|
29
|
+
// filename: options.filename,
|
|
30
|
+
// allI18nObject: options.allI18nObject,
|
|
31
|
+
// jsonpFunc: options.jsonpFunc
|
|
32
|
+
// };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
apply(compiler) {
|
|
36
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
37
|
+
// Get store for cache
|
|
38
|
+
this.store = (0, _LocaleChunkAssetsStore.getLocaleChunkAssetsStore)(compilation);
|
|
39
|
+
const i18nStore = this.store;
|
|
40
|
+
compilation.hooks.beforeHash.tap(pluginName, () => {
|
|
41
|
+
i18nStore.clear();
|
|
42
|
+
this.createAndStoreFileContentForEveryChunkAndLocale(compilation);
|
|
43
|
+
});
|
|
44
|
+
compilation.hooks.chunkHash.tap(pluginName, (chunk, hash) => {
|
|
45
|
+
this.updateChunkHashForEveryLocale(chunk, hash);
|
|
46
|
+
});
|
|
47
|
+
compilation.hooks.contentHash.tap(pluginName, chunk => {
|
|
48
|
+
if (!i18nStore.isChunkHasI18n(chunk.id)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.emitI18nFileForEveryLocale(chunk, compilation);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
createAndStoreFileContentForEveryChunkAndLocale(compilation) {
|
|
58
|
+
const {
|
|
59
|
+
chunks
|
|
60
|
+
} = compilation;
|
|
61
|
+
const {
|
|
62
|
+
locales
|
|
63
|
+
} = this.options;
|
|
64
|
+
const i18nStore = this.store;
|
|
65
|
+
|
|
66
|
+
for (const chunk of chunks) {
|
|
67
|
+
const i18nKeys = i18nStore.getI18nKeysForChunk(chunk);
|
|
68
|
+
|
|
69
|
+
if (!i18nKeys.length) {
|
|
70
|
+
// eslint-disable-next-line no-continue
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
for (const locale of locales) {
|
|
75
|
+
const content = this.getI18nChunkFileContent(i18nKeys, locale);
|
|
76
|
+
i18nStore.storeData(chunk.id, locale, {
|
|
77
|
+
content
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
updateChunkHashForEveryLocale(chunk, hash) {
|
|
84
|
+
const {
|
|
85
|
+
locales
|
|
86
|
+
} = this.options;
|
|
87
|
+
const i18nStore = this.store;
|
|
88
|
+
|
|
89
|
+
if (i18nStore.isChunkHasI18n(chunk.id)) {
|
|
90
|
+
for (const loc of locales) {
|
|
91
|
+
const content = i18nStore.getContent(chunk.id, loc);
|
|
92
|
+
hash.update(content);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
emitI18nFileForEveryLocale(chunk, compilation) {
|
|
98
|
+
const i18nStore = this.store;
|
|
99
|
+
const {
|
|
100
|
+
locales,
|
|
101
|
+
chunkFilename,
|
|
102
|
+
filename
|
|
103
|
+
} = this.options;
|
|
104
|
+
const fileNameTemplate = chunk.canBeInitial() ? filename : chunkFilename; // const { chunks } = compilation;
|
|
105
|
+
|
|
106
|
+
for (const locale of locales) {
|
|
107
|
+
const content = i18nStore.getContent(chunk.id, locale);
|
|
108
|
+
const contentHash = (0, _createHash.createHash)({
|
|
109
|
+
outputOptions: compilation.outputOptions,
|
|
110
|
+
content
|
|
111
|
+
});
|
|
112
|
+
const {
|
|
113
|
+
filename
|
|
114
|
+
} = I18nFilesEmitPlugin.createFilenameWithHash({
|
|
115
|
+
compilation,
|
|
116
|
+
contentHash,
|
|
117
|
+
fileNameTemplate,
|
|
118
|
+
chunk,
|
|
119
|
+
locale
|
|
120
|
+
});
|
|
121
|
+
i18nStore.storeData(chunk.id, locale, {
|
|
122
|
+
contentHash,
|
|
123
|
+
filename
|
|
124
|
+
});
|
|
125
|
+
compilation.emitAsset(filename, new RawSource(content));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static createFilenameWithHash({
|
|
130
|
+
compilation,
|
|
131
|
+
fileNameTemplate,
|
|
132
|
+
chunk,
|
|
133
|
+
locale,
|
|
134
|
+
contentHash
|
|
135
|
+
}) {
|
|
136
|
+
const fileName = fileNameTemplate.replaceAll('[locale]', locale);
|
|
137
|
+
const filename = (0, _pathCreator.pathCreator)(fileName, compilation, {
|
|
138
|
+
hash: compilation.hash,
|
|
139
|
+
chunkId: chunk.id,
|
|
140
|
+
chunkHash: chunk.hash,
|
|
141
|
+
contentHash
|
|
142
|
+
});
|
|
143
|
+
return {
|
|
144
|
+
contentHash,
|
|
145
|
+
filename
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
getI18nContentForkeys(i18nKeys, locale) {
|
|
150
|
+
const {
|
|
151
|
+
allI18nObject
|
|
152
|
+
} = this.options;
|
|
153
|
+
const data = {};
|
|
154
|
+
|
|
155
|
+
for (const key of i18nKeys) {
|
|
156
|
+
data[key] = allI18nObject[locale][key];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return data;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
getI18nChunkFileContent(i18nKeys, loc) {
|
|
163
|
+
const {
|
|
164
|
+
jsonpFunc
|
|
165
|
+
} = this.options;
|
|
166
|
+
const data = this.getI18nContentForkeys(i18nKeys, loc);
|
|
167
|
+
return `${jsonpFunc}(${(0, _propertiesUtils.jsonToString)(data)})`;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
exports.I18nFilesEmitPlugin = I18nFilesEmitPlugin;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
|
|
10
|
+
var _LocaleChunkAssetsStore = require("./LocaleChunkAssetsStore");
|
|
11
|
+
|
|
12
|
+
/* eslint-disable max-classes-per-file */
|
|
13
|
+
const pluginName = 'I18nKeysIdentifier';
|
|
14
|
+
/**
|
|
15
|
+
* this plugin search the i18 keys and make it as I18nDependency.
|
|
16
|
+
* how it works?
|
|
17
|
+
* this plugin get jsResourceI18nKeys in constructor.
|
|
18
|
+
* we walk thought the js files AST
|
|
19
|
+
* if any string literal in that AST is in jsResourceI18nKeys then we consider that string as I18n key
|
|
20
|
+
* after the walk of AST we get some I18n keys
|
|
21
|
+
* then we make it as I18nDependency.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
class I18nKeysIdentifer {
|
|
25
|
+
constructor({
|
|
26
|
+
jsResourceI18nKeys
|
|
27
|
+
}) {
|
|
28
|
+
this.jsResourceI18nKeys = jsResourceI18nKeys;
|
|
29
|
+
this.store = new _LocaleChunkAssetsStore.LocaleChunkAssetsStore();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
apply(compiler) {
|
|
33
|
+
// const { splitChunks } = compiler.options.optimization;
|
|
34
|
+
// if (splitChunks) {
|
|
35
|
+
// if (splitChunks.defaultSizeTypes.includes('...')) {
|
|
36
|
+
// splitChunks.defaultSizeTypes.push(MODULE_TYPE);
|
|
37
|
+
// }
|
|
38
|
+
// }
|
|
39
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
40
|
+
this.store.updateCompilation(compilation);
|
|
41
|
+
(0, _LocaleChunkAssetsStore.setLocaleChunkAssetsStore)(compilation, this.store);
|
|
42
|
+
});
|
|
43
|
+
compiler.hooks.normalModuleFactory.tap(pluginName, factory => {
|
|
44
|
+
// handler for parser
|
|
45
|
+
const handler = parser => {
|
|
46
|
+
parser.hooks.program.tap(pluginName, (ast, comments) => {
|
|
47
|
+
const {
|
|
48
|
+
module
|
|
49
|
+
} = parser.state; //
|
|
50
|
+
|
|
51
|
+
if (!(module && /\.jsx?$/.test(module.resource))) {
|
|
52
|
+
return;
|
|
53
|
+
} // i18n grep proper contract regex
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
let i18nKeys = (0, _utils.collectI18nKeysfromAST)(ast, this.jsResourceI18nKeys);
|
|
57
|
+
i18nKeys = i18nKeys.concat( // i18n grep proper contract regex
|
|
58
|
+
(0, _utils.collectI18nKeysfromComments)(comments, this.jsResourceI18nKeys));
|
|
59
|
+
|
|
60
|
+
if (i18nKeys.length) {
|
|
61
|
+
// console.log('i18nKeys.length', module.resource, i18nKeys);
|
|
62
|
+
this.store.updateModuleI18nKeys(module.resource, i18nKeys);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}; // this below hook was tapped for collect I18n Key from files and add as Dependency
|
|
66
|
+
// const factory = params.normalModuleFactory;
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
factory.hooks.parser.for('javascript/auto').tap(pluginName, handler);
|
|
70
|
+
factory.hooks.parser.for('javascript/dynamic').tap(pluginName, handler);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
exports.default = I18nKeysIdentifer;
|