toggleNodeOpen(component._id)}
- on:drop={dragDropStore.actions.drop}
+ on:drop={onDrop}
text={getComponentText(component)}
withArrow
indentLevel={level + 1}
@@ -105,7 +114,7 @@
{#if $dragDropStore?.targetComponent === component && ($dragDropStore.dropPosition === DropPosition.INSIDE || $dragDropStore.dropPosition === DropPosition.BELOW)}
{
try {
await store.actions.layouts.delete(layout)
- notifications.success(`Layout ${layout.name} deleted successfully.`)
+ notifications.success("Layout deleted successfully")
} catch (err) {
- notifications.error(`Error deleting layout: ${err.message}`)
+ notifications.error("Error deleting layout")
}
}
@@ -32,9 +32,9 @@
const layoutToSave = cloneDeep(layout)
layoutToSave.name = name
await store.actions.layouts.save(layoutToSave)
- notifications.success(`Layout saved successfully.`)
+ notifications.success("Layout saved successfully")
} catch (err) {
- notifications.error(`Error saving layout: ${err.message}`)
+ notifications.error("Error saving layout")
}
}
diff --git a/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/ScreenDropdownMenu.svelte b/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/ScreenDropdownMenu.svelte
index b2161e35d7..38ed79649e 100644
--- a/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/ScreenDropdownMenu.svelte
+++ b/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/ScreenDropdownMenu.svelte
@@ -13,7 +13,6 @@
const deleteScreen = async () => {
try {
await store.actions.screens.delete(screen)
- await store.actions.routing.fetch()
$goto("../")
notifications.success("Deleted screen successfully.")
} catch (err) {
diff --git a/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/dragDropStore.js b/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/dragDropStore.js
index aa5cd230e7..d965a2456d 100644
--- a/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/dragDropStore.js
+++ b/packages/builder/src/components/design/NavigationPanel/ComponentNavigationTree/dragDropStore.js
@@ -72,7 +72,7 @@ export default function () {
return state
})
},
- drop: () => {
+ drop: async () => {
const state = get(store)
// Stop if the target and source are the same
@@ -92,7 +92,7 @@ export default function () {
// Cut and paste the component
frontendStore.actions.components.copy(state.dragged, true)
- frontendStore.actions.components.paste(
+ await frontendStore.actions.components.paste(
state.targetComponent,
state.dropPosition
)
diff --git a/packages/builder/src/components/design/NavigationPanel/FrontendNavigatePane.svelte b/packages/builder/src/components/design/NavigationPanel/FrontendNavigatePane.svelte
index ea9ebbf2c5..a5045d8e9f 100644
--- a/packages/builder/src/components/design/NavigationPanel/FrontendNavigatePane.svelte
+++ b/packages/builder/src/components/design/NavigationPanel/FrontendNavigatePane.svelte
@@ -11,7 +11,15 @@
import ComponentNavigationTree from "components/design/NavigationPanel/ComponentNavigationTree/index.svelte"
import Layout from "components/design/NavigationPanel/Layout.svelte"
import NewLayoutModal from "components/design/NavigationPanel/NewLayoutModal.svelte"
- import { Icon, Modal, Select, Search, Tabs, Tab } from "@budibase/bbui"
+ import {
+ Icon,
+ Modal,
+ Select,
+ Search,
+ Tabs,
+ Tab,
+ notifications,
+ } from "@budibase/bbui"
export let showModal
@@ -58,8 +66,12 @@
selectedAccessRole.set(role)
}
- onMount(() => {
- store.actions.routing.fetch()
+ onMount(async () => {
+ try {
+ await store.actions.routing.fetch()
+ } catch (error) {
+ notifications.error("Error fetching routes")
+ }
})
diff --git a/packages/builder/src/components/design/NavigationPanel/NewLayoutModal.svelte b/packages/builder/src/components/design/NavigationPanel/NewLayoutModal.svelte
index 0ed9014eac..d7288fbe23 100644
--- a/packages/builder/src/components/design/NavigationPanel/NewLayoutModal.svelte
+++ b/packages/builder/src/components/design/NavigationPanel/NewLayoutModal.svelte
@@ -9,8 +9,8 @@
try {
await store.actions.layouts.save({ name })
notifications.success(`Layout ${name} created successfully`)
- } catch (err) {
- notifications.error(`Error creating layout ${name}.`)
+ } catch (error) {
+ notifications.error("Error creating layout")
}
}
diff --git a/packages/builder/src/components/design/NavigationPanel/ScreenWizard.svelte b/packages/builder/src/components/design/NavigationPanel/ScreenWizard.svelte
index 99dbcb6026..a9fea4a45b 100644
--- a/packages/builder/src/components/design/NavigationPanel/ScreenWizard.svelte
+++ b/packages/builder/src/components/design/NavigationPanel/ScreenWizard.svelte
@@ -2,7 +2,7 @@
import ScreenDetailsModal from "components/design/NavigationPanel/ScreenDetailsModal.svelte"
import NewScreenModal from "components/design/NavigationPanel/NewScreenModal.svelte"
import sanitizeUrl from "builderStore/store/screenTemplates/utils/sanitizeUrl"
- import { Modal } from "@budibase/bbui"
+ import { Modal, notifications } from "@budibase/bbui"
import { store, selectedAccessRole, allScreens } from "builderStore"
import analytics, { Events } from "analytics"
@@ -29,15 +29,19 @@
const save = async () => {
showProgressCircle = true
- await createScreens()
- for (let screen of createdScreens) {
- await saveScreens(screen)
+ try {
+ await createScreens()
+ for (let screen of createdScreens) {
+ await saveScreens(screen)
+ }
+ await store.actions.routing.fetch()
+ selectedScreens = []
+ createdScreens = []
+ screenName = ""
+ url = ""
+ } catch (error) {
+ notifications.error("Error creating screens")
}
- await store.actions.routing.fetch()
- selectedScreens = []
- createdScreens = []
- screenName = ""
- url = ""
showProgressCircle = false
}
@@ -71,12 +75,16 @@
draftScreen.routing.route = route
- await store.actions.screens.create(draftScreen)
+ await store.actions.screens.save(draftScreen)
if (draftScreen.props._instanceName.endsWith("List")) {
- await store.actions.components.links.save(
- draftScreen.routing.route,
- draftScreen.routing.route.split("/")[1]
- )
+ try {
+ await store.actions.components.links.save(
+ draftScreen.routing.route,
+ draftScreen.routing.route.split("/")[1]
+ )
+ } catch (error) {
+ notifications.error("Error creating link to screen")
+ }
}
}
}
diff --git a/packages/builder/src/components/design/PropertiesPanel/ComponentSettingsSection.svelte b/packages/builder/src/components/design/PropertiesPanel/ComponentSettingsSection.svelte
index 47df3dbf74..f9fa56f739 100644
--- a/packages/builder/src/components/design/PropertiesPanel/ComponentSettingsSection.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/ComponentSettingsSection.svelte
@@ -1,6 +1,6 @@
diff --git a/packages/builder/src/components/design/PropertiesPanel/CustomStylesSection.svelte b/packages/builder/src/components/design/PropertiesPanel/CustomStylesSection.svelte
index 4ff10c64c7..187d9ff760 100644
--- a/packages/builder/src/components/design/PropertiesPanel/CustomStylesSection.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/CustomStylesSection.svelte
@@ -8,6 +8,7 @@
Layout,
Body,
Button,
+ notifications,
} from "@budibase/bbui"
import { store } from "builderStore"
@@ -21,8 +22,12 @@
drawer.show()
}
- const save = () => {
- store.actions.components.updateCustomStyle(tempValue)
+ const save = async () => {
+ try {
+ await store.actions.components.updateCustomStyle(tempValue)
+ } catch (error) {
+ notifications.error("Error updating custom style")
+ }
drawer.hide()
}
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionDrawer.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionDrawer.svelte
index 1f729af0c9..8cf0f37f70 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionDrawer.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionDrawer.svelte
@@ -126,13 +126,15 @@
{#if selectedActionComponent}
-
-
-
+ {#key selectedAction.id}
+
+
+
+ {/key}
{/if}
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionEditor.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionEditor.svelte
index 840efca8eb..6a0e94cd4c 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionEditor.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/ButtonActionEditor.svelte
@@ -36,28 +36,37 @@
// called by the parent modal when actions are saved
const createAutomation = async parameters => {
- if (parameters.automationId || !parameters.newAutomationName) return
- await automationStore.actions.create({ name: parameters.newAutomationName })
- const appActionDefinition = $automationStore.blockDefinitions.TRIGGER.APP
- const newBlock = $automationStore.selectedAutomation.constructBlock(
- "TRIGGER",
- "APP",
- appActionDefinition
- )
-
- newBlock.inputs = {
- fields: Object.keys(parameters.fields).reduce((fields, key) => {
- fields[key] = "string"
- return fields
- }, {}),
+ if (parameters.automationId || !parameters.newAutomationName) {
+ return
}
+ try {
+ await automationStore.actions.create({
+ name: parameters.newAutomationName,
+ })
+ const appActionDefinition = $automationStore.blockDefinitions.TRIGGER.APP
+ const newBlock = $automationStore.selectedAutomation.constructBlock(
+ "TRIGGER",
+ "APP",
+ appActionDefinition
+ )
- automationStore.actions.addBlockToAutomation(newBlock)
- await automationStore.actions.save(
- $automationStore.selectedAutomation?.automation
- )
- parameters.automationId = $automationStore.selectedAutomation.automation._id
- delete parameters.newAutomationName
+ newBlock.inputs = {
+ fields: Object.keys(parameters.fields).reduce((fields, key) => {
+ fields[key] = "string"
+ return fields
+ }, {}),
+ }
+
+ automationStore.actions.addBlockToAutomation(newBlock)
+ await automationStore.actions.save(
+ $automationStore.selectedAutomation?.automation
+ )
+ parameters.automationId =
+ $automationStore.selectedAutomation.automation._id
+ delete parameters.newAutomationName
+ } catch (error) {
+ notifications.error("Error creating automation")
+ }
}
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/DuplicateRow.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/DuplicateRow.svelte
index 38c4347e43..7e72a051ce 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/DuplicateRow.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/DuplicateRow.svelte
@@ -4,7 +4,7 @@
import { tables } from "stores/backend"
import {
getContextProviderComponents,
- getSchemaForDatasource,
+ getSchemaForTable,
} from "builderStore/dataBinding"
import SaveFields from "./SaveFields.svelte"
@@ -60,7 +60,7 @@
}
const getSchemaFields = (asset, tableId) => {
- const { schema } = getSchemaForDatasource(asset, { type: "table", tableId })
+ const { schema } = getSchemaForTable(tableId)
delete schema._id
delete schema._rev
return Object.values(schema || {})
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/ExecuteQuery.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/ExecuteQuery.svelte
index 8c438e4b22..462ee71cbe 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/ExecuteQuery.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/ExecuteQuery.svelte
@@ -52,7 +52,7 @@
{/if}
{#if query?.parameters?.length > 0}
-
+
+
+
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/SaveRow.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/SaveRow.svelte
index 55aac87cfd..c88b301fc9 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/SaveRow.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ButtonActionEditor/actions/SaveRow.svelte
@@ -4,7 +4,7 @@
import { tables } from "stores/backend"
import {
getContextProviderComponents,
- getSchemaForDatasource,
+ getSchemaForTable,
} from "builderStore/dataBinding"
import SaveFields from "./SaveFields.svelte"
@@ -60,7 +60,7 @@
}
const getSchemaFields = (asset, tableId) => {
- const { schema } = getSchemaForDatasource(asset, { type: "table", tableId })
+ const { schema } = getSchemaForTable(tableId)
return Object.values(schema || {})
}
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ColumnEditor/ColumnDrawer.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ColumnEditor/ColumnDrawer.svelte
new file mode 100644
index 0000000000..ef4726751b
--- /dev/null
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ColumnEditor/ColumnDrawer.svelte
@@ -0,0 +1,178 @@
+
+
+
+
+
+ {#if columns?.length}
+
+
+
+ {#each columns as column (column.id)}
+
+
(dragDisabled = false)}
+ >
+
+
+
+ {/each}
+
+
+ {:else}
+
+
+ Add the first column to your table.
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ColumnEditor/ColumnEditor.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ColumnEditor/ColumnEditor.svelte
new file mode 100644
index 0000000000..8cebf5a657
--- /dev/null
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ColumnEditor/ColumnEditor.svelte
@@ -0,0 +1,64 @@
+
+
+Configure columns
+
+
+ Configure the columns in your table.
+
+
+
+
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ConditionalUIDrawer.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ConditionalUIDrawer.svelte
index e303729d0b..11d19edf7c 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ConditionalUIDrawer.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/ConditionalUIDrawer.svelte
@@ -12,7 +12,7 @@
import { dndzone } from "svelte-dnd-action"
import { generate } from "shortid"
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
- import { OperatorOptions, getValidOperatorsForType } from "constants/lucene"
+ import { LuceneUtils, Constants } from "@budibase/frontend-core"
import { selectedComponent } from "builderStore"
import { getComponentForSettingType } from "./componentSettings"
import PropertyControl from "./PropertyControl.svelte"
@@ -83,7 +83,7 @@
valueType: "string",
id: generate(),
action: "hide",
- operator: OperatorOptions.Equals.value,
+ operator: Constants.OperatorOptions.Equals.value,
},
]
}
@@ -108,13 +108,13 @@
}
const getOperatorOptions = condition => {
- return getValidOperatorsForType(condition.valueType)
+ return LuceneUtils.getValidOperatorsForType(condition.valueType)
}
const onOperatorChange = (condition, newOperator) => {
const noValueOptions = [
- OperatorOptions.Empty.value,
- OperatorOptions.NotEmpty.value,
+ Constants.OperatorOptions.Empty.value,
+ Constants.OperatorOptions.NotEmpty.value,
]
condition.noValue = noValueOptions.includes(newOperator)
if (condition.noValue) {
@@ -127,9 +127,12 @@
condition.referenceValue = null
// Ensure a valid operator is set
- const validOperators = getValidOperatorsForType(newType).map(x => x.value)
+ const validOperators = LuceneUtils.getValidOperatorsForType(newType).map(
+ x => x.value
+ )
if (!validOperators.includes(condition.operator)) {
- condition.operator = validOperators[0] ?? OperatorOptions.Equals.value
+ condition.operator =
+ validOperators[0] ?? Constants.OperatorOptions.Equals.value
onOperatorChange(condition, condition.operator)
}
}
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterDrawer.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterDrawer.svelte
index ac97bf6065..bca78f6cbb 100644
--- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterDrawer.svelte
+++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterDrawer.svelte
@@ -13,7 +13,7 @@
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
import ClientBindingPanel from "components/common/bindings/ClientBindingPanel.svelte"
import { generate } from "shortid"
- import { getValidOperatorsForType, OperatorOptions } from "constants/lucene"
+ import { LuceneUtils, Constants } from "@budibase/frontend-core"
import { getFields } from "helpers/searchFields"
export let schemaFields
@@ -32,7 +32,7 @@
{
id: generate(),
field: null,
- operator: OperatorOptions.Equals.value,
+ operator: Constants.OperatorOptions.Equals.value,
value: null,
valueType: "Value",
},
@@ -54,11 +54,12 @@
expression.type = enrichedSchemaFields.find(x => x.name === field)?.type
// Ensure a valid operator is set
- const validOperators = getValidOperatorsForType(expression.type).map(
- x => x.value
- )
+ const validOperators = LuceneUtils.getValidOperatorsForType(
+ expression.type
+ ).map(x => x.value)
if (!validOperators.includes(expression.operator)) {
- expression.operator = validOperators[0] ?? OperatorOptions.Equals.value
+ expression.operator =
+ validOperators[0] ?? Constants.OperatorOptions.Equals.value
onOperatorChange(expression, expression.operator)
}
@@ -73,8 +74,8 @@
const onOperatorChange = (expression, operator) => {
const noValueOptions = [
- OperatorOptions.Empty.value,
- OperatorOptions.NotEmpty.value,
+ Constants.OperatorOptions.Empty.value,
+ Constants.OperatorOptions.NotEmpty.value,
]
expression.noValue = noValueOptions.includes(operator)
if (expression.noValue) {
@@ -89,7 +90,7 @@
-
+
{#if !filters?.length}
@@ -110,7 +111,7 @@
/>
Results
-
+
diff --git a/packages/builder/src/components/start/ChooseIconModal.svelte b/packages/builder/src/components/start/ChooseIconModal.svelte
index 4efb679a51..b2f68c6ce7 100644
--- a/packages/builder/src/components/start/ChooseIconModal.svelte
+++ b/packages/builder/src/components/start/ChooseIconModal.svelte
@@ -1,5 +1,12 @@
diff --git a/packages/builder/src/components/start/CreateAppModal.svelte b/packages/builder/src/components/start/CreateAppModal.svelte
index 3efd0231aa..91c4807dc8 100644
--- a/packages/builder/src/components/start/CreateAppModal.svelte
+++ b/packages/builder/src/components/start/CreateAppModal.svelte
@@ -2,8 +2,8 @@
import { writable, get as svelteGet } from "svelte/store"
import { notifications, Input, ModalContent, Dropzone } from "@budibase/bbui"
import { store, automationStore } from "builderStore"
+ import { API } from "api"
import { apps, admin, auth } from "stores/portal"
- import api, { get, post } from "builderStore/api"
import analytics, { Events } from "analytics"
import { onMount } from "svelte"
import { goto } from "@roxi/routify"
@@ -45,43 +45,27 @@
}
// Create App
- const appResp = await post("/api/applications", data, {})
- const appJson = await appResp.json()
- if (!appResp.ok) {
- throw new Error(appJson.message)
- }
-
+ const createdApp = await API.createApp(data)
analytics.captureEvent(Events.APP.CREATED, {
name: $values.name,
- appId: appJson.instance._id,
+ appId: createdApp.instance._id,
templateToUse: template,
})
// Select Correct Application/DB in prep for creating user
- const applicationPkg = await get(
- `/api/applications/${appJson.instance._id}/appPackage`
- )
- const pkg = await applicationPkg.json()
- if (applicationPkg.ok) {
- await store.actions.initialise(pkg)
- await automationStore.actions.fetch()
- // update checklist - incase first app
- await admin.init()
- } else {
- throw new Error(pkg)
- }
+ const pkg = await API.fetchAppPackage(createdApp.instance._id)
+ await store.actions.initialise(pkg)
+ await automationStore.actions.fetch()
+ // Update checklist - in case first app
+ await admin.init()
// Create user
- const user = {
- roleId: $values.roleId,
- }
- const userResp = await api.post(`/api/users/metadata/self`, user)
- await userResp.json()
+ await API.updateOwnMetadata({ roleId: $values.roleId })
await auth.setInitInfo({})
- $goto(`/builder/app/${appJson.instance._id}`)
+ $goto(`/builder/app/${createdApp.instance._id}`)
} catch (error) {
console.error(error)
- notifications.error(error)
+ notifications.error("Error creating app")
}
}
diff --git a/packages/builder/src/components/start/UpdateAppModal.svelte b/packages/builder/src/components/start/UpdateAppModal.svelte
index 7549876fc0..1ce699b834 100644
--- a/packages/builder/src/components/start/UpdateAppModal.svelte
+++ b/packages/builder/src/components/start/UpdateAppModal.svelte
@@ -38,7 +38,7 @@
await apps.update(app.instance._id, body)
} catch (error) {
console.error(error)
- notifications.error(error)
+ notifications.error("Error updating app")
}
}
diff --git a/packages/builder/src/constants/lucene.js b/packages/builder/src/constants/lucene.js
deleted file mode 100644
index 8a6bf57b5f..0000000000
--- a/packages/builder/src/constants/lucene.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * Operator options for lucene queries
- */
-export const OperatorOptions = {
- Equals: {
- value: "equal",
- label: "Equals",
- },
- NotEquals: {
- value: "notEqual",
- label: "Not equals",
- },
- Empty: {
- value: "empty",
- label: "Is empty",
- },
- NotEmpty: {
- value: "notEmpty",
- label: "Is not empty",
- },
- StartsWith: {
- value: "string",
- label: "Starts with",
- },
- Like: {
- value: "fuzzy",
- label: "Like",
- },
- MoreThan: {
- value: "rangeLow",
- label: "More than",
- },
- LessThan: {
- value: "rangeHigh",
- label: "Less than",
- },
- Contains: {
- value: "equal",
- label: "Contains",
- },
- NotContains: {
- value: "notEqual",
- label: "Does Not Contain",
- },
-}
-
-export const NoEmptyFilterStrings = [
- OperatorOptions.StartsWith.value,
- OperatorOptions.Like.value,
- OperatorOptions.Equals.value,
- OperatorOptions.NotEquals.value,
- OperatorOptions.Contains.value,
- OperatorOptions.NotContains.value,
-]
-
-/**
- * Returns the valid operator options for a certain data type
- * @param type the data type
- */
-export const getValidOperatorsForType = type => {
- const Op = OperatorOptions
- const stringOps = [
- Op.Equals,
- Op.NotEquals,
- Op.StartsWith,
- Op.Like,
- Op.Empty,
- Op.NotEmpty,
- ]
- const numOps = [
- Op.Equals,
- Op.NotEquals,
- Op.MoreThan,
- Op.LessThan,
- Op.Empty,
- Op.NotEmpty,
- ]
- if (type === "string") {
- return stringOps
- } else if (type === "number") {
- return numOps
- } else if (type === "options") {
- return [Op.Equals, Op.NotEquals, Op.Empty, Op.NotEmpty]
- } else if (type === "array") {
- return [Op.Contains, Op.NotContains, Op.Empty, Op.NotEmpty]
- } else if (type === "boolean") {
- return [Op.Equals, Op.NotEquals, Op.Empty, Op.NotEmpty]
- } else if (type === "longform") {
- return stringOps
- } else if (type === "datetime") {
- return numOps
- } else if (type === "formula") {
- return stringOps.concat([Op.MoreThan, Op.LessThan])
- }
- return []
-}
diff --git a/packages/builder/src/helpers/fetchData.js b/packages/builder/src/helpers/fetchData.js
index 65061f6b6a..9208419c4e 100644
--- a/packages/builder/src/helpers/fetchData.js
+++ b/packages/builder/src/helpers/fetchData.js
@@ -1,5 +1,5 @@
import { writable } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
export default function (url) {
const store = writable({ status: "LOADING", data: {}, error: {} })
@@ -7,8 +7,8 @@ export default function (url) {
async function get() {
store.update(u => ({ ...u, status: "LOADING" }))
try {
- const response = await api.get(url)
- store.set({ data: await response.json(), status: "SUCCESS" })
+ const data = await API.get({ url })
+ store.set({ data, status: "SUCCESS" })
} catch (e) {
store.set({ data: {}, error: e, status: "ERROR" })
}
diff --git a/packages/builder/src/helpers/fetchTableData.js b/packages/builder/src/helpers/fetchTableData.js
deleted file mode 100644
index 6d61ec813e..0000000000
--- a/packages/builder/src/helpers/fetchTableData.js
+++ /dev/null
@@ -1,210 +0,0 @@
-// Do not use any aliased imports in common files, as these will be bundled
-// by multiple bundlers which may not be able to resolve them.
-// This will eventually be replaced by the new client implementation when we
-// add a core package.
-import { writable, derived, get } from "svelte/store"
-import * as API from "../builderStore/api"
-import { buildLuceneQuery } from "./lucene"
-
-const defaultOptions = {
- tableId: null,
- filters: null,
- limit: 10,
- sortColumn: null,
- sortOrder: "ascending",
- paginate: true,
- schema: null,
-}
-
-export const fetchTableData = opts => {
- // Save option set so we can override it later rather than relying on params
- let options = {
- ...defaultOptions,
- ...opts,
- }
-
- // Local non-observable state
- let query
- let sortType
- let lastBookmark
-
- // Local observable state
- const store = writable({
- rows: [],
- schema: null,
- loading: false,
- loaded: false,
- bookmarks: [],
- pageNumber: 0,
- })
-
- // Derive certain properties to return
- const derivedStore = derived(store, $store => {
- return {
- ...$store,
- hasNextPage: $store.bookmarks[$store.pageNumber + 1] != null,
- hasPrevPage: $store.pageNumber > 0,
- }
- })
-
- const fetchPage = async bookmark => {
- lastBookmark = bookmark
- const { tableId, limit, sortColumn, sortOrder, paginate } = options
- const res = await API.post(`/api/${options.tableId}/search`, {
- tableId,
- query,
- limit,
- sort: sortColumn,
- sortOrder: sortOrder?.toLowerCase() ?? "ascending",
- sortType,
- paginate,
- bookmark,
- })
- return await res.json()
- }
-
- // Fetches a fresh set of results from the server
- const fetchData = async () => {
- const { tableId, schema, sortColumn, filters } = options
-
- // Ensure table ID exists
- if (!tableId) {
- return
- }
-
- // Get and enrich schema.
- // Ensure there are "name" properties for all fields and that field schema
- // are objects
- let enrichedSchema = schema
- if (!enrichedSchema) {
- const definition = await API.get(`/api/tables/${tableId}`)
- enrichedSchema = definition?.schema ?? null
- }
- if (enrichedSchema) {
- Object.entries(schema).forEach(([fieldName, fieldSchema]) => {
- if (typeof fieldSchema === "string") {
- enrichedSchema[fieldName] = {
- type: fieldSchema,
- name: fieldName,
- }
- } else {
- enrichedSchema[fieldName] = {
- ...fieldSchema,
- name: fieldName,
- }
- }
- })
-
- // Save fixed schema so we can provide it later
- options.schema = enrichedSchema
- }
-
- // Ensure schema exists
- if (!schema) {
- return
- }
- store.update($store => ({ ...$store, schema, loading: true }))
-
- // Work out what sort type to use
- if (!sortColumn || !schema[sortColumn]) {
- sortType = "string"
- }
- const type = schema?.[sortColumn]?.type
- sortType = type === "number" ? "number" : "string"
-
- // Build the lucene query
- query = buildLuceneQuery(filters)
-
- // Actually fetch data
- const page = await fetchPage()
- store.update($store => ({
- ...$store,
- loading: false,
- loaded: true,
- pageNumber: 0,
- rows: page.rows,
- bookmarks: page.hasNextPage ? [null, page.bookmark] : [null],
- }))
- }
-
- // Fetches the next page of data
- const nextPage = async () => {
- const state = get(derivedStore)
- if (state.loading || !options.paginate || !state.hasNextPage) {
- return
- }
-
- // Fetch next page
- store.update($store => ({ ...$store, loading: true }))
- const page = await fetchPage(state.bookmarks[state.pageNumber + 1])
-
- // Update state
- store.update($store => {
- let { bookmarks, pageNumber } = $store
- if (page.hasNextPage) {
- bookmarks[pageNumber + 2] = page.bookmark
- }
- return {
- ...$store,
- pageNumber: pageNumber + 1,
- rows: page.rows,
- bookmarks,
- loading: false,
- }
- })
- }
-
- // Fetches the previous page of data
- const prevPage = async () => {
- const state = get(derivedStore)
- if (state.loading || !options.paginate || !state.hasPrevPage) {
- return
- }
-
- // Fetch previous page
- store.update($store => ({ ...$store, loading: true }))
- const page = await fetchPage(state.bookmarks[state.pageNumber - 1])
-
- // Update state
- store.update($store => {
- return {
- ...$store,
- pageNumber: $store.pageNumber - 1,
- rows: page.rows,
- loading: false,
- }
- })
- }
-
- // Resets the data set and updates options
- const update = async newOptions => {
- if (newOptions) {
- options = {
- ...options,
- ...newOptions,
- }
- }
- await fetchData()
- }
-
- // Loads the same page again
- const refresh = async () => {
- if (get(store).loading) {
- return
- }
- const page = await fetchPage(lastBookmark)
- store.update($store => ({ ...$store, rows: page.rows }))
- }
-
- // Initially fetch data but don't bother waiting for the result
- fetchData()
-
- // Return our derived store which will be updated over time
- return {
- subscribe: derivedStore.subscribe,
- nextPage,
- prevPage,
- update,
- refresh,
- }
-}
diff --git a/packages/builder/src/pages/builder/_layout.svelte b/packages/builder/src/pages/builder/_layout.svelte
index 1d41af15e7..cb760cd165 100644
--- a/packages/builder/src/pages/builder/_layout.svelte
+++ b/packages/builder/src/pages/builder/_layout.svelte
@@ -2,12 +2,7 @@
import { isActive, redirect, params } from "@roxi/routify"
import { admin, auth } from "stores/portal"
import { onMount } from "svelte"
- import {
- Cookies,
- getCookie,
- removeCookie,
- setCookie,
- } from "builderStore/cookies"
+ import { CookieUtils, Constants } from "@budibase/frontend-core"
let loaded = false
@@ -46,9 +41,12 @@
if (user.tenantId !== urlTenantId) {
// user should not be here - play it safe and log them out
- await auth.logout()
- await auth.setOrganisation(null)
- return
+ try {
+ await auth.logout()
+ await auth.setOrganisation(null)
+ } catch (error) {
+ // Swallow error and do nothing
+ }
}
} else {
// no user - set the org according to the url
@@ -57,17 +55,23 @@
}
onMount(async () => {
- if ($params["?template"]) {
- await auth.setInitInfo({ init_template: $params["?template"] })
+ try {
+ await auth.getSelf()
+ await admin.init()
+
+ // Set init info if present
+ if ($params["?template"]) {
+ await auth.setInitInfo({ init_template: $params["?template"] })
+ }
+
+ // Validate tenant if in a multi-tenant env
+ if (useAccountPortal && multiTenancyEnabled) {
+ await validateTenantId()
+ }
+ } catch (error) {
+ // Don't show a notification here, as we might 403 initially due to not
+ // being logged in
}
-
- await auth.getSelf()
- await admin.init()
-
- if (useAccountPortal && multiTenancyEnabled) {
- await validateTenantId()
- }
-
loaded = true
})
@@ -79,7 +83,7 @@
loaded &&
apiReady &&
!$auth.user &&
- !getCookie(Cookies.ReturnUrl) &&
+ !CookieUtils.getCookie(Constants.Cookies.ReturnUrl) &&
// logout triggers a page refresh, so we don't want to set the return url
!$auth.postLogout &&
// don't set the return url on pre-login pages
@@ -88,7 +92,7 @@
!$isActive("./admin")
) {
const url = window.location.pathname
- setCookie(Cookies.ReturnUrl, url)
+ CookieUtils.setCookie(Constants.Cookies.ReturnUrl, url)
}
// if tenant is not set go to it
@@ -122,9 +126,9 @@
}
// lastly, redirect to the return url if it has been set
else if (loaded && apiReady && $auth.user) {
- const returnUrl = getCookie(Cookies.ReturnUrl)
+ const returnUrl = CookieUtils.getCookie(Constants.Cookies.ReturnUrl)
if (returnUrl) {
- removeCookie(Cookies.ReturnUrl)
+ CookieUtils.removeCookie(Constants.Cookies.ReturnUrl)
window.location.href = returnUrl
}
}
diff --git a/packages/builder/src/pages/builder/admin/_components/ImportAppsModal.svelte b/packages/builder/src/pages/builder/admin/_components/ImportAppsModal.svelte
index de29e11301..182df63967 100644
--- a/packages/builder/src/pages/builder/admin/_components/ImportAppsModal.svelte
+++ b/packages/builder/src/pages/builder/admin/_components/ImportAppsModal.svelte
@@ -1,6 +1,6 @@
@@ -36,10 +31,10 @@
onConfirm={importApps}
disabled={!value.file}
>
- Please upload the file that was exported from your Cloud environment to get
- started
+
+ Please upload the file that was exported from your Cloud environment to get
+ started
+
{
if (!cloud) {
- await admin.checkImportComplete()
+ try {
+ await admin.checkImportComplete()
+ } catch (error) {
+ notifications.error("Error checking import status")
+ }
}
})
diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte
index 553125e1a7..1003936214 100644
--- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte
+++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte
@@ -6,25 +6,26 @@
import RevertModal from "components/deploy/RevertModal.svelte"
import VersionModal from "components/deploy/VersionModal.svelte"
import NPSFeedbackForm from "components/feedback/NPSFeedbackForm.svelte"
- import { get, post } from "builderStore/api"
+ import { API } from "api"
import { auth, admin } from "stores/portal"
import { isActive, goto, layout, redirect } from "@roxi/routify"
import Logo from "assets/bb-emblem.svg"
import { capitalise } from "helpers"
- import UpgradeModal from "../../../../components/upgrade/UpgradeModal.svelte"
+ import UpgradeModal from "components/upgrade/UpgradeModal.svelte"
import { onMount, onDestroy } from "svelte"
- // Get Package and set store
export let application
+
+ // Get Package and set store
let promise = getPackage()
- // sync once when you load the app
+
+ // Sync once when you load the app
let hasSynced = false
+ let userShouldPostFeedback = false
$: selected = capitalise(
$layout.children.find(layout => $isActive(layout.path))?.title ?? "data"
)
- let userShouldPostFeedback = false
-
function previewApp() {
if (!$auth?.user?.flags?.feedbackSubmitted) {
userShouldPostFeedback = true
@@ -33,34 +34,24 @@
}
async function getPackage() {
- const res = await get(`/api/applications/${application}/appPackage`)
- const pkg = await res.json()
-
- if (res.ok) {
- try {
- await store.actions.initialise(pkg)
- // edge case, lock wasn't known to client when it re-directed, or user went directly
- } catch (err) {
- if (!err.ok && err.reason === "locked") {
- $redirect("../../")
- } else {
- throw err
- }
- }
+ try {
+ const pkg = await API.fetchAppPackage(application)
+ await store.actions.initialise(pkg)
await automationStore.actions.fetch()
await roles.fetch()
await flags.fetch()
return pkg
- } else {
- throw new Error(pkg)
+ } catch (error) {
+ notifications.error(`Error initialising app: ${error?.message}`)
+ $redirect("../../")
}
}
- // handles navigation between frontend, backend, automation.
- // this remembers your last place on each of the sections
+ // Handles navigation between frontend, backend, automation.
+ // This remembers your last place on each of the sections
// e.g. if one of your screens is selected on front end, then
// you browse to backend, when you click frontend, you will be
- // brought back to the same screen
+ // brought back to the same screen.
const topItemNavigate = path => () => {
const activeTopNav = $layout.children.find(c => $isActive(c.path))
if (!activeTopNav) return
@@ -74,8 +65,9 @@
onMount(async () => {
if (!hasSynced && application) {
- const res = await post(`/api/applications/${application}/sync`)
- if (res.status !== 200) {
+ try {
+ await API.syncApp(application)
+ } catch (error) {
notifications.error("Failed to sync with production database")
}
hasSynced = true
diff --git a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/rest/[query]/index.svelte b/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/rest/[query]/index.svelte
index 808c3a49ec..a0df3a9d07 100644
--- a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/rest/[query]/index.svelte
+++ b/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/rest/[query]/index.svelte
@@ -59,6 +59,9 @@
$: schemaReadOnly = !responseSuccess
$: variablesReadOnly = !responseSuccess
$: showVariablesTab = shouldShowVariables(dynamicVariables, variablesReadOnly)
+ $: hasSchema =
+ Object.keys(schema || {}).length !== 0 ||
+ Object.keys(query?.schema || {}).length !== 0
function getSelectedQuery() {
return cloneDeep(
@@ -112,14 +115,13 @@
const { _id } = await queries.save(toSave.datasourceId, toSave)
saveId = _id
query = getSelectedQuery()
- notifications.success(`Request saved successfully.`)
-
+ notifications.success(`Request saved successfully`)
if (dynamicVariables) {
datasource.config.dynamicVariables = rebuildVariables(saveId)
datasource = await datasources.save(datasource)
}
} catch (err) {
- notifications.error(`Error saving query. ${err.message}`)
+ notifications.error(`Error saving query`)
}
}
@@ -127,14 +129,14 @@
try {
response = await queries.preview(buildQuery(query))
if (response.rows.length === 0) {
- notifications.info("Request did not return any data.")
+ notifications.info("Request did not return any data")
} else {
response.info = response.info || { code: 200 }
schema = response.schema
- notifications.success("Request sent successfully.")
+ notifications.success("Request sent successfully")
}
- } catch (err) {
- notifications.error(err)
+ } catch (error) {
+ notifications.error("Error running query")
}
}
@@ -226,10 +228,24 @@
)
}
+ const updateFlag = async (flag, value) => {
+ try {
+ await flags.updateFlag(flag, value)
+ } catch (error) {
+ notifications.error("Error updating flag")
+ }
+ }
+
onMount(async () => {
query = getSelectedQuery()
- // clear any unsaved changes to the datasource
- await datasources.init()
+
+ try {
+ // Clear any unsaved changes to the datasource
+ await datasources.init()
+ } catch (error) {
+ notifications.error("Error getting datasources")
+ }
+
datasource = $datasources.list.find(ds => ds._id === query?.datasourceId)
const datasourceUrl = datasource?.config.url
const qs = query?.fields.queryString
@@ -294,6 +310,7 @@
bind:value={query.name}
defaultValue="Untitled"
on:change={() => (query.flags.urlName = false)}
+ on:save={saveQuery}
/>
@@ -313,7 +330,15 @@
-
+
+
@@ -393,8 +418,7 @@
window.open(
"https://docs.budibase.com/building-apps/data/transformers"
)}
- on:change={() =>
- flags.updateFlag("queryTransformerBanner", true)}
+ on:change={() => updateFlag("queryTransformerBanner", true)}
>
Add a JavaScript function to transform the query result.
@@ -527,9 +551,6 @@
>{response?.info.size}
-
{/if}
diff --git a/packages/builder/src/pages/builder/apps/index.svelte b/packages/builder/src/pages/builder/apps/index.svelte
index c98e749e45..39cc780ac7 100644
--- a/packages/builder/src/pages/builder/apps/index.svelte
+++ b/packages/builder/src/pages/builder/apps/index.svelte
@@ -10,6 +10,7 @@
Icon,
Body,
Modal,
+ notifications,
} from "@budibase/bbui"
import { onMount } from "svelte"
import { apps, organisation, auth } from "stores/portal"
@@ -26,8 +27,12 @@
let changePasswordModal
onMount(async () => {
- await organisation.init()
- await apps.load()
+ try {
+ await organisation.init()
+ await apps.load()
+ } catch (error) {
+ notifications.error("Error loading apps")
+ }
loaded = true
})
@@ -47,6 +52,14 @@
return `/${app.prodId}`
}
}
+
+ const logout = async () => {
+ try {
+ await auth.logout()
+ } catch (error) {
+ // Swallow error and do nothing
+ }
+ }
{#if $auth.user && loaded}
@@ -82,7 +95,7 @@
Open developer mode
{/if}
-
+
diff --git a/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte b/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte
index bae68b6548..27f5bde186 100644
--- a/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte
+++ b/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte
@@ -1,5 +1,5 @@
diff --git a/packages/builder/src/pages/builder/auth/index.svelte b/packages/builder/src/pages/builder/auth/index.svelte
index a2a02e65c1..72b3a8c7cf 100644
--- a/packages/builder/src/pages/builder/auth/index.svelte
+++ b/packages/builder/src/pages/builder/auth/index.svelte
@@ -2,6 +2,7 @@
import { redirect } from "@roxi/routify"
import { auth, admin } from "stores/portal"
import { onMount } from "svelte"
+ import { notifications } from "@budibase/bbui"
$: tenantSet = $auth.tenantSet
$: multiTenancyEnabled = $admin.multiTenancy
@@ -17,8 +18,12 @@
}
onMount(async () => {
- await admin.init()
- await auth.checkQueryString()
+ try {
+ await admin.init()
+ await auth.checkQueryString()
+ } catch (error) {
+ notifications.error("Error getting checklist")
+ }
loaded = true
})
diff --git a/packages/builder/src/pages/builder/auth/login.svelte b/packages/builder/src/pages/builder/auth/login.svelte
index 7a13164c51..d9151b4342 100644
--- a/packages/builder/src/pages/builder/auth/login.svelte
+++ b/packages/builder/src/pages/builder/auth/login.svelte
@@ -31,7 +31,6 @@
username,
password,
})
-
if ($auth?.user?.forceResetPassword) {
$goto("./reset")
} else {
@@ -39,8 +38,7 @@
$goto("../portal")
}
} catch (err) {
- console.error(err)
- notifications.error(err.message ? err.message : "Invalid Credentials")
+ notifications.error(err.message ? err.message : "Invalid credentials")
}
}
@@ -49,7 +47,11 @@
}
onMount(async () => {
- await organisation.init()
+ try {
+ await organisation.init()
+ } catch (error) {
+ notifications.error("Error getting org config")
+ }
loaded = true
})
diff --git a/packages/builder/src/pages/builder/auth/org.svelte b/packages/builder/src/pages/builder/auth/org.svelte
index 5a484b6c93..8fd94463d9 100644
--- a/packages/builder/src/pages/builder/auth/org.svelte
+++ b/packages/builder/src/pages/builder/auth/org.svelte
@@ -1,5 +1,13 @@
diff --git a/packages/builder/src/pages/builder/invite/index.svelte b/packages/builder/src/pages/builder/invite/index.svelte
index ddf888ad73..c4745d8737 100644
--- a/packages/builder/src/pages/builder/invite/index.svelte
+++ b/packages/builder/src/pages/builder/invite/index.svelte
@@ -10,14 +10,11 @@
async function acceptInvite() {
try {
- const res = await users.acceptInvite(inviteCode, password)
- if (!res) {
- throw new Error(res.message)
- }
- notifications.success(`User created.`)
+ await users.acceptInvite(inviteCode, password)
+ notifications.success("Invitation accepted successfully")
$goto("../auth/login")
- } catch (err) {
- notifications.error(err)
+ } catch (error) {
+ notifications.error("Error accepting invitation")
}
}
diff --git a/packages/builder/src/pages/builder/portal/_layout.svelte b/packages/builder/src/pages/builder/portal/_layout.svelte
index 8fca18d29d..f4679647ff 100644
--- a/packages/builder/src/pages/builder/portal/_layout.svelte
+++ b/packages/builder/src/pages/builder/portal/_layout.svelte
@@ -10,6 +10,7 @@
MenuItem,
Modal,
clickOutside,
+ notifications,
} from "@budibase/bbui"
import ConfigChecklist from "components/common/ConfigChecklist.svelte"
import { organisation, auth } from "stores/portal"
@@ -78,6 +79,14 @@
return menu
}
+ const logout = async () => {
+ try {
+ await auth.logout()
+ } catch (error) {
+ // Swallow error and do nothing
+ }
+ }
+
const showMobileMenu = () => (mobileMenuVisible = true)
const hideMobileMenu = () => (mobileMenuVisible = false)
@@ -87,7 +96,11 @@
if (!$auth.user?.builder?.global) {
$redirect("../")
} else {
- await organisation.init()
+ try {
+ await organisation.init()
+ } catch (error) {
+ notifications.error("Error getting org config")
+ }
loaded = true
}
}
@@ -158,7 +171,7 @@
-
+
diff --git a/packages/builder/src/pages/builder/portal/apps/index.svelte b/packages/builder/src/pages/builder/portal/apps/index.svelte
index bf783fdb86..b05aa1b659 100644
--- a/packages/builder/src/pages/builder/portal/apps/index.svelte
+++ b/packages/builder/src/pages/builder/portal/apps/index.svelte
@@ -19,7 +19,7 @@
import ChooseIconModal from "components/start/ChooseIconModal.svelte"
import { store, automationStore } from "builderStore"
- import api, { del, post, get } from "builderStore/api"
+ import { API } from "api"
import { onMount } from "svelte"
import { apps, auth, admin, templates } from "stores/portal"
import download from "downloadjs"
@@ -115,43 +115,29 @@
data.append("templateKey", template.key)
// Create App
- const appResp = await post("/api/applications", data, {})
- const appJson = await appResp.json()
- if (!appResp.ok) {
- throw new Error(appJson.message)
- }
-
+ const createdApp = await API.createApp(data)
analytics.captureEvent(Events.APP.CREATED, {
name: appName,
- appId: appJson.instance._id,
+ appId: createdApp.instance._id,
template,
fromTemplateMarketplace: true,
})
// Select Correct Application/DB in prep for creating user
- const applicationPkg = await get(
- `/api/applications/${appJson.instance._id}/appPackage`
- )
- const pkg = await applicationPkg.json()
- if (applicationPkg.ok) {
- await store.actions.initialise(pkg)
- await automationStore.actions.fetch()
- // update checklist - incase first app
- await admin.init()
- } else {
- throw new Error(pkg)
- }
+ const pkg = await API.fetchAppPackage(createdApp.instance._id)
+ await store.actions.initialise(pkg)
+ await automationStore.actions.fetch()
+ // Update checklist - in case first app
+ await admin.init()
// Create user
- const userResp = await api.post(`/api/users/metadata/self`, {
+ await API.updateOwnMetadata({
roleId: "BASIC",
})
- await userResp.json()
await auth.setInitInfo({})
- $goto(`/builder/app/${appJson.instance._id}`)
+ $goto(`/builder/app/${createdApp.instance._id}`)
} catch (error) {
- console.error(error)
- notifications.error(error)
+ notifications.error("Error creating app")
}
}
@@ -199,17 +185,11 @@
return
}
try {
- const response = await del(
- `/api/applications/${selectedApp.prodId}?unpublish=1`
- )
- if (response.status !== 200) {
- const json = await response.json()
- throw json.message
- }
+ await API.unpublishApp(selectedApp.prodId)
await apps.load()
notifications.success("App unpublished successfully")
} catch (err) {
- notifications.error(`Error unpublishing app: ${err}`)
+ notifications.error("Error unpublishing app")
}
}
@@ -223,17 +203,13 @@
return
}
try {
- const response = await del(`/api/applications/${selectedApp?.devId}`)
- if (response.status !== 200) {
- const json = await response.json()
- throw json.message
- }
+ await API.deleteApp(selectedApp?.devId)
await apps.load()
- // get checklist, just in case that was the last app
+ // Get checklist, just in case that was the last app
await admin.init()
notifications.success("App deleted successfully")
} catch (err) {
- notifications.error(`Error deleting app: ${err}`)
+ notifications.error("Error deleting app")
}
selectedApp = null
appName = null
@@ -246,15 +222,11 @@
const releaseLock = async app => {
try {
- const response = await del(`/api/dev/${app.devId}/lock`)
- if (response.status !== 200) {
- const json = await response.json()
- throw json.message
- }
+ await API.releaseAppLock(app.devId)
await apps.load()
notifications.success("Lock released successfully")
} catch (err) {
- notifications.error(`Error releasing lock: ${err}`)
+ notifications.error("Error releasing lock")
}
}
@@ -272,17 +244,23 @@
}
onMount(async () => {
- await apps.load()
- await templates.load()
- if ($templates?.length === 0) {
- notifications.error("There was a problem loading quick start templates.")
- }
- // if the portal is loaded from an external URL with a template param
- const initInfo = await auth.getInitInfo()
- if (initInfo?.init_template) {
- creatingFromTemplate = true
- createAppFromTemplateUrl(initInfo.init_template)
- return
+ try {
+ await apps.load()
+ await templates.load()
+ if ($templates?.length === 0) {
+ notifications.error(
+ "There was a problem loading quick start templates."
+ )
+ }
+ // If the portal is loaded from an external URL with a template param
+ const initInfo = await auth.getInitInfo()
+ if (initInfo?.init_template) {
+ creatingFromTemplate = true
+ createAppFromTemplateUrl(initInfo.init_template)
+ return
+ }
+ } catch (error) {
+ notifications.error("Error loading apps and templates")
}
loaded = true
})
diff --git a/packages/builder/src/pages/builder/portal/manage/auth/index.svelte b/packages/builder/src/pages/builder/portal/manage/auth/index.svelte
index 20d30fdfbb..b001f02fe9 100644
--- a/packages/builder/src/pages/builder/portal/manage/auth/index.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/auth/index.svelte
@@ -20,9 +20,9 @@
Toggle,
} from "@budibase/bbui"
import { onMount } from "svelte"
- import api from "builderStore/api"
+ import { API } from "api"
import { organisation, admin } from "stores/portal"
- import { uuid } from "builderStore/uuid"
+ import { Helpers } from "@budibase/bbui"
import analytics, { Events } from "analytics"
const ConfigTypes = {
@@ -137,17 +137,6 @@
providers.oidc?.config?.configs[0].clientID &&
providers.oidc?.config?.configs[0].clientSecret
- async function uploadLogo(file) {
- let data = new FormData()
- data.append("file", file)
- const res = await api.post(
- `/api/global/configs/upload/logos_oidc/${file.name}`,
- data,
- {}
- )
- return await res.json()
- }
-
const onFileSelected = e => {
let fileName = e.target.files[0].name
image = e.target.files[0]
@@ -156,17 +145,28 @@
}
async function save(docs) {
- // only if the user has provided an image, upload it.
- image && uploadLogo(image)
let calls = []
+
+ // Only if the user has provided an image, upload it
+ if (image) {
+ let data = new FormData()
+ data.append("file", image)
+ calls.push(
+ API.uploadOIDCLogo({
+ name: image.name,
+ data,
+ })
+ )
+ }
+
docs.forEach(element => {
if (element.type === ConfigTypes.OIDC) {
- //Add a UUID here so each config is distinguishable when it arrives at the login page
+ // Add a UUID here so each config is distinguishable when it arrives at the login page
for (let config of element.config.configs) {
if (!config.uuid) {
- config.uuid = uuid()
+ config.uuid = Helpers.uuid()
}
- // callback urls shouldn't be included
+ // Callback urls shouldn't be included
delete config.callbackURL
}
if (partialOidc) {
@@ -175,8 +175,8 @@
`Please fill in all required ${ConfigTypes.OIDC} fields`
)
} else {
- calls.push(api.post(`/api/global/configs`, element))
- // turn the save button grey when clicked
+ calls.push(API.saveConfig(element))
+ // Turn the save button grey when clicked
oidcSaveButtonDisabled = true
originalOidcDoc = cloneDeep(providers.oidc)
}
@@ -189,71 +189,73 @@
`Please fill in all required ${ConfigTypes.Google} fields`
)
} else {
- calls.push(api.post(`/api/global/configs`, element))
+ calls.push(API.saveConfig(element))
googleSaveButtonDisabled = true
originalGoogleDoc = cloneDeep(providers.google)
}
}
}
})
- calls.length &&
+
+ if (calls.length) {
Promise.all(calls)
- .then(responses => {
- return Promise.all(
- responses.map(response => {
- return response.json()
- })
- )
- })
.then(data => {
data.forEach(res => {
providers[res.type]._rev = res._rev
providers[res.type]._id = res._id
})
- notifications.success(`Settings saved.`)
+ notifications.success(`Settings saved`)
analytics.captureEvent(Events.SSO.SAVED)
})
- .catch(err => {
- notifications.error(`Failed to update auth settings. ${err}`)
- throw new Error(err.message)
+ .catch(() => {
+ notifications.error("Failed to update auth settings")
})
+ }
}
onMount(async () => {
- await organisation.init()
- // fetch the configs for oauth
- const googleResponse = await api.get(
- `/api/global/configs/${ConfigTypes.Google}`
- )
- const googleDoc = await googleResponse.json()
+ try {
+ await organisation.init()
+ } catch (error) {
+ notifications.error("Error getting org config")
+ }
- if (!googleDoc._id) {
+ // Fetch Google config
+ let googleDoc
+ try {
+ googleDoc = await API.getConfig(ConfigTypes.Google)
+ } catch (error) {
+ notifications.error("Error fetching Google OAuth config")
+ }
+ if (!googleDoc?._id) {
providers.google = {
type: ConfigTypes.Google,
config: { activated: true },
}
originalGoogleDoc = cloneDeep(googleDoc)
} else {
- // default activated to true for older configs
+ // Default activated to true for older configs
if (googleDoc.config.activated === undefined) {
googleDoc.config.activated = true
}
originalGoogleDoc = cloneDeep(googleDoc)
providers.google = googleDoc
}
-
googleCallbackUrl = providers?.google?.config?.callbackURL
- //Get the list of user uploaded logos and push it to the dropdown options.
- //This needs to be done before the config call so they're available when the dropdown renders
- const res = await api.get(`/api/global/configs/logos_oidc`)
- const configSettings = await res.json()
-
- if (configSettings.config) {
- const logoKeys = Object.keys(configSettings.config)
-
+ // Get the list of user uploaded logos and push it to the dropdown options.
+ // This needs to be done before the config call so they're available when
+ // the dropdown renders.
+ let oidcLogos
+ try {
+ oidcLogos = await API.getOIDCLogos()
+ } catch (error) {
+ notifications.error("Error fetching OIDC logos")
+ }
+ if (oidcLogos?.config) {
+ const logoKeys = Object.keys(oidcLogos.config)
logoKeys.map(logoKey => {
- const logoUrl = configSettings.config[logoKey]
+ const logoUrl = oidcLogos.config[logoKey]
iconDropdownOptions.unshift({
label: logoKey,
value: logoKey,
@@ -261,11 +263,15 @@
})
})
}
- const oidcResponse = await api.get(
- `/api/global/configs/${ConfigTypes.OIDC}`
- )
- const oidcDoc = await oidcResponse.json()
- if (!oidcDoc._id) {
+
+ // Fetch OIDC config
+ let oidcDoc
+ try {
+ oidcDoc = await API.getConfig(ConfigTypes.OIDC)
+ } catch (error) {
+ notifications.error("Error fetching OIDC config")
+ }
+ if (!oidcDoc?._id) {
providers.oidc = {
type: ConfigTypes.OIDC,
config: { configs: [{ activated: true }] },
diff --git a/packages/builder/src/pages/builder/portal/manage/email/[template].svelte b/packages/builder/src/pages/builder/portal/manage/email/[template].svelte
index cc00f3d798..33ecca2a10 100644
--- a/packages/builder/src/pages/builder/portal/manage/email/[template].svelte
+++ b/packages/builder/src/pages/builder/portal/manage/email/[template].svelte
@@ -36,9 +36,9 @@
try {
// Save your template config
await email.templates.save(selectedTemplate)
- notifications.success(`Template saved.`)
- } catch (err) {
- notifications.error(`Failed to update template settings. ${err}`)
+ notifications.success("Template saved")
+ } catch (error) {
+ notifications.error("Failed to update template settings")
}
}
diff --git a/packages/builder/src/pages/builder/portal/manage/email/_layout.svelte b/packages/builder/src/pages/builder/portal/manage/email/_layout.svelte
index 410a7d4ff2..e371c2daae 100644
--- a/packages/builder/src/pages/builder/portal/manage/email/_layout.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/email/_layout.svelte
@@ -1,7 +1,15 @@
diff --git a/packages/builder/src/pages/builder/portal/manage/email/index.svelte b/packages/builder/src/pages/builder/portal/manage/email/index.svelte
index 5a78623b81..4ef59d2daa 100644
--- a/packages/builder/src/pages/builder/portal/manage/email/index.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/email/index.svelte
@@ -14,7 +14,7 @@
Checkbox,
} from "@budibase/bbui"
import { email } from "stores/portal"
- import api from "builderStore/api"
+ import { API } from "api"
import { cloneDeep } from "lodash/fp"
import analytics, { Events } from "analytics"
@@ -54,55 +54,48 @@
delete smtp.config.auth
}
// Save your SMTP config
- const response = await api.post(`/api/global/configs`, smtp)
-
- if (response.status !== 200) {
- const error = await response.text()
- let message
- try {
- message = JSON.parse(error).message
- } catch (err) {
- message = error
- }
- notifications.error(`Failed to save email settings, reason: ${message}`)
- } else {
- const json = await response.json()
- smtpConfig._rev = json._rev
- smtpConfig._id = json._id
- notifications.success(`Settings saved.`)
+ try {
+ const savedConfig = await API.saveConfig(smtp)
+ smtpConfig._rev = savedConfig._rev
+ smtpConfig._id = savedConfig._id
+ notifications.success(`Settings saved`)
analytics.captureEvent(Events.SMTP.SAVED)
+ } catch (error) {
+ notifications.error(
+ `Failed to save email settings, reason: ${error?.message || "Unknown"}`
+ )
}
}
async function fetchSmtp() {
loading = true
- // fetch the configs for smtp
- const smtpResponse = await api.get(
- `/api/global/configs/${ConfigTypes.SMTP}`
- )
- const smtpDoc = await smtpResponse.json()
-
- if (!smtpDoc._id) {
- smtpConfig = {
- type: ConfigTypes.SMTP,
- config: {
- secure: true,
- },
+ try {
+ // Fetch the configs for smtp
+ const smtpDoc = await API.getConfig(ConfigTypes.SMTP)
+ if (!smtpDoc._id) {
+ smtpConfig = {
+ type: ConfigTypes.SMTP,
+ config: {
+ secure: true,
+ },
+ }
+ } else {
+ smtpConfig = smtpDoc
}
- } else {
- smtpConfig = smtpDoc
- }
- loading = false
- requireAuth = smtpConfig.config.auth != null
- // always attach the auth for the forms purpose -
- // this will be removed later if required
- if (!smtpDoc.config) {
- smtpDoc.config = {}
- }
- if (!smtpDoc.config.auth) {
- smtpConfig.config.auth = {
- type: "login",
+ loading = false
+ requireAuth = smtpConfig.config.auth != null
+ // Always attach the auth for the forms purpose -
+ // this will be removed later if required
+ if (!smtpDoc.config) {
+ smtpDoc.config = {}
}
+ if (!smtpDoc.config.auth) {
+ smtpConfig.config.auth = {
+ type: "login",
+ }
+ }
+ } catch (error) {
+ notifications.error("Error fetching SMTP config")
}
}
diff --git a/packages/builder/src/pages/builder/portal/manage/users/[userId].svelte b/packages/builder/src/pages/builder/portal/manage/users/[userId].svelte
index 549d0e4334..a8cb340465 100644
--- a/packages/builder/src/pages/builder/portal/manage/users/[userId].svelte
+++ b/packages/builder/src/pages/builder/portal/manage/users/[userId].svelte
@@ -64,31 +64,43 @@
const apps = fetchData(`/api/global/roles`)
async function deleteUser() {
- const res = await users.delete(userId)
- if (res.status === 200) {
+ try {
+ await users.delete(userId)
notifications.success(`User ${$userFetch?.data?.email} deleted.`)
$goto("./")
- } else {
- notifications.error(res?.message ? res.message : "Failed to delete user.")
+ } catch (error) {
+ notifications.error("Error deleting user")
}
}
let toggleDisabled = false
async function updateUserFirstName(evt) {
- await users.save({ ...$userFetch?.data, firstName: evt.target.value })
- await userFetch.refresh()
+ try {
+ await users.save({ ...$userFetch?.data, firstName: evt.target.value })
+ await userFetch.refresh()
+ } catch (error) {
+ notifications.error("Error updating user")
+ }
}
async function updateUserLastName(evt) {
- await users.save({ ...$userFetch?.data, lastName: evt.target.value })
- await userFetch.refresh()
+ try {
+ await users.save({ ...$userFetch?.data, lastName: evt.target.value })
+ await userFetch.refresh()
+ } catch (error) {
+ notifications.error("Error updating user")
+ }
}
async function toggleFlag(flagName, detail) {
toggleDisabled = true
- await users.save({ ...$userFetch?.data, [flagName]: { global: detail } })
- await userFetch.refresh()
+ try {
+ await users.save({ ...$userFetch?.data, [flagName]: { global: detail } })
+ await userFetch.refresh()
+ } catch (error) {
+ notifications.error("Error updating user")
+ }
toggleDisabled = false
}
diff --git a/packages/builder/src/pages/builder/portal/manage/users/_components/AddUserModal.svelte b/packages/builder/src/pages/builder/portal/manage/users/_components/AddUserModal.svelte
index 25a69af1c8..0255784a7b 100644
--- a/packages/builder/src/pages/builder/portal/manage/users/_components/AddUserModal.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/users/_components/AddUserModal.svelte
@@ -21,12 +21,12 @@
const [email, error, touched] = createValidationStore("", emailValidator)
async function createUserFlow() {
- const res = await users.invite({ email: $email, builder, admin })
- if (res.status) {
- notifications.error(res.message)
- } else {
+ try {
+ const res = await users.invite({ email: $email, builder, admin })
notifications.success(res.message)
analytics.captureEvent(Events.USER.INVITE, { type: selected })
+ } catch (error) {
+ notifications.error("Error inviting user")
}
}
diff --git a/packages/builder/src/pages/builder/portal/manage/users/_components/BasicOnboardingModal.svelte b/packages/builder/src/pages/builder/portal/manage/users/_components/BasicOnboardingModal.svelte
index ff958d542b..29e2d56ed0 100644
--- a/packages/builder/src/pages/builder/portal/manage/users/_components/BasicOnboardingModal.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/users/_components/BasicOnboardingModal.svelte
@@ -16,17 +16,17 @@
admin = false
async function createUser() {
- const res = await users.create({
- email: $email,
- password,
- builder,
- admin,
- forceResetPassword: true,
- })
- if (res.status) {
- notifications.error(res.message)
- } else {
+ try {
+ await users.create({
+ email: $email,
+ password,
+ builder,
+ admin,
+ forceResetPassword: true,
+ })
notifications.success("Successfully created user")
+ } catch (error) {
+ notifications.error("Error creating user")
}
}
diff --git a/packages/builder/src/pages/builder/portal/manage/users/_components/ForceResetPasswordModal.svelte b/packages/builder/src/pages/builder/portal/manage/users/_components/ForceResetPasswordModal.svelte
index 6468498df8..a380f0aa65 100644
--- a/packages/builder/src/pages/builder/portal/manage/users/_components/ForceResetPasswordModal.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/users/_components/ForceResetPasswordModal.svelte
@@ -10,16 +10,16 @@
const password = Math.random().toString(36).substr(2, 20)
async function resetPassword() {
- const res = await users.save({
- ...user,
- password,
- forceResetPassword: true,
- })
- if (res.status) {
- notifications.error(res.message)
- } else {
- notifications.success("Password reset.")
+ try {
+ await users.save({
+ ...user,
+ password,
+ forceResetPassword: true,
+ })
+ notifications.success("Password reset successfully")
dispatch("update")
+ } catch (error) {
+ notifications.error("Error resetting password")
}
}
diff --git a/packages/builder/src/pages/builder/portal/manage/users/_components/UpdateRolesModal.svelte b/packages/builder/src/pages/builder/portal/manage/users/_components/UpdateRolesModal.svelte
index afa4c84f0e..5a60bfdff8 100644
--- a/packages/builder/src/pages/builder/portal/manage/users/_components/UpdateRolesModal.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/users/_components/UpdateRolesModal.svelte
@@ -18,33 +18,31 @@
let selectedRole = user?.roles?.[app?._id]
async function updateUserRoles() {
- let res
- if (selectedRole === NO_ACCESS) {
- // remove the user role
- const filteredRoles = { ...user.roles }
- delete filteredRoles[app?._id]
- res = await users.save({
- ...user,
- roles: {
- ...filteredRoles,
- },
- })
- } else {
- // add the user role
- res = await users.save({
- ...user,
- roles: {
- ...user.roles,
- [app._id]: selectedRole,
- },
- })
- }
-
- if (res.status === 400) {
- notifications.error("Failed to update role")
- } else {
+ try {
+ if (selectedRole === NO_ACCESS) {
+ // Remove the user role
+ const filteredRoles = { ...user.roles }
+ delete filteredRoles[app?._id]
+ await users.save({
+ ...user,
+ roles: {
+ ...filteredRoles,
+ },
+ })
+ } else {
+ // Add the user role
+ await users.save({
+ ...user,
+ roles: {
+ ...user.roles,
+ [app._id]: selectedRole,
+ },
+ })
+ }
notifications.success("Role updated")
dispatch("update")
+ } catch (error) {
+ notifications.error("Failed to update role")
}
}
diff --git a/packages/builder/src/pages/builder/portal/manage/users/index.svelte b/packages/builder/src/pages/builder/portal/manage/users/index.svelte
index 124115a486..61192063cc 100644
--- a/packages/builder/src/pages/builder/portal/manage/users/index.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/users/index.svelte
@@ -11,13 +11,13 @@
Label,
Layout,
Modal,
+ notifications,
} from "@budibase/bbui"
import TagsRenderer from "./_components/TagsTableRenderer.svelte"
import AddUserModal from "./_components/AddUserModal.svelte"
import BasicOnboardingModal from "./_components/BasicOnboardingModal.svelte"
import { users } from "stores/portal"
-
- users.init()
+ import { onMount } from "svelte"
const schema = {
email: {},
@@ -47,6 +47,14 @@
createUserModal.hide()
basicOnboardingModal.show()
}
+
+ onMount(async () => {
+ try {
+ await users.init()
+ } catch (error) {
+ notifications.error("Error getting user list")
+ }
+ })
diff --git a/packages/builder/src/pages/builder/portal/settings/organisation.svelte b/packages/builder/src/pages/builder/portal/settings/organisation.svelte
index 6903854922..7094a0af01 100644
--- a/packages/builder/src/pages/builder/portal/settings/organisation.svelte
+++ b/packages/builder/src/pages/builder/portal/settings/organisation.svelte
@@ -11,7 +11,7 @@
notifications,
} from "@budibase/bbui"
import { auth, organisation, admin } from "stores/portal"
- import { post } from "builderStore/api"
+ import { API } from "api"
import { writable } from "svelte/store"
import { redirect } from "@roxi/routify"
@@ -32,42 +32,40 @@
let loading = false
async function uploadLogo(file) {
- let data = new FormData()
- data.append("file", file)
- const res = await post(
- "/api/global/configs/upload/settings/logoUrl",
- data,
- {}
- )
- return await res.json()
+ try {
+ let data = new FormData()
+ data.append("file", file)
+ await API.uploadLogo(data)
+ } catch (error) {
+ notifications.error("Error uploading logo")
+ }
}
async function saveConfig() {
loading = true
- // Upload logo if required
- if ($values.logo && !$values.logo.url) {
- await uploadLogo($values.logo)
- await organisation.init()
- }
+ try {
+ // Upload logo if required
+ if ($values.logo && !$values.logo.url) {
+ await uploadLogo($values.logo)
+ await organisation.init()
+ }
- const config = {
- company: $values.company ?? "",
- platformUrl: $values.platformUrl ?? "",
- }
- // remove logo if required
- if (!$values.logo) {
- config.logoUrl = ""
- }
+ const config = {
+ company: $values.company ?? "",
+ platformUrl: $values.platformUrl ?? "",
+ }
- // Update settings
- const res = await organisation.save(config)
- if (res.status === 200) {
- notifications.success("Settings saved successfully")
- } else {
- notifications.error(res.message)
- }
+ // Remove logo if required
+ if (!$values.logo) {
+ config.logoUrl = ""
+ }
+ // Update settings
+ await organisation.save(config)
+ } catch (error) {
+ notifications.error("Error saving org config")
+ }
loading = false
}
diff --git a/packages/builder/src/pages/builder/portal/settings/update.svelte b/packages/builder/src/pages/builder/portal/settings/update.svelte
index 5deb724a7c..d87736144d 100644
--- a/packages/builder/src/pages/builder/portal/settings/update.svelte
+++ b/packages/builder/src/pages/builder/portal/settings/update.svelte
@@ -9,7 +9,7 @@
notifications,
Label,
} from "@budibase/bbui"
- import api from "builderStore/api"
+ import { API } from "api"
import { auth, admin } from "stores/portal"
import { redirect } from "@roxi/routify"
@@ -38,8 +38,12 @@
}
async function getVersion() {
- const response = await api.get("/api/dev/version")
- version = await response.text()
+ try {
+ version = await API.getBudibaseVersion()
+ } catch (error) {
+ notifications.error("Error getting Budibase version")
+ version = null
+ }
}
onMount(() => {
diff --git a/packages/builder/src/pages/index.svelte b/packages/builder/src/pages/index.svelte
index 477097f726..c6eaba8ff1 100644
--- a/packages/builder/src/pages/index.svelte
+++ b/packages/builder/src/pages/index.svelte
@@ -2,10 +2,14 @@
import { redirect } from "@roxi/routify"
import { auth } from "../stores/portal"
import { onMount } from "svelte"
+ import { notifications } from "@budibase/bbui"
- auth.checkQueryString()
-
- onMount(() => {
+ onMount(async () => {
+ try {
+ await auth.checkQueryString()
+ } catch (error) {
+ notifications.error("Error setting org")
+ }
$redirect(`./builder`)
})
diff --git a/packages/builder/src/stores/backend/datasources.js b/packages/builder/src/stores/backend/datasources.js
index 7810c3a950..2423394c6a 100644
--- a/packages/builder/src/stores/backend/datasources.js
+++ b/packages/builder/src/stores/backend/datasources.js
@@ -1,6 +1,6 @@
import { writable, get } from "svelte/store"
import { queries, tables, views } from "./"
-import api from "../../builderStore/api"
+import { API } from "api"
export const INITIAL_DATASOURCE_VALUES = {
list: [],
@@ -13,23 +13,20 @@ export function createDatasourcesStore() {
const { subscribe, update, set } = store
async function updateDatasource(response) {
- if (response.status !== 200) {
- throw new Error(await response.text())
- }
-
- const { datasource, error } = await response.json()
+ const { datasource, error } = response
update(state => {
const currentIdx = state.list.findIndex(ds => ds._id === datasource._id)
-
const sources = state.list
-
if (currentIdx >= 0) {
sources.splice(currentIdx, 1, datasource)
} else {
sources.push(datasource)
}
-
- return { list: sources, selected: datasource._id, schemaError: error }
+ return {
+ list: sources,
+ selected: datasource._id,
+ schemaError: error,
+ }
})
return datasource
}
@@ -38,25 +35,25 @@ export function createDatasourcesStore() {
subscribe,
update,
init: async () => {
- const response = await api.get(`/api/datasources`)
- const json = await response.json()
- set({ list: json, selected: null })
+ const datasources = await API.getDatasources()
+ set({
+ list: datasources,
+ selected: null,
+ })
},
fetch: async () => {
- const response = await api.get(`/api/datasources`)
- const json = await response.json()
+ const datasources = await API.getDatasources()
// Clear selected if it no longer exists, otherwise keep it
const selected = get(store).selected
let nextSelected = null
- if (selected && json.find(source => source._id === selected)) {
+ if (selected && datasources.find(source => source._id === selected)) {
nextSelected = selected
}
- update(state => ({ ...state, list: json, selected: nextSelected }))
- return json
+ update(state => ({ ...state, list: datasources, selected: nextSelected }))
},
- select: async datasourceId => {
+ select: datasourceId => {
update(state => ({ ...state, selected: datasourceId }))
queries.unselect()
tables.unselect()
@@ -66,37 +63,33 @@ export function createDatasourcesStore() {
update(state => ({ ...state, selected: null }))
},
updateSchema: async datasource => {
- let url = `/api/datasources/${datasource._id}/schema`
-
- const response = await api.post(url)
- return updateDatasource(response)
+ const response = await API.buildDatasourceSchema(datasource?._id)
+ return await updateDatasource(response)
},
save: async (body, fetchSchema = false) => {
let response
if (body._id) {
- response = await api.put(`/api/datasources/${body._id}`, body)
+ response = await API.updateDatasource(body)
} else {
- response = await api.post("/api/datasources", {
+ response = await API.createDatasource({
datasource: body,
fetchSchema,
})
}
-
return updateDatasource(response)
},
delete: async datasource => {
- const response = await api.delete(
- `/api/datasources/${datasource._id}/${datasource._rev}`
- )
+ await API.deleteDatasource({
+ datasourceId: datasource?._id,
+ datasourceRev: datasource?._rev,
+ })
update(state => {
const sources = state.list.filter(
existing => existing._id !== datasource._id
)
return { list: sources, selected: null }
})
-
await queries.fetch()
- return response
},
removeSchemaError: () => {
update(state => {
diff --git a/packages/builder/src/stores/backend/flags.js b/packages/builder/src/stores/backend/flags.js
index 7e5adcd00f..449d010640 100644
--- a/packages/builder/src/stores/backend/flags.js
+++ b/packages/builder/src/stores/backend/flags.js
@@ -1,37 +1,27 @@
import { writable } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
export function createFlagsStore() {
const { subscribe, set } = writable({})
- return {
- subscribe,
+ const actions = {
fetch: async () => {
- const { doc, response } = await getFlags()
- set(doc)
- return response
+ const flags = await API.getFlags()
+ set(flags)
},
updateFlag: async (flag, value) => {
- const response = await api.post("/api/users/flags", {
+ await API.updateFlag({
flag,
value,
})
- if (response.status === 200) {
- const { doc } = await getFlags()
- set(doc)
- }
- return response
+ await actions.fetch()
},
}
-}
-async function getFlags() {
- const response = await api.get("/api/users/flags")
- let doc = {}
- if (response.status === 200) {
- doc = await response.json()
+ return {
+ subscribe,
+ ...actions,
}
- return { doc, response }
}
export const flags = createFlagsStore()
diff --git a/packages/builder/src/stores/backend/integrations.js b/packages/builder/src/stores/backend/integrations.js
index d1df818248..717b656c72 100644
--- a/packages/builder/src/stores/backend/integrations.js
+++ b/packages/builder/src/stores/backend/integrations.js
@@ -1,3 +1,16 @@
import { writable } from "svelte/store"
+import { API } from "api"
-export const integrations = writable({})
+const createIntegrationsStore = () => {
+ const store = writable(null)
+
+ return {
+ ...store,
+ init: async () => {
+ const integrations = await API.getIntegrations()
+ store.set(integrations)
+ },
+ }
+}
+
+export const integrations = createIntegrationsStore()
diff --git a/packages/builder/src/stores/backend/permissions.js b/packages/builder/src/stores/backend/permissions.js
index 29159494ed..aaab406bc9 100644
--- a/packages/builder/src/stores/backend/permissions.js
+++ b/packages/builder/src/stores/backend/permissions.js
@@ -1,5 +1,5 @@
import { writable } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
export function createPermissionStore() {
const { subscribe } = writable([])
@@ -7,14 +7,14 @@ export function createPermissionStore() {
return {
subscribe,
save: async ({ level, role, resource }) => {
- const response = await api.post(
- `/api/permission/${role}/${resource}/${level}`
- )
- return await response.json()
+ return await API.updatePermissionForResource({
+ resourceId: resource,
+ roleId: role,
+ level,
+ })
},
forResource: async resourceId => {
- const response = await api.get(`/api/permission/${resourceId}`)
- return await response.json()
+ return await API.getPermissionForResource(resourceId)
},
}
}
diff --git a/packages/builder/src/stores/backend/queries.js b/packages/builder/src/stores/backend/queries.js
index 2018933ffc..6e30cb21f8 100644
--- a/packages/builder/src/stores/backend/queries.js
+++ b/packages/builder/src/stores/backend/queries.js
@@ -1,6 +1,6 @@
import { writable, get } from "svelte/store"
import { datasources, integrations, tables, views } from "./"
-import api from "builderStore/api"
+import { API } from "api"
import { duplicateName } from "../../helpers/duplicate"
const sortQueries = queryList => {
@@ -15,23 +15,26 @@ export function createQueriesStore() {
const actions = {
init: async () => {
- const response = await api.get(`/api/queries`)
- const json = await response.json()
- set({ list: json, selected: null })
+ const queries = await API.getQueries()
+ set({
+ list: queries,
+ selected: null,
+ })
},
fetch: async () => {
- const response = await api.get(`/api/queries`)
- const json = await response.json()
- sortQueries(json)
- update(state => ({ ...state, list: json }))
- return json
+ const queries = await API.getQueries()
+ sortQueries(queries)
+ update(state => ({
+ ...state,
+ list: queries,
+ }))
},
save: async (datasourceId, query) => {
const _integrations = get(integrations)
const dataSource = get(datasources).list.filter(
ds => ds._id === datasourceId
)
- // check if readable attribute is found
+ // Check if readable attribute is found
if (dataSource.length !== 0) {
const integration = _integrations[dataSource[0].source]
const readable = integration.query[query.queryVerb].readable
@@ -40,34 +43,28 @@ export function createQueriesStore() {
}
}
query.datasourceId = datasourceId
- const response = await api.post(`/api/queries`, query)
- if (response.status !== 200) {
- throw new Error("Failed saving query.")
- }
- const json = await response.json()
+ const savedQuery = await API.saveQuery(query)
update(state => {
- const currentIdx = state.list.findIndex(query => query._id === json._id)
-
+ const idx = state.list.findIndex(query => query._id === savedQuery._id)
const queries = state.list
-
- if (currentIdx >= 0) {
- queries.splice(currentIdx, 1, json)
+ if (idx >= 0) {
+ queries.splice(idx, 1, savedQuery)
} else {
- queries.push(json)
+ queries.push(savedQuery)
}
sortQueries(queries)
- return { list: queries, selected: json._id }
+ return {
+ list: queries,
+ selected: savedQuery._id,
+ }
})
- return json
+ return savedQuery
},
- import: async body => {
- const response = await api.post(`/api/queries/import`, body)
-
- if (response.status !== 200) {
- throw new Error(response.message)
- }
-
- return response.json()
+ import: async (data, datasourceId) => {
+ return await API.importQueries({
+ datasourceId,
+ data,
+ })
},
select: query => {
update(state => ({ ...state, selected: query._id }))
@@ -79,48 +76,37 @@ export function createQueriesStore() {
update(state => ({ ...state, selected: null }))
},
preview: async query => {
- const response = await api.post("/api/queries/preview", {
- fields: query.fields,
- queryVerb: query.queryVerb,
- transformer: query.transformer,
- parameters: query.parameters.reduce(
- (acc, next) => ({
- ...acc,
- [next.name]: next.default,
- }),
- {}
- ),
- datasourceId: query.datasourceId,
- queryId: query._id || undefined,
+ const parameters = query.parameters.reduce(
+ (acc, next) => ({
+ ...acc,
+ [next.name]: next.default,
+ }),
+ {}
+ )
+ const result = await API.previewQuery({
+ ...query,
+ parameters,
})
-
- if (response.status !== 200) {
- const error = await response.text()
- throw `Query error: ${error}`
- }
-
- const json = await response.json()
// Assume all the fields are strings and create a basic schema from the
// unique fields returned by the server
const schema = {}
- for (let field of json.schemaFields) {
+ for (let field of result.schemaFields) {
schema[field] = "string"
}
- return { ...json, schema, rows: json.rows || [] }
+ return { ...result, schema, rows: result.rows || [] }
},
delete: async query => {
- const response = await api.delete(
- `/api/queries/${query._id}/${query._rev}`
- )
+ await API.deleteQuery({
+ queryId: query?._id,
+ queryRev: query?._rev,
+ })
update(state => {
state.list = state.list.filter(existing => existing._id !== query._id)
if (state.selected === query._id) {
state.selected = null
}
-
return state
})
- return response
},
duplicate: async query => {
let list = get(store).list
diff --git a/packages/builder/src/stores/backend/roles.js b/packages/builder/src/stores/backend/roles.js
index 1a1a9c04c5..0c3cdbce5a 100644
--- a/packages/builder/src/stores/backend/roles.js
+++ b/packages/builder/src/stores/backend/roles.js
@@ -1,30 +1,32 @@
import { writable } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
export function createRolesStore() {
const { subscribe, update, set } = writable([])
- return {
- subscribe,
+ const actions = {
fetch: async () => {
- set(await getRoles())
+ const roles = await API.getRoles()
+ set(roles)
},
delete: async role => {
- const response = await api.delete(`/api/roles/${role._id}/${role._rev}`)
+ await API.deleteRole({
+ roleId: role?._id,
+ roleRev: role?._rev,
+ })
update(state => state.filter(existing => existing._id !== role._id))
- return response
},
save: async role => {
- const response = await api.post("/api/roles", role)
- set(await getRoles())
- return response
+ const savedRole = await API.saveRole(role)
+ await actions.fetch()
+ return savedRole
},
}
+
+ return {
+ subscribe,
+ ...actions,
+ }
}
-async function getRoles() {
- const response = await api.get("/api/roles")
- return await response.json()
-}
-
export const roles = createRolesStore()
diff --git a/packages/builder/src/stores/backend/tables.js b/packages/builder/src/stores/backend/tables.js
index 02db48c549..f6d20037cb 100644
--- a/packages/builder/src/stores/backend/tables.js
+++ b/packages/builder/src/stores/backend/tables.js
@@ -1,7 +1,7 @@
import { get, writable } from "svelte/store"
import { datasources, queries, views } from "./"
import { cloneDeep } from "lodash/fp"
-import api from "builderStore/api"
+import { API } from "api"
import { SWITCHABLE_TYPES } from "../../constants/backend"
export function createTablesStore() {
@@ -9,10 +9,11 @@ export function createTablesStore() {
const { subscribe, update, set } = store
async function fetch() {
- const tablesResponse = await api.get(`/api/tables`)
- const tables = await tablesResponse.json()
- update(state => ({ ...state, list: tables }))
- return tables
+ const tables = await API.getTables()
+ update(state => ({
+ ...state,
+ list: tables,
+ }))
}
async function select(table) {
@@ -38,16 +39,16 @@ export function createTablesStore() {
const oldTable = get(store).list.filter(t => t._id === table._id)[0]
const fieldNames = []
- // update any renamed schema keys to reflect their names
+ // Update any renamed schema keys to reflect their names
for (let key of Object.keys(updatedTable.schema)) {
- // if field name has been seen before remove it
+ // If field name has been seen before remove it
if (fieldNames.indexOf(key.toLowerCase()) !== -1) {
delete updatedTable.schema[key]
continue
}
const field = updatedTable.schema[key]
const oldField = oldTable?.schema[key]
- // if the type has changed then revert back to the old field
+ // If the type has changed then revert back to the old field
if (
oldField != null &&
oldField?.type !== field.type &&
@@ -55,21 +56,17 @@ export function createTablesStore() {
) {
updatedTable.schema[key] = oldField
}
- // field has been renamed
+ // Field has been renamed
if (field.name && field.name !== key) {
updatedTable.schema[field.name] = field
updatedTable._rename = { old: key, updated: field.name }
delete updatedTable.schema[key]
}
- // finally record this field has been used
+ // Finally record this field has been used
fieldNames.push(key.toLowerCase())
}
- const response = await api.post(`/api/tables`, updatedTable)
- if (response.status !== 200) {
- throw (await response.json()).message
- }
- const savedTable = await response.json()
+ const savedTable = await API.saveTable(updatedTable)
await fetch()
if (table.type === "external") {
await datasources.fetch()
@@ -91,21 +88,18 @@ export function createTablesStore() {
},
save,
init: async () => {
- const response = await api.get("/api/tables")
- const json = await response.json()
+ const tables = await API.getTables()
set({
- list: json,
+ list: tables,
selected: {},
draft: {},
})
},
delete: async table => {
- const response = await api.delete(
- `/api/tables/${table._id}/${table._rev}`
- )
- if (response.status !== 200) {
- throw (await response.json()).message
- }
+ await API.deleteTable({
+ tableId: table?._id,
+ tableRev: table?._rev,
+ })
update(state => ({
...state,
list: state.list.filter(existing => existing._id !== table._id),
@@ -156,12 +150,16 @@ export function createTablesStore() {
await promise
}
},
- deleteField: field => {
+ deleteField: async field => {
+ let promise
update(state => {
delete state.draft.schema[field.name]
- save(state.draft)
+ promise = save(state.draft)
return state
})
+ if (promise) {
+ await promise
+ }
},
}
}
diff --git a/packages/builder/src/stores/backend/views.js b/packages/builder/src/stores/backend/views.js
index 14c7bf92a4..849a66f671 100644
--- a/packages/builder/src/stores/backend/views.js
+++ b/packages/builder/src/stores/backend/views.js
@@ -1,6 +1,6 @@
import { writable, get } from "svelte/store"
import { tables, datasources, queries } from "./"
-import api from "builderStore/api"
+import { API } from "api"
export function createViewsStore() {
const { subscribe, update } = writable({
@@ -11,7 +11,7 @@ export function createViewsStore() {
return {
subscribe,
update,
- select: async view => {
+ select: view => {
update(state => ({
...state,
selected: view,
@@ -27,16 +27,14 @@ export function createViewsStore() {
}))
},
delete: async view => {
- await api.delete(`/api/views/${view}`)
+ await API.deleteView(view)
await tables.fetch()
},
save: async view => {
- const response = await api.post(`/api/views`, view)
- const json = await response.json()
-
+ const savedView = await API.saveView(view)
const viewMeta = {
name: view.name,
- ...json,
+ ...savedView,
}
const viewTable = get(tables).list.find(
diff --git a/packages/builder/src/stores/portal/admin.js b/packages/builder/src/stores/portal/admin.js
index d98eae8363..dc68c43cc5 100644
--- a/packages/builder/src/stores/portal/admin.js
+++ b/packages/builder/src/stores/portal/admin.js
@@ -1,5 +1,5 @@
import { writable, get } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
import { auth } from "stores/portal"
export function createAdminStore() {
@@ -23,64 +23,37 @@ export function createAdminStore() {
const admin = writable(DEFAULT_CONFIG)
async function init() {
- try {
- const tenantId = get(auth).tenantId
- const response = await api.get(
- `/api/global/configs/checklist?tenantId=${tenantId}`
- )
- const json = await response.json()
- const totalSteps = Object.keys(json).length
- const completedSteps = Object.values(json).filter(x => x?.checked).length
-
- await getEnvironment()
- admin.update(store => {
- store.loaded = true
- store.checklist = json
- store.onboardingProgress = (completedSteps / totalSteps) * 100
- return store
- })
- } catch (err) {
- admin.update(store => {
- store.checklist = null
- return store
- })
- }
+ const tenantId = get(auth).tenantId
+ const checklist = await API.getChecklist(tenantId)
+ const totalSteps = Object.keys(checklist).length
+ const completedSteps = Object.values(checklist).filter(
+ x => x?.checked
+ ).length
+ await getEnvironment()
+ admin.update(store => {
+ store.loaded = true
+ store.checklist = checklist
+ store.onboardingProgress = (completedSteps / totalSteps) * 100
+ return store
+ })
}
async function checkImportComplete() {
- const response = await api.get(`/api/cloud/import/complete`)
- if (response.status === 200) {
- const json = await response.json()
- admin.update(store => {
- store.importComplete = json ? json.imported : false
- return store
- })
- }
+ const result = await API.checkImportComplete()
+ admin.update(store => {
+ store.importComplete = result ? result.imported : false
+ return store
+ })
}
async function getEnvironment() {
- let multiTenancyEnabled = false
- let cloud = false
- let disableAccountPortal = false
- let accountPortalUrl = ""
- let isDev = false
- try {
- const response = await api.get(`/api/system/environment`)
- const json = await response.json()
- multiTenancyEnabled = json.multiTenancy
- cloud = json.cloud
- disableAccountPortal = json.disableAccountPortal
- accountPortalUrl = json.accountPortalUrl
- isDev = json.isDev
- } catch (err) {
- // just let it stay disabled
- }
+ const environment = await API.getEnvironment()
admin.update(store => {
- store.multiTenancy = multiTenancyEnabled
- store.cloud = cloud
- store.disableAccountPortal = disableAccountPortal
- store.accountPortalUrl = accountPortalUrl
- store.isDev = isDev
+ store.multiTenancy = environment.multiTenancy
+ store.cloud = environment.cloud
+ store.disableAccountPortal = environment.disableAccountPortal
+ store.accountPortalUrl = environment.accountPortalUrl
+ store.isDev = environment.isDev
return store
})
}
diff --git a/packages/builder/src/stores/portal/apps.js b/packages/builder/src/stores/portal/apps.js
index de944c057d..b8fb8c5670 100644
--- a/packages/builder/src/stores/portal/apps.js
+++ b/packages/builder/src/stores/portal/apps.js
@@ -1,7 +1,6 @@
import { writable } from "svelte/store"
-import { get } from "builderStore/api"
import { AppStatus } from "../../constants"
-import api from "../../builderStore/api"
+import { API } from "api"
const extractAppId = id => {
const split = id?.split("_") || []
@@ -12,77 +11,67 @@ export function createAppStore() {
const store = writable([])
async function load() {
- try {
- const res = await get(`/api/applications?status=all`)
- const json = await res.json()
- if (res.ok && Array.isArray(json)) {
- // Merge apps into one sensible list
- let appMap = {}
- let devApps = json.filter(app => app.status === AppStatus.DEV)
- let deployedApps = json.filter(app => app.status === AppStatus.DEPLOYED)
+ const json = await API.getApps()
+ if (Array.isArray(json)) {
+ // Merge apps into one sensible list
+ let appMap = {}
+ let devApps = json.filter(app => app.status === AppStatus.DEV)
+ let deployedApps = json.filter(app => app.status === AppStatus.DEPLOYED)
- // First append all dev app version
- devApps.forEach(app => {
- const id = extractAppId(app.appId)
- appMap[id] = {
- ...app,
- devId: app.appId,
- devRev: app._rev,
- }
- })
+ // First append all dev app version
+ devApps.forEach(app => {
+ const id = extractAppId(app.appId)
+ appMap[id] = {
+ ...app,
+ devId: app.appId,
+ devRev: app._rev,
+ }
+ })
- // Then merge with all prod app versions
- deployedApps.forEach(app => {
- const id = extractAppId(app.appId)
+ // Then merge with all prod app versions
+ deployedApps.forEach(app => {
+ const id = extractAppId(app.appId)
- // Skip any deployed apps which don't have a dev counterpart
- if (!appMap[id]) {
- return
- }
+ // Skip any deployed apps which don't have a dev counterpart
+ if (!appMap[id]) {
+ return
+ }
- appMap[id] = {
- ...appMap[id],
- ...app,
- prodId: app.appId,
- prodRev: app._rev,
- }
- })
+ appMap[id] = {
+ ...appMap[id],
+ ...app,
+ prodId: app.appId,
+ prodRev: app._rev,
+ }
+ })
- // Transform into an array and clean up
- const apps = Object.values(appMap)
- apps.forEach(app => {
- app.appId = extractAppId(app.devId)
- delete app._id
- delete app._rev
- })
- store.set(apps)
- } else {
- store.set([])
- }
- return json
- } catch (error) {
+ // Transform into an array and clean up
+ const apps = Object.values(appMap)
+ apps.forEach(app => {
+ app.appId = extractAppId(app.devId)
+ delete app._id
+ delete app._rev
+ })
+ store.set(apps)
+ } else {
store.set([])
}
}
async function update(appId, value) {
- console.log({ value })
- const response = await api.put(`/api/applications/${appId}`, { ...value })
- if (response.status === 200) {
- store.update(state => {
- const updatedAppIndex = state.findIndex(
- app => app.instance._id === appId
- )
- if (updatedAppIndex !== -1) {
- let updatedApp = state[updatedAppIndex]
- updatedApp = { ...updatedApp, ...value }
- state.apps = state.splice(updatedAppIndex, 1, updatedApp)
- }
- return state
- })
- } else {
- throw new Error("Error updating name")
- }
+ await API.saveAppMetadata({
+ appId,
+ metadata: value,
+ })
+ store.update(state => {
+ const updatedAppIndex = state.findIndex(app => app.instance._id === appId)
+ if (updatedAppIndex !== -1) {
+ let updatedApp = state[updatedAppIndex]
+ updatedApp = { ...updatedApp, ...value }
+ state.apps = state.splice(updatedAppIndex, 1, updatedApp)
+ }
+ return state
+ })
}
return {
diff --git a/packages/builder/src/stores/portal/auth.js b/packages/builder/src/stores/portal/auth.js
index c4197a89c0..d66e901163 100644
--- a/packages/builder/src/stores/portal/auth.js
+++ b/packages/builder/src/stores/portal/auth.js
@@ -1,5 +1,5 @@
import { derived, writable, get } from "svelte/store"
-import api from "../../builderStore/api"
+import { API } from "api"
import { admin } from "stores/portal"
import analytics from "analytics"
@@ -54,18 +54,25 @@ export function createAuthStore() {
})
if (user) {
- analytics.activate().then(() => {
- analytics.identify(user._id, user)
- analytics.showChat({
- email: user.email,
- created_at: (user.createdAt || Date.now()) / 1000,
- name: user.account?.name,
- user_id: user._id,
- tenant: user.tenantId,
- "Company size": user.account?.size,
- "Job role": user.account?.profession,
+ analytics
+ .activate()
+ .then(() => {
+ analytics.identify(user._id, user)
+ analytics.showChat({
+ email: user.email,
+ created_at: (user.createdAt || Date.now()) / 1000,
+ name: user.account?.name,
+ user_id: user._id,
+ tenant: user.tenantId,
+ "Company size": user.account?.size,
+ "Job role": user.account?.profession,
+ })
+ })
+ .catch(() => {
+ // This request may fail due to browser extensions blocking requests
+ // containing the word analytics, so we don't want to spam users with
+ // an error here.
})
- })
}
}
@@ -83,7 +90,7 @@ export function createAuthStore() {
}
async function setInitInfo(info) {
- await api.post(`/api/global/auth/init`, info)
+ await API.setInitInfo(info)
auth.update(store => {
store.initInfo = info
return store
@@ -91,7 +98,7 @@ export function createAuthStore() {
return info
}
- async function setPostLogout() {
+ function setPostLogout() {
auth.update(store => {
store.postLogout = true
return store
@@ -99,13 +106,12 @@ export function createAuthStore() {
}
async function getInitInfo() {
- const response = await api.get(`/api/global/auth/init`)
- const json = response.json()
+ const info = await API.getInitInfo()
auth.update(store => {
- store.initInfo = json
+ store.initInfo = info
return store
})
- return json
+ return info
}
const actions = {
@@ -120,76 +126,51 @@ export function createAuthStore() {
await setOrganisation(tenantId)
},
getSelf: async () => {
- const response = await api.get("/api/global/users/self")
- if (response.status !== 200) {
+ // We need to catch this locally as we never want this to fail, even
+ // though normally we never want to swallow API errors at the store level.
+ // We're either logged in or we aren't.
+ // We also need to always update the loaded flag.
+ try {
+ const user = await API.fetchBuilderSelf()
+ setUser(user)
+ } catch (error) {
setUser(null)
- } else {
- const json = await response.json()
- setUser(json)
}
},
login: async creds => {
const tenantId = get(store).tenantId
- const response = await api.post(
- `/api/global/auth/${tenantId}/login`,
- creds
- )
- if (response.status === 200) {
- await actions.getSelf()
- } else {
- const json = await response.json()
- throw new Error(json.message ? json.message : "Invalid credentials")
- }
+ await API.logIn({
+ username: creds.username,
+ password: creds.password,
+ tenantId,
+ })
+ await actions.getSelf()
},
logout: async () => {
- const response = await api.post(`/api/global/auth/logout`)
- if (response.status !== 200) {
- throw "Unable to create logout"
- }
- await response.json()
- await setInitInfo({})
setUser(null)
setPostLogout()
+ await API.logOut()
+ await setInitInfo({})
},
updateSelf: async fields => {
const newUser = { ...get(auth).user, ...fields }
- const response = await api.post("/api/global/users/self", newUser)
- if (response.status === 200) {
- setUser(newUser)
- } else {
- throw "Unable to update user details"
- }
+ await API.updateSelf(newUser)
+ setUser(newUser)
},
forgotPassword: async email => {
const tenantId = get(store).tenantId
- const response = await api.post(`/api/global/auth/${tenantId}/reset`, {
+ await API.requestForgotPassword({
+ tenantId,
email,
})
- if (response.status !== 200) {
- throw "Unable to send email with reset link"
- }
- await response.json()
},
- resetPassword: async (password, code) => {
+ resetPassword: async (password, resetCode) => {
const tenantId = get(store).tenantId
- const response = await api.post(
- `/api/global/auth/${tenantId}/reset/update`,
- {
- password,
- resetCode: code,
- }
- )
- if (response.status !== 200) {
- throw "Unable to reset password"
- }
- await response.json()
- },
- createUser: async user => {
- const response = await api.post(`/api/global/users`, user)
- if (response.status !== 200) {
- throw "Unable to create user"
- }
- await response.json()
+ await API.resetPassword({
+ tenantId,
+ password,
+ resetCode,
+ })
},
}
diff --git a/packages/builder/src/stores/portal/email.js b/packages/builder/src/stores/portal/email.js
index a015480141..2e222d34c4 100644
--- a/packages/builder/src/stores/portal/email.js
+++ b/packages/builder/src/stores/portal/email.js
@@ -1,5 +1,5 @@
import { writable } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
export function createEmailStore() {
const store = writable({})
@@ -8,14 +8,9 @@ export function createEmailStore() {
subscribe: store.subscribe,
templates: {
fetch: async () => {
- // fetch the email template definitions
- const response = await api.get(`/api/global/template/definitions`)
- const definitions = await response.json()
-
- // fetch the email templates themselves
- const templatesResponse = await api.get(`/api/global/template/email`)
- const templates = await templatesResponse.json()
-
+ // Fetch the email template definitions and templates
+ const definitions = await API.getEmailTemplateDefinitions()
+ const templates = await API.getEmailTemplates()
store.set({
definitions,
templates,
@@ -23,15 +18,12 @@ export function createEmailStore() {
},
save: async template => {
// Save your template config
- const response = await api.post(`/api/global/template`, template)
- const json = await response.json()
- if (response.status !== 200) throw new Error(json.message)
- template._rev = json._rev
- template._id = json._id
-
+ const savedTemplate = await API.saveEmailTemplate(template)
+ template._rev = savedTemplate._rev
+ template._id = savedTemplate._id
store.update(state => {
const currentIdx = state.templates.findIndex(
- template => template.purpose === json.purpose
+ template => template.purpose === savedTemplate.purpose
)
state.templates.splice(currentIdx, 1, template)
return state
diff --git a/packages/builder/src/stores/portal/oidc.js b/packages/builder/src/stores/portal/oidc.js
index 3e3a7048ca..3a4b954753 100644
--- a/packages/builder/src/stores/portal/oidc.js
+++ b/packages/builder/src/stores/portal/oidc.js
@@ -1,5 +1,5 @@
import { writable, get } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
import { auth } from "stores/portal"
const OIDC_CONFIG = {
@@ -11,26 +11,20 @@ const OIDC_CONFIG = {
export function createOidcStore() {
const store = writable(OIDC_CONFIG)
const { set, subscribe } = store
-
- async function init() {
- const tenantId = get(auth).tenantId
- const res = await api.get(
- `/api/global/configs/public/oidc?tenantId=${tenantId}`
- )
- const json = await res.json()
-
- if (json.status === 400 || Object.keys(json).length === 0) {
- set(OIDC_CONFIG)
- } else {
- // Just use the first config for now. We will be support multiple logins buttons later on.
- set(...json)
- }
- }
-
return {
subscribe,
set,
- init,
+ init: async () => {
+ const tenantId = get(auth).tenantId
+ const config = await API.getOIDCConfig(tenantId)
+ if (Object.keys(config || {}).length) {
+ // Just use the first config for now.
+ // We will be support multiple logins buttons later on.
+ set(...config)
+ } else {
+ set(OIDC_CONFIG)
+ }
+ },
}
}
diff --git a/packages/builder/src/stores/portal/organisation.js b/packages/builder/src/stores/portal/organisation.js
index 21a110c54a..9709578fa2 100644
--- a/packages/builder/src/stores/portal/organisation.js
+++ b/packages/builder/src/stores/portal/organisation.js
@@ -1,5 +1,5 @@
import { writable, get } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
import { auth } from "stores/portal"
const DEFAULT_CONFIG = {
@@ -19,35 +19,23 @@ export function createOrganisationStore() {
async function init() {
const tenantId = get(auth).tenantId
- const res = await api.get(`/api/global/configs/public?tenantId=${tenantId}`)
- const json = await res.json()
-
- if (json.status === 400) {
- set(DEFAULT_CONFIG)
- } else {
- set({ ...DEFAULT_CONFIG, ...json.config, _rev: json._rev })
- }
+ const tenant = await API.getTenantConfig(tenantId)
+ set({ ...DEFAULT_CONFIG, ...tenant.config, _rev: tenant._rev })
}
async function save(config) {
- // delete non-persisted fields
+ // Delete non-persisted fields
const storeConfig = get(store)
delete storeConfig.oidc
delete storeConfig.google
delete storeConfig.oidcCallbackUrl
delete storeConfig.googleCallbackUrl
-
- const res = await api.post("/api/global/configs", {
+ await API.saveConfig({
type: "settings",
config: { ...get(store), ...config },
_rev: get(store)._rev,
})
- const json = await res.json()
- if (json.status) {
- return json
- }
await init()
- return { status: 200 }
}
return {
diff --git a/packages/builder/src/stores/portal/templates.js b/packages/builder/src/stores/portal/templates.js
index b82ecd70e2..904e9cfa8e 100644
--- a/packages/builder/src/stores/portal/templates.js
+++ b/packages/builder/src/stores/portal/templates.js
@@ -1,18 +1,15 @@
import { writable } from "svelte/store"
-import api from "builderStore/api"
+import { API } from "api"
export function templatesStore() {
const { subscribe, set } = writable([])
- async function load() {
- const response = await api.get("/api/templates?type=app")
- const json = await response.json()
- set(json)
- }
-
return {
subscribe,
- load,
+ load: async () => {
+ const templates = await API.getAppTemplates()
+ set(templates)
+ },
}
}
diff --git a/packages/builder/src/stores/portal/users.js b/packages/builder/src/stores/portal/users.js
index 9a3df120e0..cebf03d4c0 100644
--- a/packages/builder/src/stores/portal/users.js
+++ b/packages/builder/src/stores/portal/users.js
@@ -1,38 +1,28 @@
import { writable } from "svelte/store"
-import api, { post } from "builderStore/api"
+import { API } from "api"
import { update } from "lodash"
export function createUsersStore() {
const { subscribe, set } = writable([])
async function init() {
- const response = await api.get(`/api/global/users`)
- const json = await response.json()
- set(json)
+ const users = await API.getUsers()
+ set(users)
}
async function invite({ email, builder, admin }) {
- const body = { email, userInfo: {} }
- if (admin) {
- body.userInfo.admin = {
- global: true,
- }
- }
- if (builder) {
- body.userInfo.builder = {
- global: true,
- }
- }
- const response = await api.post(`/api/global/users/invite`, body)
- return await response.json()
+ await API.inviteUser({
+ email,
+ builder,
+ admin,
+ })
}
async function acceptInvite(inviteCode, password) {
- const response = await api.post("/api/global/users/invite/accept", {
+ await API.acceptInvite({
inviteCode,
password,
})
- return await response.json()
}
async function create({
@@ -56,29 +46,17 @@ export function createUsersStore() {
if (admin) {
body.admin = { global: true }
}
- const response = await api.post("/api/global/users", body)
+ await API.saveUser(body)
await init()
- return await response.json()
}
async function del(id) {
- const response = await api.delete(`/api/global/users/${id}`)
+ await API.deleteUser(id)
update(users => users.filter(user => user._id !== id))
- const json = await response.json()
- return {
- ...json,
- status: response.status,
- }
}
async function save(data) {
- try {
- const res = await post(`/api/global/users`, data)
- return await res.json()
- } catch (error) {
- console.log(error)
- return error
- }
+ await API.saveUser(data)
}
return {
diff --git a/packages/builder/vite.config.js b/packages/builder/vite.config.js
index d66d677555..47fed87e1e 100644
--- a/packages/builder/vite.config.js
+++ b/packages/builder/vite.config.js
@@ -15,6 +15,7 @@ export default ({ mode }) => {
build: {
minify: isProduction,
outDir: "../server/builder",
+ sourcemap: !isProduction,
},
plugins: [
svelte({
@@ -56,6 +57,10 @@ export default ({ mode }) => {
find: "stores",
replacement: path.resolve("./src/stores"),
},
+ {
+ find: "api",
+ replacement: path.resolve("./src/api.js"),
+ },
{
find: "constants",
replacement: path.resolve("./src/constants"),
diff --git a/packages/builder/yarn.lock b/packages/builder/yarn.lock
index 6143fbf010..0fd9e371c0 100644
--- a/packages/builder/yarn.lock
+++ b/packages/builder/yarn.lock
@@ -3,100 +3,101 @@
"@adobe/spectrum-css-workflow-icons@^1.2.1":
- "integrity" "sha512-uVgekyBXnOVkxp+CUssjN/gefARtudZC8duEn1vm0lBQFwGRZFlDEzU1QC+aIRWCrD1Z8OgRpmBYlSZ7QS003w=="
- "resolved" "https://registry.npmjs.org/@adobe/spectrum-css-workflow-icons/-/spectrum-css-workflow-icons-1.2.1.tgz"
- "version" "1.2.1"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@adobe/spectrum-css-workflow-icons/-/spectrum-css-workflow-icons-1.2.1.tgz#7e2cb3fcfb5c8b12d7275afafbb6ec44913551b4"
+ integrity sha512-uVgekyBXnOVkxp+CUssjN/gefARtudZC8duEn1vm0lBQFwGRZFlDEzU1QC+aIRWCrD1Z8OgRpmBYlSZ7QS003w==
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13":
- "integrity" "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g=="
- "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz"
- "version" "7.12.13"
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
+ integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
dependencies:
- "@babel/highlight" "^7.12.13"
+ "@babel/highlight" "^7.16.0"
-"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8":
- "integrity" "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ=="
- "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz"
- "version" "7.13.12"
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4":
+ version "7.16.4"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e"
+ integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==
-"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.14", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5":
- "integrity" "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA=="
- "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz"
- "version" "7.13.14"
+"@babel/core@^7.1.0", "@babel/core@^7.12.14", "@babel/core@^7.12.3", "@babel/core@^7.7.5":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4"
+ integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==
dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/generator" "^7.13.9"
- "@babel/helper-compilation-targets" "^7.13.13"
- "@babel/helper-module-transforms" "^7.13.14"
- "@babel/helpers" "^7.13.10"
- "@babel/parser" "^7.13.13"
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.13.13"
- "@babel/types" "^7.13.14"
- "convert-source-map" "^1.7.0"
- "debug" "^4.1.0"
- "gensync" "^1.0.0-beta.2"
- "json5" "^2.1.2"
- "semver" "^6.3.0"
- "source-map" "^0.5.0"
+ "@babel/code-frame" "^7.16.0"
+ "@babel/generator" "^7.16.0"
+ "@babel/helper-compilation-targets" "^7.16.0"
+ "@babel/helper-module-transforms" "^7.16.0"
+ "@babel/helpers" "^7.16.0"
+ "@babel/parser" "^7.16.0"
+ "@babel/template" "^7.16.0"
+ "@babel/traverse" "^7.16.0"
+ "@babel/types" "^7.16.0"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
+ source-map "^0.5.0"
-"@babel/generator@^7.13.9":
- "integrity" "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw=="
- "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz"
- "version" "7.13.9"
+"@babel/generator@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2"
+ integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==
dependencies:
- "@babel/types" "^7.13.0"
- "jsesc" "^2.5.1"
- "source-map" "^0.5.0"
+ "@babel/types" "^7.16.0"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
-"@babel/helper-annotate-as-pure@^7.12.13":
- "integrity" "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw=="
- "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz"
- "version" "7.12.13"
+"@babel/helper-annotate-as-pure@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d"
+ integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==
dependencies:
- "@babel/types" "^7.12.13"
+ "@babel/types" "^7.16.0"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13":
- "integrity" "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA=="
- "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz"
- "version" "7.12.13"
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882"
+ integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==
dependencies:
- "@babel/helper-explode-assignable-expression" "^7.12.13"
- "@babel/types" "^7.12.13"
+ "@babel/helper-explode-assignable-expression" "^7.16.0"
+ "@babel/types" "^7.16.0"
-"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8":
- "integrity" "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ=="
- "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz"
- "version" "7.13.13"
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3":
+ version "7.16.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0"
+ integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==
dependencies:
- "@babel/compat-data" "^7.13.12"
- "@babel/helper-validator-option" "^7.12.17"
- "browserslist" "^4.14.5"
- "semver" "^6.3.0"
+ "@babel/compat-data" "^7.16.0"
+ "@babel/helper-validator-option" "^7.14.5"
+ browserslist "^4.17.5"
+ semver "^6.3.0"
-"@babel/helper-create-class-features-plugin@^7.13.0":
- "integrity" "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw=="
- "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz"
- "version" "7.13.11"
+"@babel/helper-create-class-features-plugin@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b"
+ integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==
dependencies:
- "@babel/helper-function-name" "^7.12.13"
- "@babel/helper-member-expression-to-functions" "^7.13.0"
- "@babel/helper-optimise-call-expression" "^7.12.13"
- "@babel/helper-replace-supers" "^7.13.0"
- "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ "@babel/helper-function-name" "^7.16.0"
+ "@babel/helper-member-expression-to-functions" "^7.16.0"
+ "@babel/helper-optimise-call-expression" "^7.16.0"
+ "@babel/helper-replace-supers" "^7.16.0"
+ "@babel/helper-split-export-declaration" "^7.16.0"
-"@babel/helper-create-regexp-features-plugin@^7.12.13":
- "integrity" "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg=="
- "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz"
- "version" "7.12.17"
+"@babel/helper-create-regexp-features-plugin@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff"
+ integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.12.13"
- "regexpu-core" "^4.7.1"
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ regexpu-core "^4.7.1"
-"@babel/helper-define-polyfill-provider@^0.1.5":
- "integrity" "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg=="
- "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz"
- "version" "0.1.5"
+"@babel/helper-define-polyfill-provider@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971"
+ integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==
dependencies:
"@babel/helper-compilation-targets" "^7.13.0"
"@babel/helper-module-imports" "^7.12.13"
@@ -987,67 +988,115 @@
"shortid" "^2.2.15"
"svelte-spa-router" "^3.0.5"
-"@budibase/colorpicker@1.1.2":
- "integrity" "sha512-2PlZBVkATDqDC4b4Ri8Xi8X3OxhuHOGfmZwtXbZL38lNIeofaQT3Qyc1ECzEY5N+HrdGrWhY9EnliF6QM+LIuA=="
- "resolved" "https://registry.npmjs.org/@budibase/colorpicker/-/colorpicker-1.1.2.tgz"
- "version" "1.1.2"
+"@budibase/bbui@^1.0.58-alpha.1", "@budibase/bbui@^1.0.62":
+ version "1.0.62"
+ resolved "https://registry.yarnpkg.com/@budibase/bbui/-/bbui-1.0.62.tgz#985e64f428ff4fa66e936f803abb2368bc2813e0"
+ integrity sha512-nvzo5li6/UQaIl5MMkinu4gUAZkv7HqWHXrFKWbzTt4xBRO0D8C+QgH62X5ZRBTFd34jIEsNJP1isJl38LvESQ==
+ dependencies:
+ "@adobe/spectrum-css-workflow-icons" "^1.2.1"
+ "@spectrum-css/actionbutton" "^1.0.1"
+ "@spectrum-css/actiongroup" "^1.0.1"
+ "@spectrum-css/avatar" "^3.0.2"
+ "@spectrum-css/button" "^3.0.1"
+ "@spectrum-css/buttongroup" "^3.0.2"
+ "@spectrum-css/checkbox" "^3.0.2"
+ "@spectrum-css/dialog" "^3.0.1"
+ "@spectrum-css/divider" "^1.0.3"
+ "@spectrum-css/dropzone" "^3.0.2"
+ "@spectrum-css/fieldgroup" "^3.0.2"
+ "@spectrum-css/fieldlabel" "^3.0.1"
+ "@spectrum-css/icon" "^3.0.1"
+ "@spectrum-css/illustratedmessage" "^3.0.2"
+ "@spectrum-css/inlinealert" "^2.0.1"
+ "@spectrum-css/inputgroup" "^3.0.2"
+ "@spectrum-css/label" "^2.0.10"
+ "@spectrum-css/link" "^3.1.1"
+ "@spectrum-css/menu" "^3.0.1"
+ "@spectrum-css/modal" "^3.0.1"
+ "@spectrum-css/pagination" "^3.0.3"
+ "@spectrum-css/picker" "^1.0.1"
+ "@spectrum-css/popover" "^3.0.1"
+ "@spectrum-css/progressbar" "^1.0.2"
+ "@spectrum-css/progresscircle" "^1.0.2"
+ "@spectrum-css/radio" "^3.0.2"
+ "@spectrum-css/search" "^3.0.2"
+ "@spectrum-css/sidenav" "^3.0.2"
+ "@spectrum-css/statuslight" "^3.0.2"
+ "@spectrum-css/stepper" "^3.0.3"
+ "@spectrum-css/switch" "^1.0.2"
+ "@spectrum-css/table" "^3.0.1"
+ "@spectrum-css/tabs" "^3.0.1"
+ "@spectrum-css/tags" "^3.0.2"
+ "@spectrum-css/textfield" "^3.0.1"
+ "@spectrum-css/toast" "^3.0.1"
+ "@spectrum-css/tooltip" "^3.0.3"
+ "@spectrum-css/treeview" "^3.0.2"
+ "@spectrum-css/typography" "^3.0.1"
+ "@spectrum-css/underlay" "^2.0.9"
+ "@spectrum-css/vars" "^3.0.1"
+ dayjs "^1.10.4"
+ easymde "^2.16.1"
+ svelte-flatpickr "^3.2.3"
+ svelte-portal "^1.0.0"
+
+"@budibase/client@^1.0.58-alpha.1":
+ version "1.0.62"
+ resolved "https://registry.yarnpkg.com/@budibase/client/-/client-1.0.62.tgz#a737a94390149da57bb27b2b49bff94053e7660c"
+ integrity sha512-sX3VmOf9bpGmfkxqKfEvVrpD5X9BEsqoJ9jyjvy3IMHfIQ0Y+Yr0ZAJL25nrh33JL16Ir4CtDSCihdE7qtbA7Q==
+ dependencies:
+ "@budibase/bbui" "^1.0.62"
+ "@budibase/frontend-core" "^1.0.62"
+ "@budibase/string-templates" "^1.0.62"
+ regexparam "^1.3.0"
+ rollup-plugin-polyfill-node "^0.8.0"
+ shortid "^2.2.15"
+ svelte-spa-router "^3.0.5"
+
+"@budibase/frontend-core@^1.0.58-alpha.1", "@budibase/frontend-core@^1.0.62":
+ version "1.0.62"
+ resolved "https://registry.yarnpkg.com/@budibase/frontend-core/-/frontend-core-1.0.62.tgz#8d7436bb22a327ba0f1343805323c33c87d44d84"
+ integrity sha512-LF028SoFAXaHajNr3UYiKuBl+h3h4kDNdu2NfGQjkU96kZq4Aqq2Ey174jj2wT6k97kEV7ht2pBTR4jU7s4aWQ==
+ dependencies:
+ "@budibase/bbui" "^1.0.62"
+ lodash "^4.17.21"
+ svelte "^3.46.2"
"@budibase/handlebars-helpers@^0.11.7":
- "integrity" "sha512-PvGHAv22cWSFExs1kc0WglwsmCEUEOqWvSp6JCFZwtc3qAAr5yMfLK8WGVQ63ALvyzWZiyxF+yrlzeeaohCMJw=="
- "resolved" "https://registry.npmjs.org/@budibase/handlebars-helpers/-/handlebars-helpers-0.11.7.tgz"
- "version" "0.11.7"
+ version "0.11.8"
+ resolved "https://registry.yarnpkg.com/@budibase/handlebars-helpers/-/handlebars-helpers-0.11.8.tgz#6953d29673a8c5c407e096c0a84890465c7ce841"
+ integrity sha512-ggWJUt0GqsHFAEup5tlWlcrmYML57nKhpNGGLzVsqXVYN8eVmf3xluYmmMe7fDYhQH0leSprrdEXmsdFQF3HAQ==
dependencies:
- "array-sort" "^1.0.0"
- "define-property" "^2.0.2"
- "extend-shallow" "^3.0.2"
- "for-in" "^1.0.2"
- "get-object" "^0.2.0"
- "get-value" "^3.0.1"
- "handlebars" "^4.7.7"
- "handlebars-utils" "^1.0.6"
- "has-value" "^2.0.2"
- "helper-date" "^1.0.1"
- "helper-markdown" "^1.0.0"
- "helper-md" "^0.2.2"
- "html-tag" "^2.0.0"
- "is-even" "^1.0.0"
- "is-glob" "^4.0.1"
- "kind-of" "^6.0.3"
- "micromatch" "^3.1.5"
- "relative" "^3.0.2"
- "striptags" "^3.1.1"
- "to-gfm-code-block" "^0.1.1"
- "year" "^0.2.1"
+ array-sort "^1.0.0"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ for-in "^1.0.2"
+ get-object "^0.2.0"
+ get-value "^3.0.1"
+ handlebars "^4.7.7"
+ handlebars-utils "^1.0.6"
+ has-value "^2.0.2"
+ helper-md "^0.2.2"
+ html-tag "^2.0.0"
+ is-even "^1.0.0"
+ is-glob "^4.0.1"
+ kind-of "^6.0.3"
+ micromatch "^3.1.5"
+ relative "^3.0.2"
+ striptags "^3.1.1"
+ to-gfm-code-block "^0.1.1"
+ year "^0.2.1"
-"@budibase/standard-components@^0.9.139":
- "integrity" "sha512-Av0u9Eq2jerjhG6Atta+c0mOQGgE5K0QI3cm+8s/3Vki6/PXkO1YL5Alo3BOn9ayQAVZ/xp4rtZPuN/rzRibHw=="
- "resolved" "https://registry.npmjs.org/@budibase/standard-components/-/standard-components-0.9.139.tgz"
- "version" "0.9.139"
- dependencies:
- "@budibase/bbui" "^0.9.139"
- "@spectrum-css/button" "^3.0.3"
- "@spectrum-css/card" "^3.0.3"
- "@spectrum-css/divider" "^1.0.3"
- "@spectrum-css/link" "^3.1.3"
- "@spectrum-css/page" "^3.0.1"
- "@spectrum-css/typography" "^3.0.2"
- "@spectrum-css/vars" "^3.0.1"
- "apexcharts" "^3.22.1"
- "dayjs" "^1.10.5"
- "svelte-apexcharts" "^1.0.2"
- "svelte-flatpickr" "^3.1.0"
-
-"@budibase/string-templates@^1.0.46", "@budibase/string-templates@^1.0.46-alpha.3":
- "integrity" "sha512-t4ZAUkSz2XatjAN0faex5ovmD3mFz672lV/aBk7tfLFzZiKlWjngqdwpLLQNnsqeGvYo75JP2J06j86SX6O83w=="
- "resolved" "https://registry.npmjs.org/@budibase/string-templates/-/string-templates-1.0.46.tgz"
- "version" "1.0.46"
+"@budibase/string-templates@^1.0.58-alpha.1", "@budibase/string-templates@^1.0.62":
+ version "1.0.62"
+ resolved "https://registry.yarnpkg.com/@budibase/string-templates/-/string-templates-1.0.62.tgz#f78ddde139a3f67e538c58b7e866244d1dbedfe8"
+ integrity sha512-0ujwPgJ6y54Wxyx6PH6qvg7ufioo+YtWtncrSDZ1bXdFX2uFHxrrHDYIQEG8c4e61ub/tvNESNAB/4Gb3IN4uA==
dependencies:
"@budibase/handlebars-helpers" "^0.11.7"
- "dayjs" "^1.10.4"
- "handlebars" "^4.7.6"
- "handlebars-utils" "^1.0.6"
- "lodash" "^4.17.20"
- "vm2" "^3.9.4"
+ dayjs "^1.10.4"
+ handlebars "^4.7.6"
+ handlebars-utils "^1.0.6"
+ lodash "^4.17.20"
+ vm2 "^3.9.4"
"@cnakazawa/watch@^1.0.3":
version "1.0.4"
@@ -1331,6 +1380,15 @@
"@nodelib/fs.scandir" "2.1.4"
"fastq" "^1.6.0"
+"@rollup/plugin-inject@^4.0.0":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz#fbeee66e9a700782c4f65c8b0edbafe58678fbc2"
+ integrity sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ estree-walker "^2.0.1"
+ magic-string "^0.25.7"
+
"@rollup/plugin-replace@^2.4.2":
"integrity" "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="
"resolved" "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz"
@@ -1466,112 +1524,214 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
-"@spectrum-css/actionbutton@^1.0.1", "@spectrum-css/actionbutton@^1.1.1-beta.0":
- "integrity" "sha512-gM0Mo1A+rV9osUYoI272Do8qgFDqosmLxyD94eEJUxFRi7IU7+RpdFA+CQv9R5sonz6dDKcjcE1gTrl5XO+6Tg=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/actionbutton/-/actionbutton-1.1.2.tgz"
- "version" "1.1.2"
+"@spectrum-css/actionbutton@^1.0.1":
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/actionbutton/-/actionbutton-1.1.4.tgz#1cef30a604fd6b923b8e1f7c6bb23bc9525d0ad7"
+ integrity sha512-tdECxiDk7npJsVf280hdi2PXHN4PnAyOPvSw1HKnOBjR0F8A7O2FGvBewRSd75yqraPFKCxZ0kH6fMH5OSNSuA==
"@spectrum-css/actiongroup@^1.0.1":
- "integrity" "sha512-NlB9Q4ZlWixXxymoPIYG6g2hkwAGKFodHWPFfxHD8ddkjXWRB9G2akUP7cfsJ4DcYn4VisUORCOYQwqDiSmboQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/actiongroup/-/actiongroup-1.0.3.tgz"
- "version" "1.0.3"
-
-"@spectrum-css/asset@^3.0.1":
- "integrity" "sha512-QX3/ipzHu7b8Dq9bVZlbg+QfzzekgWND4b+VLy1ghG7LQ6xCt8+hYYzN2S1ZeptMKz6bxRJtaN3/iiV2DHlA5g=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/asset/-/asset-3.0.11.tgz"
- "version" "3.0.11"
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/actiongroup/-/actiongroup-1.0.15.tgz#83e4ffc871715ce94b960487ee5f9ef975c49f35"
+ integrity sha512-igPV8TyeMz7jRm2xI8OVEEplh/pi8PGBrNyiWFxSJr/PN7LZ5DXTpQPhGX8mRo9i4fn/Y0tJ6EB5bkgToW51NA==
"@spectrum-css/avatar@^3.0.2":
- "integrity" "sha512-wEczvSqxttTWSiL3cOvXV/RmGRwSkw2w6+slcHhnf0kb7ovymMM+9oz8vvEpEsSeo5u598bc+7ktrKFpAd6soQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/avatar/-/avatar-3.0.2.tgz"
- "version" "3.0.2"
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/avatar/-/avatar-3.0.2.tgz#4f1826223eae330e64b6d3cc899e9bc2e98dac95"
+ integrity sha512-wEczvSqxttTWSiL3cOvXV/RmGRwSkw2w6+slcHhnf0kb7ovymMM+9oz8vvEpEsSeo5u598bc+7ktrKFpAd6soQ==
-"@spectrum-css/button@^3.0.1", "@spectrum-css/button@^3.0.3":
- "integrity" "sha512-6CnLPqqtaU/PcSSIGeGRi0iFIIxIUByYLKFO6zn5NEUc12KQ28dJ4PLwB6WBa0L8vRoAGlnWWH2ZZweTijbXgg=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/button/-/button-3.0.3.tgz"
- "version" "3.0.3"
+"@spectrum-css/button@^3.0.1":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/button/-/button-3.0.3.tgz#2df1efaab6c7e0b3b06cb4b59e1eae59c7f1fc84"
+ integrity sha512-6CnLPqqtaU/PcSSIGeGRi0iFIIxIUByYLKFO6zn5NEUc12KQ28dJ4PLwB6WBa0L8vRoAGlnWWH2ZZweTijbXgg==
-"@spectrum-css/buttongroup@^3.0.1", "@spectrum-css/buttongroup@^3.0.2":
- "integrity" "sha512-eXl8U4QWMWXqyTu654FdQdEGnmczgOYlpIFSHyCMVjhtPqZp2xwnLFiGh6LKw+bLio6eeOZ0L+vpk1GcoYqgkw=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/buttongroup/-/buttongroup-3.0.3.tgz"
- "version" "3.0.3"
+"@spectrum-css/buttongroup@^3.0.2":
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/buttongroup/-/buttongroup-3.0.10.tgz#897ea04b3ffea389fc7fe5bf67a6d1f3454b774d"
+ integrity sha512-U7D24vgHYhlqOyaLJZ5LPskDAuD7cGZktmWvXtvLqG6RFyTr7JHn5oPRuo6mLzaggIHqCdJylOjZ4FHqT4LpTQ==
-"@spectrum-css/card@^3.0.3":
- "integrity" "sha512-+oKLUI2a0QmQP9EzySeq/G4FpUkkdaDNbuEbqCj2IkPMc/2v/nwzsPhh1fj2UIghGAiiUwXfPpzax1e8fyhQUg=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/card/-/card-3.0.3.tgz"
- "version" "3.0.3"
-
-"@spectrum-css/checkbox@^3.0.1", "@spectrum-css/checkbox@^3.0.11-beta.0", "@spectrum-css/checkbox@^3.0.2":
- "integrity" "sha512-5h+SxKCmeVHugvp6bZ0wuzW5nSYg0k7yUW00swNXlz3FY1IgbSLuKxpGE7id1D8tp5utfRquavJnON/F1yQSDA=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/checkbox/-/checkbox-3.0.12.tgz"
- "version" "3.0.12"
+"@spectrum-css/checkbox@^3.0.2":
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/checkbox/-/checkbox-3.0.13.tgz#9ee7dec804fbf3994d866b95a7b856377c1a93c7"
+ integrity sha512-D1/Ld144Gwep02wy5vJw6bJS8O1bQyjNNVbPv2jUOKhZQHPbdWbc+a9cNq504izqs+BCivbj7xC1BgRf1EP+VA==
"@spectrum-css/dialog@^3.0.1":
- "integrity" "sha512-AhmKgfRIVyTe3ABiJ8lLUQL34VB/H6fN16na2LlbDRJvyRMzkdN1Xf2i6U3f4OMd3qQ8Gm5xat4BvMxIQPBAUQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/dialog/-/dialog-3.0.3.tgz"
- "version" "3.0.3"
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/dialog/-/dialog-3.0.12.tgz#fc97e002ca768a3d99dd10cb6a135c2b06052004"
+ integrity sha512-50rbFa+9eUKT+3uYBX7CkmI7SbQ0Z3CAFwjyjai+itYZ8kf/FcHVFwcLjgrry9scUnKhexMs94kkr0gfQpPe8Q==
-"@spectrum-css/divider@^1.0.1", "@spectrum-css/divider@^1.0.3":
- "integrity" "sha512-Zy4Rn40w8UtzMh3wx/U9+CepSCpm1aOCGftHgWDub0XZuVTzh0c1WwyzTuLCx2Hf21z5VRGNiDh8bGEEzSbtNA=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/divider/-/divider-1.0.3.tgz"
- "version" "1.0.3"
+"@spectrum-css/divider@^1.0.3":
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/divider/-/divider-1.0.15.tgz#18faba79a32f9c3c0869a5476df6255d64c17a8b"
+ integrity sha512-rP6XnDBEwhG2P8CenLdSEN/vEa6lSovhtv5yf3gEfWG1TiYevMfq7kI5XDVNJWqoYMAbASXxDUkVylZRvMn4Fw==
dependencies:
- "@spectrum-css/vars" "^3.0.2"
+ "@spectrum-css/vars" "^6.1.0"
"@spectrum-css/dropzone@^3.0.2":
- "integrity" "sha512-ujrswdtB6bHigklyHsm6zomFd6rUnKJ3xVVRjroVF4+ouK4DxK5tX0iVd0EW6AOfOjx4Cc28uyFot3fpxp+MQw=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/dropzone/-/dropzone-3.0.3.tgz"
- "version" "3.0.3"
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/dropzone/-/dropzone-3.0.14.tgz#d601abd0bb9d6b4d349099f730c410fbdc8a3b86"
+ integrity sha512-N8i+gmDUAYhkQh3WIjKOew/XWFNJQGrq3YeZFGcucq6ER2PTYQG8hVOFEgNhfKnUdmufFmL2EH2Ax9BNXS5qkA==
"@spectrum-css/fieldgroup@^3.0.2":
- "integrity" "sha512-wXUXTXN1CPnR7M4Ltd+3uh7BfcNGUV1+Xe0/h0tCpq/j+S2Sd4xo7/pUMdU19sIDrAAtpEFp1tt+nouHcU5HGQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/fieldgroup/-/fieldgroup-3.0.3.tgz"
- "version" "3.0.3"
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/fieldgroup/-/fieldgroup-3.0.13.tgz#71bd1c8e0a5a2cfd14fa8124a5de28ff50133fbb"
+ integrity sha512-M60wb7JEhf+d4eKkD36m246oXLgZ7qBjHfteWEIKL1agVoGwtk1r9Et31JhMMztd2s1Epar8XKvzO52UWsrtBg==
"@spectrum-css/fieldlabel@^3.0.1":
- "integrity" "sha512-nEvIkEXCD5n4fW67Unq6Iu7VXoauEd/JGpfTY02VsC5p4FJLnwKfPDbJUuUsqClAxqw7nAsmXVKtn4zQFf5yPQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/fieldlabel/-/fieldlabel-3.0.3.tgz"
- "version" "3.0.3"
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/fieldlabel/-/fieldlabel-3.0.3.tgz#f73c04d20734d4718ffb620dc46458904685b449"
+ integrity sha512-nEvIkEXCD5n4fW67Unq6Iu7VXoauEd/JGpfTY02VsC5p4FJLnwKfPDbJUuUsqClAxqw7nAsmXVKtn4zQFf5yPQ==
-"@spectrum-css/icon@^3.0.1", "@spectrum-css/icon@^3.0.11-beta.0", "@spectrum-css/icon@^3.0.4":
- "integrity" "sha512-KV2ZMOlYx5Qh06FOSDu0CyE7TL6zQAyEMUag/TX7uuiPPY/037aULEh4VsiuZgaJMEwX7dfkFzu+/aGN6CLeog=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/icon/-/icon-3.0.12.tgz"
- "version" "3.0.12"
+"@spectrum-css/icon@^3.0.1":
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/icon/-/icon-3.0.13.tgz#32df9f6fef7fa4ad6fb5165968a5a247a5b774d1"
+ integrity sha512-aJmhAK6S8O6ePKF6ohfTcB3UiTi6Mpxi4L1z6/4M9y66ci+KcZsHXX7tyWmGfZsirx/QjaacESqQVbqHD0PJ5g==
-"@spectrum-css/illustratedmessage@^3.0.1", "@spectrum-css/illustratedmessage@^3.0.2":
- "integrity" "sha512-dqnE8X27bGcO0HN8+dYx8O4o0dNNIAqeivOzDHhe2El+V4dTzMrNIerF6G0NLm3GjVf6XliwmitsZK+K6FmbtA=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/illustratedmessage/-/illustratedmessage-3.0.2.tgz"
- "version" "3.0.2"
+"@spectrum-css/illustratedmessage@^3.0.2":
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/illustratedmessage/-/illustratedmessage-3.0.13.tgz#6cb2132f7b7c6077ccbde820bcb792c4c31df32f"
+ integrity sha512-pKWtWRoVOEP5LTsMPqbuoxfy8/mFlNkoj+cO7l0AgPFSqzJZcljjuHIKHc6Y8NvLpx6g2OfjD7e44oo3INyROg==
"@spectrum-css/inlinealert@^2.0.1":
- "integrity" "sha512-OpvvoWP02wWyCnF4IgG8SOPkXymovkC9cGtgMS1FdDubnG3tJZB/JeKTsRR9C9Vt3WBaOmISRdSKlZ4lC9CFzA=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/inlinealert/-/inlinealert-2.0.6.tgz"
- "version" "2.0.6"
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/inlinealert/-/inlinealert-2.0.6.tgz#4c5e923a1f56a96cc1adb30ef1f06ae04f2c6376"
+ integrity sha512-OpvvoWP02wWyCnF4IgG8SOPkXymovkC9cGtgMS1FdDubnG3tJZB/JeKTsRR9C9Vt3WBaOmISRdSKlZ4lC9CFzA==
"@spectrum-css/inputgroup@^3.0.2":
- "integrity" "sha512-FqRJTiLL7jiGfzDVXWUGVLqHryJjCcqQIrqAi+Tq0oenapzsBe2qc/zIrKgh2wtMI+NTIBLXTECvij3L1HlqAg=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/inputgroup/-/inputgroup-3.0.3.tgz"
- "version" "3.0.3"
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/inputgroup/-/inputgroup-3.0.8.tgz#fc23afc8a73c24d17249c9d2337e8b42085b298b"
+ integrity sha512-cmQWzFp0GU+4IMc8SSeVFdmQDlRUdPelXaQdKUR9mZuO2iYettg37s0lfBCeJyYkUNTagz0zP8O7A0iXfmeE6g==
"@spectrum-css/label@^2.0.10":
- "integrity" "sha512-xCbtEiQkZIlLdWFikuw7ifDCC21DOC/KMgVrrVJHXFc4KRQe9LTZSqmGF3tovm+CSq1adE59mYoTbojVQ9YuEQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/label/-/label-2.0.10.tgz"
- "version" "2.0.10"
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/label/-/label-2.0.10.tgz#2368651d7636a19385b5d300cdf6272db1916001"
+ integrity sha512-xCbtEiQkZIlLdWFikuw7ifDCC21DOC/KMgVrrVJHXFc4KRQe9LTZSqmGF3tovm+CSq1adE59mYoTbojVQ9YuEQ==
-"@spectrum-css/link@^3.1.1", "@spectrum-css/link@^3.1.3":
- "integrity" "sha512-8Pmy5d73MwKcATTPaj+fSrZYnIw7GmfX40AvpC1xx5LauOxsbUb4AVNp1kn2H8rrOBmxF7czyhoBBhEiv66QUg=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/link/-/link-3.1.3.tgz"
- "version" "3.1.3"
+"@spectrum-css/link@^3.1.1":
+ version "3.1.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/link/-/link-3.1.13.tgz#fc36ba9ee8ce5170624933c3f45f40bc4568da87"
+ integrity sha512-lCT1ik2+jfvYbKMr1lzr38ePxEFMVIxHJk4gMbU4aJekeKbiqFlstJg67xmBIw7lvK2/roqr/Q/kJVS10xsOTA==
"@spectrum-css/menu@^3.0.1":
- "integrity" "sha512-qKA9J/MrikNKIpCEHsAazG2vY3im5tjGCmo6p9Pdnu8/aQMsiuZDHZayukeCttJUZkrb9guDVL9OIHlK5RZvcQ=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/menu/-/menu-3.0.3.tgz"
- "version" "3.0.3"
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/menu/-/menu-3.0.13.tgz#fb4e7c68accc2ac9ef2e692f64a4815ca30a898a"
+ integrity sha512-zwv/vBGgk+sHqP/FXwILwIbSjBzqWExDV3Ef+8z1/voz3XYTj7lagD+fBM/sEn9X4+bgwMVcevt6g+OsFdQc+A==
"@spectrum-css/modal@^3.0.1":
- "integrity" "sha512-YnIivJhoaao7Otu+HV7sgebPyFbO6sd/oMvTN/Rb2wwgnaMnIIuIRdGandSrcgotN2uNgs+P0knG6mv/xA1/dg=="
- "resolved" "https://registry.npmjs.org/@spectrum-css/modal/-/modal-3.0.2.tgz"
- "version" "3.0.2"
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/modal/-/modal-3.0.12.tgz#e82913f9bae5c8b30571ada520343daaf67eb3bd"
+ integrity sha512-QvR6Y/u9TjQlnkzAg3p50wt9kxs+LR7b0MZhrvyuiUOqr1Wup+qiGBprAfV+VbBCmnmiNIrQTrKz/4KHE5KuCg==
+
+"@spectrum-css/page@^3.0.1":
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/page/-/page-3.0.8.tgz#001efa9e4c10095df9b2b37cf7d7d6eb60140190"
+ integrity sha512-naEGOyDv9zeK05oa8mZKdwenPILmHG9OTLyKcE8RwuYQDvb0EHcMGC54DOKtGJ5SMNMGCMdC4RwmYUYYKAhkNA==
+ dependencies:
+ "@spectrum-css/vars" "^4.3.0"
+
+"@spectrum-css/pagination@^3.0.3":
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/pagination/-/pagination-3.0.11.tgz#68d9f34fe8eb36bf922e41b11f49eac62ac2fc41"
+ integrity sha512-wjZr7NAcqHK6fxNIGKTYEVtAOJugJTbcz4d8K7DZuUDgBVwLJJHJBi4uJ4KrIRYliMWOvqWTZzCJLmmTfx4cyw==
+
+"@spectrum-css/picker@^1.0.1":
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/picker/-/picker-1.1.10.tgz#97d57fb9524970426d60dbfaa1d2f4d492137ba5"
+ integrity sha512-ZQMyL2M6XiiKmntI7cHBUBi4aP+cPUx0Du14MemZD/bLQbanjHaiiVT6tLiZakwydPlCSbzI8fvbsElKBEvhXQ==
+
+"@spectrum-css/popover@^3.0.1":
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/popover/-/popover-3.0.11.tgz#a7450c01bcf1609264b4a9df58821368b9e224d1"
+ integrity sha512-bzyNQJVw6Mn1EBelTaRlXCdd0ZfykNX9O6SHx3a+jXPYu8VBrRpHm0gsfWzPAz1etd1vj1CxwG/teQt4qvyZ/Q==
+
+"@spectrum-css/progressbar@^1.0.2":
+ version "1.0.16"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/progressbar/-/progressbar-1.0.16.tgz#3c94554c129f370cd2845723592107bea95e17de"
+ integrity sha512-CR1ODmkHZxb4U3Oh1Y2ozjicUFkhy16UPvQs+meF6s8EpKPgUCDuYZ3fC4TdllKbGMaEawj4q58BivOt3F31Yg==
+
+"@spectrum-css/progresscircle@^1.0.2":
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/progresscircle/-/progresscircle-1.0.12.tgz#2f58e36b0a980b8f9927daa517b353b7717273a6"
+ integrity sha512-nuOUdukbaejFQPiOMFw816NxeM/KYDG3LCirlwenTnE9oWpdRU5WHHzAjC+sMnJ8bGF8odp9o+yKRHb0nB1rbA==
+
+"@spectrum-css/radio@^3.0.2":
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/radio/-/radio-3.0.13.tgz#9e00df6e53252b2d87c64d79536182e95b2154ff"
+ integrity sha512-dzTEwqwtRQ450jaezplT5ZeuzTDxdxFXQWHczI7tbQwSZ8dcgu4yHUbnmBfQxIzTuo/zIJN2ru7aTuFDPg5SwQ==
+
+"@spectrum-css/search@^3.0.2":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/search/-/search-3.1.2.tgz#8d43f35f884f7c190e7694c8d26a3f2cfed01ef0"
+ integrity sha512-8cMK1QB07dbReZ/ECyTyoT2dELZ7hK1b3jEDiWSeLBbXcKirR1OI24sZEnewQY/XWFd/62Z1YdNaaA8S6UuXWQ==
+
+"@spectrum-css/sidenav@^3.0.2":
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/sidenav/-/sidenav-3.0.13.tgz#81020343e9c890f128e59960e66fab3af6763298"
+ integrity sha512-YJixJLB30SR8ejy6RSIuKaakKVS/DLBivF1j3lvJZwDRgUcswx/ZBkrKVsEIZEDiX09ttz7QwRPD7mlnAIUqCg==
+
+"@spectrum-css/statuslight@^3.0.2":
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/statuslight/-/statuslight-3.0.8.tgz#3b0ea80712573679870a85d469850230e794a0f7"
+ integrity sha512-zMTHs8lk+I7fLdi9waEEbsCmJ1FxeHcjQ0yltWxuRmGk2vl4MQdQIuHIMI63iblqEaiwnJRjXJoKnWlNvndTJQ==
+
+"@spectrum-css/stepper@^3.0.3":
+ version "3.0.15"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/stepper/-/stepper-3.0.15.tgz#1a9a439f614276a5783409a7cbbf628bd44ee935"
+ integrity sha512-TTURDMMvwILwoHBgSUWHIsYFVj+002ynRsRbd0KH2Uo2RNQWFvgCq4Sz0co1ScHdKxs1Y5tRE0j5Cz6cmU281A==
+
+"@spectrum-css/switch@^1.0.2":
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/switch/-/switch-1.0.12.tgz#b1727b3250cf04be087a6693d4c4c69c1f74d4b7"
+ integrity sha512-jdqcDa/RKniT+/fcF1gsafZt1B7TWzyCS4lJDrvXH30U8CzILTIxcJbJJoZIPEZT8ckn5rtF1em1M6jED1FbTQ==
+
+"@spectrum-css/table@^3.0.1":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/table/-/table-3.0.3.tgz#7f7f19905ef3275cbf907ce3a5818e63c30b2caf"
+ integrity sha512-nxwzVjLPsXoY/v4sdxOVYLcC+cEbGgJyLcLclT5LT9MGSbngFeUMJzzVR4EvehzuN4dH7hrATG7Mbuq29Mf0Hg==
+
+"@spectrum-css/tabs@^3.0.1":
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/tabs/-/tabs-3.2.2.tgz#a847daeec41f6272c567639b56d41b10f5bb67e6"
+ integrity sha512-5W6ET+JJcloMMeNjluycrm0Cq5f/p+n55V+MZsaSlJKDpApvOu6sZf9SKTiISmpysuKRHFx5LiE+2EjviSi6Bg==
+
+"@spectrum-css/tags@^3.0.2":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/tags/-/tags-3.0.3.tgz#fc76d2735cdc442de91b7eb3bee49a928c0767ac"
+ integrity sha512-SL8vPxVDfWcY5VdIuyl0TImEXcOU1I7yCyXkk7MudMwfnYs81FaIyY32hFV9OHj0Tz/36UzRzc7AVMSuRQ53pw==
+
+"@spectrum-css/textfield@^3.0.1":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/textfield/-/textfield-3.1.4.tgz#8b4a571bfd1fb0cc7499b84d7e41e363e7e4f2f0"
+ integrity sha512-pB+o+5tVxsKa7per/Sh7NU8lDcW6wDPoK6IVXpOXGAWhtd8KB3n+CmUvxI+G2tmR15RWnr0znSFCHHodj6c49A==
+
+"@spectrum-css/toast@^3.0.1":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/toast/-/toast-3.0.3.tgz#97c1527384707600832ecda35643ed304615250f"
+ integrity sha512-CjLeaMs+cjUXojCCRtbj0YkD2BoZW16kjj2o5omkEpUTjA34IJ8xJ1a+CCtDILWekhXvN0MBN4sbumcnwcnx8w==
+
+"@spectrum-css/tooltip@^3.0.3":
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/tooltip/-/tooltip-3.1.7.tgz#fa059838b10f5dfb1d520fe123885cbc01d7fd16"
+ integrity sha512-nFKeTVoqO7puCn0mHBl8/62oeXK7U314OugbUn/J5uyMUFsoWx/Sp/LBraxWTutK6HsG18NgE5g0lvbW3yz10g==
+
+"@spectrum-css/treeview@^3.0.2":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/treeview/-/treeview-3.0.3.tgz#aeda5175158b9f8d7529cb2b394428eb2a428046"
+ integrity sha512-D5gGzZC/KtRArdx86Mesc9+99W9nTbUOeyYGqoJoAfJSOttoT6Tk5CrDvlCmAqjKf5rajemAkGri1ChqvUIwkw==
+
+"@spectrum-css/typography@^3.0.1":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/typography/-/typography-3.0.2.tgz#ea3ca0a60e18064527819d48c8c4364cab4fcd38"
+ integrity sha512-5ZOLmQe0edzsDMyhghUd4hBb5uxGsFrxzf+WasfcUw9klSfTsRZ09n1BsaaWbgrLjlMQ+EEHS46v5VNo0Ms2CA==
+
+"@spectrum-css/underlay@^2.0.9":
+ version "2.0.21"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/underlay/-/underlay-2.0.21.tgz#1993800595a8b5e4d21d56f0748b70b3fdcc312a"
+ integrity sha512-0TM9t0Hh5dOA3qZXR8Rm4+tikQNB3xRi3YAHUaKv9EBmphKY784j7DgZVNmo1ROBbrXEyOmVaTEfZopIWK1WVg==
+
+"@spectrum-css/vars@^3.0.1":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/vars/-/vars-3.0.2.tgz#ea9062c3c98dfc6ba59e5df14a03025ad8969999"
+ integrity sha512-vzS9KqYXot4J3AEER/u618MXWAS+IoMvYMNrOoscKiLLKYQWenaueakUWulFonToPd/9vIpqtdbwxznqrK5qDw==
"@spectrum-css/page@^3.0.1":
"integrity" "sha512-LAlKF8km5BlsGPpZ2SNtwKOQIHn1lz0X93aczGZVZceOg73O4gyeoT5cx4vi1z+KtBRY5VMDWx3XgGtUwwjqwA=="
@@ -1695,6 +1855,11 @@
"resolved" "https://registry.npmjs.org/@spectrum-css/vars/-/vars-3.0.2.tgz"
"version" "3.0.2"
+"@spectrum-css/vars@^6.1.0":
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/@spectrum-css/vars/-/vars-6.1.0.tgz#8f0deed2d931aad4ca5511f55227208baf3ee332"
+ integrity sha512-gM2kEEgpNn8vg3vz3+IROjkhrIpKrNU8v35kCto3qx+pb976ehU79KWFMkSMD69cvRwuBsO1BUgsVDZKVfEs7Q==
+
"@sveltejs/vite-plugin-svelte@1.0.0-next.19":
"integrity" "sha512-q9hHkMzodScwDq64pNaWhekpj97vWg3wO9T0rqd8bC2EsrBQs2uD1qMJvDqlNd63AbO2uSJMGo+TQ0Xt2xgyYg=="
"resolved" "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.19.tgz"
@@ -1805,6 +1970,18 @@
dependencies:
"@babel/types" "^7.3.0"
+"@types/codemirror@^5.60.4":
+ version "5.60.5"
+ resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.5.tgz#5b989a3b4bbe657458cf372c92b6bfda6061a2b7"
+ integrity sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==
+ dependencies:
+ "@types/tern" "*"
+
+"@types/estree@*":
+ version "0.0.51"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
+ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
+
"@types/estree@0.0.39":
"integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
"resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz"
@@ -1859,6 +2036,11 @@
"jest-diff" "^26.0.0"
"pretty-format" "^26.0.0"
+"@types/marked@^4.0.1":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.0.2.tgz#cb2dbf10da2f41cf20bd91fb5f89b67540c282f7"
+ integrity sha512-auNrZ/c0w6wsM9DccwVxWHssrMDezHUAXNesdp2RQrCVCyrQbOiSq7yqdJKrUQQpw9VTm7CGYJH2A/YG7jjrjQ==
+
"@types/minimatch@*":
"integrity" "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA=="
"resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz"
@@ -1904,6 +2086,13 @@
"resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz"
"version" "2.0.0"
+"@types/tern@*":
+ version "0.23.4"
+ resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb"
+ integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==
+ dependencies:
+ "@types/estree" "*"
+
"@types/testing-library__jest-dom@^5.9.1":
"integrity" "sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ=="
"resolved" "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz"
@@ -1948,7 +2137,7 @@ acorn-walk@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-acorn-walk@^8.1.1:
+acorn-walk@^8.1.1, acorn-walk@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
@@ -1963,7 +2152,7 @@ acorn@^8.2.4:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
-acorn@^8.4.1:
+acorn@^8.4.1, acorn@^8.7.0:
version "8.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
@@ -2067,7 +2256,7 @@ arg@^4.1.0:
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
-argparse@^1.0.7:
+argparse@^1.0.10, argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
@@ -2082,110 +2271,105 @@ aria-query@^4.2.2:
"@babel/runtime" "^7.10.2"
"@babel/runtime-corejs3" "^7.10.2"
-"arr-diff@^4.0.0":
- "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
- "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz"
- "version" "4.0.0"
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-"arr-flatten@^1.1.0":
- "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
- "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz"
- "version" "1.1.0"
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-"arr-union@^3.1.0":
- "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
- "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz"
- "version" "3.1.0"
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-"array-sort@^1.0.0":
- "integrity" "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg=="
- "resolved" "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz"
- "version" "1.0.0"
+array-sort@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a"
+ integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==
dependencies:
- "default-compare" "^1.0.0"
- "get-value" "^2.0.6"
- "kind-of" "^5.0.2"
+ default-compare "^1.0.0"
+ get-value "^2.0.6"
+ kind-of "^5.0.2"
-"array-union@^2.1.0":
- "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
- "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
- "version" "2.1.0"
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-"array-unique@^0.3.2":
- "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
- "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz"
- "version" "0.3.2"
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-"asn1@~0.2.3":
- "integrity" "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="
- "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"
- "version" "0.2.4"
+asn1@~0.2.3:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+ integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
dependencies:
- "safer-buffer" "~2.1.0"
+ safer-buffer "~2.1.0"
-"assert-plus@^1.0.0", "assert-plus@1.0.0":
- "integrity" "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
- "version" "1.0.0"
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-"assign-symbols@^1.0.0":
- "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz"
- "version" "1.0.0"
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-"astral-regex@^2.0.0":
- "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
- "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz"
- "version" "2.0.0"
+async@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd"
+ integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==
-"async@^3.2.0":
- "integrity" "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
- "resolved" "https://registry.npmjs.org/async/-/async-3.2.0.tgz"
- "version" "3.2.0"
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-"asynckit@^0.4.0":
- "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
- "version" "0.4.0"
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-"at-least-node@^1.0.0":
- "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
- "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz"
- "version" "1.0.0"
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-"atob@^2.1.2":
- "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
- "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"
- "version" "2.1.2"
-
-"autolinker@~0.28.0":
- "integrity" "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc="
- "resolved" "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz"
- "version" "0.28.1"
+autolinker@~0.28.0:
+ version "0.28.1"
+ resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-0.28.1.tgz#0652b491881879f0775dace0cdca3233942a4e47"
+ integrity sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=
dependencies:
- "gulp-header" "^1.7.1"
+ gulp-header "^1.7.1"
-"aws-sign2@~0.7.0":
- "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
- "version" "0.7.0"
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-"aws4@^1.8.0":
- "integrity" "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz"
- "version" "1.11.0"
+aws4@^1.8.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
-"axios@^0.21.1":
- "integrity" "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA=="
- "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz"
- "version" "0.21.1"
+axios@^0.21.1:
+ version "0.21.4"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
+ integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
dependencies:
- "follow-redirects" "^1.10.0"
+ follow-redirects "^1.14.0"
-"babel-jest@^26.6.3":
- "integrity" "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA=="
- "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz"
- "version" "26.6.3"
+babel-jest@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056"
+ integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==
dependencies:
"@jest/transform" "^26.6.2"
"@jest/types" "^26.6.2"
@@ -2611,6 +2795,209 @@ color-name@1.1.3:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.0.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e"
+ integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==
+
+caniuse-lite@^1.0.30001280:
+ version "1.0.30001282"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz#38c781ee0a90ccfe1fe7fefd00e43f5ffdcb96fd"
+ integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+chalk@^1.0.0, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^4.0.0, chalk@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+cheap-watch@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cheap-watch/-/cheap-watch-1.0.4.tgz#0bcb4a3a8fbd9d5327936493f6b56baa668d8fef"
+ integrity sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==
+
+check-more-types@2.24.0, check-more-types@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
+ integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cjs-module-lexer@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f"
+ integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-cursor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-table3@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee"
+ integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==
+ dependencies:
+ object-assign "^4.1.0"
+ string-width "^4.2.0"
+ optionalDependencies:
+ colors "^1.1.2"
+
+cli-truncate@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+codemirror-spell-checker@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz#1c660f9089483ccb5113b9ba9ca19c3f4993371e"
+ integrity sha1-HGYPkIlIPMtRE7m6nKGcP0mTNx4=
+ dependencies:
+ typo-js "*"
+
+codemirror@^5.59.0:
+ version "5.63.3"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.63.3.tgz#97042a242027fe0c87c09b36bc01931d37b76527"
+ integrity sha512-1C+LELr+5grgJYqwZKqxrcbPsHFHapVaVAloBsFBASbpLnQqLw1U8yXJ3gT5D+rhxIiSpo+kTqN+hQ+9ialIXw==
+
+codemirror@^5.63.1:
+ version "5.65.1"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.1.tgz#5988a812c974c467f964bcc1a00c944e373de502"
+ integrity sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA==
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
@@ -2668,6 +3055,13 @@ concat-stream@^1.6.2:
readable-stream "^2.2.2"
typedarray "^0.0.6"
+concat-with-sourcemaps@*:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e"
+ integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==
+ dependencies:
+ source-map "^0.6.1"
+
configent@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/configent/-/configent-2.2.0.tgz#2de230fc43f22c47cfd99016aa6962d6f9546994"
@@ -2843,6 +3237,11 @@ date-fns@^1.27.2:
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+dayjs@^1.10.4:
+ version "1.10.7"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468"
+ integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==
+
debug@4, debug@4.3.2, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
@@ -2889,6 +3288,13 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+default-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f"
+ integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==
+ dependencies:
+ kind-of "^5.0.2"
+
define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -2977,6 +3383,17 @@ duplexer@~0.1.1:
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+easymde@^2.16.1:
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/easymde/-/easymde-2.16.1.tgz#f4c2380312615cb33826f1a1fecfaa4022ff551a"
+ integrity sha512-FihYgjRsKfhGNk89SHSqxKLC4aJ1kfybPWW6iAmtb5GnXu+tnFPSzSaGBmk1RRlCuhFSjhF0SnIMGVPjEzkr6g==
+ dependencies:
+ "@types/codemirror" "^5.60.4"
+ "@types/marked" "^4.0.1"
+ codemirror "^5.63.1"
+ codemirror-spell-checker "1.1.2"
+ marked "^4.0.10"
+
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@@ -3012,6 +3429,11 @@ end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
+ent@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+ integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -3616,329 +4038,671 @@ esbuild@^0.13.2:
"resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
"version" "11.12.0"
-"globby@10.0.1":
- "integrity" "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A=="
- "resolved" "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz"
- "version" "10.0.1"
+fastq@^1.6.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
+ integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
+ dependencies:
+ reusify "^1.0.4"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+ dependencies:
+ pend "~1.2.0"
+
+figures@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+flatpickr@^4.5.2:
+ version "4.6.9"
+ resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499"
+ integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==
+
+fn-name@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c"
+ integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==
+
+follow-redirects@^1.14.0:
+ version "1.14.8"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
+ integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+ integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+from@~0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
+
+fs-exists-sync@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
+ integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^2.1.2, fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+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==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-object@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/get-object/-/get-object-0.2.0.tgz#d92ff7d5190c64530cda0543dac63a3d47fe8c0c"
+ integrity sha1-2S/31RkMZFMM2gVD2sY6PUf+jAw=
+ dependencies:
+ is-number "^2.0.2"
+ isobject "^0.2.0"
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+get-value@^3.0.0, get-value@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-3.0.1.tgz#5efd2a157f1d6a516d7524e124ac52d0a39ef5a8"
+ integrity sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==
+ dependencies:
+ isobject "^3.0.1"
+
+getos@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
+ integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
+ dependencies:
+ async "^3.2.0"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+ integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-dirs@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
+ integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
+ dependencies:
+ ini "1.3.7"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22"
+ integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==
dependencies:
"@types/glob" "^7.1.1"
- "array-union" "^2.1.0"
- "dir-glob" "^3.0.1"
- "fast-glob" "^3.0.3"
- "glob" "^7.1.3"
- "ignore" "^5.1.1"
- "merge2" "^1.2.3"
- "slash" "^3.0.0"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
-"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4":
- "integrity" "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"
- "version" "4.2.6"
+graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
+ integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
-"growly@^1.3.0":
- "integrity" "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
- "resolved" "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz"
- "version" "1.3.0"
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-"gulp-header@^1.7.1":
- "integrity" "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ=="
- "resolved" "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz"
- "version" "1.8.12"
+gulp-header@^1.7.1:
+ version "1.8.12"
+ resolved "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.12.tgz#ad306be0066599127281c4f8786660e705080a84"
+ integrity sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==
dependencies:
- "concat-with-sourcemaps" "*"
- "lodash.template" "^4.4.0"
- "through2" "^2.0.0"
+ concat-with-sourcemaps "*"
+ lodash.template "^4.4.0"
+ through2 "^2.0.0"
-"handlebars-utils@^1.0.2", "handlebars-utils@^1.0.4", "handlebars-utils@^1.0.6":
- "integrity" "sha512-d5mmoQXdeEqSKMtQQZ9WkiUcO1E3tPbWxluCK9hVgIDPzQa9WsKo3Lbe/sGflTe7TomHEeZaOgwIkyIr1kfzkw=="
- "resolved" "https://registry.npmjs.org/handlebars-utils/-/handlebars-utils-1.0.6.tgz"
- "version" "1.0.6"
+handlebars-utils@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/handlebars-utils/-/handlebars-utils-1.0.6.tgz#cb9db43362479054782d86ffe10f47abc76357f9"
+ integrity sha512-d5mmoQXdeEqSKMtQQZ9WkiUcO1E3tPbWxluCK9hVgIDPzQa9WsKo3Lbe/sGflTe7TomHEeZaOgwIkyIr1kfzkw==
dependencies:
- "kind-of" "^6.0.0"
- "typeof-article" "^0.1.1"
+ kind-of "^6.0.0"
+ typeof-article "^0.1.1"
-"handlebars@^4.7.6", "handlebars@^4.7.7":
- "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA=="
- "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz"
- "version" "4.7.7"
+handlebars@^4.7.6, handlebars@^4.7.7:
+ version "4.7.7"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
+ integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
dependencies:
- "minimist" "^1.2.5"
- "neo-async" "^2.6.0"
- "source-map" "^0.6.1"
- "wordwrap" "^1.0.0"
+ minimist "^1.2.5"
+ neo-async "^2.6.0"
+ source-map "^0.6.1"
+ wordwrap "^1.0.0"
optionalDependencies:
- "uglify-js" "^3.1.4"
+ uglify-js "^3.1.4"
-"har-schema@^2.0.0":
- "integrity" "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
- "version" "2.0.0"
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-"har-validator@~5.1.3":
- "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w=="
- "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz"
- "version" "5.1.5"
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
dependencies:
- "ajv" "^6.12.3"
- "har-schema" "^2.0.0"
+ ajv "^6.12.3"
+ har-schema "^2.0.0"
-"harmony-reflect@^1.4.6":
- "integrity" "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA=="
- "resolved" "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz"
- "version" "1.6.1"
+harmony-reflect@^1.4.6:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710"
+ integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==
-"has-flag@^3.0.0":
- "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
- "version" "3.0.0"
-
-"has-flag@^4.0.0":
- "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
- "version" "4.0.0"
-
-"has-symbols@^1.0.1":
- "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
- "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz"
- "version" "1.0.2"
-
-"has-value@^0.3.1":
- "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8="
- "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz"
- "version" "0.3.1"
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
dependencies:
- "get-value" "^2.0.3"
- "has-values" "^0.1.4"
- "isobject" "^2.0.0"
+ ansi-regex "^2.0.0"
-"has-value@^1.0.0":
- "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc="
- "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz"
- "version" "1.0.0"
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
+ integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
dependencies:
- "get-value" "^2.0.6"
- "has-values" "^1.0.0"
- "isobject" "^3.0.0"
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
-"has-value@^2.0.2":
- "integrity" "sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA=="
- "resolved" "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz"
- "version" "2.0.2"
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
dependencies:
- "get-value" "^3.0.0"
- "has-values" "^2.0.1"
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
-"has-values@^0.1.4":
- "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
- "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz"
- "version" "0.1.4"
-
-"has-values@^1.0.0":
- "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8="
- "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz"
- "version" "1.0.0"
+has-value@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-2.0.2.tgz#d0f12e8780ba8e90e66ad1a21c707fdb67c25658"
+ integrity sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA==
dependencies:
- "is-number" "^3.0.0"
- "kind-of" "^4.0.0"
+ get-value "^3.0.0"
+ has-values "^2.0.1"
-"has-values@^2.0.1":
- "integrity" "sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w=="
- "resolved" "https://registry.npmjs.org/has-values/-/has-values-2.0.1.tgz"
- "version" "2.0.1"
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
dependencies:
- "kind-of" "^6.0.2"
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
-"has@^1.0.3":
- "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
- "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
- "version" "1.0.3"
+has-values@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-2.0.1.tgz#3876200ff86d8a8546a9264a952c17d5fc17579d"
+ integrity sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==
dependencies:
- "function-bind" "^1.1.1"
+ kind-of "^6.0.2"
-"helper-date@^1.0.1":
- "integrity" "sha512-wU3VOwwTJvGr/w5rZr3cprPHO+hIhlblTJHD6aFBrKLuNbf4lAmkawd2iK3c6NbJEvY7HAmDpqjOFSI5/+Ey2w=="
- "resolved" "https://registry.npmjs.org/helper-date/-/helper-date-1.0.1.tgz"
- "version" "1.0.1"
+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:
- "date.js" "^0.3.1"
- "handlebars-utils" "^1.0.4"
- "moment" "^2.18.1"
+ function-bind "^1.1.1"
-"helper-markdown@^1.0.0":
- "integrity" "sha512-AnDqMS4ejkQK0MXze7pA9TM3pu01ZY+XXsES6gEE0RmCGk5/NIfvTn0NmItfyDOjRAzyo9z6X7YHbHX4PzIvOA=="
- "resolved" "https://registry.npmjs.org/helper-markdown/-/helper-markdown-1.0.0.tgz"
- "version" "1.0.0"
+helper-md@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/helper-md/-/helper-md-0.2.2.tgz#c1f59d7e55bbae23362fd8a0e971607aec69d41f"
+ integrity sha1-wfWdflW7riM2L9ig6XFgeuxp1B8=
dependencies:
- "handlebars-utils" "^1.0.2"
- "highlight.js" "^9.12.0"
- "remarkable" "^1.7.1"
+ ent "^2.2.0"
+ extend-shallow "^2.0.1"
+ fs-exists-sync "^0.1.0"
+ remarkable "^1.6.2"
-"helper-md@^0.2.2":
- "integrity" "sha1-wfWdflW7riM2L9ig6XFgeuxp1B8="
- "resolved" "https://registry.npmjs.org/helper-md/-/helper-md-0.2.2.tgz"
- "version" "0.2.2"
+hosted-git-info@^2.1.4:
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
dependencies:
- "ent" "^2.2.0"
- "extend-shallow" "^2.0.1"
- "fs-exists-sync" "^0.1.0"
- "remarkable" "^1.6.2"
+ whatwg-encoding "^1.0.5"
-"highlight.js@^9.12.0":
- "integrity" "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA=="
- "resolved" "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz"
- "version" "9.18.5"
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
-"hosted-git-info@^2.1.4":
- "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz"
- "version" "2.8.9"
-
-"html-encoding-sniffer@^2.0.1":
- "integrity" "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ=="
- "resolved" "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz"
- "version" "2.0.1"
+html-tag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/html-tag/-/html-tag-2.0.0.tgz#36c3bc8d816fd30b570d5764a497a641640c2fed"
+ integrity sha512-XxzooSo6oBoxBEUazgjdXj7VwTn/iSTSZzTYKzYY6I916tkaYzypHxy+pbVU1h+0UQ9JlVf5XkNQyxOAiiQO1g==
dependencies:
- "whatwg-encoding" "^1.0.5"
+ is-self-closing "^1.0.1"
+ kind-of "^6.0.0"
-"html-escaper@^2.0.0":
- "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
- "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz"
- "version" "2.0.2"
-
-"html-tag@^2.0.0":
- "integrity" "sha512-XxzooSo6oBoxBEUazgjdXj7VwTn/iSTSZzTYKzYY6I916tkaYzypHxy+pbVU1h+0UQ9JlVf5XkNQyxOAiiQO1g=="
- "resolved" "https://registry.npmjs.org/html-tag/-/html-tag-2.0.0.tgz"
- "version" "2.0.0"
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
dependencies:
- "is-self-closing" "^1.0.1"
- "kind-of" "^6.0.0"
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
-"http-signature@~1.2.0":
- "integrity" "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE="
- "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"
- "version" "1.2.0"
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
dependencies:
- "assert-plus" "^1.0.0"
- "jsprim" "^1.2.2"
- "sshpk" "^1.7.0"
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
-"http-signature@~1.3.6":
- "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw=="
- "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz"
- "version" "1.3.6"
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
dependencies:
- "assert-plus" "^1.0.0"
- "jsprim" "^2.0.2"
- "sshpk" "^1.14.1"
+ agent-base "6"
+ debug "4"
-"human-signals@^1.1.1":
- "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
- "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz"
- "version" "1.1.1"
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
-"iconv-lite@0.4.24":
- "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
- "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
- "version" "0.4.24"
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
- "safer-buffer" ">= 2.1.2 < 3"
+ safer-buffer ">= 2.1.2 < 3"
-"identity-obj-proxy@^3.0.0":
- "integrity" "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ="
- "resolved" "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz"
- "version" "3.0.0"
+identity-obj-proxy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
+ integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=
dependencies:
- "harmony-reflect" "^1.4.6"
+ harmony-reflect "^1.4.6"
-"ieee754@^1.1.13":
- "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
- "version" "1.2.1"
+ignore@^5.1.1:
+ version "5.1.9"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb"
+ integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==
-"ignore@^5.1.1":
- "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
- "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz"
- "version" "5.1.8"
-
-"import-fresh@^3.1.0":
- "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
- "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
- "version" "3.3.0"
+import-local@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0"
+ integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==
dependencies:
- "parent-module" "^1.0.0"
- "resolve-from" "^4.0.0"
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
-"import-local@^3.0.2":
- "integrity" "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA=="
- "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz"
- "version" "3.0.2"
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
- "pkg-dir" "^4.2.0"
- "resolve-cwd" "^3.0.0"
+ once "^1.3.0"
+ wrappy "1"
-"imurmurhash@^0.1.4":
- "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
- "version" "0.1.4"
+inherits@2, inherits@^2.0.3, inherits@^2.0.4, 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==
-"indent-string@^4.0.0":
- "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
- "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"
- "version" "4.0.0"
+ini@1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
+ integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
-"inflight@^1.0.4":
- "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
- "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
- "version" "1.0.6"
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
dependencies:
- "once" "^1.3.0"
- "wrappy" "1"
+ kind-of "^3.0.2"
-"inherits@^2.0.4", "inherits@~2.0.3", "inherits@2":
- "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
- "version" "2.0.4"
-
-"ini@2.0.0":
- "integrity" "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
- "resolved" "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz"
- "version" "2.0.0"
-
-"is-accessor-descriptor@^0.1.6":
- "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY="
- "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"
- "version" "0.1.6"
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
dependencies:
- "kind-of" "^3.0.2"
+ kind-of "^6.0.0"
-"is-accessor-descriptor@^1.0.0":
- "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ=="
- "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"
- "version" "1.0.0"
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
dependencies:
- "kind-of" "^6.0.0"
+ ci-info "^2.0.0"
-"is-arrayish@^0.2.1":
- "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
- "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
- "version" "0.2.1"
-
-"is-buffer@^1.1.5":
- "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
- "version" "1.1.6"
-
-"is-ci@^2.0.0":
- "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w=="
- "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz"
- "version" "2.0.0"
+is-core-module@^2.2.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
+ integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==
dependencies:
- "ci-info" "^2.0.0"
+ has "^1.0.3"
-"is-ci@^3.0.0":
- "integrity" "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ=="
- "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz"
- "version" "3.0.0"
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-docker@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-even@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-even/-/is-even-1.0.0.tgz#76b5055fbad8d294a86b6a949015e1c97b717c06"
+ integrity sha1-drUFX7rY0pSoa2qUkBXhyXtxfAY=
+ dependencies:
+ is-odd "^0.1.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
"ci-info" "^3.1.1"
@@ -3947,39 +4711,82 @@ esbuild@^0.13.2:
"resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz"
"version" "2.2.0"
dependencies:
- "has" "^1.0.3"
+ global-dirs "^2.0.1"
+ is-path-inside "^3.0.1"
-"is-data-descriptor@^0.1.4":
- "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y="
- "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"
- "version" "0.1.4"
+is-number@^2.0.2:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
dependencies:
- "kind-of" "^3.0.2"
+ kind-of "^3.0.2"
-"is-data-descriptor@^1.0.0":
- "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ=="
- "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"
- "version" "1.0.0"
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
dependencies:
- "kind-of" "^6.0.0"
+ kind-of "^3.0.2"
-"is-descriptor@^0.1.0":
- "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg=="
- "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz"
- "version" "0.1.6"
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-observable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+ integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+ dependencies:
+ symbol-observable "^1.1.0"
+
+is-odd@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-0.1.2.tgz#bc573b5ce371ef2aad6e6f49799b72bef13978a7"
+ integrity sha1-vFc7XONx7yqtbm9JeZtyvvE5eKc=
+ dependencies:
+ is-number "^3.0.0"
+
+is-path-inside@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
dependencies:
"is-accessor-descriptor" "^0.1.6"
"is-data-descriptor" "^0.1.4"
"kind-of" "^5.0.0"
-"is-descriptor@^1.0.0", "is-descriptor@^1.0.2":
- "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg=="
- "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz"
- "version" "1.0.2"
+is-self-closing@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-self-closing/-/is-self-closing-1.0.1.tgz#5f406b527c7b12610176320338af0fa3896416e4"
+ integrity sha512-E+60FomW7Blv5GXTlYee2KDrnG6srxF7Xt1SjrhWUGUEsTFIqY/nq2y3DaftCsgUMdh89V07IVfhY9KIJhLezg==
dependencies:
- "is-accessor-descriptor" "^1.0.0"
- "is-data-descriptor" "^1.0.0"
- "kind-of" "^6.0.2"
+ self-closing-tags "^1.0.1"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
"is-docker@^2.0.0":
"integrity" "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw=="
@@ -4003,10 +4810,15 @@ esbuild@^0.13.2:
"resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz"
"version" "0.1.1"
-"is-extendable@^1.0.1":
- "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="
- "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz"
- "version" "1.0.1"
+isobject@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-0.2.0.tgz#a3432192f39b910b5f02cc989487836ec70aa85e"
+ integrity sha1-o0MhkvObkQtfAsyYlIeDbscKqF4=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
"is-plain-object" "^2.0.4"
@@ -4702,7 +5514,7 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.1.0, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
@@ -4716,12 +5528,12 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
-kind-of@^5.0.0:
+kind-of@^5.0.0, kind-of@^5.0.2:
version "5.1.0"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-kind-of@^6.0.0, kind-of@^6.0.2:
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -4815,6 +5627,11 @@ lodash-es@^4.17.11:
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash._reinterpolate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -4825,7 +5642,22 @@ lodash.once@^4.1.1:
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
-lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0:
+lodash.template@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+
+lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -4916,6 +5748,11 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+marked@^4.0.10:
+ version "4.0.12"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d"
+ integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==
+
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -4931,7 +5768,7 @@ methods@^1.1.2:
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-micromatch@^3.1.4:
+micromatch@^3.1.4, micromatch@^3.1.5:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
@@ -5069,6 +5906,11 @@ ncp@^2.0.0:
resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
+neo-async@^2.6.0:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@@ -5502,273 +6344,241 @@ parse-json@^5.0.0:
"version" "5.2.0"
dependencies:
"@types/normalize-package-data" "^2.4.0"
- "normalize-package-data" "^2.5.0"
- "parse-json" "^5.0.0"
- "type-fest" "^0.6.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
-"readable-stream@~2.3.6":
- "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="
- "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
- "version" "2.3.7"
+readable-stream@^2.2.2, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
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"
+ 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"
-"redent@^3.0.0":
- "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="
- "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz"
- "version" "3.0.0"
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
dependencies:
- "indent-string" "^4.0.0"
- "strip-indent" "^3.0.0"
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
-"regenerate-unicode-properties@^8.2.0":
- "integrity" "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA=="
- "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz"
- "version" "8.2.0"
+regenerate-unicode-properties@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
+ integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==
dependencies:
- "regenerate" "^1.4.0"
+ regenerate "^1.4.2"
-"regenerate@^1.4.0":
- "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
- "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz"
- "version" "1.4.2"
+regenerate@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
-"regenerator-runtime@^0.13.4":
- "integrity" "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
- "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz"
- "version" "0.13.7"
+regenerator-runtime@^0.13.4:
+ version "0.13.9"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+ integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
-"regenerator-transform@^0.14.2":
- "integrity" "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw=="
- "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz"
- "version" "0.14.5"
+regenerator-transform@^0.14.2:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+ integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
dependencies:
"@babel/runtime" "^7.8.4"
-"regex-not@^1.0.0", "regex-not@^1.0.2":
- "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A=="
- "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz"
- "version" "1.0.2"
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
dependencies:
- "extend-shallow" "^3.0.2"
- "safe-regex" "^1.1.0"
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
-"regexparam@^1.3.0":
- "integrity" "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g=="
- "resolved" "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz"
- "version" "1.3.0"
+regexparam@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-2.0.0.tgz#059476767d5f5f87f735fc7922d133fd1a118c8c"
+ integrity sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==
-"regexparam@2.0.0":
- "integrity" "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow=="
- "resolved" "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz"
- "version" "2.0.0"
+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==
-"regexpu-core@^4.7.1":
- "integrity" "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ=="
- "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz"
- "version" "4.7.1"
+regexpu-core@^4.7.1:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0"
+ integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==
dependencies:
- "regenerate" "^1.4.0"
- "regenerate-unicode-properties" "^8.2.0"
- "regjsgen" "^0.5.1"
- "regjsparser" "^0.6.4"
- "unicode-match-property-ecmascript" "^1.0.4"
- "unicode-match-property-value-ecmascript" "^1.2.0"
+ regenerate "^1.4.2"
+ regenerate-unicode-properties "^9.0.0"
+ regjsgen "^0.5.2"
+ regjsparser "^0.7.0"
+ unicode-match-property-ecmascript "^2.0.0"
+ unicode-match-property-value-ecmascript "^2.0.0"
-"regjsgen@^0.5.1":
- "integrity" "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
- "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz"
- "version" "0.5.2"
+regjsgen@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
-"regjsparser@^0.6.4":
- "integrity" "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ=="
- "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz"
- "version" "0.6.9"
+regjsparser@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968"
+ integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==
dependencies:
- "jsesc" "~0.5.0"
+ jsesc "~0.5.0"
-"relative@^3.0.2":
- "integrity" "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8="
- "resolved" "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz"
- "version" "3.0.2"
+relative@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/relative/-/relative-3.0.2.tgz#0dcd8ec54a5d35a3c15e104503d65375b5a5367f"
+ integrity sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=
dependencies:
- "isobject" "^2.0.0"
+ isobject "^2.0.0"
-"remarkable@^1.6.2", "remarkable@^1.7.1":
- "integrity" "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg=="
- "resolved" "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz"
- "version" "1.7.4"
+remarkable@^1.6.2:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/remarkable/-/remarkable-1.7.4.tgz#19073cb960398c87a7d6546eaa5e50d2022fcd00"
+ integrity sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==
dependencies:
- "argparse" "^1.0.10"
- "autolinker" "~0.28.0"
+ argparse "^1.0.10"
+ autolinker "~0.28.0"
-"remixicon@2.5.0":
- "integrity" "sha512-q54ra2QutYDZpuSnFjmeagmEiN9IMo56/zz5dDNitzKD23oFRw77cWo4TsrAdmdkPiEn8mxlrTqxnkujDbEGww=="
- "resolved" "https://registry.npmjs.org/remixicon/-/remixicon-2.5.0.tgz"
- "version" "2.5.0"
+remixicon@2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/remixicon/-/remixicon-2.5.0.tgz#b5e245894a1550aa23793f95daceadbf96ad1a41"
+ integrity sha512-q54ra2QutYDZpuSnFjmeagmEiN9IMo56/zz5dDNitzKD23oFRw77cWo4TsrAdmdkPiEn8mxlrTqxnkujDbEGww==
-"remove-trailing-separator@^1.0.1":
- "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
- "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"
- "version" "1.1.0"
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-"repeat-element@^1.1.2":
- "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
- "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz"
- "version" "1.1.3"
+repeat-element@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-"repeat-string@^1.6.1":
- "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
- "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
- "version" "1.6.1"
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-"request-progress@^3.0.0":
- "integrity" "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4="
- "resolved" "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz"
- "version" "3.0.0"
+request-progress@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe"
+ integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=
dependencies:
- "throttleit" "^1.0.0"
+ throttleit "^1.0.0"
-"request-promise-core@1.1.4":
- "integrity" "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw=="
- "resolved" "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz"
- "version" "1.1.4"
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+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-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
dependencies:
- "lodash" "^4.17.19"
+ resolve-from "^5.0.0"
-"request-promise-native@^1.0.9":
- "integrity" "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g=="
- "resolved" "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz"
- "version" "1.0.9"
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
dependencies:
- "request-promise-core" "1.1.4"
- "stealthy-require" "^1.1.1"
- "tough-cookie" "^2.3.3"
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
-"request@^2.34", "request@^2.88.2":
- "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="
- "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz"
- "version" "2.88.2"
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
dependencies:
- "aws-sign2" "~0.7.0"
- "aws4" "^1.8.0"
- "caseless" "~0.12.0"
- "combined-stream" "~1.0.6"
- "extend" "~3.0.2"
- "forever-agent" "~0.6.1"
- "form-data" "~2.3.2"
- "har-validator" "~5.1.3"
- "http-signature" "~1.2.0"
- "is-typedarray" "~1.0.0"
- "isstream" "~0.1.2"
- "json-stringify-safe" "~5.0.1"
- "mime-types" "~2.1.19"
- "oauth-sign" "~0.9.0"
- "performance-now" "^2.1.0"
- "qs" "~6.5.2"
- "safe-buffer" "^5.1.2"
- "tough-cookie" "~2.5.0"
- "tunnel-agent" "^0.6.0"
- "uuid" "^3.3.2"
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
-"require-directory@^2.1.1":
- "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
- "version" "2.1.1"
-
-"require-main-filename@^2.0.0":
- "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"
- "version" "2.0.0"
-
-"require-relative@^0.8.7":
- "integrity" "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4="
- "resolved" "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz"
- "version" "0.8.7"
-
-"resolve-cwd@^3.0.0":
- "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="
- "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz"
- "version" "3.0.0"
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
dependencies:
- "resolve-from" "^5.0.0"
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
-"resolve-from@^4.0.0":
- "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
- "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
- "version" "4.0.0"
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-"resolve-from@^5.0.0":
- "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
- "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"
- "version" "5.0.0"
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-"resolve-url@^0.2.1":
- "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
- "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz"
- "version" "0.2.1"
-
-"resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.18.1", "resolve@^1.20.0":
- "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A=="
- "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz"
- "version" "1.20.0"
+rimraf@^3.0.0, rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies:
- "is-core-module" "^2.2.0"
- "path-parse" "^1.0.6"
+ glob "^7.1.3"
-"restore-cursor@^3.1.0":
- "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="
- "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz"
- "version" "3.1.0"
- dependencies:
- "onetime" "^5.1.0"
- "signal-exit" "^3.0.2"
-
-"ret@~0.1.10":
- "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
- "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"
- "version" "0.1.15"
-
-"reusify@^1.0.4":
- "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
- "version" "1.0.4"
-
-"rimraf@^3.0.0", "rimraf@^3.0.2":
- "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
- "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
- "version" "3.0.2"
- dependencies:
- "glob" "^7.1.3"
-
-"rollup-plugin-copy@^3.4.0":
- "integrity" "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ=="
- "resolved" "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz"
- "version" "3.4.0"
+rollup-plugin-copy@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz#f1228a3ffb66ffad8606e2f3fb7ff23141ed3286"
+ integrity sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==
dependencies:
"@types/fs-extra" "^8.0.1"
- "colorette" "^1.1.0"
- "fs-extra" "^8.1.0"
- "globby" "10.0.1"
- "is-plain-object" "^3.0.0"
+ colorette "^1.1.0"
+ fs-extra "^8.1.0"
+ globby "10.0.1"
+ is-plain-object "^3.0.0"
-"rollup-pluginutils@^2.8.2":
- "integrity" "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="
- "resolved" "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz"
- "version" "2.8.2"
+rollup-plugin-polyfill-node@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.8.0.tgz#859c070822f5e38d221e5b4238cb34aa894c2b19"
+ integrity sha512-C4UeKedOmOBkB3FgR+z/v9kzRwV1Q/H8xWs1u1+CNe4XOV6hINfOrcO+TredKxYvopCmr+WKUSNsFUnD1RLHgQ==
dependencies:
- "estree-walker" "^0.6.1"
+ "@rollup/plugin-inject" "^4.0.0"
-"rollup@^1.20.0 || ^2.0.0", "rollup@^1.20.0||^2.0.0", "rollup@^2.44.0", "rollup@^2.59.0":
- "integrity" "sha512-ohZVYrhtVMTqqeqH26sngfMiyGDg6gCUReOsoflXvYpzUkDHp8sVG8F9FQxjs72OfnLWpXP2nNNqQ9I0vkRovA=="
- "resolved" "https://registry.npmjs.org/rollup/-/rollup-2.65.0.tgz"
- "version" "2.65.0"
+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.44.0, rollup@^2.57.0:
+ version "2.60.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.60.0.tgz#4ee60ab7bdd0356763f87d7099f413e5460fc193"
+ integrity sha512-cHdv9GWd58v58rdseC8e8XIaPUo8a9cgZpnCMMDGZFDZKEODOiPPEQFXLriWr/TjXzhPPmG5bkAztPsOARIcGQ==
optionalDependencies:
"fsevents" "~2.3.2"
@@ -5814,399 +6624,221 @@ parse-json@^5.0.0:
"version" "4.1.0"
dependencies:
"@cnakazawa/watch" "^1.0.3"
- "anymatch" "^2.0.0"
- "capture-exit" "^2.0.0"
- "exec-sh" "^0.3.2"
- "execa" "^1.0.0"
- "fb-watchman" "^2.0.0"
- "micromatch" "^3.1.4"
- "minimist" "^1.1.1"
- "walker" "~1.0.5"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
-"saxes@^5.0.1":
- "integrity" "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw=="
- "resolved" "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz"
- "version" "5.0.1"
+saxes@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
dependencies:
- "xmlchars" "^2.2.0"
+ xmlchars "^2.2.0"
-"self-closing-tags@^1.0.1":
- "integrity" "sha512-7t6hNbYMxM+VHXTgJmxwgZgLGktuXtVVD5AivWzNTdJBM4DBjnDKDzkf2SrNjihaArpeJYNjxkELBu1evI4lQA=="
- "resolved" "https://registry.npmjs.org/self-closing-tags/-/self-closing-tags-1.0.1.tgz"
- "version" "1.0.1"
+self-closing-tags@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/self-closing-tags/-/self-closing-tags-1.0.1.tgz#6c5fa497994bb826b484216916371accee490a5d"
+ integrity sha512-7t6hNbYMxM+VHXTgJmxwgZgLGktuXtVVD5AivWzNTdJBM4DBjnDKDzkf2SrNjihaArpeJYNjxkELBu1evI4lQA==
-"semver@^5.5.0":
- "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
- "version" "5.7.1"
+"semver@2 || 3 || 4 || 5", semver@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-"semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0":
- "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
- "version" "6.3.0"
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-"semver@^7.3.2":
- "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="
- "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"
- "version" "7.3.5"
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
dependencies:
- "lru-cache" "^6.0.0"
+ lru-cache "^6.0.0"
-"semver@2 || 3 || 4 || 5":
- "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
- "version" "5.7.1"
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-"semver@7.0.0":
- "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
- "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz"
- "version" "7.0.0"
-
-"set-blocking@^2.0.0":
- "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
- "version" "2.0.0"
-
-"set-value@^2.0.0", "set-value@^2.0.1":
- "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw=="
- "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz"
- "version" "2.0.1"
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
dependencies:
- "extend-shallow" "^2.0.1"
- "is-extendable" "^0.1.1"
- "is-plain-object" "^2.0.3"
- "split-string" "^3.0.1"
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
-"shebang-command@^1.2.0":
- "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo="
- "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"
- "version" "1.2.0"
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
dependencies:
- "shebang-regex" "^1.0.0"
+ shebang-regex "^1.0.0"
-"shebang-command@^2.0.0":
- "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
- "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
- "version" "2.0.0"
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
dependencies:
- "shebang-regex" "^3.0.0"
+ shebang-regex "^3.0.0"
-"shebang-regex@^1.0.0":
- "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz"
- "version" "1.0.0"
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-"shebang-regex@^3.0.0":
- "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
- "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
- "version" "3.0.0"
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-"shellwords@^0.1.1":
- "integrity" "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww=="
- "resolved" "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz"
- "version" "0.1.1"
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
-"shortid@^2.2.15", "shortid@2.2.15":
- "integrity" "sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw=="
- "resolved" "https://registry.npmjs.org/shortid/-/shortid-2.2.15.tgz"
- "version" "2.2.15"
+shortid@2.2.15:
+ version "2.2.15"
+ resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.15.tgz#2b902eaa93a69b11120373cd42a1f1fe4437c122"
+ integrity sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==
dependencies:
- "nanoid" "^2.1.0"
+ nanoid "^2.1.0"
-"signal-exit@^3.0.0", "signal-exit@^3.0.2":
- "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz"
- "version" "3.0.3"
-
-"sisteransi@^1.0.5":
- "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
- "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
- "version" "1.0.5"
-
-"slash@^3.0.0":
- "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
- "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
- "version" "3.0.0"
-
-"slice-ansi@^3.0.0":
- "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="
- "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz"
- "version" "3.0.0"
+shortid@^2.2.15:
+ version "2.2.16"
+ resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608"
+ integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==
dependencies:
- "ansi-styles" "^4.0.0"
- "astral-regex" "^2.0.0"
- "is-fullwidth-code-point" "^3.0.0"
+ nanoid "^2.1.0"
-"slice-ansi@^4.0.0":
- "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="
- "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz"
- "version" "4.0.0"
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
+ integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
dependencies:
- "ansi-styles" "^4.0.0"
- "astral-regex" "^2.0.0"
- "is-fullwidth-code-point" "^3.0.0"
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
-"snapdragon-node@^2.0.1":
- "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw=="
- "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz"
- "version" "2.1.1"
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
dependencies:
- "define-property" "^1.0.0"
- "isobject" "^3.0.0"
- "snapdragon-util" "^3.0.1"
+ kind-of "^3.2.0"
-"snapdragon-util@^3.0.1":
- "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ=="
- "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz"
- "version" "3.0.1"
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
dependencies:
- "kind-of" "^3.2.0"
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
-"snapdragon@^0.8.1":
- "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg=="
- "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz"
- "version" "0.8.2"
+source-map-js@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
+ integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
dependencies:
- "base" "^0.11.1"
- "debug" "^2.2.0"
- "define-property" "^0.2.5"
- "extend-shallow" "^2.0.1"
- "map-cache" "^0.2.2"
- "source-map" "^0.5.6"
- "source-map-resolve" "^0.5.0"
- "use" "^3.1.0"
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
-"source-map-js@^1.0.1":
- "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
- "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
- "version" "1.0.2"
-
-"source-map-resolve@^0.5.0":
- "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw=="
- "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz"
- "version" "0.5.3"
+source-map-resolve@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2"
+ integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==
dependencies:
- "atob" "^2.1.2"
- "decode-uri-component" "^0.2.0"
- "resolve-url" "^0.2.1"
- "source-map-url" "^0.4.0"
- "urix" "^0.1.0"
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
-"source-map-resolve@^0.6.0":
- "integrity" "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w=="
- "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz"
- "version" "0.6.0"
+source-map-support@^0.5.6:
+ version "0.5.20"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9"
+ integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==
dependencies:
- "atob" "^2.1.2"
- "decode-uri-component" "^0.2.0"
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
-"source-map-support@^0.5.6":
- "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="
- "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"
- "version" "0.5.19"
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+sourcemap-codec@^1.4.4:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
dependencies:
- "buffer-from" "^1.0.0"
- "source-map" "^0.6.0"
-
-"source-map-url@^0.4.0":
- "integrity" "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw=="
- "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz"
- "version" "0.4.1"
-
-"source-map@^0.5.0", "source-map@^0.5.6":
- "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
- "version" "0.5.7"
-
-"source-map@^0.6.0":
- "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
- "version" "0.6.1"
-
-"source-map@^0.6.1":
- "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
- "version" "0.6.1"
-
-"source-map@^0.7.3":
- "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
- "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz"
- "version" "0.7.3"
-
-"source-map@~0.6.1":
- "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
- "version" "0.6.1"
-
-"sourcemap-codec@^1.4.4":
- "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
- "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
- "version" "1.4.8"
-
-"spdx-correct@^3.0.0":
- "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w=="
- "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz"
- "version" "3.1.1"
- dependencies:
- "spdx-expression-parse" "^3.0.0"
- "spdx-license-ids" "^3.0.0"
-
-"spdx-exceptions@^2.1.0":
- "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
- "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz"
- "version" "2.3.0"
-
-"spdx-expression-parse@^3.0.0":
- "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="
- "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"
- "version" "3.0.1"
- dependencies:
- "spdx-exceptions" "^2.1.0"
- "spdx-license-ids" "^3.0.0"
-
-"spdx-license-ids@^3.0.0":
- "integrity" "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ=="
- "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz"
- "version" "3.0.7"
-
-"split-string@^3.0.1", "split-string@^3.0.2":
- "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw=="
- "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz"
- "version" "3.1.0"
- dependencies:
- "extend-shallow" "^3.0.0"
-
-"split@0.3":
- "integrity" "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8="
- "resolved" "https://registry.npmjs.org/split/-/split-0.3.3.tgz"
- "version" "0.3.3"
- dependencies:
- "through" "2"
-
-"sprintf-js@~1.0.2":
- "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
- "version" "1.0.3"
-
-"sshpk@^1.14.1", "sshpk@^1.7.0":
- "integrity" "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg=="
- "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"
- "version" "1.16.1"
- dependencies:
- "asn1" "~0.2.3"
- "assert-plus" "^1.0.0"
- "bcrypt-pbkdf" "^1.0.0"
- "dashdash" "^1.12.0"
- "ecc-jsbn" "~0.1.1"
- "getpass" "^0.1.1"
- "jsbn" "~0.1.0"
- "safer-buffer" "^2.0.2"
- "tweetnacl" "~0.14.0"
-
-"stack-utils@^2.0.2":
- "integrity" "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw=="
- "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz"
- "version" "2.0.3"
- dependencies:
- "escape-string-regexp" "^2.0.0"
-
-"start-server-and-test@^1.12.1":
- "integrity" "sha512-qGQ2HQiF2yDIfyaHsXkHfoE5UOl4zJUbJ/gx2xOkfX7iPMXW9qHmoFyaMfIDJVLNkxCK7RxSrvWEI9hNVKQluw=="
- "resolved" "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.12.1.tgz"
- "version" "1.12.1"
- dependencies:
- "bluebird" "3.7.2"
- "check-more-types" "2.24.0"
- "debug" "4.3.1"
- "execa" "3.4.0"
- "lazy-ass" "1.6.0"
- "ps-tree" "1.2.0"
- "wait-on" "5.3.0"
-
-"static-extend@^0.1.1":
- "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY="
- "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz"
- "version" "0.1.2"
- dependencies:
- "define-property" "^0.2.5"
- "object-copy" "^0.1.0"
-
-"stealthy-require@^1.1.1":
- "integrity" "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
- "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz"
- "version" "1.1.1"
-
-"stream-combiner@~0.0.4":
- "integrity" "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ="
- "resolved" "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz"
- "version" "0.0.4"
- dependencies:
- "duplexer" "~0.1.1"
-
-"string_decoder@~1.1.1":
- "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="
- "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
- "version" "1.1.1"
- dependencies:
- "safe-buffer" "~5.1.0"
-
-"string-length@^4.0.1":
- "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="
- "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz"
- "version" "4.0.2"
- dependencies:
- "char-regex" "^1.0.2"
- "strip-ansi" "^6.0.0"
-
-"string-width@^4.1.0", "string-width@^4.2.0":
- "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA=="
- "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz"
- "version" "4.2.2"
- dependencies:
- "emoji-regex" "^8.0.0"
- "is-fullwidth-code-point" "^3.0.0"
- "strip-ansi" "^6.0.0"
-
-"strip-ansi@^6.0.0":
- "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w=="
- "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz"
- "version" "6.0.0"
- dependencies:
- "ansi-regex" "^5.0.0"
-
-"strip-bom@^4.0.0":
- "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
- "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz"
- "version" "4.0.0"
-
-"strip-eof@^1.0.0":
- "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
- "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz"
- "version" "1.0.0"
-
-"strip-final-newline@^2.0.0":
- "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
- "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
- "version" "2.0.0"
-
-"strip-indent@^3.0.0":
- "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="
- "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz"
- "version" "3.0.0"
- dependencies:
- "min-indent" "^1.0.0"
-
-"striptags@^3.1.1":
- "integrity" "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="
- "resolved" "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz"
- "version" "3.2.0"
-
-"supports-color@^5.3.0":
- "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
- "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
- "version" "5.5.0"
- dependencies:
- "has-flag" "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
"supports-color@^7.0.0":
"integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
@@ -6326,7 +6958,17 @@ parse-json@^5.0.0:
"resolved" "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz"
"version" "0.1.3"
dependencies:
- "svg.js" "^2.4.0"
+ min-indent "^1.0.0"
+
+striptags@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.2.0.tgz#cc74a137db2de8b0b9a370006334161f7dd67052"
+ integrity sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
"svg.resize.js@^1.4.3":
"integrity" "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw=="
@@ -6348,12 +6990,72 @@ parse-json@^5.0.0:
"resolved" "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz"
"version" "3.0.1"
dependencies:
- "svg.js" "^2.6.5"
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
-"symbol-tree@^3.2.4":
- "integrity" "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
- "resolved" "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz"
- "version" "3.2.4"
+svelte-dnd-action@^0.9.8:
+ version "0.9.12"
+ resolved "https://registry.yarnpkg.com/svelte-dnd-action/-/svelte-dnd-action-0.9.12.tgz#78cf33097986488c6d069eca517af473cd998730"
+ integrity sha512-GlXIB3/56IMR5A0+qUx+FX7Q7n8uCAIeuYdgSBmn9iOlxWc+mgM8P1kNwAKCMSTdQ4IQETVQILNgWVY1KIFzsg==
+
+svelte-flatpickr@^3.2.3:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/svelte-flatpickr/-/svelte-flatpickr-3.2.6.tgz#595a97b2f25a669e61fe743f90a10dce783bbd49"
+ integrity sha512-0ePUyE9OjInYFqQwRKOxnFSu4dQX9+/rzFMynq2fKYXx406ZUThzSx72gebtjr0DoAQbsH2///BBZa5qk4qZXg==
+ dependencies:
+ flatpickr "^4.5.2"
+
+svelte-hmr@^0.14.7:
+ version "0.14.7"
+ resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.7.tgz#7fa8261c7b225d9409f0a86f3b9ea5c3ca6f6607"
+ integrity sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==
+
+svelte-jester@^1.3.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/svelte-jester/-/svelte-jester-1.8.2.tgz#2087657c96ba89de5f71f5e780374cd9c1c975ff"
+ integrity sha512-m2ZhsnBY8T8b1KFE9u8CzUzAt1YoBgKkPWIuzeIfKd9ImYfa/aoiOb3/JcnUQQI4m/j/cPjWMGUBsTXhkXB7HQ==
+
+svelte-loading-spinners@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/svelte-loading-spinners/-/svelte-loading-spinners-0.1.7.tgz#3fa6fa0ef67ab635773bf20b07d0b071debbadaa"
+ integrity sha512-EKCId1DjVL2RSUVJJsvtNcqQHox03XIgh4xh/4p7r6ST7d8mut6INY9/LqK4A17PFU64+3quZmqiSfOlf480CA==
+
+svelte-portal@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/svelte-portal/-/svelte-portal-0.1.0.tgz#cc2821cc84b05ed5814e0218dcdfcbebc53c1742"
+ integrity sha512-kef+ksXVKun224mRxat+DdO4C+cGHla+fEcZfnBAvoZocwiaceOfhf5azHYOPXSSB1igWVFTEOF3CDENPnuWxg==
+
+svelte-portal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/svelte-portal/-/svelte-portal-1.0.0.tgz#36a47c5578b1a4d9b4dc60fa32a904640ec4cdd3"
+ integrity sha512-nHf+DS/jZ6jjnZSleBMSaZua9JlG5rZv9lOGKgJuaZStfevtjIlUJrkLc3vbV8QdBvPPVmvcjTlazAzfKu0v3Q==
+
+svelte-spa-router@^3.0.5:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/svelte-spa-router/-/svelte-spa-router-3.2.0.tgz#fae3311d292451236cb57131262406cf312b15ee"
+ integrity sha512-igemo5Vs82TGBBw+DjWt6qKameXYzNs6aDXcTxou5XbEvOjiRcAM6MLkdVRCatn6u8r42dE99bt/br7T4qe/AQ==
+ dependencies:
+ regexparam "2.0.0"
+
+svelte@^3.38.2:
+ version "3.44.1"
+ resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.44.1.tgz#5cc772a8340f4519a4ecd1ac1a842325466b1a63"
+ integrity sha512-4DrCEJoBvdR689efHNSxIQn2pnFwB7E7j2yLEJtHE/P8hxwZWIphCtJ8are7bjl/iVMlcEf5uh5pJ68IwR09vQ==
+
+svelte@^3.46.2:
+ version "3.46.4"
+ resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.46.4.tgz#0c46bc4a3e20a2617a1b7dc43a722f9d6c084a38"
+ integrity sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg==
+
+symbol-observable@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
"synchronous-promise@^2.0.13":
"integrity" "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg=="
@@ -6387,6 +7089,14 @@ throttleit@^1.0.0:
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
through@2, through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -6409,6 +7119,11 @@ to-fast-properties@^2.0.0:
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+to-gfm-code-block@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/to-gfm-code-block/-/to-gfm-code-block-0.1.1.tgz#25d045a5fae553189e9637b590900da732d8aa82"
+ integrity sha1-JdBFpfrlUxielje1kJANpzLYqoI=
+
to-object-path@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
@@ -6554,11 +7269,28 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+typeof-article@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/typeof-article/-/typeof-article-0.1.1.tgz#9f07e733c3fbb646ffa9e61c08debacd460e06af"
+ integrity sha1-nwfnM8P7tkb/qeYcCN66zUYOBq8=
+ dependencies:
+ kind-of "^3.1.0"
+
typescript@^4.5.5:
version "4.5.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
+typo-js@*:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.2.1.tgz#334a0d8c3f6c56f2f1e15fdf6c31677793cbbe9b"
+ integrity sha512-bTGLjbD3WqZDR3CgEFkyi9Q/SS2oM29ipXrWfDb4M74ea69QwKAECVceYpaBu0GfdnASMg9Qfl67ttB23nePHg==
+
+uglify-js@^3.1.4:
+ version "3.15.1"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.1.tgz#9403dc6fa5695a6172a91bc983ea39f0f7c9086d"
+ integrity sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==
+
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
@@ -6700,6 +7432,14 @@ v8-to-istanbul@^7.0.0:
optionalDependencies:
fsevents "~2.3.2"
+vm2@^3.9.4:
+ version "3.9.7"
+ resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.7.tgz#bb87aa677c97c61e23a6cb6547e44e990517a6f6"
+ integrity sha512-g/GZ7V0Mlmch3eDVOATvAXr1GsJNg6kQ5PjvYy3HbJMCRn5slNbo/u73Uy7r5yUej1cRa3ZjtoVwcWSQuQ/fow==
+ dependencies:
+ acorn "^8.7.0"
+ acorn-walk "^8.2.0"
+
w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
@@ -6800,6 +7540,11 @@ word-wrap@~1.2.3:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+wordwrap@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
wrap-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
@@ -6847,6 +7592,11 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
y18n@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
@@ -6890,6 +7640,11 @@ yauzl@^2.10.0:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+year@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/year/-/year-0.2.1.tgz#4083ae520a318b23ec86037f3000cb892bdf9bb0"
+ integrity sha1-QIOuUgoxiyPshgN/MADLiSvfm7A=
+
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore
index c47f898f26..618aa6638a 100644
--- a/packages/cli/.gitignore
+++ b/packages/cli/.gitignore
@@ -1,6 +1,5 @@
node_modules/
docker-compose.yaml
-envoy.yaml
-hosting.properties
+nginx.conf
build/
docker-error.log
diff --git a/packages/cli/package.json b/packages/cli/package.json
index b14d4d311f..c6bcfaf689 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/cli",
- "version": "1.0.50-alpha.4",
+ "version": "1.0.66-alpha.0",
"description": "Budibase CLI, for developers, self hosting and migrations.",
"main": "src/index.js",
"bin": {
diff --git a/packages/cli/src/hosting/index.js b/packages/cli/src/hosting/index.js
index 05d221435c..2b147810b4 100644
--- a/packages/cli/src/hosting/index.js
+++ b/packages/cli/src/hosting/index.js
@@ -15,11 +15,10 @@ const makeEnv = require("./makeEnv")
const axios = require("axios")
const AnalyticsClient = require("../analytics/Client")
-const BUDIBASE_SERVICES = ["app-service", "worker-service"]
+const BUDIBASE_SERVICES = ["app-service", "worker-service", "proxy-service"]
const ERROR_FILE = "docker-error.log"
const FILE_URLS = [
"https://raw.githubusercontent.com/Budibase/budibase/master/hosting/docker-compose.yaml",
- "https://raw.githubusercontent.com/Budibase/budibase/master/hosting/envoy.yaml",
]
const DO_USER_DATA_URL = "http://169.254.169.254/metadata/v1/user-data"
@@ -141,11 +140,7 @@ async function stop() {
async function update() {
await checkDockerConfigured()
checkInitComplete()
- if (
- await confirmation(
- "Do you wish to update you docker-compose.yaml and envoy.yaml?"
- )
- ) {
+ if (await confirmation("Do you wish to update you docker-compose.yaml?")) {
await downloadFiles()
}
await handleError(async () => {
diff --git a/packages/cli/yarn.lock b/packages/cli/yarn.lock
index 7019ee169f..5aba4810ca 100644
--- a/packages/cli/yarn.lock
+++ b/packages/cli/yarn.lock
@@ -704,9 +704,9 @@ flatted@^3.1.0:
integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==
follow-redirects@^1.14.0:
- version "1.14.5"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381"
- integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
+ version "1.14.8"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
+ integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
from2@^2.3.0:
version "2.3.0"
diff --git a/packages/client/.gitignore b/packages/client/.gitignore
index 1947eba17b..9f84a3631d 100644
--- a/packages/client/.gitignore
+++ b/packages/client/.gitignore
@@ -2,4 +2,5 @@
node_modules
package-lock.json
release/
-dist/
\ No newline at end of file
+dist/
+stats.html
\ No newline at end of file
diff --git a/packages/client/manifest.json b/packages/client/manifest.json
index ab48142ad5..1b8d261398 100644
--- a/packages/client/manifest.json
+++ b/packages/client/manifest.json
@@ -851,16 +851,12 @@
"type": "color",
"label": "Color",
"key": "color",
- "showInBar": true,
- "barSeparator": false
+ "showInBar": true
},
{
"type": "boolean",
"label": "Show delete icon",
- "key": "closable",
- "showInBar": true,
- "barIcon": "TagItalic",
- "barTitle": "Show delete icon"
+ "key": "closable"
},
{
"type": "event",
@@ -2453,6 +2449,12 @@
"key": "enableTime",
"defaultValue": true
},
+ {
+ "type": "boolean",
+ "label": "Time Only",
+ "key": "timeOnly",
+ "defaultValue": false
+ },
{
"type": "text",
"label": "Default value",
@@ -2674,11 +2676,10 @@
"defaultValue": 8
},
{
- "type": "multifield",
+ "type": "columns",
"label": "Columns",
"key": "columns",
- "dependsOn": "dataProvider",
- "placeholder": "All columns"
+ "dependsOn": "dataProvider"
},
{
"type": "select",
@@ -2940,12 +2941,12 @@
"settings": [
{
"type": "number",
- "label": "Row Count",
+ "label": "Scroll Limit",
"key": "rowCount",
"defaultValue": 8
},
{
- "type": "multifield",
+ "type": "columns",
"label": "Table Columns",
"key": "tableColumns",
"dependsOn": "dataSource",
diff --git a/packages/client/package.json b/packages/client/package.json
index 56e33b4009..efc0703100 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/client",
- "version": "1.0.50-alpha.4",
+ "version": "1.0.66-alpha.0",
"license": "MPL-2.0",
"module": "dist/budibase-client.js",
"main": "dist/budibase-client.js",
@@ -19,18 +19,9 @@
"dev:builder": "rollup -cw"
},
"dependencies": {
- "@budibase/bbui": "^1.0.50-alpha.4",
- "@budibase/standard-components": "^0.9.139",
- "@budibase/string-templates": "^1.0.50-alpha.4",
- "regexparam": "^1.3.0",
- "rollup-plugin-polyfill-node": "^0.8.0",
- "shortid": "^2.2.15",
- "svelte-spa-router": "^3.0.5"
- },
- "devDependencies": {
- "@rollup/plugin-alias": "^3.1.5",
- "@rollup/plugin-commonjs": "^18.0.0",
- "@rollup/plugin-node-resolve": "^11.2.1",
+ "@budibase/bbui": "^1.0.66-alpha.0",
+ "@budibase/frontend-core": "^1.0.66-alpha.0",
+ "@budibase/string-templates": "^1.0.66-alpha.0",
"@spectrum-css/button": "^3.0.3",
"@spectrum-css/card": "^3.0.3",
"@spectrum-css/divider": "^1.0.3",
@@ -41,8 +32,18 @@
"@spectrum-css/vars": "^3.0.1",
"apexcharts": "^3.22.1",
"dayjs": "^1.10.5",
- "fs-extra": "^8.1.0",
- "jsdom": "^16.0.1",
+ "regexparam": "^1.3.0",
+ "rollup-plugin-polyfill-node": "^0.8.0",
+ "shortid": "^2.2.15",
+ "svelte": "^3.38.2",
+ "svelte-apexcharts": "^1.0.2",
+ "svelte-flatpickr": "^3.1.0",
+ "svelte-spa-router": "^3.0.5"
+ },
+ "devDependencies": {
+ "@rollup/plugin-alias": "^3.1.5",
+ "@rollup/plugin-commonjs": "^18.0.0",
+ "@rollup/plugin-node-resolve": "^11.2.1",
"postcss": "^8.2.10",
"rollup": "^2.44.0",
"rollup-plugin-json": "^4.0.0",
@@ -50,9 +51,7 @@
"rollup-plugin-svelte": "^7.1.0",
"rollup-plugin-svg": "^2.0.0",
"rollup-plugin-terser": "^7.0.2",
- "svelte": "^3.38.2",
- "svelte-apexcharts": "^1.0.2",
- "svelte-flatpickr": "^3.1.0"
+ "rollup-plugin-visualizer": "^5.5.4"
},
"gitHead": "d1836a898cab3f8ab80ee6d8f42be1a9eed7dcdc"
}
diff --git a/packages/client/rollup.config.js b/packages/client/rollup.config.js
index bde9d2325f..5206b63884 100644
--- a/packages/client/rollup.config.js
+++ b/packages/client/rollup.config.js
@@ -8,6 +8,7 @@ import svg from "rollup-plugin-svg"
import json from "rollup-plugin-json"
import nodePolyfills from "rollup-plugin-polyfill-node"
import path from "path"
+import { visualizer } from "rollup-plugin-visualizer"
const production = !process.env.ROLLUP_WATCH
const ignoredWarnings = [
@@ -57,10 +58,6 @@ export default {
find: "sdk",
replacement: path.resolve("./src/sdk"),
},
- {
- find: "builder",
- replacement: path.resolve("../builder"),
- },
],
}),
svelte({
@@ -83,6 +80,7 @@ export default {
svg(),
json(),
production && terser(),
+ !production && visualizer(),
],
watch: {
clearScreen: false,
diff --git a/packages/client/src/api/analytics.js b/packages/client/src/api/analytics.js
deleted file mode 100644
index 5a089eaa21..0000000000
--- a/packages/client/src/api/analytics.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import API from "./api"
-
-/**
- * Notifies that an end user client app has been loaded.
- */
-export const pingEndUser = async () => {
- return await API.post({
- url: `/api/analytics/ping`,
- })
-}
diff --git a/packages/client/src/api/api.js b/packages/client/src/api/api.js
index 1bb12cca53..591d4a6782 100644
--- a/packages/client/src/api/api.js
+++ b/packages/client/src/api/api.js
@@ -1,110 +1,50 @@
-import { notificationStore, authStore } from "stores"
+import { createAPIClient } from "@budibase/frontend-core"
+import { notificationStore, authStore } from "../stores"
import { get } from "svelte/store"
-import { ApiVersion } from "constants"
-/**
- * API cache for cached request responses.
- */
-let cache = {}
+export const API = createAPIClient({
+ // Enable caching of cacheable endpoints to speed things up,
+ enableCaching: true,
-/**
- * Handler for API errors.
- */
-const handleError = error => {
- return { error }
-}
+ // Attach client specific headers
+ attachHeaders: headers => {
+ // Attach app ID header
+ headers["x-budibase-app-id"] = window["##BUDIBASE_APP_ID##"]
-/**
- * Performs an API call to the server.
- * App ID header is always correctly set.
- */
-const makeApiCall = async ({ method, url, body, json = true }) => {
- try {
- const requestBody = json ? JSON.stringify(body) : body
- const inBuilder = window["##BUDIBASE_IN_BUILDER##"]
- const headers = {
- Accept: "application/json",
- "x-budibase-app-id": window["##BUDIBASE_APP_ID##"],
- "x-budibase-api-version": ApiVersion,
- ...(json && { "Content-Type": "application/json" }),
- ...(!inBuilder && { "x-budibase-type": "client" }),
+ // Attach client header if not inside the builder preview
+ if (!window["##BUDIBASE_IN_BUILDER##"]) {
+ headers["x-budibase-type"] = "client"
}
- // add csrf token if authenticated
+ // Add csrf token if authenticated
const auth = get(authStore)
- if (auth && auth.csrfToken) {
+ if (auth?.csrfToken) {
headers["x-csrf-token"] = auth.csrfToken
}
+ },
- const response = await fetch(url, {
- method,
- headers,
- body: requestBody,
- credentials: "same-origin",
- })
- switch (response.status) {
- case 200:
- try {
- return await response.json()
- } catch (error) {
- return null
- }
- case 401:
- notificationStore.actions.error("Invalid credentials")
- return handleError(`Invalid credentials`)
- case 404:
- notificationStore.actions.warning("Not found")
- return handleError(`${url}: Not Found`)
- case 400:
- return handleError(`${url}: Bad Request`)
- case 403:
- notificationStore.actions.error(
- "Your session has expired, or you don't have permission to access that data"
- )
- return handleError(`${url}: Forbidden`)
- default:
- if (response.status >= 200 && response.status < 400) {
- return response.json()
- }
- return handleError(`${url} - ${response.statusText}`)
+ // Show an error notification for all API failures.
+ // We could also log these to sentry.
+ // Or we could check error.status and redirect to login on a 403 etc.
+ onError: error => {
+ const { status, method, url, message, handled } = error || {}
+
+ // Log any errors that we haven't manually handled
+ if (!handled) {
+ console.error("Unhandled error from API client", error)
+ return
}
- } catch (error) {
- return handleError(error)
- }
-}
-/**
- * Performs an API call to the server and caches the response.
- * Future invocation for this URL will return the cached result instead of
- * hitting the server again.
- */
-const makeCachedApiCall = async params => {
- const identifier = params.url
- if (!identifier) {
- return null
- }
- if (!cache[identifier]) {
- cache[identifier] = makeApiCall(params)
- cache[identifier] = await cache[identifier]
- }
- return await cache[identifier]
-}
+ // Notify all errors
+ if (message) {
+ // Don't notify if the URL contains the word analytics as it may be
+ // blocked by browser extensions
+ if (!url?.includes("analytics")) {
+ notificationStore.actions.error(message)
+ }
+ }
-/**
- * Constructs an API call function for a particular HTTP method.
- */
-const requestApiCall = method => async params => {
- const { external = false, url, cache = false } = params
- const fixedUrl = external ? url : `/${url}`.replace("//", "/")
- const enrichedParams = { ...params, method, url: fixedUrl }
- return await (cache ? makeCachedApiCall : makeApiCall)(enrichedParams)
-}
-
-export default {
- post: requestApiCall("POST"),
- put: requestApiCall("PUT"),
- get: requestApiCall("GET"),
- patch: requestApiCall("PATCH"),
- del: requestApiCall("DELETE"),
- error: handleError,
-}
+ // Log all errors to console
+ console.warn(`[Client] HTTP ${status} on ${method}:${url}\n\t${message}`)
+ },
+})
diff --git a/packages/client/src/api/app.js b/packages/client/src/api/app.js
deleted file mode 100644
index c5ee305cda..0000000000
--- a/packages/client/src/api/app.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import API from "./api"
-
-/**
- * Fetches screen definition for an app.
- */
-export const fetchAppPackage = async appId => {
- return await API.get({
- url: `/api/applications/${appId}/appPackage`,
- })
-}
diff --git a/packages/client/src/api/attachments.js b/packages/client/src/api/attachments.js
deleted file mode 100644
index ed9c6fe522..0000000000
--- a/packages/client/src/api/attachments.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import API from "./api"
-
-/**
- * Uploads an attachment to the server.
- */
-export const uploadAttachment = async (data, tableId = "") => {
- return await API.post({
- url: `/api/attachments/${tableId}/upload`,
- body: data,
- json: false,
- })
-}
-
-/**
- * Generates a signed URL to upload a file to an external datasource.
- */
-export const getSignedDatasourceURL = async (datasourceId, bucket, key) => {
- if (!datasourceId) {
- return null
- }
- const res = await API.post({
- url: `/api/attachments/${datasourceId}/url`,
- body: { bucket, key },
- })
- if (res.error) {
- throw "Could not generate signed upload URL"
- }
- return res
-}
-
-/**
- * Uploads a file to an external datasource.
- */
-export const externalUpload = async (datasourceId, bucket, key, data) => {
- const { signedUrl, publicUrl } = await getSignedDatasourceURL(
- datasourceId,
- bucket,
- key
- )
- const res = await API.put({
- url: signedUrl,
- body: data,
- json: false,
- external: true,
- })
- if (res?.error) {
- throw "Could not upload file to signed URL"
- }
- return { publicUrl }
-}
diff --git a/packages/client/src/api/auth.js b/packages/client/src/api/auth.js
deleted file mode 100644
index 9ac09f5571..0000000000
--- a/packages/client/src/api/auth.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import API from "./api"
-import { enrichRows } from "./rows"
-import { TableNames } from "../constants"
-
-/**
- * Performs a log in request.
- */
-export const logIn = async ({ email, password }) => {
- if (!email) {
- return API.error("Please enter your email")
- }
- if (!password) {
- return API.error("Please enter your password")
- }
- return await API.post({
- url: "/api/global/auth",
- body: { username: email, password },
- })
-}
-
-/**
- * Logs the user out and invaidates their session.
- */
-export const logOut = async () => {
- return await API.post({
- url: "/api/global/auth/logout",
- })
-}
-
-/**
- * Fetches the currently logged in user object
- */
-export const fetchSelf = async () => {
- const user = await API.get({ url: "/api/self" })
- if (user && user._id) {
- if (user.roleId === "PUBLIC") {
- // Don't try to enrich a public user as it will 403
- return user
- } else {
- return (await enrichRows([user], TableNames.USERS))[0]
- }
- } else {
- return null
- }
-}
diff --git a/packages/client/src/api/automations.js b/packages/client/src/api/automations.js
deleted file mode 100644
index cb3e4623ad..0000000000
--- a/packages/client/src/api/automations.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import { notificationStore } from "stores/notification"
-import API from "./api"
-
-/**
- * Executes an automation. Must have "App Action" trigger.
- */
-export const triggerAutomation = async (automationId, fields) => {
- const res = await API.post({
- url: `/api/automations/${automationId}/trigger`,
- body: { fields },
- })
- res.error
- ? notificationStore.actions.error("An error has occurred")
- : notificationStore.actions.success("Automation triggered")
- return res
-}
diff --git a/packages/client/src/api/index.js b/packages/client/src/api/index.js
index d429eb437c..5eb6b2b6f4 100644
--- a/packages/client/src/api/index.js
+++ b/packages/client/src/api/index.js
@@ -1,11 +1,9 @@
-export * from "./rows"
-export * from "./auth"
-export * from "./tables"
-export * from "./attachments"
-export * from "./views"
-export * from "./relationships"
-export * from "./routes"
-export * from "./queries"
-export * from "./app"
-export * from "./automations"
-export * from "./analytics"
+import { API } from "./api.js"
+import { patchAPI } from "./patches.js"
+
+// Certain endpoints which return rows need patched so that they transform
+// and enrich the row docs, so that they can be correctly handled by the
+// client library
+patchAPI(API)
+
+export { API }
diff --git a/packages/client/src/api/patches.js b/packages/client/src/api/patches.js
new file mode 100644
index 0000000000..faad9c81ec
--- /dev/null
+++ b/packages/client/src/api/patches.js
@@ -0,0 +1,107 @@
+import { Constants } from "@budibase/frontend-core"
+import { FieldTypes } from "../constants"
+
+export const patchAPI = API => {
+ /**
+ * Enriches rows which contain certain field types so that they can
+ * be properly displayed.
+ * The ability to create these bindings has been removed, but they will still
+ * exist in client apps to support backwards compatibility.
+ */
+ const enrichRows = async (rows, tableId) => {
+ if (!Array.isArray(rows)) {
+ return []
+ }
+ if (rows.length) {
+ const tables = {}
+ for (let row of rows) {
+ // Fall back to passed in tableId if row doesn't have it specified
+ let rowTableId = row.tableId || tableId
+ let table = tables[rowTableId]
+ if (!table) {
+ // Fetch table schema so we can check column types
+ table = await API.fetchTableDefinition(rowTableId)
+ tables[rowTableId] = table
+ }
+ const schema = table?.schema
+ if (schema) {
+ const keys = Object.keys(schema)
+ for (let key of keys) {
+ const type = schema[key].type
+ if (type === FieldTypes.LINK && Array.isArray(row[key])) {
+ // Enrich row a string join of relationship fields
+ row[`${key}_text`] =
+ row[key]
+ ?.map(option => option?.primaryDisplay)
+ .filter(option => !!option)
+ .join(", ") || ""
+ } else if (type === "attachment") {
+ // Enrich row with the first image URL for any attachment fields
+ let url = null
+ if (Array.isArray(row[key]) && row[key][0] != null) {
+ url = row[key][0].url
+ }
+ row[`${key}_first`] = url
+ }
+ }
+ }
+ }
+ }
+ return rows
+ }
+
+ // Enrich rows so they properly handle client bindings
+ const fetchSelf = API.fetchSelf
+ API.fetchSelf = async () => {
+ const user = await fetchSelf()
+ if (user && user._id) {
+ if (user.roleId === "PUBLIC") {
+ // Don't try to enrich a public user as it will 403
+ return user
+ } else {
+ return (await enrichRows([user], Constants.TableNames.USERS))[0]
+ }
+ } else {
+ return null
+ }
+ }
+ const fetchRelationshipData = API.fetchRelationshipData
+ API.fetchRelationshipData = async params => {
+ const tableId = params?.tableId
+ const rows = await fetchRelationshipData(params)
+ return await enrichRows(rows, tableId)
+ }
+ const fetchTableData = API.fetchTableData
+ API.fetchTableData = async tableId => {
+ const rows = await fetchTableData(tableId)
+ return await enrichRows(rows, tableId)
+ }
+ const searchTable = API.searchTable
+ API.searchTable = async params => {
+ const tableId = params?.tableId
+ const output = await searchTable(params)
+ return {
+ ...output,
+ rows: await enrichRows(output?.rows, tableId),
+ }
+ }
+ const fetchViewData = API.fetchViewData
+ API.fetchViewData = async params => {
+ const tableId = params?.tableId
+ const rows = await fetchViewData(params)
+ return await enrichRows(rows, tableId)
+ }
+
+ // Wipe any HBS formulae from table definitions, as these interfere with
+ // handlebars enrichment
+ const fetchTableDefinition = API.fetchTableDefinition
+ API.fetchTableDefinition = async tableId => {
+ const definition = await fetchTableDefinition(tableId)
+ Object.keys(definition?.schema || {}).forEach(field => {
+ if (definition.schema[field]?.type === "formula") {
+ delete definition.schema[field].formula
+ }
+ })
+ return definition
+ }
+}
diff --git a/packages/client/src/api/queries.js b/packages/client/src/api/queries.js
deleted file mode 100644
index e8972f657e..0000000000
--- a/packages/client/src/api/queries.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import { notificationStore, dataSourceStore } from "stores"
-import API from "./api"
-
-/**
- * Executes a query against an external data connector.
- */
-export const executeQuery = async ({ queryId, pagination, parameters }) => {
- const query = await fetchQueryDefinition(queryId)
- if (query?.datasourceId == null) {
- notificationStore.actions.error("That query couldn't be found")
- return
- }
- const res = await API.post({
- url: `/api/v2/queries/${queryId}`,
- body: {
- parameters,
- pagination,
- },
- })
- if (res.error) {
- notificationStore.actions.error("An error has occurred")
- } else if (!query.readable) {
- notificationStore.actions.success("Query executed successfully")
- await dataSourceStore.actions.invalidateDataSource(query.datasourceId)
- }
- return res
-}
-
-/**
- * Fetches the definition of an external query.
- */
-export const fetchQueryDefinition = async queryId => {
- return await API.get({ url: `/api/queries/${queryId}`, cache: true })
-}
diff --git a/packages/client/src/api/relationships.js b/packages/client/src/api/relationships.js
deleted file mode 100644
index fe92bfd038..0000000000
--- a/packages/client/src/api/relationships.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import API from "./api"
-import { enrichRows } from "./rows"
-
-/**
- * Fetches related rows for a certain field of a certain row.
- */
-export const fetchRelationshipData = async ({ tableId, rowId, fieldName }) => {
- if (!tableId || !rowId || !fieldName) {
- return []
- }
- const response = await API.get({ url: `/api/${tableId}/${rowId}/enrich` })
- const rows = response[fieldName] || []
- return await enrichRows(rows, tableId)
-}
diff --git a/packages/client/src/api/routes.js b/packages/client/src/api/routes.js
deleted file mode 100644
index d762461075..0000000000
--- a/packages/client/src/api/routes.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import API from "./api"
-
-/**
- * Fetches available routes for the client app.
- */
-export const fetchRoutes = async () => {
- return await API.get({
- url: `/api/routing/client`,
- })
-}
diff --git a/packages/client/src/api/rows.js b/packages/client/src/api/rows.js
deleted file mode 100644
index 2d6df90e83..0000000000
--- a/packages/client/src/api/rows.js
+++ /dev/null
@@ -1,155 +0,0 @@
-import { notificationStore, dataSourceStore } from "stores"
-import API from "./api"
-import { fetchTableDefinition } from "./tables"
-import { FieldTypes } from "../constants"
-
-/**
- * Fetches data about a certain row in a table.
- */
-export const fetchRow = async ({ tableId, rowId }) => {
- if (!tableId || !rowId) {
- return
- }
- const row = await API.get({
- url: `/api/${tableId}/rows/${rowId}`,
- })
- return (await enrichRows([row], tableId))[0]
-}
-
-/**
- * Creates a row in a table.
- */
-export const saveRow = async row => {
- if (!row?.tableId) {
- return
- }
- const res = await API.post({
- url: `/api/${row.tableId}/rows`,
- body: row,
- })
- res.error
- ? notificationStore.actions.error("An error has occurred")
- : notificationStore.actions.success("Row saved")
-
- // Refresh related datasources
- await dataSourceStore.actions.invalidateDataSource(row.tableId)
-
- return res
-}
-
-/**
- * Updates a row in a table.
- */
-export const updateRow = async row => {
- if (!row?.tableId || !row?._id) {
- return
- }
- const res = await API.patch({
- url: `/api/${row.tableId}/rows`,
- body: row,
- })
- res.error
- ? notificationStore.actions.error("An error has occurred")
- : notificationStore.actions.success("Row updated")
-
- // Refresh related datasources
- await dataSourceStore.actions.invalidateDataSource(row.tableId)
-
- return res
-}
-
-/**
- * Deletes a row from a table.
- */
-export const deleteRow = async ({ tableId, rowId, revId }) => {
- if (!tableId || !rowId || !revId) {
- return
- }
- const res = await API.del({
- url: `/api/${tableId}/rows`,
- body: {
- _id: rowId,
- _rev: revId,
- },
- })
- res.error
- ? notificationStore.actions.error("An error has occurred")
- : notificationStore.actions.success("Row deleted")
-
- // Refresh related datasources
- await dataSourceStore.actions.invalidateDataSource(tableId)
-
- return res
-}
-
-/**
- * Deletes many rows from a table.
- */
-export const deleteRows = async ({ tableId, rows }) => {
- if (!tableId || !rows) {
- return
- }
- const res = await API.del({
- url: `/api/${tableId}/rows`,
- body: {
- rows,
- },
- })
- res.error
- ? notificationStore.actions.error("An error has occurred")
- : notificationStore.actions.success(`${rows.length} row(s) deleted`)
-
- // Refresh related datasources
- await dataSourceStore.actions.invalidateDataSource(tableId)
-
- return res
-}
-
-/**
- * Enriches rows which contain certain field types so that they can
- * be properly displayed.
- * The ability to create these bindings has been removed, but they will still
- * exist in client apps to support backwards compatibility.
- */
-export const enrichRows = async (rows, tableId) => {
- if (!Array.isArray(rows)) {
- return []
- }
- if (rows.length) {
- // map of tables, incase a row being loaded is not from the same table
- const tables = {}
- for (let row of rows) {
- // fallback to passed in tableId if row doesn't have it specified
- let rowTableId = row.tableId || tableId
- let table = tables[rowTableId]
- if (!table) {
- // Fetch table schema so we can check column types
- table = await fetchTableDefinition(rowTableId)
- tables[rowTableId] = table
- }
- const schema = table?.schema
- if (schema) {
- const keys = Object.keys(schema)
- for (let key of keys) {
- const type = schema[key].type
- if (type === FieldTypes.LINK && Array.isArray(row[key])) {
- // Enrich row a string join of relationship fields
- row[`${key}_text`] =
- row[key]
- ?.map(option => option?.primaryDisplay)
- .filter(option => !!option)
- .join(", ") || ""
- } else if (type === "attachment") {
- // Enrich row with the first image URL for any attachment fields
- let url = null
- if (Array.isArray(row[key]) && row[key][0] != null) {
- url = row[key][0].url
- }
- row[`${key}_first`] = url
- }
- }
- }
- }
- }
- return rows
-}
diff --git a/packages/client/src/api/tables.js b/packages/client/src/api/tables.js
deleted file mode 100644
index 09f77de6ee..0000000000
--- a/packages/client/src/api/tables.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import API from "./api"
-import { enrichRows } from "./rows"
-
-/**
- * Fetches a table definition.
- * Since definitions cannot change at runtime, the result is cached.
- */
-export const fetchTableDefinition = async tableId => {
- const res = await API.get({ url: `/api/tables/${tableId}`, cache: true })
-
- // Wipe any HBS formulae, as these interfere with handlebars enrichment
- Object.keys(res?.schema || {}).forEach(field => {
- if (res.schema[field]?.type === "formula") {
- delete res.schema[field].formula
- }
- })
-
- return res
-}
-
-/**
- * Fetches all rows from a table.
- */
-export const fetchTableData = async tableId => {
- const rows = await API.get({ url: `/api/${tableId}/rows` })
- return await enrichRows(rows, tableId)
-}
-
-/**
- * Searches a table using Lucene.
- */
-export const searchTable = async ({
- tableId,
- query,
- bookmark,
- limit,
- sort,
- sortOrder,
- sortType,
- paginate,
-}) => {
- if (!tableId || !query) {
- return {
- rows: [],
- }
- }
- const res = await API.post({
- url: `/api/${tableId}/search`,
- body: {
- query,
- bookmark,
- limit,
- sort,
- sortOrder,
- sortType,
- paginate,
- },
- })
- return {
- ...res,
- rows: await enrichRows(res?.rows, tableId),
- }
-}
diff --git a/packages/client/src/api/views.js b/packages/client/src/api/views.js
deleted file mode 100644
index d173e53d53..0000000000
--- a/packages/client/src/api/views.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import API from "./api"
-import { enrichRows } from "./rows"
-
-/**
- * Fetches all rows in a view.
- */
-export const fetchViewData = async ({
- name,
- field,
- groupBy,
- calculation,
- tableId,
-}) => {
- const params = new URLSearchParams()
-
- if (calculation) {
- params.set("field", field)
- params.set("calculation", calculation)
- }
- if (groupBy) {
- params.set("group", groupBy ? "true" : "false")
- }
-
- const QUERY_VIEW_URL = field
- ? `/api/views/${name}?${params}`
- : `/api/views/${name}`
-
- const rows = await API.get({ url: QUERY_VIEW_URL })
- return await enrichRows(rows, tableId)
-}
diff --git a/packages/client/src/components/ClientApp.svelte b/packages/client/src/components/ClientApp.svelte
index 7f5bed210e..5bd5d2d46f 100644
--- a/packages/client/src/components/ClientApp.svelte
+++ b/packages/client/src/components/ClientApp.svelte
@@ -2,6 +2,8 @@
import { writable, get } from "svelte/store"
import { setContext, onMount } from "svelte"
import { Layout, Heading, Body } from "@budibase/bbui"
+ import ErrorSVG from "@budibase/frontend-core/assets/error.svg"
+ import { Constants, CookieUtils } from "@budibase/frontend-core"
import Component from "./Component.svelte"
import SDK from "sdk"
import {
@@ -24,7 +26,6 @@
import HoverIndicator from "components/preview/HoverIndicator.svelte"
import CustomThemeWrapper from "./CustomThemeWrapper.svelte"
import DNDHandler from "components/preview/DNDHandler.svelte"
- import ErrorSVG from "builder/assets/error.svg"
import KeyboardManager from "components/preview/KeyboardManager.svelte"
// Provide contexts
@@ -63,9 +64,8 @@
} else {
// The user is not logged in, redirect them to login
const returnUrl = `${window.location.pathname}${window.location.hash}`
- // TODO: reuse `Cookies` from builder when frontend-core is added
- window.document.cookie = `budibase:returnurl=${returnUrl}; Path=/`
- window.location = `/builder/auth/login`
+ CookieUtils.setCookie(Constants.Cookies.ReturnUrl, returnUrl)
+ window.location = "/builder/auth/login"
}
}
}
diff --git a/packages/client/src/components/Component.svelte b/packages/client/src/components/Component.svelte
index 8cd1849336..78fff52426 100644
--- a/packages/client/src/components/Component.svelte
+++ b/packages/client/src/components/Component.svelte
@@ -1,15 +1,20 @@
-{#key renderKey}
- {#if constructor && initialSettings && (visible || inSelectedPath)}
-
-
-
-
- {#if children.length}
- {#each children as child (child._id)}
-
- {/each}
- {:else if emptyState}
-
- {:else if isBlock}
-
- {/if}
-
-
- {/if}
-{/key}
+{#if constructor && initialSettings && (visible || inSelectedPath)}
+
+
+
+
+ {#if children.length}
+ {#each children as child (child._id)}
+
+ {/each}
+ {:else if emptyState}
+
+ {:else if isBlock}
+
+ {/if}
+
+
+{/if}