diff --git a/lerna.json b/lerna.json index 39e368fc2f..8808d0369a 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "0.1.23", + "version": "0.1.25", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/package.json b/package.json index d99718ca02..dbbe008b42 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "test:e2e:ci": "lerna run cy:ci" }, "dependencies": { - "@fortawesome/fontawesome": "^1.1.8", - "pouchdb-replication-stream": "^1.2.9" + "@fortawesome/fontawesome": "^1.1.8" } -} +} \ No newline at end of file diff --git a/packages/builder/cypress/integration/createAutomation.spec.js b/packages/builder/cypress/integration/createAutomation.spec.js index ca17e3b7f3..26af4fac71 100644 --- a/packages/builder/cypress/integration/createAutomation.spec.js +++ b/packages/builder/cypress/integration/createAutomation.spec.js @@ -50,7 +50,6 @@ context("Create a automation", () => { // Activate Automation cy.get("[data-cy=activate-automation]").click() - cy.contains("Add Record").should("be.visible") cy.get(".stop-button.highlighted").should("be.visible") }) diff --git a/packages/builder/cypress/integration/createTable.spec.js b/packages/builder/cypress/integration/createTable.spec.js index a30ecb5ad8..d7ae805b27 100644 --- a/packages/builder/cypress/integration/createTable.spec.js +++ b/packages/builder/cypress/integration/createTable.spec.js @@ -8,7 +8,7 @@ context("Create a Table", () => { cy.createTable("dog") // Check if Table exists - cy.get(".title").should("have.text", "dog") + cy.get(".title span").should("have.text", "dog") }) it("adds a new column to the table", () => { diff --git a/packages/builder/cypress/integration/createView.spec.js b/packages/builder/cypress/integration/createView.spec.js index 95cabc887f..8f0c9565c8 100644 --- a/packages/builder/cypress/integration/createView.spec.js +++ b/packages/builder/cypress/integration/createView.spec.js @@ -50,13 +50,11 @@ context("Create a View", () => { it("creates a stats calculation view based on age", () => { cy.contains("Calculate").click() + // we may reinstate this - have commented this dropdown for now as there is only one option + //cy.get(".menu-container").find("select").first().select("Statistics") cy.get(".menu-container") .find("select") - .first() - .select("Statistics") - cy.get(".menu-container") - .find("select") - .eq(1) + .eq(0) .select("age") cy.contains("Save").click() cy.get("thead th div").should($headers => { diff --git a/packages/builder/cypress/support/commands.js b/packages/builder/cypress/support/commands.js index 302a39a367..05b30da98f 100644 --- a/packages/builder/cypress/support/commands.js +++ b/packages/builder/cypress/support/commands.js @@ -68,6 +68,7 @@ Cypress.Commands.add("createTable", tableName => { cy.contains("Create New Table").click() cy.get(".menu-container") .get("input") + .first() .type(tableName) cy.contains("Save").click() diff --git a/packages/builder/package.json b/packages/builder/package.json index 0ad83945b1..74bff1b6a8 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "0.1.23", + "version": "0.1.25", "license": "AGPL-3.0", "private": true, "scripts": { @@ -63,8 +63,8 @@ } }, "dependencies": { - "@budibase/bbui": "^1.39.0", - "@budibase/client": "^0.1.23", + "@budibase/bbui": "^1.40.1", + "@budibase/client": "^0.1.25", "@budibase/colorpicker": "^1.0.1", "@fortawesome/fontawesome-free": "^5.14.0", "@sentry/browser": "5.19.1", diff --git a/packages/builder/src/builderStore/fetchBindableProperties.js b/packages/builder/src/builderStore/fetchBindableProperties.js index 65cc861c50..c71c498a32 100644 --- a/packages/builder/src/builderStore/fetchBindableProperties.js +++ b/packages/builder/src/builderStore/fetchBindableProperties.js @@ -37,9 +37,9 @@ export default function({ componentInstanceId, screen, components, models }) { .filter(isInstanceInSharedContext(walkResult)) .map(componentInstanceToBindable(walkResult)), - ...walkResult.target._contexts + ...(walkResult.target?._contexts .map(contextToBindables(models, walkResult)) - .flat(), + .flat() ?? []), ] } @@ -73,6 +73,10 @@ const componentInstanceToBindable = walkResult => i => { const contextToBindables = (models, walkResult) => context => { const contextParentPath = getParentPath(walkResult, context) + const isModel = context.model?.isModel || typeof context.model === "string" + const modelId = + typeof context.model === "string" ? context.model : context.model.modelId + const model = models.find(model => model._id === modelId) const newBindable = key => ({ type: "context", @@ -80,15 +84,12 @@ const contextToBindables = (models, walkResult) => context => { // how the binding expression persists, and is used in the app at runtime runtimeBinding: `${contextParentPath}data.${key}`, // how the binding exressions looks to the user of the builder - readableBinding: `${context.instance._instanceName}.${context.model.label}.${key}`, + readableBinding: `${context.instance._instanceName}.${model.name}.${key}`, }) // see ModelViewSelect.svelte for the format of context.model - // ... this allows us to bind to Model scheams, or View schemas - const model = models.find(m => m._id === context.model.modelId) - const schema = context.model.isModel - ? model.schema - : model.views[context.model.name].schema + // ... this allows us to bind to Model schemas, or View schemas + const schema = isModel ? model.schema : model.views[context.model.name].schema return ( Object.keys(schema) diff --git a/packages/builder/src/components/backend/DataTable/ModelDataTable.svelte b/packages/builder/src/components/backend/DataTable/ModelDataTable.svelte index 49659ff8d0..63d94aeab4 100644 --- a/packages/builder/src/components/backend/DataTable/ModelDataTable.svelte +++ b/packages/builder/src/components/backend/DataTable/ModelDataTable.svelte @@ -8,6 +8,7 @@ import Table from "./Table.svelte" let data = [] + let loading = false $: title = $backendUiStore.selectedModel.name $: schema = $backendUiStore.selectedModel.schema @@ -19,14 +20,16 @@ // Fetch records for specified model $: { if ($backendUiStore.selectedView?.name?.startsWith("all_")) { + loading = true api.fetchDataForView($backendUiStore.selectedView).then(records => { data = records || [] + loading = false }) } } - +
{#if Object.keys(schema).length > 0} diff --git a/packages/builder/src/components/backend/DataTable/RecordFieldControl.svelte b/packages/builder/src/components/backend/DataTable/RecordFieldControl.svelte index 55129b47e3..50d13557fd 100644 --- a/packages/builder/src/components/backend/DataTable/RecordFieldControl.svelte +++ b/packages/builder/src/components/backend/DataTable/RecordFieldControl.svelte @@ -2,39 +2,33 @@ import { Input, Select, Label, DatePicker, Toggle } from "@budibase/bbui" import Dropzone from "components/common/Dropzone.svelte" import { capitalise } from "../../../helpers" + import LinkedRecordSelector from "components/common/LinkedRecordSelector.svelte" export let meta export let value = meta.type === "boolean" ? false : "" - const type = determineInputType(meta) - const label = capitalise(meta.name) - - function determineInputType(meta) { - if (meta.type === "datetime") return "date" - if (meta.type === "number") return "number" - if (meta.type === "boolean") return "checkbox" - if (meta.type === "attachment") return "file" - if (meta.type === "options") return "select" - return "text" - } + $: type = meta.type + $: label = capitalise(meta.name) -{#if type === 'select'} +{#if type === 'options'} -{:else if type === 'date'} +{:else if type === 'datetime'} -{:else if type === 'file'} +{:else if type === 'attachment'}
-{:else if type === 'checkbox'} +{:else if type === 'boolean'} +{:else if type === 'link'} + {:else} {/if} diff --git a/packages/builder/src/components/backend/DataTable/Table.svelte b/packages/builder/src/components/backend/DataTable/Table.svelte index 2e28577c60..c1e34074e6 100644 --- a/packages/builder/src/components/backend/DataTable/Table.svelte +++ b/packages/builder/src/components/backend/DataTable/Table.svelte @@ -1,6 +1,7 @@
@@ -71,8 +78,8 @@ {#if field.type !== 'link'} (field.constraints.presence.allowEmpty = !e.target.checked)} + checked={required} + on:change={onChangeRequired} thin text="Required" /> {/if} diff --git a/packages/builder/src/components/backend/DataTable/popovers/FilterPopover.svelte b/packages/builder/src/components/backend/DataTable/popovers/FilterPopover.svelte index 889fdd0726..3d6241f0ab 100644 --- a/packages/builder/src/components/backend/DataTable/popovers/FilterPopover.svelte +++ b/packages/builder/src/components/backend/DataTable/popovers/FilterPopover.svelte @@ -1,5 +1,5 @@
@@ -93,7 +120,11 @@ {/each} {/if} - {#each fields as field} @@ -108,12 +139,25 @@ {#if filter.key && isMultipleChoice(filter.key)} + {:else if filter.key && isDate(filter.key)} + + {:else if filter.key && isNumber(filter.key)} + {:else} - + {/if} removeFilter(idx)} /> {/each} diff --git a/packages/builder/src/components/backend/ModelNavigator/TableDataImport.svelte b/packages/builder/src/components/backend/ModelNavigator/TableDataImport.svelte new file mode 100644 index 0000000000..388152376f --- /dev/null +++ b/packages/builder/src/components/backend/ModelNavigator/TableDataImport.svelte @@ -0,0 +1,191 @@ + + +
+ + +
+
+ {#if schema} + {#each Object.keys(schema).filter(key => schema[key].type !== 'omit') as columnName} +
+ {columnName} + + + {schema[columnName].success ? 'Success' : 'Failure'} + + omitColumn(columnName)} /> +
+ {/each} + {/if} +
+ + diff --git a/packages/builder/src/components/backend/ModelNavigator/popovers/CreateTablePopover.svelte b/packages/builder/src/components/backend/ModelNavigator/popovers/CreateTablePopover.svelte index eb76abf3df..1468d206eb 100644 --- a/packages/builder/src/components/backend/ModelNavigator/popovers/CreateTablePopover.svelte +++ b/packages/builder/src/components/backend/ModelNavigator/popovers/CreateTablePopover.svelte @@ -2,23 +2,30 @@ import { goto } from "@sveltech/routify" import { backendUiStore } from "builderStore" import { notifier } from "builderStore/store/notifications" - import { Popover, Button, Icon, Input, Select } from "@budibase/bbui" + import { Popover, Button, Icon, Input, Select, Label } from "@budibase/bbui" + import Spinner from "components/common/Spinner.svelte" + import TableDataImport from "../TableDataImport.svelte" import analytics from "analytics" let anchor let dropdown let name + let dataImport + let loading async function saveTable() { + loading = true const model = await backendUiStore.actions.models.save({ name, - schema: {}, + schema: dataImport.schema || {}, + dataImport, }) notifier.success(`Table ${name} created successfully.`) $goto(`./model/${model._id}`) + analytics.captureEvent("Table Created", { name }) name = "" dropdown.hide() - analytics.captureEvent("Table Created", { name }) + loading = false } const onClosed = () => { @@ -38,9 +45,21 @@ thin label="Table Name" bind:value={name} /> +
+ + +
- +
diff --git a/packages/builder/src/components/common/LinkedRecordSelector.svelte b/packages/builder/src/components/common/LinkedRecordSelector.svelte index f4df3a7d1f..8b20a8e3ac 100644 --- a/packages/builder/src/components/common/LinkedRecordSelector.svelte +++ b/packages/builder/src/components/common/LinkedRecordSelector.svelte @@ -2,9 +2,8 @@ import { onMount } from "svelte" import { backendUiStore } from "builderStore" import api from "builderStore/api" - import { Select, Label } from "@budibase/bbui" + import { Select, Label, Multiselect } from "@budibase/bbui" import { capitalise } from "../../helpers" - import MultiSelect from "components/common/MultiSelect.svelte" export let schema export let linkedRecords = [] @@ -19,8 +18,7 @@ async function fetchRecords(linkedModelId) { const FETCH_RECORDS_URL = `/api/${linkedModelId}/records` const response = await api.get(FETCH_RECORDS_URL) - const result = await response.json() - return result + return await response.json() } function getPrettyName(record) { @@ -37,15 +35,14 @@ {:else} {#await promise then records} - + placeholder="Choose some options"> {#each records as record} {/each} - + {/await} {/if} diff --git a/packages/builder/src/components/common/MultiSelect.svelte b/packages/builder/src/components/common/MultiSelect.svelte deleted file mode 100644 index 22cc3f16be..0000000000 --- a/packages/builder/src/components/common/MultiSelect.svelte +++ /dev/null @@ -1,278 +0,0 @@ - - -
- {#if label} - - {/if} -
-
-
- {#each Object.values(selected) as option} -
- {option.name} -
remove(option.value)}> - - - -
-
- {/each} - {#if !value || !value.length} {/if} -
-
- - - - {#if optionsVisible} -
showOptions(false)} /> -
    - {#each options as option} -
  • - {option.name} -
  • - {/each} - {#if !options.length} -
  • No results
  • - {/if} -
- {/if} -
-
- - diff --git a/packages/builder/src/components/common/Notification/NotificationDisplay.svelte b/packages/builder/src/components/common/Notification/NotificationDisplay.svelte index b77d8fd8f2..ad32f228cb 100644 --- a/packages/builder/src/components/common/Notification/NotificationDisplay.svelte +++ b/packages/builder/src/components/common/Notification/NotificationDisplay.svelte @@ -51,6 +51,7 @@ flex-direction: column; justify-content: flex-start; align-items: center; + pointer-events: none; } .toast { diff --git a/packages/builder/src/components/settings/tabs/APIKeys.svelte b/packages/builder/src/components/settings/tabs/APIKeys.svelte index 5b9c4032f6..8a3c9fc710 100644 --- a/packages/builder/src/components/settings/tabs/APIKeys.svelte +++ b/packages/builder/src/components/settings/tabs/APIKeys.svelte @@ -1,11 +1,9 @@ @@ -112,44 +118,52 @@ {#if title}

{title}

{/if} - {#each errorMessages as error} -

{error}

- {/each} -
+ {#each fields as field} -
- - {#if schema[field].type === 'string' && schema[field].constraints.inclusion} - - {:else if schema[field].type === 'datetime'} - - {:else if schema[field].type === 'boolean'} - - {:else if schema[field].type === 'number'} - - {:else if schema[field].type === 'string'} - - {:else if schema[field].type === 'attachment'} + {#if schema[field].type === 'options'} + + {:else if schema[field].type === 'datetime'} + + {:else if schema[field].type === 'boolean'} + + {:else if schema[field].type === 'number'} + + {:else if schema[field].type === 'string'} + + {:else if schema[field].type === 'attachment'} +
+ - {/if} -
-
+
+ {:else if schema[field].type === 'link'} + + {/if} {/each} -
- +
+
@@ -162,104 +176,14 @@ } .form-content { - margin-bottom: 20px; + margin-bottom: var(--spacing-xl); + display: grid; + gap: var(--spacing-xl); width: 100%; } - .input { - border-radius: 5px; - border: 1px solid #e6e6e6; - padding: 1rem; - font-size: 16px; - } - - .form-item { - display: flex; - flex-direction: column; - margin-bottom: 16px; - } - - hr { - border: 1px solid var(--grey-1); - margin: 20px 0px; - } - - hr:nth-last-child(2) { - border: 1px solid #fff; - margin: 20px 0px; - } - - .button-block { + .buttons { display: flex; justify-content: flex-end; } - - button { - font-size: 16px; - padding: 0.4em; - box-sizing: border-box; - border-radius: 4px; - color: white; - background-color: #393c44; - outline: none; - width: 300px; - height: 40px; - cursor: pointer; - transition: all 0.2s ease 0s; - overflow: hidden; - outline: none; - user-select: none; - white-space: nowrap; - text-align: center; - } - - button.saved { - background-color: #84c991; - border: none; - } - - button:hover { - box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), - 0 4px 6px -2px rgba(0, 0, 0, 0.05); - } - - input[type="checkbox"] { - width: 32px; - height: 32px; - padding: 0; - margin: 0; - vertical-align: bottom; - position: relative; - top: -1px; - *overflow: hidden; - } - - select::-ms-expand { - display: none; - } - select { - display: inline-block; - cursor: pointer; - align-items: baseline; - box-sizing: border-box; - padding: 1em 1em; - border: 1px solid #eaeaea; - border-radius: 5px; - font: inherit; - line-height: inherit; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - appearance: none; - background-repeat: no-repeat; - background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), - linear-gradient(135deg, currentColor 50%, transparent 50%); - background-position: right 17px top 1.5em, right 10px top 1.5em; - background-size: 7px 7px, 7px 7px; - } - - .error { - color: red; - font-weight: 500; - } diff --git a/packages/standard-components/src/DataTable.svelte b/packages/standard-components/src/DataTable.svelte index fe967338f5..5b950fec4b 100644 --- a/packages/standard-components/src/DataTable.svelte +++ b/packages/standard-components/src/DataTable.svelte @@ -1,6 +1,6 @@ + +{#if hasErrors} +
+ {#each errors as error} +
{error.dataPath} {error.message}
+ {/each} +
+{/if} + + diff --git a/packages/standard-components/src/LinkedRecordSelector.svelte b/packages/standard-components/src/LinkedRecordSelector.svelte new file mode 100644 index 0000000000..4ea84223f3 --- /dev/null +++ b/packages/standard-components/src/LinkedRecordSelector.svelte @@ -0,0 +1,65 @@ + + +{#if linkedModel != null} + {#if linkedModel.primaryDisplay == null} + {#if showLabel} + + {/if} + + {:else} + {#await recordsPromise then records} + + {#each records as record} + + {/each} + + {/await} + {/if} +{/if} diff --git a/packages/standard-components/src/RecordDetail.svelte b/packages/standard-components/src/RecordDetail.svelte index 95723782bd..aa9d39c0cc 100644 --- a/packages/standard-components/src/RecordDetail.svelte +++ b/packages/standard-components/src/RecordDetail.svelte @@ -8,6 +8,12 @@ let store = _bb.store let target + async function fetchModel(id) { + const FETCH_MODEL_URL = `/api/models/${id}` + const response = await _bb.api.get(FETCH_MODEL_URL) + return await response.json() + } + async function fetchFirstRecord() { const FETCH_RECORDS_URL = `/api/views/all_${model}` const response = await _bb.api.get(FETCH_RECORDS_URL) @@ -34,6 +40,14 @@ } if (record) { + // Fetch model schema so we can check for linked records + const model = await fetchModel(record.modelId) + for (let key of Object.keys(model.schema)) { + if (model.schema[key].type === "link") { + record[key] = Array.isArray(record[key]) ? record[key].length : 0 + } + } + _bb.attachChildren(target, { hydrate: false, context: record, diff --git a/packages/standard-components/src/attachments/AttachmentList.svelte b/packages/standard-components/src/attachments/AttachmentList.svelte index 950c1e43b6..77a7fd8134 100644 --- a/packages/standard-components/src/attachments/AttachmentList.svelte +++ b/packages/standard-components/src/attachments/AttachmentList.svelte @@ -1,7 +1,7 @@ diff --git a/packages/standard-components/src/fetchData.js b/packages/standard-components/src/fetchData.js index 7a1c4b5f7c..a0c50c233a 100644 --- a/packages/standard-components/src/fetchData.js +++ b/packages/standard-components/src/fetchData.js @@ -4,7 +4,28 @@ export default async function fetchData(datasource) { const { isModel, name } = datasource if (name) { - return isModel ? await fetchModelData() : await fetchViewData() + const records = isModel ? await fetchModelData() : await fetchViewData() + + // Fetch model schema so we can check for linked records + if (records && records.length) { + const model = await fetchModel(records[0].modelId) + const keys = Object.keys(model.schema) + records.forEach(record => { + for (let key of keys) { + if (model.schema[key].type === "link") { + record[key] = Array.isArray(record[key]) ? record[key].length : 0 + } + } + }) + } + + return records + } + + async function fetchModel(id) { + const FETCH_MODEL_URL = `/api/models/${id}` + const response = await api.get(FETCH_MODEL_URL) + return await response.json() } async function fetchModelData() { diff --git a/packages/standard-components/src/helpers.js b/packages/standard-components/src/helpers.js new file mode 100644 index 0000000000..2989f4d39c --- /dev/null +++ b/packages/standard-components/src/helpers.js @@ -0,0 +1 @@ +export const capitalise = s => s.substring(0, 1).toUpperCase() + s.substring(1) diff --git a/readme.md b/readme.md index fe2eeeaad4..ec3c39bd59 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,9 @@ +# Budibase is in Beta + +Budibase is currently beta software. Until our official launch, we cannot ensure backwards compatibility for your budibase applications between versions. Issues may arise when trying to edit apps created with old versions of the budibase builder. + +If you are having issues between updates of the builder, please use the guide [here](https://github.com/Budibase/budibase/blob/master/CONTRIBUTING.md#troubleshooting) to clear down your environment. + # What is Budibase? diff --git a/yarn.lock b/yarn.lock index 2022a94d16..8c37dc6f01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -913,11 +913,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -argsarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" - integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs= - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -2336,11 +2331,6 @@ ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -2387,7 +2377,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.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -2638,11 +2628,6 @@ is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2805,13 +2790,6 @@ libnpmpublish@^1.1.1: semver "^5.5.1" ssri "^6.0.1" -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= - dependencies: - immediate "~3.0.5" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2861,11 +2839,6 @@ lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" -lodash.pick@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -3204,16 +3177,6 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -ndjson@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-1.5.0.tgz#ae603b36b134bcec347b452422b0bf98d5832ec8" - integrity sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg= - dependencies: - json-stringify-safe "^5.0.1" - minimist "^1.2.0" - split2 "^2.1.0" - through2 "^2.0.3" - neo-async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -3717,34 +3680,6 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" -pouch-stream@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pouch-stream/-/pouch-stream-0.4.1.tgz#0c6d8475c9307677627991a2f079b301c3b89bdd" - integrity sha1-DG2EdckwdndieZGi8HmzAcO4m90= - dependencies: - inherits "^2.0.1" - readable-stream "^1.0.27-1" - -pouchdb-promise@^6.0.4: - version "6.4.3" - resolved "https://registry.yarnpkg.com/pouchdb-promise/-/pouchdb-promise-6.4.3.tgz#74516f4acf74957b54debd0fb2c0e5b5a68ca7b3" - integrity sha512-ruJaSFXwzsxRHQfwNHjQfsj58LBOY1RzGzde4PM5CWINZwFjCQAhZwfMrch2o/0oZT6d+Xtt0HTWhq35p3b0qw== - dependencies: - lie "3.1.1" - -pouchdb-replication-stream@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/pouchdb-replication-stream/-/pouchdb-replication-stream-1.2.9.tgz#aa4fa5d8f52df4825392f18e07c7e11acffc650a" - integrity sha1-qk+l2PUt9IJTkvGOB8fhGs/8ZQo= - dependencies: - argsarray "0.0.1" - inherits "^2.0.3" - lodash.pick "^4.0.0" - ndjson "^1.4.3" - pouch-stream "^0.4.0" - pouchdb-promise "^6.0.4" - through2 "^2.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" @@ -3927,16 +3862,6 @@ read@1, read@~1.0.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^1.0.27-1: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -4291,7 +4216,7 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^2.0.0, split2@^2.1.0: +split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" dependencies: @@ -4396,11 +4321,6 @@ string_decoder@^1.1.1: 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" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4521,7 +4441,7 @@ text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: +through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" dependencies: