From 744354aa2159a1d3ae57c6af7a35dc39594f56af Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Mon, 21 Oct 2019 18:06:00 +0300 Subject: [PATCH] refactor: simplify initializing styles, simpler and stricter types --- package-lock.json | 78 ++++++++++++++++++++++++++++++----------------- package.json | 2 +- src/css.tsx | 46 +++++++++++++--------------- src/xml.tsx | 3 +- 4 files changed, 74 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index 90d6f65e..a3b2e50c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1248,9 +1248,9 @@ } }, "@octokit/endpoint": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.3.5.tgz", - "integrity": "sha512-f8KqzIrnzPLiezDsZZPB+K8v8YSv6aKFl7eOu59O46lmlW4HagWl1U6NWl6LmT8d1w7NsKBI3paVtzcnRGO1gw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.4.1.tgz", + "integrity": "sha512-iwn46orWg3F4iqIzAVRfbzhnROyx7BQ7zJE0B7SEeaMIBvk3qmWtswtRk14QkMNUuNiCHQ6mAM00VJxWqrdM1g==", "dev": true, "requires": { "is-plain-object": "^3.0.0", @@ -1258,9 +1258,9 @@ } }, "@octokit/request": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.1.0.tgz", - "integrity": "sha512-I15T9PwjFs4tbWyhtFU2Kq7WDPidYMvRB7spmxoQRZfxSmiqullG+Nz+KbSmpkfnlvHwTr1e31R5WReFRKMXjg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.2.1.tgz", + "integrity": "sha512-onjQo4QKyiMAqLM6j3eH8vWw1LEfNCpoZUl6a+TrZVJM1wysBC8F0GhK9K/Vc9UsScSmVs2bstOVD34xpQ2wqQ==", "dev": true, "requires": { "@octokit/endpoint": "^5.1.0", @@ -1283,12 +1283,12 @@ } }, "@octokit/rest": { - "version": "16.28.9", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.28.9.tgz", - "integrity": "sha512-IKGnX+Tvzt7XHhs8f4ajqxyJvYAMNX5nWfoJm4CQj8LZToMiaJgutf5KxxpxoC3y5w7JTJpW5rnWnF4TsIvCLA==", + "version": "16.33.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.33.1.tgz", + "integrity": "sha512-lOQ+fJZwkeJ/1PRTdnY1uNja01aKOMioRhQfZtei64gZMXIX3EAfF4koMQMvoLFwsnVBu3ifj1JW1WAAKdXcnA==", "dev": true, "requires": { - "@octokit/request": "^5.0.0", + "@octokit/request": "^5.2.0", "@octokit/request-error": "^1.0.2", "atob-lite": "^2.0.0", "before-after-hook": "^2.0.0", @@ -1583,9 +1583,9 @@ } }, "@semantic-release/github": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.4.3.tgz", - "integrity": "sha512-nFoG1whDZettsGsMRE64kCFRpGSHxQxiKtUltKw67uYO7Q62049HGcdH7pZh/ipn+Uq2cG4Zef/g1vxVVaK82w==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.5.4.tgz", + "integrity": "sha512-CovZ9zs/rbBOCyyzmstoCwGS5qNEgab3wB8y3SAvOD7TfhtqizWVRkUJV7nzzaevomhUSZD/lp7Cs/fk1sE1Qw==", "dev": true, "requires": { "@octokit/rest": "^16.27.0", @@ -1597,13 +1597,12 @@ "fs-extra": "^8.0.0", "globby": "^10.0.0", "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "issue-parser": "^4.0.0", + "https-proxy-agent": "^3.0.0", + "issue-parser": "^5.0.0", "lodash": "^4.17.4", "mime": "^2.4.3", "p-filter": "^2.0.0", "p-retry": "^4.0.0", - "parse-github-url": "^1.0.1", "url-join": "^4.0.0" }, "dependencies": { @@ -1639,6 +1638,27 @@ "merge2": "^1.2.3", "slash": "^3.0.0" } + }, + "https-proxy-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.0.tgz", + "integrity": "sha512-y4jAxNEihqvBI5F3SaO2rtsjIOnnNA8sEbuiP+UhJZJHeM2NRm6c09ax2tgqme+SgUUvjao2fJXF4h3D6Cb2HQ==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } } } }, @@ -6071,6 +6091,14 @@ "shelljs": "^0.8.3", "typescript": "^3.4", "typescript-compiler": "^1.4.1-2" + }, + "dependencies": { + "typescript": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", + "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", + "dev": true + } } }, "flush-write-stream": { @@ -7814,9 +7842,9 @@ "dev": true }, "issue-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-4.0.0.tgz", - "integrity": "sha512-1RmmAXHl5+cqTZ9dRr861xWy0Gkc9TWTEklgjKv+nhlB1dY1NmGBV8b20jTWRL5cPGpOIXkz84kEcDBM8Nc0cw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-5.0.0.tgz", + "integrity": "sha512-q/16W7EPHRL0FKVz9NU++TUsoygXGj6JOi88oulyAcQG+IEZ0T6teVdE+VLbe19OfL/tbV8Wi3Dfo0HedeHW0Q==", "dev": true, "requires": { "lodash.capitalize": "^4.2.1", @@ -14376,12 +14404,6 @@ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", "dev": true }, - "parse-github-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", - "dev": true - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -17127,9 +17149,9 @@ "dev": true }, "typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", - "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", + "version": "3.7.0-beta", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.0-beta.tgz", + "integrity": "sha512-4jyCX+IQamrPJxgkABPq9xf+hUN+GWHVxoj+oey1TadCPa4snQl1RKwUba+1dyzYCamwlCxKvZQ3TjyWLhMGBA==", "dev": true }, "typescript-compiler": { diff --git a/package.json b/package.json index 86102087..f9ed1a6a 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "react-native": "^0.61.2", "semantic-release": "^15.13.24", "semantic-release-cli": "^5.2.1", - "typescript": "^3.6.3" + "typescript": "^3.7.0-beta" }, "release": { "plugins": [ diff --git a/src/css.tsx b/src/css.tsx index 8d278fd1..63c442c5 100644 --- a/src/css.tsx +++ b/src/css.tsx @@ -315,19 +315,17 @@ const declarationParseProps = { context: 'declarationList', parseValue: false, }; -type CSSStyleDeclaration = { - style: Styles; - properties: Map; -}; -function CSSStyleDeclaration({ props, styles }: AST): CSSStyleDeclaration { - const properties = new Map(); +function CSSStyleDeclaration(ast: AST) { + const { props, styles } = ast; + if (!props.style) { + props.style = {}; + } const style = props.style as Styles; - const styleDeclaration = { - style, - properties, - }; + const priority = new Map(); + ast.style = style; + ast.priority = priority; if (!styles || styles.length === 0) { - return styleDeclaration; + return; } try { const declarations = csstree.parse( @@ -338,7 +336,7 @@ function CSSStyleDeclaration({ props, styles }: AST): CSSStyleDeclaration { try { const { property, value, important } = node as Declaration; const name = property.trim(); - properties.set(name, important); + priority.set(name, important); style[camelCase(name)] = csstree.generate(value).trim(); } catch (styleError) { if (styleError.message !== 'Unknown node type: undefined') { @@ -355,16 +353,17 @@ function CSSStyleDeclaration({ props, styles }: AST): CSSStyleDeclaration { parseError, ); } - return styleDeclaration; } -function initStyle(selectedEl: AST) { +interface StyledAST extends AST { + style: Styles; + priority: Map; +} +function initStyle(selectedEl: AST): StyledAST { if (!selectedEl.style) { - if (!selectedEl.props.style) { - selectedEl.props.style = {}; - } - selectedEl.style = CSSStyleDeclaration(selectedEl); + CSSStyleDeclaration(selectedEl); } + return selectedEl as StyledAST; } /** @@ -451,13 +450,10 @@ export function inlineStyles(document: AST) { const selectorStr = csstree.generate(item.data); try { // apply