@zohodesk/react-cli 0.0.1-exp.161.3 → 0.0.1-exp.162.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,6 +17,8 @@ var _I18nKeysIdentifer = _interopRequireDefault(require("./I18nSplitPlugin/I18nK
17
17
 
18
18
  var _replaceCssDirTemplate = require("./RtlSplitPlugin/replaceCssDirTemplate");
19
19
 
20
+ var _EFCTemplatePlugin = _interopRequireDefault(require("./EFCTemplatePlugin"));
21
+
20
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
23
 
22
24
  // import { getShortI18nAssets } from './I18nSplitPlugin/utils/hashUtils';
@@ -34,17 +36,19 @@ const {
34
36
  efc: efcOptios
35
37
  } = cliOptions;
36
38
  const {
37
- createSDkFile
39
+ createSDkFile,
40
+ cdnStatement
38
41
  } = efcOptios;
39
42
 
40
43
  class EFCPlugin {
41
44
  constructor(options = {}) {
42
45
  this.isDevelopment = options.isDevelopment;
46
+ this.templateFilePath = options.templateFilePath;
43
47
  this.serverUrl = options.serverUrl;
44
48
  this.i18nFileNameTemplate = options.i18nFileNameTemplate; // NOTE: this logic may be needed for i18n splited file name with contenthash cases
45
49
  // this.i18nManifestFileName = options.i18nManifestFileName;
46
50
  // IMPORTANT: here we mergeing optionds from pacakge.json and options via constructor
47
- // So when debugging consider this as well
51
+ // So when debugging consider this as well
48
52
 
49
53
  this.options = Object.assign({}, efcOptios, options);
50
54
  this.options.entryPointName = options.entryPointName || 'efc';
@@ -125,20 +129,35 @@ class EFCPlugin {
125
129
  ${enableRTLSplit ? `const cssDir = ${cssDirStatement};` : ''}
126
130
  const prod = !${this.isDevelopment};
127
131
  let cdnVariableName = "${cdnVariableName}";
128
- let assetURLs = {
129
- //hook
130
- js: ${JSON.stringify(jsPath || serverUrl)},
131
- css: ${JSON.stringify(cssPath || serverUrl)},
132
- i18n: ${JSON.stringify(i18nJsPath || serverUrl)}
133
- };
132
+
133
+ function getAssetUrl(ext) {
134
+ ${cdnStatement ? `
135
+ return (() => {
136
+ let fu = (${cdnStatement});
137
+ return typeof fu === "function" ? fu(ext) : fu;
138
+ })();` : ''}
139
+
140
+ ${publicPaths.callback ? `return (${publicPaths.callback})(ext)` : ''}
141
+
142
+ let assetURLs = {
143
+ //hook
144
+ js: ${JSON.stringify(jsPath || serverUrl)},
145
+ css: ${JSON.stringify(cssPath || serverUrl)},
146
+ i18n: ${JSON.stringify(i18nJsPath || serverUrl)}
147
+ };
148
+
149
+ return assetURLs[ext];
150
+
151
+ }
152
+
134
153
 
135
154
  window.desk_urls={}
136
- window.desk_urls.staticDomain = 'https:' + assetURLs.js + '/';
155
+ window.desk_urls.staticDomain = 'https:' + getAssetUrl('js') + '/';
137
156
  if (prod && cdnVariableName) {
138
- window["${cdnVariableName}"] = 'https:' + assetURLs.css + '/';
157
+ window["${cdnVariableName}"] = 'https:' + getAssetUrl('css') + '/';
139
158
  }
140
159
 
141
- let initalI18nAssets = ${initalI18nAssets}.map(urlpath => "${i18nJsPath}/"+ urlpath);
160
+ let initalI18nAssets = ${initalI18nAssets};
142
161
  let initialAssets = initalI18nAssets.concat(${JSON.stringify(enableRTLSplit ? filteredInitialFiles.map(filePath => (0, _replaceCssDirTemplate.replaceCssDirTemplate)(filePath, cssDirTemplate)) : filteredInitialFiles)});
143
162
 
144
163
  let loadAsset = (id, type, url) => {
@@ -150,12 +169,12 @@ class EFCPlugin {
150
169
  switch(type) {
151
170
  case 'script':
152
171
  case 'i18n':
153
- el.src = (type === 'i18n'? assetURLs.i18n : assetURLs.js)+'/'+url
172
+ el.src = (type === 'i18n'? getAssetUrl('i18n') : getAssetUrl('js'))+'/'+url
154
173
  el.defer = 'defer';
155
174
  document.body.appendChild(el);
156
175
  break;
157
176
  case 'link':
158
- el.href = assetURLs.css+'/'+url${enableRTLSplit ? `.replace(${JSON.stringify(cssDirTemplate)}, cssDir)` : ''}
177
+ el.href = getAssetUrl('css')+'/'+url${enableRTLSplit ? `.replace(${JSON.stringify(cssDirTemplate)}, cssDir)` : ''}
159
178
  el.rel = 'stylesheet';
160
179
  document.head.appendChild(el);
161
180
  break;
@@ -186,6 +205,17 @@ class EFCPlugin {
186
205
  apply(compiler) {
187
206
  if (!createSDkFile) {
188
207
  return;
208
+ } //console.log('this.templateFilePath', this.templateFilePath, this.options);
209
+
210
+
211
+ if (this.templateFilePath) {
212
+ new _EFCTemplatePlugin.default({
213
+ templateFilePath: this.templateFilePath,
214
+ publicPath: this.serverUrl,
215
+ i18nFileNameTemplate: this.i18nFileNameTemplate,
216
+ entryPointName: this.options.entryPointName
217
+ }).apply(compiler);
218
+ return;
189
219
  }
190
220
 
191
221
  compiler.hooks.emit.tap('EFCPlugin', compilation => {
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _webpackSources = require("webpack-sources");
9
+
10
+ var _utils = require("../utils");
11
+
12
+ var _path = _interopRequireDefault(require("path"));
13
+
14
+ var _fs = require("fs");
15
+
16
+ var _getI18nFileUrlPathTemplate = require("./I18nSplitPlugin/utils/getI18nFileUrlPathTemplate");
17
+
18
+ var _I18nKeysIdentifer = _interopRequireDefault(require("./I18nSplitPlugin/I18nKeysIdentifer"));
19
+
20
+ var _replaceCssDirTemplate = require("./RtlSplitPlugin/replaceCssDirTemplate");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ // import { getShortI18nAssets } from './I18nSplitPlugin/utils/hashUtils';
25
+ const cliOptions = (0, _utils.getOptions)();
26
+ const {
27
+ i18n: {
28
+ chunkSplitEnable
29
+ },
30
+ css: {
31
+ enableRTLSplit
32
+ },
33
+ efc: efcOptios
34
+ } = cliOptions;
35
+ const {
36
+ createSDkFile
37
+ } = efcOptios; // for smap relate changes
38
+ // CdnChangePlugin
39
+ // SourceMapHookPlugin
40
+
41
+ class EFCTemplatePlugin {
42
+ constructor(options = {}) {
43
+ // console.log(' templateFilePath ', process.cwd(), options.templateFilePath, templateFilePath);
44
+ this.templateFilePath = _path.default.join(process.cwd(), options.templateFilePath); // console.log(' templateFilePath ', this.templateFilePath);
45
+
46
+ this.i18nFileNameTemplate = options.i18nFileNameTemplate;
47
+ this.publicPath = options.publicPath; // NOTE: this logic may be needed for i18n splited file name with contenthash cases
48
+ // this.i18nManifestFileName = options.i18nManifestFileName;
49
+ // IMPORTANT: here we mergeing optionds from pacakge.json and options via constructor
50
+ // So when debugging consider this as well
51
+ // this.options = Object.assign({}, efcOptios, options);
52
+
53
+ this.entryPointName = options.entryPointName || 'efc';
54
+ this.outputFile = efcOptios.outputFile.replace('[version]', efcOptios.version);
55
+ } // NOTE: this logic may be needed for i18n splited file name with contenthash cases
56
+ // getI18nManifest(compilation) {
57
+ // const i18nManifestFile =
58
+ // compilation.assets[this.options.i18nManifestFileName];
59
+ // if (i18nManifestFile) {
60
+ // const manifest = JSON.parse(i18nManifestFile.source());
61
+ // return manifest;
62
+ // }
63
+ // return {};
64
+ // }
65
+
66
+
67
+ getI18nAssetsStr(entryPoint, compilation) {
68
+ // NOTE: we have used lang variable inside
69
+ if (!chunkSplitEnable) {
70
+ let i18nAsstes = {};
71
+ let i18nFiles = Object.keys(compilation.assets).filter(assert => assert.indexOf(`i18n${_path.default.sep}`) !== -1); //hook for i18n url contains i18n/ may cause problem
72
+
73
+ i18nAsstes = i18nFiles.reduce((res, i18nFilePath) => {
74
+ let fileName = i18nFilePath.replace(`i18n${_path.default.sep}`, '');
75
+ let splittedFileName = fileName.split('.');
76
+ res[splittedFileName[0]] = i18nFilePath;
77
+ return res;
78
+ }, {});
79
+ return `[${JSON.stringify(i18nAsstes)}[lang]]`;
80
+ }
81
+
82
+ let initalI18nAssets = entryPoint.chunks.filter(chunk => _I18nKeysIdentifer.default.isChunkHasI18n(chunk)).map(chunk => (0, _getI18nFileUrlPathTemplate.getI18nFileUrlPathTemplate)(compilation, chunk, this.i18nFileNameTemplate, '@locale@'));
83
+ return `${JSON.stringify(initalI18nAssets)}.map(urlpath => urlpath.replace(/@locale@/g, lang))`;
84
+ }
85
+
86
+ templateReplacer(entryPoint, compilation) {
87
+ const cssDirTemplate = '@dir@'; // const i18nManifest = this.getI18nManifest(compilation);
88
+
89
+ const initialFiles = entryPoint.getFiles();
90
+ const filteredInitialFiles = initialFiles.filter(file => /\.(css|js)$/.test(file));
91
+ const initialJsFiles = filteredInitialFiles.filter(file => /\.js$/.test(file));
92
+ let initialCssFiles = filteredInitialFiles.filter(file => /\.css$/.test(file));
93
+
94
+ if (enableRTLSplit) {
95
+ initialCssFiles = initialCssFiles.map(filePath => (0, _replaceCssDirTemplate.replaceCssDirTemplate)(filePath, cssDirTemplate));
96
+ } // const i18nAssets = getShortI18nAssets(
97
+ // entryPoint.chunks,
98
+ // i18nManifest,
99
+ // '' // i18nJsPath
100
+ // );
101
+
102
+
103
+ const initalI18nAssets = this.getI18nAssetsStr(entryPoint, compilation, '' // i18nJsPath
104
+ );
105
+ let templateStr = (0, _fs.readFileSync)(this.templateFilePath).toString();
106
+ return templateStr.replace('((\'getInitalAssets\'))', `function getInitalAssets(assetsType, lang) {
107
+ if (assetsType === "js") {
108
+ return ${JSON.stringify(initialJsFiles)}
109
+ }
110
+ if (assetsType === "css") {
111
+ return ${JSON.stringify(initialCssFiles)}
112
+ }
113
+ if (assetsType === "i18n") {
114
+ return ${initalI18nAssets};
115
+ }
116
+ return [];
117
+ }`).replace('((\'@dir@\'))', '\'@dir@\'').replace('((\'publicPath\'))', this.publicPath).replace('((\'@locale@\'))', '\'@locale@\'');
118
+ }
119
+
120
+ apply(compiler) {
121
+ if (!createSDkFile) {
122
+ return;
123
+ }
124
+
125
+ compiler.hooks.emit.tap('EFCTemplatePlugin', compilation => {
126
+ const {
127
+ entryPointName,
128
+ outputFile
129
+ } = this;
130
+ const entryPoint = compilation.entrypoints.get(entryPointName);
131
+
132
+ if (!entryPoint) {
133
+ return;
134
+ }
135
+
136
+ if (!(0, _fs.existsSync)(this.templateFilePath)) {
137
+ console.error(`EFC Template file not exists ${this.templateFilePath}`);
138
+ return;
139
+ }
140
+
141
+ const source = new _webpackSources.RawSource(this.templateReplacer(entryPoint, compilation));
142
+ compilation.assets[outputFile] = source; // console.log('EFCTemplatePlugin working');
143
+ // eslint-disable-next-line no-console
144
+
145
+ console.log('The EFC embedded code was created successfully..!!!');
146
+ });
147
+ }
148
+
149
+ }
150
+
151
+ exports.default = EFCTemplatePlugin;
@@ -3,9 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.hasContentHash = hasContentHash;
7
- exports.getShortI18nAssets = getShortI18nAssets;
8
6
  exports.REGEXP_CONTENTHASH = void 0;
7
+ exports.getShortI18nAssets = getShortI18nAssets;
8
+ exports.hasContentHash = hasContentHash;
9
9
 
10
10
  var _urlConcat = require("../../../utils/urlConcat");
11
11
 
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getPropertiesAsJSON = getPropertiesAsJSON;
7
6
  exports.getAllI18n = getAllI18n;
7
+ exports.getPropertiesAsJSON = getPropertiesAsJSON;
8
8
  exports.jsonToString = jsonToString;
9
9
 
10
10
  var _fs = require("fs");
@@ -21,6 +21,14 @@ let filenameParser = filename => {
21
21
  } = _path.default.parse(hashedName);
22
22
 
23
23
  let nameparts = name.split('.');
24
+
25
+ if (ext === '.css' && /^(rtl|ltr)$/.test(nameparts[nameparts.length - 1])) {
26
+ return {
27
+ name: nameparts.slice(0, nameparts.length - 2).join('.') + ext,
28
+ hashedName
29
+ };
30
+ }
31
+
24
32
  return {
25
33
  name: nameparts.slice(0, nameparts.length - 1).join('.') + ext,
26
34
  hashedName
@@ -3,88 +3,82 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "ModuleStatsPlugin", {
7
- enumerable: true,
8
- get: function () {
9
- return _ModuleStatsPlugin.default;
10
- }
11
- });
12
- Object.defineProperty(exports, "SourceMapHookPlugin", {
6
+ Object.defineProperty(exports, "CdnChangePlugin", {
13
7
  enumerable: true,
14
8
  get: function () {
15
- return _SourceMapHookPlugin.default;
9
+ return _CdnChangePlugin.default;
16
10
  }
17
11
  });
18
- Object.defineProperty(exports, "UnusedFilesFindPlugin", {
12
+ Object.defineProperty(exports, "CleanUpStatsPlugin", {
19
13
  enumerable: true,
20
14
  get: function () {
21
- return _UnusedFilesFindPlugin.default;
15
+ return _CleanupStatsPlugin.default;
22
16
  }
23
17
  });
24
- Object.defineProperty(exports, "ScriptInstrumentPlugin", {
18
+ Object.defineProperty(exports, "EFCPlugin", {
25
19
  enumerable: true,
26
20
  get: function () {
27
- return _ScriptInstrumentPlugin.default;
21
+ return _EFCPlugin.default;
28
22
  }
29
23
  });
30
- Object.defineProperty(exports, "PublicPathChangePlugin", {
24
+ Object.defineProperty(exports, "I18NInjectIntoIndexPlugin", {
31
25
  enumerable: true,
32
26
  get: function () {
33
- return _PublicPathChangePlugin.default;
27
+ return _I18NInjectIntoIndexPlugin.default;
34
28
  }
35
29
  });
36
- Object.defineProperty(exports, "OptimizeJSPlugin", {
30
+ Object.defineProperty(exports, "ManifestPlugin", {
37
31
  enumerable: true,
38
32
  get: function () {
39
- return _OptimizeJSPlugin.default;
33
+ return _ManifestPlugin.default;
40
34
  }
41
35
  });
42
- Object.defineProperty(exports, "ResourceHintsPlugin", {
36
+ Object.defineProperty(exports, "ModuleStatsPlugin", {
43
37
  enumerable: true,
44
38
  get: function () {
45
- return _ResourceHintsPlugin.default;
39
+ return _ModuleStatsPlugin.default;
46
40
  }
47
41
  });
48
- Object.defineProperty(exports, "UglifyCSSPlugin", {
42
+ Object.defineProperty(exports, "OptimizeJSPlugin", {
49
43
  enumerable: true,
50
44
  get: function () {
51
- return _UglifyCSSPlugin.default;
45
+ return _OptimizeJSPlugin.default;
52
46
  }
53
47
  });
54
- Object.defineProperty(exports, "ManifestPlugin", {
48
+ Object.defineProperty(exports, "PublicPathCallbackPlugin", {
55
49
  enumerable: true,
56
50
  get: function () {
57
- return _ManifestPlugin.default;
51
+ return _PublicPathCallbackPlugin.default;
58
52
  }
59
53
  });
60
- Object.defineProperty(exports, "CleanUpStatsPlugin", {
54
+ Object.defineProperty(exports, "PublicPathChangePlugin", {
61
55
  enumerable: true,
62
56
  get: function () {
63
- return _CleanupStatsPlugin.default;
57
+ return _PublicPathChangePlugin.default;
64
58
  }
65
59
  });
66
- Object.defineProperty(exports, "EFCPlugin", {
60
+ Object.defineProperty(exports, "ReportGeneratePlugin", {
67
61
  enumerable: true,
68
62
  get: function () {
69
- return _EFCPlugin.default;
63
+ return _ReportGeneratePlugin.default;
70
64
  }
71
65
  });
72
- Object.defineProperty(exports, "PublicPathCallbackPlugin", {
66
+ Object.defineProperty(exports, "ResourceHintsPlugin", {
73
67
  enumerable: true,
74
68
  get: function () {
75
- return _PublicPathCallbackPlugin.default;
69
+ return _ResourceHintsPlugin.default;
76
70
  }
77
71
  });
78
- Object.defineProperty(exports, "I18NInjectIntoIndexPlugin", {
72
+ Object.defineProperty(exports, "ScriptInstrumentPlugin", {
79
73
  enumerable: true,
80
74
  get: function () {
81
- return _I18NInjectIntoIndexPlugin.default;
75
+ return _ScriptInstrumentPlugin.default;
82
76
  }
83
77
  });
84
- Object.defineProperty(exports, "ReportGeneratePlugin", {
78
+ Object.defineProperty(exports, "ServiceWorkerPlugin", {
85
79
  enumerable: true,
86
80
  get: function () {
87
- return _ReportGeneratePlugin.default;
81
+ return _ServiceWorkerPlugin.default;
88
82
  }
89
83
  });
90
84
  Object.defineProperty(exports, "ShadowDOMSupportPlugin", {
@@ -93,10 +87,10 @@ Object.defineProperty(exports, "ShadowDOMSupportPlugin", {
93
87
  return _ShadowDOMSupportPlugin.default;
94
88
  }
95
89
  });
96
- Object.defineProperty(exports, "ServiceWorkerPlugin", {
90
+ Object.defineProperty(exports, "SourceMapHookPlugin", {
97
91
  enumerable: true,
98
92
  get: function () {
99
- return _ServiceWorkerPlugin.default;
93
+ return _SourceMapHookPlugin.default;
100
94
  }
101
95
  });
102
96
  Object.defineProperty(exports, "TPHashMappingPlugin", {
@@ -105,10 +99,16 @@ Object.defineProperty(exports, "TPHashMappingPlugin", {
105
99
  return _TPHashMappingPlugin.default;
106
100
  }
107
101
  });
108
- Object.defineProperty(exports, "CdnChangePlugin", {
102
+ Object.defineProperty(exports, "UglifyCSSPlugin", {
109
103
  enumerable: true,
110
104
  get: function () {
111
- return _CdnChangePlugin.default;
105
+ return _UglifyCSSPlugin.default;
106
+ }
107
+ });
108
+ Object.defineProperty(exports, "UnusedFilesFindPlugin", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _UnusedFilesFindPlugin.default;
112
112
  }
113
113
  });
114
114
 
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.separateSingleDir = separateSingleDir;
7
6
  exports.separateRtlAndLtr = separateRtlAndLtr;
7
+ exports.separateSingleDir = separateSingleDir;
8
8
 
9
9
  var postcss = _interopRequireWildcard(require("postcss"));
10
10
 
@@ -18,6 +18,12 @@ var _default = {
18
18
  value: null,
19
19
  cli: 'ssl_cert_url'
20
20
  },
21
+ preprocessor: {
22
+ runner: {
23
+ value: '',
24
+ cli: 'preprocessor'
25
+ }
26
+ },
21
27
  i18n: {
22
28
  chunkSplitEnable: {
23
29
  value: false,
@@ -42,11 +48,14 @@ var _default = {
42
48
  nameScope: 'ZOHODESK',
43
49
  version: 'default',
44
50
  outputFile: 'zohodesk-efc-sdk-[version].js',
51
+ templateFilePath: '',
45
52
  localeAttr: 'data-efc-locale',
46
53
  localeDefaultValue: 'en_US',
47
54
  localeStatement: null,
48
55
  cssDirAttr: 'data-efc-dir',
49
56
  cssDirDefaultValue: 'ltr',
57
+ cdnStatement: '',
58
+ // cdnStatement: "new URL(document.querySelector(\"script[src*='zohodesk-efc-sdk']\").src).origin",
50
59
  cssDirStatement: null
51
60
  },
52
61
  app: {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.endTag = exports.htmlTemplate = void 0;
6
+ exports.htmlTemplate = exports.endTag = void 0;
7
7
  const htmlTemplate = '<!DOCTYPE html><html> <head> <title>Eslint Security Rule</title> <style type="text/css"> body{margin: 0; font: 93.75%/1.6 -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif;}body, html{width: 100%; height: 100%;}.pkCont{}.pkEmpty{height: 300px;display: flex;align-items: center;justify-content: center;font-size: 20px;}.pkUl{margin: 0; padding: 0; list-style-type: none;}.pkLi{}.pkRow{display: flex; padding: 12px 16px;}.pkArrowCont{cursor: pointer; width: 50px; display: flex; align-items: center; justify-content: center; background-color: #f4f5f5; border-radius: 4px;}.pkArrow{width: 1px; height: 1px; border: 5px solid; border-color: #000 transparent transparent; margin-top: 7px;}.pkDetailsOpen .pkArrow{margin: 0 0 7px; border-color: transparent transparent #000;}.pkFileName{font-weight: 600; margin: 0 8px;}.pkUrl{flex: 1; min-width: 0; min-height: 0; word-break: break-word; word-wrap: break-word; color: blue;}.pkDetails{margin-left: 66px; display: none;}.pkDetailsOpen .pkDetails{display: block;}.pkDetailsHead{font-weight: 600; display: flex; border: 1px solid #e5e5e5; padding: 3px 8px;}.pkDetailsBody{max-height: 400px; overflow: auto;}.pkDetailsRow{display: flex; padding: 10px 8px;}.pkDetailsRow:nth-child(even){background-color: #f4f5f5;}.pkDetailsCol{word-break: break-word; word-wrap: break-word;}.pkError{color: red;}.pkDetailsCol:nth-child(1){width: 10%;}.pkDetailsCol:nth-child(2){width: 10%;}.pkDetailsCol:nth-child(3){width: 40%;}.pkDetailsCol:nth-child(4){width: 40%;}</style> <script>function toggleWrapper(element){var classArray=element.parentElement.parentElement.className; if (classArray.includes("pkDetailsOpen")){element.parentElement.parentElement.className="pkLi";}else{element.parentElement.parentElement.className="pkLi pkDetailsOpen";}}</script> </head> <body> <div class="pkCont">';
8
8
  exports.htmlTemplate = htmlTemplate;
9
9
  const endTag = '</div></body></html>';
@@ -40,6 +40,13 @@ var _default = (unique = true, {
40
40
  filenames,
41
41
  packages
42
42
  }, classNamePrefix) => (context, localIdentName, localName) => {
43
+ // NOTE: in build macine we use date as folder path.
44
+ // So every time we create new build there is path will alway different
45
+ // in order to minmaze that problem we try in relative path;
46
+ // console.log('context.resourcePath', context.resourcePath, context);
47
+ // let contextResourcePath = context.resourcePath;
48
+ let relativePath = _path.default.relative(context.rootContext, context.resourcePath);
49
+
43
50
  if (context.resourcePath.endsWith('.plain.css')) {
44
51
  return localName;
45
52
  }
@@ -47,7 +54,7 @@ var _default = (unique = true, {
47
54
 
48
55
 
49
56
  if (unique) {
50
- let h = (0, _getHash.default)(context.resourcePath + localName, 10);
57
+ let h = (0, _getHash.default)(`${relativePath}-${localName}`, 10);
51
58
  return `${classNamePrefix}${h}`;
52
59
  }
53
60
  /* old production mode end*/
@@ -60,7 +67,7 @@ var _default = (unique = true, {
60
67
  //let local = localName.toLowerCase()
61
68
 
62
69
  if (isSelectorPackage(context.resourcePath, packages) || filenames.indexOf(cleanFileName) !== -1) {
63
- let h = (0, _getHash.default)(context.resourcePath + localName, 10);
70
+ let h = (0, _getHash.default)(`${relativePath}-${localName}`, 10);
64
71
  return `${classNamePrefix}${h}`;
65
72
  }
66
73
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.cssUrlReplacer = exports.getUrls = exports.getFileType = void 0;
6
+ exports.getUrls = exports.getFileType = exports.cssUrlReplacer = void 0;
7
7
 
8
8
  var _fs = _interopRequireDefault(require("fs"));
9
9
 
@@ -22,7 +22,7 @@ var _default = (type = 'git', cwd = process.cwd()) => {
22
22
  });
23
23
  }
24
24
 
25
- let [currentBranch] = results.output.filter(d => d);
25
+ let [currentBranch] = results && results.output ? results.output.filter(d => d) : [''];
26
26
  return currentBranch.replace(/(\r\n|\n|\r)/gm, '');
27
27
  };
28
28
 
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ var _child_process = require("child_process");
9
+
8
10
  var _fs = _interopRequireDefault(require("fs"));
9
11
 
10
12
  var _path = _interopRequireDefault(require("path"));
@@ -13,6 +15,9 @@ var _schemas = _interopRequireDefault(require("../schemas"));
13
15
 
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
17
 
18
+ // import { argv } from 'process';
19
+ let args = process.argv.slice(2); // console.log('argv', argv);
20
+
16
21
  const NPM_CONFIG_PREFIX = 'npm_config_'; // TODO: we have to do option parse logic little better
17
22
  // if user use react-cli stritly without using npm scripts options won't work,
18
23
  // So we have to write our own option parse logic or some other library
@@ -37,6 +42,51 @@ keysWithColon.forEach(key => {
37
42
  processEnv[nkey] = processEnv[key];
38
43
  });
39
44
 
45
+ function getNpmVersion() {
46
+ // require("child_process").
47
+ let vers = '6';
48
+
49
+ try {
50
+ [vers] = (0, _child_process.execSync)('npm -v').toString().trim().split('.');
51
+ } catch (error) {
52
+ console.log(error);
53
+ }
54
+
55
+ return vers;
56
+ }
57
+
58
+ function getCWD() {
59
+ // require("child_process").
60
+ let cwd = process.cwd();
61
+
62
+ try {
63
+ let ress = (0, _child_process.execSync)('npm bin').toString();
64
+ let i = ress.lastIndexOf('node_modules');
65
+ cwd = i === -1 ? cwd : ress.slice(0, ress.lastIndexOf('node_modules'));
66
+ } catch (error) {
67
+ console.log(error);
68
+ }
69
+
70
+ return cwd;
71
+ }
72
+
73
+ args.forEach(option => {
74
+ if (/^--./.test(option)) {
75
+ let equIndex = option.indexOf('='); // equIndex = equIndex === -1 ? option.length : equIndex;
76
+
77
+ let key = option.slice(2, equIndex);
78
+ let value = option.slice(equIndex + 1);
79
+
80
+ if (equIndex === -1) {
81
+ key = option.slice(2);
82
+ value = true;
83
+ }
84
+
85
+ key = key.replace(/-/g, '_').replace(/:/g, '_');
86
+ processEnv[key] = value;
87
+ }
88
+ });
89
+
40
90
  let defaulter = (target, source) => {
41
91
  let defaultObject = {};
42
92
  Object.keys(target).forEach(key => {
@@ -88,6 +138,8 @@ let getOptions = () => {
88
138
  }
89
139
 
90
140
  let options = defaulter(_schemas.default, userSchemas || {});
141
+ options.npmVersion = getNpmVersion();
142
+ options.cwd = getCWD();
91
143
  options.packageVersion = process.env.npm_package_version;
92
144
  global.reactCLIOptions = options;
93
145
  return options;