diff --git a/lerna.json b/lerna.json
index aaafa6837a..39e368fc2f 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "0.1.22",
+ "version": "0.1.23",
"npmClient": "yarn",
"packages": [
"packages/*"
diff --git a/package.json b/package.json
index 10cebbd720..d99718ca02 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,7 @@
"test:e2e:ci": "lerna run cy:ci"
},
"dependencies": {
- "@fortawesome/fontawesome": "^1.1.8"
+ "@fortawesome/fontawesome": "^1.1.8",
+ "pouchdb-replication-stream": "^1.2.9"
}
}
diff --git a/packages/builder/package.json b/packages/builder/package.json
index a983119423..19f8a5a9cf 100644
--- a/packages/builder/package.json
+++ b/packages/builder/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/builder",
- "version": "0.1.22",
+ "version": "0.1.23",
"license": "AGPL-3.0",
"private": true,
"scripts": {
@@ -64,7 +64,7 @@
},
"dependencies": {
"@budibase/bbui": "^1.34.6",
- "@budibase/client": "^0.1.22",
+ "@budibase/client": "^0.1.23",
"@budibase/colorpicker": "^1.0.1",
"@fortawesome/fontawesome-free": "^5.14.0",
"@sentry/browser": "5.19.1",
diff --git a/packages/builder/src/components/start/AppList.svelte b/packages/builder/src/components/start/AppList.svelte
index efd448b94a..0a87e63cbb 100644
--- a/packages/builder/src/components/start/AppList.svelte
+++ b/packages/builder/src/components/start/AppList.svelte
@@ -1,20 +1,44 @@
-
-
+
Your Apps
+ {#await promise}
+
+
+
+ {:then apps}
+
-
- {#each apps as app}
-
- {/each}
+
+
+ {#each apps as app}
+
+ {/each}
+
-
+ {:catch err}
+
{err}
+ {/await}
diff --git a/packages/builder/src/pages/index.svelte b/packages/builder/src/pages/index.svelte
index 58beb4bbec..8bec57be69 100644
--- a/packages/builder/src/pages/index.svelte
+++ b/packages/builder/src/pages/index.svelte
@@ -5,25 +5,12 @@
import AppList from "components/start/AppList.svelte"
import { onMount } from "svelte"
import ActionButton from "components/common/ActionButton.svelte"
- import { get } from "builderStore/api"
import Spinner from "components/common/Spinner.svelte"
import CreateAppModal from "components/start/CreateAppModal.svelte"
+ import TemplateList from "components/start/TemplateList.svelte"
import { Button } from "@budibase/bbui"
import analytics from "analytics"
- let promise = getApps()
-
- async function getApps() {
- const res = await get("/api/applications")
- const json = await res.json()
-
- if (res.ok) {
- return json
- } else {
- throw new Error(json)
- }
- }
-
let hasKey
async function fetchKeys() {
@@ -47,11 +34,12 @@
// Handle create app modal
const { open } = getContext("simple-modal")
- const showCreateAppModal = () => {
+ const showCreateAppModal = template => {
open(
CreateAppModal,
{
hasKey,
+ template,
},
{
closeButton: false,
@@ -68,7 +56,7 @@
@@ -80,15 +68,8 @@
-{#await promise}
-
-
-
-{:then result}
-
-{:catch err}
- {err}
-{/await}
+
+
diff --git a/packages/cli/package.json b/packages/cli/package.json
index ad5614005e..d035553f10 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "budibase",
- "version": "0.1.22",
+ "version": "0.1.23",
"description": "Budibase CLI",
"repository": "https://github.com/Budibase/Budibase",
"homepage": "https://www.budibase.com",
@@ -17,7 +17,7 @@
"author": "Budibase",
"license": "AGPL-3.0-or-later",
"dependencies": {
- "@budibase/server": "^0.1.22",
+ "@budibase/server": "^0.1.23",
"@inquirer/password": "^0.0.6-alpha.0",
"chalk": "^2.4.2",
"dotenv": "^8.2.0",
diff --git a/packages/client/package.json b/packages/client/package.json
index 0cfdf53f4d..7b6ea75def 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/client",
- "version": "0.1.22",
+ "version": "0.1.23",
"license": "MPL-2.0",
"main": "dist/budibase-client.js",
"module": "dist/budibase-client.esm.mjs",
diff --git a/packages/client/src/state/eventHandlers.js b/packages/client/src/state/eventHandlers.js
index 788ebf857f..05d8ef2fa3 100644
--- a/packages/client/src/state/eventHandlers.js
+++ b/packages/client/src/state/eventHandlers.js
@@ -1,3 +1,4 @@
+import api from "../api"
import renderTemplateString from "./renderTemplateString"
export const EVENT_TYPE_MEMBER_NAME = "##eventHandlerType"
@@ -5,6 +6,9 @@ export const EVENT_TYPE_MEMBER_NAME = "##eventHandlerType"
export const eventHandlers = routeTo => {
const handlers = {
"Navigate To": param => routeTo(param && param.url),
+ "Create Record": api.createRecord,
+ "Update Record": api.updateRecord,
+ "Trigger Workflow": api.triggerWorkflow,
}
// when an event is called, this is what gets run
diff --git a/packages/server/build/icon.icns b/packages/server/build/icon.icns
index 82da3dde6e..0b609a3bb4 100644
Binary files a/packages/server/build/icon.icns and b/packages/server/build/icon.icns differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-300.woff b/packages/server/builder/assets/roboto-v20-latin-ext_latin-300.woff
deleted file mode 100644
index 72f1207930..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-300.woff and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-300.woff2 b/packages/server/builder/assets/roboto-v20-latin-ext_latin-300.woff2
deleted file mode 100644
index 05fda6ab5c..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-300.woff2 and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-500.woff b/packages/server/builder/assets/roboto-v20-latin-ext_latin-500.woff
deleted file mode 100644
index fb70b7e915..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-500.woff and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-500.woff2 b/packages/server/builder/assets/roboto-v20-latin-ext_latin-500.woff2
deleted file mode 100644
index 96981bc870..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-500.woff2 and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-700.woff b/packages/server/builder/assets/roboto-v20-latin-ext_latin-700.woff
deleted file mode 100644
index d023f3de32..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-700.woff and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-700.woff2 b/packages/server/builder/assets/roboto-v20-latin-ext_latin-700.woff2
deleted file mode 100644
index fd49210352..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-700.woff2 and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-900.woff b/packages/server/builder/assets/roboto-v20-latin-ext_latin-900.woff
deleted file mode 100644
index 397450501b..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-900.woff and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-900.woff2 b/packages/server/builder/assets/roboto-v20-latin-ext_latin-900.woff2
deleted file mode 100644
index 5cd76971f1..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-900.woff2 and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-regular.woff b/packages/server/builder/assets/roboto-v20-latin-ext_latin-regular.woff
deleted file mode 100644
index f9849dfbee..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-regular.woff and /dev/null differ
diff --git a/packages/server/builder/assets/roboto-v20-latin-ext_latin-regular.woff2 b/packages/server/builder/assets/roboto-v20-latin-ext_latin-regular.woff2
deleted file mode 100644
index 1f7dd5b890..0000000000
Binary files a/packages/server/builder/assets/roboto-v20-latin-ext_latin-regular.woff2 and /dev/null differ
diff --git a/packages/server/builder/assets/rocket.jpg b/packages/server/builder/assets/rocket.jpg
deleted file mode 100644
index cc2edf02a4..0000000000
Binary files a/packages/server/builder/assets/rocket.jpg and /dev/null differ
diff --git a/packages/server/builder/assets/spacex.jpg b/packages/server/builder/assets/spacex.jpg
deleted file mode 100644
index 30004eadd9..0000000000
Binary files a/packages/server/builder/assets/spacex.jpg and /dev/null differ
diff --git a/packages/server/package.json b/packages/server/package.json
index ae90b7b8b5..1875e44285 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/server",
- "version": "0.1.22",
+ "version": "0.1.23",
"description": "Budibase Web Server",
"main": "src/electron.js",
"repository": {
@@ -42,7 +42,7 @@
"author": "Michael Shanks",
"license": "AGPL-3.0-or-later",
"dependencies": {
- "@budibase/client": "^0.1.22",
+ "@budibase/client": "^0.1.23",
"@koa/router": "^8.0.0",
"@sendgrid/mail": "^7.1.1",
"@sentry/node": "^5.19.2",
diff --git a/packages/server/scripts/exportAppTemplate.js b/packages/server/scripts/exportAppTemplate.js
new file mode 100755
index 0000000000..95ab8c718c
--- /dev/null
+++ b/packages/server/scripts/exportAppTemplate.js
@@ -0,0 +1,40 @@
+#!/usr/bin/env node
+const { exportTemplateFromApp } = require("../src/utilities/templates")
+const yargs = require("yargs")
+
+// Script to export a chosen budibase app into a package
+// Usage: ./scripts/exportAppTemplate.js export --name=Funky --instanceId=someInstanceId --appId=appId
+
+yargs
+ .command(
+ "export",
+ "Export an existing budibase application to the .budibase/templates directory",
+ {
+ name: {
+ description: "The name of the newly exported template",
+ alias: "n",
+ type: "string",
+ },
+ instanceId: {
+ description: "The instanceId to dump the database for",
+ alias: "inst",
+ type: "string",
+ },
+ appId: {
+ description: "The appId of the application you want to export",
+ alias: "app",
+ type: "string",
+ },
+ },
+ async args => {
+ console.log("Exporting app..")
+ const exportPath = await exportTemplateFromApp({
+ templateName: args.name,
+ instanceId: args.instanceId,
+ appId: args.appId,
+ })
+ console.log(`Template ${args.name} exported to ${exportPath}`)
+ }
+ )
+ .help()
+ .alias("help", "h").argv
diff --git a/packages/server/src/api/controllers/application.js b/packages/server/src/api/controllers/application.js
index ea8e348fa5..75d6f9544f 100644
--- a/packages/server/src/api/controllers/application.js
+++ b/packages/server/src/api/controllers/application.js
@@ -66,6 +66,7 @@ exports.create = async function(ctx) {
userInstanceMap: {},
componentLibraries: ["@budibase/standard-components"],
name: ctx.request.body.name,
+ template: ctx.request.body.template,
}
const { rev } = await db.put(newApplication)
@@ -75,9 +76,13 @@ exports.create = async function(ctx) {
appId: newApplication._id,
},
request: {
- body: { name: `dev-${clientId}` },
+ body: {
+ name: `dev-${clientId}`,
+ template: ctx.request.body.template,
+ },
},
}
+
await instanceController.create(createInstCtx)
newApplication.instances.push(createInstCtx.body)
@@ -154,6 +159,19 @@ const createEmptyAppPackage = async (ctx, app) => {
name: npmFriendlyAppName(app.name),
})
+ // if this app is being created from a template,
+ // copy the frontend page definition files from
+ // the template directory.
+ if (app.template) {
+ const templatePageDefinitions = join(
+ appsFolder,
+ "templates",
+ app.template.key,
+ "pages"
+ )
+ await copy(templatePageDefinitions, join(appsFolder, app._id, "pages"))
+ }
+
const mainJson = await updateJsonFile(
join(appsFolder, app._id, "pages", "main", "page.json"),
app
diff --git a/packages/server/src/api/controllers/instance.js b/packages/server/src/api/controllers/instance.js
index 02697bb9a0..c0997596e2 100644
--- a/packages/server/src/api/controllers/instance.js
+++ b/packages/server/src/api/controllers/instance.js
@@ -1,9 +1,12 @@
+const fs = require("fs")
const CouchDB = require("../../db")
const client = require("../../db/clientDb")
const newid = require("../../db/newid")
+const { downloadTemplate } = require("../../utilities/templates")
exports.create = async function(ctx) {
const instanceName = ctx.request.body.name
+ const template = ctx.request.body.template
const { appId } = ctx.user
const appShortId = appId.substring(0, 7)
const instanceId = `inst_${appShortId}_${newid()}`
@@ -28,6 +31,16 @@ exports.create = async function(ctx) {
budibaseApp.instances.push(instance)
await clientDb.put(budibaseApp)
+ // replicate the template data to the instance DB
+ if (template) {
+ const templatePath = await downloadTemplate(...template.key.split("/"))
+ const dbDumpReadStream = fs.createReadStream(`${templatePath}/db/dump.txt`)
+ const { ok } = await db.load(dbDumpReadStream)
+ if (!ok) {
+ ctx.throw(500, "Error loading database dump from template.")
+ }
+ }
+
ctx.status = 200
ctx.message = `Instance Database ${instanceName} successfully provisioned.`
ctx.body = instance
diff --git a/packages/server/src/api/controllers/static.js b/packages/server/src/api/controllers/static.js
index 663c4c7257..f0388fdb86 100644
--- a/packages/server/src/api/controllers/static.js
+++ b/packages/server/src/api/controllers/static.js
@@ -2,7 +2,7 @@ const send = require("koa-send")
const { resolve, join } = require("path")
const jwt = require("jsonwebtoken")
const fetch = require("node-fetch")
-const fs = require("fs")
+const fs = require("fs-extra")
const uuid = require("uuid")
const AWS = require("aws-sdk")
const { prepareUploadForS3 } = require("./deploy/aws")
diff --git a/packages/server/src/api/controllers/templates.js b/packages/server/src/api/controllers/templates.js
new file mode 100644
index 0000000000..c7be43b4e3
--- /dev/null
+++ b/packages/server/src/api/controllers/templates.js
@@ -0,0 +1,44 @@
+const fetch = require("node-fetch")
+const {
+ downloadTemplate,
+ exportTemplateFromApp,
+} = require("../../utilities/templates")
+
+const DEFAULT_TEMPLATES_BUCKET =
+ "prod-budi-templates.s3-eu-west-1.amazonaws.com"
+
+exports.fetch = async function(ctx) {
+ const { type = "app" } = ctx.query
+
+ const response = await fetch(
+ `https://${DEFAULT_TEMPLATES_BUCKET}/manifest.json`
+ )
+ const json = await response.json()
+ ctx.body = Object.values(json.templates[type])
+}
+
+exports.downloadTemplate = async function(ctx) {
+ const { type, name } = ctx.params
+
+ await downloadTemplate(type, name)
+
+ ctx.body = {
+ message: `template ${type}:${name} downloaded successfully.`,
+ }
+}
+
+exports.exportTemplateFromApp = async function(ctx) {
+ const { appId, instanceId } = ctx.user
+ const { templateName } = ctx.request.body
+
+ await exportTemplateFromApp({
+ appId,
+ instanceId,
+ templateName,
+ })
+
+ ctx.status = 200
+ ctx.body = {
+ message: `Created template: ${templateName}`,
+ }
+}
diff --git a/packages/server/src/api/index.js b/packages/server/src/api/index.js
index 0ab10e3e4d..2688baf832 100644
--- a/packages/server/src/api/index.js
+++ b/packages/server/src/api/index.js
@@ -19,6 +19,7 @@ const {
automationRoutes,
accesslevelRoutes,
apiKeysRoutes,
+ templatesRoutes,
analyticsRoutes,
} = require("./routes")
@@ -90,6 +91,9 @@ router.use(automationRoutes.allowedMethods())
router.use(deployRoutes.routes())
router.use(deployRoutes.allowedMethods())
+
+router.use(templatesRoutes.routes())
+router.use(templatesRoutes.allowedMethods())
// end auth routes
router.use(pageRoutes.routes())
diff --git a/packages/server/src/api/routes/index.js b/packages/server/src/api/routes/index.js
index 0a5b0b1934..d24ef50935 100644
--- a/packages/server/src/api/routes/index.js
+++ b/packages/server/src/api/routes/index.js
@@ -13,6 +13,7 @@ const automationRoutes = require("./automation")
const accesslevelRoutes = require("./accesslevel")
const deployRoutes = require("./deploy")
const apiKeysRoutes = require("./apikeys")
+const templatesRoutes = require("./templates")
const analyticsRoutes = require("./analytics")
module.exports = {
@@ -31,5 +32,6 @@ module.exports = {
automationRoutes,
accesslevelRoutes,
apiKeysRoutes,
+ templatesRoutes,
analyticsRoutes,
}
diff --git a/packages/server/src/api/routes/templates.js b/packages/server/src/api/routes/templates.js
new file mode 100644
index 0000000000..3e481610ce
--- /dev/null
+++ b/packages/server/src/api/routes/templates.js
@@ -0,0 +1,17 @@
+const Router = require("@koa/router")
+const controller = require("../controllers/templates")
+const authorized = require("../../middleware/authorized")
+const { BUILDER } = require("../../utilities/accessLevels")
+
+const router = Router()
+
+router
+ .get("/api/templates", authorized(BUILDER), controller.fetch)
+ .get(
+ "/api/templates/:type/:name",
+ authorized(BUILDER),
+ controller.downloadTemplate
+ )
+ .post("/api/templates", authorized(BUILDER), controller.exportTemplateFromApp)
+
+module.exports = router
diff --git a/packages/server/src/db/client.js b/packages/server/src/db/client.js
index 182cd8e032..a3051eea7f 100644
--- a/packages/server/src/db/client.js
+++ b/packages/server/src/db/client.js
@@ -1,4 +1,5 @@
const PouchDB = require("pouchdb")
+const replicationStream = require("pouchdb-replication-stream")
const allDbs = require("pouchdb-all-dbs")
const { budibaseAppsDir } = require("../utilities/budibaseDir")
const env = require("../environment")
@@ -6,6 +7,9 @@ const env = require("../environment")
const COUCH_DB_URL = env.COUCH_DB_URL || `leveldb://${budibaseAppsDir()}/.data/`
const isInMemory = env.NODE_ENV === "jest"
+PouchDB.plugin(replicationStream.plugin)
+PouchDB.adapter("writableStream", replicationStream.adapters.writableStream)
+
let POUCH_DB_DEFAULTS = {
prefix: COUCH_DB_URL,
}
diff --git a/packages/server/src/utilities/templates.js b/packages/server/src/utilities/templates.js
new file mode 100644
index 0000000000..4aef7f7db3
--- /dev/null
+++ b/packages/server/src/utilities/templates.js
@@ -0,0 +1,57 @@
+const path = require("path")
+const fs = require("fs-extra")
+const os = require("os")
+const fetch = require("node-fetch")
+const stream = require("stream")
+const tar = require("tar-fs")
+const zlib = require("zlib")
+const { promisify } = require("util")
+const streamPipeline = promisify(stream.pipeline)
+const { budibaseAppsDir } = require("./budibaseDir")
+const CouchDB = require("../db")
+
+const DEFAULT_TEMPLATES_BUCKET =
+ "prod-budi-templates.s3-eu-west-1.amazonaws.com"
+
+exports.downloadTemplate = async function(type, name) {
+ const templateUrl = `https://${DEFAULT_TEMPLATES_BUCKET}/templates/${type}/${name}.tar.gz`
+ const response = await fetch(templateUrl)
+
+ if (!response.ok) {
+ throw new Error(
+ `Error downloading template ${type}:${name}: ${response.statusText}`
+ )
+ }
+
+ // stream the response, unzip and extract
+ await streamPipeline(
+ response.body,
+ zlib.Unzip(),
+ tar.extract(path.join(budibaseAppsDir(), "templates", type))
+ )
+
+ return path.join(budibaseAppsDir(), "templates", type, name)
+}
+
+exports.exportTemplateFromApp = async function({
+ appId,
+ templateName,
+ instanceId,
+}) {
+ // Copy frontend files
+ const appToExport = path.join(os.homedir(), ".budibase", appId, "pages")
+ const templatesDir = path.join(os.homedir(), ".budibase", "templates")
+ fs.ensureDirSync(templatesDir)
+
+ const templateOutputPath = path.join(templatesDir, templateName)
+ fs.copySync(appToExport, `${templateOutputPath}/pages`)
+
+ fs.ensureDirSync(path.join(templateOutputPath, "db"))
+ const writeStream = fs.createWriteStream(`${templateOutputPath}/db/dump.txt`)
+
+ // perform couch dump
+ const instanceDb = new CouchDB(instanceId)
+
+ await instanceDb.dump(writeStream)
+ return templateOutputPath
+}
diff --git a/packages/standard-components/package.json b/packages/standard-components/package.json
index e3fac8c3d6..53ea1883da 100644
--- a/packages/standard-components/package.json
+++ b/packages/standard-components/package.json
@@ -13,7 +13,7 @@
"dev:builder": "rollup -cw"
},
"devDependencies": {
- "@budibase/client": "^0.1.22",
+ "@budibase/client": "^0.1.23",
"@rollup/plugin-commonjs": "^11.1.0",
"lodash": "^4.17.15",
"rollup": "^1.11.0",
@@ -31,7 +31,7 @@
"keywords": [
"svelte"
],
- "version": "0.1.22",
+ "version": "0.1.23",
"license": "MIT",
"gitHead": "284cceb9b703c38566c6e6363c022f79a08d5691",
"dependencies": {
diff --git a/yarn.lock b/yarn.lock
index 8c37dc6f01..2022a94d16 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -913,6 +913,11 @@ 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"
@@ -2331,6 +2336,11 @@ 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"
@@ -2377,7 +2387,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
@@ -2628,6 +2638,11 @@ 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"
@@ -2790,6 +2805,13 @@ 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"
@@ -2839,6 +2861,11 @@ 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"
@@ -3177,6 +3204,16 @@ 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"
@@ -3680,6 +3717,34 @@ 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"
@@ -3862,6 +3927,16 @@ 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"
@@ -4216,7 +4291,7 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
-split2@^2.0.0:
+split2@^2.0.0, split2@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
dependencies:
@@ -4321,6 +4396,11 @@ 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"
@@ -4441,7 +4521,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.0, through2@^2.0.2, through2@^2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
dependencies: