Skip to content

Commit 060f56d

Browse files
devversionalan-agius4
authored andcommitted
build: update ng-dev setup to work with new ESM version
The `ng-dev` tool is now strict ESM. Config loading needs to be updated to also emit `.mjs` with `ts-node` (this cannot happen dynamically as ESM Node loading cannot be patched by ts-node at runtime).
1 parent 96b5a31 commit 060f56d

14 files changed

+1140
-166
lines changed
File renamed without changes.

.ng-dev/commit-message.mts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { CommitMessageConfig } from '@angular/dev-infra-private/ng-dev';
2+
import packages from '../lib/packages.js';
3+
4+
/**
5+
* The configuration for `ng-dev commit-message` commands.
6+
*/
7+
export const commitMessage: CommitMessageConfig = {
8+
maxLineLength: Infinity,
9+
minBodyLength: 0,
10+
minBodyLengthTypeExcludes: ['docs'],
11+
// Note: When changing this logic, also change the `contributing.ejs` file.
12+
scopes: [...Object.keys(packages.packages)],
13+
};

.ng-dev/commit-message.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

.ng-dev/config.mts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export { commitMessage } from './commit-message.mjs';
2+
export { format } from './format.mjs';
3+
export { github } from './github.mjs';
4+
export { pullRequest } from './pull-request.mjs';
5+
export { release } from './release.mjs';
6+
export { caretaker } from './caretaker.mjs';

.ng-dev/config.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.
File renamed without changes.
File renamed without changes.
File renamed without changes.

.ng-dev/release.ts renamed to .ng-dev/release.mts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import '../lib/bootstrap-local';
1+
import '../lib/bootstrap-local.js';
22

33
import { ReleaseConfig } from '@angular/dev-infra-private/ng-dev';
4-
import { releasePackages } from '../lib/packages';
5-
import buildPackages from '../scripts/build';
4+
import packages from '../lib/packages.js';
5+
import buildPackages from '../scripts/build.js';
66

7-
const npmPackages = Object.entries(releasePackages).map(([name, { experimental }]) => ({
7+
const npmPackages = Object.entries(packages.releasePackages).map(([name, { experimental }]) => ({
88
name,
99
experimental,
1010
}));
@@ -13,7 +13,7 @@ const npmPackages = Object.entries(releasePackages).map(([name, { experimental }
1313
export const release: ReleaseConfig = {
1414
representativeNpmPackage: '@angular/cli',
1515
npmPackages,
16-
buildPackages: () => buildPackages(),
16+
buildPackages: () => buildPackages.default(),
1717
releaseNotes: {
1818
groupOrder: [
1919
'@angular/cli',

.ng-dev/tsconfig.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
{
22
"extends": "../tsconfig.json",
33
"compilerOptions": {
4+
"module": "Node16",
5+
"moduleResolution": "Node16",
46
"noEmit": true
57
},
6-
"include": ["**/*.ts"],
8+
"include": ["**/*.mts"],
79
"exclude": []
810
}

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@
2424
"build:bazel": "node ./bin/devkit-admin build-bazel",
2525
"build-tsc": "tsc -p tsconfig.json",
2626
"lint": "eslint --cache --max-warnings=0 \"**/*.ts\"",
27+
"ng-dev": "TS_NODE_PROJECT=$PWD/.ng-dev/tsconfig.json node_modules/@angular/dev-infra-private/ng-dev/bundles/cli.mjs",
2728
"templates": "node ./bin/devkit-admin templates",
2829
"validate": "node ./bin/devkit-admin validate",
2930
"postinstall": "yarn webdriver-update && yarn husky install",
3031
"//webdriver-update-README": "ChromeDriver version must match Puppeteer Chromium version, see https://github.com/GoogleChrome/puppeteer/releases http://chromedriver.chromium.org/downloads",
3132
"webdriver-update": "webdriver-manager update --standalone false --gecko false --versions.chrome 101.0.4951.41",
3233
"public-api:check": "node goldens/public-api/manage.js test",
3334
"public-api:update": "node goldens/public-api/manage.js accept",
34-
"ts-circular-deps:check": "ng-dev ts-circular-deps check --config ./packages/circular-deps-test.conf.js",
35-
"ts-circular-deps:approve": "ng-dev ts-circular-deps approve --config ./packages/circular-deps-test.conf.js",
35+
"ts-circular-deps:check": "yarn -s ng-dev ts-circular-deps check --config ./packages/circular-deps-test.conf.js",
36+
"ts-circular-deps:approve": "yarn -s ng-dev ts-circular-deps approve --config ./packages/circular-deps-test.conf.js",
3637
"check-tooling-setup": "tsc --project .ng-dev/tsconfig.json"
3738
},
3839
"repository": {
@@ -69,7 +70,7 @@
6970
"@angular/compiler": "14.0.0",
7071
"@angular/compiler-cli": "14.0.0",
7172
"@angular/core": "14.0.0",
72-
"@angular/dev-infra-private": "https://github.com/angular/dev-infra-private-builds.git#2fe60016e0ce6f1e53d4f5c5a1feb29d64ecd979",
73+
"@angular/dev-infra-private": "https://github.com/angular/dev-infra-private-builds.git#132c156fd32ea70e3755df0fdb211ef5b6299936",
7374
"@angular/forms": "14.0.0",
7475
"@angular/localize": "14.0.0",
7576
"@angular/material": "14.0.0",
@@ -207,7 +208,7 @@
207208
"terser": "5.13.1",
208209
"text-table": "0.2.0",
209210
"tree-kill": "1.2.2",
210-
"ts-node": "^10.0.0",
211+
"ts-node": "^10.8.1",
211212
"tslib": "2.4.0",
212213
"typescript": "~4.7.2",
213214
"verdaccio": "5.10.2",

scripts/templates.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,35 @@ import { logging } from '@angular-devkit/core';
1010
import * as fs from 'fs';
1111
import * as path from 'path';
1212

13-
function _runTemplate(inputPath: string, outputPath: string, logger: logging.Logger) {
13+
async function _runTemplate(inputPath: string, outputPath: string, logger: logging.Logger) {
1414
inputPath = path.resolve(__dirname, inputPath);
1515
outputPath = path.resolve(__dirname, outputPath);
1616

1717
logger.info(`Building ${path.relative(path.dirname(__dirname), outputPath)}...`);
1818

19+
// TODO(ESM): Consider making this an actual import statement.
20+
const { COMMIT_TYPES, ScopeRequirement } = await new Function(
21+
`return import('@angular/dev-infra-private/ng-dev');`,
22+
)();
23+
1924
const template = require(inputPath).default;
2025
const content = template({
2126
monorepo: require('../.monorepo.json'),
2227
packages: require('../lib/packages').packages,
2328
encode: (x: string) => global.encodeURIComponent(x),
2429
require: (x: string) => require(path.resolve(path.dirname(inputPath), x)),
30+
31+
// Pass-through `ng-dev` ESM commit message information for the `contributing.ejs`
32+
// template. EJS templates using the devkit template cannot use ESM.
33+
COMMIT_TYPES: COMMIT_TYPES,
34+
ScopeRequirement: ScopeRequirement,
2535
});
2636
fs.writeFileSync(outputPath, content, 'utf-8');
2737
}
2838

2939
export default async function (_options: {}, logger: logging.Logger): Promise<number> {
30-
_runTemplate('./templates/readme', '../README.md', logger);
31-
_runTemplate('./templates/contributing', '../CONTRIBUTING.md', logger);
40+
await _runTemplate('./templates/readme', '../README.md', logger);
41+
await _runTemplate('./templates/contributing', '../CONTRIBUTING.md', logger);
3242

3343
return 0;
3444
}

scripts/templates/contributing.ejs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ If the commit reverts a previous commit, it should begin with `revert: `, follow
193193
Must be one of the following:
194194

195195
<%
196-
const { COMMIT_TYPES, ScopeRequirement } = require('../../.ng-dev/commit-message');
197196
for (const typeName of Object.keys(COMMIT_TYPES).sort()) {
198197
const type = COMMIT_TYPES[typeName];
199198
%>* **<%= typeName %>**: <%= type.description %><%
@@ -214,8 +213,7 @@ The scope should be the name of the npm package affected as perceived by the per
214213
The following is the list of supported scopes:
215214

216215
<%
217-
const { commitMessage } = require('../../.ng-dev/commit-message');
218-
for (const scope of commitMessage.scopes) {
216+
for (const scope of Object.keys(packages)) {
219217
%>* **<%= scope %>**
220218
<% } %>
221219

0 commit comments

Comments
 (0)