From cd2368742886170e9f17a42d3bdb44635b8810fe Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Fri, 15 Jan 2021 19:43:55 +0100 Subject: [PATCH 01/10] sspi POC works --- packages/api/package.json | 1 + packages/api/src/nativeModules.js | 3 + packages/api/src/shell/index.js | 2 +- packages/api/src/shell/requirePlugin.js | 4 +- packages/web/src/icons.js | 1 + packages/web/src/modals/ConnectionModal.js | 16 +- packages/web/src/utility/forms.js | 48 +++-- yarn.lock | 237 ++++++++++++++++++++- 8 files changed, 279 insertions(+), 33 deletions(-) create mode 100644 packages/api/src/nativeModules.js diff --git a/packages/api/package.json b/packages/api/package.json index f62cb079e..bde49bee4 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -36,6 +36,7 @@ "http": "^0.0.0", "line-reader": "^0.4.0", "lodash": "^4.17.15", + "msnodesqlv8": "^2.0.10", "ncp": "^2.0.0", "nedb-promises": "^4.0.1", "node-cron": "^2.0.3", diff --git a/packages/api/src/nativeModules.js b/packages/api/src/nativeModules.js new file mode 100644 index 000000000..8ab212921 --- /dev/null +++ b/packages/api/src/nativeModules.js @@ -0,0 +1,3 @@ +const msnodesqlv8 = require('msnodesqlv8'); + +module.exports = { msnodesqlv8 }; diff --git a/packages/api/src/shell/index.js b/packages/api/src/shell/index.js index 7ca14b9f1..403501ec5 100644 --- a/packages/api/src/shell/index.js +++ b/packages/api/src/shell/index.js @@ -39,6 +39,6 @@ const dbgateApi = { loadFile, }; -requirePlugin.initialize(dbgateApi); +requirePlugin.initializeDbgateApi(dbgateApi); module.exports = dbgateApi; diff --git a/packages/api/src/shell/requirePlugin.js b/packages/api/src/shell/requirePlugin.js index eb8b3f537..cee58693e 100644 --- a/packages/api/src/shell/requirePlugin.js +++ b/packages/api/src/shell/requirePlugin.js @@ -1,10 +1,12 @@ const path = require('path'); const { pluginsdir } = require('../utility/directories'); +const nativeModules = require('../nativeModules'); const loadedPlugins = {}; const dbgateEnv = { dbgateApi: null, + nativeModules, }; function requirePlugin(packageName, requiredPlugin = null) { @@ -30,7 +32,7 @@ function requirePlugin(packageName, requiredPlugin = null) { return requiredPlugin; } -requirePlugin.initialize = (value) => { +requirePlugin.initializeDbgateApi = value => { dbgateEnv.dbgateApi = value; }; diff --git a/packages/web/src/icons.js b/packages/web/src/icons.js index 369ce50e8..e138f836f 100644 --- a/packages/web/src/icons.js +++ b/packages/web/src/icons.js @@ -50,6 +50,7 @@ const iconNames = { 'icon ok': 'mdi mdi-check-circle', 'icon markdown': 'mdi mdi-application', 'icon preview': 'mdi mdi-file-find', + 'icon eye': 'mdi mdi-eye', 'icon run': 'mdi mdi-play', 'icon chevron-down': 'mdi mdi-chevron-down', diff --git a/packages/web/src/modals/ConnectionModal.js b/packages/web/src/modals/ConnectionModal.js index fd9559ba3..aef829119 100644 --- a/packages/web/src/modals/ConnectionModal.js +++ b/packages/web/src/modals/ConnectionModal.js @@ -1,7 +1,7 @@ import React from 'react'; import axios from '../utility/axios'; import ModalBase from './ModalBase'; -import { FormButton, FormTextField, FormSelectField, FormSubmit } from '../utility/forms'; +import { FormButton, FormTextField, FormSelectField, FormSubmit, FormPasswordField } from '../utility/forms'; import ModalHeader from './ModalHeader'; import ModalFooter from './ModalFooter'; import ModalContent from './ModalContent'; @@ -17,7 +17,7 @@ export default function ConnectionModal({ modalState, connection = undefined }) const [isTesting, setIsTesting] = React.useState(false); const testIdRef = React.useRef(0); - const handleTest = async (values) => { + const handleTest = async values => { setIsTesting(true); testIdRef.current += 1; const testid = testIdRef.current; @@ -33,7 +33,7 @@ export default function ConnectionModal({ modalState, connection = undefined }) setIsTesting(false); }; - const handleSubmit = async (values) => { + const handleSubmit = async values => { axios.post('connections/save', values); modalState.close(); }; @@ -44,7 +44,7 @@ export default function ConnectionModal({ modalState, connection = undefined }) - {extensions.drivers.map((driver) => ( + {extensions.drivers.map(driver => ( @@ -53,10 +53,16 @@ export default function ConnectionModal({ modalState, connection = undefined }) */} + + + + + + - + {!isTesting && sqlConnectResult && sqlConnectResult.msgtype == 'connected' && (
diff --git a/packages/web/src/utility/forms.js b/packages/web/src/utility/forms.js index ec6cb25da..c24558bda 100644 --- a/packages/web/src/utility/forms.js +++ b/packages/web/src/utility/forms.js @@ -14,6 +14,7 @@ import getAsArray from './getAsArray'; import axios from './axios'; import useTheme from '../theme/useTheme'; import { useForm, useFormFieldTemplate } from './FormProvider'; +import { FontIcon } from '../icons'; export function FormFieldTemplate({ label, children, type }) { const FieldTemplate = useFormFieldTemplate(); @@ -32,7 +33,7 @@ export function FormCondition({ condition, children }) { export function FormTextFieldRaw({ name, focused = false, ...other }) { const { values, setFieldValue } = useForm(); - const handleChange = (event) => { + const handleChange = event => { setFieldValue(name, event.target.value); }; const textFieldRef = React.useRef(null); @@ -52,9 +53,20 @@ export function FormTextField({ name, label, focused = false, ...other }) { ); } +export function FormPasswordField({ name, label, focused = false, ...other }) { + const FieldTemplate = useFormFieldTemplate(); + const [showPassword, setShowPassword] = React.useState(false); + return ( + + + setShowPassword(x => !x)} /> + + ); +} + export function FormCheckboxFieldRaw({ name = undefined, defaultValue = undefined, ...other }) { const { values, setFieldValue } = useForm(); - const handleChange = (event) => { + const handleChange = event => { setFieldValue(name, event.target.checked); }; let isChecked = values[name]; @@ -74,7 +86,7 @@ export function FormCheckboxField({ label, ...other }) { export function FormSelectFieldRaw({ children, name, ...other }) { const { values, setFieldValue } = useForm(); - const handleChange = (event) => { + const handleChange = event => { setFieldValue(name, event.target.value); }; return ( @@ -130,7 +142,7 @@ export function FormReactSelect({ options, name, isMulti = false, Component = Se return ( ({ + theme={t => ({ ...t, colors: { ...t.colors, @@ -155,12 +167,10 @@ export function FormReactSelect({ options, name, isMulti = false, Component = Se options={options} value={ isMulti - ? options.filter((x) => values[name] && values[name].includes(x.value)) - : options.find((x) => x.value == values[name]) - } - onChange={(item) => - setFieldValue(name, isMulti ? getAsArray(item).map((x) => x.value) : item ? item.value : null) + ? options.filter(x => values[name] && values[name].includes(x.value)) + : options.find(x => x.value == values[name]) } + onChange={item => setFieldValue(name, isMulti ? getAsArray(item).map(x => x.value) : item ? item.value : null)} menuPortalTarget={document.body} isMulti={isMulti} closeMenuOnSelect={!isMulti} @@ -173,7 +183,7 @@ export function FormConnectionSelect({ name }) { const connections = useConnectionList(); const connectionOptions = React.useMemo( () => - (connections || []).map((conn) => ({ + (connections || []).map(conn => ({ value: conn._id, label: conn.displayName || conn.server, })), @@ -189,7 +199,7 @@ export function FormDatabaseSelect({ conidName, name }) { const databases = useDatabaseList({ conid: values[conidName] }); const databaseOptions = React.useMemo( () => - (databases || []).map((db) => ({ + (databases || []).map(db => ({ value: db.name, label: db.name, })), @@ -205,7 +215,7 @@ export function FormSchemaSelect({ conidName, databaseName, name }) { const dbinfo = useDatabaseInfo({ conid: values[conidName], database: values[databaseName] }); const schemaOptions = React.useMemo( () => - ((dbinfo && dbinfo.schemas) || []).map((schema) => ({ + ((dbinfo && dbinfo.schemas) || []).map(schema => ({ value: schema.schemaName, label: schema.schemaName, })), @@ -222,8 +232,8 @@ export function FormTablesSelect({ conidName, databaseName, schemaName, name }) const tablesOptions = React.useMemo( () => [...((dbinfo && dbinfo.tables) || []), ...((dbinfo && dbinfo.views) || [])] - .filter((x) => !values[schemaName] || x.schemaName == values[schemaName]) - .map((x) => ({ + .filter(x => !values[schemaName] || x.schemaName == values[schemaName]) + .map(x => ({ value: x.pureName, label: x.pureName, })), @@ -239,7 +249,7 @@ export function FormArchiveFilesSelect({ folderName, name }) { const files = useArchiveFiles({ folder: folderName }); const filesOptions = React.useMemo( () => - (files || []).map((x) => ({ + (files || []).map(x => ({ value: x.name, label: x.name, })), @@ -255,13 +265,13 @@ export function FormArchiveFolderSelect({ name, additionalFolders = [], ...other const folders = useArchiveFolders(); const folderOptions = React.useMemo( () => [ - ...(folders || []).map((folder) => ({ + ...(folders || []).map(folder => ({ value: folder.name, label: folder.name, })), ...additionalFolders - .filter((x) => !(folders || []).find((y) => y.name == x)) - .map((folder) => ({ + .filter(x => !(folders || []).find(y => y.name == x)) + .map(folder => ({ value: folder, label: folder, })), @@ -269,7 +279,7 @@ export function FormArchiveFolderSelect({ name, additionalFolders = [], ...other [folders] ); - const handleCreateOption = (folder) => { + const handleCreateOption = folder => { axios.post('archive/create-folder', { folder }); setFieldValue(name, folder); }; diff --git a/yarn.lock b/yarn.lock index f41d62204..fddd33bb4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1995,11 +1995,19 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2425,6 +2433,11 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base64id@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" @@ -2498,6 +2511,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -2713,6 +2735,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bufferutil@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7" @@ -3316,6 +3346,11 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3871,6 +3906,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -3948,6 +3990,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -3971,6 +4018,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -4233,7 +4285,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -4711,6 +4763,11 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" @@ -5186,6 +5243,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -5258,6 +5320,20 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + 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" + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -5302,6 +5378,11 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -5505,6 +5586,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -5784,6 +5870,11 @@ identity-obj-proxy@3.0.0: dependencies: harmony-reflect "^1.4.6" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -5895,7 +5986,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7490,6 +7581,11 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + min-indent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" @@ -7532,6 +7628,11 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -7600,6 +7701,11 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -7649,6 +7755,14 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +msnodesqlv8@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/msnodesqlv8/-/msnodesqlv8-2.0.10.tgz#47d05157c2d30e5f48fa0aa550a0353ab56a027c" + integrity sha512-oA46Y8ZQxYEW9M8U+Wg4bI5g8nI2pueIkyameEpxanHqr9d5w4a0Pgk2WvugHiY1UYmN1bPziUdqBgwkBSGrnA== + dependencies: + nan "^2.14.2" + prebuild-install "^6.0.0" + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -7672,6 +7786,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nan@^2.14.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -7689,6 +7808,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -7744,6 +7868,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-abi@^2.7.0: + version "2.19.3" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.19.3.tgz#252f5dcab12dad1b5503b2d27eddd4733930282d" + integrity sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg== + dependencies: + semver "^5.4.1" + node-cron@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-2.0.3.tgz#b9649784d0d6c00758410eef22fa54a10e3f602d" @@ -7851,6 +7982,11 @@ noms@0.0.0: inherits "^2.0.1" readable-stream "~1.0.31" +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= + nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -7907,6 +8043,16 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npmlog@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + 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" + nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -9218,6 +9364,27 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, po source-map "^0.6.1" supports-color "^6.1.0" +prebuild-install@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.0.0.tgz#669022bcde57c710a869e39c5ca6bf9cd207f316" + integrity sha512-h2ZJ1PXHKWZpp1caLw0oX9sagVpL2YTk+ZwInQbQ3QqNd4J03O6MpFNmMTJlkfgPENWqe5kP0WjQLqz5OjLfsw== + 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" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -9482,7 +9649,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -9792,7 +9959,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9814,6 +9981,15 @@ readable-stream@^3.0.6, readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -10396,7 +10572,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -10498,6 +10674,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -10883,7 +11073,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -11144,6 +11334,27 @@ tapable@^1.0.0, tapable@^1.1.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + 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" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + 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" + tar@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" @@ -12007,6 +12218,11 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -12021,6 +12237,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" From 943f9c1c241360d3e885d48ad7f75be4912c420e Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Fri, 15 Jan 2021 20:50:18 +0100 Subject: [PATCH 02/10] grid fix --- packages/web/src/datagrid/DataGridCore.js | 146 +++++++++++----------- 1 file changed, 72 insertions(+), 74 deletions(-) diff --git a/packages/web/src/datagrid/DataGridCore.js b/packages/web/src/datagrid/DataGridCore.js index bb5ca2937..c29a7ffde 100644 --- a/packages/web/src/datagrid/DataGridCore.js +++ b/packages/web/src/datagrid/DataGridCore.js @@ -66,13 +66,13 @@ const TableHeaderRow = styled.tr` `; const TableHeaderCell = styled.td` // font-weight: bold; - border: 1px solid ${(props) => props.theme.border}; + border: 1px solid ${props => props.theme.border}; // border-collapse: collapse; text-align: left; padding: 0; // padding: 2px; margin: 0; - background-color: ${(props) => props.theme.gridheader_background}; + background-color: ${props => props.theme.gridheader_background}; overflow: hidden; `; const TableFilterCell = styled.td` @@ -91,7 +91,7 @@ const FocusField = styled.input` const RowCountLabel = styled.div` position: absolute; - background-color: ${(props) => props.theme.gridbody_background_yellow[1]}; + background-color: ${props => props.theme.gridbody_background_yellow[1]}; right: 40px; bottom: 20px; `; @@ -146,8 +146,8 @@ export default function DataGridCore(props) { const autofillMarkerCell = React.useMemo( () => - selectedCells && selectedCells.length > 0 && _.uniq(selectedCells.map((x) => x[0])).length == 1 - ? [_.max(selectedCells.map((x) => x[0])), _.max(selectedCells.map((x) => x[1]))] + selectedCells && selectedCells.length > 0 && _.uniq(selectedCells.map(x => x[0])).length == 1 + ? [_.max(selectedCells.map(x => x[0])), _.max(selectedCells.map(x => x[1]))] : null, [selectedCells] ); @@ -201,8 +201,8 @@ export default function DataGridCore(props) { const gridScrollAreaHeight = containerHeight - 2 * rowHeight; const gridScrollAreaWidth = containerWidth - columnSizes.frozenSize - headerColWidth - 32; - const visibleRowCountUpperBound = Math.ceil(gridScrollAreaHeight / Math.floor(rowHeight)); - const visibleRowCountLowerBound = Math.floor(gridScrollAreaHeight / Math.ceil(rowHeight)); + const visibleRowCountUpperBound = Math.ceil(gridScrollAreaHeight / Math.floor(Math.max(1, rowHeight))); + const visibleRowCountLowerBound = Math.floor(gridScrollAreaHeight / Math.ceil(Math.max(1, rowHeight))); // const visibleRowCountUpperBound = 20; // const visibleRowCountLowerBound = 20; // console.log('containerHeight', containerHeight); @@ -241,7 +241,7 @@ export default function DataGridCore(props) { const realColumnUniqueNames = React.useMemo( () => - _.range(columnSizes.realCount).map((realIndex) => (columns[columnSizes.realToModel(realIndex)] || {}).uniqueName), + _.range(columnSizes.realCount).map(realIndex => (columns[columnSizes.realToModel(realIndex)] || {}).uniqueName), [columnSizes, columns] ); @@ -266,10 +266,10 @@ export default function DataGridCore(props) { props.onReferenceClick({ schemaName: display.baseTable.schemaName, pureName: display.baseTable.pureName, - columns: display.groupColumns.map((col) => ({ + columns: display.groupColumns.map(col => ({ baseName: col, refName: col, - dataType: _.get(display.baseTable && display.baseTable.columns.find((x) => x.columnName == col), 'dataType'), + dataType: _.get(display.baseTable && display.baseTable.columns.find(x => x.columnName == col), 'dataType'), })), }); } @@ -278,8 +278,8 @@ export default function DataGridCore(props) { const theme = useTheme(); const rowCountInfo = React.useMemo(() => { - if (selectedCells.length > 1 && selectedCells.every((x) => _.isNumber(x[0]) && _.isNumber(x[1]))) { - let sum = _.sumBy(selectedCells, (cell) => { + if (selectedCells.length > 1 && selectedCells.every(x => _.isNumber(x[0]) && _.isNumber(x[1]))) { + let sum = _.sumBy(selectedCells, cell => { const row = grider.getRowData(cell[0]); if (row) { const colName = realColumnUniqueNames[cell[1]]; @@ -331,17 +331,17 @@ export default function DataGridCore(props) { ); } - const handleRowScroll = (value) => { + const handleRowScroll = value => { setFirstVisibleRowScrollIndex(value); }; - const handleColumnScroll = (value) => { + const handleColumnScroll = value => { setFirstVisibleColumnScrollIndex(value); }; const getSelectedFreeData = () => { const columns = getSelectedColumns(); - const rows = getSelectedRowData().map((row) => _.pickBy(row, (v, col) => columns.find((x) => x.columnName == col))); + const rows = getSelectedRowData().map(row => _.pickBy(row, (v, col) => columns.find(x => x.columnName == col))); return { structure: { columns, @@ -379,7 +379,7 @@ export default function DataGridCore(props) { ); }; - const handleContextMenu = (event) => { + const handleContextMenu = event => { event.preventDefault(); showMenu( event.pageX, @@ -422,8 +422,8 @@ export default function DataGridCore(props) { if (event.ctrlKey) { if (isRegularCell(cell)) { - if (selectedCells.find((x) => x[0] == cell[0] && x[1] == cell[1])) { - setSelectedCells(selectedCells.filter((x) => x[0] != cell[0] || x[1] != cell[1])); + if (selectedCells.find(x => x[0] == cell[0] && x[1] == cell[1])) { + setSelectedCells(selectedCells.filter(x => x[0] != cell[0] || x[1] != cell[1])); } else { setSelectedCells([...selectedCells, cell]); } @@ -470,7 +470,7 @@ export default function DataGridCore(props) { const pasteRows = pastedText .replace(/\r/g, '') .split('\n') - .map((row) => row.split('\t')); + .map(row => row.split('\t')); const selectedRegular = cellsToRegularCells(selectedCells); if (selectedRegular.length <= 1) { const startRow = isRegularCell(currentCell) ? currentCell[0] : grider.rowCount; @@ -489,8 +489,8 @@ export default function DataGridCore(props) { } } if (selectedRegular.length > 1) { - const startRow = _.min(selectedRegular.map((x) => x[0])); - const startCol = _.min(selectedRegular.map((x) => x[1])); + const startRow = _.min(selectedRegular.map(x => x[0])); + const startCol = _.min(selectedRegular.map(x => x[1])); for (const cell of selectedRegular) { const [rowIndex, colIndex] = cell; const selectionRow = rowIndex - startRow; @@ -505,7 +505,7 @@ export default function DataGridCore(props) { function setNull() { grider.beginUpdate(); - selectedCells.filter(isRegularCell).forEach((cell) => { + selectedCells.filter(isRegularCell).forEach(cell => { setCellValue(cell, null); }); grider.endUpdate(); @@ -513,17 +513,17 @@ export default function DataGridCore(props) { function cellsToRegularCells(cells) { cells = _.flatten( - cells.map((cell) => { + cells.map(cell => { if (cell[1] == 'header') { - return _.range(0, columnSizes.count).map((col) => [cell[0], col]); + return _.range(0, columnSizes.count).map(col => [cell[0], col]); } return [cell]; }) ); cells = _.flatten( - cells.map((cell) => { + cells.map(cell => { if (cell[0] == 'header') { - return _.range(0, grider.rowCount).map((row) => [row, cell[1]]); + return _.range(0, grider.rowCount).map(row => [row, cell[1]]); } return [cell]; }) @@ -533,14 +533,14 @@ export default function DataGridCore(props) { function copyToClipboard() { const cells = cellsToRegularCells(selectedCells); - const rowIndexes = _.sortBy(_.uniq(cells.map((x) => x[0]))); - const lines = rowIndexes.map((rowIndex) => { - let colIndexes = _.sortBy(cells.filter((x) => x[0] == rowIndex).map((x) => x[1])); + const rowIndexes = _.sortBy(_.uniq(cells.map(x => x[0]))); + const lines = rowIndexes.map(rowIndex => { + let colIndexes = _.sortBy(cells.filter(x => x[0] == rowIndex).map(x => x[1])); const rowData = grider.getRowData(rowIndex); if (!rowData) return ''; const line = colIndexes - .map((col) => realColumnUniqueNames[col]) - .map((col) => (rowData[col] == null ? '(NULL)' : rowData[col])) + .map(col => realColumnUniqueNames[col]) + .map(col => (rowData[col] == null ? '(NULL)' : rowData[col])) .join('\t'); return line; }); @@ -552,7 +552,7 @@ export default function DataGridCore(props) { if (autofillDragStartCell) { const cell = cellFromEvent(event); if (isRegularCell(cell) && (cell[0] == autofillDragStartCell[0] || cell[1] == autofillDragStartCell[1])) { - const autoFillStart = [selectedCells[0][0], _.min(selectedCells.map((x) => x[1]))]; + const autoFillStart = [selectedCells[0][0], _.min(selectedCells.map(x => x[1]))]; // @ts-ignore setAutofillSelectedCells(getCellRange(autoFillStart, cell)); } @@ -573,8 +573,8 @@ export default function DataGridCore(props) { if (autofillDragStartCell) { const currentRowNumber = currentCell[0]; if (_.isNumber(currentRowNumber)) { - const rowIndexes = _.uniq((autofillSelectedCells || []).map((x) => x[0])).filter((x) => x != currentRowNumber); - const colNames = selectedCells.map((cell) => realColumnUniqueNames[cell[1]]); + const rowIndexes = _.uniq((autofillSelectedCells || []).map(x => x[0])).filter(x => x != currentRowNumber); + const colNames = selectedCells.map(cell => realColumnUniqueNames[cell[1]]); const changeObject = _.pick(grider.getRowData(currentRowNumber), colNames); grider.beginUpdate(); for (const index of rowIndexes) grider.updateRow(index, changeObject); @@ -588,24 +588,24 @@ export default function DataGridCore(props) { } function getSelectedRowIndexes() { - if (selectedCells.find((x) => x[0] == 'header')) return _.range(0, grider.rowCount); - return _.uniq((selectedCells || []).map((x) => x[0])).filter((x) => _.isNumber(x)); + if (selectedCells.find(x => x[0] == 'header')) return _.range(0, grider.rowCount); + return _.uniq((selectedCells || []).map(x => x[0])).filter(x => _.isNumber(x)); } function getSelectedColumnIndexes() { - if (selectedCells.find((x) => x[1] == 'header')) return _.range(0, realColumnUniqueNames.length); - return _.uniq((selectedCells || []).map((x) => x[1])).filter((x) => _.isNumber(x)); + if (selectedCells.find(x => x[1] == 'header')) return _.range(0, realColumnUniqueNames.length); + return _.uniq((selectedCells || []).map(x => x[1])).filter(x => _.isNumber(x)); } function getSelectedCellsPublished() { const regular = cellsToRegularCells(selectedCells); // @ts-ignore return regular - .map((cell) => ({ + .map(cell => ({ row: cell[0], column: realColumnUniqueNames[cell[1]], })) - .filter((x) => x.column); + .filter(x => x.column); // return regular.map((cell) => { // const row = cell[0]; @@ -624,12 +624,12 @@ export default function DataGridCore(props) { } function getSelectedRowData() { - return _.compact(getSelectedRowIndexes().map((index) => grider.getRowData(index))); + return _.compact(getSelectedRowIndexes().map(index => grider.getRowData(index))); } function getSelectedColumns() { return _.compact( - getSelectedColumnIndexes().map((index) => ({ + getSelectedColumnIndexes().map(index => ({ columnName: realColumnUniqueNames[index], })) ); @@ -715,8 +715,8 @@ export default function DataGridCore(props) { } }; - const selectTopmostCell = (uniquePath) => { - const modelIndex = columns.findIndex((x) => x.uniquePath == uniquePath); + const selectTopmostCell = uniquePath => { + const modelIndex = columns.findIndex(x => x.uniquePath == uniquePath); const realIndex = columnSizes.modelToReal(modelIndex); let cell = [firstVisibleRowScrollIndex, realIndex]; // @ts-ignore @@ -878,7 +878,7 @@ export default function DataGridCore(props) { function focusFilterEditor(columnRealIndex) { let modelIndex = columnSizes.realToModel(columnRealIndex); - setFocusFilterInputs((cols) => ({ + setFocusFilterInputs(cols => ({ ...cols, [columns[modelIndex].uniqueName]: (cols[columns[modelIndex].uniqueName] || 0) + 1, })); @@ -1004,7 +1004,7 @@ export default function DataGridCore(props) { - {visibleRealColumns.map((col) => ( + {visibleRealColumns.map(col => ( display.setSort(col.uniqueName, order) : null} + setSort={display.sortable ? order => display.setSort(col.uniqueName, order) : null} order={display.getSortOrder(col.uniqueName)} - onResize={(diff) => display.resizeColumn(col.uniqueName, col.widthNumber, diff)} - setGrouping={display.sortable ? (groupFunc) => setGrouping(col.uniqueName, groupFunc) : null} + onResize={diff => display.resizeColumn(col.uniqueName, col.widthNumber, diff)} + setGrouping={display.sortable ? groupFunc => setGrouping(col.uniqueName, groupFunc) : null} grouping={display.getGrouping(col.uniqueName)} /> @@ -1039,7 +1039,7 @@ export default function DataGridCore(props) { )} - {visibleRealColumns.map((col) => ( + {visibleRealColumns.map(col => ( display.setFilter(col.uniqueName, value)} + setFilter={value => display.setFilter(col.uniqueName, value)} focusIndex={focusFilterInputs[col.uniqueName]} onFocusGrid={() => { selectTopmostCell(col.uniqueName); @@ -1062,29 +1062,27 @@ export default function DataGridCore(props) { )} - {_.range(firstVisibleRowScrollIndex, firstVisibleRowScrollIndex + visibleRowCountUpperBound).map( - (rowIndex) => ( - - ) - )} + {_.range(firstVisibleRowScrollIndex, firstVisibleRowScrollIndex + visibleRowCountUpperBound).map(rowIndex => ( + + ))} Date: Sat, 16 Jan 2021 18:55:10 +0100 Subject: [PATCH 03/10] webpack native module --- packages/api/package.json | 1 + packages/api/src/nativeModules.js | 2 +- packages/api/webpack.config.js | 25 +++++---- packages/web/src/modals/ConnectionModal.js | 2 +- yarn.lock | 60 +++++++++++++++++++++- 5 files changed, 76 insertions(+), 14 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index bde49bee4..ebca3349a 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -54,6 +54,7 @@ "@types/lodash": "^4.14.149", "dbgate-types": "^1.0.0", "env-cmd": "^10.1.0", + "node-loader": "^1.0.2", "nodemon": "^2.0.2", "typescript": "^3.7.4", "webpack": "^4.42.0", diff --git a/packages/api/src/nativeModules.js b/packages/api/src/nativeModules.js index 8ab212921..c89168496 100644 --- a/packages/api/src/nativeModules.js +++ b/packages/api/src/nativeModules.js @@ -1,3 +1,3 @@ -const msnodesqlv8 = require('msnodesqlv8'); +const msnodesqlv8 = () => require('msnodesqlv8'); module.exports = { msnodesqlv8 }; diff --git a/packages/api/webpack.config.js b/packages/api/webpack.config.js index d2f383753..d448ccc11 100644 --- a/packages/api/webpack.config.js +++ b/packages/api/webpack.config.js @@ -8,24 +8,27 @@ var config = { app: './index.js', }, target: 'node', + node: { + __dirname: false, + }, output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js', libraryTarget: 'commonjs2', }, - // optimization: { - // minimize: false, - // }, +// optimization: { +// minimize: false, +// }, - // module: { - // rules: [ - // { - // test: /\.js$/, - // exclude: /node_modules/ - // }, - // ], - // }, + module: { + rules: [ + { + test: /\.node$/, + use: 'node-loader', + }, + ], + }, plugins: [ new webpack.IgnorePlugin({ checkResource(resource) { diff --git a/packages/web/src/modals/ConnectionModal.js b/packages/web/src/modals/ConnectionModal.js index aef829119..34ecffc0c 100644 --- a/packages/web/src/modals/ConnectionModal.js +++ b/packages/web/src/modals/ConnectionModal.js @@ -57,7 +57,7 @@ export default function ConnectionModal({ modalState, connection = undefined }) - + diff --git a/yarn.lock b/yarn.lock index fddd33bb4..6346d0730 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1485,6 +1485,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + "@types/lodash@^4.14.149": version "4.14.149" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" @@ -1895,6 +1900,11 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" @@ -1905,6 +1915,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -4273,6 +4293,11 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -7041,6 +7066,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -7235,6 +7267,15 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2. emojis-list "^2.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + localforage@^1.3.0: version "1.7.3" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.7.3.tgz#0082b3ca9734679e1bd534995bdd3b24cf10f204" @@ -7628,7 +7669,7 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@^1.2.3: +minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -7935,6 +7976,14 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-loader@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-1.0.2.tgz#f8a8f117844652642df1f2abb13ca46242643800" + integrity sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -10491,6 +10540,15 @@ schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.2 ajv "^6.10.2" ajv-keywords "^3.4.1" +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" From d1aef572bd66153086e7d527f3f242ad05b082bc Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sat, 16 Jan 2021 20:32:07 +0100 Subject: [PATCH 04/10] native modules - pass version from electron to API --- app/package.json | 3 +- app/src/electron.js | 17 +- app/src/nativeModules.js | 3 + app/yarn.lock | 331 +++++++++++++++++- packages/api/src/controllers/connections.js | 2 +- .../src/controllers/databaseConnections.js | 2 +- packages/api/src/controllers/runners.js | 2 +- .../api/src/controllers/serverConnections.js | 2 +- packages/api/src/controllers/sessions.js | 2 +- packages/api/src/nativeModules.js | 6 +- packages/api/src/utility/DatastoreProxy.js | 2 +- 11 files changed, 350 insertions(+), 22 deletions(-) create mode 100644 app/src/nativeModules.js diff --git a/app/package.json b/app/package.json index 141fd64fb..cf40c7d78 100644 --- a/app/package.json +++ b/app/package.json @@ -6,7 +6,8 @@ "dependencies": { "electron-log": "^4.3.1", "electron-store": "^5.1.1", - "electron-updater": "^4.3.5" + "electron-updater": "^4.3.5", + "msnodesqlv8": "^2.0.10" }, "repository": { "type": "git", diff --git a/app/src/electron.js b/app/src/electron.js index 84db55d8d..b764cbca0 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -143,7 +143,7 @@ function createWindow() { protocol: 'file:', slashes: true, }); - mainWindow.webContents.on('did-finish-load', function () { + mainWindow.webContents.on('did-finish-load', function() { hideSplash(); }); mainWindow.on('close', () => { @@ -172,8 +172,13 @@ function createWindow() { if (process.env.ELECTRON_START_URL) { loadMainWindow(); } else { - const apiProcess = fork(path.join(__dirname, '../packages/api/dist/bundle.js'), ['--dynport']); - apiProcess.on('message', (msg) => { + const apiProcess = fork(path.join(__dirname, '../packages/api/dist/bundle.js'), [ + '--dynport', + '--native-modules', + path.join(__dirname, 'nativeModules'), + // '../../../src/nativeModules' + ]); + apiProcess.on('message', msg => { if (msg.msgtype == 'listening') { const { port } = msg; global['port'] = port; @@ -189,7 +194,7 @@ function createWindow() { // mainWindow.webContents.openDevTools(); // Emitted when the window is closed. - mainWindow.on('closed', function () { + mainWindow.on('closed', function() { // Dereference the window object, usually you would store windows // in an array if your app supports multi windows, this is the time // when you should delete the corresponding element. @@ -208,7 +213,7 @@ function onAppReady() { app.on('ready', onAppReady); // Quit when all windows are closed. -app.on('window-all-closed', function () { +app.on('window-all-closed', function() { // On OS X it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin') { @@ -216,7 +221,7 @@ app.on('window-all-closed', function () { } }); -app.on('activate', function () { +app.on('activate', function() { // On OS X it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (mainWindow === null) { diff --git a/app/src/nativeModules.js b/app/src/nativeModules.js new file mode 100644 index 000000000..c89168496 --- /dev/null +++ b/app/src/nativeModules.js @@ -0,0 +1,3 @@ +const msnodesqlv8 = () => require('msnodesqlv8'); + +module.exports = { msnodesqlv8 }; diff --git a/app/yarn.lock b/app/yarn.lock index 2c767efb4..623f4561b 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -119,6 +119,16 @@ ansi-align@^3.0.0: dependencies: string-width "^3.0.0" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -177,6 +187,19 @@ app-builder-lib@22.9.1: semver "^7.3.2" temp-file "^3.3.7" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -204,6 +227,20 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bluebird-lst@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" @@ -248,6 +285,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builder-util-runtime@8.7.2: version "8.7.2" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72" @@ -319,6 +364,11 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chromium-pickle-js@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" @@ -359,6 +409,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -434,6 +489,11 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + copyfiles@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.2.0.tgz#d9fc6c06f299337fb7eeb7ea5887e9d7188d9d47" @@ -517,6 +577,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -534,6 +601,16 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -664,7 +741,7 @@ encodeurl@^1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -706,6 +783,11 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + extract-zip@^1.0.3: version "1.6.7" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" @@ -747,6 +829,11 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -771,6 +858,20 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + 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" + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -790,6 +891,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + glob@^7.0.5: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -871,6 +977,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -900,6 +1011,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -918,7 +1034,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -935,6 +1051,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -1150,6 +1273,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1162,11 +1290,16 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@0.5.1, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -1184,6 +1317,31 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +msnodesqlv8@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/msnodesqlv8/-/msnodesqlv8-2.0.10.tgz#47d05157c2d30e5f48fa0aa550a0353ab56a027c" + integrity sha512-oA46Y8ZQxYEW9M8U+Wg4bI5g8nI2pueIkyameEpxanHqr9d5w4a0Pgk2WvugHiY1UYmN1bPziUdqBgwkBSGrnA== + dependencies: + nan "^2.14.2" + prebuild-install "^6.0.0" + +nan@^2.14.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +node-abi@^2.7.0: + version "2.19.3" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.19.3.tgz#252f5dcab12dad1b5503b2d27eddd4733930282d" + integrity sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg== + dependencies: + semver "^5.4.1" + noms@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" @@ -1192,6 +1350,11 @@ noms@0.0.0: inherits "^2.0.1" readable-stream "~1.0.31" +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -1215,6 +1378,26 @@ npm-conf@^1.1.3: config-chain "^1.1.11" pify "^3.0.0" +npmlog@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + 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" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -1305,6 +1488,27 @@ pkg-up@^3.0.1: dependencies: find-up "^3.0.0" +prebuild-install@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.0.0.tgz#669022bcde57c710a869e39c5ca6bf9cd207f316" + integrity sha512-h2ZJ1PXHKWZpp1caLw0oX9sagVpL2YTk+ZwInQbQ3QqNd4J03O6MpFNmMTJlkfgPENWqe5kP0WjQLqz5OjLfsw== + 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" + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -1345,7 +1549,7 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" -rc@^1.2.8: +rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -1366,7 +1570,7 @@ read-config-file@6.0.0: json5 "^2.1.2" lazy-val "^1.0.4" -readable-stream@^2.2.2, readable-stream@~2.3.6: +readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -1379,6 +1583,15 @@ readable-stream@^2.2.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -1439,6 +1652,11 @@ roarr@^2.15.2: semver-compare "^1.0.0" sprintf-js "^1.1.2" +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -1473,7 +1691,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5": +"semver@2 || 3 || 4 || 5", semver@^5.4.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -1502,7 +1720,7 @@ serialize-error@^5.0.0: dependencies: type-fest "^0.8.0" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -1519,11 +1737,30 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + source-map-support@^0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -1578,6 +1815,23 @@ stat-mode@^1.0.0: resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -1596,6 +1850,13 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -1608,6 +1869,20 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -1648,6 +1923,27 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + 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" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + 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" + temp-file@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" @@ -1681,6 +1977,13 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" @@ -1763,7 +2066,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -1781,6 +2084,11 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -1788,6 +2096,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + widest-line@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 59c01a58d..f7050eac6 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -44,7 +44,7 @@ module.exports = { raw: true, }, test(req, res) { - const subprocess = fork(process.argv[1], ['connectProcess']); + const subprocess = fork(process.argv[1], ['connectProcess', ...process.argv.slice(3)]); subprocess.on('message', (resp) => { // @ts-ignore const { msgtype } = resp; diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index a7394f0e1..ff33938a1 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -39,7 +39,7 @@ module.exports = { const existing = this.opened.find((x) => x.conid == conid && x.database == database); if (existing) return existing; const connection = await connections.get({ conid }); - const subprocess = fork(process.argv[1], ['databaseConnectionProcess']); + const subprocess = fork(process.argv[1], ['databaseConnectionProcess', ...process.argv.slice(3)]); const lastClosed = this.closed[`${conid}/${database}`]; const newOpened = { conid, diff --git a/packages/api/src/controllers/runners.js b/packages/api/src/controllers/runners.js index a4a8b9d00..74b6e0ac2 100644 --- a/packages/api/src/controllers/runners.js +++ b/packages/api/src/controllers/runners.js @@ -92,7 +92,7 @@ module.exports = { const pluginNames = fs.readdirSync(pluginsdir()); console.log(`RUNNING SCRIPT ${scriptFile}`); // const subprocess = fork(scriptFile, ['--checkParent', '--max-old-space-size=8192'], { - const subprocess = fork(scriptFile, ['--checkParent'], { + const subprocess = fork(scriptFile, ['--checkParent', ...process.argv.slice(3)], { cwd: directory, stdio: ['ignore', 'pipe', 'pipe', 'ipc'], env: { diff --git a/packages/api/src/controllers/serverConnections.js b/packages/api/src/controllers/serverConnections.js index 82f90f8ea..a33fbf9f2 100644 --- a/packages/api/src/controllers/serverConnections.js +++ b/packages/api/src/controllers/serverConnections.js @@ -25,7 +25,7 @@ module.exports = { const existing = this.opened.find((x) => x.conid == conid); if (existing) return existing; const connection = await connections.get({ conid }); - const subprocess = fork(process.argv[1], ['serverConnectionProcess']); + const subprocess = fork(process.argv[1], ['serverConnectionProcess', ...process.argv.slice(3)]); const newOpened = { conid, subprocess, diff --git a/packages/api/src/controllers/sessions.js b/packages/api/src/controllers/sessions.js index adf281b47..a91570d43 100644 --- a/packages/api/src/controllers/sessions.js +++ b/packages/api/src/controllers/sessions.js @@ -64,7 +64,7 @@ module.exports = { async create({ conid, database }) { const sesid = uuidv1(); const connection = await connections.get({ conid }); - const subprocess = fork(process.argv[1], ['sessionProcess']); + const subprocess = fork(process.argv[1], ['sessionProcess', ...process.argv.slice(3)]); const newOpened = { conid, database, diff --git a/packages/api/src/nativeModules.js b/packages/api/src/nativeModules.js index c89168496..24bc42b0b 100644 --- a/packages/api/src/nativeModules.js +++ b/packages/api/src/nativeModules.js @@ -1,3 +1,7 @@ const msnodesqlv8 = () => require('msnodesqlv8'); -module.exports = { msnodesqlv8 }; +const argIndex = process.argv.indexOf('--native-modules'); +const redirectFile = argIndex > 0 ? process.argv[argIndex + 1] : null; + +// @ts-ignore +module.exports = redirectFile ? __non_webpack_require__(redirectFile) : { msnodesqlv8 }; diff --git a/packages/api/src/utility/DatastoreProxy.js b/packages/api/src/utility/DatastoreProxy.js index 1b4bcbec8..2f9338b4e 100644 --- a/packages/api/src/utility/DatastoreProxy.js +++ b/packages/api/src/utility/DatastoreProxy.js @@ -28,7 +28,7 @@ class DatastoreProxy { async ensureSubprocess() { if (!this.subprocess) { - this.subprocess = fork(process.argv[1], ['jslDatastoreProcess']); + this.subprocess = fork(process.argv[1], ['jslDatastoreProcess', ...process.argv.slice(3)]); // @ts-ignore this.subprocess.on('message', ({ msgtype, ...message }) => { From ccd9a0fa704b5e7e7e749f06577710d56d010b60 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sat, 16 Jan 2021 21:54:01 +0100 Subject: [PATCH 05/10] msnodesql as optional dependency --- app/package.json | 6 ++++-- app/src/nativeModules.js | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/package.json b/app/package.json index cf40c7d78..1da239fee 100644 --- a/app/package.json +++ b/app/package.json @@ -6,8 +6,7 @@ "dependencies": { "electron-log": "^4.3.1", "electron-store": "^5.1.1", - "electron-updater": "^4.3.5", - "msnodesqlv8": "^2.0.10" + "electron-updater": "^4.3.5" }, "repository": { "type": "git", @@ -69,5 +68,8 @@ "cross-env": "^6.0.3", "electron": "11.1.1", "electron-builder": "22.9.1" + }, + "optionalDependencies": { + "msnodesqlv8": "^2.0.10" } } diff --git a/app/src/nativeModules.js b/app/src/nativeModules.js index c89168496..70b8dd160 100644 --- a/app/src/nativeModules.js +++ b/app/src/nativeModules.js @@ -1,3 +1,9 @@ const msnodesqlv8 = () => require('msnodesqlv8'); -module.exports = { msnodesqlv8 }; +const win32Modules = { + msnodesqlv8, +}; + +module.exports = { + ...(process.platform == 'win32' ? win32Modules : {}), +}; From c06965c79fcd30629f88c34fa90d6230d4b2652f Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 17 Jan 2021 09:11:09 +0100 Subject: [PATCH 06/10] os dependend native modules --- .github/workflows/build-app.yaml | 3 +++ app/src/nativeModules.js | 10 ++-------- app/src/nativeModulesContent.js | 7 +++++++ fillNativeModules.js | 23 +++++++++++++++++++++++ package.json | 4 +++- packages/api/package.json | 4 +++- packages/api/src/nativeModules.js | 4 +--- packages/api/src/nativeModulesContent.js | 7 +++++++ 8 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 app/src/nativeModulesContent.js create mode 100644 fillNativeModules.js create mode 100644 packages/api/src/nativeModulesContent.js diff --git a/.github/workflows/build-app.yaml b/.github/workflows/build-app.yaml index 19850fcf6..60b336d12 100644 --- a/.github/workflows/build-app.yaml +++ b/.github/workflows/build-app.yaml @@ -35,6 +35,9 @@ jobs: - name: setCurrentVersion run: | yarn setCurrentVersion + - name: fillNativeModulesElectron + run: | + yarn fillNativeModulesElectron - name: Publish run: | yarn run build:app diff --git a/app/src/nativeModules.js b/app/src/nativeModules.js index 70b8dd160..03a2f2c06 100644 --- a/app/src/nativeModules.js +++ b/app/src/nativeModules.js @@ -1,9 +1,3 @@ -const msnodesqlv8 = () => require('msnodesqlv8'); +const content = require('./nativeModulesContent'); -const win32Modules = { - msnodesqlv8, -}; - -module.exports = { - ...(process.platform == 'win32' ? win32Modules : {}), -}; +module.exports = content; diff --git a/app/src/nativeModulesContent.js b/app/src/nativeModulesContent.js new file mode 100644 index 000000000..b57b44e9f --- /dev/null +++ b/app/src/nativeModulesContent.js @@ -0,0 +1,7 @@ + +// this file is generated automatically by script fillNativeModules.js, do not edit it manually +const content = {}; + + + +module.exports = content; diff --git a/fillNativeModules.js b/fillNativeModules.js new file mode 100644 index 000000000..82f3ace8f --- /dev/null +++ b/fillNativeModules.js @@ -0,0 +1,23 @@ +const fs = require('fs'); + +let fillContent = ''; + +// if (!process.argv.includes('--electron')) { +if (process.platform == 'win32') { + fillContent += `content.msnodesqlv8 = () => require('msnodesqlv8');`; +} + +const getContent = (empty) => ` +// this file is generated automatically by script fillNativeModules.js, do not edit it manually +const content = {}; + +${empty ? '' : fillContent} + +module.exports = content; +`; + +fs.writeFileSync( + 'packages/api/src/nativeModulesContent.js', + getContent(process.argv.includes('--electron') ? true : false) +); +fs.writeFileSync('app/src/nativeModulesContent.js', getContent(false)); diff --git a/package.json b/package.json index feede77ec..28572880d 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "start:app:local": "cd app && yarn start:local", "setCurrentVersion": "node setCurrentVersion", "generatePadFile": "node generatePadFile", + "fillNativeModules": "node fillNativeModules", + "fillNativeModulesElectron": "node fillNativeModules --eletron", "copy:docker:build": "copyfiles packages/api/dist/* docker -f && copyfiles packages/web/build/* docker -u 2 && copyfiles \"packages/web/build/**/*\" docker -u 2", "prepare:docker": "yarn build:web:docker && yarn build:api && yarn copy:docker:build", @@ -35,7 +37,7 @@ "ts:api": "yarn workspace dbgate-api ts", "ts:web": "yarn workspace dbgate-web ts", "ts": "yarn ts:api && yarn ts:web", - "postinstall": "patch-package" + "postinstall": "patch-package && yarn fillNativeModules" }, "dependencies": { "concurrently": "^5.1.0", diff --git a/packages/api/package.json b/packages/api/package.json index ebca3349a..508dbd2e3 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -36,7 +36,6 @@ "http": "^0.0.0", "line-reader": "^0.4.0", "lodash": "^4.17.15", - "msnodesqlv8": "^2.0.10", "ncp": "^2.0.0", "nedb-promises": "^4.0.1", "node-cron": "^2.0.3", @@ -59,5 +58,8 @@ "typescript": "^3.7.4", "webpack": "^4.42.0", "webpack-cli": "^3.3.11" + }, + "optionalDependencies": { + "msnodesqlv8": "^2.0.10" } } diff --git a/packages/api/src/nativeModules.js b/packages/api/src/nativeModules.js index 24bc42b0b..649079303 100644 --- a/packages/api/src/nativeModules.js +++ b/packages/api/src/nativeModules.js @@ -1,7 +1,5 @@ -const msnodesqlv8 = () => require('msnodesqlv8'); - const argIndex = process.argv.indexOf('--native-modules'); const redirectFile = argIndex > 0 ? process.argv[argIndex + 1] : null; // @ts-ignore -module.exports = redirectFile ? __non_webpack_require__(redirectFile) : { msnodesqlv8 }; +module.exports = redirectFile ? __non_webpack_require__(redirectFile) : require('./nativeModulesContent'); diff --git a/packages/api/src/nativeModulesContent.js b/packages/api/src/nativeModulesContent.js new file mode 100644 index 000000000..b57b44e9f --- /dev/null +++ b/packages/api/src/nativeModulesContent.js @@ -0,0 +1,7 @@ + +// this file is generated automatically by script fillNativeModules.js, do not edit it manually +const content = {}; + + + +module.exports = content; From c9227d1e37b36175c7bd366a422342872ffae41a Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 17 Jan 2021 08:14:53 +0100 Subject: [PATCH 07/10] removed generated files --- app/src/nativeModulesContent.js | 7 ------- packages/api/src/nativeModulesContent.js | 7 ------- 2 files changed, 14 deletions(-) delete mode 100644 app/src/nativeModulesContent.js delete mode 100644 packages/api/src/nativeModulesContent.js diff --git a/app/src/nativeModulesContent.js b/app/src/nativeModulesContent.js deleted file mode 100644 index b57b44e9f..000000000 --- a/app/src/nativeModulesContent.js +++ /dev/null @@ -1,7 +0,0 @@ - -// this file is generated automatically by script fillNativeModules.js, do not edit it manually -const content = {}; - - - -module.exports = content; diff --git a/packages/api/src/nativeModulesContent.js b/packages/api/src/nativeModulesContent.js deleted file mode 100644 index b57b44e9f..000000000 --- a/packages/api/src/nativeModulesContent.js +++ /dev/null @@ -1,7 +0,0 @@ - -// this file is generated automatically by script fillNativeModules.js, do not edit it manually -const content = {}; - - - -module.exports = content; From dd6cdeb946d79d09c71b48f9a0227497ef880768 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 17 Jan 2021 08:16:00 +0100 Subject: [PATCH 08/10] GIT ignore native modules content --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 1bc89aca9..81bf4932c 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ dist npm-debug.log* yarn-debug.log* yarn-error.log* +app/src/nativeModulesContent.js +packages/api/src/nativeModulesContent.js From a9c38d5782209102ad5fb2c78dc8ac383df43533 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 17 Jan 2021 10:18:41 +0100 Subject: [PATCH 09/10] fix --- packages/web/src/impexp/createImpExpScript.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/web/src/impexp/createImpExpScript.js b/packages/web/src/impexp/createImpExpScript.js index 7938ee216..5b29fc17c 100644 --- a/packages/web/src/impexp/createImpExpScript.js +++ b/packages/web/src/impexp/createImpExpScript.js @@ -19,9 +19,9 @@ export function getTargetName(extensions, source, values) { function extractApiParameters(values, direction, format) { const pairs = (format.args || []) - .filter((arg) => arg.apiName) - .map((arg) => [arg.apiName, values[`${direction}_${format.storageType}_${arg.name}`]]) - .filter((x) => x[1] != null); + .filter(arg => arg.apiName) + .map(arg => [arg.apiName, values[`${direction}_${format.storageType}_${arg.name}`]]) + .filter(x => x[1] != null); return _.fromPairs(pairs); } @@ -31,7 +31,7 @@ async function getConnection(extensions, storageType, conid, database) { const driver = findEngineDriver(conn, extensions); return [ { - ..._.pick(conn, ['server', 'engine', 'user', 'password', 'port']), + ..._.pick(conn, ['server', 'engine', 'user', 'password', 'port', 'authType']), database, }, driver, From 8f98b352dad328cb780fa02bb62c2be984ad8cf1 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 17 Jan 2021 19:16:22 +0100 Subject: [PATCH 10/10] auth types in driver --- packages/api/src/controllers/plugins.js | 17 +++++-- packages/types/engines.d.ts | 7 +++ packages/web/src/modals/ConnectionModal.js | 58 +++++++++++++++++----- packages/web/src/themes/ThemeHelmet.js | 6 ++- 4 files changed, 70 insertions(+), 18 deletions(-) diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index efb381f0a..5c026c75f 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -1,6 +1,7 @@ const fs = require('fs-extra'); const axios = require('axios'); const path = require('path'); +const { extractPackageName } = require('dbgate-tools'); const { pluginsdir, datadir } = require('../utility/directories'); const socket = require('../utility/socket'); const requirePlugin = require('../shell/requirePlugin'); @@ -50,7 +51,7 @@ module.exports = { `http://registry.npmjs.com/-/v1/search?text=${encodeURIComponent(filter)}+keywords:dbgateplugin&size=25&from=0` ); const { objects } = resp.data || {}; - return (objects || []).map((x) => x.package); + return (objects || []).map(x => x.package); }, info_meta: 'get', @@ -88,9 +89,7 @@ module.exports = { const files = await fs.readdir(pluginsdir()); const res = []; for (const packageName of files) { - const manifest = await fs - .readFile(path.join(pluginsdir(), packageName, 'package.json')) - .then((x) => JSON.parse(x)); + const manifest = await fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then(x => JSON.parse(x)); const readmeFile = path.join(pluginsdir(), packageName, 'README.md'); if (await fs.exists(readmeFile)) { manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' }); @@ -131,6 +130,14 @@ module.exports = { return content.commands[command](args); }, + authTypes_meta: 'post', + async authTypes({ engine }) { + const packageName = extractPackageName(engine); + const content = requirePlugin(packageName); + if (!content.driver || content.driver.engine != engine) return null; + return content.driver.getAuthTypes() || null; + }, + async _init() { const installed = await this.installed(); try { @@ -142,7 +149,7 @@ module.exports = { } for (const packageName of preinstallPlugins) { if (this.removedPlugins.includes(packageName)) continue; - if (installed.find((x) => x.name == packageName)) continue; + if (installed.find(x => x.name == packageName)) continue; try { console.log('Preinstalling plugin', packageName); await this.install({ packageName }); diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index 59b2328dc..9544c1cd1 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -18,6 +18,12 @@ export interface WriteTableOptions { createIfNotExists?: boolean; } +export interface EngineAuthType { + title: string; + name: string; + disabledFields: string[]; +} + export interface EngineDriver { engine: string; title: string; @@ -44,6 +50,7 @@ export interface EngineDriver { analyseIncremental(pool: any, structure: DatabaseInfo): Promise; dialect: SqlDialect; createDumper(): SqlDumper; + getAuthTypes(): EngineAuthType[]; analyserClass?: any; dumperClass?: any; diff --git a/packages/web/src/modals/ConnectionModal.js b/packages/web/src/modals/ConnectionModal.js index 34ecffc0c..e42881002 100644 --- a/packages/web/src/modals/ConnectionModal.js +++ b/packages/web/src/modals/ConnectionModal.js @@ -8,9 +8,52 @@ import ModalContent from './ModalContent'; import useExtensions from '../utility/useExtensions'; import LoadingInfo from '../widgets/LoadingInfo'; import { FontIcon } from '../icons'; -import { FormProvider } from '../utility/FormProvider'; +import { FormProvider, useForm } from '../utility/FormProvider'; // import FormikForm from '../utility/FormikForm'; +function DriverFields({ extensions }) { + const { values, setFieldValue } = useForm(); + const { authType, engine } = values; + const driver = extensions.drivers.find(x => x.engine == engine); + // const { authTypes } = driver || {}; + const [authTypes, setAuthTypes] = React.useState(null); + const currentAuthType = authTypes && authTypes.find(x => x.name == authType); + + const loadAuthTypes = async () => { + const resp = await axios.post('plugins/auth-types', { engine }); + setAuthTypes(resp.data); + if (resp.data && !currentAuthType) { + setFieldValue('authType', resp.data[0].name); + } + }; + + React.useEffect(() => { + setAuthTypes(null); + loadAuthTypes() + }, [values.engine]); + + if (!driver) return null; + const disabledFields = (currentAuthType ? currentAuthType.disabledFields : null) || []; + + return ( + <> + {!!authTypes && ( + + {authTypes.map(auth => ( + + ))} + + )} + + + + + + ); +} + export default function ConnectionModal({ modalState, connection = undefined }) { const [sqlConnectResult, setSqlConnectResult] = React.useState(null); const extensions = useExtensions(); @@ -40,7 +83,7 @@ export default function ConnectionModal({ modalState, connection = undefined }) return ( {connection ? 'Edit connection' : 'Add connection'} - + @@ -53,16 +96,7 @@ export default function ConnectionModal({ modalState, connection = undefined }) */} - - - - - - - - - - + {!isTesting && sqlConnectResult && sqlConnectResult.msgtype == 'connected' && (
diff --git a/packages/web/src/themes/ThemeHelmet.js b/packages/web/src/themes/ThemeHelmet.js index 970074066..7e4c5d563 100644 --- a/packages/web/src/themes/ThemeHelmet.js +++ b/packages/web/src/themes/ThemeHelmet.js @@ -39,7 +39,11 @@ export default function ThemeHelmet() { color: ${theme.input_font1}; border: 1px solid ${theme.border}; } - + + input[disabled] { + background-color: ${theme.input_background2}; + } + select { background-color: ${theme.input_background}; color: ${theme.input_font1};