@tramvai/cli 2.33.3 → 2.34.0

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.
@@ -15,6 +15,7 @@ export { lessWebpackRulesFactory } from '../library/webpack/blocks/less';
15
15
  export { postcssAssetsWebpackRulesFactory } from '../library/webpack/blocks/postcssAssets';
16
16
  export { extractCssPluginFactory } from '../library/webpack/blocks/extractCssPlugin';
17
17
  export { configToEnv } from '../library/webpack/blocks/configToEnv';
18
+ export * from '../typings/public';
18
19
  export declare const start: StartCommand;
19
20
  export declare const build: BuildCommand;
20
21
  export declare const benchmark: BenchmarkCommand;
package/lib/api/index.js CHANGED
@@ -28,6 +28,7 @@ var extractCssPlugin_1 = require("../library/webpack/blocks/extractCssPlugin");
28
28
  Object.defineProperty(exports, "extractCssPluginFactory", { enumerable: true, get: function () { return extractCssPlugin_1.extractCssPluginFactory; } });
29
29
  var configToEnv_1 = require("../library/webpack/blocks/configToEnv");
30
30
  Object.defineProperty(exports, "configToEnv", { enumerable: true, get: function () { return configToEnv_1.configToEnv; } });
31
+ tslib_1.__exportStar(require("../typings/public"), exports);
31
32
  const app = (0, createApp_1.createApp)({
32
33
  commands: {
33
34
  start: () => Promise.resolve().then(() => tslib_1.__importStar(require('./start'))),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -4,15 +4,19 @@ exports.filesClientWebackRulesFactory = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const path_1 = tslib_1.__importDefault(require("path"));
6
6
  const spark_md5_1 = tslib_1.__importDefault(require("spark-md5"));
7
+ const files_1 = require("../utils/files");
7
8
  const filesClientWebackRulesFactory = (configManager) => (config) => {
8
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
9
+ var _a, _b, _c, _d, _e, _f;
10
+ const svgoOptions = (0, files_1.getSvgoOptions)(configManager);
9
11
  config.module
10
12
  .rule('woff')
11
13
  .test(/\.woff2?$/)
12
14
  .set('type', 'asset');
15
+ (0, files_1.addSvgrLoader)(configManager, config, svgoOptions);
13
16
  config.module
14
17
  .rule('svg')
15
18
  .test(/\.svg$/)
19
+ .set('resourceQuery', { not: /react/ })
16
20
  .set('type', 'asset/resource')
17
21
  .set('generator', {
18
22
  filename: (pathInfo) => {
@@ -23,16 +27,7 @@ const filesClientWebackRulesFactory = (configManager) => (config) => {
23
27
  })
24
28
  .use('svg')
25
29
  .loader('svgo-loader')
26
- .options({
27
- plugins: (_d = (_c = (_b = (_a = configManager.build) === null || _a === void 0 ? void 0 : _a.configurations) === null || _b === void 0 ? void 0 : _b.svgo) === null || _c === void 0 ? void 0 : _c.plugins) !== null && _d !== void 0 ? _d : [
28
- {
29
- cleanupIDs: false,
30
- },
31
- {
32
- collapseGroups: false,
33
- },
34
- ],
35
- });
30
+ .options(svgoOptions);
36
31
  config.module
37
32
  .rule('tramvai-image')
38
33
  .test(/\.(png|jpe?g|gif|webp)$/)
@@ -43,13 +38,13 @@ const filesClientWebackRulesFactory = (configManager) => (config) => {
43
38
  .rule('video')
44
39
  .test(/\.(mp4|webm|avif)$/)
45
40
  .set('type', 'asset/resource');
46
- if ((_g = (_f = (_e = configManager.build) === null || _e === void 0 ? void 0 : _e.configurations) === null || _f === void 0 ? void 0 : _f.imageOptimization) === null || _g === void 0 ? void 0 : _g.enabled) {
41
+ if ((_c = (_b = (_a = configManager.build) === null || _a === void 0 ? void 0 : _a.configurations) === null || _b === void 0 ? void 0 : _b.imageOptimization) === null || _c === void 0 ? void 0 : _c.enabled) {
47
42
  config.module
48
43
  .rule('image-optimization')
49
44
  .test(/\.(gif|png|jpe?g|svg)$/)
50
45
  .use('image')
51
46
  .loader('image-webpack-loader')
52
- .options(Object.assign({}, (_k = (_j = (_h = configManager.build) === null || _h === void 0 ? void 0 : _h.configurations) === null || _j === void 0 ? void 0 : _j.imageOptimization) === null || _k === void 0 ? void 0 : _k.options))
47
+ .options(Object.assign({}, (_f = (_e = (_d = configManager.build) === null || _d === void 0 ? void 0 : _d.configurations) === null || _e === void 0 ? void 0 : _e.imageOptimization) === null || _f === void 0 ? void 0 : _f.options))
53
48
  .end()
54
49
  .enforce('pre');
55
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filesClient.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/filesClient.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AAExB,kEAAiC;AAG1B,MAAM,6BAA6B,GAAG,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;;IAChG,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,MAAM,CAAC;SACZ,IAAI,CAAC,WAAW,CAAC;SACjB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExB,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,KAAK,CAAC;SACX,IAAI,CAAC,QAAQ,CAAC;SACd,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAC7B,GAAG,CAAC,WAAW,EAAE;QAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;YACrB,6DAA6D;YAC7D,sFAAsF;YACtF,OAAO,GAAG,mBAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QACtF,CAAC;KACF,CAAC;SACD,GAAG,CAAC,KAAK,CAAC;SACV,MAAM,CAAC,aAAa,CAAC;SACrB,OAAO,CAAC;QACP,OAAO,EAAE,MAAA,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,IAAI,0CAAE,OAAO,mCAAI;YAC7D;gBACE,UAAU,EAAE,KAAK;aAClB;YACD;gBACE,cAAc,EAAE,KAAK;aACtB;SACF;KACF,CAAC,CAAC;IAEL,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,eAAe,CAAC;SACrB,IAAI,CAAC,yBAAyB,CAAC;SAC/B,GAAG,CAAC,MAAM,CAAC;SACX,MAAM,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;SAC1D,GAAG,EAAE,CAAC;IAET,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,OAAO,CAAC;SACb,IAAI,CAAC,oBAAoB,CAAC;SAC1B,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAEjC,IAAI,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAE;QACnE,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,oBAAoB,CAAC;aAC1B,IAAI,CAAC,wBAAwB,CAAC;aAC9B,GAAG,CAAC,OAAO,CAAC;aACZ,MAAM,CAAC,sBAAsB,CAAC;aAC9B,OAAO,mBAAM,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAG;aAC/E,GAAG,EAAE;aACL,OAAO,CAAC,KAAK,CAAC,CAAC;KACnB;AACH,CAAC,CAAC;AApDW,QAAA,6BAA6B,iCAoDxC;AAEF,kBAAe,qCAA6B,CAAC"}
1
+ {"version":3,"file":"filesClient.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/filesClient.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AAExB,kEAAiC;AAEjC,0CAA+D;AAExD,MAAM,6BAA6B,GAAG,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;;IAChG,MAAM,WAAW,GAAG,IAAA,sBAAc,EAAC,aAAa,CAAC,CAAC;IAElD,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,MAAM,CAAC;SACZ,IAAI,CAAC,WAAW,CAAC;SACjB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExB,IAAA,qBAAa,EAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,KAAK,CAAC;SACX,IAAI,CAAC,QAAQ,CAAC;SACd,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACtC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAC7B,GAAG,CAAC,WAAW,EAAE;QAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;YACrB,6DAA6D;YAC7D,sFAAsF;YACtF,OAAO,GAAG,mBAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QACtF,CAAC;KACF,CAAC;SACD,GAAG,CAAC,KAAK,CAAC;SACV,MAAM,CAAC,aAAa,CAAC;SACrB,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,eAAe,CAAC;SACrB,IAAI,CAAC,yBAAyB,CAAC;SAC/B,GAAG,CAAC,MAAM,CAAC;SACX,MAAM,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;SAC1D,GAAG,EAAE,CAAC;IAET,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,OAAO,CAAC;SACb,IAAI,CAAC,oBAAoB,CAAC;SAC1B,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAEjC,IAAI,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAE;QACnE,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,oBAAoB,CAAC;aAC1B,IAAI,CAAC,wBAAwB,CAAC;aAC9B,GAAG,CAAC,OAAO,CAAC;aACZ,MAAM,CAAC,sBAAsB,CAAC;aAC9B,OAAO,mBAAM,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAG;aAC/E,GAAG,EAAE;aACL,OAAO,CAAC,KAAK,CAAC,CAAC;KACnB;AACH,CAAC,CAAC;AAhDW,QAAA,6BAA6B,iCAgDxC;AAEF,kBAAe,qCAA6B,CAAC"}
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const path_1 = tslib_1.__importDefault(require("path"));
5
+ const files_1 = require("../utils/files");
5
6
  exports.default = (configManager) => (config) => {
6
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
7
+ var _a, _b, _c, _d, _e, _f;
8
+ const svgoOptions = (0, files_1.getSvgoOptions)(configManager);
7
9
  config.module
8
10
  .rule('woff')
9
11
  .test(/\.woff2?$/)
@@ -11,22 +13,15 @@ exports.default = (configManager) => (config) => {
11
13
  .set('generator', {
12
14
  emit: false,
13
15
  });
16
+ (0, files_1.addSvgrLoader)(configManager, config, svgoOptions);
14
17
  config.module
15
18
  .rule('svg')
16
19
  .test(/\.svg$/)
20
+ .set('resourceQuery', { not: /react/ })
17
21
  .set('type', 'asset/source')
18
22
  .use('svg')
19
23
  .loader('svgo-loader')
20
- .options({
21
- plugins: (_d = (_c = (_b = (_a = configManager.build) === null || _a === void 0 ? void 0 : _a.configurations) === null || _b === void 0 ? void 0 : _b.svgo) === null || _c === void 0 ? void 0 : _c.plugins) !== null && _d !== void 0 ? _d : [
22
- {
23
- cleanupIDs: false,
24
- },
25
- {
26
- collapseGroups: false,
27
- },
28
- ],
29
- });
24
+ .options(svgoOptions);
30
25
  config.module
31
26
  .rule('tramvai-image')
32
27
  .test(/\.(png|jpe?g|gif|webp)$/)
@@ -43,13 +38,13 @@ exports.default = (configManager) => (config) => {
43
38
  .set('generator', {
44
39
  emit: false,
45
40
  });
46
- if ((_g = (_f = (_e = configManager.build) === null || _e === void 0 ? void 0 : _e.configurations) === null || _f === void 0 ? void 0 : _f.imageOptimization) === null || _g === void 0 ? void 0 : _g.enabled) {
41
+ if ((_c = (_b = (_a = configManager.build) === null || _a === void 0 ? void 0 : _a.configurations) === null || _b === void 0 ? void 0 : _b.imageOptimization) === null || _c === void 0 ? void 0 : _c.enabled) {
47
42
  config.module
48
43
  .rule('image-optimization')
49
44
  .test(/\.(gif|png|jpe?g|svg)$/)
50
45
  .use('image')
51
46
  .loader('image-webpack-loader')
52
- .options(Object.assign({}, (_k = (_j = (_h = configManager.build) === null || _h === void 0 ? void 0 : _h.configurations) === null || _j === void 0 ? void 0 : _j.imageOptimization) === null || _k === void 0 ? void 0 : _k.options))
47
+ .options(Object.assign({}, (_f = (_e = (_d = configManager.build) === null || _d === void 0 ? void 0 : _d.configurations) === null || _e === void 0 ? void 0 : _e.imageOptimization) === null || _f === void 0 ? void 0 : _f.options))
53
48
  .end()
54
49
  .enforce('pre');
55
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filesServer.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/filesServer.ts"],"names":[],"mappings":";;;AAAA,wDAAwB;AAIxB,kBAAe,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;;IAClE,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,MAAM,CAAC;SACZ,IAAI,CAAC,WAAW,CAAC;SACjB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;SACpB,GAAG,CAAC,WAAW,EAAE;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEL,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,KAAK,CAAC;SACX,IAAI,CAAC,QAAQ,CAAC;SACd,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;SAC3B,GAAG,CAAC,KAAK,CAAC;SACV,MAAM,CAAC,aAAa,CAAC;SACrB,OAAO,CAAC;QACP,OAAO,EAAE,MAAA,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,IAAI,0CAAE,OAAO,mCAAI;YAC7D;gBACE,UAAU,EAAE,KAAK;aAClB;YACD;gBACE,cAAc,EAAE,KAAK;aACtB;SACF;KACF,CAAC,CAAC;IAEL,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,eAAe,CAAC;SACrB,IAAI,CAAC,yBAAyB,CAAC;SAC/B,GAAG,CAAC,MAAM,CAAC;SACX,MAAM,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;SAC1D,OAAO,CAAC;QACP,QAAQ,EAAE,KAAK;KAChB,CAAC;SACD,GAAG,EAAE,CAAC;IAET,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,OAAO,CAAC;SACb,IAAI,CAAC,oBAAoB,CAAC;SAC1B,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAC7B,GAAG,CAAC,WAAW,EAAE;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEL,IAAI,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAE;QACnE,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,oBAAoB,CAAC;aAC1B,IAAI,CAAC,wBAAwB,CAAC;aAC9B,GAAG,CAAC,OAAO,CAAC;aACZ,MAAM,CAAC,sBAAsB,CAAC;aAC9B,OAAO,mBAAM,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAG;aAC/E,GAAG,EAAE;aACL,OAAO,CAAC,KAAK,CAAC,CAAC;KACnB;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"filesServer.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/filesServer.ts"],"names":[],"mappings":";;;AAAA,wDAAwB;AAGxB,0CAA+D;AAE/D,kBAAe,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;;IAClE,MAAM,WAAW,GAAG,IAAA,sBAAc,EAAC,aAAa,CAAC,CAAC;IAElD,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,MAAM,CAAC;SACZ,IAAI,CAAC,WAAW,CAAC;SACjB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;SACpB,GAAG,CAAC,WAAW,EAAE;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEL,IAAA,qBAAa,EAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,KAAK,CAAC;SACX,IAAI,CAAC,QAAQ,CAAC;SACd,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACtC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;SAC3B,GAAG,CAAC,KAAK,CAAC;SACV,MAAM,CAAC,aAAa,CAAC;SACrB,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,eAAe,CAAC;SACrB,IAAI,CAAC,yBAAyB,CAAC;SAC/B,GAAG,CAAC,MAAM,CAAC;SACX,MAAM,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;SAC1D,OAAO,CAAC;QACP,QAAQ,EAAE,KAAK;KAChB,CAAC;SACD,GAAG,EAAE,CAAC;IAET,MAAM,CAAC,MAAM;SACV,IAAI,CAAC,OAAO,CAAC;SACb,IAAI,CAAC,oBAAoB,CAAC;SAC1B,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAC7B,GAAG,CAAC,WAAW,EAAE;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEL,IAAI,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAE;QACnE,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,oBAAoB,CAAC;aAC1B,IAAI,CAAC,wBAAwB,CAAC;aAC9B,GAAG,CAAC,OAAO,CAAC;aACZ,MAAM,CAAC,sBAAsB,CAAC;aAC9B,OAAO,mBAAM,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,iBAAiB,0CAAE,OAAO,EAAG;aAC/E,GAAG,EAAE;aACL,OAAO,CAAC,KAAK,CAAC,CAAC;KACnB;AACH,CAAC,CAAC"}
@@ -1,30 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
3
  const is_modern_lib_1 = require("@tinkoff/is-modern-lib");
5
- const babel_1 = tslib_1.__importDefault(require("../../babel"));
6
- const swc_1 = require("../../swc");
7
4
  const workersPool_1 = require("../utils/workersPool");
5
+ const transpiler_1 = require("../utils/transpiler");
8
6
  // eslint-disable-next-line import/no-default-export
9
7
  exports.default = (configManager) => (config) => {
10
- const { generateDataQaTag, alias, removeTypeofWindow, enableFillActionNamePlugin, transpileOnlyModernLibs, } = configManager.build.configurations;
11
- const { env, modern } = configManager;
12
- const commonBabelConfig = {
13
- isServer: configManager.buildType === 'server',
14
- env,
15
- generateDataQaTag,
16
- modern,
17
- alias,
18
- tramvai: true,
19
- hot: configManager.hotRefresh,
20
- excludesPresetEnv: configManager.build.configurations.excludesPresetEnv,
21
- removeTypeofWindow,
22
- enableFillActionNamePlugin,
23
- rootDir: configManager.rootDir,
24
- target: configManager.target,
25
- };
8
+ const transpilerConfig = (0, transpiler_1.getTranspilerConfig)(configManager);
9
+ const { transpileOnlyModernLibs } = configManager.build.configurations;
26
10
  const jsRule = (babelCfg) => (rule) => {
27
- const { loader } = configManager.experiments.transpilation;
28
11
  const cfg = rule
29
12
  .test(/\.[cm]?js[x]?$/)
30
13
  .oneOf('default')
@@ -35,24 +18,19 @@ exports.default = (configManager) => (config) => {
35
18
  .options((0, workersPool_1.createWorkerPoolBabel)(configManager))
36
19
  .end())
37
20
  .use('babel');
38
- if (loader === 'swc') {
39
- return cfg.loader('swc-loader').options((0, swc_1.getSwcOptions)(babelCfg)).end();
40
- }
41
- if (loader === 'babel') {
42
- return cfg.loader('babel-loader').options((0, babel_1.default)(babelCfg)).end();
43
- }
21
+ return (0, transpiler_1.addTranspilerLoader)(configManager, cfg, babelCfg);
44
22
  };
45
23
  if (transpileOnlyModernLibs) {
46
24
  config.module
47
25
  .rule('js:project')
48
26
  .exclude.add(/node_modules/)
49
27
  .end()
50
- .batch(jsRule(commonBabelConfig));
28
+ .batch(jsRule(transpilerConfig));
51
29
  config.module
52
30
  .rule('js:node_modules')
53
31
  .include.add(is_modern_lib_1.modernLibsFilter)
54
32
  .end()
55
- .batch(jsRule(Object.assign(Object.assign({}, commonBabelConfig), { hot: false })))
33
+ .batch(jsRule(Object.assign(Object.assign({}, transpilerConfig), { hot: false })))
56
34
  .merge({
57
35
  // TODO: некоторые пакеты неправильно описывают импорты для es модулей
58
36
  // https://github.com/babel/babel/issues/12058
@@ -64,12 +42,12 @@ exports.default = (configManager) => (config) => {
64
42
  .rule('js:project')
65
43
  .exclude.add(/node_modules/)
66
44
  .end()
67
- .batch(jsRule(commonBabelConfig));
45
+ .batch(jsRule(transpilerConfig));
68
46
  config.module
69
47
  .rule('js:node_modules')
70
48
  .include.add(/node_modules/)
71
49
  .end()
72
- .batch(jsRule(Object.assign(Object.assign({}, commonBabelConfig), { hot: false })))
50
+ .batch(jsRule(Object.assign(Object.assign({}, transpilerConfig), { hot: false })))
73
51
  .merge({
74
52
  // TODO: некоторые пакеты неправильно описывают импорты для es модулей
75
53
  // https://github.com/babel/babel/issues/12058
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/js.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/js.ts"],"names":[],"mappings":";;AACA,0DAA0D;AAE1D,sDAA6D;AAE7D,oDAA+E;AAE/E,oDAAoD;AACpD,kBAAe,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;IAClE,MAAM,gBAAgB,GAAG,IAAA,gCAAmB,EAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,EAAE,uBAAuB,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;IAEvE,MAAM,MAAM,GAAG,CAAC,QAA2C,EAAE,EAAE,CAAC,CAAC,IAAiB,EAAE,EAAE;QACpF,MAAM,GAAG,GAAG,IAAI;aACb,IAAI,CAAC,gBAAgB,CAAC;aACtB,KAAK,CAAC,SAAS,CAAC;YACjB,6DAA6D;aAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAClE,GAAG;aACA,GAAG,CAAC,QAAQ,CAAC;aACb,MAAM,CAAC,eAAe,CAAC;aACvB,OAAO,CAAC,IAAA,mCAAqB,EAAC,aAAa,CAAC,CAAC;aAC7C,GAAG,EAAE,CACT;aACA,GAAG,CAAC,OAAO,CAAC,CAAC;QAEhB,OAAO,IAAA,gCAAmB,EAAC,aAAa,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,IAAI,uBAAuB,EAAE;QAC3B,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,YAAY,CAAC;aAClB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;aAC3B,GAAG,EAAE;aACL,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,iBAAiB,CAAC;aACvB,OAAO,CAAC,GAAG,CAAC,gCAAgB,CAAC;aAC7B,GAAG,EAAE;aACL,KAAK,CAAC,MAAM,iCAAM,gBAAgB,KAAE,GAAG,EAAE,KAAK,IAAG,CAAC;aAClD,KAAK,CAAC;YACL,sEAAsE;YACtE,8CAA8C;YAC9C,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;SACnC,CAAC,CAAC;KACN;SAAM;QACL,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,YAAY,CAAC;aAClB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;aAC3B,GAAG,EAAE;aACL,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM;aACV,IAAI,CAAC,iBAAiB,CAAC;aACvB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;aAC3B,GAAG,EAAE;aACL,KAAK,CAAC,MAAM,iCAAM,gBAAgB,KAAE,GAAG,EAAE,KAAK,IAAG,CAAC;aAClD,KAAK,CAAC;YACL,sEAAsE;YACtE,8CAA8C;YAC9C,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;SACnC,CAAC,CAAC;KACN;AACH,CAAC,CAAC"}
@@ -1,28 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const babel_1 = tslib_1.__importDefault(require("../../babel"));
5
3
  const workersPool_1 = require("../utils/workersPool");
6
- const swc_1 = require("../../swc");
4
+ const transpiler_1 = require("../utils/transpiler");
7
5
  exports.default = (configManager) => (config) => {
8
- const { generateDataQaTag, alias, removeTypeofWindow, enableFillActionNamePlugin } = configManager.build.configurations;
9
- const { loader } = configManager.experiments.transpilation;
10
- const { env, modern } = configManager;
11
- const loaderConfig = {
12
- isServer: configManager.buildType === 'server',
13
- env,
14
- generateDataQaTag,
15
- typescript: true,
16
- modern,
17
- alias,
18
- tramvai: true,
19
- removeTypeofWindow,
20
- hot: configManager.hotRefresh,
21
- excludesPresetEnv: configManager.build.configurations.excludesPresetEnv,
22
- enableFillActionNamePlugin,
23
- rootDir: configManager.rootDir,
24
- target: configManager.target,
25
- };
6
+ const transpilerConfig = Object.assign(Object.assign({}, (0, transpiler_1.getTranspilerConfig)(configManager)), { typescript: true });
26
7
  const cfg = config.module
27
8
  .rule('ts:project')
28
9
  .test(/\.ts[x]?$/)
@@ -32,11 +13,6 @@ exports.default = (configManager) => (config) => {
32
13
  // TODO разобраться почему на винде все плохо с thread-loader
33
14
  .when(process.platform !== 'win32', (cfg) => cfg.use('thread').loader('thread-loader').options((0, workersPool_1.createWorkerPoolBabel)(configManager)).end())
34
15
  .use('babel');
35
- if (loader === 'swc') {
36
- return cfg.loader('swc-loader').options((0, swc_1.getSwcOptions)(loaderConfig)).end();
37
- }
38
- if (loader === 'babel') {
39
- return cfg.loader('babel-loader').options((0, babel_1.default)(loaderConfig)).end();
40
- }
16
+ return (0, transpiler_1.addTranspilerLoader)(configManager, cfg, transpilerConfig);
41
17
  };
42
18
  //# sourceMappingURL=ts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/ts.ts"],"names":[],"mappings":";;;AACA,gEAAsC;AACtC,sDAA6D;AAE7D,mCAA0C;AAE1C,kBAAe,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;IAClE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,GAChF,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC;IAC3D,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;IACtC,MAAM,YAAY,GAAG;QACnB,QAAQ,EAAE,aAAa,CAAC,SAAS,KAAK,QAAQ;QAC9C,GAAG;QACH,iBAAiB;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM;QACN,KAAK;QACL,OAAO,EAAE,IAAI;QACb,kBAAkB;QAClB,GAAG,EAAE,aAAa,CAAC,UAAU;QAC7B,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB;QACvE,0BAA0B;QAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,MAAM,EAAE,aAAa,CAAC,MAAM;KAC7B,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM;SACtB,IAAI,CAAC,YAAY,CAAC;SAClB,IAAI,CAAC,WAAW,CAAC;SACjB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;SAC3B,GAAG,EAAE;SACL,KAAK,CAAC,SAAS,CAAC;QACjB,6DAA6D;SAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAC1C,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAA,mCAAqB,EAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAC9F;SACA,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhB,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAA,mBAAa,EAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KAC5E;IAED,IAAI,MAAM,KAAK,OAAO,EAAE;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAA,eAAW,EAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KAC5E;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../../../src/library/webpack/blocks/ts.ts"],"names":[],"mappings":";;AACA,sDAA6D;AAE7D,oDAA+E;AAE/E,kBAAe,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;IAClE,MAAM,gBAAgB,mCAAQ,IAAA,gCAAmB,EAAC,aAAa,CAAC,KAAE,UAAU,EAAE,IAAI,GAAE,CAAC;IAErF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM;SACtB,IAAI,CAAC,YAAY,CAAC;SAClB,IAAI,CAAC,WAAW,CAAC;SACjB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;SAC3B,GAAG,EAAE;SACL,KAAK,CAAC,SAAS,CAAC;QACjB,6DAA6D;SAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAC1C,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAA,mCAAqB,EAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAC9F;SACA,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhB,OAAO,IAAA,gCAAmB,EAAC,aAAa,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACnE,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type Config from 'webpack-chain';
2
+ import type { ConfigManager } from '../../../config/configManager';
3
+ export declare const addSvgrLoader: (configManager: ConfigManager, config: Config, svgoOptions: Record<string, any>) => void;
4
+ export declare const getSvgoOptions: (configManager: ConfigManager) => {
5
+ plugins: Record<string, any>[];
6
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSvgoOptions = exports.addSvgrLoader = void 0;
4
+ const transpiler_1 = require("./transpiler");
5
+ const addSvgrLoader = (configManager, config, svgoOptions) => {
6
+ const transpilerConfig = (0, transpiler_1.getTranspilerConfig)(configManager);
7
+ // based on https://github.com/facebook/create-react-app/issues/11213#issuecomment-883466601
8
+ const svgrConfig = config.module
9
+ .rule('svgr')
10
+ .test(/\.svg$/)
11
+ // @todo: `issuer: /\.tsx?$/` нужен или нет?
12
+ .set('resourceQuery', /react/);
13
+ (0, transpiler_1.addTranspilerLoader)(configManager, svgrConfig.use('svgr-transpiler'), Object.assign(Object.assign({}, transpilerConfig), { typescript: true }));
14
+ svgrConfig.use('svgr').loader('@svgr/webpack').options({ babel: false, svgo: svgoOptions }).end();
15
+ };
16
+ exports.addSvgrLoader = addSvgrLoader;
17
+ const getSvgoOptions = (configManager) => {
18
+ var _a, _b, _c, _d;
19
+ return {
20
+ plugins: (_d = (_c = (_b = (_a = configManager.build) === null || _a === void 0 ? void 0 : _a.configurations) === null || _b === void 0 ? void 0 : _b.svgo) === null || _c === void 0 ? void 0 : _c.plugins) !== null && _d !== void 0 ? _d : [
21
+ {
22
+ cleanupIDs: false,
23
+ },
24
+ {
25
+ collapseGroups: false,
26
+ },
27
+ ],
28
+ };
29
+ };
30
+ exports.getSvgoOptions = getSvgoOptions;
31
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../../src/library/webpack/utils/files.ts"],"names":[],"mappings":";;;AAEA,6CAAwE;AAEjE,MAAM,aAAa,GAAG,CAC3B,aAA4B,EAC5B,MAAc,EACd,WAAgC,EAChC,EAAE;IACF,MAAM,gBAAgB,GAAG,IAAA,gCAAmB,EAAC,aAAa,CAAC,CAAC;IAC5D,4FAA4F;IAC5F,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;SAC7B,IAAI,CAAC,MAAM,CAAC;SACZ,IAAI,CAAC,QAAQ,CAAC;QACf,4CAA4C;SAC3C,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAEjC,IAAA,gCAAmB,EAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,kCAC/D,gBAAgB,KACnB,UAAU,EAAE,IAAI,IAChB,CAAC;IAEH,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AACpG,CAAC,CAAC;AAnBW,QAAA,aAAa,iBAmBxB;AAEK,MAAM,cAAc,GAAG,CAAC,aAA4B,EAAE,EAAE;;IAC7D,OAAO;QACL,OAAO,EAAE,MAAA,MAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,cAAc,0CAAE,IAAI,0CAAE,OAAO,mCAAI;YAC7D;gBACE,UAAU,EAAE,KAAK;aAClB;YACD;gBACE,cAAc,EAAE,KAAK;aACtB;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,cAAc,kBAWzB"}
@@ -0,0 +1,17 @@
1
+ import type Config from 'webpack-chain';
2
+ import type { ConfigManager } from '../../../config/configManager';
3
+ export declare const addTranspilerLoader: (configManager: ConfigManager, rule: Config.Use, transpilerConfig: Record<string, any>) => Config.Rule;
4
+ export declare const getTranspilerConfig: (configManager: ConfigManager) => {
5
+ isServer: boolean;
6
+ env: any;
7
+ generateDataQaTag: boolean;
8
+ modern: boolean;
9
+ alias: Record<string, any>;
10
+ tramvai: boolean;
11
+ removeTypeofWindow: boolean;
12
+ hot: boolean;
13
+ excludesPresetEnv: string[];
14
+ enableFillActionNamePlugin: boolean;
15
+ rootDir: string;
16
+ target: import("../../../typings/target").Target;
17
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTranspilerConfig = exports.addTranspilerLoader = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const swc_1 = require("../../swc");
6
+ const babel_1 = tslib_1.__importDefault(require("../../babel"));
7
+ const addTranspilerLoader = (configManager, rule, transpilerConfig) => {
8
+ const { loader } = configManager.experiments.transpilation;
9
+ if (loader === 'swc') {
10
+ return rule.loader('swc-loader').options((0, swc_1.getSwcOptions)(transpilerConfig)).end();
11
+ }
12
+ if (loader === 'babel') {
13
+ return rule.loader('babel-loader').options((0, babel_1.default)(transpilerConfig)).end();
14
+ }
15
+ };
16
+ exports.addTranspilerLoader = addTranspilerLoader;
17
+ const getTranspilerConfig = (configManager) => {
18
+ const { generateDataQaTag, alias, removeTypeofWindow, enableFillActionNamePlugin } = configManager.build.configurations;
19
+ const { env, modern } = configManager;
20
+ return {
21
+ isServer: configManager.buildType === 'server',
22
+ env,
23
+ generateDataQaTag,
24
+ modern,
25
+ alias,
26
+ tramvai: true,
27
+ removeTypeofWindow,
28
+ hot: configManager.hotRefresh,
29
+ excludesPresetEnv: configManager.build.configurations.excludesPresetEnv,
30
+ enableFillActionNamePlugin,
31
+ rootDir: configManager.rootDir,
32
+ target: configManager.target,
33
+ };
34
+ };
35
+ exports.getTranspilerConfig = getTranspilerConfig;
36
+ //# sourceMappingURL=transpiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../../../src/library/webpack/utils/transpiler.ts"],"names":[],"mappings":";;;;AAEA,mCAA0C;AAC1C,gEAAsC;AAE/B,MAAM,mBAAmB,GAAG,CACjC,aAA4B,EAC5B,IAAgB,EAChB,gBAAqC,EACrC,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC;IAE3D,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAA,mBAAa,EAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KACjF;IAED,IAAI,MAAM,KAAK,OAAO,EAAE;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAA,eAAW,EAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KACjF;AACH,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B;AAEK,MAAM,mBAAmB,GAAG,CAAC,aAA4B,EAAE,EAAE;IAClE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,GAChF,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;IAEtC,OAAO;QACL,QAAQ,EAAE,aAAa,CAAC,SAAS,KAAK,QAAQ;QAC9C,GAAG;QACH,iBAAiB;QACjB,MAAM;QACN,KAAK;QACL,OAAO,EAAE,IAAI;QACb,kBAAkB;QAClB,GAAG,EAAE,aAAa,CAAC,UAAU;QAC7B,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB;QACvE,0BAA0B;QAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,MAAM,EAAE,aAAa,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,mBAAmB,uBAmB9B"}
@@ -0,0 +1,7 @@
1
+ import type { ComponentType, SVGProps } from 'react';
2
+ export interface ImageObject {
3
+ src: string;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export declare type SvgComponent = ComponentType<SVGProps<SVGElement>>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/typings/public.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/cli",
3
- "version": "2.33.3",
3
+ "version": "2.34.0",
4
4
  "description": "Cli инструмент для сборки и запуска приложений",
5
5
  "files": [
6
6
  "src",
@@ -28,6 +28,7 @@
28
28
  "url": "git@github.com:Tinkoff/tramvai.git"
29
29
  },
30
30
  "main": "lib/api/index.js",
31
+ "typings": "lib/api/index.d.ts",
31
32
  "dependencies": {
32
33
  "@babel/cli": "^7.18.10",
33
34
  "@babel/core": "^7.18.10",
@@ -57,6 +58,7 @@
57
58
  "@fastify/static": "^6.5.0",
58
59
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
59
60
  "@sentry/node": "^6.2.5",
61
+ "@svgr/webpack": "^6.4.0",
60
62
  "@tinkoff/browserslist-config": "0.2.4",
61
63
  "@tinkoff/dippy": "0.8.8",
62
64
  "@tinkoff/is-modern-lib": "2.0.4",
@@ -67,7 +69,7 @@
67
69
  "@tinkoff/request-plugin-protocol-http": "^0.11.6",
68
70
  "@tinkoff/utils": "^2.1.3",
69
71
  "@tramvai/build": "3.0.6",
70
- "@tramvai/react": "2.33.3",
72
+ "@tramvai/react": "2.34.0",
71
73
  "@tramvai/tools-check-versions": "0.4.5",
72
74
  "@tramvai/tools-migrate": "0.6.6",
73
75
  "ajv": "^6.12.6",
package/src/api/index.ts CHANGED
@@ -26,6 +26,7 @@ export { lessWebpackRulesFactory } from '../library/webpack/blocks/less';
26
26
  export { postcssAssetsWebpackRulesFactory } from '../library/webpack/blocks/postcssAssets';
27
27
  export { extractCssPluginFactory } from '../library/webpack/blocks/extractCssPlugin';
28
28
  export { configToEnv } from '../library/webpack/blocks/configToEnv';
29
+ export * from '../typings/public';
29
30
 
30
31
  const app = createApp({
31
32
  commands: {
@@ -1,3 +1,5 @@
1
+ import type { ImageObject, SvgComponent } from '@tramvai/cli';
2
+
1
3
  declare module '*.css' {
2
4
  interface IClassNames {
3
5
  [className: string]: string;
@@ -5,3 +7,34 @@ declare module '*.css' {
5
7
  const classNames: IClassNames;
6
8
  export = classNames;
7
9
  }
10
+
11
+ declare module '*.woff2' {
12
+ export = string;
13
+ }
14
+
15
+ type ImageString = string;
16
+
17
+ declare module '*.png' {
18
+ export default ImageString;
19
+ export const image: ImageObject;
20
+ }
21
+ declare module '*.jpg' {
22
+ export default ImageString;
23
+ export const image: ImageObject;
24
+ }
25
+ declare module '*.jpeg' {
26
+ export default ImageString;
27
+ export const image: ImageObject;
28
+ }
29
+
30
+ declare module '*.svg' {
31
+ export = string;
32
+ }
33
+ declare module '*.svg?react' {
34
+ /**
35
+ * React component transformed with https://react-svgr.com/
36
+ */
37
+ const Svg: SvgComponent;
38
+
39
+ export = Svg;
40
+ }
@@ -2,16 +2,22 @@ import path from 'path';
2
2
  import type Config from 'webpack-chain';
3
3
  import SparkMD5 from 'spark-md5';
4
4
  import type { ConfigManager } from '../../../config/configManager';
5
+ import { addSvgrLoader, getSvgoOptions } from '../utils/files';
5
6
 
6
7
  export const filesClientWebackRulesFactory = (configManager: ConfigManager) => (config: Config) => {
8
+ const svgoOptions = getSvgoOptions(configManager);
9
+
7
10
  config.module
8
11
  .rule('woff')
9
12
  .test(/\.woff2?$/)
10
13
  .set('type', 'asset');
11
14
 
15
+ addSvgrLoader(configManager, config, svgoOptions);
16
+
12
17
  config.module
13
18
  .rule('svg')
14
19
  .test(/\.svg$/)
20
+ .set('resourceQuery', { not: /react/ })
15
21
  .set('type', 'asset/resource')
16
22
  .set('generator', {
17
23
  filename: (pathInfo) => {
@@ -22,16 +28,7 @@ export const filesClientWebackRulesFactory = (configManager: ConfigManager) => (
22
28
  })
23
29
  .use('svg')
24
30
  .loader('svgo-loader')
25
- .options({
26
- plugins: configManager.build?.configurations?.svgo?.plugins ?? [
27
- {
28
- cleanupIDs: false,
29
- },
30
- {
31
- collapseGroups: false,
32
- },
33
- ],
34
- });
31
+ .options(svgoOptions);
35
32
 
36
33
  config.module
37
34
  .rule('tramvai-image')
@@ -1,8 +1,11 @@
1
1
  import path from 'path';
2
2
  import type Config from 'webpack-chain';
3
3
  import type { ConfigManager } from '../../../config/configManager';
4
+ import { addSvgrLoader, getSvgoOptions } from '../utils/files';
4
5
 
5
6
  export default (configManager: ConfigManager) => (config: Config) => {
7
+ const svgoOptions = getSvgoOptions(configManager);
8
+
6
9
  config.module
7
10
  .rule('woff')
8
11
  .test(/\.woff2?$/)
@@ -11,22 +14,16 @@ export default (configManager: ConfigManager) => (config: Config) => {
11
14
  emit: false,
12
15
  });
13
16
 
17
+ addSvgrLoader(configManager, config, svgoOptions);
18
+
14
19
  config.module
15
20
  .rule('svg')
16
21
  .test(/\.svg$/)
22
+ .set('resourceQuery', { not: /react/ })
17
23
  .set('type', 'asset/source')
18
24
  .use('svg')
19
25
  .loader('svgo-loader')
20
- .options({
21
- plugins: configManager.build?.configurations?.svgo?.plugins ?? [
22
- {
23
- cleanupIDs: false,
24
- },
25
- {
26
- collapseGroups: false,
27
- },
28
- ],
29
- });
26
+ .options(svgoOptions);
30
27
 
31
28
  config.module
32
29
  .rule('tramvai-image')
@@ -1,38 +1,16 @@
1
1
  import type Config from 'webpack-chain';
2
2
  import { modernLibsFilter } from '@tinkoff/is-modern-lib';
3
- import babelConfig from '../../babel';
4
- import { getSwcOptions } from '../../swc';
3
+ import type babelConfig from '../../babel';
5
4
  import { createWorkerPoolBabel } from '../utils/workersPool';
6
5
  import type { ConfigManager } from '../../../config/configManager';
6
+ import { getTranspilerConfig, addTranspilerLoader } from '../utils/transpiler';
7
7
 
8
8
  // eslint-disable-next-line import/no-default-export
9
9
  export default (configManager: ConfigManager) => (config: Config) => {
10
- const {
11
- generateDataQaTag,
12
- alias,
13
- removeTypeofWindow,
14
- enableFillActionNamePlugin,
15
- transpileOnlyModernLibs,
16
- } = configManager.build.configurations;
17
- const { env, modern } = configManager;
18
- const commonBabelConfig = {
19
- isServer: configManager.buildType === 'server',
20
- env,
21
- generateDataQaTag,
22
- modern,
23
- alias,
24
- tramvai: true,
25
- hot: configManager.hotRefresh,
26
- excludesPresetEnv: configManager.build.configurations.excludesPresetEnv,
27
- removeTypeofWindow,
28
- enableFillActionNamePlugin,
29
- rootDir: configManager.rootDir,
30
- target: configManager.target,
31
- };
10
+ const transpilerConfig = getTranspilerConfig(configManager);
11
+ const { transpileOnlyModernLibs } = configManager.build.configurations;
32
12
 
33
13
  const jsRule = (babelCfg: Parameters<typeof babelConfig>[0]) => (rule: Config.Rule) => {
34
- const { loader } = configManager.experiments.transpilation;
35
-
36
14
  const cfg = rule
37
15
  .test(/\.[cm]?js[x]?$/)
38
16
  .oneOf('default')
@@ -46,13 +24,7 @@ export default (configManager: ConfigManager) => (config: Config) => {
46
24
  )
47
25
  .use('babel');
48
26
 
49
- if (loader === 'swc') {
50
- return cfg.loader('swc-loader').options(getSwcOptions(babelCfg)).end();
51
- }
52
-
53
- if (loader === 'babel') {
54
- return cfg.loader('babel-loader').options(babelConfig(babelCfg)).end();
55
- }
27
+ return addTranspilerLoader(configManager, cfg, babelCfg);
56
28
  };
57
29
 
58
30
  if (transpileOnlyModernLibs) {
@@ -60,13 +32,13 @@ export default (configManager: ConfigManager) => (config: Config) => {
60
32
  .rule('js:project')
61
33
  .exclude.add(/node_modules/)
62
34
  .end()
63
- .batch(jsRule(commonBabelConfig));
35
+ .batch(jsRule(transpilerConfig));
64
36
 
65
37
  config.module
66
38
  .rule('js:node_modules')
67
39
  .include.add(modernLibsFilter)
68
40
  .end()
69
- .batch(jsRule({ ...commonBabelConfig, hot: false }))
41
+ .batch(jsRule({ ...transpilerConfig, hot: false }))
70
42
  .merge({
71
43
  // TODO: некоторые пакеты неправильно описывают импорты для es модулей
72
44
  // https://github.com/babel/babel/issues/12058
@@ -77,13 +49,13 @@ export default (configManager: ConfigManager) => (config: Config) => {
77
49
  .rule('js:project')
78
50
  .exclude.add(/node_modules/)
79
51
  .end()
80
- .batch(jsRule(commonBabelConfig));
52
+ .batch(jsRule(transpilerConfig));
81
53
 
82
54
  config.module
83
55
  .rule('js:node_modules')
84
56
  .include.add(/node_modules/)
85
57
  .end()
86
- .batch(jsRule({ ...commonBabelConfig, hot: false }))
58
+ .batch(jsRule({ ...transpilerConfig, hot: false }))
87
59
  .merge({
88
60
  // TODO: некоторые пакеты неправильно описывают импорты для es модулей
89
61
  // https://github.com/babel/babel/issues/12058
@@ -1,29 +1,10 @@
1
1
  import type Config from 'webpack-chain';
2
- import babelConfig from '../../babel';
3
2
  import { createWorkerPoolBabel } from '../utils/workersPool';
4
3
  import type { ConfigManager } from '../../../config/configManager';
5
- import { getSwcOptions } from '../../swc';
4
+ import { addTranspilerLoader, getTranspilerConfig } from '../utils/transpiler';
6
5
 
7
6
  export default (configManager: ConfigManager) => (config: Config) => {
8
- const { generateDataQaTag, alias, removeTypeofWindow, enableFillActionNamePlugin } =
9
- configManager.build.configurations;
10
- const { loader } = configManager.experiments.transpilation;
11
- const { env, modern } = configManager;
12
- const loaderConfig = {
13
- isServer: configManager.buildType === 'server',
14
- env,
15
- generateDataQaTag,
16
- typescript: true,
17
- modern,
18
- alias,
19
- tramvai: true,
20
- removeTypeofWindow,
21
- hot: configManager.hotRefresh,
22
- excludesPresetEnv: configManager.build.configurations.excludesPresetEnv,
23
- enableFillActionNamePlugin,
24
- rootDir: configManager.rootDir,
25
- target: configManager.target,
26
- };
7
+ const transpilerConfig = { ...getTranspilerConfig(configManager), typescript: true };
27
8
 
28
9
  const cfg = config.module
29
10
  .rule('ts:project')
@@ -37,11 +18,5 @@ export default (configManager: ConfigManager) => (config: Config) => {
37
18
  )
38
19
  .use('babel');
39
20
 
40
- if (loader === 'swc') {
41
- return cfg.loader('swc-loader').options(getSwcOptions(loaderConfig)).end();
42
- }
43
-
44
- if (loader === 'babel') {
45
- return cfg.loader('babel-loader').options(babelConfig(loaderConfig)).end();
46
- }
21
+ return addTranspilerLoader(configManager, cfg, transpilerConfig);
47
22
  };
@@ -0,0 +1,37 @@
1
+ import type Config from 'webpack-chain';
2
+ import type { ConfigManager } from '../../../config/configManager';
3
+ import { addTranspilerLoader, getTranspilerConfig } from './transpiler';
4
+
5
+ export const addSvgrLoader = (
6
+ configManager: ConfigManager,
7
+ config: Config,
8
+ svgoOptions: Record<string, any>
9
+ ) => {
10
+ const transpilerConfig = getTranspilerConfig(configManager);
11
+ // based on https://github.com/facebook/create-react-app/issues/11213#issuecomment-883466601
12
+ const svgrConfig = config.module
13
+ .rule('svgr')
14
+ .test(/\.svg$/)
15
+ // @todo: `issuer: /\.tsx?$/` нужен или нет?
16
+ .set('resourceQuery', /react/);
17
+
18
+ addTranspilerLoader(configManager, svgrConfig.use('svgr-transpiler'), {
19
+ ...transpilerConfig,
20
+ typescript: true,
21
+ });
22
+
23
+ svgrConfig.use('svgr').loader('@svgr/webpack').options({ babel: false, svgo: svgoOptions }).end();
24
+ };
25
+
26
+ export const getSvgoOptions = (configManager: ConfigManager) => {
27
+ return {
28
+ plugins: configManager.build?.configurations?.svgo?.plugins ?? [
29
+ {
30
+ cleanupIDs: false,
31
+ },
32
+ {
33
+ collapseGroups: false,
34
+ },
35
+ ],
36
+ };
37
+ };
@@ -0,0 +1,41 @@
1
+ import type Config from 'webpack-chain';
2
+ import type { ConfigManager } from '../../../config/configManager';
3
+ import { getSwcOptions } from '../../swc';
4
+ import babelConfig from '../../babel';
5
+
6
+ export const addTranspilerLoader = (
7
+ configManager: ConfigManager,
8
+ rule: Config.Use,
9
+ transpilerConfig: Record<string, any>
10
+ ) => {
11
+ const { loader } = configManager.experiments.transpilation;
12
+
13
+ if (loader === 'swc') {
14
+ return rule.loader('swc-loader').options(getSwcOptions(transpilerConfig)).end();
15
+ }
16
+
17
+ if (loader === 'babel') {
18
+ return rule.loader('babel-loader').options(babelConfig(transpilerConfig)).end();
19
+ }
20
+ };
21
+
22
+ export const getTranspilerConfig = (configManager: ConfigManager) => {
23
+ const { generateDataQaTag, alias, removeTypeofWindow, enableFillActionNamePlugin } =
24
+ configManager.build.configurations;
25
+ const { env, modern } = configManager;
26
+
27
+ return {
28
+ isServer: configManager.buildType === 'server',
29
+ env,
30
+ generateDataQaTag,
31
+ modern,
32
+ alias,
33
+ tramvai: true,
34
+ removeTypeofWindow,
35
+ hot: configManager.hotRefresh,
36
+ excludesPresetEnv: configManager.build.configurations.excludesPresetEnv,
37
+ enableFillActionNamePlugin,
38
+ rootDir: configManager.rootDir,
39
+ target: configManager.target,
40
+ };
41
+ };
@@ -0,0 +1,9 @@
1
+ import type { ComponentType, SVGProps } from 'react';
2
+
3
+ export interface ImageObject {
4
+ src: string;
5
+ width: number;
6
+ height: number;
7
+ }
8
+
9
+ export type SvgComponent = ComponentType<SVGProps<SVGElement>>;