Skip to content

Commit 9d3bb1d

Browse files
7d0ba0c refactor(compiler): trigger hmr load on initialization (#58465)
1 parent af31889 commit 9d3bb1d

File tree

5 files changed

+59
-40
lines changed

5 files changed

+59
-40
lines changed

BUILD_INFO

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Fri Nov 1 16:55:45 UTC 2024
2-
13f1de33513e75059985796d093246dc65c0fdc7
1+
Fri Nov 1 19:19:08 UTC 2024
2+
7d0ba0cac85220cbbe4044667a51e5b95512f5d6

fesm2022/compiler.mjs

Lines changed: 53 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @license Angular v19.1.0-next.0+sha-13f1de3
2+
* @license Angular v19.1.0-next.0+sha-7d0ba0c
33
* (c) 2010-2024 Google LLC. https://angular.io/
44
* License: MIT
55
*/
@@ -30836,7 +30836,7 @@ function publishFacade(global) {
3083630836
* @description
3083730837
* Entry point for all public APIs of the compiler package.
3083830838
*/
30839-
const VERSION = new Version('19.1.0-next.0+sha-13f1de3');
30839+
const VERSION = new Version('19.1.0-next.0+sha-7d0ba0c');
3084030840

3084130841
class CompilerConfig {
3084230842
defaultEncapsulation;
@@ -32591,38 +32591,57 @@ function compileHmrInitializer(meta) {
3259132591
const urlPartial = `/@ng/component?c=${id}&t=`;
3259232592
const moduleName = 'm';
3259332593
const dataName = 'd';
32594+
const timestampName = 't';
32595+
const importCallbackName = `${meta.className}_HmrLoad`;
3259432596
const locals = meta.locals.map((localName) => variable(localName));
32595-
// ɵɵreplaceMetadata(Comp, m.default, core, [...]);
32596-
const replaceMetadata = importExpr(Identifiers.replaceMetadata)
32597-
.callFn([
32598-
meta.type,
32599-
variable(moduleName).prop('default'),
32600-
new ExternalExpr(Identifiers.core),
32601-
literalArr(locals),
32602-
]);
32603-
// (m) => ɵɵreplaceMetadata(...)
32604-
const replaceCallback = arrowFn([new FnParam(moduleName)], replaceMetadata);
32605-
// '<urlPartial>' + encodeURIComponent(d.timestamp)
32597+
// m.default
32598+
const defaultRead = variable(moduleName).prop('default');
32599+
// ɵɵreplaceMetadata(Comp, m.default, [...]);
32600+
const replaceCall = importExpr(Identifiers.replaceMetadata)
32601+
.callFn([meta.type, defaultRead, new ExternalExpr(Identifiers.core), literalArr(locals)]);
32602+
// (m) => m.default && ɵɵreplaceMetadata(...)
32603+
const replaceCallback = arrowFn([new FnParam(moduleName)], defaultRead.and(replaceCall));
32604+
// '<urlPartial>' + encodeURIComponent(t)
3260632605
const urlValue = literal(urlPartial)
32607-
.plus(variable('encodeURIComponent').callFn([variable(dataName).prop('timestamp')]));
32608-
// import(/* @vite-ignore */ url).then(() => replaceMetadata(...));
32609-
// The vite-ignore special comment is required to avoid Vite from generating a superfluous
32610-
// warning for each usage within the development code. If Vite provides a method to
32611-
// programmatically avoid this warning in the future, this added comment can be removed here.
32612-
const dynamicImport = new DynamicImportExpr(urlValue, null, '@vite-ignore')
32613-
.prop('then')
32614-
.callFn([replaceCallback]);
32615-
// (d) => { if (d.id === <id>) { replaceMetadata(...) } }
32616-
const listenerCallback = arrowFn([new FnParam(dataName)], [ifStmt(variable(dataName).prop('id').equals(literal(id)), [dynamicImport.toStmt()])]);
32606+
.plus(variable('encodeURIComponent').callFn([variable(timestampName)]));
32607+
// function Cmp_HmrLoad(t) {
32608+
// import(/* @vite-ignore */ url).then((m) => m.default && replaceMetadata(...));
32609+
// }
32610+
const importCallback = new DeclareFunctionStmt(importCallbackName, [new FnParam(timestampName)], [
32611+
// The vite-ignore special comment is required to prevent Vite from generating a superfluous
32612+
// warning for each usage within the development code. If Vite provides a method to
32613+
// programmatically avoid this warning in the future, this added comment can be removed here.
32614+
new DynamicImportExpr(urlValue, null, '@vite-ignore')
32615+
.prop('then')
32616+
.callFn([replaceCallback])
32617+
.toStmt(),
32618+
], null, StmtModifier.Final);
32619+
// (d) => d.id === <id> && Cmp_HmrLoad(d.timestamp)
32620+
const updateCallback = arrowFn([new FnParam(dataName)], variable(dataName)
32621+
.prop('id')
32622+
.identical(literal(id))
32623+
.and(variable(importCallbackName).callFn([variable(dataName).prop('timestamp')])));
32624+
// Cmp_HmrLoad(Date.now());
32625+
// Initial call to kick off the loading in order to avoid edge cases with components
32626+
// coming from lazy chunks that change before the chunk has loaded.
32627+
const initialCall = variable(importCallbackName)
32628+
.callFn([variable('Date').prop('now').callFn([])]);
3261732629
// import.meta.hot
3261832630
const hotRead = variable('import').prop('meta').prop('hot');
3261932631
// import.meta.hot.on('angular:component-update', () => ...);
3262032632
const hotListener = hotRead
3262132633
.clone()
3262232634
.prop('on')
32623-
.callFn([literal('angular:component-update'), listenerCallback]);
32624-
// import.meta.hot && import.meta.hot.on(...)
32625-
return arrowFn([], [devOnlyGuardedExpression(hotRead.and(hotListener)).toStmt()]).callFn([]);
32635+
.callFn([literal('angular:component-update'), updateCallback]);
32636+
return arrowFn([], [
32637+
// function Cmp_HmrLoad() {...}.
32638+
importCallback,
32639+
// ngDevMode && Cmp_HmrLoad(Date.now());
32640+
devOnlyGuardedExpression(initialCall).toStmt(),
32641+
// ngDevMode && import.meta.hot && import.meta.hot.on(...)
32642+
devOnlyGuardedExpression(hotRead.and(hotListener)).toStmt(),
32643+
])
32644+
.callFn([]);
3262632645
}
3262732646
/**
3262832647
* Compiles the HMR update callback for a class.
@@ -32661,7 +32680,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
3266132680
function compileDeclareClassMetadata(metadata) {
3266232681
const definitionMap = new DefinitionMap();
3266332682
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
32664-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
32683+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3266532684
definitionMap.set('ngImport', importExpr(Identifiers.core));
3266632685
definitionMap.set('type', metadata.type);
3266732686
definitionMap.set('decorators', metadata.decorators);
@@ -32679,7 +32698,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
3267932698
callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? literal(null));
3268032699
callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? literal(null));
3268132700
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
32682-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
32701+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3268332702
definitionMap.set('ngImport', importExpr(Identifiers.core));
3268432703
definitionMap.set('type', metadata.type);
3268532704
definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -32774,7 +32793,7 @@ function createDirectiveDefinitionMap(meta) {
3277432793
const definitionMap = new DefinitionMap();
3277532794
const minVersion = getMinimumVersionForPartialOutput(meta);
3277632795
definitionMap.set('minVersion', literal(minVersion));
32777-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
32796+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3277832797
// e.g. `type: MyDirective`
3277932798
definitionMap.set('type', meta.type.value);
3278032799
if (meta.isStandalone !== undefined) {
@@ -33193,7 +33212,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
3319333212
function compileDeclareFactoryFunction(meta) {
3319433213
const definitionMap = new DefinitionMap();
3319533214
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
33196-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
33215+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3319733216
definitionMap.set('ngImport', importExpr(Identifiers.core));
3319833217
definitionMap.set('type', meta.type.value);
3319933218
definitionMap.set('deps', compileDependencies(meta.deps));
@@ -33228,7 +33247,7 @@ function compileDeclareInjectableFromMetadata(meta) {
3322833247
function createInjectableDefinitionMap(meta) {
3322933248
const definitionMap = new DefinitionMap();
3323033249
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
33231-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
33250+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3323233251
definitionMap.set('ngImport', importExpr(Identifiers.core));
3323333252
definitionMap.set('type', meta.type.value);
3323433253
// Only generate providedIn property if it has a non-null value
@@ -33279,7 +33298,7 @@ function compileDeclareInjectorFromMetadata(meta) {
3327933298
function createInjectorDefinitionMap(meta) {
3328033299
const definitionMap = new DefinitionMap();
3328133300
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
33282-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
33301+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3328333302
definitionMap.set('ngImport', importExpr(Identifiers.core));
3328433303
definitionMap.set('type', meta.type.value);
3328533304
definitionMap.set('providers', meta.providers);
@@ -33312,7 +33331,7 @@ function createNgModuleDefinitionMap(meta) {
3331233331
throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
3331333332
}
3331433333
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
33315-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
33334+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3331633335
definitionMap.set('ngImport', importExpr(Identifiers.core));
3331733336
definitionMap.set('type', meta.type.value);
3331833337
// We only generate the keys in the metadata if the arrays contain values.
@@ -33363,7 +33382,7 @@ function compileDeclarePipeFromMetadata(meta) {
3336333382
function createPipeDefinitionMap(meta) {
3336433383
const definitionMap = new DefinitionMap();
3336533384
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
33366-
definitionMap.set('version', literal('19.1.0-next.0+sha-13f1de3'));
33385+
definitionMap.set('version', literal('19.1.0-next.0+sha-7d0ba0c'));
3336733386
definitionMap.set('ngImport', importExpr(Identifiers.core));
3336833387
// e.g. `type: MyPipe`
3336933388
definitionMap.set('type', meta.type.value);

fesm2022/compiler.mjs.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @license Angular v19.1.0-next.0+sha-13f1de3
2+
* @license Angular v19.1.0-next.0+sha-7d0ba0c
33
* (c) 2010-2024 Google LLC. https://angular.io/
44
* License: MIT
55
*/

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@angular/compiler",
3-
"version": "19.1.0-next.0+sha-13f1de3",
3+
"version": "19.1.0-next.0+sha-7d0ba0c",
44
"description": "Angular - the compiler library",
55
"author": "angular",
66
"license": "MIT",
@@ -11,7 +11,7 @@
1111
"tslib": "^2.3.0"
1212
},
1313
"peerDependencies": {
14-
"@angular/core": "19.1.0-next.0+sha-13f1de3"
14+
"@angular/core": "19.1.0-next.0+sha-7d0ba0c"
1515
},
1616
"peerDependenciesMeta": {
1717
"@angular/core": {

0 commit comments

Comments
 (0)