{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":560697479,"defaultBranch":"main","name":"unhead","ownerLogin":"unjs","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-11-02T03:55:24.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/80154025?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1721524803.0","currentOid":""},"activityList":{"items":[{"before":"4d5eaa24ba06999558a18021a3b6b601470e18f9","after":null,"ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-07-21T01:20:03.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"}},{"before":"9325dfc698d768a2182a28270a8b540c34c332e6","after":"e034061a8e16bcbc6487051a627af05c720b7e5a","ref":"refs/heads/main","pushedAt":"2024-07-21T01:20:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"c5dc13d9ca6dc1149eefd441caf5647908cc15a8","after":"4d5eaa24ba06999558a18021a3b6b601470e18f9","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-07-20T19:55:41.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"2dc13f28764849fc836258f5afab1925fc7bd36a","after":"c5dc13d9ca6dc1149eefd441caf5647908cc15a8","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-07-20T08:41:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"b06cec5ec7cc5bcf9a8ffe864571a7b215b1d90a","after":"2dc13f28764849fc836258f5afab1925fc7bd36a","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-07-20T02:33:17.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"dcefefd70196b2c639f502b8d0c90f5216d0f93e","after":"9325dfc698d768a2182a28270a8b540c34c332e6","ref":"refs/heads/main","pushedAt":"2024-07-20T02:31:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"perf: optimize hot paths and reduce overhead for low-end devices (#368)\n\n* perf: compare values ​​directly instead of includes\r\n\r\n* perf: compare first character via access index instead of startsWith\r\n\r\n* perf: use Set + has instead of an array with includes\r\n\r\n* perf(shared): implement split once for fixKeyCase and resolveMetaKeyType\r\n\r\n* feat(shared): introduce thenable helper\r\n\r\n* perf(shared): use thenable in normalise for reduce async/await functions\r\n\r\n* perf(dom): use promise chain instead of async function in debouncedRenderDOMHead\r\n\r\n* chore(dom): remove async modifier for debouncedRenderDOMHead\r\n\r\n* perf(shared): remove unnecessary array spread in tagDedupeKey\r\n\r\n* refactor: undefined is allowed for spread object\r\n\r\n* perf(schema-org): avoid new array allocation in dedupeMerge\r\n\r\n* perf(dom): check empty class or style in foreach instead of allocation of filter\r\n\r\n* perf(dom): implement split once for style in trackCtx\r\n\r\n* perf(dom): convert tag name to lowercase once in renderDOMHead\r\n\r\n* refactor: compare with undefined without typeof in safe places\r\n\r\n* test(shared): add benchmark for processTemplateParams\r\n\r\n* perf(shared): move sub to top module in templateParams\r\n\r\n* perf(shared): avoid unnecessary operations in processTemplateParams\r\n\r\n* perf(shared): use single replacer in processTemplateParams\r\n\r\n* refactor(dom): move condition to else in renderDOMHead\r\n\r\n* perf(shared): combine filter in normaliseStyleClassProps\r\n\r\n* perf(shared): optimize normaliseEntryTags for handle tag promises\r\n\r\n* refactor: use arrow function instead of regular anonymous\r\n\r\n* perf(shared): cache allowed meta properties for tagDedupeKey\r\n\r\n* perf(shared): use concurrency chain instead of Promise.all in normaliseEntryTags\r\n\r\n* perf(unhead): allocate once third party dedupe keys in dedupe plugin\r\n\r\n* refactor(shared): remove second parameter in tagDedupeKey\r\n\r\n* fix(shared): normalise should handle consistently\r\n\r\n* perf(shared): reduce overhead from object.entries and map in normaliseEntryTags\r\n\r\n* perf(shared): promise should be edge case in normaliseProps\r\n\r\n* chore(shared): remove export from nestedNormaliseProps\r\n\r\n* perf(shared): promise should be edge case in normaliseEntryTags\r\n\r\n* fix(shared): switch condition in for i in nestedNormaliseEntryTags\r\n\r\n* chore(shared): rename resolvedTags to tagPromises in nestedNormaliseEntryTags\r\n\r\n* perf(shared): reduce overhead by using thenable in normaliseProps\r\n\r\n* perf(shared): promise should be edge case in normaliseTag\r\n\r\n* perf(shared): use for of instead of forEach in normaliseTag\r\n\r\n* perf(unhead): move common props to top of module in dedupe plugin\r\n\r\n* perf(unhead): use for in instead of object values in dedupe plugin\r\n\r\n* perf(unhead): use for of instead of forEach in dedupe plugin\r\n\r\n* perf(unhead): use for in instead of object entries in eventHandler plugin\r\n\r\nis a double acceleration of the plugin\r\n\r\n* perf(unhead): use slice & substring instead of replace in eventHandler\r\n\r\n* perf(unhead): move filter into loop body in sort plugin\r\n\r\n* perf(unhead): use substring instead of replace in sort plugin\r\n\r\n* perf(unhead): swap the loops in the sorting plugin\r\n\r\n* perf(shared): simplify complexity in tagWeight\r\n\r\n* perf(unhead): combine sorts in sort plugin\r\n\r\n* perf(unhead): reduce complexity to search in templateParams plugin\r\n\r\n* perf(unhead): move filter into loop body in templateParams plugin\r\n\r\n* perf(unhead): find and remove once templateParams tag in templateParams plugin\r\n\r\n* perf(unhead): improve contentAttrs handle in templateParams plugin\r\n\r\n* perf(unhead): speed up payload plugin using one loop\r\n\r\n* perf(unhead): compute props keys after static in dedupe plugin\r\n\r\n* perf(unhead): use splice instead of delete index + filter in titleTemplate plugin\r\n\r\n* perf(unhead): first check hasProps in dedupe plugin\r\n\r\n* perf(unhead): handle classes & styles without loop in dedupe plugin\r\n\r\n* perf(unhead): use object with null prototype in dedupe plugin\r\n\r\n* perf(unhead): use for of loop instead of map for patch entry\r\n\r\n* perf(dom): use for in loop for props instead of Object.entries in renderDOMHead\r\n\r\n* perf(dom): use for in loop for handle _eventHandlers in renderDOMHead\r\n\r\n* perf(dom): clear side effects in for in loop in renderDOMHead\r\n\r\n* perf(dom): replace loop with a direct property check for textContent and innerHTML\r\n\r\n* perf(dom): remove cast to array HTMLCollection in renderDOMHead\r\n\r\n* perf(unhead): speed up hashTag using for in loop & early returns\r\n\r\n* perf(vue): reduce overhead from resolveUnrefHeadInput\r\n\r\n* perf(dom): use set to store taken dedupe keys\r\n\r\n* perf(ssr): use string concatenation in propsToString\r\n\r\n* perf(ssr): add space before attrs in propsToString\r\n\r\n* perf(ssr): use string concatenation in ssrRenderTags\r\n\r\n* perf(ssr): use object.assign instead of spread operator\r\n\r\n* perf(shared): use for of instead of array map\r\n\r\n* perf(shared): check the static string first in fixKeyCase\r\n\r\n* perf(shared): use for in & for of loops in meta\r\n\r\n* perf(schema-org): use for in loop in resolveNodeId\r\n\r\n* perf(schema-org): use for in loop in stripEmptyProperties\r\n\r\n* perf(unhead): delete tag._duped if exists in dedupe plugin\r\n\r\n* perf(unhead): remove loop for check third party dedupe keys in dedupe plugin\r\n\r\n* perf(shared): reduce operations in eventHandler plugin","shortMessageHtmlLink":"perf: optimize hot paths and reduce overhead for low-end devices (#368)"}},{"before":null,"after":"4014dd3ca90b04f682a548a959855b9038b43115","ref":"refs/heads/pr-perf","pushedAt":"2024-07-20T02:19:48.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"Merge branch 'main' of github.com:unjs/unhead into pr-perf","shortMessageHtmlLink":"Merge branch 'main' of github.com:unjs/unhead into pr-perf"}},{"before":"5c6a6088b6d0569163ae0dd38f95336fcfa09552","after":null,"ref":"refs/heads/renovate/major-vitest-monorepo","pushedAt":"2024-07-20T02:15:57.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"}},{"before":null,"after":"b06cec5ec7cc5bcf9a8ffe864571a7b215b1d90a","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-07-20T02:15:48.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"ac10b45a39cc4b3c1d8b72d20525eb5fc7ffabb6","after":"dcefefd70196b2c639f502b8d0c90f5216d0f93e","ref":"refs/heads/main","pushedAt":"2024-07-20T02:14:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"test: add new ssr e2e benchmark","shortMessageHtmlLink":"test: add new ssr e2e benchmark"}},{"before":"dd5f49356912b4d0460e76784fb984ca3f9dc906","after":"5c6a6088b6d0569163ae0dd38f95336fcfa09552","ref":"refs/heads/renovate/major-vitest-monorepo","pushedAt":"2024-07-15T10:19:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update devdependency vitest to v2","shortMessageHtmlLink":"chore(deps): update devdependency vitest to v2"}},{"before":"c340e8074d64109a69d7dcd10a290b7b747f67fa","after":"ac10b45a39cc4b3c1d8b72d20525eb5fc7ffabb6","ref":"refs/heads/main","pushedAt":"2024-07-15T08:03:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: add bench tests","shortMessageHtmlLink":"chore: add bench tests"}},{"before":"ba09650dd4be0e84ca8e01cb552bb74e97a5e5ea","after":"c340e8074d64109a69d7dcd10a290b7b747f67fa","ref":"refs/heads/main","pushedAt":"2024-07-15T07:58:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: bump export sizes","shortMessageHtmlLink":"chore: bump export sizes"}},{"before":"108082397c51b1815884d2b08133953703b428a3","after":"ba09650dd4be0e84ca8e01cb552bb74e97a5e5ea","ref":"refs/heads/main","pushedAt":"2024-07-14T11:58:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: release v1.9.16","shortMessageHtmlLink":"chore: release v1.9.16"}},{"before":"4aefeaa854297d62752acf354627ccf7e6f66a97","after":"108082397c51b1815884d2b08133953703b428a3","ref":"refs/heads/main","pushedAt":"2024-07-14T11:53:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"fix(addons): honour titleTemplate `tagPriority`\n\nFixes https://github.com/harlan-zw/nuxt-seo/issues/137","shortMessageHtmlLink":"fix(addons): honour titleTemplate tagPriority"}},{"before":"763e98546c64b680220b311e920449f4dd351b40","after":"dd5f49356912b4d0460e76784fb984ca3f9dc906","ref":"refs/heads/renovate/major-vitest-monorepo","pushedAt":"2024-07-10T19:22:04.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update devdependency vitest to v2","shortMessageHtmlLink":"chore(deps): update devdependency vitest to v2"}},{"before":"959ef8b8b04c9334b3db02eb844dce66ae8f2634","after":"763e98546c64b680220b311e920449f4dd351b40","ref":"refs/heads/renovate/major-vitest-monorepo","pushedAt":"2024-07-08T17:17:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update devdependency vitest to v2","shortMessageHtmlLink":"chore(deps): update devdependency vitest to v2"}},{"before":null,"after":"959ef8b8b04c9334b3db02eb844dce66ae8f2634","ref":"refs/heads/renovate/major-vitest-monorepo","pushedAt":"2024-07-08T14:37:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update devdependency vitest to v2","shortMessageHtmlLink":"chore(deps): update devdependency vitest to v2"}},{"before":"7350036e98adf4325e559422a8162cb5e67ad0ce","after":"4aefeaa854297d62752acf354627ccf7e6f66a97","ref":"refs/heads/main","pushedAt":"2024-07-04T03:19:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: release v1.9.15","shortMessageHtmlLink":"chore: release v1.9.15"}},{"before":"b4b561f1f0b2a81698900aef5381f994c0507557","after":"7350036e98adf4325e559422a8162cb5e67ad0ce","ref":"refs/heads/main","pushedAt":"2024-07-04T03:02:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: bump deps","shortMessageHtmlLink":"chore: bump deps"}},{"before":"70696a01945f922e35a079c748ba9c5d7d8c0385","after":"b4b561f1f0b2a81698900aef5381f994c0507557","ref":"refs/heads/main","pushedAt":"2024-07-04T03:01:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"refactor: improve exposed useScript instance","shortMessageHtmlLink":"refactor: improve exposed useScript instance"}},{"before":"ad5664e839f5ddae911cc0f695d3003101f77303","after":"70696a01945f922e35a079c748ba9c5d7d8c0385","ref":"refs/heads/main","pushedAt":"2024-07-04T01:06:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"doc: use nuxt scripts","shortMessageHtmlLink":"doc: use nuxt scripts"}},{"before":"0e7a145242ccca2b6cd290db9bbaf28d483f71b4","after":"ad5664e839f5ddae911cc0f695d3003101f77303","ref":"refs/heads/main","pushedAt":"2024-07-03T02:22:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"doc: encode html\n\nFixes #364","shortMessageHtmlLink":"doc: encode <head> html"}},{"before":"7e19fa2b2350ad730b403ec410fd7ef7a0eab02f","after":"0e7a145242ccca2b6cd290db9bbaf28d483f71b4","ref":"refs/heads/main","pushedAt":"2024-07-01T11:45:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: bump docs deps","shortMessageHtmlLink":"chore: bump docs deps"}},{"before":"14853282c7c70399b1d3d4cd70ee884119e59e3f","after":"7e19fa2b2350ad730b403ec410fd7ef7a0eab02f","ref":"refs/heads/main","pushedAt":"2024-07-01T11:22:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"harlan-zw","name":"Harlan Wilton","path":"/harlan-zw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5326365?s=80&v=4"},"commit":{"message":"chore: bump docs deps","shortMessageHtmlLink":"chore: bump docs deps"}},{"before":"68ffd47b2f52d3471ced12dc6cd87d16c04af8e0","after":null,"ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-07-01T01:27:09.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"}},{"before":"8874455ca9353e66fc56ddd0ac7e59ea89c4b5d3","after":"14853282c7c70399b1d3d4cd70ee884119e59e3f","ref":"refs/heads/main","pushedAt":"2024-07-01T01:27:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"49e054c2887bbf6e29202f848f925c63022ea70d","after":"68ffd47b2f52d3471ced12dc6cd87d16c04af8e0","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-06-30T13:11:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"4b56f180490176f5c630eeb2bba5ecccbb1c364e","after":"49e054c2887bbf6e29202f848f925c63022ea70d","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-06-29T01:00:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}},{"before":"ba42094fc321d3cb1126deffcd711bd74539c668","after":"4b56f180490176f5c630eeb2bba5ecccbb1c364e","ref":"refs/heads/renovate/all-minor-patch","pushedAt":"2024-06-28T18:43:56.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"renovate[bot]","name":null,"path":"/apps/renovate","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/2740?s=80&v=4"},"commit":{"message":"chore(deps): update all non-major dependencies","shortMessageHtmlLink":"chore(deps): update all non-major dependencies"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEhNJOqgA","startCursor":null,"endCursor":null}},"title":"Activity · unjs/unhead"}