@unhead/angular 3.0.0-beta.10 → 3.0.0-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -10,7 +10,7 @@ function provideClientHead(options = {}) {
|
|
|
10
10
|
const document = inject(DOCUMENT);
|
|
11
11
|
const domRenderer = createDomRenderer({ document });
|
|
12
12
|
let head;
|
|
13
|
-
const debouncedRenderer = createDebouncedFn(() => domRenderer(head), fn => setTimeout(
|
|
13
|
+
const debouncedRenderer = createDebouncedFn(() => domRenderer(head), fn => setTimeout(fn, 0));
|
|
14
14
|
head = createHead({ document, render: debouncedRenderer, ...options });
|
|
15
15
|
return head;
|
|
16
16
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unhead-angular-client.mjs","sources":["../../client/src/client.ts","../../client/src/public_api.ts","../../client/src/unhead-angular-client.ts"],"sourcesContent":["import type { CreateClientHeadOptions, Unhead } from 'unhead/types'\nimport { DOCUMENT } from '@angular/common'\nimport { inject, makeEnvironmentProviders } from '@angular/core'\nimport { UnheadInjectionToken } from '@unhead/angular'\nimport { createHead as _createClientHead, createDebouncedFn, createDomRenderer } from 'unhead/client'\n\nexport function provideClientHead(options: CreateClientHeadOptions = {}) {\n return makeEnvironmentProviders([{\n provide: UnheadInjectionToken,\n useFactory: () => {\n const document = inject(DOCUMENT)\n const domRenderer = createDomRenderer({ document })\n let head: Unhead\n const debouncedRenderer = createDebouncedFn(() => domRenderer(head), fn => setTimeout(
|
|
1
|
+
{"version":3,"file":"unhead-angular-client.mjs","sources":["../../client/src/client.ts","../../client/src/public_api.ts","../../client/src/unhead-angular-client.ts"],"sourcesContent":["import type { CreateClientHeadOptions, Unhead } from 'unhead/types'\nimport { DOCUMENT } from '@angular/common'\nimport { inject, makeEnvironmentProviders } from '@angular/core'\nimport { UnheadInjectionToken } from '@unhead/angular'\nimport { createHead as _createClientHead, createDebouncedFn, createDomRenderer } from 'unhead/client'\n\nexport function provideClientHead(options: CreateClientHeadOptions = {}) {\n return makeEnvironmentProviders([{\n provide: UnheadInjectionToken,\n useFactory: () => {\n const document = inject(DOCUMENT)\n const domRenderer = createDomRenderer({ document })\n let head: Unhead\n const debouncedRenderer = createDebouncedFn(() => domRenderer(head), fn => setTimeout(fn, 0))\n head = _createClientHead({ document, render: debouncedRenderer, ...options })\n return head\n },\n }])\n}\n","/*\n * Public API Surface of unhead\n */\n\nexport * from './client'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_createClientHead"],"mappings":";;;;;AAMM,SAAU,iBAAiB,CAAC,OAAA,GAAmC,EAAE,EAAA;IACrE,OAAO,wBAAwB,CAAC,CAAC;AAC/B,YAAA,OAAO,EAAE,oBAAoB;YAC7B,UAAU,EAAE,MAAK;AACf,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjC,MAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnD,gBAAA,IAAI,IAAY;gBAChB,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7F,gBAAA,IAAI,GAAGA,UAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;AAC7E,gBAAA,OAAO,IAAI;YACb,CAAC;AACF,SAAA,CAAC,CAAC;AACL;;AClBA;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -6,8 +6,10 @@ import { renderSSRHead, createHead } from 'unhead/server';
|
|
|
6
6
|
import { DOCUMENT } from '@angular/common';
|
|
7
7
|
import { parseHtmlForUnheadExtraction } from 'unhead/parser';
|
|
8
8
|
|
|
9
|
+
const ATTR_MATCH_RE = /([a-z0-9-]+)(?:="([^"]*)")?/i;
|
|
10
|
+
const ATTR_RE = /([a-z0-9-]+(?:="[^"]*")?)/gi;
|
|
9
11
|
function attrToElement(element, acc) {
|
|
10
|
-
const [key, value] = acc.match(
|
|
12
|
+
const [key, value] = acc.match(ATTR_MATCH_RE)?.slice(1, 3) || [];
|
|
11
13
|
if (!key)
|
|
12
14
|
return;
|
|
13
15
|
if (value === undefined) {
|
|
@@ -31,7 +33,6 @@ function attrToElement(element, acc) {
|
|
|
31
33
|
element.setAttribute(key, value);
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
|
-
const attrRegex = /([a-z0-9-]+(?:="[^"]*")?)/gi;
|
|
35
36
|
class UnheadSSRService {
|
|
36
37
|
document;
|
|
37
38
|
unhead;
|
|
@@ -45,15 +46,15 @@ class UnheadSSRService {
|
|
|
45
46
|
const { headTags, htmlAttrs, bodyAttrs, bodyTags, bodyTagsOpen } = renderSSRHead(this.unhead, {
|
|
46
47
|
omitLineBreaks: false,
|
|
47
48
|
});
|
|
48
|
-
htmlAttrs.match(
|
|
49
|
-
bodyAttrs.match(
|
|
49
|
+
htmlAttrs.match(ATTR_RE)?.forEach(attr => attrToElement(this.document.documentElement, attr));
|
|
50
|
+
bodyAttrs.match(ATTR_RE)?.forEach(attr => attrToElement(this.document.body, attr));
|
|
50
51
|
this.document.body.innerHTML = bodyTagsOpen + this.document.body.innerHTML + bodyTags;
|
|
51
52
|
this.document.head.innerHTML = headTags;
|
|
52
53
|
}
|
|
53
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
54
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UnheadSSRService, deps: [{ token: DOCUMENT }, { token: UnheadInjectionToken }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
55
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UnheadSSRService, providedIn: 'root' });
|
|
55
56
|
}
|
|
56
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UnheadSSRService, decorators: [{
|
|
57
58
|
type: Injectable,
|
|
58
59
|
args: [{
|
|
59
60
|
providedIn: 'root',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unhead-angular-server.mjs","sources":["../../server/src/ssr.service.ts","../../server/src/server.ts","../../server/src/public_api.ts","../../server/src/unhead-angular-server.ts"],"sourcesContent":["import type { Unhead as UnheadSchema } from 'unhead/types'\nimport { DOCUMENT } from '@angular/common'\nimport { Inject, Injectable } from '@angular/core'\nimport { UnheadInjectionToken } from '@unhead/angular'\nimport { parseHtmlForUnheadExtraction } from 'unhead/parser'\nimport { renderSSRHead } from 'unhead/server'\n\nfunction attrToElement(element: HTMLElement, acc: string) {\n const [key, value] = acc.match(
|
|
1
|
+
{"version":3,"file":"unhead-angular-server.mjs","sources":["../../server/src/ssr.service.ts","../../server/src/server.ts","../../server/src/public_api.ts","../../server/src/unhead-angular-server.ts"],"sourcesContent":["import type { Unhead as UnheadSchema } from 'unhead/types'\nimport { DOCUMENT } from '@angular/common'\nimport { Inject, Injectable } from '@angular/core'\nimport { UnheadInjectionToken } from '@unhead/angular'\nimport { parseHtmlForUnheadExtraction } from 'unhead/parser'\nimport { renderSSRHead } from 'unhead/server'\n\nconst ATTR_MATCH_RE = /([a-z0-9-]+)(?:=\"([^\"]*)\")?/i\nconst ATTR_RE = /([a-z0-9-]+(?:=\"[^\"]*\")?)/gi\n\nfunction attrToElement(element: HTMLElement, acc: string) {\n const [key, value] = acc.match(ATTR_MATCH_RE)?.slice(1, 3) || []\n if (!key)\n return\n\n if (value === undefined) {\n element.setAttribute(key, '')\n }\n else if (key === 'style') {\n const styleObj = value.split(';').reduce((acc, style) => {\n const [prop, val] = style.split(':').map(s => s.trim())\n if (prop && val)\n acc[prop] = val\n return acc\n }, {} as Record<string, string>)\n Object.entries(styleObj).forEach(([prop, val]) => {\n element.style.setProperty(prop, val)\n })\n }\n else if (key === 'class') {\n value.split(' ').forEach(className => element.classList.add(className))\n }\n else {\n element.setAttribute(key, value)\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnheadSSRService {\n constructor(\n @Inject(DOCUMENT) private document: Document,\n @Inject(UnheadInjectionToken) private unhead: UnheadSchema,\n ) {}\n\n async render() {\n const { input } = parseHtmlForUnheadExtraction(this.document.documentElement.outerHTML)\n this.unhead.entries.set(0, { _i: 0, input, options: {} })\n const { headTags, htmlAttrs, bodyAttrs, bodyTags, bodyTagsOpen } = renderSSRHead(this.unhead, {\n omitLineBreaks: false,\n })\n htmlAttrs.match(ATTR_RE)?.forEach(attr => attrToElement(this.document.documentElement, attr))\n bodyAttrs.match(ATTR_RE)?.forEach(attr => attrToElement(this.document.body, attr))\n this.document.body.innerHTML = bodyTagsOpen + this.document.body.innerHTML + bodyTags\n this.document.head.innerHTML = headTags\n }\n}\n","import type { CreateServerHeadOptions } from 'unhead/types'\nimport { makeEnvironmentProviders } from '@angular/core'\nimport { BEFORE_APP_SERIALIZED } from '@angular/platform-server'\nimport { UnheadInjectionToken } from '@unhead/angular'\nimport { createHead as _createServerHead } from 'unhead/server'\nimport { UnheadSSRService } from './ssr.service'\n\nexport function provideServerHead(options: CreateServerHeadOptions = {}) {\n const head = _createServerHead(options)\n return makeEnvironmentProviders([\n { provide: UnheadInjectionToken, useValue: head },\n UnheadSSRService,\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: (service: UnheadSSRService) => () => {\n return service.render()\n },\n deps: [UnheadSSRService],\n multi: true,\n },\n ])\n}\n","/*\n * Public API Surface of unhead\n */\n\nexport * from './server'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_createServerHead"],"mappings":"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"}
|
|
@@ -112,10 +112,10 @@ class Head {
|
|
|
112
112
|
ngOnDestroy() {
|
|
113
113
|
this.headEntry.dispose();
|
|
114
114
|
}
|
|
115
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
116
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.
|
|
115
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: Head, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: Head, isStandalone: true, selector: "unhead-head", ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
|
|
117
117
|
}
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: Head, decorators: [{
|
|
119
119
|
type: Component,
|
|
120
120
|
args: [{
|
|
121
121
|
selector: 'unhead-head',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unhead/angular",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
4
|
+
"version": "3.0.0-beta.12",
|
|
5
5
|
"description": "Full-stack <head> manager built for Angular.",
|
|
6
6
|
"author": "Harlan Wilton <harlan@harlanzw.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -61,19 +61,19 @@
|
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"tslib": "^2.8.1",
|
|
64
|
-
"unhead": "3.0.0-beta.
|
|
64
|
+
"unhead": "3.0.0-beta.12"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@angular-devkit/build-angular": "^21.
|
|
68
|
-
"@angular/cli": "^21.
|
|
69
|
-
"@angular/common": "^21.
|
|
70
|
-
"@angular/compiler": "^21.
|
|
71
|
-
"@angular/compiler-cli": "^21.
|
|
72
|
-
"@angular/core": "^21.
|
|
73
|
-
"@angular/platform-browser": "^21.
|
|
74
|
-
"@angular/platform-browser-dynamic": "^21.
|
|
75
|
-
"@angular/platform-server": "^21.
|
|
76
|
-
"zone.js": "^0.16.
|
|
67
|
+
"@angular-devkit/build-angular": "^21.2.1",
|
|
68
|
+
"@angular/cli": "^21.2.1",
|
|
69
|
+
"@angular/common": "^21.2.2",
|
|
70
|
+
"@angular/compiler": "^21.2.2",
|
|
71
|
+
"@angular/compiler-cli": "^21.2.2",
|
|
72
|
+
"@angular/core": "^21.2.2",
|
|
73
|
+
"@angular/platform-browser": "^21.2.2",
|
|
74
|
+
"@angular/platform-browser-dynamic": "^21.2.2",
|
|
75
|
+
"@angular/platform-server": "^21.2.2",
|
|
76
|
+
"zone.js": "^0.16.1"
|
|
77
77
|
},
|
|
78
78
|
"scripts": {
|
|
79
79
|
"build": "ng build",
|