forked from facebook/lexical
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.size-limit.js
78 lines (73 loc) · 2.4 KB
/
.size-limit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
'use strict';
/**
* We use this file to configure the size-lmit tool, rather than their simpler
* yaml package.json configuration, because we need to override the resolution
* of modules to ensure we are pulling in monorepo build products as
* dependencies rather than trying to use something stale from node_modules.
*/
const glob = require('glob');
const path = require('node:path');
const fs = require('fs-extra');
/**
* Build a alias map so that we can be sure that we are resolving monorepo
* dependencies to their corresponding build products and not some combination
* of a build product and a possibly stale/divergent version in node_modules.
*
* Looks like:
*
* {
* lexical: 'packages/lexical/dist/index.js',
* '@lexical/rich-text': 'packages/lexical-rich-text/dist/index.js',
* }
*
* Currently this alias map points at the cjs version of the build product,
* as that is what was measured previously in #3600.
*/
const alias = Object.fromEntries(
glob('./packages/*/package.json', {sync: true}).flatMap((fn) => {
const pkg = fs.readJsonSync(fn);
if (!pkg.private) {
return Object.entries(pkg.exports).flatMap(([k, v]) => {
if (k.endsWith('.js')) {
return [];
}
return [
[
`${pkg.name}${k.replace(/^\.(\/$)?/, '')}`,
path.resolve(path.dirname(fn), 'dist', v.require.default),
],
];
});
}
return [];
}),
);
const extendConfig = {resolve: {alias}};
const modifyWebpackConfig = (config) => Object.assign(config, extendConfig);
function sizeLimitConfig(pkg) {
return {
path: alias[pkg],
modifyWebpackConfig,
};
}
/**
* These are the packages that were measured previously in #3600
* We could consider adding more packages and/or also measuring
* other build combinations such as esbuild/webpack, mjs/cjs, dev/prod, etc.
*
* The current configuration measures only: webpack + cjs + prod.
*
* In order to also measure dev, we would want to change the size script in
* package.json to run build-release instead of build-prod so both
* dev and prod artifacts would be available.
*/
module.exports = ['lexical', '@lexical/rich-text', '@lexical/plain-text'].map(
sizeLimitConfig,
);