@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,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.findInitialFileNames = findInitialFileNames;
|
|
7
|
+
|
|
8
|
+
function findInitialFileNames(compilation) {
|
|
9
|
+
const initialEntries = [];
|
|
10
|
+
compilation.entrypoints.forEach(element => {
|
|
11
|
+
element.chunks.forEach(chunk => {
|
|
12
|
+
Array.from(chunk.files).forEach(filename => {
|
|
13
|
+
initialEntries.push(filename);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
return initialEntries;
|
|
18
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AddFileToManifestJson = void 0;
|
|
7
|
+
|
|
8
|
+
var _webpack = require("webpack");
|
|
9
|
+
|
|
10
|
+
var _createManifestJson = require("./createManifestJson");
|
|
11
|
+
|
|
12
|
+
class AddFileToManifestJson {
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
apply(compiler) {
|
|
18
|
+
const {
|
|
19
|
+
RawSource
|
|
20
|
+
} = compiler.webpack.sources;
|
|
21
|
+
compiler.hooks.thisCompilation.tap('MyWebpackPlugin', compilation => {
|
|
22
|
+
compilation.hooks.processAssets.tap({
|
|
23
|
+
name: 'MyPlugin',
|
|
24
|
+
stage: _webpack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
|
|
25
|
+
}, assets => {
|
|
26
|
+
const {
|
|
27
|
+
hashDigestLength
|
|
28
|
+
} = compilation.outputOptions;
|
|
29
|
+
this.options.forEach(option => {
|
|
30
|
+
const manifestJson = (0, _createManifestJson.createManifestJson)({
|
|
31
|
+
option,
|
|
32
|
+
hashDigestLength,
|
|
33
|
+
compilation,
|
|
34
|
+
assets
|
|
35
|
+
});
|
|
36
|
+
compilation.emitAsset(option.outputJsonFileName, new RawSource(JSON.stringify(manifestJson)));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
exports.AddFileToManifestJson = AddFileToManifestJson;
|
package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/removeHashFromFileName.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.removeHashFromFileName = removeHashFromFileName;
|
|
7
|
+
|
|
8
|
+
function removeHashFromFileName(fileName, hashDigestLength) {
|
|
9
|
+
let outputFileName = '';
|
|
10
|
+
fileName.split('.').forEach(iterateValue => {
|
|
11
|
+
if (outputFileName === '') {
|
|
12
|
+
outputFileName += iterateValue;
|
|
13
|
+
} else if (iterateValue.length < hashDigestLength) {
|
|
14
|
+
outputFileName += `.${iterateValue}`;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return outputFileName;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _webpack = require("webpack");
|
|
9
|
+
|
|
10
|
+
const pluginName = 'prefetch-preload-chunk-plugin';
|
|
11
|
+
/**
|
|
12
|
+
* NOTE: below functions are useable in webpack 5.79.0 as per day 28 Apr 2023
|
|
13
|
+
* Please checkout for future changes
|
|
14
|
+
* Here List of functions that take chunkId as Argument and return url without publicPath
|
|
15
|
+
* `__webpack_require__.u(chunkId)` - return's JS script urlPath
|
|
16
|
+
* `__webpack_require__.miniCssF(chunkId)` - return's CSS script urlPath
|
|
17
|
+
* `__webpack_require__.miniI18nF(chunkId)` - return's I18N script urlPath
|
|
18
|
+
*
|
|
19
|
+
*
|
|
20
|
+
* if url has .undefined. then chunk or url not valid or that file nt available
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
class ResourceHintsPlugin {
|
|
24
|
+
constructor({
|
|
25
|
+
publicPath,
|
|
26
|
+
resourceHints
|
|
27
|
+
}) {
|
|
28
|
+
this.resourceHints = resourceHints;
|
|
29
|
+
this.allowPrefetchingMultipleChunks = resourceHints.allowPrefetchingMultipleChunks;
|
|
30
|
+
this.publicPathsTemplateObj = {
|
|
31
|
+
js: publicPath,
|
|
32
|
+
css: publicPath,
|
|
33
|
+
i18n: publicPath
|
|
34
|
+
};
|
|
35
|
+
} // eslint-disable-next-line class-methods-use-this
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
apply(compiler) {
|
|
39
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
40
|
+
const enabledChunks = new WeakSet();
|
|
41
|
+
|
|
42
|
+
const handler = (entryRuntimeChunk, set) => {
|
|
43
|
+
if (enabledChunks.has(entryRuntimeChunk)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
enabledChunks.add(entryRuntimeChunk);
|
|
48
|
+
set.add(_webpack.RuntimeGlobals.getFullHash);
|
|
49
|
+
set.add(_webpack.RuntimeGlobals.getChunkCssFilename);
|
|
50
|
+
const {
|
|
51
|
+
publicPathsTemplateObj
|
|
52
|
+
} = this;
|
|
53
|
+
compilation.addRuntimeModule(entryRuntimeChunk, // eslint-disable-next-line no-use-before-define
|
|
54
|
+
new ResourceHintsRuntimePlugin(set, {
|
|
55
|
+
compiler,
|
|
56
|
+
chunk: entryRuntimeChunk,
|
|
57
|
+
allowPrefetchingMultipleChunks: this.allowPrefetchingMultipleChunks,
|
|
58
|
+
publicPathsTemplateObj
|
|
59
|
+
}));
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
compilation.hooks.runtimeRequirementInTree.for(_webpack.RuntimeGlobals.ensureChunkHandlers).tap(pluginName, handler);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
exports.default = ResourceHintsPlugin;
|
|
69
|
+
|
|
70
|
+
class ResourceHintsRuntimePlugin extends _webpack.RuntimeModule {
|
|
71
|
+
constructor(compiler, {
|
|
72
|
+
chunk,
|
|
73
|
+
publicPathsTemplateObj,
|
|
74
|
+
allowPrefetchingMultipleChunks
|
|
75
|
+
}) {
|
|
76
|
+
super('ResourceHintsRuntimePlugin loading', 10);
|
|
77
|
+
this.compiler = compiler;
|
|
78
|
+
this.publicPathsTemplateObj = publicPathsTemplateObj;
|
|
79
|
+
this.allowPrefetchingMultipleChunks = allowPrefetchingMultipleChunks;
|
|
80
|
+
this.chunk = chunk;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
generate() {
|
|
84
|
+
const {
|
|
85
|
+
chunk
|
|
86
|
+
} = this;
|
|
87
|
+
const idNameMap = chunk.getChunkMaps().name;
|
|
88
|
+
const nameIdMap = {};
|
|
89
|
+
let needsMap = this.allowPrefetchingMultipleChunks;
|
|
90
|
+
Object.keys(idNameMap).forEach(key => {
|
|
91
|
+
const value = idNameMap[key];
|
|
92
|
+
nameIdMap[value] = key;
|
|
93
|
+
|
|
94
|
+
if (key !== value) {
|
|
95
|
+
needsMap = true;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const {
|
|
99
|
+
js: jsPP = '',
|
|
100
|
+
css: cssPP = '',
|
|
101
|
+
i18n: i18nPP = ''
|
|
102
|
+
} = this.publicPathsTemplateObj;
|
|
103
|
+
return _webpack.Template.asString([`
|
|
104
|
+
const preloadedChunks = {};
|
|
105
|
+
const nameToChunkIdMap = ${JSON.stringify(needsMap ? nameIdMap : {})};
|
|
106
|
+
const chunkNames = Object.keys(nameToChunkIdMap);
|
|
107
|
+
|
|
108
|
+
function createLinkTag(href, rel) {
|
|
109
|
+
let link = document.createElement("link");
|
|
110
|
+
link.href = href;
|
|
111
|
+
link.rel = rel;
|
|
112
|
+
if(href.endsWith(".css")) {
|
|
113
|
+
link.as="style";
|
|
114
|
+
} else if (href.endsWith(".js")) {
|
|
115
|
+
link.as="script";
|
|
116
|
+
}
|
|
117
|
+
document.head.appendChild(link);
|
|
118
|
+
}
|
|
119
|
+
function isValidUrl(url) {
|
|
120
|
+
//return !url.includes(".undefined.");
|
|
121
|
+
return url.indexOf(".undefined.") === -1;
|
|
122
|
+
}
|
|
123
|
+
function loadAsPreloadOrPrefetch(_chunkId, rel) {
|
|
124
|
+
let chunkId = ${_webpack.RuntimeGlobals.require}.getChunkId(_chunkId);
|
|
125
|
+
// ${_webpack.RuntimeGlobals.require}.e(chunkId);
|
|
126
|
+
if(__webpack_require__.O.j(chunkId) || preloadedChunks[chunkId]) {
|
|
127
|
+
preloadedChunks[chunkId] = true;
|
|
128
|
+
// console.log("skipped loadAsPreloadOrPrefetch", _chunkId, chunkId, rel);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const jsUrl = ${jsPP} + __webpack_require__.u(chunkId);
|
|
132
|
+
const cssUrl = ${cssPP} + __webpack_require__.miniCssF(chunkId);
|
|
133
|
+
isValidUrl(jsUrl) && createLinkTag(jsUrl, rel);
|
|
134
|
+
isValidUrl(cssUrl) && createLinkTag(cssUrl, rel);
|
|
135
|
+
if(__webpack_require__.miniI18nF) {
|
|
136
|
+
const i18nUrl = ${i18nPP} + __webpack_require__.miniI18nF(chunkId);
|
|
137
|
+
isValidUrl(i18nUrl) && createLinkTag(i18nUrl, rel);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
${_webpack.RuntimeGlobals.require}.getChunkId = function getChunkId(chunkId) {
|
|
142
|
+
${needsMap ? 'chunkId = nameToChunkIdMap[chunkId]||chunkId;' : ''}
|
|
143
|
+
return chunkId;
|
|
144
|
+
}
|
|
145
|
+
${_webpack.RuntimeGlobals.require}.getChunkIds = function getChunkIds(chunkId) {
|
|
146
|
+
${// eslint-disable-next-line no-nested-ternary
|
|
147
|
+
this.allowPrefetchingMultipleChunks ? `
|
|
148
|
+
const isRegExAsChunkId = chunkId instanceof RegExp;
|
|
149
|
+
if(isRegExAsChunkId) {
|
|
150
|
+
return chunkNames.filter(chunkName => chunkId.test(chunkName)).map(chunkName => nameToChunkIdMap[chunkName]);
|
|
151
|
+
}` : ''}
|
|
152
|
+
return [${_webpack.RuntimeGlobals.require}.getChunkId(chunkId)];
|
|
153
|
+
}
|
|
154
|
+
// Prefetch a chunk (${pluginName})
|
|
155
|
+
${_webpack.RuntimeGlobals.require}.pfc = function prefetchChunk(chunkId) {
|
|
156
|
+
loadAsPreloadOrPrefetch(chunkId, "prefetch");
|
|
157
|
+
${this.allowPrefetchingMultipleChunks ? `
|
|
158
|
+
let chunkIds = ${_webpack.RuntimeGlobals.require}.getChunkIds(chunkId)
|
|
159
|
+
chunkIds.forEach(idOfAChunk => {
|
|
160
|
+
// ${_webpack.RuntimeGlobals.require}.e(idOfAChunk);
|
|
161
|
+
loadAsPreloadOrPrefetch(idOfAChunk, "prefetch");
|
|
162
|
+
})` : 'loadAsPreloadOrPrefetch(chunkId, "prefetch");'}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// Preload a chunk (${pluginName})
|
|
166
|
+
${_webpack.RuntimeGlobals.require}.plc = function preloadChunk(chunkId) {
|
|
167
|
+
${this.allowPrefetchingMultipleChunks ? `
|
|
168
|
+
let chunkIds = ${_webpack.RuntimeGlobals.require}.getChunkIds(chunkId)
|
|
169
|
+
chunkIds.forEach(idOfAChunk => {
|
|
170
|
+
// ${_webpack.RuntimeGlobals.require}.e(idOfAChunk);
|
|
171
|
+
loadAsPreloadOrPrefetch(idOfAChunk, "preload");
|
|
172
|
+
})` : 'loadAsPreloadOrPrefetch(chunkId, "preload");'}
|
|
173
|
+
};
|
|
174
|
+
` // `// Prefetch a chunk (${pluginName})`,
|
|
175
|
+
// `${RuntimeGlobals.require}.pfc = function prefetchChunk(chunkId) {`,
|
|
176
|
+
// Template.indent([
|
|
177
|
+
// `chunkId = ${RuntimeGlobals.require}.getChunkId(chunkId)`,
|
|
178
|
+
// `${RuntimeGlobals.require}.e(chunkId);`
|
|
179
|
+
// ]),
|
|
180
|
+
// '};',
|
|
181
|
+
// `// Preload a chunk (${pluginName})`,
|
|
182
|
+
// `${RuntimeGlobals.require}.pfc = function prefetchChunk(chunkId) {`,
|
|
183
|
+
// Template.indent([
|
|
184
|
+
// `chunkId = ${RuntimeGlobals.require}.getChunkId(chunkId)`,
|
|
185
|
+
// `${RuntimeGlobals.require}.e(chunkId);`
|
|
186
|
+
// ]),
|
|
187
|
+
// '};'
|
|
188
|
+
]);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 _JavascriptModulesPlugin = _interopRequireDefault(require("webpack/lib/javascript/JavascriptModulesPlugin"));
|
|
11
|
+
|
|
12
|
+
var _replaceCssDirTemplate = require("./replaceCssDirTemplate");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
// import { JavascriptModulesPlugin } from 'webpack';
|
|
17
|
+
const pluginName = 'OverwriteCssPathForRTL';
|
|
18
|
+
|
|
19
|
+
class OverwriteCssPathForRTL {
|
|
20
|
+
constructor(options = {
|
|
21
|
+
dirVarName: 'document.dir'
|
|
22
|
+
}) {
|
|
23
|
+
this.dirVarName = options.dirVarName || 'document.dir';
|
|
24
|
+
this.templateLabel = options.templateLabel || '{{--dir}}';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
overwriteCssPathinHTML(compilation) {
|
|
28
|
+
// NOTE: need to reconsider It is not working as expected
|
|
29
|
+
_htmlWebpackPlugin.default.getHooks(compilation).beforeAssetTagGeneration.tap(pluginName, data => {
|
|
30
|
+
const {
|
|
31
|
+
assets
|
|
32
|
+
} = data;
|
|
33
|
+
return { ...data,
|
|
34
|
+
assets: { ...assets,
|
|
35
|
+
css: assets.css && (0, _replaceCssDirTemplate.replaceCssDirTemplateMapper)(assets.css, this.templateLabel)
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
overwriteCssPathinRequireEnsure(compilation, compiler) {
|
|
42
|
+
const {
|
|
43
|
+
RawSource
|
|
44
|
+
} = compiler.webpack.sources;
|
|
45
|
+
|
|
46
|
+
_JavascriptModulesPlugin.default.getCompilationHooks(compilation).renderMain.tap(pluginName, source => {
|
|
47
|
+
const templateText = `"+(${this.dirVarName} === "rtl" ? "rtl": "ltr")+"`;
|
|
48
|
+
const replacedStr = source.source().replace(/\[dir\]/g, templateText);
|
|
49
|
+
return new RawSource(replacedStr);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
apply(compiler) {
|
|
54
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
55
|
+
this.overwriteCssPathinHTML(compilation);
|
|
56
|
+
this.overwriteCssPathinRequireEnsure(compilation, compiler);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
exports.default = OverwriteCssPathForRTL;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RtlCssPlugin = void 0;
|
|
7
|
+
|
|
8
|
+
var _webpack = require("webpack");
|
|
9
|
+
|
|
10
|
+
var _OverwriteCssPathForRTL = _interopRequireDefault(require("./OverwriteCssPathForRTL"));
|
|
11
|
+
|
|
12
|
+
var _RTLSplitPlugin = require("../../../../postcss/custom_postcss_plugins/RTLSplitPlugin");
|
|
13
|
+
|
|
14
|
+
var _utils = require("../../utils");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
// import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
19
|
+
// import rtlcss from 'rtlcss';
|
|
20
|
+
const pluginName = 'RtlCssPlugin';
|
|
21
|
+
|
|
22
|
+
class RtlCssPlugin {
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {Object} Options
|
|
26
|
+
* @property {String} dirVarName
|
|
27
|
+
* @property {Boolean} sourcemap
|
|
28
|
+
* @property {Object} config
|
|
29
|
+
*/
|
|
30
|
+
this.options = {
|
|
31
|
+
// dirVarName: options.dirVarName || 'document.dir',
|
|
32
|
+
sourcemap: options.sourcemap,
|
|
33
|
+
config: options.config
|
|
34
|
+
};
|
|
35
|
+
this.templateLabel = options.templateLabel || '{{--dir}}';
|
|
36
|
+
this.dirVarName = options.dirVarName || 'document.dir';
|
|
37
|
+
this.rtlSplitOptions = {
|
|
38
|
+
disableMinifySelector: options.disableMinifySelector
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
apply(compiler) {
|
|
43
|
+
const {
|
|
44
|
+
RawSource
|
|
45
|
+
} = compiler.webpack.sources;
|
|
46
|
+
new _OverwriteCssPathForRTL.default({
|
|
47
|
+
templateLabel: this.templateLabel,
|
|
48
|
+
dirVarName: this.dirVarName
|
|
49
|
+
}).apply(compiler); // const { filename, sourcemap, config } = this.options;
|
|
50
|
+
// const { devtool } = compiler.options;
|
|
51
|
+
// const postcssOptions = {
|
|
52
|
+
// map: (sourcemap === undefined && !!devtool) || !!sourcemap
|
|
53
|
+
// };
|
|
54
|
+
|
|
55
|
+
compiler.hooks.compilation.tap(pluginName, compilation => {
|
|
56
|
+
// compilation.hooks.shouldGenerateChunkAssets.tap(pluginName, (...args) => {
|
|
57
|
+
// console.log('shouldGenerateChunkAssets', args);
|
|
58
|
+
// });
|
|
59
|
+
compilation.hooks.processAssets.tap({
|
|
60
|
+
name: pluginName,
|
|
61
|
+
stage: _webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COMPATIBILITY
|
|
62
|
+
}, assets => {
|
|
63
|
+
Object.keys(assets).filter(_utils.isCss).filter(_utils.isDirRelatedCss).forEach(chunkFilename => {
|
|
64
|
+
const {
|
|
65
|
+
source: asset
|
|
66
|
+
} = compilation.getAsset(chunkFilename);
|
|
67
|
+
const sourceStr = asset.source();
|
|
68
|
+
const {
|
|
69
|
+
ltr,
|
|
70
|
+
rtl
|
|
71
|
+
} = (0, _RTLSplitPlugin.separateRtlAndLtr)(sourceStr, this.rtlSplitOptions);
|
|
72
|
+
const ltrFilename = chunkFilename.replace('[dir]', 'ltr');
|
|
73
|
+
const rtlFilename = chunkFilename.replace('[dir]', 'rtl');
|
|
74
|
+
compilation.renameAsset(chunkFilename, ltrFilename);
|
|
75
|
+
compilation.updateAsset(ltrFilename, new RawSource(ltr));
|
|
76
|
+
compilation.emitAsset(rtlFilename, new RawSource(rtl));
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
exports.RtlCssPlugin = RtlCssPlugin;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# RTL Split
|
|
2
|
+
|
|
3
|
+
we are doing in build time generating rtl related css code by using @zohodesk/postcss-rt npm.
|
|
4
|
+
It was automated, That postcss plugin create rtl reacted css and put them into same file, with css selector [dir=rtl] and ltr realted css with [dir=ltr].
|
|
5
|
+
Here is problem mostly no one need rtl and ltr related css at the same time in browser,
|
|
6
|
+
we are try to split them by [dir] and load which type of css is needed.
|
|
7
|
+
For this purpose we created RTL Split Plugin
|
|
8
|
+
|
|
9
|
+
# To Try it out rtl-ltr split
|
|
10
|
+
|
|
11
|
+
### how to use this feature?
|
|
12
|
+
|
|
13
|
+
to use this feature use have give the below oprtions
|
|
14
|
+
`package.json`
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
/// ...some things
|
|
19
|
+
"react-cli": {
|
|
20
|
+
// ...some things
|
|
21
|
+
"css": {
|
|
22
|
+
"plugins": {
|
|
23
|
+
"rtlSplit": {
|
|
24
|
+
"enableRTLSplit": true,
|
|
25
|
+
"templateLabel": "{{--dir}}", // this is for html template css file path dir template
|
|
26
|
+
"disableMinifySelector": false,
|
|
27
|
+
"dirVarName": "document.dir" // this will be used for download css based on dir
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// ...some things
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.replaceCssDirTemplate = replaceCssDirTemplate;
|
|
7
|
+
exports.replaceCssDirTemplateMapper = replaceCssDirTemplateMapper;
|
|
8
|
+
exports.replaceI18nLocalTemplate = replaceI18nLocalTemplate;
|
|
9
|
+
exports.replaceI18nLocaleTemplateMapper = replaceI18nLocaleTemplateMapper;
|
|
10
|
+
|
|
11
|
+
function replaceCssDirTemplate(filePath, cssDirTemplate) {
|
|
12
|
+
return filePath // added for efc and service worker handling
|
|
13
|
+
.replaceAll('[dir]', cssDirTemplate).replace('.ltr.css', `.${cssDirTemplate}.css`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function replaceCssDirTemplateMapper(assets, cssDirTemplate) {
|
|
17
|
+
return assets.map(filePath => replaceCssDirTemplate(filePath, cssDirTemplate));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function replaceI18nLocalTemplate(filePath, localeTemplate) {
|
|
21
|
+
return filePath // added for efc and service worker handling
|
|
22
|
+
.replaceAll('[locale]', localeTemplate);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function replaceI18nLocaleTemplateMapper(assets, localeTemplate) {
|
|
26
|
+
return assets.map(filePath => replaceI18nLocalTemplate(filePath, localeTemplate));
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.hasPrevNodeIgnore = hasPrevNodeIgnore;
|
|
7
|
+
exports.isAtRule = isAtRule;
|
|
8
|
+
exports.isInsideMediaQuery = isInsideMediaQuery;
|
|
9
|
+
|
|
10
|
+
function hasPrevNodeIgnore(index, prevNode, ignoreComment) {
|
|
11
|
+
return index !== 0 && prevNode && prevNode.type && prevNode.type === 'comment' && prevNode.text.toLowerCase() === ignoreComment;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function isAtRule(rule) {
|
|
15
|
+
return rule.parent && rule.parent.type === 'atrule';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function isInsideMediaQuery(rule) {
|
|
19
|
+
return !!(isAtRule(rule) && rule.parent.name === 'media');
|
|
20
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _postcss = _interopRequireDefault(require("postcss"));
|
|
9
|
+
|
|
10
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
+
|
|
12
|
+
var _selectorWeightPrefixAdder = require("./selectorWeightPrefixAdder");
|
|
13
|
+
|
|
14
|
+
var _checkIsPatternsMatchFilename = require("../../loaderConfigs/checkIsPatternsMatchFilename");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
class SelectorWeightPlugin {
|
|
19
|
+
constructor(options = {}) {
|
|
20
|
+
this.options = {
|
|
21
|
+
selectorWeightConfig: options.configFile,
|
|
22
|
+
defaultSelector: options.defaultSelector,
|
|
23
|
+
customFileDetails: options.customFileDetails,
|
|
24
|
+
excludeStrings: options.excludeStrings,
|
|
25
|
+
patterns: options.patterns
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
apply(compiler) {
|
|
30
|
+
const {
|
|
31
|
+
defaultSelector,
|
|
32
|
+
customFileDetails,
|
|
33
|
+
excludeStrings,
|
|
34
|
+
patterns
|
|
35
|
+
} = this.options;
|
|
36
|
+
|
|
37
|
+
const rawdata = _fs.default.readFileSync(customFileDetails);
|
|
38
|
+
|
|
39
|
+
const data = JSON.parse(rawdata);
|
|
40
|
+
compiler.hooks.compilation.tap('selector-weight-rewrite', compilation => {
|
|
41
|
+
compilation.hooks.optimizeModules.tap('selector-weight-rewrite', modules => {
|
|
42
|
+
const mods = Array.from(modules).filter(x => x.type.includes('css'));
|
|
43
|
+
mods.forEach(module => {
|
|
44
|
+
const filename = module.issuer.resource;
|
|
45
|
+
|
|
46
|
+
if (!(0, _checkIsPatternsMatchFilename.checkIsPatternsMatchFilename)(patterns, filename)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
/*
|
|
50
|
+
|
|
51
|
+
filename : Deskapp.module.css ?
|
|
52
|
+
data :
|
|
53
|
+
{
|
|
54
|
+
"DeskApp.module.css": {"defaultSelector" : ".desk_app_ui "}
|
|
55
|
+
}
|
|
56
|
+
selectorWeightConfig :
|
|
57
|
+
defaultSelector : .zoho_desk_ui
|
|
58
|
+
|
|
59
|
+
case filename = 'DeskApp.module.css' ?
|
|
60
|
+
data[filename].defaultSelector = '.desk_app_ui'
|
|
61
|
+
case filename is different ?
|
|
62
|
+
defaultSelector = '.zoho_desk_ui'
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const rootOriginal = _postcss.default.parse(module.content); // eslint-disable-next-line no-param-reassign
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
module.content = (0, _selectorWeightPrefixAdder.selectorWeightPrefixAdder)(rootOriginal, data[filename] ? data[filename].defaultSelector : defaultSelector, excludeStrings).toString();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var _default = SelectorWeightPlugin;
|
|
78
|
+
exports.default = _default;
|
package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/selectorWeightPrefixAdder.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorWeightPrefixAdder = selectorWeightPrefixAdder;
|
|
7
|
+
|
|
8
|
+
var _classHandling = require("./classHandling");
|
|
9
|
+
|
|
10
|
+
function selectorWeightPrefixAdder(rootOriginal, selector, excludeStrings) {
|
|
11
|
+
rootOriginal.walkRules((rule, index) => {
|
|
12
|
+
const prevNode = rootOriginal.nodes[index - 1];
|
|
13
|
+
|
|
14
|
+
if ((0, _classHandling.hasPrevNodeIgnore)(index, prevNode, 'updateselector:ignore')) {
|
|
15
|
+
return;
|
|
16
|
+
} // TODO: need to verify cases
|
|
17
|
+
// if (!isInsideMediaQuery(rule)) {
|
|
18
|
+
// return;
|
|
19
|
+
// }
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const selectorArr = rule.selector.split(',');
|
|
23
|
+
selectorArr.forEach((singleSelectorStr, index) => {
|
|
24
|
+
if (excludeStrings.includes(singleSelectorStr.trim())) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (singleSelectorStr.includes(']')) {
|
|
29
|
+
if (singleSelectorStr.slice(singleSelectorStr.lastIndexOf(']') + 2).trim() === '') {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
selectorArr[index] = `${singleSelectorStr.slice(0, singleSelectorStr.lastIndexOf(']') + 1).trim()} ${selector}${singleSelectorStr.slice(singleSelectorStr.lastIndexOf(']') + 2).trim()}`;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
selectorArr[index] = `${selector}${singleSelectorStr}`;
|
|
38
|
+
}); // eslint-disable-next-line no-param-reassign
|
|
39
|
+
|
|
40
|
+
rule.selector = selectorArr.join(',\n');
|
|
41
|
+
});
|
|
42
|
+
return rootOriginal;
|
|
43
|
+
} // function convertSelectorWithoutAttribute (selector, conjunction) {
|
|
44
|
+
// const front = selector
|
|
45
|
+
// .slice(0, selector.lastIndexOf(']') + 1)
|
|
46
|
+
// .trim();
|
|
47
|
+
// const back = selector
|
|
48
|
+
// .slice(selector.lastIndexOf(']') + 2)
|
|
49
|
+
// .trim();
|
|
50
|
+
// return `${front} ${conjunction}${back}`;
|
|
51
|
+
// }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.windowsModification = windowsModification;
|
|
7
|
+
exports.windowsModificationFile = windowsModificationFile;
|
|
8
|
+
const isWin = process.platform === 'win32';
|
|
9
|
+
|
|
10
|
+
function windowsModification(array) {
|
|
11
|
+
return isWin ? array && Array.isArray(array) && array.map(r => r.replace(/\//g, '\\')) : array;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function windowsModificationFile(filename) {
|
|
15
|
+
return isWin ? filename.replace(/\//g, '\\') : filename;
|
|
16
|
+
} // module.exports = { windowsModification, windowsModificationFile };
|