unhead 3.0.1 → 3.0.3
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/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +6 -63
- package/dist/index.d.mts +6 -7
- package/dist/index.d.ts +6 -7
- package/dist/index.mjs +2 -1
- package/dist/legacy.d.mts +26 -0
- package/dist/legacy.d.ts +26 -0
- package/dist/legacy.mjs +63 -0
- package/dist/parser.d.mts +1 -1
- package/dist/parser.d.ts +1 -1
- package/dist/plugins.d.mts +2 -2
- package/dist/plugins.d.ts +2 -2
- package/dist/plugins.mjs +5 -129
- package/dist/scripts.d.mts +4 -4
- package/dist/scripts.d.ts +4 -4
- package/dist/server.d.mts +4 -4
- package/dist/server.d.ts +4 -4
- package/dist/shared/{unhead.D_bywjUE.mjs → unhead.A4ndrqqe.mjs} +2 -5
- package/dist/shared/{unhead.dhQT0IKI.d.mts → unhead.BAm7OHQx.d.mts} +1 -1
- package/dist/shared/unhead.BHSg79VK.d.ts +6 -0
- package/dist/shared/{unhead.JGBJYEOZ.d.ts → unhead.BPps6U7z.d.ts} +1 -1
- package/dist/shared/{unhead.UFdAtJOd.d.ts → unhead.BTcZ161H.d.ts} +1 -1
- package/dist/shared/unhead.BdWlwKav.d.mts +6 -0
- package/dist/shared/{unhead.BRPfhzdc.d.ts → unhead.BkiQF63F.d.ts} +2 -2
- package/dist/shared/unhead.CH30252c.mjs +129 -0
- package/dist/shared/{unhead.BxsOjg-Q.d.mts → unhead.CSqfLsrn.d.mts} +2 -2
- package/dist/shared/unhead.CUXLLRtV.mjs +5 -0
- package/dist/shared/{unhead.BEof8Qjb.d.ts → unhead.CZmLNN-R.d.ts} +1 -1
- package/dist/shared/{unhead.5pUZeb0i.d.mts → unhead.DBv5uRwR.d.mts} +56 -27
- package/dist/shared/{unhead.5pUZeb0i.d.ts → unhead.DBv5uRwR.d.ts} +56 -27
- package/dist/shared/{unhead.CyKsApKH.d.mts → unhead.DFLvtb3Z.d.mts} +1 -1
- package/dist/shared/{unhead.D_sLwV5L.d.ts → unhead.DMQDfSsC.d.ts} +2 -2
- package/dist/shared/{unhead.BAv4ddL5.d.mts → unhead.DR0woClT.d.mts} +1 -1
- package/dist/shared/{unhead.vQPF0cJs.d.ts → unhead.DeVAJflP.d.ts} +1 -1
- package/dist/shared/unhead.YnmwhfIN.mjs +64 -0
- package/dist/shared/{unhead.DvMT2vYs.d.mts → unhead.myNKutCo.d.mts} +2 -2
- package/dist/shared/{unhead.CUEmFl2d.d.mts → unhead.vAjfKrQR.d.mts} +1 -1
- package/dist/stream/client.d.mts +3 -3
- package/dist/stream/client.d.ts +3 -3
- package/dist/stream/server.d.mts +3 -3
- package/dist/stream/server.d.ts +3 -3
- package/dist/types.d.mts +6 -6
- package/dist/types.d.ts +6 -6
- package/dist/utils.d.mts +2 -2
- package/dist/utils.d.ts +2 -2
- package/package.json +8 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { d as defineHeadPlugin } from './unhead.CUXLLRtV.mjs';
|
|
2
|
+
import { p as processTemplateParams } from './unhead.BGFxPGPQ.mjs';
|
|
3
|
+
|
|
4
|
+
const sortTags = (a, b) => a._w === b._w ? a._p - b._p : a._w - b._w;
|
|
5
|
+
const formatKey = (k) => !k.includes(":key") ? k.split(":").join(":key:") : k;
|
|
6
|
+
const AliasSortingPlugin = defineHeadPlugin({
|
|
7
|
+
key: "aliasSorting",
|
|
8
|
+
hooks: {
|
|
9
|
+
"tags:resolve": (ctx) => {
|
|
10
|
+
let m = false;
|
|
11
|
+
for (const t of ctx.tags) {
|
|
12
|
+
const p = t.tagPriority;
|
|
13
|
+
if (!p)
|
|
14
|
+
continue;
|
|
15
|
+
const s = String(p);
|
|
16
|
+
if (s.startsWith("before:")) {
|
|
17
|
+
const k = formatKey(s.slice(7));
|
|
18
|
+
const l = ctx.tagMap.get(k);
|
|
19
|
+
if (l) {
|
|
20
|
+
if (typeof l.tagPriority === "number")
|
|
21
|
+
t.tagPriority = l.tagPriority;
|
|
22
|
+
t._p = l._p - 1;
|
|
23
|
+
m = true;
|
|
24
|
+
}
|
|
25
|
+
} else if (s.startsWith("after:")) {
|
|
26
|
+
const k = formatKey(s.slice(6));
|
|
27
|
+
const l = ctx.tagMap.get(k);
|
|
28
|
+
if (l) {
|
|
29
|
+
if (typeof l.tagPriority === "number")
|
|
30
|
+
t.tagPriority = l.tagPriority;
|
|
31
|
+
t._p = l._p + 1;
|
|
32
|
+
m = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (m)
|
|
37
|
+
ctx.tags = ctx.tags.sort(sortTags);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
async function walkPromises(v) {
|
|
43
|
+
const type = typeof v;
|
|
44
|
+
if (type === "function") {
|
|
45
|
+
return v;
|
|
46
|
+
}
|
|
47
|
+
if (v instanceof Promise) {
|
|
48
|
+
return await v;
|
|
49
|
+
}
|
|
50
|
+
if (Array.isArray(v)) {
|
|
51
|
+
return await Promise.all(v.map((r) => walkPromises(r)));
|
|
52
|
+
}
|
|
53
|
+
if (v?.constructor === Object) {
|
|
54
|
+
const next = {};
|
|
55
|
+
for (const key of Object.keys(v)) {
|
|
56
|
+
next[key] = await walkPromises(v[key]);
|
|
57
|
+
}
|
|
58
|
+
return next;
|
|
59
|
+
}
|
|
60
|
+
return v;
|
|
61
|
+
}
|
|
62
|
+
const PromisesPlugin = /* @__PURE__ */ defineHeadPlugin({
|
|
63
|
+
key: "promises",
|
|
64
|
+
hooks: {
|
|
65
|
+
"entries:resolve": async (ctx) => {
|
|
66
|
+
const promises = [];
|
|
67
|
+
for (const k in ctx.entries) {
|
|
68
|
+
if (!ctx.entries[k]._promisesProcessed) {
|
|
69
|
+
promises.push(
|
|
70
|
+
walkPromises(ctx.entries[k].input).then((val) => {
|
|
71
|
+
ctx.entries[k].input = val;
|
|
72
|
+
ctx.entries[k]._promisesProcessed = true;
|
|
73
|
+
})
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
await Promise.all(promises);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const SupportedAttrs = {
|
|
83
|
+
meta: "content",
|
|
84
|
+
link: "href",
|
|
85
|
+
htmlAttrs: "lang"
|
|
86
|
+
};
|
|
87
|
+
const contentAttrs = ["innerHTML", "textContent"];
|
|
88
|
+
const TemplateParamsPlugin = /* @__PURE__ */ defineHeadPlugin((head) => {
|
|
89
|
+
return {
|
|
90
|
+
key: "template-params",
|
|
91
|
+
hooks: {
|
|
92
|
+
"tags:resolve": ({ tagMap, tags }) => {
|
|
93
|
+
const params = tagMap.get("templateParams")?.props || {};
|
|
94
|
+
const sep = params.separator || "|";
|
|
95
|
+
delete params.separator;
|
|
96
|
+
params.pageTitle = processTemplateParams(
|
|
97
|
+
// find templateParams
|
|
98
|
+
params.pageTitle || head._title || "",
|
|
99
|
+
params,
|
|
100
|
+
sep
|
|
101
|
+
);
|
|
102
|
+
for (const tag of tags) {
|
|
103
|
+
if (tag.processTemplateParams === false) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const v = SupportedAttrs[tag.tag];
|
|
107
|
+
if (v && typeof tag.props[v] === "string") {
|
|
108
|
+
tag.props[v] = processTemplateParams(tag.props[v], params, sep);
|
|
109
|
+
} else if (tag.processTemplateParams || tag.tag === "titleTemplate" || tag.tag === "title") {
|
|
110
|
+
for (const p of contentAttrs) {
|
|
111
|
+
if (typeof tag[p] === "string")
|
|
112
|
+
tag[p] = processTemplateParams(tag[p], params, sep, tag.tag === "script" && tag.props.type.endsWith("json"));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
head._templateParams = params;
|
|
117
|
+
head._separator = sep;
|
|
118
|
+
},
|
|
119
|
+
"tags:afterResolve": ({ tagMap }) => {
|
|
120
|
+
const title = tagMap.get("title");
|
|
121
|
+
if (title?.textContent && title.processTemplateParams !== false) {
|
|
122
|
+
title.textContent = processTemplateParams(title.textContent, head._templateParams, head._separator);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
export { AliasSortingPlugin as A, PromisesPlugin as P, TemplateParamsPlugin as T };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HookableCore } from 'hookable';
|
|
2
|
-
import { U as Unhead, C as ClientHeadHooks, c as CreateClientHeadOptions } from './unhead.
|
|
3
|
-
import {
|
|
2
|
+
import { U as Unhead, C as ClientHeadHooks, c as CreateClientHeadOptions } from './unhead.DFLvtb3Z.mjs';
|
|
3
|
+
import { at as ResolvableHead } from './unhead.DBv5uRwR.mjs';
|
|
4
4
|
|
|
5
5
|
interface ClientUnhead<T = ResolvableHead> extends Unhead<T, boolean> {
|
|
6
6
|
hooks: HookableCore<ClientHeadHooks>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HookableCore } from 'hookable';
|
|
2
|
-
import {
|
|
2
|
+
import { r as GenericScript, aK as ScriptHttpEvents, D as DataKeys, _ as MaybeEventFnHandlers, x as HttpEventAttributes, aH as SchemaAugmentations, t as HeadTag, at as ResolvableHead, aT as TagPosition, aU as TagPriority, ao as ProcessesTemplateParams, aG as ResolvesDuplicates, aW as TemplateParams } from './unhead.DBv5uRwR.js';
|
|
3
3
|
|
|
4
4
|
type UseScriptStatus = 'awaitingLoad' | 'loading' | 'loaded' | 'error' | 'removed';
|
|
5
5
|
type UseScriptContext<T extends Record<symbol | string, any>> = ScriptInstance<T>;
|
|
@@ -16,6 +16,14 @@ type _ResolvablePropertiesRaw<T> = {
|
|
|
16
16
|
};
|
|
17
17
|
type ResolvableProperties<T> = Prettify<_ResolvablePropertiesRaw<T>>;
|
|
18
18
|
type ResolvableUnion<T> = T extends string | number | boolean ? ResolvableValue<T> : T extends object ? DeepResolvableProperties<T> : ResolvableValue<T>;
|
|
19
|
+
/**
|
|
20
|
+
* Recursively marks all properties and arrays as readonly.
|
|
21
|
+
* Applied to `InferScript`/`InferLink` return types so that
|
|
22
|
+
* `defineScript`/`defineLink` accept both mutable and `as const` inputs.
|
|
23
|
+
*/
|
|
24
|
+
type DeepReadonly<T> = T extends (...a: any[]) => any ? T : T extends ReadonlyArray<infer U> ? readonly DeepReadonly<U>[] : T extends object ? {
|
|
25
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
26
|
+
} : T;
|
|
19
27
|
type DeepResolvableProperties<T> = {
|
|
20
28
|
[K in keyof T]?: T[K] extends string | object ? T[K] extends string ? ResolvableUnion<T[K]> : T[K] extends object ? DeepResolvableProperties<T[K]> : ResolvableUnion<T[K]> : ResolvableUnion<T[K]>;
|
|
21
29
|
};
|
|
@@ -1019,7 +1027,7 @@ type MatchLinkByRel<R> = Link extends infer M ? M extends {
|
|
|
1019
1027
|
*/
|
|
1020
1028
|
type InferLink<T> = T extends {
|
|
1021
1029
|
rel: infer R;
|
|
1022
|
-
} ? R extends KnownLinkRel ? MatchLinkByRel<R
|
|
1030
|
+
} ? R extends KnownLinkRel ? DeepReadonly<MatchLinkByRel<R>> : R extends string ? DeepReadonly<GenericLink> & {
|
|
1023
1031
|
rel: R;
|
|
1024
1032
|
} : never : never;
|
|
1025
1033
|
|
|
@@ -1134,7 +1142,7 @@ interface MetaFlatArticle {
|
|
|
1134
1142
|
* Writers of the article.
|
|
1135
1143
|
* @example ['https://example.com/some.html', 'https://example.com/one.html']
|
|
1136
1144
|
*/
|
|
1137
|
-
articleAuthor?: string[];
|
|
1145
|
+
articleAuthor?: readonly string[];
|
|
1138
1146
|
/**
|
|
1139
1147
|
* When the article is out of date after.
|
|
1140
1148
|
* @example '1970-01-01T00:00:00.000Z'
|
|
@@ -1159,14 +1167,14 @@ interface MetaFlatArticle {
|
|
|
1159
1167
|
* Tag words associated with this article.
|
|
1160
1168
|
* @example ['Apple', 'Steve Jobs']
|
|
1161
1169
|
*/
|
|
1162
|
-
articleTag?: string[];
|
|
1170
|
+
articleTag?: readonly string[];
|
|
1163
1171
|
}
|
|
1164
1172
|
interface MetaFlatBook {
|
|
1165
1173
|
/**
|
|
1166
1174
|
* Who wrote this book.
|
|
1167
1175
|
* @example ['https://example.com/some.html', 'https://example.com/one.html']
|
|
1168
1176
|
*/
|
|
1169
|
-
bookAuthor?: string[];
|
|
1177
|
+
bookAuthor?: readonly string[];
|
|
1170
1178
|
/**
|
|
1171
1179
|
* The ISBN.
|
|
1172
1180
|
* @example '978-3-16-148410-0'
|
|
@@ -1181,7 +1189,7 @@ interface MetaFlatBook {
|
|
|
1181
1189
|
* Tag words associated with this book.
|
|
1182
1190
|
* @example ['Apple', 'Steve Jobs']
|
|
1183
1191
|
*/
|
|
1184
|
-
bookTag?: string[];
|
|
1192
|
+
bookTag?: readonly string[];
|
|
1185
1193
|
}
|
|
1186
1194
|
interface MetaFlatProfile {
|
|
1187
1195
|
/**
|
|
@@ -2125,12 +2133,41 @@ type NoscriptContent = {
|
|
|
2125
2133
|
type Noscript = Pick<GlobalAttributes, 'id' | 'class' | 'style'> & NoscriptContent;
|
|
2126
2134
|
|
|
2127
2135
|
interface SpeculationRules {
|
|
2128
|
-
prefetch?:
|
|
2129
|
-
prerender?:
|
|
2136
|
+
prefetch?: readonly SpeculationRule[];
|
|
2137
|
+
prerender?: readonly SpeculationRule[];
|
|
2130
2138
|
}
|
|
2131
|
-
|
|
2139
|
+
/**
|
|
2140
|
+
* A single speculation rule entry.
|
|
2141
|
+
*
|
|
2142
|
+
* List rules provide explicit `urls`; document rules provide a `where` selector.
|
|
2143
|
+
* Both shapes share the same interface so TypeScript doesn't require exact
|
|
2144
|
+
* literal `source` values, which avoids widening issues inside `useHead`.
|
|
2145
|
+
*
|
|
2146
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md
|
|
2147
|
+
*/
|
|
2148
|
+
interface SpeculationRule {
|
|
2149
|
+
/**
|
|
2150
|
+
* The rule source type.
|
|
2151
|
+
*
|
|
2152
|
+
* `'list'` for explicit URL lists, `'document'` for selector-based rules.
|
|
2153
|
+
*
|
|
2154
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md
|
|
2155
|
+
*/
|
|
2156
|
+
source?: 'list' | 'document' | (string & Record<never, never>);
|
|
2132
2157
|
/**
|
|
2133
|
-
*
|
|
2158
|
+
* Explicit URLs to speculate on (list rules).
|
|
2159
|
+
*
|
|
2160
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#list-rules
|
|
2161
|
+
*/
|
|
2162
|
+
urls?: readonly string[];
|
|
2163
|
+
/**
|
|
2164
|
+
* Selector conditions for document rules.
|
|
2165
|
+
*
|
|
2166
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#document-rules
|
|
2167
|
+
*/
|
|
2168
|
+
where?: SpeculationRuleWhere;
|
|
2169
|
+
/**
|
|
2170
|
+
* A hint about how likely the user is to navigate to the URL.
|
|
2134
2171
|
*
|
|
2135
2172
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#scores
|
|
2136
2173
|
*/
|
|
@@ -2140,36 +2177,28 @@ interface SpeculationRuleBase {
|
|
|
2140
2177
|
*
|
|
2141
2178
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#using-the-documents-base-url-for-external-speculation-rule-sets
|
|
2142
2179
|
*/
|
|
2143
|
-
relative_to?: 'document';
|
|
2180
|
+
relative_to?: 'document' | (string & Record<never, never>);
|
|
2144
2181
|
/**
|
|
2145
|
-
* Assertions
|
|
2182
|
+
* Assertions about user agent capabilities required to execute the rule.
|
|
2146
2183
|
*
|
|
2147
2184
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#requirements
|
|
2148
2185
|
*/
|
|
2149
|
-
requires?: 'anonymous-client-ip-when-cross-origin'[];
|
|
2186
|
+
requires?: readonly ('anonymous-client-ip-when-cross-origin' | (string & Record<never, never>))[];
|
|
2150
2187
|
/**
|
|
2151
|
-
*
|
|
2188
|
+
* Where the page expects the prerendered content to be activated.
|
|
2152
2189
|
*
|
|
2153
2190
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#window-name-targeting-hints
|
|
2154
2191
|
*/
|
|
2155
|
-
target_hint?: '_blank' | '_self' | '_parent' | '_top';
|
|
2192
|
+
target_hint?: '_blank' | '_self' | '_parent' | '_top' | (string & Record<never, never>);
|
|
2156
2193
|
/**
|
|
2157
|
-
* The policy
|
|
2194
|
+
* The referrer policy for the speculative request.
|
|
2158
2195
|
*
|
|
2159
2196
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#explicit-referrer-policy
|
|
2160
2197
|
*/
|
|
2161
2198
|
referrer_policy?: ReferrerPolicy;
|
|
2162
2199
|
}
|
|
2163
|
-
interface SpeculationRuleList extends SpeculationRuleBase {
|
|
2164
|
-
source: 'list';
|
|
2165
|
-
urls: string[];
|
|
2166
|
-
}
|
|
2167
2200
|
type SpeculationRuleFn = 'and' | 'or' | 'href_matches' | 'selector_matches' | 'not';
|
|
2168
|
-
type SpeculationRuleWhere = Partial<Record<SpeculationRuleFn, Partial<(Record<SpeculationRuleFn, (Partial<Record<SpeculationRuleFn, string>>) | string>)>[]>>;
|
|
2169
|
-
interface SpeculationRuleDocument extends SpeculationRuleBase {
|
|
2170
|
-
source: 'document';
|
|
2171
|
-
where: SpeculationRuleWhere;
|
|
2172
|
-
}
|
|
2201
|
+
type SpeculationRuleWhere = Partial<Record<SpeculationRuleFn, readonly Partial<(Record<SpeculationRuleFn, (Partial<Record<SpeculationRuleFn, string>>) | string>)>[]>>;
|
|
2173
2202
|
|
|
2174
2203
|
/**
|
|
2175
2204
|
* Events that fire on script elements (load/error)
|
|
@@ -2552,9 +2581,9 @@ type MatchScriptByType<U> = Script extends infer M ? M extends {
|
|
|
2552
2581
|
*/
|
|
2553
2582
|
type InferScript<T> = T extends {
|
|
2554
2583
|
type: infer U;
|
|
2555
|
-
} ? U extends string ? U extends KnownScriptType ? MatchScriptByType<U
|
|
2584
|
+
} ? U extends string ? U extends KnownScriptType ? DeepReadonly<MatchScriptByType<U>> : DeepReadonly<GenericScript> & {
|
|
2556
2585
|
type: U;
|
|
2557
|
-
} : Script : Script
|
|
2586
|
+
} : DeepReadonly<Script> : DeepReadonly<Script>;
|
|
2558
2587
|
|
|
2559
2588
|
interface Style extends Pick<GlobalAttributes, 'nonce' | 'id'>, Blocking {
|
|
2560
2589
|
/**
|
|
@@ -2873,4 +2902,4 @@ interface HeadTag extends TagPriority, TagPosition, ResolvesDuplicates, HasTempl
|
|
|
2873
2902
|
}
|
|
2874
2903
|
type HeadTagKeys = (keyof HeadTag)[];
|
|
2875
2904
|
|
|
2876
|
-
export type {
|
|
2905
|
+
export type { MeLink as $, AlternateFeedLink as A, Booleanable as B, CanonicalLink as C, DataKeys as D, ExpectLink as E, FaviconLink as F, GenericLink as G, HasTemplateParams as H, IconLink as I, InferLink as J, InferScript as K, InlineModuleScript as L, InlineScript as M, InnerContent as N, InnerContentVal as O, InternalTagKey as P, JsonLdScript as Q, KnownLinkRel as R, KnownScriptType as S, LicenseLink as T, Link as U, LinkBase as V, LinkHttpEvents as W, ManifestLink as X, MaskIconLink as Y, MaybeArray as Z, MaybeEventFnHandlers as _, AlternateLanguageLink as a, UnheadMeta as a$, Meta as a0, MetaBase as a1, MetaFlat as a2, MetaGeneric as a3, MetaNames as a4, MetaProperties as a5, ModuleScript as a6, ModulepreloadLink as a7, NameMeta as a8, Never as a9, ResolvableStyle as aA, ResolvableTemplateParams as aB, ResolvableTitle as aC, ResolvableTitleTemplate as aD, ResolvableUnion as aE, ResolvableValue as aF, ResolvesDuplicates as aG, SchemaAugmentations as aH, Script as aI, ScriptBase as aJ, ScriptHttpEvents as aK, SearchLink as aL, SerializableHead as aM, SpeculationRules as aN, SpeculationRulesScript as aO, StringInnerContent as aP, Stringable as aQ, StylesheetLink as aR, TagKey as aS, TagPosition as aT, TagPriority as aU, TagUserProperties as aV, TemplateParams as aW, TemplateParamsAugmentations as aX, TermsOfServiceLink as aY, UnheadBodyAttributesWithoutEvents as aZ, UnheadHtmlAttributes as a_, NextLink as aa, PingbackLink as ab, PreconnectLink as ac, PrefetchLink as ad, PreloadFontLink as ae, PreloadImageLink as af, PreloadLink as ag, PreloadLinkBase as ah, PreloadOtherLink as ai, PreloadScriptLink as aj, PreloadStyleLink as ak, PrerenderLink as al, PrevLink as am, PrivacyPolicyLink as an, ProcessesTemplateParams as ao, PropertyMeta as ap, RawInput as aq, ResolvableBase as ar, ResolvableBodyAttributes as as, ResolvableHead as at, ResolvableHtmlAttributes as au, ResolvableLink as av, ResolvableMeta as aw, ResolvableNoscript as ax, ResolvableProperties as ay, ResolvableScript as az, AlternateLink as b, UseHeadInput as b0, UseSeoMetaInput as b1, ValidTagPositions as b2, WebmentionLink as b3, AlternateMediaLink as c, AlternateStylesheetLink as d, AppleTouchIconLink as e, ApplicationJsonScript as f, Arrayable as g, AuthorLink as h, BareAlternateLink as i, BodyAttributesWithoutEvents as j, BodyEvents as k, CharsetMeta as l, CompressionDictionaryLink as m, DeepReadonly as n, DeepResolvableProperties as o, DnsPrefetchLink as p, ExternalScript as q, GenericScript as r, GlobalAttributes as s, HeadTag as t, HeadTagKeys as u, HelpLink as v, HttpEquivMeta as w, HttpEventAttributes as x, ImportMapConfig as y, ImportMapScript as z };
|
|
@@ -16,6 +16,14 @@ type _ResolvablePropertiesRaw<T> = {
|
|
|
16
16
|
};
|
|
17
17
|
type ResolvableProperties<T> = Prettify<_ResolvablePropertiesRaw<T>>;
|
|
18
18
|
type ResolvableUnion<T> = T extends string | number | boolean ? ResolvableValue<T> : T extends object ? DeepResolvableProperties<T> : ResolvableValue<T>;
|
|
19
|
+
/**
|
|
20
|
+
* Recursively marks all properties and arrays as readonly.
|
|
21
|
+
* Applied to `InferScript`/`InferLink` return types so that
|
|
22
|
+
* `defineScript`/`defineLink` accept both mutable and `as const` inputs.
|
|
23
|
+
*/
|
|
24
|
+
type DeepReadonly<T> = T extends (...a: any[]) => any ? T : T extends ReadonlyArray<infer U> ? readonly DeepReadonly<U>[] : T extends object ? {
|
|
25
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
26
|
+
} : T;
|
|
19
27
|
type DeepResolvableProperties<T> = {
|
|
20
28
|
[K in keyof T]?: T[K] extends string | object ? T[K] extends string ? ResolvableUnion<T[K]> : T[K] extends object ? DeepResolvableProperties<T[K]> : ResolvableUnion<T[K]> : ResolvableUnion<T[K]>;
|
|
21
29
|
};
|
|
@@ -1019,7 +1027,7 @@ type MatchLinkByRel<R> = Link extends infer M ? M extends {
|
|
|
1019
1027
|
*/
|
|
1020
1028
|
type InferLink<T> = T extends {
|
|
1021
1029
|
rel: infer R;
|
|
1022
|
-
} ? R extends KnownLinkRel ? MatchLinkByRel<R
|
|
1030
|
+
} ? R extends KnownLinkRel ? DeepReadonly<MatchLinkByRel<R>> : R extends string ? DeepReadonly<GenericLink> & {
|
|
1023
1031
|
rel: R;
|
|
1024
1032
|
} : never : never;
|
|
1025
1033
|
|
|
@@ -1134,7 +1142,7 @@ interface MetaFlatArticle {
|
|
|
1134
1142
|
* Writers of the article.
|
|
1135
1143
|
* @example ['https://example.com/some.html', 'https://example.com/one.html']
|
|
1136
1144
|
*/
|
|
1137
|
-
articleAuthor?: string[];
|
|
1145
|
+
articleAuthor?: readonly string[];
|
|
1138
1146
|
/**
|
|
1139
1147
|
* When the article is out of date after.
|
|
1140
1148
|
* @example '1970-01-01T00:00:00.000Z'
|
|
@@ -1159,14 +1167,14 @@ interface MetaFlatArticle {
|
|
|
1159
1167
|
* Tag words associated with this article.
|
|
1160
1168
|
* @example ['Apple', 'Steve Jobs']
|
|
1161
1169
|
*/
|
|
1162
|
-
articleTag?: string[];
|
|
1170
|
+
articleTag?: readonly string[];
|
|
1163
1171
|
}
|
|
1164
1172
|
interface MetaFlatBook {
|
|
1165
1173
|
/**
|
|
1166
1174
|
* Who wrote this book.
|
|
1167
1175
|
* @example ['https://example.com/some.html', 'https://example.com/one.html']
|
|
1168
1176
|
*/
|
|
1169
|
-
bookAuthor?: string[];
|
|
1177
|
+
bookAuthor?: readonly string[];
|
|
1170
1178
|
/**
|
|
1171
1179
|
* The ISBN.
|
|
1172
1180
|
* @example '978-3-16-148410-0'
|
|
@@ -1181,7 +1189,7 @@ interface MetaFlatBook {
|
|
|
1181
1189
|
* Tag words associated with this book.
|
|
1182
1190
|
* @example ['Apple', 'Steve Jobs']
|
|
1183
1191
|
*/
|
|
1184
|
-
bookTag?: string[];
|
|
1192
|
+
bookTag?: readonly string[];
|
|
1185
1193
|
}
|
|
1186
1194
|
interface MetaFlatProfile {
|
|
1187
1195
|
/**
|
|
@@ -2125,12 +2133,41 @@ type NoscriptContent = {
|
|
|
2125
2133
|
type Noscript = Pick<GlobalAttributes, 'id' | 'class' | 'style'> & NoscriptContent;
|
|
2126
2134
|
|
|
2127
2135
|
interface SpeculationRules {
|
|
2128
|
-
prefetch?:
|
|
2129
|
-
prerender?:
|
|
2136
|
+
prefetch?: readonly SpeculationRule[];
|
|
2137
|
+
prerender?: readonly SpeculationRule[];
|
|
2130
2138
|
}
|
|
2131
|
-
|
|
2139
|
+
/**
|
|
2140
|
+
* A single speculation rule entry.
|
|
2141
|
+
*
|
|
2142
|
+
* List rules provide explicit `urls`; document rules provide a `where` selector.
|
|
2143
|
+
* Both shapes share the same interface so TypeScript doesn't require exact
|
|
2144
|
+
* literal `source` values, which avoids widening issues inside `useHead`.
|
|
2145
|
+
*
|
|
2146
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md
|
|
2147
|
+
*/
|
|
2148
|
+
interface SpeculationRule {
|
|
2149
|
+
/**
|
|
2150
|
+
* The rule source type.
|
|
2151
|
+
*
|
|
2152
|
+
* `'list'` for explicit URL lists, `'document'` for selector-based rules.
|
|
2153
|
+
*
|
|
2154
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md
|
|
2155
|
+
*/
|
|
2156
|
+
source?: 'list' | 'document' | (string & Record<never, never>);
|
|
2132
2157
|
/**
|
|
2133
|
-
*
|
|
2158
|
+
* Explicit URLs to speculate on (list rules).
|
|
2159
|
+
*
|
|
2160
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#list-rules
|
|
2161
|
+
*/
|
|
2162
|
+
urls?: readonly string[];
|
|
2163
|
+
/**
|
|
2164
|
+
* Selector conditions for document rules.
|
|
2165
|
+
*
|
|
2166
|
+
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#document-rules
|
|
2167
|
+
*/
|
|
2168
|
+
where?: SpeculationRuleWhere;
|
|
2169
|
+
/**
|
|
2170
|
+
* A hint about how likely the user is to navigate to the URL.
|
|
2134
2171
|
*
|
|
2135
2172
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#scores
|
|
2136
2173
|
*/
|
|
@@ -2140,36 +2177,28 @@ interface SpeculationRuleBase {
|
|
|
2140
2177
|
*
|
|
2141
2178
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#using-the-documents-base-url-for-external-speculation-rule-sets
|
|
2142
2179
|
*/
|
|
2143
|
-
relative_to?: 'document';
|
|
2180
|
+
relative_to?: 'document' | (string & Record<never, never>);
|
|
2144
2181
|
/**
|
|
2145
|
-
* Assertions
|
|
2182
|
+
* Assertions about user agent capabilities required to execute the rule.
|
|
2146
2183
|
*
|
|
2147
2184
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#requirements
|
|
2148
2185
|
*/
|
|
2149
|
-
requires?: 'anonymous-client-ip-when-cross-origin'[];
|
|
2186
|
+
requires?: readonly ('anonymous-client-ip-when-cross-origin' | (string & Record<never, never>))[];
|
|
2150
2187
|
/**
|
|
2151
|
-
*
|
|
2188
|
+
* Where the page expects the prerendered content to be activated.
|
|
2152
2189
|
*
|
|
2153
2190
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#window-name-targeting-hints
|
|
2154
2191
|
*/
|
|
2155
|
-
target_hint?: '_blank' | '_self' | '_parent' | '_top';
|
|
2192
|
+
target_hint?: '_blank' | '_self' | '_parent' | '_top' | (string & Record<never, never>);
|
|
2156
2193
|
/**
|
|
2157
|
-
* The policy
|
|
2194
|
+
* The referrer policy for the speculative request.
|
|
2158
2195
|
*
|
|
2159
2196
|
* @see https://github.com/WICG/nav-speculation/blob/main/triggers.md#explicit-referrer-policy
|
|
2160
2197
|
*/
|
|
2161
2198
|
referrer_policy?: ReferrerPolicy;
|
|
2162
2199
|
}
|
|
2163
|
-
interface SpeculationRuleList extends SpeculationRuleBase {
|
|
2164
|
-
source: 'list';
|
|
2165
|
-
urls: string[];
|
|
2166
|
-
}
|
|
2167
2200
|
type SpeculationRuleFn = 'and' | 'or' | 'href_matches' | 'selector_matches' | 'not';
|
|
2168
|
-
type SpeculationRuleWhere = Partial<Record<SpeculationRuleFn, Partial<(Record<SpeculationRuleFn, (Partial<Record<SpeculationRuleFn, string>>) | string>)>[]>>;
|
|
2169
|
-
interface SpeculationRuleDocument extends SpeculationRuleBase {
|
|
2170
|
-
source: 'document';
|
|
2171
|
-
where: SpeculationRuleWhere;
|
|
2172
|
-
}
|
|
2201
|
+
type SpeculationRuleWhere = Partial<Record<SpeculationRuleFn, readonly Partial<(Record<SpeculationRuleFn, (Partial<Record<SpeculationRuleFn, string>>) | string>)>[]>>;
|
|
2173
2202
|
|
|
2174
2203
|
/**
|
|
2175
2204
|
* Events that fire on script elements (load/error)
|
|
@@ -2552,9 +2581,9 @@ type MatchScriptByType<U> = Script extends infer M ? M extends {
|
|
|
2552
2581
|
*/
|
|
2553
2582
|
type InferScript<T> = T extends {
|
|
2554
2583
|
type: infer U;
|
|
2555
|
-
} ? U extends string ? U extends KnownScriptType ? MatchScriptByType<U
|
|
2584
|
+
} ? U extends string ? U extends KnownScriptType ? DeepReadonly<MatchScriptByType<U>> : DeepReadonly<GenericScript> & {
|
|
2556
2585
|
type: U;
|
|
2557
|
-
} : Script : Script
|
|
2586
|
+
} : DeepReadonly<Script> : DeepReadonly<Script>;
|
|
2558
2587
|
|
|
2559
2588
|
interface Style extends Pick<GlobalAttributes, 'nonce' | 'id'>, Blocking {
|
|
2560
2589
|
/**
|
|
@@ -2873,4 +2902,4 @@ interface HeadTag extends TagPriority, TagPosition, ResolvesDuplicates, HasTempl
|
|
|
2873
2902
|
}
|
|
2874
2903
|
type HeadTagKeys = (keyof HeadTag)[];
|
|
2875
2904
|
|
|
2876
|
-
export type {
|
|
2905
|
+
export type { MeLink as $, AlternateFeedLink as A, Booleanable as B, CanonicalLink as C, DataKeys as D, ExpectLink as E, FaviconLink as F, GenericLink as G, HasTemplateParams as H, IconLink as I, InferLink as J, InferScript as K, InlineModuleScript as L, InlineScript as M, InnerContent as N, InnerContentVal as O, InternalTagKey as P, JsonLdScript as Q, KnownLinkRel as R, KnownScriptType as S, LicenseLink as T, Link as U, LinkBase as V, LinkHttpEvents as W, ManifestLink as X, MaskIconLink as Y, MaybeArray as Z, MaybeEventFnHandlers as _, AlternateLanguageLink as a, UnheadMeta as a$, Meta as a0, MetaBase as a1, MetaFlat as a2, MetaGeneric as a3, MetaNames as a4, MetaProperties as a5, ModuleScript as a6, ModulepreloadLink as a7, NameMeta as a8, Never as a9, ResolvableStyle as aA, ResolvableTemplateParams as aB, ResolvableTitle as aC, ResolvableTitleTemplate as aD, ResolvableUnion as aE, ResolvableValue as aF, ResolvesDuplicates as aG, SchemaAugmentations as aH, Script as aI, ScriptBase as aJ, ScriptHttpEvents as aK, SearchLink as aL, SerializableHead as aM, SpeculationRules as aN, SpeculationRulesScript as aO, StringInnerContent as aP, Stringable as aQ, StylesheetLink as aR, TagKey as aS, TagPosition as aT, TagPriority as aU, TagUserProperties as aV, TemplateParams as aW, TemplateParamsAugmentations as aX, TermsOfServiceLink as aY, UnheadBodyAttributesWithoutEvents as aZ, UnheadHtmlAttributes as a_, NextLink as aa, PingbackLink as ab, PreconnectLink as ac, PrefetchLink as ad, PreloadFontLink as ae, PreloadImageLink as af, PreloadLink as ag, PreloadLinkBase as ah, PreloadOtherLink as ai, PreloadScriptLink as aj, PreloadStyleLink as ak, PrerenderLink as al, PrevLink as am, PrivacyPolicyLink as an, ProcessesTemplateParams as ao, PropertyMeta as ap, RawInput as aq, ResolvableBase as ar, ResolvableBodyAttributes as as, ResolvableHead as at, ResolvableHtmlAttributes as au, ResolvableLink as av, ResolvableMeta as aw, ResolvableNoscript as ax, ResolvableProperties as ay, ResolvableScript as az, AlternateLink as b, UseHeadInput as b0, UseSeoMetaInput as b1, ValidTagPositions as b2, WebmentionLink as b3, AlternateMediaLink as c, AlternateStylesheetLink as d, AppleTouchIconLink as e, ApplicationJsonScript as f, Arrayable as g, AuthorLink as h, BareAlternateLink as i, BodyAttributesWithoutEvents as j, BodyEvents as k, CharsetMeta as l, CompressionDictionaryLink as m, DeepReadonly as n, DeepResolvableProperties as o, DnsPrefetchLink as p, ExternalScript as q, GenericScript as r, GlobalAttributes as s, HeadTag as t, HeadTagKeys as u, HelpLink as v, HttpEquivMeta as w, HttpEventAttributes as x, ImportMapConfig as y, ImportMapScript as z };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HookableCore } from 'hookable';
|
|
2
|
-
import {
|
|
2
|
+
import { r as GenericScript, aK as ScriptHttpEvents, D as DataKeys, _ as MaybeEventFnHandlers, x as HttpEventAttributes, aH as SchemaAugmentations, t as HeadTag, at as ResolvableHead, aT as TagPosition, aU as TagPriority, ao as ProcessesTemplateParams, aG as ResolvesDuplicates, aW as TemplateParams } from './unhead.DBv5uRwR.mjs';
|
|
3
3
|
|
|
4
4
|
type UseScriptStatus = 'awaitingLoad' | 'loading' | 'loaded' | 'error' | 'removed';
|
|
5
5
|
type UseScriptContext<T extends Record<symbol | string, any>> = ScriptInstance<T>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HookableCore } from 'hookable';
|
|
2
|
-
import { U as Unhead, C as ClientHeadHooks, c as CreateClientHeadOptions } from './unhead.
|
|
3
|
-
import {
|
|
2
|
+
import { U as Unhead, C as ClientHeadHooks, c as CreateClientHeadOptions } from './unhead.CZmLNN-R.js';
|
|
3
|
+
import { at as ResolvableHead } from './unhead.DBv5uRwR.js';
|
|
4
4
|
|
|
5
5
|
interface ClientUnhead<T = ResolvableHead> extends Unhead<T, boolean> {
|
|
6
6
|
hooks: HookableCore<ClientHeadHooks>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { U as Unhead, F as UseScriptInput, G as UseScriptOptions, J as UseScriptReturn } from './unhead.
|
|
1
|
+
import { U as Unhead, F as UseScriptInput, G as UseScriptOptions, J as UseScriptReturn } from './unhead.CZmLNN-R.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Load third-party scripts with SSR support and a proxied API.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { c as createUnhead, r as registerPlugin } from './unhead.CfgPMHXt.mjs';
|
|
2
|
+
import { c as createHooks } from './unhead.DvIxXxuO.mjs';
|
|
3
|
+
import { c as createDomRenderer } from './unhead.pv34ME7O.mjs';
|
|
4
|
+
|
|
5
|
+
const P = { critical: -8, high: -1, low: 2 };
|
|
6
|
+
const tagWeight = (tag) => typeof tag.tagPriority === "number" ? tag.tagPriority : 100 + (P[tag.tagPriority] || 0);
|
|
7
|
+
function createHead(options = {}) {
|
|
8
|
+
options.document = options.document || (typeof window !== "undefined" ? document : void 0);
|
|
9
|
+
const renderer = options.render || createDomRenderer({ document: options.document });
|
|
10
|
+
const initialPayload = options.document?.head.querySelector('script[id="unhead:payload"]')?.innerHTML || false;
|
|
11
|
+
const core = createUnhead(renderer, { document: options.document, propResolvers: options.propResolvers, _tagWeight: tagWeight, init: [] });
|
|
12
|
+
const hooks = createHooks(options.hooks);
|
|
13
|
+
let dirty = false;
|
|
14
|
+
const head = {
|
|
15
|
+
...core,
|
|
16
|
+
ssr: false,
|
|
17
|
+
hooks,
|
|
18
|
+
use: (p) => registerPlugin(head, p),
|
|
19
|
+
get dirty() {
|
|
20
|
+
return dirty;
|
|
21
|
+
},
|
|
22
|
+
set dirty(v) {
|
|
23
|
+
dirty = v;
|
|
24
|
+
},
|
|
25
|
+
render: () => renderer(head),
|
|
26
|
+
invalidate() {
|
|
27
|
+
for (const e of core.entries.values()) delete e._tags;
|
|
28
|
+
dirty = true;
|
|
29
|
+
hooks.callHook("entries:updated", head);
|
|
30
|
+
},
|
|
31
|
+
push(input, _options) {
|
|
32
|
+
const onRendered = _options?.onRendered;
|
|
33
|
+
const unhook = onRendered ? hooks.hook("dom:rendered", onRendered) : void 0;
|
|
34
|
+
const active = core.push(input, _options);
|
|
35
|
+
core.entries.get(active._i)._o = input;
|
|
36
|
+
dirty = true;
|
|
37
|
+
hooks.callHook("entries:updated", head);
|
|
38
|
+
return {
|
|
39
|
+
_i: active._i,
|
|
40
|
+
patch(input2) {
|
|
41
|
+
active.patch(input2);
|
|
42
|
+
dirty = true;
|
|
43
|
+
hooks.callHook("entries:updated", head);
|
|
44
|
+
},
|
|
45
|
+
dispose() {
|
|
46
|
+
unhook?.();
|
|
47
|
+
if (core.entries.has(active._i)) {
|
|
48
|
+
active.dispose();
|
|
49
|
+
head.invalidate();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
hooks.hook("entries:updated", () => {
|
|
56
|
+
renderer(head);
|
|
57
|
+
});
|
|
58
|
+
options.plugins?.forEach((p) => registerPlugin(head, p));
|
|
59
|
+
initialPayload && head.push(JSON.parse(initialPayload));
|
|
60
|
+
options.init?.forEach((e) => e && head.push(e));
|
|
61
|
+
return head;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { createHead as c };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HookableCore } from 'hookable';
|
|
2
|
-
import { U as Unhead, s as SSRHeadPayload, v as ServerHeadHooks, e as CreateServerHeadOptions } from './unhead.
|
|
3
|
-
import {
|
|
2
|
+
import { U as Unhead, s as SSRHeadPayload, v as ServerHeadHooks, e as CreateServerHeadOptions } from './unhead.DFLvtb3Z.mjs';
|
|
3
|
+
import { at as ResolvableHead } from './unhead.DBv5uRwR.mjs';
|
|
4
4
|
|
|
5
5
|
interface ServerUnhead<T = ResolvableHead> extends Unhead<T, SSRHeadPayload> {
|
|
6
6
|
hooks: HookableCore<ServerHeadHooks>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { aq as RawInput, at as ResolvableHead, aF as ResolvableValue, ay as ResolvableProperties, G as GenericLink, D as DataKeys, aH as SchemaAugmentations, a3 as MetaGeneric, r as GenericScript, a_ as UnheadHtmlAttributes, aZ as UnheadBodyAttributesWithoutEvents } from './unhead.DBv5uRwR.mjs';
|
|
2
2
|
|
|
3
3
|
type Base = RawInput<'base'>;
|
|
4
4
|
type HtmlAttributes = RawInput<'htmlAttrs'>;
|
package/dist/stream/client.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as ClientUnhead } from '../shared/unhead.
|
|
2
|
-
import { c as CreateClientHeadOptions, U as Unhead } from '../shared/unhead.
|
|
3
|
-
import {
|
|
1
|
+
import { C as ClientUnhead } from '../shared/unhead.CSqfLsrn.mjs';
|
|
2
|
+
import { c as CreateClientHeadOptions, U as Unhead } from '../shared/unhead.DFLvtb3Z.mjs';
|
|
3
|
+
import { aM as SerializableHead, at as ResolvableHead } from '../shared/unhead.DBv5uRwR.mjs';
|
|
4
4
|
import 'hookable';
|
|
5
5
|
|
|
6
6
|
interface UnheadStreamQueue {
|
package/dist/stream/client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as ClientUnhead } from '../shared/unhead.
|
|
2
|
-
import { c as CreateClientHeadOptions, U as Unhead } from '../shared/unhead.
|
|
3
|
-
import {
|
|
1
|
+
import { C as ClientUnhead } from '../shared/unhead.DMQDfSsC.js';
|
|
2
|
+
import { c as CreateClientHeadOptions, U as Unhead } from '../shared/unhead.CZmLNN-R.js';
|
|
3
|
+
import { aM as SerializableHead, at as ResolvableHead } from '../shared/unhead.DBv5uRwR.js';
|
|
4
4
|
import 'hookable';
|
|
5
5
|
|
|
6
6
|
interface UnheadStreamQueue {
|