From 6ad48d7c0fcf7e9754d14897a5e8e3443eb87a29 Mon Sep 17 00:00:00 2001 From: Ryan Waskiewicz Date: Fri, 25 Aug 2023 15:34:28 -0400 Subject: [PATCH 1/5] chore(snc): drop snc count for serialize-css this commut updates the function signature of `serializeCssMapVisit` to replace `void` as an argument type with `undefined | null`, which matches that of a all other arguments provided to this function in its acutal usage --- src/compiler/style/css-parser/serialize-css.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/style/css-parser/serialize-css.ts b/src/compiler/style/css-parser/serialize-css.ts index 46259daa984..542d773740c 100644 --- a/src/compiler/style/css-parser/serialize-css.ts +++ b/src/compiler/style/css-parser/serialize-css.ts @@ -230,7 +230,7 @@ const serializeCssDocument = (opts: SerializeOpts, node: CssNode) => { return doc + '{' + documentCss + '}'; }; -const serializeCssMapVisit = (opts: SerializeOpts, nodes: CssNode[] | void) => { +const serializeCssMapVisit = (opts: SerializeOpts, nodes: CssNode[] | undefined | null): string => { let rtn = ''; if (nodes) { From 70c0ef20fa56f8f70d03c238861fa37d24e23974 Mon Sep 17 00:00:00 2001 From: Ryan Waskiewicz Date: Fri, 25 Aug 2023 15:37:17 -0400 Subject: [PATCH 2/5] add handling for the case where a node's collection properties are falsy --- src/compiler/style/css-parser/serialize-css.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/style/css-parser/serialize-css.ts b/src/compiler/style/css-parser/serialize-css.ts index 542d773740c..967085093d9 100644 --- a/src/compiler/style/css-parser/serialize-css.ts +++ b/src/compiler/style/css-parser/serialize-css.ts @@ -197,7 +197,7 @@ const serializeCssKeyframes = (opts: SerializeOpts, node: CssNode) => { }; const serializeCssKeyframe = (opts: SerializeOpts, node: CssNode) => { - return node.values.join(',') + '{' + serializeCssMapVisit(opts, node.declarations) + '}'; + return (node.values?.join(',') ?? '') + '{' + serializeCssMapVisit(opts, node.declarations) + '}'; }; const serializeCssFontFace = (opts: SerializeOpts, node: CssNode) => { @@ -217,7 +217,7 @@ const serializeCssSupports = (opts: SerializeOpts, node: CssNode) => { }; const serializeCssPage = (opts: SerializeOpts, node: CssNode) => { - const sel = node.selectors.join(', '); + const sel = node.selectors?.join(', ') ?? ''; return '@page ' + sel + '{' + serializeCssMapVisit(opts, node.declarations) + '}'; }; From 6feaf4a3f735faf9a09555d1be3179c9f21ada61 Mon Sep 17 00:00:00 2001 From: Ryan Waskiewicz Date: Fri, 25 Aug 2023 15:44:30 -0400 Subject: [PATCH 3/5] handle the case of undefine media queries --- src/compiler/style/css-parser/serialize-css.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/style/css-parser/serialize-css.ts b/src/compiler/style/css-parser/serialize-css.ts index 967085093d9..8538855d221 100644 --- a/src/compiler/style/css-parser/serialize-css.ts +++ b/src/compiler/style/css-parser/serialize-css.ts @@ -272,10 +272,10 @@ const removeSelectorWhitespace = (selector: string) => { return rtn; }; -const removeMediaWhitespace = (media: string) => { +const removeMediaWhitespace = (media: string | undefined) => { let rtn = ''; let char = ''; - media = media.trim(); + media = media?.trim() ?? ''; for (let i = 0, l = media.length; i < l; i++) { char = media[i]; From 3a77591fbcc3d647b30fd0c4343eb2ddf4bdb566 Mon Sep 17 00:00:00 2001 From: Ryan Waskiewicz Date: Fri, 25 Aug 2023 15:46:32 -0400 Subject: [PATCH 4/5] handle additional falsy selectors --- src/compiler/style/css-parser/serialize-css.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/compiler/style/css-parser/serialize-css.ts b/src/compiler/style/css-parser/serialize-css.ts index 8538855d221..9058704b8d7 100644 --- a/src/compiler/style/css-parser/serialize-css.ts +++ b/src/compiler/style/css-parser/serialize-css.ts @@ -83,7 +83,7 @@ const serializeCssVisitNode = (opts: SerializeOpts, node: CssNode, index: number const serializeCssRule = (opts: SerializeOpts, node: CssNode) => { const decls = node.declarations; const usedSelectors = opts.usedSelectors; - const selectors = node.selectors.slice(); + const selectors = node.selectors?.slice() ?? []; if (decls == null || decls.length === 0) { return ''; @@ -160,10 +160,12 @@ const serializeCssRule = (opts: SerializeOpts, node: CssNode) => { const cleanedSelectors: string[] = []; let cleanedSelector = ''; - for (const selector of node.selectors) { - cleanedSelector = removeSelectorWhitespace(selector); - if (!cleanedSelectors.includes(cleanedSelector)) { - cleanedSelectors.push(cleanedSelector); + if (node.selectors) { + for (const selector of node.selectors) { + cleanedSelector = removeSelectorWhitespace(selector); + if (!cleanedSelectors.includes(cleanedSelector)) { + cleanedSelectors.push(cleanedSelector); + } } } From 0e40f07b67dced78ce02a188e352409ecefab834 Mon Sep 17 00:00:00 2001 From: Ryan Waskiewicz Date: Fri, 25 Aug 2023 15:54:00 -0400 Subject: [PATCH 5/5] handle falsy comment --- src/compiler/style/css-parser/serialize-css.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/style/css-parser/serialize-css.ts b/src/compiler/style/css-parser/serialize-css.ts index 9058704b8d7..cea4cc9d3dc 100644 --- a/src/compiler/style/css-parser/serialize-css.ts +++ b/src/compiler/style/css-parser/serialize-css.ts @@ -35,7 +35,7 @@ const serializeCssVisitNode = (opts: SerializeOpts, node: CssNode, index: number return serializeCssRule(opts, node); } if (nodeType === CssNodeType.Comment) { - if (node.comment[0] === '!') { + if (node.comment?.[0] === '!') { return `/*${node.comment}*/`; } else { return '';