Skip to content

Commit decb4f4

Browse files
committed
refactor: add explicit types for createBuilder exports
This is necessary as with the new compilation, leveraging pnpm-linked first party dependencies, there are cases **during migration** where multiple locations of the same package exist. e.g. - `@angular_devkit/architect/node_modules/@angular-devkit/core` (pnpm package output) - `@angular_devkit/core` (plain js sources) This is fine, and there is no risk of wrong types, and this should only occur during migration anyway, but it causes a few type issues as TypeScript is unable to emit proper types for inference. This is okay, as we'd likely even want to make use of `isolatedDeclarations` at some point, but we just add explicit types right now. (also making `Builder` type more type safe, checking assignability properly).
1 parent 59e4f52 commit decb4f4

File tree

16 files changed

+118
-35
lines changed

16 files changed

+118
-35
lines changed

.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
# Input hashes for repository rule npm_translate_lock(name = "npm2", pnpm_lock = "@//:pnpm-lock.yaml").
33
# This file should be checked into version control along with the pnpm-lock.yaml file.
44
.npmrc=-2023857461
5-
package.json=2030416769
6-
pnpm-lock.yaml=757562281
7-
pnpm-workspace.yaml=1711114604
8-
yarn.lock=-1189684420
5+
package.json=1373382412
6+
packages/angular_devkit/architect/package.json=-107274537
7+
packages/angular_devkit/core/package.json=339935828
8+
pnpm-lock.yaml=1069382541
9+
pnpm-workspace.yaml=-1853274682
10+
yarn.lock=-1457550495

WORKSPACE

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ npm_translate_lock(
186186
data = [
187187
"//:package.json",
188188
"//:pnpm-workspace.yaml",
189+
"//packages/angular_devkit/architect:package.json",
190+
"//packages/angular_devkit/core:package.json",
189191
],
190192
npmrc = "//:.npmrc",
191193
patches = {
@@ -225,3 +227,15 @@ http_file(
225227
sha256 = "5a5c46846ecda83e05b9da26f1672ad51c59bce08fed88419850d0e29c993b30",
226228
urls = ["https://raw.githubusercontent.com/devversion/rules_angular/4b7532ba2b29078d005899cd15b415593d03cceb/dist/worker.mjs"],
227229
)
230+
231+
http_archive(
232+
name = "aspect_rules_jasmine",
233+
sha256 = "0d2f9c977842685895020cac721d8cc4f1b37aae15af46128cf619741dc61529",
234+
strip_prefix = "rules_jasmine-2.0.0",
235+
url = "https://github.com/aspect-build/rules_jasmine/releases/download/v2.0.0/rules_jasmine-v2.0.0.tar.gz",
236+
)
237+
238+
load("@aspect_rules_jasmine//jasmine:dependencies.bzl", "rules_jasmine_dependencies")
239+
240+
# Fetch dependencies which users need as well
241+
rules_jasmine_dependencies()

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
"@types/http-proxy": "^1.17.4",
9292
"@types/ini": "^4.0.0",
9393
"@types/jasmine": "~5.1.0",
94+
"@types/jasmine-reporters": "^2",
9495
"@types/karma": "^6.3.0",
9596
"@types/less": "^3.0.3",
9697
"@types/loader-utils": "^2.0.0",
@@ -141,6 +142,7 @@
141142
"istanbul-lib-instrument": "6.0.3",
142143
"jasmine": "^5.0.0",
143144
"jasmine-core": "~5.5.0",
145+
"jasmine-reporters": "^2.5.2",
144146
"jasmine-spec-reporter": "~7.0.0",
145147
"jsonc-parser": "3.3.1",
146148
"karma": "~6.4.0",

packages/angular/build/src/builders/application/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,4 +259,6 @@ function generateFullPath(
259259
return fullFilePath;
260260
}
261261

262-
export default createBuilder(buildApplication);
262+
export default createBuilder(buildApplication) as ReturnType<
263+
typeof createBuilder<ApplicationBuilderOptions>
264+
> as ReturnType<typeof createBuilder<ApplicationBuilderOptions>>;

packages/angular/build/src/builders/dev-server/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ export {
1616
type DevServerBuilderOutput,
1717
execute as executeDevServerBuilder,
1818
};
19-
export default createBuilder<DevServerBuilderOptions, DevServerBuilderOutput>(execute);
19+
export default createBuilder<DevServerBuilderOptions, DevServerBuilderOutput>(
20+
execute,
21+
) as ReturnType<typeof createBuilder<DevServerBuilderOptions, DevServerBuilderOutput>>;
2022

2123
// Temporary export to support specs
2224
export { execute as executeDevServer };

packages/angular/build/src/builders/extract-i18n/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ import { execute } from './builder';
1111
import type { Schema as ExtractI18nBuilderOptions } from './schema';
1212

1313
export { ExtractI18nBuilderOptions, execute };
14-
export default createBuilder<ExtractI18nBuilderOptions>(execute);
14+
export default createBuilder<ExtractI18nBuilderOptions>(execute) as ReturnType<
15+
typeof createBuilder<ExtractI18nBuilderOptions>
16+
>;

packages/angular/build/src/builders/ng-packagr/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ import { execute } from './builder';
1111
import type { Schema as NgPackagrBuilderOptions } from './schema';
1212

1313
export { type NgPackagrBuilderOptions, execute };
14-
export default createBuilder<NgPackagrBuilderOptions>(execute);
14+
export default createBuilder<NgPackagrBuilderOptions>(execute) as ReturnType<
15+
typeof createBuilder<NgPackagrBuilderOptions>
16+
>;

packages/angular_devkit/architect/BUILD.bazel

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
# found in the LICENSE file at https://angular.dev/license
55

66
load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package")
7-
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
8-
load("//tools:defaults2.bzl", "npm_package", "ts_project")
7+
load("@npm2//:defs.bzl", "npm_link_all_packages")
8+
load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project")
99
load("//tools:ts_json_schema.bzl", "ts_json_schema")
1010

11+
package(default_visibility = ["//visibility:public"])
12+
1113
licenses(["notice"])
1214

13-
package(default_visibility = ["//visibility:public"])
15+
npm_link_all_packages()
1416

1517
ts_json_schema(
1618
name = "builder_input_schema",
@@ -66,10 +68,9 @@ ts_project(
6668
data = JSON_FILES,
6769
module_name = "@angular-devkit/architect",
6870
deps = [
71+
":node_modules/@angular-devkit/core",
6972
"//:node_modules/@types/node",
7073
"//:node_modules/rxjs",
71-
"//packages/angular_devkit/core:core_rjs",
72-
"//packages/angular_devkit/core/node:node_rjs",
7374
],
7475
)
7576

@@ -79,16 +80,16 @@ ts_project(
7980
srcs = glob(["src/**/*_spec.ts"]),
8081
deps = [
8182
":architect_rjs",
83+
":node_modules/@angular-devkit/core",
8284
"//:node_modules/@types/jasmine",
8385
"//:node_modules/rxjs",
8486
"//packages/angular_devkit/architect/testing:testing_rjs",
85-
"//packages/angular_devkit/core:core_rjs",
8687
],
8788
)
8889

89-
jasmine_node_test(
90+
jasmine_test(
9091
name = "architect_test",
91-
srcs = [":architect_test_lib"],
92+
data = [":architect_test_lib_rjs"],
9293
)
9394

9495
# @external_begin

packages/angular_devkit/architect/src/create-builder.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ export function createBuilder<OptT = json.JsonObject, OutT extends BuilderOutput
252252
handler,
253253
[BuilderSymbol]: true,
254254
[BuilderVersionSymbol]: require('../package.json').version,
255+
// Only needed for type safety around `Builder` types.
256+
__OptionT: null!,
255257
};
256258
}
257259

packages/angular_devkit/architect/src/internal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export interface Builder<OptionT extends json.JsonObject = json.JsonObject> {
5757
// Metadata associated with this builder.
5858
[BuilderSymbol]: true;
5959
[BuilderVersionSymbol]: string;
60+
__OptionT: OptionT;
6061
}
6162

6263
export interface ArchitectHost<BuilderInfoT extends BuilderInfo = BuilderInfo> {

0 commit comments

Comments
 (0)