Skip to content

Commit 83e8fa2

Browse files
committed
♻️ allow value type to be undefined
1 parent 6483fdc commit 83e8fa2

File tree

3 files changed

+28
-22
lines changed

3 files changed

+28
-22
lines changed

lib/features/render-headers.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,13 @@ export class RenderHeaders extends Feature<RenderHeadersOptions> {
8181

8282
protected renderTag(tag: TagType, value: ValueType): string[][] {
8383
if (Array.isArray(value)) {
84-
return value.map((v) => [`// @${tag}`, v]);
84+
return value.map((v) => [`// @${tag}`, v ?? '']);
8585
}
8686
if (typeof value === 'object') {
87-
return Object.entries(value).map(([k, v]) => [`// @${tag}`, `${k} ${v}`]);
87+
return Object.entries(value).map(([k, v]) => [
88+
`// @${tag}`,
89+
`${k} ${v ?? ''}`,
90+
]);
8891
}
8992
if (typeof value === 'string') {
9093
return [[`// @${tag}`, value]];

lib/features/ssri.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,9 @@ export class ProcessSSRI extends Feature<SSRIOptions> {
196196
const urls: string[] = [];
197197

198198
if (headers.require !== undefined) {
199-
const requireURLs = Array.isArray(headers.require)
200-
? headers.require
201-
: [headers.require];
199+
const requireURLs = (
200+
Array.isArray(headers.require) ? headers.require : [headers.require]
201+
).filter((url): url is string => typeof url === 'string');
202202

203203
for (const urlStr of requireURLs) {
204204
const url = this.parseURL(urlStr);
@@ -209,7 +209,9 @@ export class ProcessSSRI extends Feature<SSRIOptions> {
209209
}
210210

211211
if (headers.resource !== undefined) {
212-
for (const urlStr of Object.values(headers.resource)) {
212+
for (const urlStr of Object.values(headers.resource).filter(
213+
(url): url is string => typeof url === 'string',
214+
)) {
213215
const url = this.parseURL(urlStr);
214216
if (this.filterURL(url, 'resource', options)) {
215217
urls.push(this.stringifyURL(url));
@@ -316,20 +318,21 @@ export class ProcessSSRI extends Feature<SSRIOptions> {
316318

317319
if (headers.require !== undefined) {
318320
if (Array.isArray(headers.require)) {
319-
headersProps.require = headers.require.map((url) =>
320-
this.updateURL(url, ssriLock),
321-
);
321+
headersProps.require = headers.require
322+
.filter((url): url is string => typeof url === 'string')
323+
.map((url) => this.updateURL(url, ssriLock));
322324
} else {
323325
headersProps.require = this.updateURL(headers.require, ssriLock);
324326
}
325327
}
326328

327329
if (headers.resource !== undefined) {
328330
headersProps.resource = Object.fromEntries(
329-
Object.entries(headers.resource).map(([name, url]) => [
330-
name,
331-
this.updateURL(url, ssriLock),
332-
]),
331+
Object.entries(headers.resource)
332+
.filter(
333+
(entry): entry is [string, string] => typeof entry[1] === 'string',
334+
)
335+
.map(([name, url]) => [name, this.updateURL(url, ssriLock)]),
333336
);
334337
}
335338

lib/types.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,19 @@ import {
1414
ValidateHeadersOptions,
1515
} from './features';
1616

17+
export type SingleValue = string | undefined;
18+
export type MultiValue = SingleValue | SingleValue[];
19+
export type NamedValue = Record<string, SingleValue>;
20+
export type SwitchValue = boolean;
21+
1722
export type TagType = string;
1823
export type ValueType =
19-
| Record<string, string>
20-
| string[]
21-
| string
22-
| boolean
24+
| NamedValue
25+
| MultiValue
26+
| SingleValue
27+
| SwitchValue
2328
| undefined;
2429

25-
export type SingleValue = string;
26-
export type MultiValue = string | string[];
27-
export type NamedValue = Record<string, string>;
28-
export type SwitchValue = boolean;
29-
3030
export enum RunAtValue {
3131
DocumentStart = 'document-start',
3232
DocumentBody = 'document-body',

0 commit comments

Comments
 (0)