mirror of https://github.com/Budibase/budibase.git
52 changed files with 1359 additions and 1030 deletions
@ -1,13 +0,0 @@ |
|||
module.exports = { |
|||
presets: ["@babel/preset-env"], |
|||
sourceMaps: "inline", |
|||
retainLines: true, |
|||
plugins: [ |
|||
[ |
|||
"@babel/plugin-transform-runtime", |
|||
{ |
|||
regenerator: true, |
|||
}, |
|||
], |
|||
], |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
<script> |
|||
import { onMount } from "svelte" |
|||
import { componentStore } from "../store" |
|||
import Component from "./Component.svelte" |
|||
import { getValidProps } from "../utils" |
|||
|
|||
let frontendDefinition |
|||
let loaded = false |
|||
$: pageProps = frontendDefinition?.page?.props |
|||
|
|||
onMount(async () => { |
|||
frontendDefinition = window["##BUDIBASE_FRONTEND_DEFINITION##"] |
|||
await componentStore.actions.loadComponentLibrary() |
|||
loaded = true |
|||
console.log(frontendDefinition) |
|||
}) |
|||
</script> |
|||
|
|||
{#if loaded} |
|||
<Component |
|||
component={pageProps._component} |
|||
props={getValidProps(pageProps)} |
|||
children={pageProps._children} |
|||
styles={pageProps._styles.normal} /> |
|||
{/if} |
|||
@ -0,0 +1,31 @@ |
|||
<script> |
|||
import { componentStore } from "../store" |
|||
import { buildStyle, getValidProps } from "../utils" |
|||
|
|||
export let props |
|||
export let children |
|||
export let component |
|||
export let styles |
|||
|
|||
$: componentConstructor = componentStore.actions.getComponent(component) |
|||
$: console.log("Rendering: " + component) |
|||
</script> |
|||
|
|||
{#if componentConstructor} |
|||
<div |
|||
style={buildStyle(styles)} |
|||
data-bb-component={component} |
|||
data-bb-name={component._instanceName}> |
|||
<svelte:component this={componentConstructor} {...props}> |
|||
{#if children && children.length} |
|||
{#each children as child} |
|||
<svelte:self |
|||
props={getValidProps(child)} |
|||
component={child._component} |
|||
children={child._children} |
|||
styles={child._styles.normal} /> |
|||
{/each} |
|||
{/if} |
|||
</svelte:component> |
|||
</div> |
|||
{/if} |
|||
@ -0,0 +1,30 @@ |
|||
<script> |
|||
import { onMount } from "svelte" |
|||
import Router from "svelte-spa-router" |
|||
import { routeStore, screenStore } from "@budibase/component-sdk" |
|||
import Screen from "./Screen.svelte" |
|||
|
|||
let routes |
|||
|
|||
onMount(() => { |
|||
initialiseRouter() |
|||
}) |
|||
|
|||
const initialiseRouter = async () => { |
|||
await routeStore.actions.fetchRoutes() |
|||
await screenStore.actions.fetchScreens() |
|||
routes = {} |
|||
$routeStore.forEach(route => { |
|||
routes[route.path] = Screen |
|||
}) |
|||
} |
|||
|
|||
function test(a, b) { |
|||
console.log(a) |
|||
console.log(b) |
|||
} |
|||
</script> |
|||
|
|||
{#if routes} |
|||
<Router {routes} on:routeEvent={test} /> |
|||
{/if} |
|||
@ -0,0 +1,20 @@ |
|||
<script> |
|||
import { screenStore } from "@budibase/component-sdk" |
|||
import { location } from "svelte-spa-router" |
|||
import Component from "./Component.svelte" |
|||
import { getValidProps } from "../utils" |
|||
|
|||
export let params |
|||
|
|||
// Get the screen definition for the current route |
|||
$: screenDefinition = screenStore.actions.getScreenByRoute($location) |
|||
$: screenStore.actions |
|||
</script> |
|||
|
|||
{#if screenDefinition} |
|||
<Component |
|||
component={screenDefinition.props._component} |
|||
props={getValidProps(screenDefinition.props)} |
|||
children={screenDefinition.props._children} |
|||
styles={screenDefinition.props._styles.normal} /> |
|||
{/if} |
|||
@ -1,59 +1,11 @@ |
|||
import { createApp } from "./createApp" |
|||
import { builtins, builtinLibName } from "./render/builtinComponents" |
|||
import { getAppId } from "../../component-sdk/src/utils" |
|||
import ClientApp from "./components/ClientApp.svelte" |
|||
|
|||
/** |
|||
* create a web application from static budibase definition files. |
|||
* @param {object} opts - configuration options for budibase client libary |
|||
*/ |
|||
export const loadBudibase = async opts => { |
|||
const _window = (opts && opts.window) || window |
|||
// const _localStorage = (opts && opts.localStorage) || localStorage
|
|||
const appId = getAppId(window.document.cookie) |
|||
const frontendDefinition = _window["##BUDIBASE_FRONTEND_DEFINITION##"] |
|||
|
|||
const user = {} |
|||
|
|||
const componentLibraryModules = (opts && opts.componentLibraries) || {} |
|||
|
|||
const libraries = frontendDefinition.libraries || [] |
|||
|
|||
for (let library of libraries) { |
|||
// fetch the JavaScript for the component libraries from the server
|
|||
componentLibraryModules[library] = await import( |
|||
`/componentlibrary?library=${encodeURI(library)}&appId=${appId}` |
|||
) |
|||
} |
|||
|
|||
componentLibraryModules[builtinLibName] = builtins(_window) |
|||
|
|||
const { |
|||
initialisePage, |
|||
screenStore, |
|||
pageStore, |
|||
routeTo, |
|||
rootNode, |
|||
} = createApp({ |
|||
componentLibraries: componentLibraryModules, |
|||
frontendDefinition, |
|||
user, |
|||
window: _window, |
|||
// Initialise client app
|
|||
const loadBudibase = () => { |
|||
new ClientApp({ |
|||
target: window.document.body, |
|||
}) |
|||
|
|||
const route = _window.location |
|||
? _window.location.pathname.replace(`${appId}/`, "").replace(appId, "") |
|||
: "" |
|||
|
|||
initialisePage(frontendDefinition.page, _window.document.body, route) |
|||
|
|||
return { |
|||
screenStore, |
|||
pageStore, |
|||
routeTo, |
|||
rootNode, |
|||
} |
|||
} |
|||
|
|||
if (window) { |
|||
window.loadBudibase = loadBudibase |
|||
} |
|||
// Attach to window so the HTML template can call this when it loads
|
|||
window.loadBudibase = loadBudibase |
|||
|
|||
@ -0,0 +1,59 @@ |
|||
import { createApp } from "./createApp" |
|||
import { builtins, builtinLibName } from "./render/builtinComponents" |
|||
import { getAppId } from "@budibase/component-sdk" |
|||
|
|||
/** |
|||
* create a web application from static budibase definition files. |
|||
* @param {object} opts - configuration options for budibase client libary |
|||
*/ |
|||
export const loadBudibase = async opts => { |
|||
const _window = (opts && opts.window) || window |
|||
// const _localStorage = (opts && opts.localStorage) || localStorage
|
|||
const appId = getAppId(window.document.cookie) |
|||
const frontendDefinition = _window["##BUDIBASE_FRONTEND_DEFINITION##"] |
|||
|
|||
const user = {} |
|||
|
|||
const componentLibraryModules = (opts && opts.componentLibraries) || {} |
|||
|
|||
const libraries = frontendDefinition.libraries || [] |
|||
|
|||
for (let library of libraries) { |
|||
// fetch the JavaScript for the component libraries from the server
|
|||
componentLibraryModules[library] = await import( |
|||
`/componentlibrary?library=${encodeURI(library)}&appId=${appId}` |
|||
) |
|||
} |
|||
|
|||
componentLibraryModules[builtinLibName] = builtins(_window) |
|||
|
|||
const { |
|||
initialisePage, |
|||
screenStore, |
|||
pageStore, |
|||
routeTo, |
|||
rootNode, |
|||
} = createApp({ |
|||
componentLibraries: componentLibraryModules, |
|||
frontendDefinition, |
|||
user, |
|||
window: _window, |
|||
}) |
|||
|
|||
const route = _window.location |
|||
? _window.location.pathname.replace(`${appId}/`, "").replace(appId, "") |
|||
: "" |
|||
|
|||
initialisePage(frontendDefinition.page, _window.document.body, route) |
|||
|
|||
return { |
|||
screenStore, |
|||
pageStore, |
|||
routeTo, |
|||
rootNode, |
|||
} |
|||
} |
|||
|
|||
if (window) { |
|||
window.loadBudibase = loadBudibase |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
import { writable, get } from "svelte/store" |
|||
import { getAppId } from "@budibase/component-sdk" |
|||
import Router from "../components/Router.svelte" |
|||
|
|||
const initialState = {} |
|||
|
|||
export const createComponentStore = () => { |
|||
const store = writable(initialState) |
|||
|
|||
/** |
|||
* Loads the component library from the server |
|||
*/ |
|||
const loadComponentLibrary = async () => { |
|||
const appId = getAppId() |
|||
const library = await import( |
|||
`/componentlibrary?library=@budibase/standard-components&appId=${appId}` |
|||
) |
|||
store.set(library) |
|||
} |
|||
|
|||
/** |
|||
* Fetches a Svelte component from the standard-components library. |
|||
*/ |
|||
const getComponent = componentName => { |
|||
if (!componentName) { |
|||
return null |
|||
} |
|||
const split = componentName.split("/") |
|||
const strippedName = split[split.length - 1] |
|||
|
|||
// Edge case for screen slot
|
|||
if (strippedName === "screenslot") { |
|||
return Router |
|||
} |
|||
return get(store)[strippedName] |
|||
} |
|||
|
|||
// Attach actions to the store
|
|||
store.actions = { getComponent, loadComponentLibrary } |
|||
|
|||
return store |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
import { createComponentStore } from "./components" |
|||
|
|||
export const componentStore = createComponentStore() |
|||
@ -0,0 +1,27 @@ |
|||
/** |
|||
* Builds a style string from a style object. |
|||
*/ |
|||
export const buildStyle = styles => { |
|||
let str = "" |
|||
Object.entries(styles).forEach(([style, value]) => { |
|||
if (style && value) { |
|||
str += `${style}: ${value}; ` |
|||
} |
|||
}) |
|||
return str |
|||
} |
|||
|
|||
/** |
|||
* Extracts all valid props from a component definition that should be passed to |
|||
* its actual component instance. |
|||
* Valid props do not begin with an underscore. |
|||
*/ |
|||
export const getValidProps = component => { |
|||
let props = {} |
|||
Object.entries(component) |
|||
.filter(([name]) => !name.startsWith("_")) |
|||
.forEach(([key, value]) => { |
|||
props[key] = value |
|||
}) |
|||
return props |
|||
} |
|||
@ -1,209 +0,0 @@ |
|||
import { load, makePage, makeScreen } from "./testAppDef" |
|||
|
|||
describe("binding", () => { |
|||
|
|||
|
|||
it("should bind to data in context", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/list", |
|||
data: dataArray, |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "{{data.name}}", |
|||
} |
|||
], |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children[0].children.length).toBe(2) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe(dataArray[0].name) |
|||
expect(screenRoot.children[0].children[1].innerText).toBe(dataArray[1].name) |
|||
}) |
|||
|
|||
it("should bind to input in root", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "{{inputid.value}}", |
|||
}, |
|||
{ |
|||
_id: "inputid", |
|||
_component: "testlib/input", |
|||
value: "hello" |
|||
} |
|||
], |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children[0].children.length).toBe(2) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("hello") |
|||
|
|||
// change value of input
|
|||
const input = dom.window.document.getElementsByClassName("input-inputid")[0] |
|||
|
|||
changeInputValue(dom, input, "new value") |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("new value") |
|||
|
|||
}) |
|||
|
|||
it("should bind to input in context", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/list", |
|||
data: dataArray, |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "{{inputid.value}}", |
|||
}, |
|||
{ |
|||
_id: "inputid", |
|||
_component: "testlib/input", |
|||
value: "hello" |
|||
} |
|||
], |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
expect(screenRoot.children[0].children.length).toBe(4) |
|||
|
|||
const firstHeader = screenRoot.children[0].children[0] |
|||
const firstInput = screenRoot.children[0].children[1] |
|||
const secondHeader = screenRoot.children[0].children[2] |
|||
const secondInput = screenRoot.children[0].children[3] |
|||
|
|||
expect(firstHeader.innerText).toBe("hello") |
|||
expect(secondHeader.innerText).toBe("hello") |
|||
|
|||
changeInputValue(dom, firstInput, "first input value") |
|||
expect(firstHeader.innerText).toBe("first input value") |
|||
|
|||
changeInputValue(dom, secondInput, "second input value") |
|||
expect(secondHeader.innerText).toBe("second input value") |
|||
|
|||
}) |
|||
|
|||
it("should bind contextual component, to input in root context", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_id: "inputid", |
|||
_component: "testlib/input", |
|||
value: "hello" |
|||
}, |
|||
{ |
|||
_component: "testlib/list", |
|||
data: dataArray, |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "{{parent.inputid.value}}", |
|||
}, |
|||
], |
|||
} |
|||
] |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
expect(screenRoot.children[0].children.length).toBe(2) |
|||
|
|||
const input = screenRoot.children[0].children[0] |
|||
|
|||
const firstHeader = screenRoot.children[0].children[1].children[0] |
|||
const secondHeader = screenRoot.children[0].children[1].children[0] |
|||
|
|||
expect(firstHeader.innerText).toBe("hello") |
|||
expect(secondHeader.innerText).toBe("hello") |
|||
|
|||
changeInputValue(dom, input, "new input value") |
|||
expect(firstHeader.innerText).toBe("new input value") |
|||
expect(secondHeader.innerText).toBe("new input value") |
|||
|
|||
}) |
|||
|
|||
const changeInputValue = (dom, input, newValue) => { |
|||
var event = new dom.window.Event("change") |
|||
input.value = newValue |
|||
input.dispatchEvent(event) |
|||
} |
|||
|
|||
const dataArray = [ |
|||
{ |
|||
name: "katherine", |
|||
age: 30, |
|||
}, |
|||
{ |
|||
name: "steve", |
|||
age: 41, |
|||
}, |
|||
] |
|||
}) |
|||
@ -1,172 +0,0 @@ |
|||
import { load, makePage, makeScreen } from "./testAppDef" |
|||
|
|||
describe("initialiseApp", () => { |
|||
it("should populate simple div with initial props", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
className: "my-test-class", |
|||
}) |
|||
) |
|||
|
|||
expect(dom.window.document.body.children.length).toBe(1) |
|||
const child = dom.window.document.body.children[0] |
|||
expect(child.className.includes("my-test-class")).toBeTruthy() |
|||
}) |
|||
|
|||
it("should populate child component with props", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header one", |
|||
}, |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header two", |
|||
}, |
|||
], |
|||
}) |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
|
|||
expect(rootDiv.children.length).toBe(2) |
|||
expect(rootDiv.children[0].tagName).toBe("H1") |
|||
expect(rootDiv.children[0].innerText).toBe("header one") |
|||
expect(rootDiv.children[1].tagName).toBe("H1") |
|||
expect(rootDiv.children[1].innerText).toBe("header two") |
|||
}) |
|||
|
|||
it("should append children when told to do so", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header one", |
|||
}, |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header two", |
|||
}, |
|||
], |
|||
append: true, |
|||
}) |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
|
|||
expect(rootDiv.children.length).toBe(3) |
|||
expect(rootDiv.children[0].tagName).toBe("DIV") |
|||
expect(rootDiv.children[0].className).toBe("default-child") |
|||
expect(rootDiv.children[1].tagName).toBe("H1") |
|||
expect(rootDiv.children[1].innerText).toBe("header one") |
|||
expect(rootDiv.children[2].tagName).toBe("H1") |
|||
expect(rootDiv.children[2].innerText).toBe("header two") |
|||
}) |
|||
|
|||
it("should populate page with correct screen", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/div", |
|||
className: "screen-class", |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
|
|||
expect(rootDiv.children.length).toBe(1) |
|||
expect(rootDiv.children[0].children.length).toBe(1) |
|||
expect( |
|||
rootDiv.children[0].children[0].className.includes("screen-class") |
|||
).toBeTruthy() |
|||
}) |
|||
|
|||
it("should populate screen with children", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/div", |
|||
className: "screen-class", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header one", |
|||
}, |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header two", |
|||
}, |
|||
], |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children.length).toBe(1) |
|||
expect(screenRoot.children[0].children.length).toBe(2) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("header one") |
|||
expect(screenRoot.children[0].children[1].innerText).toBe("header two") |
|||
}) |
|||
|
|||
it("should repeat elements that pass an array of contexts", async () => { |
|||
const { dom } = await load( |
|||
makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
[ |
|||
makeScreen("/", { |
|||
_component: "testlib/list", |
|||
data: [1,2,3,4], |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "header", |
|||
} |
|||
], |
|||
}), |
|||
] |
|||
) |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children[0].children.length).toBe(4) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("header") |
|||
}) |
|||
}) |
|||
@ -1,174 +0,0 @@ |
|||
import { load, makePage, makeScreen, walkComponentTree } from "./testAppDef" |
|||
import { isScreenSlot } from "../src/render/builtinComponents" |
|||
jest.mock("../src/render/getAppId", () => ({ |
|||
getAppId: () => "TEST_APP_ID" |
|||
})) |
|||
|
|||
describe("screenRouting", () => { |
|||
it("should load correct screen, for initial URL", async () => { |
|||
const { page, screens } = pageWith3Screens() |
|||
const { dom } = await load(page, screens, "/screen2") |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children.length).toBe(1) |
|||
expect(screenRoot.children[0].children.length).toBe(1) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("screen 2") |
|||
}) |
|||
|
|||
it("should load correct screen, for initial URL, when appRootPath is something", async () => { |
|||
const { page, screens } = pageWith3Screens() |
|||
const { dom } = await load(page, screens, "/TEST_APP_ID/screen2", "127.0.0.1") |
|||
|
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children.length).toBe(1) |
|||
expect(screenRoot.children[0].children.length).toBe(1) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("screen 2") |
|||
}) |
|||
|
|||
it("should be able to route to the correct screen", async () => { |
|||
const { page, screens } = pageWith3Screens() |
|||
const { dom, app } = await load(page, screens, "/screen2") |
|||
|
|||
app.routeTo()("/screen3") |
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children.length).toBe(1) |
|||
expect(screenRoot.children[0].children.length).toBe(1) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("screen 3") |
|||
}) |
|||
|
|||
it("should be able to route to the correct screen, when appRootPath is something", async () => { |
|||
const { page, screens } = pageWith3Screens() |
|||
const { dom, app } = await load( |
|||
page, |
|||
screens, |
|||
"/TEST_APP_ID/screen2", |
|||
"127.0.0.1" |
|||
) |
|||
|
|||
app.routeTo()("/screen3") |
|||
const rootDiv = dom.window.document.body.children[0] |
|||
expect(rootDiv.children.length).toBe(1) |
|||
|
|||
const screenRoot = rootDiv.children[0] |
|||
|
|||
expect(screenRoot.children.length).toBe(1) |
|||
expect(screenRoot.children[0].children.length).toBe(1) |
|||
expect(screenRoot.children[0].children[0].innerText).toBe("screen 3") |
|||
}) |
|||
|
|||
it("should destroy and unsubscribe all components on a screen whe screen is changed", async () => { |
|||
const { page, screens } = pageWith3Screens() |
|||
const { app } = await load(page, screens, "/screen2") |
|||
|
|||
const nodes = createTrackerNodes(app) |
|||
|
|||
app.routeTo()("/screen3") |
|||
|
|||
expect(nodes.length > 0).toBe(true) |
|||
expect( |
|||
nodes.some(n => n.isDestroyed === false && isUnderScreenSlot(n.node)) |
|||
).toBe(false) |
|||
expect( |
|||
nodes.some(n => n.isUnsubscribed === false && isUnderScreenSlot(n.node)) |
|||
).toBe(false) |
|||
}) |
|||
|
|||
it("should not destroy and unsubscribe page and screenslot components when screen is changed", async () => { |
|||
const { page, screens } = pageWith3Screens() |
|||
const { app } = await load(page, screens, "/screen2") |
|||
|
|||
const nodes = createTrackerNodes(app) |
|||
|
|||
app.routeTo()("/screen3") |
|||
|
|||
expect(nodes.length > 0).toBe(true) |
|||
expect( |
|||
nodes.some(n => n.isDestroyed === true && !isUnderScreenSlot(n.node)) |
|||
).toBe(false) |
|||
}) |
|||
}) |
|||
|
|||
const createTrackerNodes = app => { |
|||
const nodes = [] |
|||
walkComponentTree(app.rootNode(), n => { |
|||
if (!n.component) return |
|||
const tracker = { node: n, isDestroyed: false, isUnsubscribed: false } |
|||
const _destroy = n.component.$destroy |
|||
n.component.$destroy = () => { |
|||
_destroy() |
|||
tracker.isDestroyed = true |
|||
} |
|||
const _unsubscribe = n.unsubscribe |
|||
if (!_unsubscribe) { |
|||
tracker.isUnsubscribed = undefined |
|||
} else { |
|||
n.unsubscribe = () => { |
|||
_unsubscribe() |
|||
tracker.isUnsubscribed = true |
|||
} |
|||
} |
|||
nodes.push(tracker) |
|||
}) |
|||
return nodes |
|||
} |
|||
|
|||
const isUnderScreenSlot = node => |
|||
node.parentNode && |
|||
(isScreenSlot(node.parentNode.props._component) || |
|||
isUnderScreenSlot(node.parentNode)) |
|||
|
|||
const pageWith3Screens = () => ({ |
|||
page: makePage({ |
|||
_component: "testlib/div", |
|||
_children: [ |
|||
{ |
|||
_component: "##builtin/screenslot", |
|||
text: "header one", |
|||
}, |
|||
], |
|||
}), |
|||
screens: [ |
|||
makeScreen("/", { |
|||
_component: "testlib/div", |
|||
className: "screen-class", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "screen 1", |
|||
}, |
|||
], |
|||
}), |
|||
makeScreen("/screen2", { |
|||
_component: "testlib/div", |
|||
className: "screen-class", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "screen 2", |
|||
}, |
|||
], |
|||
}), |
|||
makeScreen("/screen3", { |
|||
_component: "testlib/div", |
|||
className: "screen-class", |
|||
_children: [ |
|||
{ |
|||
_component: "testlib/h1", |
|||
text: "screen 3", |
|||
}, |
|||
], |
|||
}), |
|||
], |
|||
}) |
|||
@ -1,241 +0,0 @@ |
|||
import jsdom, { JSDOM } from "jsdom" |
|||
import { loadBudibase } from "../src/index" |
|||
|
|||
export const APP_ID = "TEST_APP_ID" |
|||
|
|||
export const load = async (page, screens, url, host = "test.com") => { |
|||
screens = screens || [] |
|||
url = url || "/" |
|||
|
|||
const fullUrl = `http://${host}${url}` |
|||
const cookieJar = new jsdom.CookieJar() |
|||
const cookie = `${btoa("{}")}.${btoa(`{"appId":"${APP_ID}"}`)}.signature` |
|||
cookieJar.setCookie( |
|||
`budibase:${APP_ID}:local=${cookie};domain=${host};path=/`, |
|||
fullUrl, |
|||
{ |
|||
looseMode: false, |
|||
}, |
|||
() => {} |
|||
) |
|||
|
|||
const dom = new JSDOM("<!DOCTYPE html><html><body></body><html>", { |
|||
url: fullUrl, |
|||
cookieJar, |
|||
}) |
|||
|
|||
autoAssignIds(page.props) |
|||
for (let s of screens) { |
|||
autoAssignIds(s.props) |
|||
} |
|||
setAppDef(dom.window, page, screens) |
|||
addWindowGlobals(dom.window, page, screens, { |
|||
hierarchy: {}, |
|||
actions: [], |
|||
triggers: [], |
|||
}) |
|||
setComponentCodeMeta(page, screens) |
|||
const app = await loadBudibase({ |
|||
componentLibraries: allLibs(dom.window), |
|||
window: dom.window, |
|||
localStorage: createLocalStorage(), |
|||
}) |
|||
return { dom, app } |
|||
} |
|||
|
|||
const addWindowGlobals = (window, page, screens) => { |
|||
window["##BUDIBASE_FRONTEND_DEFINITION##"] = { |
|||
page, |
|||
screens, |
|||
} |
|||
} |
|||
|
|||
export const makePage = props => ({ props }) |
|||
export const makeScreen = (route, props) => ({ props, route }) |
|||
|
|||
export const timeout = ms => new Promise(resolve => setTimeout(resolve, ms)) |
|||
|
|||
export const walkComponentTree = (node, action) => { |
|||
action(node) |
|||
|
|||
// works for nodes or props
|
|||
const children = node.children || node._children |
|||
|
|||
if (children) { |
|||
for (let child of children) { |
|||
walkComponentTree(child, action) |
|||
} |
|||
} |
|||
} |
|||
|
|||
// this happens for real by the builder...
|
|||
// ..this only assigns _ids when missing
|
|||
const autoAssignIds = (props, count = 0) => { |
|||
if (!props._id) { |
|||
props._id = `auto_id_${count}` |
|||
} |
|||
if (props._children) { |
|||
for (let child of props._children) { |
|||
count += 1 |
|||
autoAssignIds(child, count) |
|||
} |
|||
} |
|||
} |
|||
|
|||
// any component with an id that include "based_on_store" is
|
|||
// assumed to have code that depends on store value
|
|||
const setComponentCodeMeta = (page, screens) => { |
|||
const setComponentCodeMeta_single = props => { |
|||
walkComponentTree(props, c => { |
|||
if (c._id.indexOf("based_on_store") >= 0) { |
|||
c._codeMeta = { dependsOnStore: true } |
|||
} |
|||
}) |
|||
} |
|||
setComponentCodeMeta_single(page.props) |
|||
for (let s of screens || []) { |
|||
setComponentCodeMeta_single(s.props) |
|||
} |
|||
} |
|||
|
|||
const setAppDef = (window, page, screens) => { |
|||
window["##BUDIBASE_FRONTEND_DEFINITION##"] = { |
|||
componentLibraries: [], |
|||
page, |
|||
screens, |
|||
} |
|||
} |
|||
|
|||
const allLibs = window => ({ |
|||
testlib: maketestlib(window), |
|||
}) |
|||
|
|||
const createLocalStorage = () => { |
|||
const data = {} |
|||
return { |
|||
getItem: key => data[key], |
|||
setItem: (key, value) => (data[key] = value), |
|||
} |
|||
} |
|||
|
|||
const maketestlib = window => ({ |
|||
div: function(opts) { |
|||
const node = window.document.createElement("DIV") |
|||
const defaultChild = window.document.createElement("DIV") |
|||
defaultChild.className = "default-child" |
|||
node.appendChild(defaultChild) |
|||
|
|||
let currentProps = { ...opts.props } |
|||
let childNodes = [] |
|||
|
|||
const set = props => { |
|||
currentProps = Object.assign(currentProps, props) |
|||
node.className = currentProps.className || "" |
|||
if (currentProps._children && currentProps._children.length > 0) { |
|||
if (currentProps.append) { |
|||
for (let c of childNodes) { |
|||
node.removeChild(c) |
|||
} |
|||
const components = currentProps._bb.attachChildren(node, { |
|||
hydrate: false, |
|||
}) |
|||
childNodes = components.map(c => c.component._element) |
|||
} else { |
|||
currentProps._bb.attachChildren(node) |
|||
} |
|||
} |
|||
} |
|||
|
|||
this.$destroy = () => opts.target.removeChild(node) |
|||
|
|||
this.$set = set |
|||
this._element = node |
|||
set(opts.props) |
|||
opts.target.appendChild(node) |
|||
}, |
|||
|
|||
h1: function(opts) { |
|||
const node = window.document.createElement("H1") |
|||
|
|||
let currentProps = { ...opts.props } |
|||
|
|||
const set = props => { |
|||
currentProps = Object.assign(currentProps, props) |
|||
if (currentProps.text) { |
|||
node.innerText = currentProps.text |
|||
} |
|||
} |
|||
|
|||
this.$destroy = () => opts.target.removeChild(node) |
|||
|
|||
this.$set = set |
|||
this._element = node |
|||
set(opts.props) |
|||
opts.target.appendChild(node) |
|||
}, |
|||
|
|||
button: function(opts) { |
|||
const node = window.document.createElement("BUTTON") |
|||
|
|||
let currentProps = { ...opts.props } |
|||
|
|||
const set = props => { |
|||
currentProps = Object.assign(currentProps, props) |
|||
if (currentProps.onClick) { |
|||
node.addEventListener("click", () => { |
|||
currentProps._bb.call("onClick") |
|||
}) |
|||
} |
|||
} |
|||
|
|||
this.$destroy = () => opts.target.removeChild(node) |
|||
|
|||
this.$set = set |
|||
this._element = node |
|||
set(opts.props) |
|||
opts.target.appendChild(node) |
|||
}, |
|||
|
|||
list: function(opts) { |
|||
const node = window.document.createElement("DIV") |
|||
|
|||
let currentProps = { ...opts.props } |
|||
|
|||
const set = props => { |
|||
currentProps = Object.assign(currentProps, props) |
|||
if (currentProps._children && currentProps._children.length > 0) { |
|||
currentProps._bb.attachChildren(node, { |
|||
context: currentProps.data || {}, |
|||
}) |
|||
} |
|||
} |
|||
|
|||
this.$destroy = () => opts.target.removeChild(node) |
|||
|
|||
this.$set = set |
|||
this._element = node |
|||
set(opts.props) |
|||
opts.target.appendChild(node) |
|||
}, |
|||
|
|||
input: function(opts) { |
|||
const node = window.document.createElement("INPUT") |
|||
let currentProps = { ...opts.props } |
|||
|
|||
const set = props => { |
|||
currentProps = Object.assign(currentProps, props) |
|||
opts.props._bb.setBinding("value", props.value) |
|||
} |
|||
|
|||
node.addEventListener("change", e => { |
|||
opts.props._bb.setBinding("value", e.target.value) |
|||
}) |
|||
|
|||
this.$destroy = () => opts.target.removeChild(node) |
|||
|
|||
this.$set = set |
|||
this._element = node |
|||
set(opts.props) |
|||
opts.target.appendChild(node) |
|||
}, |
|||
}) |
|||
@ -1,16 +0,0 @@ |
|||
<script> |
|||
export let _bb |
|||
export let className = "" |
|||
|
|||
let containerElement |
|||
let hasLoaded |
|||
|
|||
$: { |
|||
if (containerElement) { |
|||
_bb.attachChildren(containerElement) |
|||
hasLoaded = true |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<div bind:this={containerElement} class={className} /> |
|||
@ -1,10 +1,26 @@ |
|||
{ |
|||
"name": "component-sdk", |
|||
"name": "@budibase/component-sdk", |
|||
"version": "1.0.0", |
|||
"description": "SDK for developing Budibase components", |
|||
"main": "src/index.js", |
|||
"repository": "https://github.com/Budibase/budibase", |
|||
"author": "Andrew Kingston", |
|||
"author": "Budibase", |
|||
"license": "AGPLv3", |
|||
"private": false |
|||
"private": false, |
|||
"main": "dist/budibase-client.js", |
|||
"module": "dist/budibase-client.esm.mjs", |
|||
"scripts": { |
|||
"build": "rollup -c", |
|||
"dev:builder": "rollup -cw" |
|||
}, |
|||
"devDependencies": { |
|||
"rollup": "^2.11.2", |
|||
"rollup-plugin-commonjs": "^10.0.0", |
|||
"rollup-plugin-node-builtins": "^2.1.2", |
|||
"rollup-plugin-node-globals": "^1.4.0", |
|||
"rollup-plugin-node-resolve": "^5.2.0", |
|||
"rollup-plugin-svelte": "^6.1.1" |
|||
}, |
|||
"dependencies": { |
|||
"svelte-spa-router": "^3.0.5" |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,33 @@ |
|||
import resolve from "rollup-plugin-node-resolve" |
|||
import commonjs from "rollup-plugin-commonjs" |
|||
import builtins from "rollup-plugin-node-builtins" |
|||
import nodeglobals from "rollup-plugin-node-globals" |
|||
import svelte from "rollup-plugin-svelte" |
|||
|
|||
const production = !process.env.ROLLUP_WATCH |
|||
|
|||
export default { |
|||
input: "src/index.js", |
|||
output: [ |
|||
{ |
|||
file: "dist/budibase-component-sdk.js", |
|||
format: "esm", |
|||
sourcemap: true, |
|||
}, |
|||
], |
|||
plugins: [ |
|||
svelte({ |
|||
dev: !production, |
|||
}), |
|||
resolve({ |
|||
preferBuiltins: true, |
|||
browser: true, |
|||
}), |
|||
commonjs(), |
|||
builtins(), |
|||
nodeglobals(), |
|||
], |
|||
watch: { |
|||
clearScreen: false, |
|||
}, |
|||
} |
|||
@ -0,0 +1 @@ |
|||
export const RouterContext = "bb-router" |
|||
@ -1,2 +1,5 @@ |
|||
export * from "./api" |
|||
export * from "./store" |
|||
export * as ContextTypes from "./context" |
|||
export { getAppId } from "./utils" |
|||
export { link } from "svelte-spa-router" |
|||
|
|||
@ -1,5 +1,9 @@ |
|||
import { createConfigStore } from "./config" |
|||
import { createAuthStore } from "./auth" |
|||
import { createRouteStore } from "./routes" |
|||
import { createScreenStore } from "./screens" |
|||
|
|||
export const configStore = createConfigStore() |
|||
export const authStore = createAuthStore() |
|||
export const routeStore = createRouteStore() |
|||
export const screenStore = createScreenStore() |
|||
|
|||
@ -0,0 +1,21 @@ |
|||
import { writable } from "svelte/store" |
|||
import { push } from "svelte-spa-router" |
|||
|
|||
const initialState = [] |
|||
|
|||
export const createRouteStore = () => { |
|||
const store = writable(initialState) |
|||
|
|||
const fetchRoutes = () => { |
|||
const frontendDefinition = window["##BUDIBASE_FRONTEND_DEFINITION##"] |
|||
const routes = frontendDefinition.screens.map(screen => ({ |
|||
path: screen.route, |
|||
screenId: screen._id, |
|||
})) |
|||
store.set(routes) |
|||
} |
|||
const navigate = push |
|||
store.actions = { fetchRoutes, navigate } |
|||
|
|||
return store |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
import { writable, derived, get } from "svelte/store" |
|||
|
|||
const initialState = [] |
|||
|
|||
export const createScreenStore = () => { |
|||
const store = writable(initialState) |
|||
const routeLookupMap = derived(store, $screens => { |
|||
let map = {} |
|||
$screens.forEach(screen => { |
|||
map[screen.route] = screen |
|||
}) |
|||
return map |
|||
}) |
|||
|
|||
const fetchScreens = () => { |
|||
const frontendDefinition = window["##BUDIBASE_FRONTEND_DEFINITION##"] |
|||
store.set(frontendDefinition.screens) |
|||
} |
|||
const getScreenByRoute = path => { |
|||
return get(routeLookupMap)[path] |
|||
} |
|||
store.actions = { fetchScreens, getScreenByRoute } |
|||
|
|||
return store |
|||
} |
|||
@ -0,0 +1,879 @@ |
|||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. |
|||
# yarn lockfile v1 |
|||
|
|||
|
|||
"@types/estree@*": |
|||
version "0.0.45" |
|||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" |
|||
integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== |
|||
|
|||
"@types/node@*": |
|||
version "14.14.7" |
|||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.7.tgz#8ea1e8f8eae2430cf440564b98c6dfce1ec5945d" |
|||
integrity sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg== |
|||
|
|||
"@types/resolve@0.0.8": |
|||
version "0.0.8" |
|||
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" |
|||
integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== |
|||
dependencies: |
|||
"@types/node" "*" |
|||
|
|||
abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: |
|||
version "0.12.4" |
|||
resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" |
|||
integrity sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA= |
|||
dependencies: |
|||
xtend "~3.0.0" |
|||
|
|||
acorn@^5.7.3: |
|||
version "5.7.4" |
|||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" |
|||
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== |
|||
|
|||
asn1.js@^5.2.0: |
|||
version "5.4.1" |
|||
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" |
|||
integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== |
|||
dependencies: |
|||
bn.js "^4.0.0" |
|||
inherits "^2.0.1" |
|||
minimalistic-assert "^1.0.0" |
|||
safer-buffer "^2.1.0" |
|||
|
|||
bl@~0.8.1: |
|||
version "0.8.2" |
|||
resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" |
|||
integrity sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4= |
|||
dependencies: |
|||
readable-stream "~1.0.26" |
|||
|
|||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: |
|||
version "4.11.9" |
|||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" |
|||
integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== |
|||
|
|||
bn.js@^5.0.0, bn.js@^5.1.1: |
|||
version "5.1.3" |
|||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" |
|||
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== |
|||
|
|||
brorand@^1.0.1: |
|||
version "1.1.0" |
|||
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" |
|||
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= |
|||
|
|||
browserify-aes@^1.0.0, browserify-aes@^1.0.4: |
|||
version "1.2.0" |
|||
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" |
|||
integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== |
|||
dependencies: |
|||
buffer-xor "^1.0.3" |
|||
cipher-base "^1.0.0" |
|||
create-hash "^1.1.0" |
|||
evp_bytestokey "^1.0.3" |
|||
inherits "^2.0.1" |
|||
safe-buffer "^5.0.1" |
|||
|
|||
browserify-cipher@^1.0.0: |
|||
version "1.0.1" |
|||
resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" |
|||
integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== |
|||
dependencies: |
|||
browserify-aes "^1.0.4" |
|||
browserify-des "^1.0.0" |
|||
evp_bytestokey "^1.0.0" |
|||
|
|||
browserify-des@^1.0.0: |
|||
version "1.0.2" |
|||
resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" |
|||
integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== |
|||
dependencies: |
|||
cipher-base "^1.0.1" |
|||
des.js "^1.0.0" |
|||
inherits "^2.0.1" |
|||
safe-buffer "^5.1.2" |
|||
|
|||
browserify-fs@^1.0.0: |
|||
version "1.0.0" |
|||
resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" |
|||
integrity sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8= |
|||
dependencies: |
|||
level-filesystem "^1.0.1" |
|||
level-js "^2.1.3" |
|||
levelup "^0.18.2" |
|||
|
|||
browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: |
|||
version "4.1.0" |
|||
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" |
|||
integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== |
|||
dependencies: |
|||
bn.js "^5.0.0" |
|||
randombytes "^2.0.1" |
|||
|
|||
browserify-sign@^4.0.0: |
|||
version "4.2.1" |
|||
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" |
|||
integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== |
|||
dependencies: |
|||
bn.js "^5.1.1" |
|||
browserify-rsa "^4.0.1" |
|||
create-hash "^1.2.0" |
|||
create-hmac "^1.1.7" |
|||
elliptic "^6.5.3" |
|||
inherits "^2.0.4" |
|||
parse-asn1 "^5.1.5" |
|||
readable-stream "^3.6.0" |
|||
safe-buffer "^5.2.0" |
|||
|
|||
buffer-es6@^4.9.2, buffer-es6@^4.9.3: |
|||
version "4.9.3" |
|||
resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" |
|||
integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= |
|||
|
|||
buffer-from@^1.0.0: |
|||
version "1.1.1" |
|||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" |
|||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== |
|||
|
|||
buffer-xor@^1.0.3: |
|||
version "1.0.3" |
|||
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" |
|||
integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= |
|||
|
|||
builtin-modules@^3.1.0: |
|||
version "3.1.0" |
|||
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" |
|||
integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== |
|||
|
|||
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: |
|||
version "1.0.4" |
|||
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" |
|||
integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== |
|||
dependencies: |
|||
inherits "^2.0.1" |
|||
safe-buffer "^5.0.1" |
|||
|
|||
clone@~0.1.9: |
|||
version "0.1.19" |
|||
resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" |
|||
integrity sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU= |
|||
|
|||
concat-stream@^1.4.4: |
|||
version "1.6.2" |
|||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" |
|||
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== |
|||
dependencies: |
|||
buffer-from "^1.0.0" |
|||
inherits "^2.0.3" |
|||
readable-stream "^2.2.2" |
|||
typedarray "^0.0.6" |
|||
|
|||
core-util-is@~1.0.0: |
|||
version "1.0.2" |
|||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" |
|||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= |
|||
|
|||
create-ecdh@^4.0.0: |
|||
version "4.0.4" |
|||
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" |
|||
integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== |
|||
dependencies: |
|||
bn.js "^4.1.0" |
|||
elliptic "^6.5.3" |
|||
|
|||
create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: |
|||
version "1.2.0" |
|||
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" |
|||
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== |
|||
dependencies: |
|||
cipher-base "^1.0.1" |
|||
inherits "^2.0.1" |
|||
md5.js "^1.3.4" |
|||
ripemd160 "^2.0.1" |
|||
sha.js "^2.4.0" |
|||
|
|||
create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: |
|||
version "1.1.7" |
|||
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" |
|||
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== |
|||
dependencies: |
|||
cipher-base "^1.0.3" |
|||
create-hash "^1.1.0" |
|||
inherits "^2.0.1" |
|||
ripemd160 "^2.0.0" |
|||
safe-buffer "^5.0.1" |
|||
sha.js "^2.4.8" |
|||
|
|||
crypto-browserify@^3.11.0: |
|||
version "3.12.0" |
|||
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" |
|||
integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== |
|||
dependencies: |
|||
browserify-cipher "^1.0.0" |
|||
browserify-sign "^4.0.0" |
|||
create-ecdh "^4.0.0" |
|||
create-hash "^1.1.0" |
|||
create-hmac "^1.1.0" |
|||
diffie-hellman "^5.0.0" |
|||
inherits "^2.0.1" |
|||
pbkdf2 "^3.0.3" |
|||
public-encrypt "^4.0.0" |
|||
randombytes "^2.0.0" |
|||
randomfill "^1.0.3" |
|||
|
|||
deferred-leveldown@~0.2.0: |
|||
version "0.2.0" |
|||
resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" |
|||
integrity sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ= |
|||
dependencies: |
|||
abstract-leveldown "~0.12.1" |
|||
|
|||
des.js@^1.0.0: |
|||
version "1.0.1" |
|||
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" |
|||
integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== |
|||
dependencies: |
|||
inherits "^2.0.1" |
|||
minimalistic-assert "^1.0.0" |
|||
|
|||
diffie-hellman@^5.0.0: |
|||
version "5.0.3" |
|||
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" |
|||
integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== |
|||
dependencies: |
|||
bn.js "^4.1.0" |
|||
miller-rabin "^4.0.0" |
|||
randombytes "^2.0.0" |
|||
|
|||
elliptic@^6.5.3: |
|||
version "6.5.3" |
|||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" |
|||
integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== |
|||
dependencies: |
|||
bn.js "^4.4.0" |
|||
brorand "^1.0.1" |
|||
hash.js "^1.0.0" |
|||
hmac-drbg "^1.0.0" |
|||
inherits "^2.0.1" |
|||
minimalistic-assert "^1.0.0" |
|||
minimalistic-crypto-utils "^1.0.0" |
|||
|
|||
errno@^0.1.1, errno@~0.1.1: |
|||
version "0.1.7" |
|||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" |
|||
integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== |
|||
dependencies: |
|||
prr "~1.0.1" |
|||
|
|||
estree-walker@^0.5.2: |
|||
version "0.5.2" |
|||
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" |
|||
integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== |
|||
|
|||
estree-walker@^0.6.1: |
|||
version "0.6.1" |
|||
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" |
|||
integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== |
|||
|
|||
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: |
|||
version "1.0.3" |
|||
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" |
|||
integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== |
|||
dependencies: |
|||
md5.js "^1.3.4" |
|||
safe-buffer "^5.1.1" |
|||
|
|||
foreach@~2.0.1: |
|||
version "2.0.5" |
|||
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" |
|||
integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= |
|||
|
|||
fsevents@~2.1.2: |
|||
version "2.1.3" |
|||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" |
|||
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== |
|||
|
|||
function-bind@^1.1.1: |
|||
version "1.1.1" |
|||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" |
|||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== |
|||
|
|||
fwd-stream@^1.0.4: |
|||
version "1.0.4" |
|||
resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" |
|||
integrity sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo= |
|||
dependencies: |
|||
readable-stream "~1.0.26-4" |
|||
|
|||
has@^1.0.3: |
|||
version "1.0.3" |
|||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" |
|||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== |
|||
dependencies: |
|||
function-bind "^1.1.1" |
|||
|
|||
hash-base@^3.0.0: |
|||
version "3.1.0" |
|||
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" |
|||
integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== |
|||
dependencies: |
|||
inherits "^2.0.4" |
|||
readable-stream "^3.6.0" |
|||
safe-buffer "^5.2.0" |
|||
|
|||
hash.js@^1.0.0, hash.js@^1.0.3: |
|||
version "1.1.7" |
|||
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" |
|||
integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== |
|||
dependencies: |
|||
inherits "^2.0.3" |
|||
minimalistic-assert "^1.0.1" |
|||
|
|||
hmac-drbg@^1.0.0: |
|||
version "1.0.1" |
|||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" |
|||
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= |
|||
dependencies: |
|||
hash.js "^1.0.3" |
|||
minimalistic-assert "^1.0.0" |
|||
minimalistic-crypto-utils "^1.0.1" |
|||
|
|||
idb-wrapper@^1.5.0: |
|||
version "1.7.2" |
|||
resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" |
|||
integrity sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg== |
|||
|
|||
indexof@~0.0.1: |
|||
version "0.0.1" |
|||
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" |
|||
integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= |
|||
|
|||
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== |
|||
|
|||
is-core-module@^2.1.0: |
|||
version "2.1.0" |
|||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" |
|||
integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== |
|||
dependencies: |
|||
has "^1.0.3" |
|||
|
|||
is-module@^1.0.0: |
|||
version "1.0.0" |
|||
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" |
|||
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= |
|||
|
|||
is-object@~0.1.2: |
|||
version "0.1.2" |
|||
resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" |
|||
integrity sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc= |
|||
|
|||
is-reference@^1.1.2: |
|||
version "1.2.1" |
|||
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" |
|||
integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== |
|||
dependencies: |
|||
"@types/estree" "*" |
|||
|
|||
is@~0.2.6: |
|||
version "0.2.7" |
|||
resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" |
|||
integrity sha1-OzSixI81mXLzUEKEkZOucmS2NWI= |
|||
|
|||
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: |
|||
version "1.0.0" |
|||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" |
|||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= |
|||
|
|||
isbuffer@~0.0.0: |
|||
version "0.0.0" |
|||
resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" |
|||
integrity sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s= |
|||
|
|||
level-blobs@^0.1.7: |
|||
version "0.1.7" |
|||
resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" |
|||
integrity sha1-mrm5e7mfHtv594o0M+Ie1WOGva8= |
|||
dependencies: |
|||
level-peek "1.0.6" |
|||
once "^1.3.0" |
|||
readable-stream "^1.0.26-4" |
|||
|
|||
level-filesystem@^1.0.1: |
|||
version "1.2.0" |
|||
resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" |
|||
integrity sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M= |
|||
dependencies: |
|||
concat-stream "^1.4.4" |
|||
errno "^0.1.1" |
|||
fwd-stream "^1.0.4" |
|||
level-blobs "^0.1.7" |
|||
level-peek "^1.0.6" |
|||
level-sublevel "^5.2.0" |
|||
octal "^1.0.0" |
|||
once "^1.3.0" |
|||
xtend "^2.2.0" |
|||
|
|||
level-fix-range@2.0: |
|||
version "2.0.0" |
|||
resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" |
|||
integrity sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug= |
|||
dependencies: |
|||
clone "~0.1.9" |
|||
|
|||
level-fix-range@~1.0.2: |
|||
version "1.0.2" |
|||
resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" |
|||
integrity sha1-vxW5Fa422EcMgh6IPd95zRZCCCg= |
|||
|
|||
"level-hooks@>=4.4.0 <5": |
|||
version "4.5.0" |
|||
resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" |
|||
integrity sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM= |
|||
dependencies: |
|||
string-range "~1.2" |
|||
|
|||
level-js@^2.1.3: |
|||
version "2.2.4" |
|||
resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" |
|||
integrity sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc= |
|||
dependencies: |
|||
abstract-leveldown "~0.12.0" |
|||
idb-wrapper "^1.5.0" |
|||
isbuffer "~0.0.0" |
|||
ltgt "^2.1.2" |
|||
typedarray-to-buffer "~1.0.0" |
|||
xtend "~2.1.2" |
|||
|
|||
level-peek@1.0.6, level-peek@^1.0.6: |
|||
version "1.0.6" |
|||
resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" |
|||
integrity sha1-vsUccqgu5GTTNkNMfIdsP8vM538= |
|||
dependencies: |
|||
level-fix-range "~1.0.2" |
|||
|
|||
level-sublevel@^5.2.0: |
|||
version "5.2.3" |
|||
resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" |
|||
integrity sha1-dEwSxy0ucr543eO5tc2E1iGRQTo= |
|||
dependencies: |
|||
level-fix-range "2.0" |
|||
level-hooks ">=4.4.0 <5" |
|||
string-range "~1.2.1" |
|||
xtend "~2.0.4" |
|||
|
|||
levelup@^0.18.2: |
|||
version "0.18.6" |
|||
resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" |
|||
integrity sha1-5qAcsIlhbI7MApHCqb0/DETj5es= |
|||
dependencies: |
|||
bl "~0.8.1" |
|||
deferred-leveldown "~0.2.0" |
|||
errno "~0.1.1" |
|||
prr "~0.0.0" |
|||
readable-stream "~1.0.26" |
|||
semver "~2.3.1" |
|||
xtend "~3.0.0" |
|||
|
|||
ltgt@^2.1.2: |
|||
version "2.2.1" |
|||
resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" |
|||
integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= |
|||
|
|||
magic-string@^0.22.5: |
|||
version "0.22.5" |
|||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" |
|||
integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== |
|||
dependencies: |
|||
vlq "^0.2.2" |
|||
|
|||
magic-string@^0.25.2: |
|||
version "0.25.7" |
|||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" |
|||
integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== |
|||
dependencies: |
|||
sourcemap-codec "^1.4.4" |
|||
|
|||
md5.js@^1.3.4: |
|||
version "1.3.5" |
|||
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" |
|||
integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== |
|||
dependencies: |
|||
hash-base "^3.0.0" |
|||
inherits "^2.0.1" |
|||
safe-buffer "^5.1.2" |
|||
|
|||
miller-rabin@^4.0.0: |
|||
version "4.0.1" |
|||
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" |
|||
integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== |
|||
dependencies: |
|||
bn.js "^4.0.0" |
|||
brorand "^1.0.1" |
|||
|
|||
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: |
|||
version "1.0.1" |
|||
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" |
|||
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== |
|||
|
|||
minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: |
|||
version "1.0.1" |
|||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" |
|||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= |
|||
|
|||
object-keys@~0.2.0: |
|||
version "0.2.0" |
|||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" |
|||
integrity sha1-zd7AKZiwkb5CvxA1rjLknxy26mc= |
|||
dependencies: |
|||
foreach "~2.0.1" |
|||
indexof "~0.0.1" |
|||
is "~0.2.6" |
|||
|
|||
object-keys@~0.4.0: |
|||
version "0.4.0" |
|||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" |
|||
integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= |
|||
|
|||
octal@^1.0.0: |
|||
version "1.0.0" |
|||
resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" |
|||
integrity sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws= |
|||
|
|||
once@^1.3.0: |
|||
version "1.4.0" |
|||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" |
|||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= |
|||
dependencies: |
|||
wrappy "1" |
|||
|
|||
parse-asn1@^5.0.0, parse-asn1@^5.1.5: |
|||
version "5.1.6" |
|||
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" |
|||
integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== |
|||
dependencies: |
|||
asn1.js "^5.2.0" |
|||
browserify-aes "^1.0.0" |
|||
evp_bytestokey "^1.0.0" |
|||
pbkdf2 "^3.0.3" |
|||
safe-buffer "^5.1.1" |
|||
|
|||
path-parse@^1.0.6: |
|||
version "1.0.6" |
|||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" |
|||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== |
|||
|
|||
pbkdf2@^3.0.3: |
|||
version "3.1.1" |
|||
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" |
|||
integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== |
|||
dependencies: |
|||
create-hash "^1.1.2" |
|||
create-hmac "^1.1.4" |
|||
ripemd160 "^2.0.1" |
|||
safe-buffer "^5.0.1" |
|||
sha.js "^2.4.8" |
|||
|
|||
process-es6@^0.11.2, process-es6@^0.11.6: |
|||
version "0.11.6" |
|||
resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" |
|||
integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= |
|||
|
|||
process-nextick-args@~2.0.0: |
|||
version "2.0.1" |
|||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" |
|||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== |
|||
|
|||
prr@~0.0.0: |
|||
version "0.0.0" |
|||
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" |
|||
integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo= |
|||
|
|||
prr@~1.0.1: |
|||
version "1.0.1" |
|||
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" |
|||
integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= |
|||
|
|||
public-encrypt@^4.0.0: |
|||
version "4.0.3" |
|||
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" |
|||
integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== |
|||
dependencies: |
|||
bn.js "^4.1.0" |
|||
browserify-rsa "^4.0.0" |
|||
create-hash "^1.1.0" |
|||
parse-asn1 "^5.0.0" |
|||
randombytes "^2.0.1" |
|||
safe-buffer "^5.1.2" |
|||
|
|||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: |
|||
version "2.1.0" |
|||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" |
|||
integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== |
|||
dependencies: |
|||
safe-buffer "^5.1.0" |
|||
|
|||
randomfill@^1.0.3: |
|||
version "1.0.4" |
|||
resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" |
|||
integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== |
|||
dependencies: |
|||
randombytes "^2.0.5" |
|||
safe-buffer "^5.1.0" |
|||
|
|||
readable-stream@^1.0.26-4: |
|||
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" |
|||
|
|||
readable-stream@^2.2.2: |
|||
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== |
|||
dependencies: |
|||
core-util-is "~1.0.0" |
|||
inherits "~2.0.3" |
|||
isarray "~1.0.0" |
|||
process-nextick-args "~2.0.0" |
|||
safe-buffer "~5.1.1" |
|||
string_decoder "~1.1.1" |
|||
util-deprecate "~1.0.1" |
|||
|
|||
readable-stream@^3.6.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.26, readable-stream@~1.0.26-4: |
|||
version "1.0.34" |
|||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" |
|||
integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= |
|||
dependencies: |
|||
core-util-is "~1.0.0" |
|||
inherits "~2.0.1" |
|||
isarray "0.0.1" |
|||
string_decoder "~0.10.x" |
|||
|
|||
regexparam@1.3.0: |
|||
version "1.3.0" |
|||
resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f" |
|||
integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g== |
|||
|
|||
require-relative@^0.8.7: |
|||
version "0.8.7" |
|||
resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" |
|||
integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= |
|||
|
|||
resolve@^1.11.0, resolve@^1.11.1: |
|||
version "1.19.0" |
|||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" |
|||
integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== |
|||
dependencies: |
|||
is-core-module "^2.1.0" |
|||
path-parse "^1.0.6" |
|||
|
|||
ripemd160@^2.0.0, ripemd160@^2.0.1: |
|||
version "2.0.2" |
|||
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" |
|||
integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== |
|||
dependencies: |
|||
hash-base "^3.0.0" |
|||
inherits "^2.0.1" |
|||
|
|||
rollup-plugin-commonjs@^10.0.0: |
|||
version "10.1.0" |
|||
resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" |
|||
integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== |
|||
dependencies: |
|||
estree-walker "^0.6.1" |
|||
is-reference "^1.1.2" |
|||
magic-string "^0.25.2" |
|||
resolve "^1.11.0" |
|||
rollup-pluginutils "^2.8.1" |
|||
|
|||
rollup-plugin-node-builtins@^2.1.2: |
|||
version "2.1.2" |
|||
resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" |
|||
integrity sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k= |
|||
dependencies: |
|||
browserify-fs "^1.0.0" |
|||
buffer-es6 "^4.9.2" |
|||
crypto-browserify "^3.11.0" |
|||
process-es6 "^0.11.2" |
|||
|
|||
rollup-plugin-node-globals@^1.4.0: |
|||
version "1.4.0" |
|||
resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz#5e1f24a9bb97c0ef51249f625e16c7e61b7c020b" |
|||
integrity sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== |
|||
dependencies: |
|||
acorn "^5.7.3" |
|||
buffer-es6 "^4.9.3" |
|||
estree-walker "^0.5.2" |
|||
magic-string "^0.22.5" |
|||
process-es6 "^0.11.6" |
|||
rollup-pluginutils "^2.3.1" |
|||
|
|||
rollup-plugin-node-resolve@^5.2.0: |
|||
version "5.2.0" |
|||
resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" |
|||
integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== |
|||
dependencies: |
|||
"@types/resolve" "0.0.8" |
|||
builtin-modules "^3.1.0" |
|||
is-module "^1.0.0" |
|||
resolve "^1.11.1" |
|||
rollup-pluginutils "^2.8.1" |
|||
|
|||
rollup-plugin-svelte@^6.1.1: |
|||
version "6.1.1" |
|||
resolved "https://registry.yarnpkg.com/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz#66362cf0500fb7a848283ebcf19d289a60ef0871" |
|||
integrity sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow== |
|||
dependencies: |
|||
require-relative "^0.8.7" |
|||
rollup-pluginutils "^2.8.2" |
|||
sourcemap-codec "^1.4.8" |
|||
|
|||
rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: |
|||
version "2.8.2" |
|||
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" |
|||
integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== |
|||
dependencies: |
|||
estree-walker "^0.6.1" |
|||
|
|||
rollup@^2.11.2: |
|||
version "2.33.1" |
|||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.33.1.tgz#802795164164ee63cd47769d8879c33ec8ae0c40" |
|||
integrity sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w== |
|||
optionalDependencies: |
|||
fsevents "~2.1.2" |
|||
|
|||
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, 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" |
|||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== |
|||
|
|||
safer-buffer@^2.1.0: |
|||
version "2.1.2" |
|||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" |
|||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== |
|||
|
|||
semver@~2.3.1: |
|||
version "2.3.2" |
|||
resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" |
|||
integrity sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI= |
|||
|
|||
sha.js@^2.4.0, sha.js@^2.4.8: |
|||
version "2.4.11" |
|||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" |
|||
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== |
|||
dependencies: |
|||
inherits "^2.0.1" |
|||
safe-buffer "^5.0.1" |
|||
|
|||
sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: |
|||
version "1.4.8" |
|||
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" |
|||
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== |
|||
|
|||
string-range@~1.2, string-range@~1.2.1: |
|||
version "1.2.2" |
|||
resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" |
|||
integrity sha1-qJPtNH5yKZvIO++78qaSqNI51d0= |
|||
|
|||
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" |
|||
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" |
|||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== |
|||
dependencies: |
|||
safe-buffer "~5.1.0" |
|||
|
|||
svelte-spa-router@^3.0.5: |
|||
version "3.0.5" |
|||
resolved "https://registry.yarnpkg.com/svelte-spa-router/-/svelte-spa-router-3.0.5.tgz#097506578ac2371c9556b9789bd397d408968d92" |
|||
integrity sha512-MewNP2IoKcnFBZ5Ni1Ntrow+Enx2rS2lY9hGOWE0ZIHGf/8AhUhpoHQ7a5iv0cAIEUxYVJ480X9GIEURsjfDGA== |
|||
dependencies: |
|||
regexparam "1.3.0" |
|||
|
|||
typedarray-to-buffer@~1.0.0: |
|||
version "1.0.4" |
|||
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" |
|||
integrity sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw= |
|||
|
|||
typedarray@^0.0.6: |
|||
version "0.0.6" |
|||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" |
|||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= |
|||
|
|||
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= |
|||
|
|||
vlq@^0.2.2: |
|||
version "0.2.3" |
|||
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" |
|||
integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== |
|||
|
|||
wrappy@1: |
|||
version "1.0.2" |
|||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" |
|||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= |
|||
|
|||
xtend@^2.2.0: |
|||
version "2.2.0" |
|||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" |
|||
integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= |
|||
|
|||
xtend@~2.0.4: |
|||
version "2.0.6" |
|||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" |
|||
integrity sha1-XqZXptukRwacLlnFihE4ywxebO4= |
|||
dependencies: |
|||
is-object "~0.1.2" |
|||
object-keys "~0.2.0" |
|||
|
|||
xtend@~2.1.2: |
|||
version "2.1.2" |
|||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" |
|||
integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= |
|||
dependencies: |
|||
object-keys "~0.4.0" |
|||
|
|||
xtend@~3.0.0: |
|||
version "3.0.0" |
|||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" |
|||
integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo= |
|||
@ -1,48 +1,58 @@ |
|||
<script> |
|||
export let className = "" |
|||
export let onLoad |
|||
export let type = "div" |
|||
export let _bb |
|||
|
|||
let containerElement |
|||
let hasLoaded |
|||
let currentChildren |
|||
|
|||
$: { |
|||
if (containerElement) { |
|||
_bb.attachChildren(containerElement) |
|||
if (!hasLoaded) { |
|||
_bb.call("onLoad") |
|||
hasLoaded = true |
|||
} |
|||
} |
|||
} |
|||
$: console.log(type) |
|||
</script> |
|||
|
|||
{#if type === 'div'} |
|||
<div bind:this={containerElement} /> |
|||
<div> |
|||
<slot /> |
|||
</div> |
|||
{:else if type === 'header'} |
|||
<header bind:this={containerElement} /> |
|||
<header> |
|||
<slot /> |
|||
</header> |
|||
{:else if type === 'main'} |
|||
<main bind:this={containerElement} /> |
|||
<main> |
|||
<slot /> |
|||
</main> |
|||
{:else if type === 'footer'} |
|||
<footer bind:this={containerElement} /> |
|||
<footer> |
|||
<slot /> |
|||
</footer> |
|||
{:else if type === 'aside'} |
|||
<aside bind:this={containerElement} /> |
|||
<aside> |
|||
<slot /> |
|||
</aside> |
|||
{:else if type === 'summary'} |
|||
<summary bind:this={containerElement} /> |
|||
<summary> |
|||
<slot /> |
|||
</summary> |
|||
{:else if type === 'details'} |
|||
<details bind:this={containerElement} /> |
|||
<details> |
|||
<slot /> |
|||
</details> |
|||
{:else if type === 'article'} |
|||
<article bind:this={containerElement} /> |
|||
<article> |
|||
<slot /> |
|||
</article> |
|||
{:else if type === 'nav'} |
|||
<nav bind:this={containerElement} /> |
|||
<nav> |
|||
<slot /> |
|||
</nav> |
|||
{:else if type === 'mark'} |
|||
<mark bind:this={containerElement} /> |
|||
<mark><slot /></mark> |
|||
{:else if type === 'figure'} |
|||
<figure bind:this={containerElement} /> |
|||
<figure> |
|||
<slot /> |
|||
</figure> |
|||
{:else if type === 'figcaption'} |
|||
<figcaption bind:this={containerElement} /> |
|||
<figcaption> |
|||
<slot /> |
|||
</figcaption> |
|||
{:else if type === 'paragraph'} |
|||
<p bind:this={containerElement} /> |
|||
<p> |
|||
<slot /> |
|||
</p> |
|||
{/if} |
|||
|
|||
@ -1,20 +1,14 @@ |
|||
<script> |
|||
import { link } from "@budibase/component-sdk" |
|||
|
|||
export let url = "" |
|||
export let text = "" |
|||
export let openInNewTab = false |
|||
|
|||
export let _bb |
|||
|
|||
let anchorElement |
|||
|
|||
$: anchorElement && !text && _bb.attachChildren(anchorElement) |
|||
$: target = openInNewTab ? "_blank" : "_self" |
|||
</script> |
|||
|
|||
<a href={url} bind:this={anchorElement} {target}>{text}</a> |
|||
|
|||
<style> |
|||
.textDecoration { |
|||
text-decoration: var(--textDecoration); |
|||
} |
|||
</style> |
|||
<a href={url} use:link {target}> |
|||
{text} |
|||
<slot /> |
|||
</a> |
|||
|
|||
Loading…
Reference in new issue