Skip to content

Commit a6129a6

Browse files
committed
build: update ng-dev config to work with Node.js 18.19
Update ng-dev setup to work with 18.19 For more details, refer to: TypeStrong/ts-node#2094
1 parent a44b6c1 commit a6129a6

File tree

8 files changed

+53
-29
lines changed

8 files changed

+53
-29
lines changed

.ng-dev/commit-message.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import packages from '../lib/packages.js';
1+
import { getReleasablePackages } from '../lib/packages.mjs';
22

33
/**
44
* The configuration for `ng-dev commit-message` commands.
5-
*
5+
*
66
* @type { import("@angular/ng-dev").CommitMessageConfig }
77
*/
88
export const commitMessage = {
99
maxLineLength: Infinity,
1010
minBodyLength: 0,
1111
minBodyLengthTypeExcludes: ['docs'],
1212
// Note: When changing this logic, also change the `contributing.ejs` file.
13-
scopes: [...Object.keys(packages.packages)],
13+
scopes: getReleasablePackages().map(({ name }) => name),
1414
};

.ng-dev/release.mjs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
import semver from 'semver';
2-
import packages from '../lib/packages.js';
2+
import { getReleasablePackages } from '../lib/packages.mjs';
33

4-
const npmPackages = Object.entries(packages.releasePackages).map(([name, { experimental }]) => ({
5-
name,
6-
experimental,
7-
}));
4+
const packages = getReleasablePackages();
85

9-
/**
6+
/**
107
* Configuration for the `ng-dev release` command.
11-
*
8+
*
129
* @type { import("@angular/ng-dev").ReleaseConfig }
1310
*/
1411
export const release = {
1512
representativeNpmPackage: '@angular/cli',
16-
npmPackages,
13+
npmPackages: packages.map(({ name, experimental }) => ({ name, experimental })),
1714
buildPackages: async () => {
1815
// The `performNpmReleaseBuild` function is loaded at runtime to avoid loading additional
1916
// files and dependencies unless a build is required.
@@ -26,7 +23,7 @@ export const release = {
2623
'../scripts/release-checks/dependency-ranges/index.mjs'
2724
);
2825

29-
await assertValidDependencyRanges(newVersion, packages.releasePackages);
26+
await assertValidDependencyRanges(newVersion, packages);
3027
},
3128
releaseNotes: {
3229
groupOrder: [

.ng-dev/tsconfig.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
{
22
"extends": "../tsconfig.json",
33
"compilerOptions": {
4+
"resolveJsonModule": true,
45
"allowJs": true,
56
"module": "Node16",
67
"moduleResolution": "Node16",
8+
"checkJs": true,
79
"noEmit": true,
810
"types": []
911
},

lib/packages.mjs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
import fastGlob from 'fast-glob';
10+
import { readFileSync } from 'node:fs';
11+
import { createRequire } from 'node:module';
12+
13+
const require = createRequire(import.meta.url);
14+
const monorepoData = require('../.monorepo.json');
15+
16+
export function getReleasablePackages() {
17+
const packages = [];
18+
for (const pkg of fastGlob.sync('./packages/*/*/package.json')) {
19+
const data = JSON.parse(readFileSync(pkg, 'utf-8'));
20+
if (!(data.name in monorepoData.packages)) {
21+
throw new Error(`${data.name} does not exist in .monorepo.json`);
22+
}
23+
24+
if (data.private) {
25+
continue;
26+
}
27+
28+
packages.push(data);
29+
}
30+
31+
return packages;
32+
}

lib/packages.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ function loadPackageJson(p: string) {
8585
// Overwrite engines to a common default.
8686
case 'engines':
8787
pkg['engines'] = {
88-
'node': '^16.14.0 || >=18.10.0',
88+
'node': '^18.19.1 || ^20.11.1',
8989
'npm': '^6.11.0 || ^7.5.6 || >=8.0.0',
9090
'yarn': '>= 1.13.0',
9191
};

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
"build": "node ./bin/devkit-admin build",
2323
"build-tsc": "tsc -p tsconfig.json",
2424
"lint": "eslint --cache --max-warnings=0 \"**/*.ts\"",
25-
"ng-dev": "ts-node --esm --project .ng-dev/tsconfig.json --transpile-only node_modules/@angular/ng-dev/bundles/cli.mjs",
2625
"templates": "node ./bin/devkit-admin templates",
2726
"validate": "node ./bin/devkit-admin validate",
2827
"postinstall": "yarn webdriver-update && yarn husky && patch-package --patch-dir tools/postinstall/patches",
2928
"//webdriver-update-README": "ChromeDriver version must match Puppeteer Chromium version, see https://github.com/GoogleChrome/puppeteer/releases http://chromedriver.chromium.org/downloads",
3029
"webdriver-update": "webdriver-manager update --standalone false --gecko false --versions.chrome 106.0.5249.21",
3130
"public-api:check": "node goldens/public-api/manage.js test",
31+
"ng-dev": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only node_modules/@angular/ng-dev/bundles/cli.mjs",
3232
"public-api:update": "node goldens/public-api/manage.js accept",
3333
"ts-circular-deps:check": "yarn -s ng-dev ts-circular-deps check --config ./packages/circular-deps-test.conf.js",
3434
"ts-circular-deps:approve": "yarn -s ng-dev ts-circular-deps approve --config ./packages/circular-deps-test.conf.js",
@@ -39,7 +39,7 @@
3939
"url": "https://github.com/angular/angular-cli.git"
4040
},
4141
"engines": {
42-
"node": "^18.13.0 || ^20.9.0",
42+
"node": "^18.19.1 || ^20.11.1",
4343
"yarn": ">=1.21.1 <2",
4444
"npm": "Please use yarn instead of NPM to install dependencies"
4545
},

scripts/release-checks/dependency-ranges/index.mts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9+
import { Log, ReleasePrecheckError, bold } from '@angular/ng-dev';
910
import semver from 'semver';
10-
import { Log, bold, ReleasePrecheckError } from '@angular/ng-dev';
11-
import { checkPeerDependencies } from './peer-deps-check.mjs';
1211
import { checkSchematicsAngularLatestVersion } from './latest-versions-check.mjs';
13-
import { PackageMap } from '../../../lib/packages.js';
12+
import { PackageJson, checkPeerDependencies } from './peer-deps-check.mjs';
1413

1514
/** Environment variable that can be used to skip this pre-check. */
1615
const skipEnvVar = 'SKIP_DEPENDENCY_RANGE_PRECHECK';
@@ -26,7 +25,7 @@ const skipEnvVar = 'SKIP_DEPENDENCY_RANGE_PRECHECK';
2625
*/
2726
export async function assertValidDependencyRanges(
2827
newVersion: semver.SemVer,
29-
allPackages: PackageMap,
28+
allPackages: PackageJson[],
3029
) {
3130
if (process.env[skipEnvVar] === '1') {
3231
return;

scripts/release-checks/dependency-ranges/peer-deps-check.mts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,20 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import path from 'path';
10-
import url from 'url';
119
import semver from 'semver';
12-
import { PackageMap } from '../../../lib/packages.js';
1310

1411
/** Path to the current directory. */
15-
const currentDir = path.dirname(url.fileURLToPath(import.meta.url));
1612

17-
/** Path to the project directory. */
18-
const projectDir = path.join(currentDir, '../../../');
1913

2014
/** Describes a parsed `package.json` file. */
21-
interface PackageJson {
15+
export interface PackageJson {
2216
name?: string;
2317
peerDependencies?: Record<string, string>;
2418
}
2519

2620
export async function checkPeerDependencies(
2721
newVersion: semver.SemVer,
28-
allPackages: PackageMap,
22+
allPackages: PackageJson[],
2923
): Promise<string[]> {
3024
const { major, minor } = newVersion;
3125
const isPrerelease = !!newVersion.prerelease[0];
@@ -39,8 +33,8 @@ export async function checkPeerDependencies(
3933
}
4034

4135
const failures: string[] = [];
42-
for (const pkgInfo of Object.values(allPackages)) {
43-
failures.push(...checkPackage(pkgInfo.packageJson, expectedFwPeerDep));
36+
for (const pkgInfo of allPackages) {
37+
failures.push(...checkPackage(pkgInfo, expectedFwPeerDep));
4438
}
4539

4640
return failures;

0 commit comments

Comments
 (0)