From 41abebf73e90d96eb8322977129be05a85171b3b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2019 11:50:40 +0000 Subject: [PATCH 001/180] Bump react from 16.9.0 to 16.11.0 Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 16.9.0 to 16.11.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v16.11.0/packages/react) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 46 +++------------------------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c516001..9809270e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1361,54 +1361,14 @@ } }, "react": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", - "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz", + "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "react-is": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", - "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==", - "dev": true - } } }, "react-is": { From 9b2a26cd7786ecf218818d1639ca51162362c790 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2019 11:51:25 +0000 Subject: [PATCH 002/180] Bump typescript from 3.5.3 to 3.6.4 Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.5.3 to 3.6.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v3.5.3...v3.6.4) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c516001..8cf40fac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1790,6 +1790,14 @@ "shelljs": "^0.8.3", "typedoc-default-themes": "^0.6.0", "typescript": "3.5.x" + }, + "dependencies": { + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "dev": true + } } }, "typedoc-default-themes": { @@ -1815,9 +1823,9 @@ } }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "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 }, "uglify-js": { From 6dd97875887cf1a468e60d5446ccd940b29699a8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2019 11:51:32 +0000 Subject: [PATCH 003/180] Bump @nodegui/nodegui from 0.2.1 to 0.3.1 Bumps @nodegui/nodegui from 0.2.1 to 0.3.1. Signed-off-by: dependabot-preview[bot] --- package-lock.json | 59 ++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c516001..855368c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@nodegui/nodegui": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.2.1.tgz", - "integrity": "sha512-0IpMHDfOWS87MG8LC0uYNOrz/yFdhoY15LVL1T9z1pkzzAaQA8OkT+8WV7XVNhLwo5ds4tl/MOAaqhG3ZB9N2Q==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.3.1.tgz", + "integrity": "sha512-kYbx71d1jTDoF6fUQMOWzEisVDVhi0FgW2yPtjqU19rhxYrH5gvTHTEpOpJ+KYgdCu8F8IuTo6P18vdaoRtg4A==", "dev": true, "requires": { "@nodegui/qode": "^1.0.5", @@ -190,9 +190,9 @@ } }, "big-integer": { - "version": "1.6.46", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.46.tgz", - "integrity": "sha512-Vj2TNtZ8Y0XaL6HCkzJiEqfykjtv/9wVCWIutMe+QVIXLPe2tCLEzULtYvcX9WRtmNIj3Jqi5tNjIsR0N4QOsg==", + "version": "1.6.47", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.47.tgz", + "integrity": "sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg==", "dev": true }, "binary": { @@ -206,9 +206,9 @@ } }, "bluebird": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", - "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", "dev": true }, "brace-expansion": { @@ -470,14 +470,25 @@ } }, "cross-spawn": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.0.tgz", - "integrity": "sha512-6U/8SMK2FBNnB21oQ4+6Nsodxanw1gTkntYA2zBdkFYFu3ZDx65P2ONEXGSvob/QS6REjVHQ9zxzdOafwFdstw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", "dev": true, "requires": { "path-key": "^3.1.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz", + "integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "csstype": { @@ -1259,9 +1270,9 @@ "dev": true }, "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -1546,18 +1557,18 @@ "dev": true }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "shelljs": { diff --git a/package.json b/package.json index fe067a9c..823857f8 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "react": "^16.9.0" }, "devDependencies": { - "@nodegui/nodegui": "^0.2.1", + "@nodegui/nodegui": "^0.3.1", "@types/node": "^12.0.10", "@types/react-reconciler": "^0.18.0", "prettier": "^1.18.2", From 57c71de7a18d510795ccb1df0c266069e4ff4658 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2019 11:51:59 +0000 Subject: [PATCH 004/180] Bump typedoc-plugin-markdown from 2.2.7 to 2.2.11 Bumps [typedoc-plugin-markdown](https://github.com/tom-grey/typedoc-plugin-markdown) from 2.2.7 to 2.2.11. - [Release notes](https://github.com/tom-grey/typedoc-plugin-markdown/releases) - [Commits](https://github.com/tom-grey/typedoc-plugin-markdown/commits/v2.2.11) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c516001..ba5149e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1805,13 +1805,12 @@ } }, "typedoc-plugin-markdown": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.2.7.tgz", - "integrity": "sha512-bxP/hYQcI2vpfH5xlQorq1jrfLbVW+FzDE1lQ0gxr69akMkqAe0GxVaEPE7tQ6lTVDpymh/AyOe9O8YoODB8YQ==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.2.11.tgz", + "integrity": "sha512-tzBJJjM23DZMbfV+wds+M/IH8xNUVX4iyvABWyL9+gQZY6Fwbf2xGur2Dg6jNXGn2OsuqjZRI3dvSeqw64MSMA==", "dev": true, "requires": { - "fs-extra": "^8.1.0", - "handlebars": "^4.1.2" + "fs-extra": "^8.1.0" } }, "typescript": { From 1ea191cd759681419337cbe56399005419659031 Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 1 Nov 2019 21:11:23 +0100 Subject: [PATCH 005/180] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f6720bda..ff1ef97c 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ Please read: https://github.com/nodegui/.github/blob/master/CONTRIBUTING.md ## Funding -React NodeGUI is an open source project and requires your support. If you like this project, please consider supporting my work with Ko-fi. Alternatively, Issues on React NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors. +React NodeGUI is an open source project and requires your support. If you like this project, please consider supporting my work by clicking on the sponsor button on this Github repo or via Ko-Fi. Alternatively, Issues on React NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors.

Buy Me a Coffee at ko-fi.com     From 729313a9d712e5b3c2dc928aff163461e63a9ede Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 11:43:13 +0100 Subject: [PATCH 006/180] Adds hot-reload support --- extras/assets/nodegui.png | Bin 0 -> 40701 bytes extras/assets/nodegui_white.png | Bin 0 -> 67511 bytes package-lock.json | 22 +++++++++--- package.json | 4 ++- src/components/config.ts | 20 +++++++---- src/development/hot-reload/index.ts | 13 ++++++++ src/development/hot-reload/react-proxy.d.ts | 9 +++++ src/index.ts | 1 + src/reconciler/index.ts | 9 +++-- src/renderer/index.ts | 35 +++++++++++++++----- 10 files changed, 90 insertions(+), 23 deletions(-) create mode 100644 extras/assets/nodegui.png create mode 100644 extras/assets/nodegui_white.png create mode 100644 src/development/hot-reload/index.ts create mode 100644 src/development/hot-reload/react-proxy.d.ts diff --git a/extras/assets/nodegui.png b/extras/assets/nodegui.png new file mode 100644 index 0000000000000000000000000000000000000000..16c3c028253c637c016d18ad0f82170e39e03b25 GIT binary patch literal 40701 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%0Du2IdeVYGaZgoE;2sY? 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.3.0", "@nodegui/qode": "*", "react": "^16.9.0" }, diff --git a/src/components/config.ts b/src/components/config.ts index 8378d4f8..73dcec99 100644 --- a/src/components/config.ts +++ b/src/components/config.ts @@ -5,7 +5,15 @@ import { AppContainer } from "../reconciler"; type UpdatePayload = any; export interface RNProps {} -export abstract class RNWidget extends NodeWidget { +export abstract class RNWidget extends NodeWidget implements RNComponent { + static tagName: string; + abstract setProps(newProps: RNProps, oldProps: RNProps): void; + abstract appendInitialChild(child: NodeWidget): void; + abstract appendChild(child: NodeWidget): void; + abstract insertBefore(child: NodeWidget, beforeChild: NodeWidget): void; + abstract removeChild(child: NodeWidget): void; +} +export abstract class RNComponent { static tagName: string; abstract setProps(newProps: RNProps, oldProps: RNProps): void; abstract appendInitialChild(child: NodeWidget): void; @@ -24,9 +32,9 @@ export abstract class ComponentConfig { rootInstance: AppContainer, context: any, workInProgress: Fiber - ): NodeWidget; + ): RNComponent; finalizeInitialChildren( - instance: NodeWidget, + instance: RNComponent, newProps: RNProps, rootContainerInstance: AppContainer, context: any @@ -34,7 +42,7 @@ export abstract class ComponentConfig { return false; } commitMount( - instance: NodeWidget, + instance: RNComponent, newProps: RNProps, internalInstanceHandle: any ) { @@ -42,7 +50,7 @@ export abstract class ComponentConfig { } // Update methods: prepareUpdate( - instance: NodeWidget, + instance: RNComponent, oldProps: RNProps, newProps: RNProps, rootContainerInstance: AppContainer, @@ -51,7 +59,7 @@ export abstract class ComponentConfig { return true; } abstract commitUpdate( - instance: NodeWidget, + instance: RNComponent, updatePayload: any, oldProps: RNProps, newProps: RNProps, diff --git a/src/development/hot-reload/index.ts b/src/development/hot-reload/index.ts new file mode 100644 index 00000000..7fae467e --- /dev/null +++ b/src/development/hot-reload/index.ts @@ -0,0 +1,13 @@ +import createProxy, { ReactProxyComponent } from "react-proxy"; +import React from "react"; + +export let appProxy: ReactProxyComponent; // need to export it so that it stays without being gc'd + +export function hot(Component: React.ComponentType): React.ComponentType { + if (appProxy) { + appProxy.update(Component); + } else { + appProxy = createProxy(Component); + } + return appProxy.get(); +} diff --git a/src/development/hot-reload/react-proxy.d.ts b/src/development/hot-reload/react-proxy.d.ts new file mode 100644 index 00000000..34bb700a --- /dev/null +++ b/src/development/hot-reload/react-proxy.d.ts @@ -0,0 +1,9 @@ +declare module "react-proxy" { + interface ReactProxyComponent { + update(Component: React.ComponentType): void; + get(): React.ComponentType; + } + export default function createProxy( + Component: React.ComponentType + ): ReactProxyComponent; +} diff --git a/src/index.ts b/src/index.ts index 08878cb4..f951fc01 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,3 +13,4 @@ export { Dial } from "./components/Dial"; export { SpinBox } from "./components/SpinBox"; export { ScrollArea } from "./components/ScrollArea"; export { useEventHandler } from "./hooks"; +export { hot, appProxy } from "./development/hot-reload"; diff --git a/src/reconciler/index.ts b/src/reconciler/index.ts index 08010734..97e1c888 100644 --- a/src/reconciler/index.ts +++ b/src/reconciler/index.ts @@ -1,6 +1,11 @@ import Reconciler from "react-reconciler"; import { NodeWidget } from "@nodegui/nodegui"; -import { getComponentByTagName, RNWidget, RNProps } from "../components/config"; +import { + getComponentByTagName, + RNWidget, + RNProps, + RNComponent +} from "../components/config"; export type AppContainer = Set; export const appContainer: AppContainer = new Set(); @@ -9,7 +14,7 @@ const HostConfig: Reconciler.HostConfig< string, RNProps, AppContainer, - NodeWidget, + RNComponent, any, any, any, diff --git a/src/renderer/index.ts b/src/renderer/index.ts index d6387dfc..4061c2cc 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -1,8 +1,12 @@ import reconciler, { appContainer } from "../reconciler"; -import { Reconciler } from "react-reconciler"; +import ReactReconciler, { Reconciler } from "react-reconciler"; +import React from "react"; import { NodeWidget } from "@nodegui/nodegui"; +import { RNComponent } from "../components/config"; +//@ts-ignore +import deepForceUpdate from "react-deep-force-update"; -type NodeGuiReconciler = Reconciler, any>; +type NodeGuiReconciler = Reconciler, any>; export type RendererOptions = { onRender?: () => void; @@ -13,15 +17,23 @@ const defaultOptions = { onRender: () => {} }; -export const Renderer = { - render(element: React.ReactNode, options?: RendererOptions) { +export class Renderer { + static container?: ReactReconciler.FiberRoot; + static forceUpdate() { + if (Renderer.container) { + //@ts-ignore + Renderer.container._reactInternalInstance = Renderer.container.current; + deepForceUpdate(Renderer.container); + } + } + static render(element: React.ReactNode, options?: RendererOptions) { const containerInfo = appContainer; const isConcurrent = false; //disabling since there seems to be a bug with onclick listeneres (when called without a console.log inside them) const hydrate = false; const rendererOptions = Object.assign({}, defaultOptions, options); - const container = reconciler.createContainer( + Renderer.container = reconciler.createContainer( containerInfo, isConcurrent, hydrate @@ -30,8 +42,13 @@ export const Renderer = { rendererOptions.onInit(reconciler); const parentComponent = null; // Since there is no parent (since this is the root fiber). We set parentComponent to null. - reconciler.updateContainer(element, container, parentComponent, () => { - rendererOptions.onRender(); - }); // Start reconcilation and render the result + reconciler.updateContainer( + element, + Renderer.container, + parentComponent, + () => { + rendererOptions.onRender(); + } + ); // Start reconcilation and render the result } -}; +} From 5625039920655bf401be92ac9e2a83c167bc8733 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 15:23:58 +0100 Subject: [PATCH 007/180] Adds default inline style to inside view --- src/components/Window/index.ts | 1 + tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Window/index.ts b/src/components/Window/index.ts index bac055ae..e888b8f9 100644 --- a/src/components/Window/index.ts +++ b/src/components/Window/index.ts @@ -20,6 +20,7 @@ class WindowConfig extends ComponentConfig { const rootViewLayout = new FlexLayout(); rootViewLayout.setFlexNode(rootView.getFlexNode()); rootView.setLayout(rootViewLayout); + rootView.setInlineStyle("width:'100%'; height:'100%';"); window.setCentralWidget(rootView); window.setProps(newProps, {}); return window; diff --git a/tsconfig.json b/tsconfig.json index 53f2428c..1fbd9475 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["src"], + "include": ["./src/**/*"], "exclude": ["dist"], "typedocOptions": { "mode": "file", From e38bf064370d71577618fc3168d1bd4e00d7c5a4 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 15:27:24 +0100 Subject: [PATCH 008/180] update react reconciler --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00a44d82..ab6f0bcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1400,14 +1400,14 @@ } }, "react-reconciler": { - "version": "0.21.0", - "resolved": "https://registry.npm.taobao.org/react-reconciler/download/react-reconciler-0.21.0.tgz?cache=0&sync_timestamp=1565319381012&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-reconciler%2Fdownload%2Freact-reconciler-0.21.0.tgz", - "integrity": "sha1-gYA0KrPIKV+GACWobQoDdCopTqc=", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.23.0.tgz", + "integrity": "sha512-vV0KlLimP9a/NuRcM6GRVakkmT6MKSzhfo8K72fjHMnlXMOhz9GlPe+/tCp5CWBkg+lsMUt/CR1nypJBTPfwuw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.15.0" + "scheduler": "^0.17.0" } }, "readable-stream": { @@ -1508,9 +1508,9 @@ "dev": true }, "scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npm.taobao.org/scheduler/download/scheduler-0.15.0.tgz?cache=0&sync_timestamp=1565317903688&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fscheduler%2Fdownload%2Fscheduler-0.15.0.tgz", - "integrity": "sha1-a/z4D/hQsoD+1K7sxlE7wLTxf44=", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" diff --git a/package.json b/package.json index f0909a3c..b2afb021 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "react-deep-force-update": "^2.1.3", "react-proxy": "^2.0.8", - "react-reconciler": "^0.21.0" + "react-reconciler": "^0.23.0" }, "peerDependencies": { "@nodegui/nodegui": ">=0.3.0", From 9f3af71c1ebf279f065e3ade4ad0e798dc2cbd3e Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 15:29:27 +0100 Subject: [PATCH 009/180] Bump version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ab6f0bcd..af2c9528 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.1.9", + "version": "0.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b2afb021..40c7f065 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.1.9", + "version": "0.2.0", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", From f880ad5067f29c2f4a9281012b1cd1969e27a90b Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 15:53:14 +0100 Subject: [PATCH 010/180] fix typings issue --- package-lock.json | 2 +- package.json | 2 +- src/development/{hot-reload/index.ts => hot-reload.ts} | 1 + src/development/{hot-reload/react-proxy.d.ts => types.ts} | 0 4 files changed, 3 insertions(+), 2 deletions(-) rename src/development/{hot-reload/index.ts => hot-reload.ts} (95%) rename src/development/{hot-reload/react-proxy.d.ts => types.ts} (100%) diff --git a/package-lock.json b/package-lock.json index af2c9528..28117632 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.2.0", + "version": "0.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 40c7f065..bb4e57ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.2.0", + "version": "0.2.1", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/src/development/hot-reload/index.ts b/src/development/hot-reload.ts similarity index 95% rename from src/development/hot-reload/index.ts rename to src/development/hot-reload.ts index 7fae467e..e390be53 100644 --- a/src/development/hot-reload/index.ts +++ b/src/development/hot-reload.ts @@ -1,5 +1,6 @@ import createProxy, { ReactProxyComponent } from "react-proxy"; import React from "react"; +import "./types"; export let appProxy: ReactProxyComponent; // need to export it so that it stays without being gc'd diff --git a/src/development/hot-reload/react-proxy.d.ts b/src/development/types.ts similarity index 100% rename from src/development/hot-reload/react-proxy.d.ts rename to src/development/types.ts From 7036bfdc2d1062d72472fcbd6dc2abd8e0d5dd07 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 16:10:20 +0100 Subject: [PATCH 011/180] fix react-reconciler types not found --- package-lock.json | 10 +++------- package.json | 6 +++--- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28117632..01b8cdee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.2.1", + "version": "0.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -61,14 +61,12 @@ "@types/prop-types": { "version": "15.7.1", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", - "dev": true + "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" }, "@types/react": { "version": "16.9.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.1.tgz", "integrity": "sha512-jGM2x8F7m7/r+81N/BOaUKVwbC5Cdw6ExlWEUpr77XPwVeNvAppnPEnMMLMfxRDYL8FPEX8MHjwtD2NQMJ0yyQ==", - "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -78,7 +76,6 @@ "version": "0.18.0", "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.18.0.tgz", "integrity": "sha512-hLVaxzL7cGgk/2C/sc8yyyvi+aeeimv7SKOFgyuPFYqNb2rnnQApHabcxo5Xp+GloUAfMe3tyQm2nkrmbLXq4w==", - "dev": true, "requires": { "@types/react": "*" } @@ -494,8 +491,7 @@ "csstype": { "version": "2.6.6", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", - "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==", - "dev": true + "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==" }, "cuid": { "version": "2.1.6", diff --git a/package.json b/package.json index bb4e57ee..40dd4ed7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.2.1", + "version": "0.2.2", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -22,7 +22,8 @@ "dependencies": { "react-deep-force-update": "^2.1.3", "react-proxy": "^2.0.8", - "react-reconciler": "^0.23.0" + "react-reconciler": "^0.23.0", + "@types/react-reconciler": "^0.18.0" }, "peerDependencies": { "@nodegui/nodegui": ">=0.3.0", @@ -32,7 +33,6 @@ "devDependencies": { "@nodegui/nodegui": "^0.3.1", "@types/node": "^12.0.10", - "@types/react-reconciler": "^0.18.0", "prettier": "^1.18.2", "react": "^16.9.0", "typedoc": "^0.15.0", From 5bf23be412022b017291b6a116371667796724b2 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 3 Nov 2019 17:57:53 +0100 Subject: [PATCH 012/180] update docs --- website/docs/guides/getting-started.md | 4 +++- website/docs/guides/tutorial.md | 4 +++- website/src/components/Try.js | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/website/docs/guides/getting-started.md b/website/docs/guides/getting-started.md index 5a2ee30b..7d8afbde 100644 --- a/website/docs/guides/getting-started.md +++ b/website/docs/guides/getting-started.md @@ -124,7 +124,9 @@ $ git clone https://github.com/nodegui/react-nodegui-starter $ cd react-nodegui-starter # Install dependencies $ npm install -# Run the app +# Run the dev server +$ npm run dev +# Run the app on a separate terminal tab or window $ npm start ``` diff --git a/website/docs/guides/tutorial.md b/website/docs/guides/tutorial.md index 95fc50c6..a65a55cc 100644 --- a/website/docs/guides/tutorial.md +++ b/website/docs/guides/tutorial.md @@ -56,7 +56,9 @@ $ git clone https://github.com/nodegui/react-nodegui-starter $ cd react-nodegui-starter # Install dependencies $ npm install -# Run the app +# Run the dev server +$ npm run dev +# Run the app on a separate terminal tab or window $ npm start ``` diff --git a/website/src/components/Try.js b/website/src/components/Try.js index 50444afb..9f024881 100644 --- a/website/src/components/Try.js +++ b/website/src/components/Try.js @@ -58,6 +58,7 @@ export const Try = () => { cd react-nodegui-starter npm install + npm run dev npm start From 9ce2833604d5040129f1255484419caf6a5f9b3c Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 6 Nov 2019 19:55:43 +0100 Subject: [PATCH 013/180] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ff1ef97c..bd350c65 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,9 @@ Visit: https://react.nodegui.org for docs. **Talks/Podcasts** -

JS Party 96: Performant Node desktop apps with NodeGUI – Listen on Changelog.com

+- [NodeGui and React NodeGui at KarmaJS Nov 2019 meetup: https://www.youtube.com/watch?v=8jH5gaEEDv4](https://www.youtube.com/watch?v=8jH5gaEEDv4) + +-

JS Party 96: Performant Node desktop apps with NodeGUI – Listen on Changelog.com

## Docs for contributing From f0ceaa1b16ca417d3d1716aaa5aaa613ad8501a9 Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 6 Nov 2019 21:44:18 +0100 Subject: [PATCH 014/180] Added talks link --- website/src/components/Talks.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/website/src/components/Talks.js b/website/src/components/Talks.js index 906d2672..75099505 100644 --- a/website/src/components/Talks.js +++ b/website/src/components/Talks.js @@ -42,6 +42,23 @@ export const Talks = () => { > +
  • + +
  • From e1e8d3d57f425bf11c22204332151a69f63d021e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2019 12:23:19 +0000 Subject: [PATCH 015/180] Bump @types/node from 12.7.1 to 12.12.7 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 12.7.1 to 12.12.7. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01b8cdee..e5dd97d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,9 +53,9 @@ "dev": true }, "@types/node": { - "version": "12.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", - "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==", + "version": "12.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz", + "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==", "dev": true }, "@types/prop-types": { From f3fd8930452686aa2aa7ed011e16eb3a26b1c181 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2019 12:23:57 +0000 Subject: [PATCH 016/180] Bump @nodegui/nodegui from 0.3.1 to 0.5.1 Bumps @nodegui/nodegui from 0.3.1 to 0.5.1. Signed-off-by: dependabot-preview[bot] --- package-lock.json | 115 ++++++---------------------------------------- package.json | 2 +- 2 files changed, 14 insertions(+), 103 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01b8cdee..2f91e89a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,13 +5,13 @@ "requires": true, "dependencies": { "@nodegui/nodegui": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.3.1.tgz", - "integrity": "sha512-kYbx71d1jTDoF6fUQMOWzEisVDVhi0FgW2yPtjqU19rhxYrH5gvTHTEpOpJ+KYgdCu8F8IuTo6P18vdaoRtg4A==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.5.1.tgz", + "integrity": "sha512-+3PjA13cyVFPpGcIip2JZuz4+zzXFtxV/pRDHpFnpX4HDrcB1xCfTH3eYHafk88oufffDycSKTKqL0fuTLTDYA==", "dev": true, "requires": { "@nodegui/qode": "^1.0.5", - "cmake-js": "^5.3.2", + "cmake-js": "^6.0.0", "cross-env": "^6.0.0", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", @@ -92,12 +92,6 @@ "uri-js": "^4.2.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", @@ -187,9 +181,9 @@ } }, "big-integer": { - "version": "1.6.47", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.47.tgz", - "integrity": "sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg==", + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", "dev": true }, "binary": { @@ -203,9 +197,9 @@ } }, "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", "dev": true }, "brace-expansion": { @@ -344,12 +338,11 @@ } }, "cmake-js": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-5.3.2.tgz", - "integrity": "sha512-OsRQ3ZgoV3nJ+3bZr9MEvSuhGS7xc3LgmPZ2gCXlLqF5Wxi6mUQNK70dm/2UUf4/QNBssdYWB5Y7BSRX9FFUrg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-6.0.0.tgz", + "integrity": "sha512-hVpXMULHVTh3waQXcQkezA0YTzZskQoeKaDwCINI/+EZoaqEPY4ZiLmbG+gdIQe/yh4VsKsJznq9Vovo4X2EUw==", "dev": true, "requires": { - "bluebird": "^3", "debug": "^4", "fs-extra": "^5.0.0", "is-iojs": "^1.0.1", @@ -361,7 +354,6 @@ "semver": "^5.0.3", "splitargs": "0", "tar": "^4", - "traceur": "0.0.x", "unzipper": "^0.8.13", "url-join": "0", "which": "^1.0.9", @@ -772,12 +764,6 @@ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, "handlebars": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.0.tgz", @@ -1485,12 +1471,6 @@ "glob": "^7.1.3" } }, - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1556,26 +1536,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-support": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "splitargs": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", @@ -1682,49 +1642,6 @@ } } }, - "traceur": { - "version": "0.0.111", - "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.111.tgz", - "integrity": "sha1-wE3nTRRpbDNzQn3k/Ajsr5E/w6E=", - "dev": true, - "requires": { - "commander": "2.9.x", - "glob": "5.0.x", - "rsvp": "^3.0.13", - "semver": "^4.3.3", - "source-map-support": "~0.2.8" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - } - } - }, "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -1846,12 +1763,6 @@ "setimmediate": "~1.0.4" }, "dependencies": { - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", diff --git a/package.json b/package.json index 40dd4ed7..751a256a 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "react": "^16.9.0" }, "devDependencies": { - "@nodegui/nodegui": "^0.3.1", + "@nodegui/nodegui": "^0.5.1", "@types/node": "^12.0.10", "prettier": "^1.18.2", "react": "^16.9.0", From fa7c52bc61588809e3b0d6094b4af1e8d00511a2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2019 12:24:46 +0000 Subject: [PATCH 017/180] Bump prettier from 1.18.2 to 1.19.1 Bumps [prettier](https://github.com/prettier/prettier) from 1.18.2 to 1.19.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/1.18.2...1.19.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01b8cdee..9fda4df3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1291,9 +1291,9 @@ "dev": true }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "process-nextick-args": { From e9ac0e932a1da4c560b70d8109667093c91babf3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2019 12:25:27 +0000 Subject: [PATCH 018/180] Bump typescript from 3.6.4 to 3.7.2 Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.6.4 to 3.7.2. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v3.6.4...v3.7.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01b8cdee..8b29bda5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1801,9 +1801,9 @@ } }, "typescript": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", - "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", "dev": true }, "uglify-js": { From 0677d4ab63bab39fcfb469ad62b1935ed607785c Mon Sep 17 00:00:00 2001 From: Atul R Date: Mon, 11 Nov 2019 23:06:14 +0100 Subject: [PATCH 019/180] asdasd --- src/reconciler/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/reconciler/index.ts b/src/reconciler/index.ts index 97e1c888..df54f8c0 100644 --- a/src/reconciler/index.ts +++ b/src/reconciler/index.ts @@ -101,6 +101,9 @@ const HostConfig: Reconciler.HostConfig< container.add(child); }, removeChildFromContainer: (container, child) => { + if (child.close) { + child.close(); + } container.delete(child); }, prepareUpdate: function( From 5935f5f4dad463a3d9fd929a8da6ef97cbac51dd Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 12 Nov 2019 00:40:37 +0100 Subject: [PATCH 020/180] removes the window when component unmounted --- package.json | 2 +- src/components/Image/RNImage.ts | 2 +- src/components/Image/index.ts | 2 +- src/components/View/RNView.ts | 4 ++-- src/reconciler/index.ts | 5 ++++- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 751a256a..79f1494c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "scripts": { "build": "tsc", - "dev": "tsc && qode ./dist/demo.js", + "dev": "tsc && qode --inspect ./dist/demo.js", "docs": "typedoc" }, "dependencies": { diff --git a/src/components/Image/RNImage.ts b/src/components/Image/RNImage.ts index 8a980186..02bebf1c 100644 --- a/src/components/Image/RNImage.ts +++ b/src/components/Image/RNImage.ts @@ -21,7 +21,7 @@ const setImageProps = ( const pixMap = new QPixmap(imageUrl); widget.setPixmap(pixMap); const size = widget.size(); - widget.scalePixmap(size.width, size.height); + widget.scalePixmap(size.width(), size.height()); }, set aspectRatioMode(mode: AspectRatioMode) { widget.setAspectRatioMode(mode); diff --git a/src/components/Image/index.ts b/src/components/Image/index.ts index c7776835..1ad8faf2 100644 --- a/src/components/Image/index.ts +++ b/src/components/Image/index.ts @@ -18,7 +18,7 @@ class ImageConfig extends ComponentConfig { widget.setProps(newProps, {}); widget.addEventListener(QLabelEvents.Resize, () => { const size = widget.size(); - widget.scalePixmap(size.width, size.height); + widget.scalePixmap(size.width(), size.height()); }); return widget; } diff --git a/src/components/View/RNView.ts b/src/components/View/RNView.ts index f21b5ccf..a34e52ce 100644 --- a/src/components/View/RNView.ts +++ b/src/components/View/RNView.ts @@ -65,7 +65,7 @@ export interface ViewProps extends RNProps { /** * This property holds the level of opacity for the window. [QWidget: setWindowOpacity](https://docs.nodegui.org/docs/api/NodeWidget#widgetsetwindowopacityopacity) */ - windowOpacity?: Number; + windowOpacity?: number; /** * Sets the window title property. [QWidget: setWindowTitle](https://docs.nodegui.org/docs/api/NodeWidget#widgetsetwindowtitletitle) */ @@ -146,7 +146,7 @@ export const setViewProps = ( set enabled(enable: boolean) { widget.setEnabled(enable); }, - set windowOpacity(opacity: Number) { + set windowOpacity(opacity: number) { widget.setWindowOpacity(opacity); }, set windowTitle(title: string) { diff --git a/src/reconciler/index.ts b/src/reconciler/index.ts index df54f8c0..2ba1ca58 100644 --- a/src/reconciler/index.ts +++ b/src/reconciler/index.ts @@ -101,10 +101,10 @@ const HostConfig: Reconciler.HostConfig< container.add(child); }, removeChildFromContainer: (container, child) => { + container.delete(child); if (child.close) { child.close(); } - container.delete(child); }, prepareUpdate: function( instance, @@ -152,6 +152,9 @@ const HostConfig: Reconciler.HostConfig< }, removeChild: (parent: RNWidget, child: NodeWidget) => { parent.removeChild(child); + if (child.close) { + child.close(); + } }, commitTextUpdate: (textInstance, oldText, newText) => { //noop since we manage all text using Text component From 42d13603e11715c240bcf1b3a48a6cd8ce43f090 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2019 18:40:08 +0100 Subject: [PATCH 021/180] Bump typedoc from 0.15.0 to 0.15.2 (#65) Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.15.0 to 0.15.2. - [Release notes](https://github.com/TypeStrong/TypeDoc/releases) - [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.15.0...v0.15.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 62 +++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index da0f5c52..a0d5ea16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -419,9 +419,9 @@ } }, "commander": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", - "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "optional": true }, @@ -765,9 +765,9 @@ "dev": true }, "handlebars": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.0.tgz", - "integrity": "sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -805,9 +805,9 @@ "dev": true }, "highlight.js": { - "version": "9.15.10", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz", - "integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw==", + "version": "9.16.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.16.2.tgz", + "integrity": "sha512-feMUrVLZvjy0oC7FVJQcSQRqbBq9kwqnYE4+Kj9ZjbHh3g+BisiPgF49NyQbVLNdrL/qqZr3Ca9yOKwgn2i/tw==", "dev": true }, "http-cache-semantics": { @@ -1024,9 +1024,9 @@ "dev": true }, "lunr": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.6.tgz", - "integrity": "sha512-swStvEyDqQ85MGpABCMBclZcLI/pBIlu8FFDtmX197+oEgKloJ67QnB+Tidh0340HmLMs39c4GrkPY3cmkXp6Q==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz", + "integrity": "sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg==", "dev": true }, "marked": { @@ -1670,41 +1670,33 @@ "dev": true }, "typedoc": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.15.0.tgz", - "integrity": "sha512-NOtfq5Tis4EFt+J2ozhVq9RCeUnfEYMFKoU6nCXCXUULJz1UQynOM+yH3TkfZCPLzigbqB0tQYGVlktUWweKlw==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.15.2.tgz", + "integrity": "sha512-K2nFEtyDQTVdXOzYtECw3TwuT3lM91Zc0dzGSLuor5R8qzZbwqBoCw7xYGVBow6+mEZAvKGznLFsl7FzG+wAgQ==", "dev": true, "requires": { "@types/minimatch": "3.0.3", "fs-extra": "^8.1.0", - "handlebars": "^4.1.2", - "highlight.js": "^9.15.8", + "handlebars": "^4.5.1", + "highlight.js": "^9.16.2", "lodash": "^4.17.15", "marked": "^0.7.0", "minimatch": "^3.0.0", "progress": "^2.0.3", "shelljs": "^0.8.3", - "typedoc-default-themes": "^0.6.0", - "typescript": "3.5.x" - }, - "dependencies": { - "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", - "dev": true - } + "typedoc-default-themes": "^0.6.1", + "typescript": "3.7.x" } }, "typedoc-default-themes": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz", - "integrity": "sha512-MdTROOojxod78CEv22rIA69o7crMPLnVZPefuDLt/WepXqJwgiSu8Xxq+H36x0Jj3YGc7lOglI2vPJ2GhoOybw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.6.1.tgz", + "integrity": "sha512-z5AWKqQDz7igl9WkUuafx8cEm4MPVQGMpbWE+3lwVOaq+U4UoLKBMnpFQWh/4fqQ3bGysXpOstMxy2OOzHezyw==", "dev": true, "requires": { "backbone": "^1.4.0", "jquery": "^3.4.1", - "lunr": "^2.3.6", + "lunr": "^2.3.8", "underscore": "^1.9.1" } }, @@ -1724,13 +1716,13 @@ "dev": true }, "uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", + "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", "dev": true, "optional": true, "requires": { - "commander": "~2.20.0", + "commander": "~2.20.3", "source-map": "~0.6.1" } }, From a8a50ae5abc4d7ec11005e909869a83b003a8e66 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2019 18:40:20 +0100 Subject: [PATCH 022/180] Bump react from 16.11.0 to 16.12.0 (#64) Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 16.11.0 to 16.12.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v16.12.0/packages/react) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a0d5ea16..69c2c948 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1353,9 +1353,9 @@ } }, "react": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz", - "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==", + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", + "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", "dev": true, "requires": { "loose-envify": "^1.1.0", From 389f0488868131f00f7c3f6ec2470f1fa3b67c31 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2019 18:40:28 +0100 Subject: [PATCH 023/180] Bump react-reconciler from 0.23.0 to 0.24.0 (#63) Bumps [react-reconciler](https://github.com/facebook/react/tree/HEAD/packages/react-reconciler) from 0.23.0 to 0.24.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/HEAD/packages/react-reconciler) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69c2c948..46077f7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1382,14 +1382,14 @@ } }, "react-reconciler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.23.0.tgz", - "integrity": "sha512-vV0KlLimP9a/NuRcM6GRVakkmT6MKSzhfo8K72fjHMnlXMOhz9GlPe+/tCp5CWBkg+lsMUt/CR1nypJBTPfwuw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.24.0.tgz", + "integrity": "sha512-gAGnwWkf+NOTig9oOowqid9O0HjTDC+XVGBCAmJYYJ2A2cN/O4gDdIuuUQjv8A4v6GDwVfJkagpBBLW5OW9HSw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.17.0" + "scheduler": "^0.18.0" } }, "readable-stream": { @@ -1484,9 +1484,9 @@ "dev": true }, "scheduler": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", - "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" diff --git a/package.json b/package.json index 79f1494c..822ae81a 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "react-deep-force-update": "^2.1.3", "react-proxy": "^2.0.8", - "react-reconciler": "^0.23.0", + "react-reconciler": "^0.24.0", "@types/react-reconciler": "^0.18.0" }, "peerDependencies": { From 3d541e02f74033e66350fd560ec320da9a467380 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2019 18:40:37 +0100 Subject: [PATCH 024/180] Bump @types/node from 12.12.7 to 12.12.8 (#62) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 12.12.7 to 12.12.8. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46077f7a..1ad0a6de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,9 +53,9 @@ "dev": true }, "@types/node": { - "version": "12.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz", - "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==", + "version": "12.12.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.8.tgz", + "integrity": "sha512-XLla8N+iyfjvsa0KKV+BP/iGSoTmwxsu5Ci5sM33z9TjohF72DEz95iNvD6pPmemvbQgxAv/909G73gUn8QR7w==", "dev": true }, "@types/prop-types": { From 93d56e3729ba5b2906e6dc5ae6b3d6ce9d7682fe Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 23 Nov 2019 00:09:53 +0100 Subject: [PATCH 025/180] Upgrades nodegui to 0.6.5 (#67) --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 2 +- src/demo.tsx | 11 ++++++++++- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ad0a6de..3f3d9392 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@nodegui/nodegui": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.5.1.tgz", - "integrity": "sha512-+3PjA13cyVFPpGcIip2JZuz4+zzXFtxV/pRDHpFnpX4HDrcB1xCfTH3eYHafk88oufffDycSKTKqL0fuTLTDYA==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.6.5.tgz", + "integrity": "sha512-oAp99eyiVyVBjnEB54ghy058oB37Xb3LW18VFcrLog8MU2RfetaKjIGk6LPgeCe5IBStfVmlZbJnuW7Tq/Te4A==", "dev": true, "requires": { "@nodegui/qode": "^1.0.5", @@ -19,9 +19,9 @@ } }, "@nodegui/qode": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-1.0.5.tgz", - "integrity": "sha512-JKb4JcC03VCdodmiL35VfznsCKHpiKOYbtgf9+KTHhH5p7IXvr+0k/LIq112T6Rpxd5zXa1pbsnfa2F8ReyWEg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-1.0.6.tgz", + "integrity": "sha512-Np6r91wDCzV4+PCepr83t+BjWBtZMh5WT9/68mXXSMJi+ueZbYXL0d5VAIJ84C87NMwnA/7hdoqppp8lgzymvg==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -470,9 +470,9 @@ }, "dependencies": { "which": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz", - "integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -1071,18 +1071,18 @@ } }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.42.0" } }, "mimic-response": { @@ -1227,9 +1227,9 @@ "dev": true }, "path-key": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", - "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { @@ -1251,9 +1251,9 @@ "dev": true }, "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.23.tgz", + "integrity": "sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ==", "dev": true, "requires": { "chalk": "^2.4.2", diff --git a/package.json b/package.json index 822ae81a..3dc44307 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "react": "^16.9.0" }, "devDependencies": { - "@nodegui/nodegui": "^0.5.1", + "@nodegui/nodegui": "^0.6.5", "@types/node": "^12.0.10", "prettier": "^1.18.2", "react": "^16.9.0", diff --git a/src/demo.tsx b/src/demo.tsx index af189d3d..ae17b8b6 100644 --- a/src/demo.tsx +++ b/src/demo.tsx @@ -1,16 +1,25 @@ import React from "react"; import { Renderer, Button, Window, View } from "./index"; + const App = () => { return ( - + + + + {` Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, @@ -42,8 +44,9 @@ const App = () => { sometimes on purpose (injected humour and the like). `} - - + + + ); }; From 5274623b44666086e5c12f0d630d888440b14a01 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2020 10:20:23 +0200 Subject: [PATCH 112/180] docs: add agg23 as a contributor (#222) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8a90f2be..95d5487b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -103,6 +103,15 @@ "contributions": [ "code" ] + }, + { + "login": "agg23", + "name": "Adam Gastineau", + "avatar_url": "https://avatars1.githubusercontent.com/u/238679?v=4", + "profile": "https://github.com/agg23", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index d8cc7150..ef84aa63 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
    Serhii Matrunchyk

    💻
    Solant

    💻
    Christian Petersen

    💻 +
    Adam Gastineau

    💻 From 3187f8abeebeedfbaf959c2922dff3b44de9366d Mon Sep 17 00:00:00 2001 From: Adam Gastineau Date: Tue, 9 Jun 2020 07:16:00 -0700 Subject: [PATCH 113/180] Added support for QGridLayout (#221) * Initial rendering support of GridView * Keep track of positions of rows and columns * Added proper errors for foreign children * Support controlling height and width of units * Implemented column/row stretching and min sizing * Fixed stale props being sent to GridRow and fixed removing rows/columns --- package-lock.json | 172 ++++++++-------- package.json | 2 +- .../GridView/GridColumn/RNGridColumn.ts | 95 +++++++++ src/components/GridView/GridColumn/index.ts | 49 +++++ src/components/GridView/GridRow/RNGridRow.ts | 141 +++++++++++++ src/components/GridView/GridRow/index.ts | 47 +++++ src/components/GridView/RNGridView.ts | 177 ++++++++++++++++ src/components/GridView/index.ts | 51 +++++ src/components/GridView/utils.ts | 58 ++++++ src/demo.tsx | 191 +++++++++++++----- 10 files changed, 858 insertions(+), 125 deletions(-) create mode 100644 src/components/GridView/GridColumn/RNGridColumn.ts create mode 100644 src/components/GridView/GridColumn/index.ts create mode 100644 src/components/GridView/GridRow/RNGridRow.ts create mode 100644 src/components/GridView/GridRow/index.ts create mode 100644 src/components/GridView/RNGridView.ts create mode 100644 src/components/GridView/index.ts create mode 100644 src/components/GridView/utils.ts diff --git a/package-lock.json b/package-lock.json index 238fe286..83d5fc03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,9 @@ "dev": true }, "7zip-min": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/7zip-min/-/7zip-min-1.1.1.tgz", - "integrity": "sha512-GPTk3xycxB0NjRM1SKAUL7TWXjgFAyzwXkamkk5YgSLd6OneeWBw+fxULctrVr4XqPBBh+LyqpHlyj9ryfpqoQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/7zip-min/-/7zip-min-1.1.2.tgz", + "integrity": "sha512-CkGc+r0H4rOPsvxHiNb8W3tonGafz+E6pYrqJBIVVMHaJv8cZDY6mGqbrIpsFhoui9bIkLev8MoP/lvy2hjjXA==", "dev": true, "requires": { "7zip-bin": "^5.0.3" @@ -33,13 +33,13 @@ } }, "@nodegui/nodegui": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.18.0.tgz", - "integrity": "sha512-dffONE5U9k4K7401LKqcB7NZC+yFBpyA2hsF8O04xaz75y9y5TjkuNDwHDfkSLs2sg/4tBp9hHNH0VywkAj/YA==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.21.0.tgz", + "integrity": "sha512-QkWqWGbbJvGRbAQ4o9O+ZdefeYlmxkuMuyARwK8WxiXFPxCO06XOswu1s0LhO4jmvILIVGLO2SRYSuG5muj3eQ==", "dev": true, "requires": { "@nodegui/artifact-installer": "^1.1.0", - "@nodegui/qode": "^2.0.4", + "@nodegui/qode": "^2.1.0", "cmake-js": "^6.1.0", "cross-env": "^7.0.0", "cuid": "^2.1.6", @@ -51,9 +51,9 @@ } }, "@nodegui/qode": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-2.0.4.tgz", - "integrity": "sha512-fnyPXoAHm2k+EUUV8ACRhjl2rNDQKRpyAQzYbsWNM4x1ExhrHy/U6KwQam82FaUVVCLaCNLTAiNaWyRR/XP83A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-2.1.0.tgz", + "integrity": "sha512-R31K60Vba4yO2Fy3qXXJkt7XMZnitDhuAVaibSGSbcBJbHhJh0+pDQjzZve1+uY7tCHFIY0oRq3tb70o/BrPZQ==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -92,9 +92,9 @@ } }, "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -200,9 +200,9 @@ "dev": true }, "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", "dev": true }, "balanced-match": { @@ -265,9 +265,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "string_decoder": { @@ -298,9 +298,9 @@ } }, "buffer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", - "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -374,9 +374,9 @@ } }, "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, "cliui": { @@ -413,6 +413,12 @@ "yargs": "^3.6.0" }, "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "fs-extra": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", @@ -459,9 +465,9 @@ } }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -561,9 +567,9 @@ } }, "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -820,9 +826,9 @@ "dev": true }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -1117,9 +1123,9 @@ "dev": true }, "make-dir": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", - "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -1153,18 +1159,18 @@ } }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, "mimic-response": { @@ -1189,9 +1195,9 @@ "dev": true }, "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -1208,15 +1214,15 @@ } }, "mkdirp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz", - "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "mkdirp-classic": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", - "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "ms": { @@ -1238,9 +1244,9 @@ "dev": true }, "node-abi": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz", - "integrity": "sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.18.0.tgz", + "integrity": "sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==", "dev": true, "requires": { "semver": "^5.4.1" @@ -1255,9 +1261,9 @@ } }, "node-addon-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", - "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.1.tgz", + "integrity": "sha512-2WVfwRfIr1AVn3dRq4yRc2Hn35ND+mPJH6inC6bjpYCZVrpXPB4j3T6i//OGVfqVsR1t/X/axRulDsheq4F0LQ==", "dev": true }, "node-fetch": { @@ -1361,9 +1367,9 @@ } }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -1381,15 +1387,15 @@ } }, "prebuild-install": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", - "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.4.tgz", + "integrity": "sha512-AkKN+pf4fSEihjapLEEj8n85YIw/tN6BQqkhzbDc0RvEZGdkpJBGMUYx66AAMcPG2KzmPQS7Cm16an4HVBRRMA==", "dev": true, "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", "github-from-package": "0.0.0", - "minimist": "^1.2.0", + "minimist": "^1.2.3", "mkdirp": "^0.5.1", "napi-build-utils": "^1.0.1", "node-abi": "^2.7.0", @@ -1442,9 +1448,9 @@ "dev": true }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -1830,12 +1836,12 @@ } }, "tar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", - "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", + "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", "dev": true, "requires": { - "chownr": "^1.1.3", + "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.0", @@ -1844,15 +1850,23 @@ } }, "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", + "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", "dev": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + } } }, "tar-stream": { @@ -1880,9 +1894,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "string_decoder": { diff --git a/package.json b/package.json index fa9ebc3f..19a0418c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "react": "^16.9.0" }, "devDependencies": { - "@nodegui/nodegui": "^0.18.0", + "@nodegui/nodegui": "^0.21.0", "@types/node": "^13.9.3", "prettier": "^1.18.2", "react": "^16.13.1", diff --git a/src/components/GridView/GridColumn/RNGridColumn.ts b/src/components/GridView/GridColumn/RNGridColumn.ts new file mode 100644 index 00000000..234df6a7 --- /dev/null +++ b/src/components/GridView/GridColumn/RNGridColumn.ts @@ -0,0 +1,95 @@ +import { FunctionComponentElement } from "react"; +import { Component, NodeWidget } from "@nodegui/nodegui"; +import { RNComponent } from "../../config"; +import { RNGridRow } from "../GridRow/RNGridRow"; + +export type GridColumnProps = { + /** + * The number of horizontal units to occupy + */ + width?: number; +}; + +const setGridColumnProps = ( + widget: RNGridColumn, + parentRow: RNGridRow, + newProps: GridColumnProps, + oldProps: GridColumnProps +) => { + if (widget.actualWidget) { + // TODO: Optimize this + parentRow.parentGrid?.layout?.removeWidget(widget.actualWidget); + parentRow.parentGrid?.layout?.addWidget( + widget.actualWidget, + parentRow.rowIndex ?? 0, + widget.columnIndex ?? 0, + parentRow.height ?? 1, + widget.width ?? 1 + ); + } + + const setter: GridColumnProps = { + set width(width: number) { + widget.width = width; + }, + }; + Object.assign(setter, newProps); +}; + +export class RNGridColumn extends Component implements RNComponent { + native: any; + actualWidget?: NodeWidget; + parentRow?: RNGridRow; + latestProps?: GridColumnProps; + prevProps?: GridColumnProps; + columnIndex?: number; + width?: number; + + setParentRowAndUpdateProps(parentRow: RNGridRow, index: number): void { + this.parentRow = parentRow; + this.columnIndex = index; + setGridColumnProps( + this, + parentRow, + this.latestProps ?? {}, + this.prevProps ?? {} + ); + } + + remove(): void { + if (!this.actualWidget) { + return; + } + + this.parentRow?.parentGrid?.layout?.removeWidget(this.actualWidget); + this.actualWidget.close(); + this.actualWidget = undefined; + } + + /* RNComponent */ + + setProps(newProps: GridColumnProps, oldProps: GridColumnProps): void { + if (this.parentRow) { + setGridColumnProps(this, this.parentRow, newProps, oldProps); + } + + this.latestProps = newProps; + this.prevProps = oldProps; + } + appendInitialChild(child: NodeWidget): void { + if (this.actualWidget) { + throw new Error("Grid column can have only one child"); + } + this.actualWidget = child; + } + appendChild(child: NodeWidget): void { + this.appendInitialChild(child); + } + insertBefore(child: NodeWidget, beforeChild: NodeWidget): void { + this.appendInitialChild(child); + } + removeChild(child: NodeWidget): void { + this.remove(); + } + static tagName: string = "gridcolumn"; +} diff --git a/src/components/GridView/GridColumn/index.ts b/src/components/GridView/GridColumn/index.ts new file mode 100644 index 00000000..132e9250 --- /dev/null +++ b/src/components/GridView/GridColumn/index.ts @@ -0,0 +1,49 @@ +import { Fiber } from "react-reconciler"; +import { GridColumnProps, RNGridColumn } from "./RNGridColumn"; +import { AppContainer } from "../../../reconciler"; +import { registerComponent, ComponentConfig } from "../../config"; + +class GridColumnConfig extends ComponentConfig { + tagName = RNGridColumn.tagName; + shouldSetTextContent(nextProps: GridColumnProps): boolean { + return false; + } + createInstance( + newProps: GridColumnProps, + rootInstance: AppContainer, + context: any, + workInProgress: Fiber + ): RNGridColumn { + const widget = new RNGridColumn(); + widget.setProps(newProps, newProps); + return widget; + } + finalizeInitialChildren( + instance: RNGridColumn, + newProps: GridColumnProps, + rootContainerInstance: AppContainer, + context: any + ): boolean { + return true; + } + commitMount( + instance: RNGridColumn, + newProps: GridColumnProps, + internalInstanceHandle: any + ): void { + return; + } + commitUpdate( + instance: RNGridColumn, + updatePayload: any, + oldProps: GridColumnProps, + newProps: GridColumnProps, + finishedWork: Fiber + ): void { + instance.setProps(newProps, oldProps); + } +} + +export const GridColumn = registerComponent( + new GridColumnConfig() +); diff --git a/src/components/GridView/GridRow/RNGridRow.ts b/src/components/GridView/GridRow/RNGridRow.ts new file mode 100644 index 00000000..b015afdc --- /dev/null +++ b/src/components/GridView/GridRow/RNGridRow.ts @@ -0,0 +1,141 @@ +import { FunctionComponentElement } from "react"; +import { GridColumnProps, RNGridColumn } from "../GridColumn/RNGridColumn"; +import { Component } from "@nodegui/nodegui"; +import { RNComponent } from "../../config"; +import { RNGridView } from "../RNGridView"; +import { + DataWithOffset, + updateDisplacedChildren, + offsetForIndex, +} from "../utils"; + +export type GridRowProps = { + children: + | Array> + | FunctionComponentElement; + + /** + * The number of vertical units to occupy + */ + height?: number; +}; + +const setGridRowProps = ( + widget: RNGridRow, + parentGrid: RNGridView, + newProps: Omit, + oldProps: Omit +) => { + const setter: Omit = { + set height(height: number) { + widget.height = height; + }, + }; + Object.assign(setter, newProps); +}; + +export class RNGridRow extends Component implements RNComponent { + native: any; + parentGrid?: RNGridView; + latestProps?: GridRowProps; + prevProps?: GridRowProps; + childColumns: Array> = []; + rowIndex?: number; + height?: number; + + setParentGridAndUpdateProps(parentGrid: RNGridView, index: number): void { + this.parentGrid = parentGrid; + this.rowIndex = index; + setGridRowProps( + this, + parentGrid, + this.latestProps ?? {}, + this.prevProps ?? {} + ); + + this.updateChildren(); + } + + updateChildren(startIndex = 0): void { + updateDisplacedChildren( + startIndex, + this.childColumns, + this, + "width", + "setParentRowAndUpdateProps" + ); + } + + remove(): void { + this.childColumns.forEach(({ data }) => data.remove()); + } + + /* RNComponent */ + + setProps(newProps: GridRowProps, oldProps: GridRowProps): void { + if (this.parentGrid) { + setGridRowProps(this, this.parentGrid, newProps, oldProps); + } + + this.latestProps = newProps; + this.prevProps = oldProps; + } + appendInitialChild(child: RNGridColumn): void { + this.appendChild(child); + } + appendChild(child: RNGridColumn): void { + if (!(child instanceof RNGridColumn)) { + throw new Error("GridColumn is the only supported child of GridRow"); + } + + const offset = offsetForIndex( + this.childColumns.length, + this.childColumns, + "width" + ); + + child.setParentRowAndUpdateProps(this, offset); + + this.childColumns.push({ + offset, + data: child, + }); + } + insertBefore(child: RNGridColumn, beforeChild: RNGridColumn): void { + const prevIndex = this.childColumns.findIndex( + ({ data }) => data === beforeChild + ); + + if (prevIndex === -1) { + throw new Error( + "Attempted to insert child GridColumn before nonexistent column" + ); + } + + const offset = offsetForIndex( + prevIndex, + this.childColumns, + "width" + ); + + this.childColumns.splice(prevIndex, 0, { + offset, + data: child, + }); + // Update displaced children + this.updateChildren(prevIndex); + } + removeChild(child: RNGridColumn): void { + const prevIndex = this.childColumns.findIndex(({ data }) => data === child); + + if (prevIndex !== -1) { + this.childColumns.splice(prevIndex, 1); + this.updateChildren(prevIndex); + } + + // Actually remove child from layout + child.remove(); + child.parentRow = undefined; + } + static tagName: string = "gridrow"; +} diff --git a/src/components/GridView/GridRow/index.ts b/src/components/GridView/GridRow/index.ts new file mode 100644 index 00000000..bcd12a05 --- /dev/null +++ b/src/components/GridView/GridRow/index.ts @@ -0,0 +1,47 @@ +import { Fiber } from "react-reconciler"; +import { AppContainer } from "../../../reconciler"; +import { registerComponent, ComponentConfig } from "../../config"; +import { RNGridRow, GridRowProps } from "./RNGridRow"; + +class GridRowConfig extends ComponentConfig { + tagName = RNGridRow.tagName; + shouldSetTextContent(nextProps: GridRowProps): boolean { + return false; + } + createInstance( + newProps: GridRowProps, + rootInstance: AppContainer, + context: any, + workInProgress: Fiber + ): RNGridRow { + const widget = new RNGridRow(); + widget.setProps(newProps, newProps); + return widget; + } + finalizeInitialChildren( + instance: RNGridRow, + newProps: GridRowProps, + rootContainerInstance: AppContainer, + context: any + ): boolean { + return true; + } + commitMount( + instance: RNGridRow, + newProps: GridRowProps, + internalInstanceHandle: any + ): void { + return; + } + commitUpdate( + instance: RNGridRow, + updatePayload: any, + oldProps: GridRowProps, + newProps: GridRowProps, + finishedWork: Fiber + ): void { + instance.setProps(newProps, oldProps); + } +} + +export const GridRow = registerComponent(new GridRowConfig()); diff --git a/src/components/GridView/RNGridView.ts b/src/components/GridView/RNGridView.ts new file mode 100644 index 00000000..fb2f38da --- /dev/null +++ b/src/components/GridView/RNGridView.ts @@ -0,0 +1,177 @@ +import { FunctionComponentElement } from "react"; +import { QGridLayoutSignals, QGridLayout, QWidget } from "@nodegui/nodegui"; +import { ViewProps, setViewProps } from "../View/RNView"; +import { RNComponent } from "../config"; +import { RNGridRow, GridRowProps } from "./GridRow/RNGridRow"; +import { + DataWithOffset, + offsetForIndex, + updateDisplacedChildren, +} from "./utils"; + +export type GridViewColumnProps = { + [ColumnIndex: number]: { + stretch?: number; + minWidth?: number; + }; +}; + +export type GridViewRowProps = { + [RowIndex: number]: { + stretch?: number; + minHeight?: number; + }; +}; + +export interface GridViewProps extends ViewProps { + children: + | Array> + | FunctionComponentElement; + + columnProps?: GridViewColumnProps; + rowProps?: GridViewRowProps; + + horizontalSpacing?: number; + verticalSpacing?: number; +} + +const setGridViewProps = ( + widget: RNGridView, + newProps: Omit, + oldProps: Omit +) => { + const setter: Omit = { + set horizontalSpacing(spacing: number) { + widget.layout?.setHorizontalSpacing(spacing); + }, + set verticalSpacing(spacing: number) { + widget.layout?.setVerticalSpacing(spacing); + }, + set columnProps(props: GridViewColumnProps) { + for (const indexString of Object.keys(props)) { + const index = parseInt(indexString, 10); + const { stretch, minWidth } = props[index]; + + widget.layout?.setColumnStretch(index, stretch ?? 0); + widget.layout?.setColumnMinimumWidth(index, minWidth ?? 0); + } + }, + set rowProps(props: GridViewRowProps) { + for (const indexString of Object.keys(props)) { + const index = parseInt(indexString, 10); + const { stretch, minHeight } = props[index]; + + widget.layout?.setRowStretch(index, stretch ?? 0); + widget.layout?.setRowMinimumHeight(index, minHeight ?? 0); + } + }, + }; + Object.assign(setter, newProps); + setViewProps(widget, newProps, oldProps); +}; + +/** + * @ignore + */ +export class RNGridView extends QWidget implements RNComponent { + native: any; + layout?: QGridLayout; + initialProps?: GridViewProps; + childRows: Array> = []; + + updateChildren(startIndex = 0): void { + updateDisplacedChildren( + startIndex, + this.childRows, + this, + "height", + "setParentGridAndUpdateProps" + ); + } + + /* RNComponent */ + + setProps(newProps: GridViewProps, oldProps: GridViewProps): void { + if (this.layout) { + setGridViewProps(this, newProps, oldProps); + } else { + this.initialProps = newProps; + } + } + appendInitialChild(child: RNGridRow): void { + this.appendChild(child); + } + appendChild(child: RNGridRow): void { + if (!(child instanceof RNGridRow)) { + throw new Error("GridRow is the only supported child of GridView"); + } + + const updateChild = () => { + const offset = offsetForIndex( + this.childRows.length, + this.childRows, + "height" + ); + + child.setParentGridAndUpdateProps(this, offset); + + this.childRows.push({ + offset, + data: child, + }); + }; + + if (this.layout) { + updateChild(); + + return; + } + + const layout = new QGridLayout(); + this.setLayout(layout); + this.layout = layout; + + // Newly created layout, so set initial props + if (this.initialProps) { + setGridViewProps(this, this.initialProps, {}); + } + + updateChild(); + } + insertBefore(child: RNGridRow, beforeChild: RNGridRow): void { + const prevIndex = this.childRows.findIndex( + ({ data }) => data === beforeChild + ); + + if (prevIndex === -1) { + throw new Error( + "Attempted to insert child GridRow before nonexistent row" + ); + } + + const offset = offsetForIndex( + prevIndex, + this.childRows, + "height" + ); + + this.childRows.splice(prevIndex, 0, { + offset, + data: child, + }); + // Update displaced children + this.updateChildren(prevIndex); + } + removeChild(child: RNGridRow): void { + const prevIndex = this.childRows.findIndex(({ data }) => data === child); + + if (prevIndex !== -1) { + this.childRows.splice(prevIndex, 1); + this.updateChildren(prevIndex); + } + + child.remove(); + child.parentGrid = undefined; + } + static tagName: string = "gridview"; +} diff --git a/src/components/GridView/index.ts b/src/components/GridView/index.ts new file mode 100644 index 00000000..9a17f35a --- /dev/null +++ b/src/components/GridView/index.ts @@ -0,0 +1,51 @@ +import { registerComponent, ComponentConfig } from "../config"; +import { Fiber } from "react-reconciler"; +import { AppContainer } from "../../reconciler"; +import { RNGridView, GridViewProps } from "./RNGridView"; + +class GridViewConfig extends ComponentConfig { + tagName = RNGridView.tagName; + shouldSetTextContent(nextProps: GridViewProps): boolean { + return false; + } + createInstance( + newProps: GridViewProps, + rootInstance: AppContainer, + context: any, + workInProgress: Fiber + ): RNGridView { + const widget = new RNGridView(); + widget.setProps(newProps, { + children: [], + }); + return widget; + } + finalizeInitialChildren( + instance: RNGridView, + newProps: GridViewProps, + rootContainerInstance: AppContainer, + context: any + ): boolean { + return true; + } + commitMount( + instance: RNGridView, + newProps: GridViewProps, + internalInstanceHandle: any + ): void { + if (newProps.visible !== false) { + instance.show(); + } + } + commitUpdate( + instance: RNGridView, + updatePayload: any, + oldProps: GridViewProps, + newProps: GridViewProps, + finishedWork: Fiber + ): void { + instance.setProps(newProps, oldProps); + } +} + +export const GridView = registerComponent(new GridViewConfig()); diff --git a/src/components/GridView/utils.ts b/src/components/GridView/utils.ts new file mode 100644 index 00000000..b6cd8831 --- /dev/null +++ b/src/components/GridView/utils.ts @@ -0,0 +1,58 @@ +export interface DataWithOffset { + offset: number; + data: T; +} + +type SetParentFunc = (parent: T, index: number) => void; + +/** + * Extract the keys of type `T` matching type `TType` + */ +type KeysOfType = { + [Key in keyof T]-?: T[Key] extends TType | undefined ? Key : never; +}[keyof T]; + +/** + * Show TypeScript that the fields we're interested in are of type `TType` + */ +type OnlyType = { + [Key in KeysOfType]?: TType; +}; + +export const offsetForIndex = ( + index: number, + items: Array>>, + sizeKey: keyof OnlyType +) => { + let offset = 0; + + if (index > 0) { + const previousChild = items[index - 1]; + offset = previousChild.offset + (previousChild.data[sizeKey] ?? 1); + } + + return offset; +}; + +export const updateDisplacedChildren = ( + startIndex: number, + items: Array< + DataWithOffset< + OnlyType & OnlyType> + > + >, + parent: TParent, + sizeKey: keyof OnlyType, + setParentFuncKey: keyof OnlyType> +) => { + let offset = offsetForIndex(startIndex, items, sizeKey); + + for (let i = startIndex; i < items.length; i++) { + const displacedChild = items[i]; + + displacedChild.offset = offset; + displacedChild.data[setParentFuncKey]?.(parent, offset); + + offset += displacedChild.data[sizeKey] ?? 1; + } +}; diff --git a/src/demo.tsx b/src/demo.tsx index 858f108d..a6a9255d 100644 --- a/src/demo.tsx +++ b/src/demo.tsx @@ -1,52 +1,153 @@ -import React from "react"; -import { Renderer, Text, ScrollArea, Window, View, Button } from "./index"; +import React, { useState } from "react"; +import { Renderer, Text, Window, View, Button, useEventHandler } from "./index"; +import { GridView } from "./components/GridView"; +import { GridRow } from "./components/GridView/GridRow"; +import { GridColumn } from "./components/GridView/GridColumn"; +import { QPushButtonSignals } from "@nodegui/nodegui"; const App = () => { + const [additionalRows, setAdditionalRows] = useState([]); + const [rowStretch, setRowStretch] = useState(false); + + const [additionalColumns, setAdditionalColumns] = useState([]); + + const insertRowHandler = useEventHandler( + { + clicked: () => + setAdditionalRows((rows) => [...rows, `Row ${rows.length}`]), + }, + [] + ); + + const removeRowHandler = useEventHandler( + { + clicked: () => + setAdditionalRows((rows) => [...rows.slice(0, rows.length - 1)]), + }, + [] + ); + + const insertColumnHandler = useEventHandler( + { + clicked: () => + setAdditionalColumns((columns) => [ + ...columns, + `Column ${columns.length}`, + ]), + }, + [] + ); + + const removeColumnsHandler = useEventHandler( + { + clicked: () => + setAdditionalColumns((columns) => [ + ...columns.slice(0, columns.length - 1), + ]), + }, + [] + ); + + const toggleRowStretch = useEventHandler( + { + clicked: () => setRowStretch((value) => !value), + }, + [] + ); + return ( - - - - - {` - Contrary to popular belief, - Lorem Ipsum is not simply random text. - It has roots in a piece of classical Latin literature from 45 BC, - making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, - looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, - and going through the cites of the word in classical literature, - discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 - and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. - This book is a treatise on the theory of ethics, very popular during the Renaissance. - The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. - - The standard chunk of Lorem Ipsum used since the 1500s - is reproduced below for those interested. - Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also - reproduced in their exact original form, accompanied - by English versions from the 1914 translation by H. Rackham. - - - Why do we use it? - - It is a long established - fact that a reader will be distracted by - the readable content of a page when looking at its layout. - The point of using Lorem Ipsum is that it has - a more-or-less normal distribution of letters, - as opposed to using 'Content here, content here', - making it look like readable English. - Many desktop publishing packages and web page - editors now use Lorem Ipsum as their default model text, - and a search for 'lorem ipsum' will uncover many web - sites still in their infancy. Various versions - have evolved over the years, sometimes by accident, - sometimes on purpose (injected humour and the like). - - `} - - - + + + + + Hello + + + ); }; +const styleSheet = ` + #container { + flex: 1; + min-height: '100%'; + justify-content: 'center'; + } + #textContainer { + flex-direction: 'row'; + justify-content: 'space-around'; + align-items: 'center'; + } +`; + Renderer.render(); From 79775efa0d6f955627c1464bf32666ae3bddd2ec Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 27 Feb 2021 20:58:55 +0100 Subject: [PATCH 157/180] 0.10.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 213899fc..4bdc5abe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.0", + "version": "0.10.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@nodegui/react-nodegui", - "version": "0.10.0", + "version": "0.10.1", "license": "MIT", "dependencies": { "@nodegui/nodegui": "^0.27.0", diff --git a/package.json b/package.json index 10e64038..5bffc016 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.0", + "version": "0.10.1", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", From 6d4311d9221a469b26b3ff4fa7120dfc21eaa42e Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 27 Feb 2021 21:14:12 +0100 Subject: [PATCH 158/180] bug fix --- package-lock.json | 2830 +------------------------ package.json | 4 +- src/components/BoxView/RNBoxView.ts | 10 +- src/components/GridView/RNGridView.ts | 10 +- 4 files changed, 123 insertions(+), 2731 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4bdc5abe..374ea985 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2334 +1,22 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.1", - "lockfileVersion": 2, + "version": "0.10.2", + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@nodegui/react-nodegui", - "version": "0.10.1", - "license": "MIT", - "dependencies": { - "@nodegui/nodegui": "^0.27.0", - "@types/react-reconciler": "^0.18.0", - "phin": "^3.4.1", - "react-deep-force-update": "^2.1.3", - "react-proxy": "^2.0.8", - "react-reconciler": "^0.25.1" - }, - "devDependencies": { - "@types/node": "^14.11.1", - "prettier": "^2.1.2", - "react": "^16.13.1", - "typedoc": "^0.17.8", - "typedoc-plugin-markdown": "^2.4.2", - "typescript": "^3.9.7" - }, - "peerDependencies": { - "react": "^16.9.0" - } - }, - "node_modules/@nodegui/artifact-installer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodegui/artifact-installer/-/artifact-installer-1.1.0.tgz", - "integrity": "sha512-x/rIewhjnLhf2b3lAy5ZIPSTS39LRpwMTKeEg6sn4RwvWwyNmreGzpvGi6Gkbl6FUpftn70nfOBOpaeO3hO8PQ==", - "dependencies": { - "7zip-min": "^1.1.1", - "env-paths": "^2.2.0", - "make-dir": "^3.0.0", - "node-fetch": "^2.6.0", - "progress": "^2.0.3" - } - }, - "node_modules/@nodegui/nodegui": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.27.0.tgz", - "integrity": "sha512-8geO5Ru0Pc65a87qvIxn7YlEzCfB62VSFlGczGm0NrkWUQFIcsDAYFyJO9JzgQIi7pKgAiJ6pBgvyWXO+nxuuA==", - "hasInstallScript": true, - "dependencies": { - "@nodegui/artifact-installer": "^1.1.0", - "@nodegui/qode": "^2.1.0", - "cmake-js": "^6.1.0", - "cross-env": "^7.0.0", - "cuid": "^2.1.6", - "manage-path": "^2.0.0", - "memoize-one": "^5.1.1", - "node-addon-api": "^3.0.2", - "postcss-nodegui-autoprefixer": "0.0.7", - "prebuild-install": "^5.3.5" - }, - "bin": { - "qode": "scripts/qode.js" - } - }, - "node_modules/@nodegui/qode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-2.1.0.tgz", - "integrity": "sha512-R31K60Vba4yO2Fy3qXXJkt7XMZnitDhuAVaibSGSbcBJbHhJh0+pDQjzZve1+uY7tCHFIY0oRq3tb70o/BrPZQ==", - "dependencies": { - "env-paths": "^2.2.0", - "make-dir": "^3.0.2", - "node-fetch": "^2.6.0", - "progress": "^2.0.3", - "tar": "^6.0.1" - } - }, - "node_modules/@types/node": { - "version": "14.11.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.1.tgz", - "integrity": "sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "node_modules/@types/react": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.0.tgz", - "integrity": "sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-reconciler": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.18.0.tgz", - "integrity": "sha512-hLVaxzL7cGgk/2C/sc8yyyvi+aeeimv7SKOFgyuPFYqNb2rnnQApHabcxo5Xp+GloUAfMe3tyQm2nkrmbLXq4w==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==" - }, - "node_modules/7zip-min": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/7zip-min/-/7zip-min-1.2.0.tgz", - "integrity": "sha512-KJjhnNHKKtxpD0NvoyMhXlNx+OQQWZrFtyQYrHwo0pIfo0fyydI3a6nVa7MYdwB/RT0Bpd77begiEyA5pD1kDA==", - "dependencies": { - "7zip-bin": "^5.0.3" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "node_modules/ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", - "integrity": "sha1-otKMkxAqpsyWJFomy5VN4G7FPww=", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.0 || ^1.1.13" - } - }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "node_modules/centra": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/centra/-/centra-2.4.2.tgz", - "integrity": "sha512-f1RaP0V1HqVNEXfLfjNBthB2yy3KnSGnPCnOPCFLUk9e/Z4rNJ8nBaJNnghflnp88mi1IT8mfmW+HlMS1/H+bg==" - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/cmake-js": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-6.1.0.tgz", - "integrity": "sha512-utmukLQftpgrCpGRCaHnkv4K27HZNNFqmBl4vnvccy0xp4c1erxjFU/Lq4wn5ngAhFZmpwBPQfoKWKThjSBiwg==", - "dependencies": { - "debug": "^4", - "fs-extra": "^5.0.0", - "is-iojs": "^1.0.1", - "lodash": "^4", - "memory-stream": "0", - "npmlog": "^1.2.0", - "rc": "^1.2.7", - "request": "^2.54.0", - "semver": "^5.0.3", - "splitargs": "0", - "tar": "^4", - "unzipper": "^0.8.13", - "url-join": "0", - "which": "^1.0.9", - "yargs": "^3.6.0" - }, - "bin": { - "cmake-js": "bin/cmake-js" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/cmake-js/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/cmake-js/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/cmake-js/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/cmake-js/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/cmake-js/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/cmake-js/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/cmake-js/node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/cmake-js/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz", - "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==" - }, - "node_modules/cuid": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz", - "integrity": "sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==" - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", - "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", - "dependencies": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "node_modules/handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/highlight.js": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.2.0.tgz", - "integrity": "sha512-OryzPiqqNCfO/wtFo619W+nPYALM6u7iCQkum4bqRmmlcTikOkmlL06i009QelynBPAlNByTQU6cBB2cOBQtCw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "engines": { - "node": "*" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-iojs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", - "integrity": "sha1-TBEDO11dlNbqs3dd7cm+fQCDJfE=" - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" - }, - "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "node_modules/lodash.pad": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" - }, - "node_modules/lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" - }, - "node_modules/lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/manage-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/manage-path/-/manage-path-2.0.0.tgz", - "integrity": "sha1-9M+EV7km7u4qg7FzUBQUvHbrlZc=" - }, - "node_modules/marked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.0.0.tgz", - "integrity": "sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 8.16.2" - } - }, - "node_modules/memoize-one": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", - "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" - }, - "node_modules/memory-stream": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", - "integrity": "sha1-6+jdHDuLw4wOeUHp3dWuvmtN6D8=", - "dependencies": { - "readable-stream": "~1.0.26-2" - } - }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz", - "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==" - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "node_modules/npmlog": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", - "integrity": "sha1-KOe+YZYJtT960d0wChDWTXFiaLY=", - "dependencies": { - "ansi": "~0.3.0", - "are-we-there-yet": "~1.0.0", - "gauge": "~1.2.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/phin": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/phin/-/phin-3.5.1.tgz", - "integrity": "sha512-jgFO28IaiWAl0xk+zmqVx7neKVokWKU8YTQC5QlB45SZnEE53LH2saqJIcyIV557VX3Gk+TdR4rwWTc3P83DSA==", - "dependencies": { - "centra": "^2.4.2" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-nodegui-autoprefixer": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/postcss-nodegui-autoprefixer/-/postcss-nodegui-autoprefixer-0.0.7.tgz", - "integrity": "sha512-cPNAIz9siY+ssc3ecdPaeflfdc2HRS6tgQGu59YKLiiaZT3iMw578l1LTFfmEnJtv1RvNEQUNn/YjHyySXla2Q==", - "dependencies": { - "postcss": "^7.0.17" - } - }, - "node_modules/prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prebuild-install/node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/prebuild-install/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/prebuild-install/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/prebuild-install/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/prebuild-install/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-deep-force-update": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-2.1.3.tgz", - "integrity": "sha512-lqD4eHKVuB65RyO/hGbEST53E2/GPbcIPcFYyeW/p4vNngtH4G7jnKGlU6u1OqrFo0uNfIvwuBOg98IbLHlNEA==" - }, - "node_modules/react-is": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", - "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" - }, - "node_modules/react-proxy": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-2.0.8.tgz", - "integrity": "sha1-dq54yb5OVNQJz+x7t9UT7H8bKEw=", - "dependencies": { - "lodash": "^4.6.1" - } - }, - "node_modules/react-reconciler": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.25.1.tgz", - "integrity": "sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/splitargs": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", - "integrity": "sha1-/p965lc3GzOxDLgNoUPPgknPazs=" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "engines": { - "node": "*" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/typedoc": { - "version": "0.17.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.17.8.tgz", - "integrity": "sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==", - "dev": true, - "dependencies": { - "fs-extra": "^8.1.0", - "handlebars": "^4.7.6", - "highlight.js": "^10.0.0", - "lodash": "^4.17.15", - "lunr": "^2.3.8", - "marked": "1.0.0", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "typedoc-default-themes": "^0.10.2" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/typedoc-default-themes": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz", - "integrity": "sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==", - "dev": true, - "dependencies": { - "lunr": "^2.3.8" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/typedoc-plugin-markdown": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.4.2.tgz", - "integrity": "sha512-BBH+9/Uq5XbsqfzCDl8Jq4iaLXRMXRuAHZRFarAZX7df8+F3vUjDx/WHWoWqbZ/XUFzduLC2Iuy2qwsJX8SQ7A==", - "dev": true, - "dependencies": { - "fs-extra": "^9.0.1", - "handlebars": "^4.7.6" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/typedoc-plugin-markdown/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typedoc-plugin-markdown/node_modules/jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "node_modules/typedoc-plugin-markdown/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/typedoc/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.4.tgz", - "integrity": "sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unzipper": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", - "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "~1.0.10", - "listenercount": "~1.0.1", - "readable-stream": "~2.1.5", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/unzipper/node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", - "dependencies": { - "buffer-shims": "^1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "dependencies": { + "7zip-bin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.0.tgz", + "integrity": "sha512-nOZl6SsZFpcKvq7oRxdbBwrhYQ+/iXgWqehnw5meQAeRyP+OzR0CWPE5IDXhQbTVgZxrsgmTk+xs6tVTzqkw+w==" }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "7zip-min": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/7zip-min/-/7zip-min-1.3.0.tgz", + "integrity": "sha512-gM156Jr4tF1Kq1RyQFJrNzH71VzrlIfCLZFUkvFX/IFJXYQB6rXgBlCCaDhoz6x8GDeNcfwLeF5gnodXBI0riA==", + "requires": { + "7zip-bin": "^5.0.3" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dependencies": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - }, - "dependencies": { "@nodegui/artifact-installer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@nodegui/artifact-installer/-/artifact-installer-1.1.0.tgz", @@ -2342,20 +30,19 @@ } }, "@nodegui/nodegui": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.27.0.tgz", - "integrity": "sha512-8geO5Ru0Pc65a87qvIxn7YlEzCfB62VSFlGczGm0NrkWUQFIcsDAYFyJO9JzgQIi7pKgAiJ6pBgvyWXO+nxuuA==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.30.1.tgz", + "integrity": "sha512-cAb3ycB9vEUsD9GFqh0NG9ZcPOkHXGgEZq7fNzO4PP9ddil1+sRiGe+SPkYuJi7L3o8FdqymgG7qP0O6B3wO1w==", "requires": { "@nodegui/artifact-installer": "^1.1.0", "@nodegui/qode": "^2.1.0", "cmake-js": "^6.1.0", - "cross-env": "^7.0.0", + "cross-env": "^7.0.3", "cuid": "^2.1.6", "manage-path": "^2.0.0", "memoize-one": "^5.1.1", - "node-addon-api": "^3.0.2", - "postcss-nodegui-autoprefixer": "0.0.7", - "prebuild-install": "^5.3.5" + "node-addon-api": "^3.1.0", + "postcss-nodegui-autoprefixer": "0.0.7" } }, "@nodegui/qode": { @@ -2382,9 +69,9 @@ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" }, "@types/react": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.0.tgz", - "integrity": "sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.2.tgz", + "integrity": "sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -2398,19 +85,6 @@ "@types/react": "*" } }, - "7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==" - }, - "7zip-min": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/7zip-min/-/7zip-min-1.2.0.tgz", - "integrity": "sha512-KJjhnNHKKtxpD0NvoyMhXlNx+OQQWZrFtyQYrHwo0pIfo0fyydI3a6nVa7MYdwB/RT0Bpd77begiEyA5pD1kDA==", - "requires": { - "7zip-bin": "^5.0.3" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2440,11 +114,6 @@ "color-convert": "^1.9.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, "are-we-there-yet": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", @@ -2522,11 +191,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -2549,41 +213,6 @@ "chainsaw": "~0.1.0" } }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, "bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", @@ -2598,15 +227,6 @@ "concat-map": "0.0.1" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", @@ -2797,11 +417,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2836,9 +451,9 @@ } }, "csstype": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz", - "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz", + "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==" }, "cuid": { "version": "2.1.8", @@ -2866,14 +481,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -2889,11 +496,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -2940,14 +542,6 @@ "safer-buffer": "^2.1.0" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, "env-paths": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", @@ -2958,11 +552,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2998,11 +587,6 @@ "mime-types": "^2.1.12" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", @@ -3047,6 +631,12 @@ } } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "gauge": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", @@ -3067,11 +657,6 @@ "assert-plus": "^1.0.0" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -3091,9 +676,9 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -3117,6 +702,15 @@ "har-schema": "^2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3128,9 +722,9 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "highlight.js": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.2.0.tgz", - "integrity": "sha512-OryzPiqqNCfO/wtFo619W+nPYALM6u7iCQkum4bqRmmlcTikOkmlL06i009QelynBPAlNByTQU6cBB2cOBQtCw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.6.0.tgz", + "integrity": "sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==", "dev": true }, "http-signature": { @@ -3143,11 +737,6 @@ "sshpk": "^1.7.0" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3163,9 +752,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "interpret": { "version": "1.4.0", @@ -3178,6 +767,15 @@ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -3335,23 +933,18 @@ } }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.46.0" } }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -3387,57 +980,27 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "node-addon-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz", - "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, "npmlog": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", @@ -3526,92 +1089,6 @@ "postcss": "^7.0.17" } }, - "prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "prettier": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", @@ -3643,15 +1120,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3690,9 +1158,9 @@ "integrity": "sha512-lqD4eHKVuB65RyO/hGbEST53E2/GPbcIPcFYyeW/p4vNngtH4G7jnKGlU6u1OqrFo0uNfIvwuBOg98IbLHlNEA==" }, "react-is": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", - "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-proxy": { "version": "2.0.8", @@ -3761,11 +1229,12 @@ } }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -3801,11 +1270,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -3835,26 +1299,6 @@ "rechoir": "^0.6.2" } }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3881,11 +1325,6 @@ "tweetnacl": "~0.14.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3896,6 +1335,11 @@ "strip-ansi": "^3.0.0" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -3918,9 +1362,9 @@ } }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -3930,61 +1374,6 @@ "yallist": "^4.0.0" } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - } - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -4063,31 +1452,31 @@ }, "dependencies": { "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } @@ -4099,9 +1488,9 @@ "dev": true }, "uglify-js": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.4.tgz", - "integrity": "sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw==", + "version": "3.12.8", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.8.tgz", + "integrity": "sha512-fvBeuXOsvqjecUtF/l1dwsrrf5y2BCUk9AOJGzGcm6tE7vegku5u/YvqjyDaAGr422PLoLnrxg3EnRvTqsdC1w==", "dev": true, "optional": true }, @@ -4153,9 +1542,9 @@ } }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } @@ -4193,19 +1582,6 @@ "isexe": "^2.0.0" } }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "window-size": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", @@ -4232,9 +1608,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yallist": { "version": "4.0.0", diff --git a/package.json b/package.json index 5bffc016..29b77ffa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.1", + "version": "0.10.2", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -20,7 +20,7 @@ "docs": "typedoc && node ./website/docs/scripts/fixdocs.js" }, "dependencies": { - "@nodegui/nodegui": "^0.27.0", + "@nodegui/nodegui": "^0.30.1", "@types/react-reconciler": "^0.18.0", "phin": "^3.4.1", "react-deep-force-update": "^2.1.3", diff --git a/src/components/BoxView/RNBoxView.ts b/src/components/BoxView/RNBoxView.ts index 5696a447..bea48a31 100644 --- a/src/components/BoxView/RNBoxView.ts +++ b/src/components/BoxView/RNBoxView.ts @@ -31,10 +31,18 @@ const setBoxViewProps = ( */ export class RNBoxView extends QWidget implements RNComponent { native: any; - layout?: QBoxLayout; + _layout?: QBoxLayout; initialProps?: BoxViewProps; children: Array> = []; + get layout() { + return this.layout; + } + + set layout(l: QBoxLayout) { + this._layout = l; + } + setProps(newProps: BoxViewProps, oldProps: BoxViewProps): void { if (this.layout) { setBoxViewProps(this, newProps, oldProps); diff --git a/src/components/GridView/RNGridView.ts b/src/components/GridView/RNGridView.ts index fb2f38da..c3a61f4b 100644 --- a/src/components/GridView/RNGridView.ts +++ b/src/components/GridView/RNGridView.ts @@ -75,10 +75,18 @@ const setGridViewProps = ( */ export class RNGridView extends QWidget implements RNComponent { native: any; - layout?: QGridLayout; + _layout?: QGridLayout; initialProps?: GridViewProps; childRows: Array> = []; + get layout() { + return this.layout; + } + + set layout(l: QGridLayout) { + this._layout = l; + } + updateChildren(startIndex = 0): void { updateDisplacedChildren( startIndex, From 9db706e78f67dea5eaf64afcfb79b2b77cc17126 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 6 Mar 2021 23:52:39 +0100 Subject: [PATCH 159/180] fix even listerner types --- src/components/View/RNView.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/View/RNView.ts b/src/components/View/RNView.ts index f385ccad..823a1c89 100644 --- a/src/components/View/RNView.ts +++ b/src/components/View/RNView.ts @@ -7,9 +7,9 @@ import { QIcon, FlexLayout, WidgetEventTypes, - NativeElement, - QWidgetSignals + QWidgetSignals, } from "@nodegui/nodegui"; +import { NativeRawPointer } from "@nodegui/nodegui/dist/lib/core/Component"; import { RNWidget, RNProps } from "../config"; /** @@ -189,7 +189,7 @@ export function setViewProps( const minSize = newProps.minSize || { width: 0, height: 0 }; const maxSize = newProps.maxSize || { width: 16777215, - height: 16777215 + height: 16777215, }; widget.setMinimumSize(minSize.width, minSize.height); widget.setMaximumSize(maxSize.width, maxSize.height); @@ -226,7 +226,7 @@ export function setViewProps( Object.entries(windowFlagsMap).forEach(([flag, value]) => { widget.setWindowFlag(Number(flag), value); }); - } + }, }; Object.assign(setter, newProps); } @@ -302,5 +302,5 @@ type WindowFlagsMap = { }; export type WidgetEventListeners = { - [key in WidgetEventTypes]: (native?: NativeElement) => void; + [key in WidgetEventTypes]: (event?: NativeRawPointer<"QEvent">) => void; }; From 8a887e44eed47b682f882c1951b3264d60dca076 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 6 Mar 2021 23:53:00 +0100 Subject: [PATCH 160/180] 0.10.3 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 374ea985..5318ec05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.2", + "version": "0.10.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 29b77ffa..e2ebd6fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.2", + "version": "0.10.3", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", From 1b5d5dbaba8318400b6ba7ac8de2abe173463df0 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 7 Mar 2021 11:27:52 +0100 Subject: [PATCH 161/180] box layout fixes --- src/components/BoxView/RNBoxView.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/components/BoxView/RNBoxView.ts b/src/components/BoxView/RNBoxView.ts index bea48a31..d748faed 100644 --- a/src/components/BoxView/RNBoxView.ts +++ b/src/components/BoxView/RNBoxView.ts @@ -31,18 +31,14 @@ const setBoxViewProps = ( */ export class RNBoxView extends QWidget implements RNComponent { native: any; - _layout?: QBoxLayout; initialProps?: BoxViewProps; children: Array> = []; - get layout() { - return this.layout; + return super.layout as QBoxLayout | undefined; } - - set layout(l: QBoxLayout) { - this._layout = l; + set layout(l: QBoxLayout | undefined) { + super.layout = l; } - setProps(newProps: BoxViewProps, oldProps: BoxViewProps): void { if (this.layout) { setBoxViewProps(this, newProps, oldProps); From 61e5720de8dab8517e31c86f32e597624051ffc3 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 7 Mar 2021 20:45:07 +0100 Subject: [PATCH 162/180] bump nodegui --- package-lock.json | 8 ++++---- package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5318ec05..5ba8766b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.3", + "version": "0.10.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -30,9 +30,9 @@ } }, "@nodegui/nodegui": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.30.1.tgz", - "integrity": "sha512-cAb3ycB9vEUsD9GFqh0NG9ZcPOkHXGgEZq7fNzO4PP9ddil1+sRiGe+SPkYuJi7L3o8FdqymgG7qP0O6B3wO1w==", + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.30.2.tgz", + "integrity": "sha512-UhUCH6bqaaeMoRFfQBMc0mEozwtF4slV3agwUHkEw9zuLcM+1JZewKIiaKnSHMtYdrbgkIohTDsYxlwHgAXv+A==", "requires": { "@nodegui/artifact-installer": "^1.1.0", "@nodegui/qode": "^2.1.0", diff --git a/package.json b/package.json index e2ebd6fa..7e4b893d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/react-nodegui", - "version": "0.10.3", + "version": "0.10.4", "description": "React Native for building cross platform desktop applications", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -20,7 +20,7 @@ "docs": "typedoc && node ./website/docs/scripts/fixdocs.js" }, "dependencies": { - "@nodegui/nodegui": "^0.30.1", + "@nodegui/nodegui": "^0.30.2", "@types/react-reconciler": "^0.18.0", "phin": "^3.4.1", "react-deep-force-update": "^2.1.3", From fbd6a537934f22968fc6e9e6c2bfb279fdca1101 Mon Sep 17 00:00:00 2001 From: KR Tirtho Date: Fri, 26 Mar 2021 04:38:38 -0700 Subject: [PATCH 163/180] Dialog & all its inherited widget added (#344) * Dialog component created & RNView, RNBoxView was tweaked for Dialog * Added Components: - FileDialog - InputDialog - ProgressDialog Edited: - demo file for testing the dialogs * Added Compoents: - ColorDialog - FontDialog Edited: - Dialog (for adding some props) * updated ProgressBar Example * newly created components were exported --- src/components/BoxView/RNBoxView.ts | 7 ++ src/components/ColorDialog/RNColorDialog.ts | 47 ++++++++ src/components/ColorDialog/index.ts | 47 ++++++++ src/components/Dialog/RNDialog.ts | 77 +++++++++++++ src/components/Dialog/index.ts | 53 +++++++++ src/components/FileDialog/RNFileDialog.ts | 63 +++++++++++ src/components/FileDialog/index.ts | 47 ++++++++ src/components/FontDialog/RNFontDialog.ts | 46 ++++++++ src/components/FontDialog/index.ts | 47 ++++++++ src/components/InputDialog/RNInputDialog.ts | 101 ++++++++++++++++++ src/components/InputDialog/index.ts | 47 ++++++++ .../ProgressDialog/RNProgressDialog.ts | 88 +++++++++++++++ src/components/ProgressDialog/index.ts | 59 ++++++++++ src/components/View/RNView.ts | 45 ++------ src/index.ts | 6 ++ 15 files changed, 746 insertions(+), 34 deletions(-) create mode 100644 src/components/ColorDialog/RNColorDialog.ts create mode 100644 src/components/ColorDialog/index.ts create mode 100644 src/components/Dialog/RNDialog.ts create mode 100644 src/components/Dialog/index.ts create mode 100644 src/components/FileDialog/RNFileDialog.ts create mode 100644 src/components/FileDialog/index.ts create mode 100644 src/components/FontDialog/RNFontDialog.ts create mode 100644 src/components/FontDialog/index.ts create mode 100644 src/components/InputDialog/RNInputDialog.ts create mode 100644 src/components/InputDialog/index.ts create mode 100644 src/components/ProgressDialog/RNProgressDialog.ts create mode 100644 src/components/ProgressDialog/index.ts diff --git a/src/components/BoxView/RNBoxView.ts b/src/components/BoxView/RNBoxView.ts index d748faed..9cc7e455 100644 --- a/src/components/BoxView/RNBoxView.ts +++ b/src/components/BoxView/RNBoxView.ts @@ -7,6 +7,7 @@ import { } from "@nodegui/nodegui"; import { ViewProps, setViewProps } from "../View/RNView"; import { RNComponent } from "../config"; +import { NodeDialog } from "@nodegui/nodegui/dist/lib/QtWidgets/QDialog"; export interface BoxViewProps extends ViewProps { direction?: Direction; @@ -50,6 +51,9 @@ export class RNBoxView extends QWidget implements RNComponent { this.appendChild(child); } appendChild(child: NodeWidget): void { + if (child instanceof NodeDialog) { + return; + } const updateChild = () => { this.layout?.addWidget(child); this.children.push(child); @@ -73,6 +77,9 @@ export class RNBoxView extends QWidget implements RNComponent { updateChild(); } insertBefore(child: NodeWidget, beforeChild: NodeWidget): void { + if (child instanceof NodeDialog) { + return; + } const prevIndex = this.children.indexOf(beforeChild); if (prevIndex === -1) { diff --git a/src/components/ColorDialog/RNColorDialog.ts b/src/components/ColorDialog/RNColorDialog.ts new file mode 100644 index 00000000..b6b2fa54 --- /dev/null +++ b/src/components/ColorDialog/RNColorDialog.ts @@ -0,0 +1,47 @@ +import { NodeWidget, QColor, QColorDialog, QColorDialogSignals } from "@nodegui/nodegui"; +import { ColorDialogOption } from "@nodegui/nodegui/dist/lib/QtWidgets/QColorDialog"; +import { throwUnsupported } from "../../utils/helpers"; +import { RNWidget } from "../config"; +import { DialogProps, setDialogProps } from "../Dialog/RNDialog"; +import { DialogOption } from "../FileDialog/RNFileDialog"; + +export interface ColorDialogProps extends DialogProps { + currentColor?: QColor; + option?: DialogOption; + options?: ColorDialogOption; +} + +function setColorDialogProps(widget: RNColorDialog, newProps: ColorDialogProps, oldProps: ColorDialogProps) { + const setter: ColorDialogProps = { + set currentColor(currentColor: QColor) { + widget.setCurrentColor(currentColor); + }, + set option({ option, on }: DialogOption) { + widget.setOption(option, on); + }, + set options(options: ColorDialogOption) { + widget.setOptions(options); + }, + }; + Object.assign(setter, newProps); + setDialogProps(widget, newProps, oldProps); +} + +export class RNColorDialog extends QColorDialog implements RNWidget { + setProps(newProps: ColorDialogProps, oldProps: ColorDialogProps): void { + setColorDialogProps(this, newProps, oldProps); + } + appendInitialChild(child: NodeWidget): void { + throwUnsupported(this); + } + appendChild(child: NodeWidget): void { + throwUnsupported(this); + } + insertBefore(child: NodeWidget, beforeChild: NodeWidget): void { + throwUnsupported(this); + } + removeChild(child: NodeWidget): void { + throwUnsupported(this); + } + static tagName = "color-dialog"; +} diff --git a/src/components/ColorDialog/index.ts b/src/components/ColorDialog/index.ts new file mode 100644 index 00000000..d009a257 --- /dev/null +++ b/src/components/ColorDialog/index.ts @@ -0,0 +1,47 @@ +import { Fiber } from "react-reconciler"; +import { AppContainer } from "../../reconciler"; +import { ComponentConfig, registerComponent } from "../config"; +import { RNColorDialog, ColorDialogProps } from "./RNColorDialog"; + +class ColorDialogConfig extends ComponentConfig { + tagName: string = RNColorDialog.tagName; + shouldSetTextContent(nextProps: ColorDialogProps): boolean { + return false; + } + createInstance(newProps: ColorDialogProps, rootInstance: AppContainer, context: any, workInProgress: Fiber): RNColorDialog { + const widget = new RNColorDialog(); + widget.setProps(newProps, {}); + return widget; + } + commitMount(instance: RNColorDialog, newProps: ColorDialogProps, internalInstanceHandle: any): void { + if (newProps.visible !== false && newProps.open !== false) { + instance.show(); + } + return; + } + commitUpdate(instance: RNColorDialog, updatePayload: any, oldProps: ColorDialogProps, newProps: ColorDialogProps, finishedWork: Fiber): void { + instance.setProps(newProps, oldProps); + } +} +/** + * Pop up ColorDialog inheriting the functionality of nodegui's `QColorDialog` + * @example + * ```javascript + * function ColorDialogExample(props){ + * const [open, setOpen] = useState(false); + * const events = useEventHandler({ + * colorSelected(color){ + * //....do whatever + * } + * }, [....deps]) + * return ( + * + * + *