@unhead/angular 3.0.0-beta.1 → 3.0.0-beta.11
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.
- package/dist/fesm2022/unhead-angular-client.mjs +5 -8
- package/dist/fesm2022/unhead-angular-client.mjs.map +1 -1
- package/dist/fesm2022/unhead-angular-server.mjs +7 -6
- package/dist/fesm2022/unhead-angular-server.mjs.map +1 -1
- package/dist/fesm2022/unhead-angular.mjs +3 -3
- package/dist/types/unhead-angular.d.ts +2 -2
- package/package.json +11 -11
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import { makeEnvironmentProviders, inject } from '@angular/core';
|
|
3
3
|
import { UnheadInjectionToken } from '@unhead/angular';
|
|
4
|
-
import {
|
|
4
|
+
import { createDomRenderer, createDebouncedFn, createHead } from 'unhead/client';
|
|
5
5
|
|
|
6
6
|
function provideClientHead(options = {}) {
|
|
7
7
|
return makeEnvironmentProviders([{
|
|
8
8
|
provide: UnheadInjectionToken,
|
|
9
9
|
useFactory: () => {
|
|
10
10
|
const document = inject(DOCUMENT);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
...options,
|
|
17
|
-
});
|
|
11
|
+
const domRenderer = createDomRenderer({ document });
|
|
12
|
+
let head;
|
|
13
|
+
const debouncedRenderer = createDebouncedFn(() => domRenderer(head), fn => setTimeout(() => fn(), 0));
|
|
14
|
+
head = createHead({ document, render: debouncedRenderer, ...options });
|
|
18
15
|
return head;
|
|
19
16
|
},
|
|
20
17
|
}]);
|
|
@@ -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 } from 'unhead/types'\nimport { DOCUMENT } from '@angular/common'\nimport { inject, makeEnvironmentProviders } from '@angular/core'\nimport { UnheadInjectionToken } from '@unhead/angular'\nimport { createHead as _createClientHead, createDebouncedFn,
|
|
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,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACrG,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;;;;"}
|
|
@@ -2,8 +2,9 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Inject, Injectable, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { BEFORE_APP_SERIALIZED } from '@angular/platform-server';
|
|
4
4
|
import { UnheadInjectionToken } from '@unhead/angular';
|
|
5
|
-
import {
|
|
5
|
+
import { renderSSRHead, createHead } from 'unhead/server';
|
|
6
6
|
import { DOCUMENT } from '@angular/common';
|
|
7
|
+
import { parseHtmlForUnheadExtraction } from 'unhead/parser';
|
|
7
8
|
|
|
8
9
|
function attrToElement(element, acc) {
|
|
9
10
|
const [key, value] = acc.match(/([a-z0-9-]+)(?:="([^"]*)")?/i)?.slice(1, 3) || [];
|
|
@@ -39,9 +40,9 @@ class UnheadSSRService {
|
|
|
39
40
|
this.unhead = unhead;
|
|
40
41
|
}
|
|
41
42
|
async render() {
|
|
42
|
-
const { input } =
|
|
43
|
+
const { input } = parseHtmlForUnheadExtraction(this.document.documentElement.outerHTML);
|
|
43
44
|
this.unhead.entries.set(0, { _i: 0, input, options: {} });
|
|
44
|
-
const { headTags, htmlAttrs, bodyAttrs, bodyTags, bodyTagsOpen } =
|
|
45
|
+
const { headTags, htmlAttrs, bodyAttrs, bodyTags, bodyTagsOpen } = renderSSRHead(this.unhead, {
|
|
45
46
|
omitLineBreaks: false,
|
|
46
47
|
});
|
|
47
48
|
htmlAttrs.match(attrRegex)?.forEach(attr => attrToElement(this.document.documentElement, attr));
|
|
@@ -49,10 +50,10 @@ class UnheadSSRService {
|
|
|
49
50
|
this.document.body.innerHTML = bodyTagsOpen + this.document.body.innerHTML + bodyTags;
|
|
50
51
|
this.document.head.innerHTML = headTags;
|
|
51
52
|
}
|
|
52
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
53
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.
|
|
53
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UnheadSSRService, deps: [{ token: DOCUMENT }, { token: UnheadInjectionToken }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
54
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UnheadSSRService, providedIn: 'root' });
|
|
54
55
|
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UnheadSSRService, decorators: [{
|
|
56
57
|
type: Injectable,
|
|
57
58
|
args: [{
|
|
58
59
|
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 {
|
|
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(/([a-z0-9-]+)(?:=\"([^\"]*)\")?/i)?.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\nconst attrRegex = /([a-z0-9-]+(?:=\"[^\"]*\")?)/gi\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(attrRegex)?.forEach(attr => attrToElement(this.document.documentElement, attr))\n bodyAttrs.match(attrRegex)?.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.0.
|
|
116
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.
|
|
115
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Head, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", 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.0.
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Head, decorators: [{
|
|
119
119
|
type: Component,
|
|
120
120
|
args: [{
|
|
121
121
|
selector: 'unhead-head',
|
|
@@ -3,14 +3,14 @@ import { UseHeadInput, HeadEntryOptions, ActiveHeadEntry, HeadSafe, UseScriptInp
|
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, OnDestroy } from '@angular/core';
|
|
5
5
|
|
|
6
|
-
declare function useUnhead(): Unhead<unhead_types.ResolvableHead>;
|
|
6
|
+
declare function useUnhead(): Unhead<unhead_types.ResolvableHead, unknown>;
|
|
7
7
|
declare function useHead(input?: UseHeadInput, options?: HeadEntryOptions): ActiveHeadEntry<UseHeadInput>;
|
|
8
8
|
declare function useHeadSafe(input?: HeadSafe, options?: HeadEntryOptions): ActiveHeadEntry<HeadSafe>;
|
|
9
9
|
declare function useSeoMeta(input?: UseSeoMetaInput, options?: HeadEntryOptions): ActiveHeadEntry<UseSeoMetaInput>;
|
|
10
10
|
declare function useScript<T extends Record<symbol | string, any> = Record<symbol | string, any>>(_input: UseScriptInput, _options?: UseScriptOptions<T>): UseScriptReturn<T>;
|
|
11
11
|
|
|
12
12
|
declare const headSymbol = "usehead";
|
|
13
|
-
declare const UnheadInjectionToken: InjectionToken<Unhead<unhead_types.ResolvableHead>>;
|
|
13
|
+
declare const UnheadInjectionToken: InjectionToken<Unhead<unhead_types.ResolvableHead, unknown>>;
|
|
14
14
|
|
|
15
15
|
interface NodeProps {
|
|
16
16
|
type: string | symbol;
|
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.11",
|
|
5
5
|
"description": "Full-stack <head> manager built for Angular.",
|
|
6
6
|
"author": "Harlan Wilton <harlan@harlanzw.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -61,18 +61,18 @@
|
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"tslib": "^2.8.1",
|
|
64
|
-
"unhead": "3.0.0-beta.
|
|
64
|
+
"unhead": "3.0.0-beta.11"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@angular-devkit/build-angular": "^21.0.
|
|
68
|
-
"@angular/cli": "^21.0.
|
|
69
|
-
"@angular/common": "^21.0.
|
|
70
|
-
"@angular/compiler": "^21.0.
|
|
71
|
-
"@angular/compiler-cli": "^21.0.
|
|
72
|
-
"@angular/core": "^21.0.
|
|
73
|
-
"@angular/platform-browser": "^21.0.
|
|
74
|
-
"@angular/platform-browser-dynamic": "^21.0.
|
|
75
|
-
"@angular/platform-server": "^21.0.
|
|
67
|
+
"@angular-devkit/build-angular": "^21.0.4",
|
|
68
|
+
"@angular/cli": "^21.0.4",
|
|
69
|
+
"@angular/common": "^21.0.6",
|
|
70
|
+
"@angular/compiler": "^21.0.6",
|
|
71
|
+
"@angular/compiler-cli": "^21.0.6",
|
|
72
|
+
"@angular/core": "^21.0.6",
|
|
73
|
+
"@angular/platform-browser": "^21.0.6",
|
|
74
|
+
"@angular/platform-browser-dynamic": "^21.0.6",
|
|
75
|
+
"@angular/platform-server": "^21.0.6",
|
|
76
76
|
"zone.js": "^0.16.0"
|
|
77
77
|
},
|
|
78
78
|
"scripts": {
|