From 3b67053b3efc186f366b95fdf46a2b9f4c1c18d6 Mon Sep 17 00:00:00 2001 From: Timo Hocker Date: Fri, 24 Apr 2020 17:01:26 +0200 Subject: [PATCH] styles --- lib/Color.ts | 52 +++++++++++++++++++++++ lib/Edge.ts | 18 +++++++- lib/Graph.ts | 16 +++++++- lib/Node.ts | 4 ++ lib/Styles.ts | 32 +++++++++++++++ lib/index.ts | 2 + package.json | 7 +++- test/Color.ts | 9 ++++ test/Edge.ts | 6 ++- test/Graph.ts | 7 +++- test/Node.ts | 11 +++-- yarn.lock | 111 ++++++++++++++++++++++++++------------------------ 12 files changed, 212 insertions(+), 63 deletions(-) create mode 100644 lib/Color.ts create mode 100644 lib/Styles.ts create mode 100644 test/Color.ts diff --git a/lib/Color.ts b/lib/Color.ts new file mode 100644 index 0000000..778338d --- /dev/null +++ b/lib/Color.ts @@ -0,0 +1,52 @@ +/* eslint-disable no-magic-numbers */ +import { num_to_hex } from '@scode/encoding-helper'; + +export class Color { + public static readonly black = new Color (0, 0, 0); + public static readonly red = new Color (255, 0, 0); + public static readonly green = new Color (0, 255, 0); + public static readonly yellow = new Color (255, 255, 0); + public static readonly blue = new Color (0, 0, 255); + public static readonly magenta = new Color (255, 0, 255); + public static readonly cyan = new Color (0, 255, 255); + public static readonly white = new Color (255, 255, 255); + public static readonly transparent = new Color (0, 0, 0, 0); + public static readonly gray = new Color (128, 128, 128); + + private red: number; + private green: number; + private blue: number; + private alpha: number; + + private check_range (n: number): void { + if (n < 0 || n > 255) + throw new Error ('number out of range'); + } + + public constructor (red: number, green: number, blue: number, alpha = 255) { + this.check_range (red); + this.check_range (green); + this.check_range (blue); + this.check_range (alpha); + this.red = red; + this.green = green; + this.blue = blue; + this.alpha = alpha; + } + + // eslint-disable-next-line @typescript-eslint/naming-convention + public toString (): string { + return `#${num_to_hex ( + this.red, + 2 + )}${num_to_hex ( + this.green, + 2 + )}${num_to_hex ( + this.blue, + 2 + )}${this.alpha === 255 + ? '' + : num_to_hex (this.alpha, 2)}`; + } +} diff --git a/lib/Edge.ts b/lib/Edge.ts index a03a458..2ba92ca 100644 --- a/lib/Edge.ts +++ b/lib/Edge.ts @@ -1,6 +1,11 @@ +import { EdgeStyles } from './Styles'; +import { Color } from './Color'; + export class Edge { public origin: string; public target: string; + public style?: EdgeStyles; + public color?: Color; public constructor (origin: string, target: string) { this.origin = origin; @@ -9,6 +14,17 @@ export class Edge { // eslint-disable-next-line @typescript-eslint/naming-convention public toString (): string { - return `${this.origin} -> ${this.target}`; + const attributes = []; + if (this.style) + attributes.push ({ name: 'style', value: this.style.toString () }); + if (this.color) + attributes.push ({ name: 'color', value: this.color.toString () }); + + const attr_string = ` [${attributes.map ((v) => `${v.name}="${v.value}"`) + .join (',')}]`; + + return `${this.origin} -> ${this.target}${attributes.length > 0 + ? attr_string + : ''}`; } } diff --git a/lib/Graph.ts b/lib/Graph.ts index 05f0969..a09399c 100644 --- a/lib/Graph.ts +++ b/lib/Graph.ts @@ -1,18 +1,30 @@ import { Element } from './Element'; import { Edge } from './Edge'; import { Node } from './Node'; +import { GraphStyles } from './Styles'; +import { Color } from './Color'; export class Graph extends Element { public children: Array = []; public nodes: Array = []; public is_root = false; public edges: Array = []; + public style?: GraphStyles; + public color?: Color; // eslint-disable-next-line @typescript-eslint/naming-convention public toString (level = 0): string { const header = this.parent ? `subgraph cluster_${this.full_name}` : `digraph ${this.full_name}`; + const attributes = []; + if (this.color) + attributes.push ({ name: 'color', value: this.color.toString () }); + if (this.style) + attributes.push ({ name: 'style', value: this.style.toString () }); + + let attrs = `\n ${attributes.map ((v) => `${v.name} = ${v.value}`) + .join ('\n ')}\n`; let children = `\n ${this.children.map ((c) => c.toString (level + 1)) .join ('\n ')}\n`; let nodes = `\n ${this.nodes.map ((c) => c.toString ()) @@ -20,6 +32,8 @@ export class Graph extends Element { let edges = `\n ${this.edges.map ((c) => c.toString ()) .join ('\n ')}\n`; + if (attrs === '\n \n') + attrs = ''; if (children === '\n \n') children = ''; if (nodes === '\n \n') @@ -27,7 +41,7 @@ export class Graph extends Element { if (edges === '\n \n') edges = ''; - return `${header} {${children}${nodes}${edges}}` + return `${header} {${attrs}${children}${nodes}${edges}}` .replace (/\n/gu, `\n${' '.repeat (level)}`) .replace (/^\s+$/gmu, ''); } diff --git a/lib/Node.ts b/lib/Node.ts index bae6be9..7574fa5 100644 --- a/lib/Node.ts +++ b/lib/Node.ts @@ -1,9 +1,13 @@ import { Element } from './Element'; +import { NodeStyles } from './Styles'; +import { Color } from './Color'; export class Node extends Element { public label?: string; public is_table = false; public table_contents?: Array>; + public style?: NodeStyles; + public color?: Color; public constructor (name: string, parent?: string, label?: string) { super (name, parent); diff --git a/lib/Styles.ts b/lib/Styles.ts new file mode 100644 index 0000000..fa40799 --- /dev/null +++ b/lib/Styles.ts @@ -0,0 +1,32 @@ +enum EdgeStyles { + default = '', + solid = 'solid', + dashed = 'dashed', + dotted='dotted', + bold='bold' +} + +enum NodeStyles { + default = '', + solid='solid', + dashed='dashed', + dotted='dotted', + bold='bold', + rounded='rounded', + diagonals='diagonals', + filled='filled', + striped='striped', + wedged='wedged' +} + +enum GraphStyles { + solid = 'solid', + dashed = 'dashed', + dotted = 'dotted', + bold = 'bold', + rounded = 'rounded', + filled = 'filled', + striped = 'striped' +} + +export { EdgeStyles, NodeStyles, GraphStyles }; diff --git a/lib/index.ts b/lib/index.ts index 75525de..d1f0946 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -2,3 +2,5 @@ export { Graph } from './Graph'; export { Node } from './Node'; export { Element } from './Element'; export { Edge } from './Edge'; +export { Color } from './Color'; +export { EdgeStyles, NodeStyles, GraphStyles } from './Styles'; diff --git a/package.json b/package.json index 3bdacce..84e6669 100644 --- a/package.json +++ b/package.json @@ -20,5 +20,8 @@ "files": [ "/dist/", "LICENSE" - ] -} \ No newline at end of file + ], + "dependencies": { + "@scode/encoding-helper": "^1.0.21" + } +} diff --git a/test/Color.ts b/test/Color.ts new file mode 100644 index 0000000..5a77f1f --- /dev/null +++ b/test/Color.ts @@ -0,0 +1,9 @@ +import test from 'ava'; +import { Color } from '../lib'; + +test ('serialize', (t) => { + const wh = Color.white; + const tr = Color.transparent; + t.is (wh.toString (), '#ffffff'); + t.is (tr.toString (), '#00000000'); +}); diff --git a/test/Edge.ts b/test/Edge.ts index 1600cee..9cd51c9 100644 --- a/test/Edge.ts +++ b/test/Edge.ts @@ -1,8 +1,10 @@ import test from 'ava'; -import { Edge } from '../lib'; +import { Edge, Color, EdgeStyles } from '../lib'; test ('serialize', (t) => { const e = new Edge ('foo', 'bar'); + e.color = Color.white; + e.style = EdgeStyles.dashed; const serialized = e.toString (); - t.is (serialized, 'foo -> bar'); + t.is (serialized, 'foo -> bar [style="dashed",color="#ffffff"]'); }); diff --git a/test/Graph.ts b/test/Graph.ts index 2319e48..1e5466a 100644 --- a/test/Graph.ts +++ b/test/Graph.ts @@ -1,8 +1,11 @@ import test from 'ava'; -import { Graph } from '../lib'; +import { Graph, GraphStyles, Color } from '../lib'; const result = `digraph foo { subgraph cluster_foo_baz { + color = #ff0000 + style = bold + foo_baz_asd [label=] } @@ -19,6 +22,8 @@ test ('serialize', (t) => { g.add_graph ((graph) => { graph.name = 'baz'; graph.add_node ('asd'); + graph.style = GraphStyles.bold; + graph.color = Color.red; }); g.add_node ('baz'); diff --git a/test/Node.ts b/test/Node.ts index fee94b6..f3f0cb9 100644 --- a/test/Node.ts +++ b/test/Node.ts @@ -1,15 +1,18 @@ import test from 'ava'; -import { Node } from '../lib/Node'; +import { NodeStyles, Node, Color } from '../lib'; -const serialized_simple = 'bar_foo [label=]'; +const serialized_simple += 'bar_foo [label=,style="dashed",color="#00ff00"]'; const serialized_table = `bar_foo [label=< -
foobarbaz
barbazfoo
bazfoobar
>]`; +>,style="invis",color="#00ff00"]`; test ('serialize simple', (t) => { const g = new Node ('foo', 'bar', 'baz'); + g.color = Color.green; + g.style = NodeStyles.dashed; const serialized = g.toString (); t.is (g.full_name, 'bar_foo'); @@ -18,6 +21,8 @@ test ('serialize simple', (t) => { test ('serialize table', (t) => { const g = new Node ('foo', 'bar', 'baz'); + g.color = Color.green; + g.style = NodeStyles.dashed; g.table_contents = [ [ diff --git a/yarn.lock b/yarn.lock index 64dceb1..fb2fa2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -227,10 +227,15 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@scode/encoding-helper@^1.0.21": + version "1.0.23" + resolved "https://npm.scode.ovh/@scode%2fencoding-helper/-/encoding-helper-1.0.23.tgz#5955758e37ac608f571ef3602071ebc1c9866f8c" + integrity sha512-ShUWprWjUNd6/+TeJoPGwnMu6am0zWPsTLGQh0OimmCyeIGnXsV6a6B4Ettzkf0uVS59gQdGTdKvbxskusWzZQ== + "@scode/eslint-config-es6@^1.0.1": - version "1.0.20" - resolved "https://npm.scode.ovh/@scode%2feslint-config-es6/-/eslint-config-es6-1.0.20.tgz#b4a5deeab8168a73233b41149134d85bb075638f" - integrity sha512-h00GK6F5jycy7OmmXa9QHHIbv1x7DmMBuwLJSpl+lJD+pi7AUCCQv7oHmZ8autCZXXC9/8bPwJWrH9udIuiujg== + version "1.0.22" + resolved "https://npm.scode.ovh/@scode%2feslint-config-es6/-/eslint-config-es6-1.0.22.tgz#be1a200c821137e74b829ec0029acc81734f1fca" + integrity sha512-/BnuycrNMFm4KKk2rz7JF0DBAN/JvWKpE0uK2fLz8m4o88TX5AKrlUg/w4c6ctPTzhD9t9tS9tuZFn/Vs0J3mg== dependencies: "@scode/eslint-config" "^2.0.1" eslint-plugin-import "^2.20.1" @@ -245,11 +250,11 @@ "@typescript-eslint/parser" "^2.26.0" "@scode/eslint-config@^2.0.1": - version "2.0.10" - resolved "https://npm.scode.ovh/@scode%2feslint-config/-/eslint-config-2.0.10.tgz#a154d30de47893046cda34925c191a88f400ddc9" - integrity sha512-6BEMBK8VNPX+9FWkBhXzCWQ6j0l0JTS0F0UTUcPnzefau48WYlFZyORtyIc8H0OvYaeeLUD1gUNjLVsKjwTPHg== + version "2.0.11" + resolved "https://npm.scode.ovh/@scode%2feslint-config/-/eslint-config-2.0.11.tgz#3cc3cd71f3bc3ac39868bf608e0517bee09da58f" + integrity sha512-K8DpFdmepU1FNp0QJn5gbXS45g7k04rFUJp2OKQDqSa+3iywBvi44pMzJNOdZjkj+t3dGcOdeWcYOngz2MjdlA== dependencies: - eslint-plugin-jsdoc "^23.0.0" + eslint-plugin-jsdoc "^24.0.0" eslint-plugin-node "^11.0.0" eslint-plugin-sort-requires-by-path "^1.0.2" @@ -300,9 +305,9 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "13.11.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7" - integrity sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g== + version "13.13.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54" + integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -310,39 +315,39 @@ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@typescript-eslint/eslint-plugin@^2.26.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.28.0.tgz#4431bc6d3af41903e5255770703d4e55a0ccbdec" - integrity sha512-w0Ugcq2iatloEabQP56BRWJowliXUP5Wv6f9fKzjJmDW81hOTBxRoJ4LoEOxRpz9gcY51Libytd2ba3yLmSOfg== + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.29.0.tgz#c9efab7624e3dd6d144a0e4577a541d1bd42c2ac" + integrity sha512-X/YAY7azKirENm4QRpT7OVmzok02cSkqeIcLmdz6gXUQG4Hk0Fi9oBAynSAyNXeGdMRuZvjBa0c1Lu0dn/u6VA== dependencies: - "@typescript-eslint/experimental-utils" "2.28.0" + "@typescript-eslint/experimental-utils" "2.29.0" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.28.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.28.0.tgz#1fd0961cd8ef6522687b4c562647da6e71f8833d" - integrity sha512-4SL9OWjvFbHumM/Zh/ZeEjUFxrYKtdCi7At4GyKTbQlrj1HcphIDXlje4Uu4cY+qzszR5NdVin4CCm6AXCjd6w== +"@typescript-eslint/experimental-utils@2.29.0": + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.29.0.tgz#3cb8060de9265ba131625a96bbfec31ba6d4a0fe" + integrity sha512-H/6VJr6eWYstyqjWXBP2Nn1hQJyvJoFdDtsHxGiD+lEP7piGnGpb/ZQd+z1ZSB1F7dN+WsxUDh8+S4LwI+f3jw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.28.0" + "@typescript-eslint/typescript-estree" "2.29.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^2.26.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.28.0.tgz#bb761286efd2b0714761cab9d0ee5847cf080385" - integrity sha512-RqPybRDquui9d+K86lL7iPqH6Dfp9461oyqvlXMNtap+PyqYbkY5dB7LawQjDzot99fqzvS0ZLZdfe+1Bt3Jgw== + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.29.0.tgz#6e3c4e21ed6393dc05b9d8b47f0b7e731ef21c9c" + integrity sha512-H78M+jcu5Tf6m/5N8iiFblUUv+HJDguMSdFfzwa6vSg9lKR8Mk9BsgeSjO8l2EshKnJKcbv0e8IDDOvSNjl0EA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.28.0" - "@typescript-eslint/typescript-estree" "2.28.0" + "@typescript-eslint/experimental-utils" "2.29.0" + "@typescript-eslint/typescript-estree" "2.29.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.28.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.28.0.tgz#d34949099ff81092c36dc275b6a1ea580729ba00" - integrity sha512-HDr8MP9wfwkiuqzRVkuM3BeDrOC4cKbO5a6BymZBHUt5y/2pL0BXD6I/C/ceq2IZoHWhcASk+5/zo+dwgu9V8Q== +"@typescript-eslint/typescript-estree@2.29.0": + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.29.0.tgz#1be6612bb02fc37ac9f466521c1459a4744e8d3a" + integrity sha512-3YGbtnWy4az16Egy5Fj5CckkVlpIh0MADtAQza+jiMADRSKkjdpzZp/5WuvwK/Qib3Z0HtzrDFeWanS99dNhnA== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" @@ -371,9 +376,9 @@ aggregate-error@^3.0.0: indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.10.2: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1133,10 +1138,10 @@ eslint-plugin-import@^2.20.1: read-pkg-up "^2.0.0" resolve "^1.12.0" -eslint-plugin-jsdoc@^23.0.0: - version "23.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-23.0.0.tgz#f80dca482fc9d93a9e30b3ead70b88dee261caa3" - integrity sha512-zj5ZephjKkFU/J9hEw3RcjwpuywChvwNMgHs2DTgOuKarpJ65SJU3JGgx/K4y9l8iFw0ysrk6NlAKDX88ZwZdw== +eslint-plugin-jsdoc@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-24.0.0.tgz#41c7b06d33741e41e80a8f08c82aaa58ceef2e4b" + integrity sha512-AGAc9PYpramsJGVmqtxnXBYlq+AMh+hIZdbJ52OLvyJS3f+PaT/PzuckRFOLnth2uhCDv4IjgsB3r5jUFWqUnw== dependencies: comment-parser "^0.7.2" debug "^4.1.1" @@ -1409,9 +1414,9 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" @@ -2076,9 +2081,9 @@ lowercase-keys@^2.0.0: integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== make-dir@^3.0.0, make-dir@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" @@ -2311,9 +2316,9 @@ optionator@^0.8.3: word-wrap "~1.2.3" ora@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" - integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" + integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== dependencies: chalk "^3.0.0" cli-cursor "^3.1.0" @@ -2698,9 +2703,9 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2: - version "1.16.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.0.tgz#063dc704fa3413e13ac1d0d1756a7cbfe95dd1a7" - integrity sha512-LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA== + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" @@ -2847,9 +2852,9 @@ slice-ansi@^3.0.0: is-fullwidth-code-point "^3.0.0" source-map-support@^0.5.16: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -2885,9 +2890,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.0"