@gravity-ui/app-builder 0.15.0 → 0.15.1-beta.2

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.
@@ -0,0 +1,18 @@
1
+ import { ManifestPluginOptions } from 'rspack-manifest-plugin';
2
+ import type { RuleSetRule as WebpackRuleSetRule } from 'webpack';
3
+ import { Compiler, MultiStats, rspack } from '@rspack/core';
4
+ import type { Configuration, RuleSetRule as RspackRuleSetRule } from '@rspack/core';
5
+ import type { Logger } from '../logger';
6
+ export declare function clearCacheDirectory(config: Configuration, logger: Logger): void;
7
+ export declare const generateAssetsManifest: ManifestPluginOptions['generate'];
8
+ export declare function prepareRspackRules(webpackRules: (undefined | null | false | '' | 0 | WebpackRuleSetRule | '...')[]): (RspackRuleSetRule | '...')[];
9
+ export declare class RspackProgressPlugin extends rspack.ProgressPlugin {
10
+ private _logger;
11
+ private _state;
12
+ constructor({ logger }: {
13
+ logger: Logger;
14
+ });
15
+ handler: (percent: number, message: string, ...details: string[]) => void;
16
+ apply(compiler: Compiler): void;
17
+ }
18
+ export declare function rspackCompilerHandlerFactory(logger: Logger, onCompilationEnd?: () => void): (err?: Error | null, stats?: MultiStats) => Promise<void>;
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.RspackProgressPlugin = exports.generateAssetsManifest = void 0;
30
+ exports.clearCacheDirectory = clearCacheDirectory;
31
+ exports.prepareRspackRules = prepareRspackRules;
32
+ exports.rspackCompilerHandlerFactory = rspackCompilerHandlerFactory;
33
+ const core_1 = require("@rspack/core");
34
+ const fs = __importStar(require("node:fs"));
35
+ const path = __importStar(require("node:path"));
36
+ const paths_1 = __importDefault(require("../../common/paths"));
37
+ function clearCacheDirectory(config, logger) {
38
+ if (!config.cache) {
39
+ return;
40
+ }
41
+ let cacheDirectory = path.join(paths_1.default.appNodeModules, '.cache/rspack');
42
+ if (typeof config.experiments?.cache === 'object' &&
43
+ config.experiments.cache.type === 'persistent' &&
44
+ config.experiments.cache.storage?.directory) {
45
+ cacheDirectory = config.experiments.cache.storage?.directory;
46
+ }
47
+ if (fs.existsSync(cacheDirectory)) {
48
+ fs.rmdirSync(cacheDirectory, { recursive: true });
49
+ logger.message(`Rspack cache ${cacheDirectory} successfully cleared`);
50
+ }
51
+ }
52
+ const generateAssetsManifest = (seed, files, entries) => {
53
+ const manifestFiles = files.reduce((manifest, file) => {
54
+ manifest[file.name] = file.path;
55
+ return manifest;
56
+ }, seed);
57
+ const entrypoints = Object.keys(entries).reduce((previous, name) => {
58
+ return {
59
+ ...previous,
60
+ [name]: {
61
+ assets: {
62
+ js: entries[name].filter((file) => file.endsWith('.js')),
63
+ css: entries[name].filter((file) => file.endsWith('.css')),
64
+ },
65
+ },
66
+ };
67
+ }, {});
68
+ return {
69
+ files: manifestFiles,
70
+ entrypoints,
71
+ };
72
+ };
73
+ exports.generateAssetsManifest = generateAssetsManifest;
74
+ function prepareRspackUse(webpackUse) {
75
+ if (typeof webpackUse === 'string') {
76
+ if (webpackUse === 'swc-loader') {
77
+ return 'builtin:swc-loader';
78
+ }
79
+ return webpackUse;
80
+ }
81
+ if (Array.isArray(webpackUse)) {
82
+ for (const item of webpackUse) {
83
+ if (item) {
84
+ prepareRspackUse(item);
85
+ }
86
+ }
87
+ }
88
+ return webpackUse;
89
+ }
90
+ function prepareRspackRules(webpackRules) {
91
+ const rspackRules = [];
92
+ for (const webpackRule of webpackRules) {
93
+ if (!webpackRule) {
94
+ continue;
95
+ }
96
+ if (typeof webpackRule === 'string') {
97
+ rspackRules.push(webpackRule);
98
+ continue;
99
+ }
100
+ const rspackRule = webpackRule;
101
+ if (webpackRule.oneOf) {
102
+ rspackRule.oneOf = prepareRspackRules(webpackRule.oneOf);
103
+ }
104
+ if (webpackRule.rules) {
105
+ rspackRule.rules = prepareRspackRules(webpackRule.rules);
106
+ }
107
+ if (webpackRule.use) {
108
+ rspackRule.use = prepareRspackUse(webpackRule.use);
109
+ }
110
+ rspackRules.push(rspackRule);
111
+ }
112
+ return rspackRules;
113
+ }
114
+ const pretty_time_1 = require("../logger/pretty-time");
115
+ class RspackProgressPlugin extends core_1.rspack.ProgressPlugin {
116
+ _logger;
117
+ _state = {};
118
+ constructor({ logger }) {
119
+ super();
120
+ this._logger = logger;
121
+ }
122
+ handler = (percent, message, ...details) => {
123
+ const progress = Math.floor(percent * 100);
124
+ this._logger.status(`${this._logger.colors.green(`${progress}%`)} - ${this._logger.colors.yellow(message)}${details.length > 0 ? `: ${this._logger.colors.dim(...details)}` : ''}`);
125
+ };
126
+ apply(compiler) {
127
+ super.apply(compiler);
128
+ hook(compiler, 'compile', () => {
129
+ this._logger.message('Start compilation');
130
+ this._logger.message(`rspack v${compiler.rspack.rspackVersion}`);
131
+ this._state.start = process.hrtime.bigint();
132
+ });
133
+ hook(compiler, 'invalid', (fileName, changeTime) => {
134
+ this._logger.verbose(`Invalidate file: ${fileName} at ${changeTime}`);
135
+ });
136
+ hook(compiler, 'done', (stats) => {
137
+ const time = this._state.start ? ' in ' + (0, pretty_time_1.elapsedTime)(this._state.start) : '';
138
+ const hasErrors = stats.hasErrors();
139
+ if (hasErrors) {
140
+ this._logger.error('Compiled with some errors' + time);
141
+ }
142
+ else {
143
+ this._logger.success('Compiled successfully' + time);
144
+ }
145
+ });
146
+ }
147
+ }
148
+ exports.RspackProgressPlugin = RspackProgressPlugin;
149
+ function hook(compiler, hookName, callback) {
150
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
151
+ compiler.hooks[hookName].tap(`app-builder: ${hookName}`, callback);
152
+ }
153
+ function rspackCompilerHandlerFactory(logger, onCompilationEnd) {
154
+ return async (err, stats) => {
155
+ if (err) {
156
+ logger.panic(err.message, err);
157
+ }
158
+ if (stats) {
159
+ logger.message('Stats:\n' +
160
+ stats.toString({
161
+ preset: 'errors-warnings',
162
+ colors: process.stdout.isTTY,
163
+ assets: logger.isVerbose,
164
+ modules: logger.isVerbose,
165
+ entrypoints: logger.isVerbose,
166
+ timings: logger.isVerbose,
167
+ }));
168
+ if (stats.hasErrors()) {
169
+ process.exit(1);
170
+ }
171
+ }
172
+ if (onCompilationEnd) {
173
+ await onCompilationEnd();
174
+ }
175
+ const [clientStats, ssrStats] = stats?.stats ?? [];
176
+ if (clientStats) {
177
+ const { startTime = 0, endTime = 0 } = clientStats;
178
+ const time = endTime - startTime;
179
+ logger.success(`Client was successfully compiled in ${(0, pretty_time_1.prettyTime)(BigInt(time) * BigInt(1_000_000))}`);
180
+ }
181
+ if (ssrStats) {
182
+ const { startTime = 0, endTime = 0 } = ssrStats;
183
+ const time = endTime - startTime;
184
+ logger.success(`SSR: Client was successfully compiled in ${(0, pretty_time_1.prettyTime)(BigInt(time) * BigInt(1_000_000))}`);
185
+ }
186
+ if (!clientStats && !ssrStats) {
187
+ logger.success(`Client was successfully compiled`);
188
+ }
189
+ };
190
+ }
@@ -5,8 +5,8 @@ export declare function createCli(argv: string[]): {
5
5
  cdn: string | undefined;
6
6
  env: string[] | undefined;
7
7
  target: "client" | "server" | undefined;
8
- inspect: number | undefined;
9
8
  c: unknown;
9
+ inspect: number | undefined;
10
10
  inspectBrk: number | undefined;
11
11
  "inspect-brk": number | undefined;
12
12
  entryFilter: string[] | undefined;
@@ -19,8 +19,8 @@ export declare function createCli(argv: string[]): {
19
19
  "lazy-compilation": boolean | undefined;
20
20
  reactProfiling: boolean | undefined;
21
21
  "react-profiling": boolean | undefined;
22
- analyzeBundle: "true" | "statoscope" | undefined;
23
- "analyze-bundle": "true" | "statoscope" | undefined;
22
+ analyzeBundle: "true" | "statoscope" | "rsdoctor" | undefined;
23
+ "analyze-bundle": "true" | "statoscope" | "rsdoctor" | undefined;
24
24
  disableSourceMapGeneration: boolean | undefined;
25
25
  "disable-source-map-generation": boolean | undefined;
26
26
  "debug-webpack": boolean | undefined;
@@ -33,8 +33,8 @@ export declare function createCli(argv: string[]): {
33
33
  cdn: string | undefined;
34
34
  env: string[] | undefined;
35
35
  target: "client" | "server" | undefined;
36
- inspect: number | undefined;
37
36
  c: unknown;
37
+ inspect: number | undefined;
38
38
  inspectBrk: number | undefined;
39
39
  "inspect-brk": number | undefined;
40
40
  entryFilter: string[] | undefined;
@@ -47,8 +47,8 @@ export declare function createCli(argv: string[]): {
47
47
  "lazy-compilation": boolean | undefined;
48
48
  reactProfiling: boolean | undefined;
49
49
  "react-profiling": boolean | undefined;
50
- analyzeBundle: "true" | "statoscope" | undefined;
51
- "analyze-bundle": "true" | "statoscope" | undefined;
50
+ analyzeBundle: "true" | "statoscope" | "rsdoctor" | undefined;
51
+ "analyze-bundle": "true" | "statoscope" | "rsdoctor" | undefined;
52
52
  disableSourceMapGeneration: boolean | undefined;
53
53
  "disable-source-map-generation": boolean | undefined;
54
54
  "debug-webpack": boolean | undefined;
@@ -176,7 +176,7 @@ function createCli(argv) {
176
176
  .option('analyze-bundle', {
177
177
  group: 'Client',
178
178
  describe: 'Analyze bundle',
179
- choices: ['true', 'statoscope'],
179
+ choices: ['true', 'statoscope', 'rsdoctor'],
180
180
  })
181
181
  .option('disable-fork-ts-checker', {
182
182
  group: 'Client',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/app-builder",
3
- "version": "0.15.0",
3
+ "version": "0.15.1-beta.2",
4
4
  "description": "Develop and build your React client-server projects, powered by typescript and webpack",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",
@@ -70,6 +70,11 @@
70
70
  "@babel/runtime": "^7.26.0",
71
71
  "@okikio/sharedworker": "^1.0.7",
72
72
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
73
+ "@rsdoctor/rspack-plugin": "^0.4.13",
74
+ "@rsdoctor/webpack-plugin": "^0.4.13",
75
+ "@rspack/core": "^1.2.2",
76
+ "@rspack/dev-server": "^1.0.10",
77
+ "@rspack/plugin-react-refresh": "^1.0.0",
73
78
  "@statoscope/webpack-plugin": "^5.28.2",
74
79
  "@svgr/core": "^8.1.0",
75
80
  "@svgr/plugin-jsx": "^8.1.0",
@@ -110,6 +115,7 @@
110
115
  "react-refresh": "^0.14.2",
111
116
  "resolve-url-loader": "^5.0.0",
112
117
  "rimraf": "^5.0.7",
118
+ "rspack-manifest-plugin": "^5.0.1",
113
119
  "sass": "^1.79.0",
114
120
  "sass-loader": "^16.0.0",
115
121
  "semver": "^7.6.3",
@@ -119,6 +125,7 @@
119
125
  "style-loader": "^4.0.0",
120
126
  "svgo": "^3.3.2",
121
127
  "terser-webpack-plugin": "5.3.10",
128
+ "ts-checker-rspack-plugin": "^1.1.1",
122
129
  "ts-node": "10.9.2",
123
130
  "tslib": "^2.6.2",
124
131
  "typescript": "~5.6.0",
@@ -128,6 +135,7 @@
128
135
  "webpack-dev-server": "^5.1.0",
129
136
  "webpack-manifest-plugin": "^5.0.0",
130
137
  "worker-loader": "^3.0.8",
138
+ "worker-rspack-loader": "^3.1.2",
131
139
  "yargs": "^17.7.2"
132
140
  },
133
141
  "devDependencies": {