{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":574575168,"defaultBranch":"main","name":"angular","ownerLogin":"tomalaforge","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-12-05T15:59:22.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/30832608?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1696596778.0","currentOid":""},"activityList":{"items":[{"before":"327896606832bf6fbfc8f23989755123028136a8","after":"ee9605f3c858c3f3cc2268fe554e45866c3b0859","ref":"refs/heads/main","pushedAt":"2023-11-01T15:29:00.000Z","pushType":"push","commitsCount":130,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"fix(core): effects wait for ngOnInit for their first run (#52473)\n\nWhen an effect is created in a component constructor, it might read signals\nwhich are derived from component inputs. These signals may be unreliable or\n(in the case of the proposed input signals) may throw if accessed before the\ncomponent is first change detected (which is what makes required inputs\navailable).\n\nDepending on the scenario involved, the effect may or may not run before\nthis initialization takes place, which isn't a great developer experience.\nIn particular, effects created during CD (e.g. via control flow) work fine,\nas do effects created in bootstrap thanks to the sync CD it performs. When\nan effect is created through dynamic component creation outside of CD though\n(such as on router navigations), it runs before the component is first CD'd,\ncausing the issue.\n\nIn fact, in the signal components RFC we described how effects would wait\nuntil ngOnInit for their first execution for exactly this reason, but this\nbehavior was never implemented as it was thought our effect scheduling\ndesign made it unnecessary. This is true of the regular execution of effects\nbut the above scenario shows that *creation* of the effect is still\nvulnerable. Thus, this logic is needed.\n\nThis commit makes effects sensitive to their creation context, by injecting\n`ChangeDetectorRef` optionally. An effect created with an injector that's\ntied to a component will wait until that component is initialized before\ninitially being scheduled. TestBed effect flushing is also adjusted to\naccount for the additional interaction with change detection.\n\nPR Close #52473","shortMessageHtmlLink":"fix(core): effects wait for ngOnInit for their first run (angular#52473)"}},{"before":"7818d5c6e2e7ab451c47a089d8c3fc906d7b43c6","after":"327896606832bf6fbfc8f23989755123028136a8","ref":"refs/heads/main","pushedAt":"2023-10-23T08:59:53.000Z","pushType":"push","commitsCount":30,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"fix(router): Ensure newly resolved data is inherited by child routes (#52167)\n\nThe current way of computing a route's params and data recomputes\ninherited data from the inheritance root every time. When the\ninheritance strategy is \"emptyOnly\", this isn't necessarily the root of\nthe tree, but some point along the way (it stops once it reaches an\nancestor route with a component).\n\nInstead, this commit updates parameter inheritance to only inherit data\ndirectly from the parent route (again, instead of recomputing all\ninherited data back to the inheritance root). The only requirement for\nmaking this work is that the parent route data has already calculated\nand updated its own inherited data. This was really already a\nrequirement -- parents need to be processed before children.\n\nIn addition, the update to the inheritance algorithm in this commit\nrequires more of an understanding that a resolver running higher up in\nthe tree has to propagate inherited data downwards. The previous\nalgorithm hid this knowledge because resolvers would recompute inherited\ndata from the root when run. However, routes that did not have resolvers\nrerun or never had resolvers at all would not get the updated resolved data.\n\nfixes #51934\n\nPR Close #52167","shortMessageHtmlLink":"fix(router): Ensure newly resolved data is inherited by child routes (a…"}},{"before":"22fa9fe488dd72b2f65b8a3951d492c1f178b387","after":"7818d5c6e2e7ab451c47a089d8c3fc906d7b43c6","ref":"refs/heads/main","pushedAt":"2023-10-18T14:26:11.000Z","pushType":"push","commitsCount":158,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"perf(core): minimze trackBy calculations (#52227)\n\nRe-organize code to minimize number of calls to the\ntrackBy function.\n\nPR Close #52227","shortMessageHtmlLink":"perf(core): minimze trackBy calculations (angular#52227)"}},{"before":"eaa933d573336e0f33cd9eef30804d791ef45fdd","after":"fbf3f8f559d3fb4a690c4e70986dedf8b815d73c","ref":"refs/heads/docs/contributors-gde-thomaslaforge","pushedAt":"2023-10-06T13:27:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"docs: add thomas laforge to GDE resources and add angularchallenges to resources","shortMessageHtmlLink":"docs: add thomas laforge to GDE resources and add angularchallenges t…"}},{"before":"ec94254c5828dfd816ab59a17cae8e8284f6d7dc","after":"eaa933d573336e0f33cd9eef30804d791ef45fdd","ref":"refs/heads/docs/contributors-gde-thomaslaforge","pushedAt":"2023-10-06T13:03:11.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"docs(): add thomas laforge to GDE resources and add angularchallenges to resources","shortMessageHtmlLink":"docs(): add thomas laforge to GDE resources and add angularchallenges…"}},{"before":"e1728a2a392aa7fa237a50561469f99eb201a24c","after":"22fa9fe488dd72b2f65b8a3951d492c1f178b387","ref":"refs/heads/main","pushedAt":"2023-10-06T12:57:56.000Z","pushType":"push","commitsCount":87,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"docs: recommend enabling `fetch` support in HttpClient when using SSR (#52056)\n\nPR Close #52056","shortMessageHtmlLink":"docs: recommend enabling fetch support in HttpClient when using SSR ("}},{"before":"fa948c21998e1b5d1625dbe8f8ea2f4f7e16b181","after":"e1728a2a392aa7fa237a50561469f99eb201a24c","ref":"refs/heads/main","pushedAt":"2023-10-06T12:57:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"release: cut the v17.0.0-next.6 release","shortMessageHtmlLink":"release: cut the v17.0.0-next.6 release"}},{"before":"d7d7bd5d2fc701c5fa3fb49df999b62028c96640","after":null,"ref":"refs/heads/resource-angular-challenge","pushedAt":"2023-10-06T12:52:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"}},{"before":null,"after":"ec94254c5828dfd816ab59a17cae8e8284f6d7dc","ref":"refs/heads/docs/contributors-gde-thomaslaforge","pushedAt":"2023-10-06T11:42:53.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"docs: add thomas laforge to GDE resources","shortMessageHtmlLink":"docs: add thomas laforge to GDE resources"}},{"before":"2c17bf514868a028b3e7190724073288a3e257d0","after":"fa948c21998e1b5d1625dbe8f8ea2f4f7e16b181","ref":"refs/heads/main","pushedAt":"2023-10-06T09:07:41.000Z","pushType":"push","commitsCount":88,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"Merge branch 'angular:main' into main","shortMessageHtmlLink":"Merge branch 'angular:main' into main"}},{"before":"e3ba489e9838794e14d9244ba7732e4e4ab00b92","after":"d7d7bd5d2fc701c5fa3fb49df999b62028c96640","ref":"refs/heads/resource-angular-challenge","pushedAt":"2023-09-28T12:36:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"feat(resource): add angular challenges to the ressouces documentation on the angular website","shortMessageHtmlLink":"feat(resource): add angular challenges to the ressouces documentation…"}},{"before":null,"after":"e3ba489e9838794e14d9244ba7732e4e4ab00b92","ref":"refs/heads/resource-angular-challenge","pushedAt":"2023-09-28T12:32:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"feat(resource): add angular challenges to the ressouces documentation on the angular website","shortMessageHtmlLink":"feat(resource): add angular challenges to the ressouces documentation…"}},{"before":"e1728a2a392aa7fa237a50561469f99eb201a24c","after":"2c17bf514868a028b3e7190724073288a3e257d0","ref":"refs/heads/main","pushedAt":"2023-09-28T12:31:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"feat(resource): add angular challenges to the ressouces documentation on the angular website","shortMessageHtmlLink":"feat(resource): add angular challenges to the ressouces documentation…"}},{"before":"0a4f18a419ba68a7c8a2d22da85a7f88bd217840","after":"e1728a2a392aa7fa237a50561469f99eb201a24c","ref":"refs/heads/main","pushedAt":"2023-09-28T06:50:51.000Z","pushType":"push","commitsCount":56,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"release: cut the v17.0.0-next.6 release","shortMessageHtmlLink":"release: cut the v17.0.0-next.6 release"}},{"before":"0ee0f780e4c19d43dde9bac0bb6468ea6431d24b","after":"0a4f18a419ba68a7c8a2d22da85a7f88bd217840","ref":"refs/heads/main","pushedAt":"2023-09-21T10:07:33.000Z","pushType":"push","commitsCount":12,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"release: cut the v17.0.0-next.5 release","shortMessageHtmlLink":"release: cut the v17.0.0-next.5 release"}},{"before":"07a1aa300404969155ed1eb3cd02f4a766e07963","after":"0ee0f780e4c19d43dde9bac0bb6468ea6431d24b","ref":"refs/heads/main","pushedAt":"2023-09-20T07:41:26.000Z","pushType":"push","commitsCount":1342,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"build: update dependency jasmine to v5 (#51820)\n\nThe patch is to fix upstream bug in `@bazel/jasmine`. See: bazelbuild/rules_nodejs#3691\n\nPR Close #51820","shortMessageHtmlLink":"build: update dependency jasmine to v5 (angular#51820)"}},{"before":"f2ba19253d09786982ecfc913c11a5ed0806555f","after":"07a1aa300404969155ed1eb3cd02f4a766e07963","ref":"refs/heads/main","pushedAt":"2023-03-30T18:54:56.918Z","pushType":"push","commitsCount":18,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"feat(forms): Improve typings form (async)Validators (#48679)\n\nWith this commit, AsyncValidatorFn cannot be passed as ValidatorFn anymore in FormControl.\n\nfixes: #48676\n\nPR Close #48679","shortMessageHtmlLink":"feat(forms): Improve typings form (async)Validators (angular#48679)"}},{"before":"22b895a5b1a4660a6a85683264f0ef3d37b2864c","after":"f2ba19253d09786982ecfc913c11a5ed0806555f","ref":"refs/heads/main","pushedAt":"2023-03-30T07:31:13.587Z","pushType":"push","commitsCount":140,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"release: cut the v16.0.0-next.5 release","shortMessageHtmlLink":"release: cut the v16.0.0-next.5 release"}},{"before":"a28a08e504ff39dfd9e2557fcd9246b684e941a9","after":"4df84cff185ecb5d940224498904d8fed8a97965","ref":"refs/heads/feat-type-outlet","pushedAt":"2023-03-22T20:05:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"atscott","name":"Andrew Scott","path":"/atscott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/479713?s=80&v=4"},"commit":{"message":"fix(common): strict type checking for ngtemplateoutlet\n\nWhen we create a context to inject inside our ngTemplateOutlet, the context was declare as Object, therefore, there are no compilation error.\n\nNow if we add a context, we get error at compile type.\n\nBREAKING CHANGE: If the 'ngTemplateOutletContext' is different from the context, it will result in a compile-time error.\n\nBefore the change, the following template was compiling:\n\n```typescript\ninterface MyContext {\n $implicit: string;\n}\n\n@Component({\n standalone: true,\n imports: [NgTemplateOutlet],\n selector: 'person',\n template: `\n \n `,\n})\nexport class PersonComponent {\n myTemplateRef!: TemplateRef;\n}\n```\nHowever, it does not compile now because the 'xxx' property does not exist in 'MyContext', resulting in the error: 'Type '{ $implicit: string; xxx: string; }' is not assignable to type 'MyContext'.'\n\nThe solution is either:\n- add the 'xxx' property to 'MyContext' with the correct type or\n- add '$any(...)' inside the template to make the error disappear. However, adding '$any(...)' does not correct the error but only preserves the previous behavior of the code.\n\nfix #43510","shortMessageHtmlLink":"fix(common): strict type checking for ngtemplateoutlet"}},{"before":"e78d7fd675ac3d2be4e7b6fc496cde7161bed311","after":"a28a08e504ff39dfd9e2557fcd9246b684e941a9","ref":"refs/heads/feat-type-outlet","pushedAt":"2023-03-15T09:47:50.501Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"fix(common): strict type checking for ngtemplateoutlet\n\nWhen we create a context to inject inside our ngTemplateOutlet, the context was declare as Object, therefore, there are no compilation error.\n\nNow if we add a context, we get error at compile type.\n\nBREAKING CHANGE: If the 'ngTemplateOutletContext' is different from the context, it will result in a compile-time error.\n\nBefore the change, the following template was compiling:\n\n```typescript\ninterface MyContext {\n $implicit: string;\n}\n\n@Component({\n standalone: true,\n imports: [NgTemplateOutlet],\n selector: 'person',\n template: `\n \n `,\n})\nexport class PersonComponent {\n myTemplateRef!: TemplateRef;\n}\n```\nHowever, it does not compile now because the 'xxx' property does not exist in 'MyContext', resulting in the error: 'Type '{ $implicit: string; xxx: string; }' is not assignable to type 'MyContext'.'\n\nThe solution is either:\n- add the 'xxx' property to 'MyContext' with the correct type or\n- add '$any(...)' inside the template to make the error disappear. However, adding '$any(...)' does not correct the error but only preserves the previous behavior of the code.\n\nfix #43510","shortMessageHtmlLink":"fix(common): strict type checking for ngtemplateoutlet"}},{"before":"2de6dae16d4b0b83f0517a3033cda44ba44154ed","after":"22b895a5b1a4660a6a85683264f0ef3d37b2864c","ref":"refs/heads/main","pushedAt":"2023-03-15T09:10:39.421Z","pushType":"push","commitsCount":259,"pusher":{"login":"tomalaforge","name":"Laforge Thomas","path":"/tomalaforge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/30832608?s=80&v=4"},"commit":{"message":"refactor(core): add hydration logic for view containers (#49382)\n\nThis commit implements hydration support for view containers, which should make `*ngIf`, `*ngFor` and other structural directive work with hydration.\n\nThe logic also respects the `ngSkipHydration` flag and skips hydration in such cases.\n\nPR Close #49382","shortMessageHtmlLink":"refactor(core): add hydration logic for view containers (angular#49382)"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADpQ-QFwA","startCursor":null,"endCursor":null}},"title":"Activity · tomalaforge/angular"}