react-pdf-html-flabs-2 1.0.0 → 1.0.2

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/parse.js CHANGED
@@ -22,8 +22,8 @@ const convertRule = (rule, source = 'style') => {
22
22
  if (valueString.includes(',')) {
23
23
  const reduced = valueString.split(',', 2)[0];
24
24
  console.warn(`react-pdf doesn't support fontFamily lists like "${valueString}". Reducing to "${reduced}".`);
25
- return style;
26
25
  }
26
+ return style;
27
27
  }
28
28
  else if (!supportedStyles_1.default.includes(property)) {
29
29
  if ((property === 'background' &&
package/dist/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n HTMLElement,\n Node as HTMLNode,\n NodeType,\n parse,\n TextNode,\n} from 'node-html-parser';\nimport { Tag } from './tags';\nimport cssTree, { Block, Declaration, List, Rule, StyleSheet } from 'css-tree';\nimport supportedStyles from './supportedStyles';\nimport { HtmlStyle, HtmlStyles } from './styles';\nconst camelize = require('camelize');\n\nexport type HtmlContent = (HtmlElement | string)[];\n\nexport type HtmlElement = HTMLElement & {\n tag: Tag | 'string';\n parentNode: HtmlElement;\n style: HtmlStyle[];\n content: HtmlContent;\n indexOfType: number;\n querySelectorAll: (selector: string) => HtmlElement[];\n querySelector: (selector: string) => HtmlElement;\n};\n\nexport const convertRule = (\n rule: Block,\n source: string = 'style'\n): HtmlStyle => {\n const declarations = rule.children\n .filter((declaration) => declaration.type === 'Declaration')\n .toArray() as Declaration[];\n\n return declarations\n .map((entry) => ({\n ...entry,\n property: camelize(entry.property as string),\n }))\n .reduce((style, { property, value }: Declaration) => {\n let valueString = cssTree.generate(value);\n if (property && value) {\n if (property === 'fontFamily') {\n valueString = valueString.replace(/[\"']+/g, '');\n if (valueString.includes(',')) {\n const reduced = valueString.split(',', 2)[0];\n console.warn(\n `react-pdf doesn't support fontFamily lists like \"${valueString}\". Reducing to \"${reduced}\".`\n );\n return style;\n }\n } else if (!supportedStyles.includes(property)) {\n if (\n (property === 'background' &&\n /^#?[a-zA-Z0-9]+$/.test(valueString)) ||\n /^rgba?\\([0-9, ]+\\)$/i.test(valueString) ||\n /^hsla?\\([0-9.%, ]+\\)$/i.test(valueString)\n ) {\n property = 'backgroundColor';\n } else {\n console.warn(`${source}: Found unsupported style \"${property}\"`, {\n property,\n value,\n });\n return style;\n }\n }\n\n if (property == 'border' && valueString == 'none') valueString = '0';\n style[property as keyof HtmlStyle] = valueString;\n }\n return style;\n }, {} as HtmlStyle);\n};\n\nexport const convertStylesheet = (stylesheet: string): HtmlStyles => {\n const response = {} as HtmlStyles;\n try {\n const parsed = cssTree.parse(stylesheet) as StyleSheet;\n const rules = parsed.children.filter(\n (rule) => rule.type === 'Rule' && rule.prelude?.type === 'SelectorList'\n ) as List<Rule>;\n rules.forEach((rule) => {\n const style = convertRule(rule.block);\n if (rule.prelude.type !== 'SelectorList') {\n return;\n }\n rule.prelude.children.forEach((selector) => {\n const selectorString = cssTree.generate(selector);\n response[selectorString] = style;\n });\n });\n } catch (e) {\n console.error(`Error parsing stylesheet: \"${stylesheet}\"`, e);\n }\n return response;\n};\n\nexport const convertElementStyle = (\n styleAttr: string,\n tag: string\n): HtmlStyle | undefined => {\n try {\n const parsed = cssTree.parse(`${tag} { ${styleAttr} }`) as StyleSheet;\n const rules = parsed.children.filter(\n (rule) => rule.type === 'Rule' && rule.prelude?.type === 'SelectorList'\n ) as List<Rule>;\n const firstRule = rules.first();\n return firstRule ? convertRule(firstRule.block, tag) : undefined;\n } catch (e) {\n console.error(\n `Error parsing style attribute \"${styleAttr}\" for tag: ${tag}`,\n e\n );\n }\n};\n\nexport const convertNode = (node: HTMLNode): HtmlElement | string => {\n if (node.nodeType === NodeType.TEXT_NODE) {\n return (node as TextNode).rawText;\n }\n if (node.nodeType === NodeType.COMMENT_NODE) {\n return '';\n }\n if (node.nodeType !== NodeType.ELEMENT_NODE) {\n throw new Error('Not sure what this is');\n }\n const html = node as HTMLElement;\n const content = html.childNodes.map(convertNode);\n const kindCounters: Record<string, number> = {};\n content.forEach((child) => {\n if (typeof child !== 'string') {\n child.indexOfType =\n child.tag in kindCounters\n ? (kindCounters[child.tag] = kindCounters[child.tag] + 1)\n : (kindCounters[child.tag] = 0);\n }\n });\n\n let style: HtmlStyle | undefined;\n if (html.attributes.style && html.attributes.style.trim()) {\n style = convertElementStyle(html.attributes.style, html.tagName);\n }\n\n return Object.assign(html, {\n tag: (html.tagName || '').toLowerCase() as Tag | string,\n style: style ? [style] : [],\n content,\n indexOfType: 0,\n }) as HtmlElement;\n};\n\nconst parseHtml = (\n text: string\n): { stylesheets: HtmlStyles[]; rootElement: HtmlElement } => {\n const html = parse(text, { comment: false });\n const stylesheets = html\n .querySelectorAll('style')\n .map((styleNode) =>\n styleNode.childNodes.map((textNode) => textNode.rawText.trim()).join('\\n')\n )\n .filter((styleText) => !!styleText)\n .map(convertStylesheet);\n return {\n stylesheets,\n rootElement: convertNode(html) as HtmlElement,\n };\n};\n\nexport default parseHtml;\n"]}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n HTMLElement,\n Node as HTMLNode,\n NodeType,\n parse,\n TextNode,\n} from 'node-html-parser';\nimport { Tag } from './tags';\nimport cssTree, { Block, Declaration, List, Rule, StyleSheet } from 'css-tree';\nimport supportedStyles from './supportedStyles';\nimport { HtmlStyle, HtmlStyles } from './styles';\nconst camelize = require('camelize');\n\nexport type HtmlContent = (HtmlElement | string)[];\n\nexport type HtmlElement = HTMLElement & {\n tag: Tag | 'string';\n parentNode: HtmlElement;\n style: HtmlStyle[];\n content: HtmlContent;\n indexOfType: number;\n querySelectorAll: (selector: string) => HtmlElement[];\n querySelector: (selector: string) => HtmlElement;\n};\n\nexport const convertRule = (\n rule: Block,\n source: string = 'style'\n): HtmlStyle => {\n const declarations = rule.children\n .filter((declaration) => declaration.type === 'Declaration')\n .toArray() as Declaration[];\n\n return declarations\n .map((entry) => ({\n ...entry,\n property: camelize(entry.property as string),\n }))\n .reduce((style, { property, value }: Declaration) => {\n let valueString = cssTree.generate(value);\n if (property && value) {\n if (property === 'fontFamily') {\n valueString = valueString.replace(/[\"']+/g, '');\n if (valueString.includes(',')) {\n const reduced = valueString.split(',', 2)[0];\n console.warn(\n `react-pdf doesn't support fontFamily lists like \"${valueString}\". Reducing to \"${reduced}\".`\n );\n }\n return style;\n } else if (!supportedStyles.includes(property)) {\n if (\n (property === 'background' &&\n /^#?[a-zA-Z0-9]+$/.test(valueString)) ||\n /^rgba?\\([0-9, ]+\\)$/i.test(valueString) ||\n /^hsla?\\([0-9.%, ]+\\)$/i.test(valueString)\n ) {\n property = 'backgroundColor';\n } else {\n console.warn(`${source}: Found unsupported style \"${property}\"`, {\n property,\n value,\n });\n return style;\n }\n }\n\n if (property == 'border' && valueString == 'none') valueString = '0';\n style[property as keyof HtmlStyle] = valueString;\n }\n return style;\n }, {} as HtmlStyle);\n};\n\nexport const convertStylesheet = (stylesheet: string): HtmlStyles => {\n const response = {} as HtmlStyles;\n try {\n const parsed = cssTree.parse(stylesheet) as StyleSheet;\n const rules = parsed.children.filter(\n (rule) => rule.type === 'Rule' && rule.prelude?.type === 'SelectorList'\n ) as List<Rule>;\n rules.forEach((rule) => {\n const style = convertRule(rule.block);\n if (rule.prelude.type !== 'SelectorList') {\n return;\n }\n rule.prelude.children.forEach((selector) => {\n const selectorString = cssTree.generate(selector);\n response[selectorString] = style;\n });\n });\n } catch (e) {\n console.error(`Error parsing stylesheet: \"${stylesheet}\"`, e);\n }\n return response;\n};\n\nexport const convertElementStyle = (\n styleAttr: string,\n tag: string\n): HtmlStyle | undefined => {\n try {\n const parsed = cssTree.parse(`${tag} { ${styleAttr} }`) as StyleSheet;\n const rules = parsed.children.filter(\n (rule) => rule.type === 'Rule' && rule.prelude?.type === 'SelectorList'\n ) as List<Rule>;\n const firstRule = rules.first();\n return firstRule ? convertRule(firstRule.block, tag) : undefined;\n } catch (e) {\n console.error(\n `Error parsing style attribute \"${styleAttr}\" for tag: ${tag}`,\n e\n );\n }\n};\n\nexport const convertNode = (node: HTMLNode): HtmlElement | string => {\n if (node.nodeType === NodeType.TEXT_NODE) {\n return (node as TextNode).rawText;\n }\n if (node.nodeType === NodeType.COMMENT_NODE) {\n return '';\n }\n if (node.nodeType !== NodeType.ELEMENT_NODE) {\n throw new Error('Not sure what this is');\n }\n const html = node as HTMLElement;\n const content = html.childNodes.map(convertNode);\n const kindCounters: Record<string, number> = {};\n content.forEach((child) => {\n if (typeof child !== 'string') {\n child.indexOfType =\n child.tag in kindCounters\n ? (kindCounters[child.tag] = kindCounters[child.tag] + 1)\n : (kindCounters[child.tag] = 0);\n }\n });\n\n let style: HtmlStyle | undefined;\n if (html.attributes.style && html.attributes.style.trim()) {\n style = convertElementStyle(html.attributes.style, html.tagName);\n }\n\n return Object.assign(html, {\n tag: (html.tagName || '').toLowerCase() as Tag | string,\n style: style ? [style] : [],\n content,\n indexOfType: 0,\n }) as HtmlElement;\n};\n\nconst parseHtml = (\n text: string\n): { stylesheets: HtmlStyles[]; rootElement: HtmlElement } => {\n const html = parse(text, { comment: false });\n const stylesheets = html\n .querySelectorAll('style')\n .map((styleNode) =>\n styleNode.childNodes.map((textNode) => textNode.rawText.trim()).join('\\n')\n )\n .filter((styleText) => !!styleText)\n .map(convertStylesheet);\n return {\n stylesheets,\n rootElement: convertNode(html) as HtmlElement,\n };\n};\n\nexport default parseHtml;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-pdf-html-flabs-2",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "author": "Harsh",
5
5
  "description": "Html component for react-pdf with CSS support optimized",
6
6
  "keywords": [