Skip to content

Commit 6b2cbd9

Browse files
Merge pull request #248 from angular/main
Create a new pull request by comparing changes across two branches
2 parents 3b631b9 + b22677d commit 6b2cbd9

File tree

78 files changed

+3533
-1746
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+3533
-1746
lines changed

.github/actions/deploy-docs-site/main.js

Lines changed: 139 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9451,6 +9451,102 @@ var require_dist = __commonJS({
94519451
}
94529452
});
94539453

9454+
//
9455+
var require_fast_content_type_parse = __commonJS({
9456+
""(exports, module) {
9457+
"use strict";
9458+
var NullObject = function NullObject2() {
9459+
};
9460+
NullObject.prototype = /* @__PURE__ */ Object.create(null);
9461+
var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu;
9462+
var quotedPairRE = /\\([\v\u0020-\u00ff])/gu;
9463+
var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u;
9464+
var defaultContentType = { type: "", parameters: new NullObject() };
9465+
Object.freeze(defaultContentType.parameters);
9466+
Object.freeze(defaultContentType);
9467+
function parse3(header) {
9468+
if (typeof header !== "string") {
9469+
throw new TypeError("argument header is required and must be a string");
9470+
}
9471+
let index = header.indexOf(";");
9472+
const type = index !== -1 ? header.slice(0, index).trim() : header.trim();
9473+
if (mediaTypeRE.test(type) === false) {
9474+
throw new TypeError("invalid media type");
9475+
}
9476+
const result = {
9477+
type: type.toLowerCase(),
9478+
parameters: new NullObject()
9479+
};
9480+
if (index === -1) {
9481+
return result;
9482+
}
9483+
let key;
9484+
let match;
9485+
let value;
9486+
paramRE.lastIndex = index;
9487+
while (match = paramRE.exec(header)) {
9488+
if (match.index !== index) {
9489+
throw new TypeError("invalid parameter format");
9490+
}
9491+
index += match[0].length;
9492+
key = match[1].toLowerCase();
9493+
value = match[2];
9494+
if (value[0] === '"') {
9495+
value = value.slice(1, value.length - 1);
9496+
quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1"));
9497+
}
9498+
result.parameters[key] = value;
9499+
}
9500+
if (index !== header.length) {
9501+
throw new TypeError("invalid parameter format");
9502+
}
9503+
return result;
9504+
}
9505+
function safeParse3(header) {
9506+
if (typeof header !== "string") {
9507+
return defaultContentType;
9508+
}
9509+
let index = header.indexOf(";");
9510+
const type = index !== -1 ? header.slice(0, index).trim() : header.trim();
9511+
if (mediaTypeRE.test(type) === false) {
9512+
return defaultContentType;
9513+
}
9514+
const result = {
9515+
type: type.toLowerCase(),
9516+
parameters: new NullObject()
9517+
};
9518+
if (index === -1) {
9519+
return result;
9520+
}
9521+
let key;
9522+
let match;
9523+
let value;
9524+
paramRE.lastIndex = index;
9525+
while (match = paramRE.exec(header)) {
9526+
if (match.index !== index) {
9527+
return defaultContentType;
9528+
}
9529+
index += match[0].length;
9530+
key = match[1].toLowerCase();
9531+
value = match[2];
9532+
if (value[0] === '"') {
9533+
value = value.slice(1, value.length - 1);
9534+
quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1"));
9535+
}
9536+
result.parameters[key] = value;
9537+
}
9538+
if (index !== header.length) {
9539+
return defaultContentType;
9540+
}
9541+
return result;
9542+
}
9543+
module.exports.default = { parse: parse3, safeParse: safeParse3 };
9544+
module.exports.parse = parse3;
9545+
module.exports.safeParse = safeParse3;
9546+
module.exports.defaultContentType = defaultContentType;
9547+
}
9548+
});
9549+
94549550
//
94559551
var import_core3 = __toESM(require_core(), 1);
94569552
var import_github3 = __toESM(require_github(), 1);
@@ -9795,10 +9891,10 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
97959891
return 1;
97969892
}
97979893
if ("CI" in env) {
9798-
if ("GITHUB_ACTIONS" in env || "GITEA_ACTIONS" in env) {
9894+
if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
97999895
return 3;
98009896
}
9801-
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
9897+
if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
98029898
return 1;
98039899
}
98049900
return min;
@@ -11377,6 +11473,9 @@ function withDefaults(oldDefaults, newDefaults) {
1137711473
}
1137811474
var endpoint = withDefaults(null, DEFAULTS);
1137911475

11476+
//
11477+
var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1);
11478+
1138011479
//
1138111480
var RequestError = class extends Error {
1138211481
name;
@@ -11523,14 +11622,25 @@ async function fetchWrapper(requestOptions) {
1152311622
return octokitResponse;
1152411623
}
1152511624
async function getResponseData(response) {
11625+
var _a;
1152611626
const contentType = response.headers.get("content-type");
11527-
if (/application\/json/.test(contentType)) {
11528-
return response.json().catch(() => response.text()).catch(() => "");
11529-
}
11530-
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
11531-
return response.text();
11627+
if (!contentType) {
11628+
return response.text().catch(() => "");
11629+
}
11630+
const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType);
11631+
if (mimetype.type === "application/json") {
11632+
let text = "";
11633+
try {
11634+
text = await response.text();
11635+
return JSON.parse(text);
11636+
} catch (err) {
11637+
return text;
11638+
}
11639+
} else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") {
11640+
return response.text().catch(() => "");
11641+
} else {
11642+
return response.arrayBuffer().catch(() => new ArrayBuffer(0));
1153211643
}
11533-
return response.arrayBuffer();
1153411644
}
1153511645
function toErrorMessage(data) {
1153611646
if (typeof data === "string") {
@@ -11901,6 +12011,9 @@ function withDefaults3(oldDefaults, newDefaults) {
1190112011
}
1190212012
var endpoint2 = withDefaults3(null, DEFAULTS2);
1190312013

12014+
//
12015+
var import_fast_content_type_parse2 = __toESM(require_fast_content_type_parse(), 1);
12016+
1190412017
//
1190512018
var RequestError2 = class extends Error {
1190612019
name;
@@ -12047,14 +12160,25 @@ async function fetchWrapper2(requestOptions) {
1204712160
return octokitResponse;
1204812161
}
1204912162
async function getResponseData2(response) {
12163+
var _a;
1205012164
const contentType = response.headers.get("content-type");
12051-
if (/application\/json/.test(contentType)) {
12052-
return response.json().catch(() => response.text()).catch(() => "");
12053-
}
12054-
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
12055-
return response.text();
12165+
if (!contentType) {
12166+
return response.text().catch(() => "");
12167+
}
12168+
const mimetype = (0, import_fast_content_type_parse2.safeParse)(contentType);
12169+
if (mimetype.type === "application/json") {
12170+
let text = "";
12171+
try {
12172+
text = await response.text();
12173+
return JSON.parse(text);
12174+
} catch (err) {
12175+
return text;
12176+
}
12177+
} else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") {
12178+
return response.text().catch(() => "");
12179+
} else {
12180+
return response.arrayBuffer().catch(() => new ArrayBuffer(0));
1205612181
}
12057-
return response.arrayBuffer();
1205812182
}
1205912183
function toErrorMessage2(data) {
1206012184
if (typeof data === "string") {
@@ -12246,7 +12370,7 @@ var createTokenAuth = function createTokenAuth2(token) {
1224612370
};
1224712371

1224812372
//
12249-
var VERSION6 = "6.1.2";
12373+
var VERSION6 = "6.1.3";
1225012374

1225112375
//
1225212376
var noop = () => {

.github/workflows/pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ jobs:
9595
- name: Run CI tests for framework
9696
run: yarn tsx ./scripts/build/build-packages-dist.mts
9797
- name: Archive build artifacts
98-
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
98+
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
9999
with:
100100
name: pr-artifacts-${{ github.event.number }}
101101
path: dist/packages-dist/

.github/workflows/scorecard.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ jobs:
3939

4040
# Upload the results as artifacts.
4141
- name: 'Upload artifact'
42-
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
42+
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
4343
with:
4444
name: SARIF file
4545
path: results.sarif
4646
retention-days: 5
4747

4848
# Upload the results to GitHub's code scanning dashboard.
4949
- name: 'Upload to code-scanning'
50-
uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
50+
uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
5151
with:
5252
sarif_file: results.sarif

CHANGELOG.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -952,10 +952,6 @@ Blog post: https://blog.angular.dev/meet-angular-v19-7b29dfd05b84
952952
### compiler-cli
953953
- * Angular no longer supports TypeScript versions older than 5.4.
954954
### core
955-
- `OnPush` views at the root of the application need to
956-
be marked dirty for their host bindings to refresh. Previously, the host
957-
bindings were refreshed for all root views without respecting the
958-
`OnPush` change detection strategy.
959955
- `OnPush` views at the root of the application need to
960956
be marked dirty for their host bindings to refresh. Previously, the host
961957
bindings were refreshed for all root views without respecting the

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ To ensure consistency throughout the source code, keep these rules in mind as yo
205205

206206
* All features or bug fixes **must be tested** by one or more specs (unit-tests).
207207
* All public API methods **must be documented**.
208-
* We follow [Google's JavaScript Style Guide][js-style-guide], but wrap all code at **100 characters**.
208+
* We follow [Google's TypeScript Style Guide][ts-style-guide], but wrap all code at **100 characters**.
209209
210210
An automated formatter is available, see [DEVELOPER.md](contributing-docs/building-and-testing-angular.md#formatting-your-source-code).
211211
@@ -396,4 +396,4 @@ The following documents can help you sort out issues with GitHub accounts and mu
396396
[github]: https://github.com/angular/angular
397397
[discord]: https://discord.gg/angular
398398
[individual-cla]: https://cla.developers.google.com/about/google-individual
399-
[js-style-guide]: https://google.github.io/styleguide/jsguide.html
399+
[ts-style-guide]: https://google.github.io/styleguide/tsguide.html

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
The MIT License
22

3-
Copyright (c) 2010-2024 Google LLC. https://angular.dev/license
3+
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

WORKSPACE

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,10 @@ cldr_xml_data_repository(
143143
# sass rules
144144
http_archive(
145145
name = "io_bazel_rules_sass",
146-
sha256 = "1b11ce2e7ced21522c83e6c64e9256eb18cd8d89afb8a69e18e6f3e2d3a138a8",
147-
strip_prefix = "rules_sass-df7d2a95e1fa6e15bdb8a796756e276b2289f29a",
146+
sha256 = "0eae9a0c840e1e0d0b9ace056f8bde06384315315c4e2ebdb5cec722d1d4134b",
147+
strip_prefix = "rules_sass-aff53ca13ff2af82d323adb02a83c45a301e9ae8",
148148
urls = [
149-
"https://github.com/bazelbuild/rules_sass/archive/df7d2a95e1fa6e15bdb8a796756e276b2289f29a.zip",
149+
"https://github.com/bazelbuild/rules_sass/archive/aff53ca13ff2af82d323adb02a83c45a301e9ae8.zip",
150150
],
151151
)
152152

adev/shared-docs/pipeline/api-gen/rendering/templates/header-api.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,7 @@ export function HeaderApi(props: {entry: DocEntryRenderable; showFullDescription
3636
<div className={HEADER_ENTRY_TITLE}>
3737
<div>
3838
<h1>{entry.name}</h1>
39-
<div
40-
className={HEADER_ENTRY_LABEL}
41-
data-mode={'full'}
42-
data-type={entry.entryType.toLowerCase()}
43-
>
39+
<div className={`${HEADER_ENTRY_LABEL} type-${entry.entryType.toLowerCase()} full`}>
4440
{getEntryTypeDisplayName(entry.entryType)}
4541
</div>
4642
{entry.isDeprecated && (

adev/shared-docs/styles/_api-item-label.scss

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
background-color 0.3s ease;
1515
text-transform: capitalize;
1616

17-
&[data-mode='short'] {
17+
&:not(.full) {
1818
height: 22px;
1919
width: 22px;
2020
}
2121

22-
&[data-mode='full'] {
22+
&.full {
2323
font-size: 0.75rem;
2424
padding: 0.25rem 0.5rem;
2525
}
@@ -44,58 +44,58 @@
4444
background: color-mix(in srgb, var(--label-theme) 10%, white);
4545
}
4646

47-
&[data-type='undecorated_class'],
48-
&[data-type='class'] {
47+
&.type-undecorated_class,
48+
&.type-class {
4949
--label-theme: var(--symbolic-purple);
5050
}
5151

52-
&[data-type='constant'],
53-
&[data-type='const'] {
52+
&.type-constant,
53+
&.type-const {
5454
--label-theme: var(--symbolic-gray);
5555
}
5656

57-
&[data-type='decorator'] {
57+
&.type-decorator {
5858
--label-theme: var(--symbolic-blue);
5959
}
6060

61-
&[data-type='directive'] {
61+
&.type-directive {
6262
--label-theme: var(--symbolic-pink);
6363
}
6464

65-
&[data-type='element'] {
65+
&.type-element {
6666
--label-theme: var(--symbolic-orange);
6767
}
6868

69-
&[data-type='enum'] {
69+
&.type-enum {
7070
--label-theme: var(--symbolic-yellow);
7171
}
7272

73-
&[data-type='function'] {
73+
&.type-function {
7474
--label-theme: var(--symbolic-green);
7575
}
7676

77-
&[data-type='interface'] {
77+
&.type-interface {
7878
--label-theme: var(--symbolic-cyan);
7979
}
8080

81-
&[data-type='pipe'] {
81+
&.type-pipe {
8282
--label-theme: var(--symbolic-teal);
8383
}
8484

85-
&[data-type='ng_module'] {
85+
&.type-ng_module {
8686
--label-theme: var(--symbolic-brown);
8787
}
8888

89-
&[data-type='type_alias'] {
89+
&.type-type_alias {
9090
--label-theme: var(--symbolic-lime);
9191
}
9292

93-
&[data-type='block'] {
93+
&.type-block {
9494
--label-theme: var(--vivid-pink);
9595
}
9696

97-
&[data-type='developer_preview'],
98-
&[data-type='deprecated'] {
97+
&.type-developer_preview,
98+
&.type-deprecated {
9999
--label-theme: var(--hot-red);
100100
}
101101
}

adev/shared-docs/styles/docs/_mermaid.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
fill: var(--page-background) !important;
5959
}
6060

61-
.nodeLabel {
61+
.nodeLabel:not(.node:has(polygon) .nodeLabel) {
6262
fill: var(--primary-contrast) !important;
6363
color: var(--primary-contrast) !important;
6464
}

0 commit comments

Comments
 (0)