Skip to content

Commit

Permalink
[WIP] refactor build scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
etrepum committed Apr 11, 2024
1 parent c88a7d5 commit d71489d
Show file tree
Hide file tree
Showing 20 changed files with 662 additions and 691 deletions.
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
**/config/**
**/build/**
**/npm/**
!scripts/npm/**
**/*.js.flow
**/*.d.ts
**/playwright*/**
Expand Down
2 changes: 2 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ module.exports = {
// node scripts should be console logging so don't lint against that
files: ['scripts/**/*.js'],
rules: {
// https://github.com/Stuk/eslint-plugin-header/issues/39
'header/header': OFF,
'no-console': OFF,
},
},
Expand Down
25 changes: 8 additions & 17 deletions .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,15 @@ const fs = require('fs-extra');
* Currently this alias map points at the cjs version of the build product,
* as that is what was measured previously in #3600.
*/
const packagesManager = require('./scripts/shared/packagesManager');
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 [];
}),
packagesManager
.getPublicPackages()
.flatMap((pkg) =>
pkg
.getNormalizedNpmModuleExportEntries()
.map(([k, v]) => [k, pkg.resolve('dist', v.require.default)]),
),
);

const extendConfig = {resolve: {alias}};
Expand Down
18 changes: 11 additions & 7 deletions packages/lexical-devtools-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@
"utils"
],
"license": "MIT",
"version": "0.14.2",
"version": "0.14.3",
"main": "LexicalDevtoolsCore.js",
"types": "index.d.ts",
"dependencies": {
"lexical": "0.14.2",
"@lexical/utils": "0.14.2",
"@lexical/table": "0.14.2",
"@lexical/html": "0.14.2",
"@lexical/mark": "0.14.2",
"@lexical/link": "0.14.2"
"@lexical/html": "0.14.3",
"@lexical/link": "0.14.3",
"@lexical/mark": "0.14.3",
"@lexical/table": "0.14.3",
"@lexical/utils": "0.14.3",
"lexical": "0.14.3"
},
"peerDependencies": {
"react": ">=17.x",
Expand All @@ -34,11 +34,15 @@
".": {
"import": {
"types": "./index.d.ts",
"development": "./LexicalDevtoolsCore.dev.mjs",
"production": "./LexicalDevtoolsCore.prod.mjs",
"node": "./LexicalDevtoolsCore.node.mjs",
"default": "./LexicalDevtoolsCore.mjs"
},
"require": {
"types": "./index.d.ts",
"development": "./LexicalDevtoolsCore.dev.js",
"production": "./LexicalDevtoolsCore.prod.js",
"default": "./LexicalDevtoolsCore.js"
}
}
Expand Down
8 changes: 4 additions & 4 deletions packages/lexical-devtools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@lexical/devtools",
"description": "Lexical DevTools browser extension",
"private": true,
"version": "0.0.0",
"version": "0.14.3",
"type": "module",
"scripts": {
"dev": "wxt",
Expand All @@ -15,11 +15,11 @@
"postinstall": "wxt prepare"
},
"dependencies": {
"@eduardoac-skimlinks/webext-redux": "3.0.1-release-candidate",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"@eduardoac-skimlinks/webext-redux": "3.0.1-release-candidate",
"zustand": "^4.5.1",
"webext-bridge": "~6.0.1"
"webext-bridge": "~6.0.1",
"zustand": "^4.5.1"
},
"devDependencies": {
"@types/react": "^18.2.46",
Expand Down
2 changes: 1 addition & 1 deletion packages/lexical-website/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lexical/website",
"version": "0.0.0",
"version": "0.14.3",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
Expand Down
90 changes: 90 additions & 0 deletions scripts/__tests__/unit/build.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/**
* 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';

const fs = require('fs-extra');
const glob = require('glob');
const packagesManager = require('../../shared/packagesManager');

const monorepoPackageJson = require('../../shared/readMonorepoPackageJson')();

const publicNpmNames = new Set(
packagesManager.getPublicPackages().map((pkg) => pkg.getNpmName()),
);

describe('public package.json audits (`npm run update-version` to fix most issues)', () => {
packagesManager.getPublicPackages().forEach((pkg) => {
const npmName = pkg.getNpmName();
const packageJson = pkg.packageJson;
describe(npmName, () => {
const sourceFiles = fs
.readdirSync(pkg.resolve('src'))
.filter((str) => /\.tsx?/.test(str))
.map((str) => str.replace(/\.tsx?$/, '', str))
.sort();
const exportedModules = pkg.getExportedNpmModuleNames().sort();
const {dependencies = {}, peerDependencies = {}} = packageJson;
if (packageJson.main) {
it('should only export the main module with main set', () => {
expect(exportedModules).toEqual([npmName]);
});
}
it('has *.flow types', () => {
expect(glob.sync(pkg.resolve('flow', '*.flow'))).not.toEqual([]);
});
it('uses the expected directory/npm naming convention', () => {
expect(npmName.replace(/^@/, '').replace('/', '-')).toBe(
pkg.getDirectoryName(),
);
});
it('matches monorepo version', () => {
expect(packageJson.version).toBe(monorepoPackageJson.version);
});
it('must not have a direct dependency on react or react-dom', () => {
expect(dependencies).not.toContain('react');
expect(dependencies).not.toContain('react-dom');
});
it('must not have monorepo peerDependencies', () => {
expect(
Object.keys(peerDependencies).filter((dep) =>
publicNpmNames.has(dep),
),
).toEqual([]);
});
it('monorepo dependencies must use the exact monorepo version', () => {
Object.entries(dependencies).forEach(([dep, version]) => {
if (publicNpmNames.has(dep)) {
expect([dep, version]).toEqual([dep, monorepoPackageJson.version]);
}
});
});
it('must export at least one module', () => {
expect(exportedModules.length).toBeGreaterThanOrEqual(1);
});
test.each(exportedModules)(
`should have a source file for exported module %s`,
(exportedModule) => {
expect(sourceFiles).toContain(
exportedModule.slice(npmName.length + 1) || 'index',
);
},
);
if (!sourceFiles.includes('index')) {
it('must not export a top-level module without an index.tsx?', () => {
expect(exportedModules).not.toContain(npmName);
});
test.each(sourceFiles)(
`%s.tsx? must have an exported module`,
(sourceFile) => {
expect(exportedModules).toContain(`${npmName}/${sourceFile}`);
},
);
}
});
});
});
Loading

0 comments on commit d71489d

Please sign in to comment.