@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.
Files changed (248) hide show
  1. package/.babelrc +12 -0
  2. package/.lintstagedrc +3 -0
  3. package/.vscode/settings.json +5 -0
  4. package/CHANGELOG.md +9 -0
  5. package/ConfigurationDocumentation.md +401 -0
  6. package/ContributionGuide.md +2 -0
  7. package/NOTES-Dec12.md +12 -0
  8. package/README.md +91 -0
  9. package/README_backup.md +82 -0
  10. package/TODO.md +35 -0
  11. package/cli.js +31 -0
  12. package/coverage/base.css +224 -0
  13. package/coverage/block-navigation.js +87 -0
  14. package/coverage/coverage-final.json +2 -0
  15. package/coverage/coverage-summary.json +3 -0
  16. package/coverage/favicon.png +0 -0
  17. package/coverage/index.html +116 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/sort-arrow-sprite.png +0 -0
  21. package/coverage/sorter.js +196 -0
  22. package/coverage/updateArrayWithDefault.js.html +196 -0
  23. package/docs/CSSCustomPluginsDocumentation.md +71 -0
  24. package/docs/CustomChunksConfiguration.md +0 -0
  25. package/docs/EFCFileTemplate.md +0 -0
  26. package/docs/MockApi.md +61 -0
  27. package/docs/NameTemplateUtility.md +93 -0
  28. package/docs/ServiseWorkerTemplate.md +0 -0
  29. package/docs/SupportedBrowserVersions.md +61 -0
  30. package/helpDocs/check.js +7 -0
  31. package/helpDocs/commmands/build.md +0 -0
  32. package/helpDocs/commmands/start.md +0 -0
  33. package/helpDocs/examples/buildWithContentHash.md +0 -0
  34. package/helpDocs/examples/startDevServer.md +0 -0
  35. package/helpDocs/examples/startWithMockAPI.md +0 -0
  36. package/helpDocs/node18-env.md +30 -0
  37. package/helpDocs/troubleshootings/NewMachineSetup.md +71 -0
  38. package/helpDocs/troubleshootings/README.md +9 -0
  39. package/helpDocs/troubleshootings/hg_install.sh +18 -0
  40. package/helpDocs/troubleshootings/newMachineMac.sh +86 -0
  41. package/helpDocs/troubleshootings/newMachineUbundu.bash +84 -0
  42. package/lib/allCommandsConfigs.js +25 -0
  43. package/lib/commands/build/commandExecutor.js +17 -0
  44. package/lib/commands/build/config.js +12 -0
  45. package/lib/commands/build/errorHander.js +10 -0
  46. package/lib/commands/build/optionsProcessor.js +35 -0
  47. package/lib/commands/buildEs/commandExecutor.js +33 -0
  48. package/lib/commands/buildEs/config.js +12 -0
  49. package/lib/commands/buildLib/commandExecutor.js +33 -0
  50. package/lib/commands/buildLib/config.js +12 -0
  51. package/lib/commands/mockserver/commandExecutor.js +43 -0
  52. package/lib/commands/mockserver/config.js +12 -0
  53. package/lib/commands/start/commandExecutor.js +12 -0
  54. package/lib/commands/start/config.js +12 -0
  55. package/lib/commands/start/deprecationHandler.js +10 -0
  56. package/lib/commands/start/errorHander.js +10 -0
  57. package/lib/commands/start/optionsProcessor.js +30 -0
  58. package/lib/commands/start/postProcessor.js +10 -0
  59. package/lib/commands/start/preProcessor.js +10 -0
  60. package/lib/commands/template/commandExecutor.js +28 -0
  61. package/lib/commands/template/config.js +12 -0
  62. package/lib/commands/version/commandExecutor.js +14 -0
  63. package/lib/commands/version/config.js +12 -0
  64. package/lib/commands/version/errorHander.js +10 -0
  65. package/lib/commandsRouter.js +74 -0
  66. package/lib/index.js +12 -0
  67. package/lib/logger.js +34 -0
  68. package/lib/schemas/applyValuesToSchema/index.js +34 -0
  69. package/lib/schemas/applyValuesToSchema/isObject.js +10 -0
  70. package/lib/schemas/applyValuesToSchema/isValid.js +14 -0
  71. package/lib/schemas/cliArgsToObject.js +39 -0
  72. package/lib/schemas/defaultConfigValues.js +276 -0
  73. package/lib/schemas/defaultConfigValuesOnly.js +161 -0
  74. package/lib/schemas/deprecatedOptionsHandler.js +67 -0
  75. package/lib/schemas/getNpmVersion.js +22 -0
  76. package/lib/schemas/giveDefaultValue.js +18 -0
  77. package/lib/schemas/npmConfigToObject.js +35 -0
  78. package/lib/schemas/readOptions.js +54 -0
  79. package/lib/schemas/readOptionsForConfigFile.js +42 -0
  80. package/lib/shared/babel/babelWebConfig.js +51 -0
  81. package/lib/shared/babel/babel_plugins/removeAttributesPlugin.js +23 -0
  82. package/lib/shared/babel/defaultBabelPlugins.js +26 -0
  83. package/lib/shared/babel/runBabelForJSFile.js +24 -0
  84. package/lib/shared/bundler/webpack/common/decidePublicPath.js +52 -0
  85. package/lib/shared/bundler/webpack/common/libAlias.js +31 -0
  86. package/lib/shared/bundler/webpack/common/modeUtils.js +31 -0
  87. package/lib/shared/bundler/webpack/common/nameTemplates.js +78 -0
  88. package/lib/shared/bundler/webpack/common/resourceBasedPublicPath.js +21 -0
  89. package/lib/shared/bundler/webpack/configCustomLoaders.js +10 -0
  90. package/lib/shared/bundler/webpack/cssLoaders.js +16 -0
  91. package/lib/shared/bundler/webpack/custom_plugins/CdnChangePlugin.js +95 -0
  92. package/lib/shared/bundler/webpack/custom_plugins/EFCTemplatePlugin.js +112 -0
  93. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ContributionGuide.md +11 -0
  94. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nFilesEmitPlugin.js +172 -0
  95. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nKeysIdentifer.js +76 -0
  96. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nRuntimeDealerPlugin.js +203 -0
  97. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nSplit.md +95 -0
  98. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/LocaleChunkAssetsStore.js +73 -0
  99. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ModulesI18nKeysStore.js +88 -0
  100. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/README.md +25 -0
  101. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/constants.js +29 -0
  102. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/createHash.js +24 -0
  103. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/getI18nLoadingRuntimeModule.js +76 -0
  104. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/index.js +39 -0
  105. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/iterateModulesInChunk.js +50 -0
  106. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/optionsHandler.js +68 -0
  107. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/pathCreator.js +23 -0
  108. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/readI18nValues.js +29 -0
  109. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateFileName.js +43 -0
  110. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateHashHelpers.js +77 -0
  111. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/collectI18nKeys.js +66 -0
  112. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/getChunkModules.js +13 -0
  113. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/hashUtils.js +19 -0
  114. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/index.js +31 -0
  115. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/propertiesUtils.js +129 -0
  116. package/lib/shared/bundler/webpack/custom_plugins/InitialHtmlPlugin.js +54 -0
  117. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/addFilesNamesToManifestJson.js +24 -0
  118. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createInitialEntries.js +17 -0
  119. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createManifestJson.js +35 -0
  120. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/findInitialFileNames.js +18 -0
  121. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/index.js +44 -0
  122. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/removeHashFromFileName.js +18 -0
  123. package/lib/shared/bundler/webpack/custom_plugins/RTLSplitPlugin.js +1 -0
  124. package/lib/shared/bundler/webpack/custom_plugins/ResourceHintsPlugin.js +191 -0
  125. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/OverwriteCssPathForRTL.js +62 -0
  126. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtlCssPlugin.js +84 -0
  127. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtrSplit.md +34 -0
  128. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/replaceCssDirTemplate.js +27 -0
  129. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/classHandling.js +20 -0
  130. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/index.js +78 -0
  131. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/selectorWeightPrefixAdder.js +51 -0
  132. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/windowsModification.js +16 -0
  133. package/lib/shared/bundler/webpack/custom_plugins/ServiceWorkerPlugin.js +110 -0
  134. package/lib/shared/bundler/webpack/custom_plugins/SourceMapPlugin/index.js +38 -0
  135. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/addHashToFilePath.js +22 -0
  136. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/index.js +55 -0
  137. package/lib/shared/bundler/webpack/custom_plugins/UglifyCSSPlugin/index.js.js +49 -0
  138. package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/ErrorHandler.js +62 -0
  139. package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/index.js +362 -0
  140. package/lib/shared/bundler/webpack/custom_plugins/emitAsset.js +14 -0
  141. package/lib/shared/bundler/webpack/custom_plugins/getInitialAssetsFuncTemplate.js +57 -0
  142. package/lib/shared/bundler/webpack/custom_plugins/getInitialI18nAssetsArrayStr.js +87 -0
  143. package/lib/shared/bundler/webpack/defaultVendorPatternList.js +13 -0
  144. package/lib/shared/bundler/webpack/entryConfig.js +28 -0
  145. package/lib/shared/bundler/webpack/externals.js +13 -0
  146. package/lib/shared/bundler/webpack/getCSSLoaders.js +27 -0
  147. package/lib/shared/bundler/webpack/getFilenameFromModule.js +24 -0
  148. package/lib/shared/bundler/webpack/getSourceMapType.js +10 -0
  149. package/lib/shared/bundler/webpack/jsLoaders.js +17 -0
  150. package/lib/shared/bundler/webpack/loaderConfigs/assetLoaders.js +12 -0
  151. package/lib/shared/bundler/webpack/loaderConfigs/babelLoaderConfig.js +18 -0
  152. package/lib/shared/bundler/webpack/loaderConfigs/checkIsPatternsMatchFilename.js +56 -0
  153. package/lib/shared/bundler/webpack/loaderConfigs/configHtmlTemplateLoader.js +18 -0
  154. package/lib/shared/bundler/webpack/loaderConfigs/configPostCssLoader.js +37 -0
  155. package/lib/shared/bundler/webpack/loaderConfigs/configWebWorkerLoader.js +21 -0
  156. package/lib/shared/bundler/webpack/loaderConfigs/configsAssetsLoaders.js +138 -0
  157. package/lib/shared/bundler/webpack/loaderConfigs/cssClassNameGenerate.js +60 -0
  158. package/lib/shared/bundler/webpack/loaderConfigs/getCssLoaderOptions.js +21 -0
  159. package/lib/shared/bundler/webpack/loaders/workerLoader.js +133 -0
  160. package/lib/shared/bundler/webpack/optimizationConfig.js +43 -0
  161. package/lib/shared/bundler/webpack/outputConfig.js +28 -0
  162. package/lib/shared/bundler/webpack/pluginConfigs/configBundleAnalyzer.js +40 -0
  163. package/lib/shared/bundler/webpack/pluginConfigs/configCSSMinifierPlugin.js +24 -0
  164. package/lib/shared/bundler/webpack/pluginConfigs/configCdnChangePlugin.js +27 -0
  165. package/lib/shared/bundler/webpack/pluginConfigs/configCopyPublicFolders.js +63 -0
  166. package/lib/shared/bundler/webpack/pluginConfigs/configEFCTemplatePlugin.js +46 -0
  167. package/lib/shared/bundler/webpack/pluginConfigs/configEnvVariables.js +36 -0
  168. package/lib/shared/bundler/webpack/pluginConfigs/configHtmlWebpackPlugin.js +56 -0
  169. package/lib/shared/bundler/webpack/pluginConfigs/configI18nSplitPlugin.js +41 -0
  170. package/lib/shared/bundler/webpack/pluginConfigs/configIgnorePlugin.js +16 -0
  171. package/lib/shared/bundler/webpack/pluginConfigs/configManifestJsonPlugin.js +32 -0
  172. package/lib/shared/bundler/webpack/pluginConfigs/configMiniCSSExtractPlugin.js +23 -0
  173. package/lib/shared/bundler/webpack/pluginConfigs/configProgressPlugin.js +24 -0
  174. package/lib/shared/bundler/webpack/pluginConfigs/configResourceHintsPlugin.js +21 -0
  175. package/lib/shared/bundler/webpack/pluginConfigs/configRtlCssPlugin.js +27 -0
  176. package/lib/shared/bundler/webpack/pluginConfigs/configSelectorWeightPlugin.js +28 -0
  177. package/lib/shared/bundler/webpack/pluginConfigs/configServiceWorkerPlugin.js +40 -0
  178. package/lib/shared/bundler/webpack/pluginConfigs/configSourceMapPlugin.js +20 -0
  179. package/lib/shared/bundler/webpack/pluginConfigs/configTPHashMappingPlugin.js +32 -0
  180. package/lib/shared/bundler/webpack/pluginConfigs/configVariableConversionPlugin.js +25 -0
  181. package/lib/shared/bundler/webpack/plugins.js +50 -0
  182. package/lib/shared/bundler/webpack/resolvers.js +81 -0
  183. package/lib/shared/bundler/webpack/splitChunksConfig.js +113 -0
  184. package/lib/shared/bundler/webpack/statsConfig.js +21 -0
  185. package/lib/shared/bundler/webpack/utils/index.js +26 -0
  186. package/lib/shared/bundler/webpack/utils/updateArrayWithDefault.js +34 -0
  187. package/lib/shared/bundler/webpack/webpackBuild.js +27 -0
  188. package/lib/shared/bundler/webpack/webpackConfig.js +56 -0
  189. package/lib/shared/commands-utils/doBasicRequirementCheck.js +17 -0
  190. package/lib/shared/commands-utils/getCliPath.js +39 -0
  191. package/lib/shared/commands-utils/index.js +29 -0
  192. package/lib/shared/commands-utils/log.js +13 -0
  193. package/lib/shared/commands-utils/readArgsFormCommandLine.js +11 -0
  194. package/lib/shared/commands-utils/readOptionFormCommandLine.js +11 -0
  195. package/lib/shared/commands-utils/spawnSyncIO.js +38 -0
  196. package/lib/shared/constants.js +45 -0
  197. package/lib/shared/fileUtils/copyFile.js +38 -0
  198. package/lib/shared/fileUtils/directoryIterator.js +21 -0
  199. package/lib/shared/fileUtils/watchRun.js +100 -0
  200. package/lib/shared/postcss/custom_postcss_plugins/EmptyPlugin.js +21 -0
  201. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/constants.js +10 -0
  202. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/handleIgnores.js +66 -0
  203. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/index.js +136 -0
  204. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/insertBefore.js +32 -0
  205. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/isPreviouslyProcessed.js +20 -0
  206. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/replaceUtils.js +20 -0
  207. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/separateHoveredSelectorAndNormalSelector.js +24 -0
  208. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/specialCases.js +43 -0
  209. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/typeCheckUtils.js +52 -0
  210. package/lib/shared/postcss/custom_postcss_plugins/RTLSplitPlugin.js +139 -0
  211. package/lib/shared/postcss/custom_postcss_plugins/SelectorReplace.js +90 -0
  212. package/lib/shared/postcss/custom_postcss_plugins/ValueReplacer.js +57 -0
  213. package/lib/shared/postcss/custom_postcss_plugins/VariableModificationPlugin/index.js +343 -0
  214. package/lib/shared/postcss/filterPluginsAllowedForSpecficFile.js +55 -0
  215. package/lib/shared/postcss/getAllowedPostCssPlugins.js +30 -0
  216. package/lib/shared/postcss/getSpecificPostCssPlugin.js +58 -0
  217. package/lib/shared/postcss/runPostCssForCssFile.js +37 -0
  218. package/lib/shared/server/configWebpackDevMiddleware.js +41 -0
  219. package/lib/shared/server/corsHandling.js +21 -0
  220. package/lib/shared/server/getIp.js +30 -0
  221. package/lib/shared/server/getServerURL.js +29 -0
  222. package/lib/shared/server/httpsOptions.js +46 -0
  223. package/lib/shared/server/initExpressApp.js +19 -0
  224. package/lib/shared/server/initialHTMLHandling.js +99 -0
  225. package/lib/shared/server/mockApiHandler.js +60 -0
  226. package/lib/shared/server/mockServer.js +41 -0
  227. package/lib/shared/server/serveContextFiles.js +27 -0
  228. package/lib/shared/server/serverBywebpackDevMiddleware.js +35 -0
  229. package/lib/shared/server/startHttpServer.js +26 -0
  230. package/lib/shared/server/startHttpsServer.js +38 -0
  231. package/lib/shared/server/unwanted/addHttp2Server.js +41 -0
  232. package/lib/shared/server/unwanted/configWebpackDevMiddleware.js +44 -0
  233. package/lib/shared/server/unwanted/mockApiSupport.js +19 -0
  234. package/lib/shared/server/unwanted/websocketMockSetup.js +48 -0
  235. package/lib/shared/server/urlConcat.js +32 -0
  236. package/lib/shared/utils/requireLocalOrGlobal.js +81 -0
  237. package/lib/shared/utils/utils.js +1 -0
  238. package/lib/shared/utils/versionPrint.js +20 -0
  239. package/npm-shrinkwrap.json +14102 -0
  240. package/package.json +54 -0
  241. package/polyfillForOldNodeVersion.js +10 -0
  242. package/result.json +1 -0
  243. package/templates/app/README.MD +30 -0
  244. package/templates/app/package.json +12 -0
  245. package/templates/library/README.MD +28 -0
  246. package/templates/library/package.json +11 -0
  247. package/templates/wms/index.html +43 -0
  248. package/unittest/index.html +37 -0
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.HOVER_NOTATION = void 0;
7
+
8
+ /* eslint-disable no-use-before-define */
9
+ const HOVER_NOTATION = ':hover';
10
+ exports.HOVER_NOTATION = HOVER_NOTATION;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleIgnores = handleIgnores;
7
+
8
+ var _typeCheckUtils = require("./typeCheckUtils");
9
+
10
+ const hoverIgnoreQuery = 'Hover:ignore';
11
+ const activeIgnoreQuery = 'Active:ignore';
12
+ const hoverActiveIgnoreQuery = 'HoverActive:ignore';
13
+
14
+ function handleIgnore() {
15
+ let isIgnored = false;
16
+ return {
17
+ isIgnored: () => isIgnored,
18
+ update: isGoingTobeIgnored => {
19
+ isIgnored = isGoingTobeIgnored;
20
+ },
21
+ reset: () => {
22
+ isIgnored = false;
23
+ }
24
+ };
25
+ } // eslint-disable-next-line no-unused-vars
26
+
27
+
28
+ function handleIgnores(options) {
29
+ const hoverHandler = handleIgnore();
30
+ const activeHandler = handleIgnore();
31
+
32
+ function generateReturnValue() {
33
+ return {
34
+ hoverIgnored: hoverHandler.isIgnored(),
35
+ activeIgnored: activeHandler.isIgnored()
36
+ };
37
+ }
38
+
39
+ const ignoreCommentMap = {
40
+ [hoverIgnoreQuery]: () => {
41
+ hoverHandler.update(true);
42
+ },
43
+ [activeIgnoreQuery]: () => {
44
+ activeHandler.update(true);
45
+ },
46
+ [hoverActiveIgnoreQuery]: () => {
47
+ hoverHandler.update(true);
48
+ activeHandler.update(true);
49
+ }
50
+ };
51
+ return node => {
52
+ if ((0, _typeCheckUtils.isComment)(node)) {
53
+ const commentText = node.text.trim();
54
+ ignoreCommentMap[commentText] && ignoreCommentMap[commentText](); // NOTE: we return here because this is just comment we can skip it.
55
+
56
+ return generateReturnValue();
57
+ } // NOTE: we get the here. But return after resetting for next. Because these comment Only works for once.
58
+ // Even If we support multiple line Skip we must do it in reset or separate method.
59
+
60
+
61
+ const returnValue = generateReturnValue();
62
+ hoverHandler.reset();
63
+ activeHandler.reset();
64
+ return returnValue;
65
+ };
66
+ }
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _handleIgnores = require("./handleIgnores");
9
+
10
+ var _typeCheckUtils = require("./typeCheckUtils");
11
+
12
+ var _isPreviouslyProcessed = require("./isPreviouslyProcessed");
13
+
14
+ var _insertBefore = require("./insertBefore");
15
+
16
+ var _separateHoveredSelectorAndNormalSelector = require("./separateHoveredSelectorAndNormalSelector");
17
+
18
+ var _replaceUtils = require("./replaceUtils");
19
+
20
+ var _specialCases = require("./specialCases");
21
+
22
+ var _default = config => {
23
+ const hoverMedQuerySuffix = config.hover;
24
+ const activeMedQuerySuffix = config.active;
25
+ return {
26
+ postcssPlugin: 'postcss-mobile-hover',
27
+ Once: function Once(root, params) {
28
+ const getIgnoreStatus = (0, _handleIgnores.handleIgnores)(); // eslint-disable-next-line no-use-before-define
29
+
30
+ const mediaRuleCreatorMap = getMediaRuleMap(params, hoverMedQuerySuffix, activeMedQuerySuffix);
31
+ root.walk(node => {
32
+ const ignoreStatus = getIgnoreStatus(node);
33
+
34
+ if ((0, _typeCheckUtils.isRule)(node) === false) {
35
+ return;
36
+ }
37
+
38
+ if ((0, _typeCheckUtils.isAtRule)(node.parent) && !(0, _typeCheckUtils.isMediaQuery)(node.parent)) {
39
+ return;
40
+ } // NOTE: after previous return we expect rule that are only normal rule or rules that inside media query
41
+
42
+
43
+ const rule = node;
44
+
45
+ if ((0, _isPreviouslyProcessed.isPreviouslyProcessed)(rule, {
46
+ hoverMedQuerySuffix,
47
+ activeMedQuerySuffix
48
+ })) {
49
+ return;
50
+ }
51
+
52
+ const {
53
+ hoveredSelectors,
54
+ normalSelectors
55
+ } = (0, _separateHoveredSelectorAndNormalSelector.separateHoveredSelectorAndNormalSelector)(rule.selector); // NOTE: this if will remove rule if the rule has no normal selectors. and return So be aware.
56
+
57
+ if (hoveredSelectors.length === 0) {
58
+ // || isRuleHasHover(rule) === false
59
+ return;
60
+ }
61
+
62
+ let newHoverMediaQuery = null;
63
+ let newActiveMediaQuery = null;
64
+ let prefix = '';
65
+
66
+ if ((0, _typeCheckUtils.isAtRule)(rule.parent)) {
67
+ prefix = rule.parent.params;
68
+ } else {
69
+ // NOTE: for usual rules we don't need prefix, So use prefix as empty string
70
+ prefix = '';
71
+ }
72
+
73
+ if (!ignoreStatus.hoverIgnored) {
74
+ newHoverMediaQuery = mediaRuleCreatorMap.hoverRule({
75
+ rule,
76
+ hoveredSelectors,
77
+ prefix
78
+ }, params);
79
+ }
80
+
81
+ if (!ignoreStatus.activeIgnored) {
82
+ newActiveMediaQuery = mediaRuleCreatorMap.activeRule({
83
+ rule,
84
+ hoveredSelectors,
85
+ prefix
86
+ }, params);
87
+ }
88
+
89
+ (0, _insertBefore.insertNearBy)(rule, newHoverMediaQuery);
90
+ (0, _insertBefore.insertNearBy)(rule, newActiveMediaQuery);
91
+ (0, _specialCases.hackForComposes)(rule, hoveredSelectors, params);
92
+ (0, _specialCases.removeRuleIfNoNormalSelectors)(normalSelectors, rule);
93
+ });
94
+ }
95
+ };
96
+ };
97
+
98
+ exports.default = _default;
99
+
100
+ function getMediaRuleMap(params, hoverMedQuerySuffix, activeMedQuerySuffix) {
101
+ const {
102
+ AtRule
103
+ } = params;
104
+ return {
105
+ hoverRule({
106
+ rule,
107
+ hoveredSelectors,
108
+ prefix
109
+ }) {
110
+ const newMediaQuery = new AtRule({
111
+ name: 'media',
112
+ params: (0, _isPreviouslyProcessed.concatMediaParams)(prefix, hoverMedQuerySuffix)
113
+ });
114
+ const clonedRule = rule.clone();
115
+ clonedRule.selector = hoveredSelectors.join(',');
116
+ newMediaQuery.append(clonedRule);
117
+ return newMediaQuery;
118
+ },
119
+
120
+ activeRule({
121
+ rule,
122
+ hoveredSelectors,
123
+ prefix
124
+ }) {
125
+ const newMediaQuery = new AtRule({
126
+ name: 'media',
127
+ params: (0, _isPreviouslyProcessed.concatMediaParams)(prefix, activeMedQuerySuffix)
128
+ });
129
+ const clonedRule = rule.clone();
130
+ clonedRule.selector = hoveredSelectors.map(_replaceUtils.replaceHoverToActiveInSelector).join(',');
131
+ newMediaQuery.append(clonedRule);
132
+ return newMediaQuery;
133
+ }
134
+
135
+ };
136
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.insertBefore = insertBefore;
7
+ exports.insertNearBy = insertNearBy;
8
+
9
+ var _typeCheckUtils = require("./typeCheckUtils");
10
+
11
+ function insertBefore(node, newNode) {
12
+ newNode && node.parent.insertBefore(node, newNode);
13
+ return newNode;
14
+ } // function insertAfter(node, newNode) {
15
+ // newNode && node.parent.insertAfter(node, newNode);
16
+ // return newNode;
17
+ // }
18
+
19
+
20
+ function insertNearBy(node, newNode) {
21
+ if (!newNode) {
22
+ return newNode;
23
+ } // we use insertBefore Because we wouldn't end up recursive (repeated) check and creation
24
+
25
+
26
+ if ((0, _typeCheckUtils.isParentAtRule)(node) && (0, _typeCheckUtils.isAtRule)(newNode)) {
27
+ return insertNearBy(node.parent, newNode);
28
+ }
29
+
30
+ return insertBefore(node, newNode); // return insertAfter(node, newNode);
31
+ // return newNode;
32
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.concatMediaParams = concatMediaParams;
7
+ exports.isPreviouslyProcessed = isPreviouslyProcessed;
8
+
9
+ var _typeCheckUtils = require("./typeCheckUtils");
10
+
11
+ function concatMediaParams(prefix, suffix) {
12
+ return prefix ? `${prefix} and ${suffix}` : `${suffix}`;
13
+ }
14
+
15
+ function isPreviouslyProcessed(rule, {
16
+ hoverMedQuerySuffix,
17
+ activeMedQuerySuffix
18
+ }) {
19
+ return (0, _typeCheckUtils.isParentAtRule)(rule) && ((0, _typeCheckUtils.isParentAtRuleContainsParam)(rule, hoverMedQuerySuffix) || (0, _typeCheckUtils.isParentAtRuleContainsParam)(rule, activeMedQuerySuffix));
20
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.replaceHoverToActiveInSelector = exports.removeHoverFromSelector = void 0;
7
+
8
+ var _constants = require("./constants");
9
+
10
+ // function isRuleHasHover(rule) {
11
+ // return isSelectorHasHover(rule.selector);
12
+ // }
13
+ function generateReplacer(baseStr, replaceStr) {
14
+ return (inputStr = '') => inputStr.replaceAll(baseStr, replaceStr);
15
+ }
16
+
17
+ const removeHoverFromSelector = generateReplacer(_constants.HOVER_NOTATION, '');
18
+ exports.removeHoverFromSelector = removeHoverFromSelector;
19
+ const replaceHoverToActiveInSelector = generateReplacer(_constants.HOVER_NOTATION, ':active');
20
+ exports.replaceHoverToActiveInSelector = replaceHoverToActiveInSelector;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.separateHoveredSelectorAndNormalSelector = separateHoveredSelectorAndNormalSelector;
7
+
8
+ var _typeCheckUtils = require("./typeCheckUtils");
9
+
10
+ function separateHoveredSelectorAndNormalSelector(fullselector = '') {
11
+ const hoveredSelectors = [];
12
+ const normalSelectors = [];
13
+ fullselector.split(/\s*,\s*/).forEach(selector => {
14
+ if ((0, _typeCheckUtils.isSelectorHasHover)(selector)) {
15
+ hoveredSelectors.push(selector);
16
+ } else {
17
+ normalSelectors.push(selector);
18
+ }
19
+ });
20
+ return {
21
+ hoveredSelectors,
22
+ normalSelectors
23
+ };
24
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hackForComposes = hackForComposes;
7
+ exports.removeRuleIfNoNormalSelectors = removeRuleIfNoNormalSelectors;
8
+
9
+ var _insertBefore = require("./insertBefore");
10
+
11
+ var _replaceUtils = require("./replaceUtils");
12
+
13
+ function hackForComposes(rule, hoveredSelectors, params) {
14
+ const {
15
+ Rule
16
+ } = params;
17
+
18
+ if (hoveredSelectors.length === 0) {
19
+ return;
20
+ } // NOTE: we create Empty Rule with hovered selectors that :hover removed from hover selector
21
+ // Reason: when composes looking for selector it most be at least empty rule other wise composes will throw error.
22
+
23
+
24
+ (0, _insertBefore.insertBefore)(rule, new Rule({
25
+ selector: hoveredSelectors.map(_replaceUtils.removeHoverFromSelector).join(',')
26
+ }));
27
+ }
28
+ /**
29
+ * NOTE: this function will remove rule if the rule has no normal selectors.
30
+ * @param {Rule} rule
31
+ * @returns
32
+ */
33
+
34
+
35
+ function removeRuleIfNoNormalSelectors(normalSelectors, rule) {
36
+ if (normalSelectors.length) {
37
+ // NOTE: removed hovered selectors
38
+ // eslint-disable-next-line no-param-reassign
39
+ rule.selector = normalSelectors.join(',');
40
+ } else {
41
+ rule.remove();
42
+ }
43
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isAtRule = isAtRule;
7
+ exports.isAtRuleContainsParam = isAtRuleContainsParam;
8
+ exports.isComment = isComment;
9
+ exports.isMediaQuery = isMediaQuery;
10
+ exports.isParentAtRule = isParentAtRule;
11
+ exports.isParentAtRuleContainsParam = isParentAtRuleContainsParam;
12
+ exports.isRule = isRule;
13
+ exports.isRuleNotInsideAtRule = isRuleNotInsideAtRule;
14
+ exports.isSelectorHasHover = isSelectorHasHover;
15
+
16
+ var _constants = require("./constants");
17
+
18
+ function isComment(node) {
19
+ return node.type === 'comment';
20
+ }
21
+
22
+ function isRule(node) {
23
+ return node.type === 'rule';
24
+ }
25
+
26
+ function isMediaQuery(node) {
27
+ return node.name === 'media';
28
+ }
29
+
30
+ function isAtRule(node) {
31
+ return node.type === 'atrule';
32
+ }
33
+
34
+ function isAtRuleContainsParam(atRule, content) {
35
+ return atRule.params.includes(content);
36
+ }
37
+
38
+ function isParentAtRuleContainsParam(rule, content) {
39
+ return isAtRuleContainsParam(rule.parent, content);
40
+ }
41
+
42
+ function isParentAtRule(rule) {
43
+ return isAtRule(rule.parent);
44
+ }
45
+
46
+ function isRuleNotInsideAtRule(node) {
47
+ return isRule(node) && node && !isAtRule(node.parent);
48
+ }
49
+
50
+ function isSelectorHasHover(selector) {
51
+ return selector.indexOf(_constants.HOVER_NOTATION) !== -1;
52
+ }
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.separateRtlAndLtr = separateRtlAndLtr;
7
+ exports.separateSingleDir = separateSingleDir;
8
+
9
+ var postcss = _interopRequireWildcard(require("postcss"));
10
+
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+
15
+ /* eslint-disable no-param-reassign */
16
+ const oppositeDir = {
17
+ ltr: 'rtl',
18
+ rtl: 'ltr'
19
+ };
20
+
21
+ function compareSelector(selector1, selector2) {
22
+ // console.log({ selector1, selector2 }, selector1 === selector2);
23
+ return selector1 === selector2;
24
+ }
25
+
26
+ const directionRegexs = {
27
+ ltr: /\[dir=ltr\]/,
28
+ rtl: /\[dir=rtl\]/
29
+ };
30
+
31
+ const getRegex = dir => directionRegexs[dir];
32
+
33
+ const getOppositeRegex = dir => getRegex(oppositeDir[dir]);
34
+
35
+ function selectorMinifySameDir(selector, direction) {
36
+ // NOTE: if this rule is same dir as current need
37
+ // then we can just remove that [dir=ltr] or [dir=rtl]
38
+ // it just for minimaze selector
39
+ const regex = getRegex(direction);
40
+ return selector.replace(regex, '').trim();
41
+ }
42
+ /**
43
+ * this funtion will remove given rule,
44
+ * if given selector and it's previous sibiling rule selector are same
45
+ * current rule properties will move to previous sibiling rule.
46
+ * @param {Rule} rule current rule
47
+ */
48
+
49
+
50
+ function mergeIfSameSelector(rule) {
51
+ // NOTE: to merge dublicate selector rules
52
+ const prev = rule.prev();
53
+
54
+ if (prev && compareSelector(prev.selector, rule.selector)) {
55
+ rule.each(decl => {
56
+ prev.append(decl);
57
+ });
58
+ rule.remove();
59
+ }
60
+ }
61
+ /**
62
+ * this funtion will remove given rule,
63
+ * if given selector and it's previous sibiling rule selector are same
64
+ * current rule properties will move to previous sibiling rule.
65
+ * @param {Rule} rule current rule
66
+ */
67
+
68
+
69
+ function removeIfOppsiteDirRule(rule, direction, rootOptions) {
70
+ // console.log({ rule, type: rule.type });
71
+ const selectors = rule.selector.split(/\s*,\s*/); // NOTE: if we use opposite dir selector as custom override reason,
72
+ // and compain normal selector with it, In this case
73
+ // we just a have to remove that selector only not full rule
74
+
75
+ const oppositeDirRegex = getOppositeRegex(direction);
76
+ let remainingSelectors = selectors.filter(selector => !oppositeDirRegex.test(selector));
77
+
78
+ if (!rootOptions.disableMinifySelector) {
79
+ remainingSelectors = remainingSelectors.map(selector => selectorMinifySameDir(selector, direction));
80
+ }
81
+
82
+ if (remainingSelectors.length) {
83
+ rule.selector = remainingSelectors.join(', ');
84
+ } else {
85
+ // NOTE: every selector is opposite dir then we have to remove the rule
86
+ rule.remove();
87
+ }
88
+ }
89
+
90
+ function removeIfOppsiteDirKeyframe(rule, direction) {
91
+ const name = rule.params;
92
+ const keyFrameDirName = name.slice(name.lastIndexOf('-') + 1);
93
+
94
+ if (keyFrameDirName === oppositeDir[direction]) {
95
+ // console.log({ m: 'removed', keyFrameName: rule.params });
96
+ rule.remove();
97
+ }
98
+ }
99
+
100
+ function separateSingleDir(root, direction, rootOptions) {
101
+ root.walkRules(rule => {
102
+ removeIfOppsiteDirRule(rule, direction, rootOptions);
103
+ mergeIfSameSelector(rule);
104
+ });
105
+ root.walkAtRules(rule => {
106
+ removeIfOppsiteDirKeyframe(rule, direction);
107
+ });
108
+ return root;
109
+ }
110
+
111
+ function separateRtlAndLtr(css, rootOptions) {
112
+ // let processor = postcss([]).process(css);
113
+ const root = postcss.parse(css); // let { root } = processor;
114
+ // console.log(processor, root);
115
+ // NOTE: I did first rtl then ltr , Because for ltr I use original root ref
116
+
117
+ const rtlRoot = separateSingleDir(root.clone(), 'rtl', rootOptions); // console.log('############################');
118
+
119
+ const ltrRoot = separateSingleDir(root, 'ltr', rootOptions);
120
+ return {
121
+ ltrRoot,
122
+ rtlRoot,
123
+ ltr: ltrRoot.toString(),
124
+ rtl: rtlRoot.toString()
125
+ };
126
+ } // NOTE: to test in https://astexplorer.net/
127
+ // you can test with sample input https://astexplorer.net/#/gist/a892a509eb585099355ef53ef094f836/1ca70d5f7af3b88ca4910296e12f118e9712c874
128
+ // export default postcss.plugin('postcss-rtl-remove', (options = {}) =>
129
+ // // Work with options here
130
+ // root => {
131
+ // const rtlRoot = separateSingleDir(root.clone(), 'rtl');
132
+ // const ltrRoot = separateSingleDir(root, 'ltr');
133
+ // // root.append(postcss.comment({ text: 'comment' }));
134
+ // root.append(postcss.comment({ text: 'this is spliting part ' }));
135
+ // root.append(rtlRoot);
136
+ // //console.log({root, roots:root+""}, root+"")
137
+ // // Transform CSS AST here
138
+ // }
139
+ // );
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ /* eslint-disable no-param-reassign */
9
+ var _default = (opts = {}) => {
10
+ // eslint-disable-next-line no-use-before-define
11
+ validator(opts);
12
+ const {
13
+ before,
14
+ after
15
+ } = opts;
16
+ return {
17
+ postcssPlugin: 'postcss-selector-replace',
18
+
19
+ Once(root) {
20
+ root.walkRules(rule => {
21
+ before.forEach((beforeOpt, idx) => {
22
+ const afterOpt = after[idx];
23
+
24
+ if (typeof beforeOpt === 'string') {
25
+ rule.selector = rule.selector.split(beforeOpt).join(afterOpt);
26
+ } else {
27
+ rule.selector = rule.selector.replace(beforeOpt, afterOpt);
28
+ }
29
+ });
30
+ });
31
+ }
32
+
33
+ };
34
+ };
35
+
36
+ exports.default = _default;
37
+
38
+ function validator(opts) {
39
+ if (!opts || typeof opts !== 'object') {
40
+ throw new Error('Always requires argment');
41
+ }
42
+
43
+ const {
44
+ before,
45
+ after
46
+ } = opts;
47
+
48
+ if (!before || !after) {
49
+ throw new Error('Be sure to have "before" and "after" object names');
50
+ }
51
+
52
+ if (!Array.isArray(before) || !Array.isArray(after)) {
53
+ throw new Error('Objects "before" and "after" must be of type Array');
54
+ }
55
+
56
+ if (before.length !== after.length) {
57
+ throw new Error('Length of before and after options must be the same');
58
+ }
59
+
60
+ if (before.length === 0) {
61
+ throw new Error('Array length is 1 or more');
62
+ }
63
+
64
+ before.forEach((beforeOpt, idx) => {
65
+ const afterOpt = after[idx];
66
+
67
+ switch (true) {
68
+ case typeof beforeOpt === 'string':
69
+ {
70
+ if (!typeof afterOpt === 'string') {
71
+ throw new Error(`The after option ${afterOpt} must be a string. If you want to apply the replace callback function, then use a RegExp for the before option`);
72
+ }
73
+
74
+ break;
75
+ }
76
+
77
+ case beforeOpt instanceof RegExp:
78
+ {
79
+ if (!typeof afterOpt === 'string' && !typeof afterOpt === 'function') {
80
+ throw new Error(`The after option ${afterOpt} must be either a string, or a function`);
81
+ }
82
+
83
+ break;
84
+ }
85
+
86
+ default:
87
+ throw new Error(`The before option ${beforeOpt} must be either a string, or a RegExp`);
88
+ }
89
+ });
90
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ const diffBasedOnStrLength = (a, b) => b.length - a.length;
9
+ /**
10
+ * @param {Array} valueReplacer
11
+ * [
12
+ {
13
+ "props": ["color", "background-color"],
14
+ "values" : {
15
+ "zd-": "im-"
16
+ }
17
+ }
18
+ ]
19
+ */
20
+
21
+
22
+ const PostcssValueReplacer = (valueReplacer = []) => {
23
+ const options = {};
24
+ valueReplacer.forEach(obj => {
25
+ obj.props.forEach(prop => {
26
+ const valueKeys = Object.keys(obj.values);
27
+ const propOptions = options[prop];
28
+
29
+ if (options[prop]) {
30
+ valueKeys.forEach(k => {
31
+ propOptions.values[k] = obj.values[k];
32
+ });
33
+ propOptions.sortedKeys = propOptions.values.sort(diffBasedOnStrLength);
34
+ } else {
35
+ options[prop] = {
36
+ sortedKeys: valueKeys.sort(diffBasedOnStrLength),
37
+ values: obj.values
38
+ };
39
+ }
40
+ });
41
+ }); // Work with options here
42
+
43
+ return {
44
+ postcssPlugin: 'postcss-value-replacer',
45
+ Declaration: decl => {
46
+ const propOptions = options[decl.prop];
47
+ propOptions?.sortedKeys.forEach(k => {
48
+ // eslint-disable-next-line no-param-reassign
49
+ decl.value = decl.value.replaceAll(k, propOptions.values[k]);
50
+ });
51
+ }
52
+ };
53
+ };
54
+
55
+ PostcssValueReplacer.postcss = true;
56
+ var _default = PostcssValueReplacer;
57
+ exports.default = _default;