further tidy up and removal
This commit is contained in:
parent
85f1faeb3c
commit
94b2e0f134
Binary file not shown.
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"globals": {
|
||||
"emit": true,
|
||||
"key": true
|
||||
},
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": ["eslint:recommended"],
|
||||
"rules": {
|
||||
}
|
||||
}
|
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
require("../../cli/src/cli")()
|
|
@ -2,15 +2,16 @@
|
|||
"name": "@budibase/server",
|
||||
"version": "0.0.32",
|
||||
"description": "Budibase Web Server",
|
||||
"main": "index.js",
|
||||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
"test": "jest apps && jest builder",
|
||||
"test": "jest",
|
||||
"test:integration": "jest neo --runInBand",
|
||||
"test:watch": "jest -w",
|
||||
"initialise": "node ../cli/bin/budi init ./myapps -b local -q",
|
||||
"budi": "node ../cli/bin/budi",
|
||||
"dev:builder": "nodemon index",
|
||||
"electron": "electron electron.js"
|
||||
"dev:builder": "nodemon src/index",
|
||||
"electron": "electron src/electron.js",
|
||||
"lint": "eslint --fix src/"
|
||||
},
|
||||
"keywords": [
|
||||
"budibase"
|
||||
|
@ -46,6 +47,7 @@
|
|||
"@jest/test-sequencer": "^24.8.0",
|
||||
"electron": "^8.2.5",
|
||||
"electron-builder": "^22.6.0",
|
||||
"eslint": "^6.8.0",
|
||||
"jest": "^24.8.0",
|
||||
"nodemon": "^2.0.2",
|
||||
"server-destroy": "^1.0.1",
|
||||
|
|
|
@ -54,7 +54,7 @@ exports.destroy = async function(ctx) {
|
|||
budibaseApp.instances = budibaseApp.instances.filter(
|
||||
instance => instance !== ctx.params.instanceId
|
||||
)
|
||||
const updatedApp = await clientDb.put(budibaseApp)
|
||||
await clientDb.put(budibaseApp)
|
||||
|
||||
ctx.body = {
|
||||
message: `Instance Database ${ctx.params.instanceId} successfully destroyed.`,
|
|
@ -1,5 +1,5 @@
|
|||
const supertest = require("supertest");
|
||||
const app = require("../../../../app");
|
||||
const app = require("../../../app");
|
||||
const { createInstanceDatabase, createModel } = require("./couchTestUtils");
|
||||
|
||||
|
|
@ -6,7 +6,6 @@ const path = require("path")
|
|||
const BUDIBASE_DIR = path.join(os.homedir(), ".budibase")
|
||||
|
||||
const COUCH_DB_URL = process.env.COUCH_DB_URL || `leveldb://${BUDIBASE_DIR}/`
|
||||
const DATABASE_TYPE = process.env.DATABASE_TYPE || "couch"
|
||||
|
||||
const Pouch = PouchDB.defaults({
|
||||
prefix: COUCH_DB_URL,
|
|
@ -2,10 +2,12 @@ const { app, BrowserWindow } = require('electron');
|
|||
|
||||
require("dotenv").config()
|
||||
|
||||
const DEV_URL = "http://localhost:4001";
|
||||
|
||||
function createWindow() {
|
||||
app.server = require("./app")();
|
||||
let win = new BrowserWindow({ width: 1920, height: 1080 });
|
||||
win.loadURL('http://localhost:4001');
|
||||
win.loadURL(DEV_URL);
|
||||
}
|
||||
|
||||
app.whenReady().then(createWindow)
|
|
@ -0,0 +1,7 @@
|
|||
const { resolve } = require("path")
|
||||
const { cwd } = require("process")
|
||||
|
||||
const appPackageFolder = (config, appname) =>
|
||||
resolve(cwd(), config.latestPackagesFolder, appname)
|
||||
|
||||
module.exports.appPackageFolder = appPackageFolder
|
|
@ -1,17 +0,0 @@
|
|||
const app = require("./testApp")()
|
||||
const authenticateMaster = require("./authenticate")
|
||||
const createNewApp = require("./createNewApp")
|
||||
const multipleInstances = require("./multipleInstances")
|
||||
const serveui = require("./serveui")
|
||||
|
||||
beforeAll(async () => await app.start())
|
||||
|
||||
afterAll(async () => await app.destroy())
|
||||
|
||||
describe("authenticateMaster", () =>
|
||||
authenticateMaster(app, "_master", "masterOwner"))
|
||||
describe("createNewApp", () => createNewApp(app))
|
||||
describe("authenticateTestApp", () =>
|
||||
authenticateMaster(app, "testApp", "testAppUser1"))
|
||||
describe("multipleInstances", () => multipleInstances(app))
|
||||
describe("serveUi", () => serveui(app))
|
|
@ -1,187 +0,0 @@
|
|||
const statusCodes = require("../utilities/statusCodes")
|
||||
const { readFile } = require("fs-extra")
|
||||
const { timeout } = require("./helpers")
|
||||
|
||||
module.exports = (app, appName, userName) => {
|
||||
const credentials = app.credentials[userName]
|
||||
|
||||
it("should return unauthorized if username is incorrect", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: "unknownuser",
|
||||
password: credentials.password,
|
||||
})
|
||||
.expect(statusCodes.UNAUTHORIZED)
|
||||
})
|
||||
|
||||
it("should return unauthorized if password is incorrect", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: credentials.username,
|
||||
password: "incorrect_password",
|
||||
})
|
||||
.expect(statusCodes.UNAUTHORIZED)
|
||||
})
|
||||
|
||||
it("should not get cookie when unauthorized", async () => {
|
||||
const response = await app.post(`/${appName}/api/authenticate`, {
|
||||
username: credentials.username,
|
||||
password: "incorrect_password",
|
||||
})
|
||||
|
||||
expect(response.header["set-cookie"]).toBeUndefined()
|
||||
})
|
||||
|
||||
it("should return ok correct username and password supplied", async () => {
|
||||
const response = await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: credentials.username,
|
||||
password: credentials.password,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
credentials.cookie = response.header["set-cookie"]
|
||||
})
|
||||
|
||||
const testUserName = appName + "_test_user"
|
||||
let testPassword = "test_user_password"
|
||||
it("should be able to create new user with authenticated cookie", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/createUser`, {
|
||||
user: {
|
||||
name: testUserName,
|
||||
accessLevels: ["owner"],
|
||||
enabled: true,
|
||||
},
|
||||
password: testPassword,
|
||||
})
|
||||
.set("cookie", credentials.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
|
||||
let newUserCookie
|
||||
it("should be able to authenticate with new user", async () => {
|
||||
const responseNewUser = await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: testPassword,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
newUserCookie = responseNewUser.header["set-cookie"]
|
||||
|
||||
expect(newUserCookie).toBeDefined()
|
||||
expect(newUserCookie).not.toEqual(credentials.cookie)
|
||||
|
||||
app
|
||||
.get("/_master/api/users/")
|
||||
.set("cookie", newUserCookie)
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
|
||||
it("should not be able to perform requests when user is disabled", async () => {
|
||||
//HERE
|
||||
await app
|
||||
.post(`/${appName}/api/disableUser`, {
|
||||
username: testUserName,
|
||||
})
|
||||
.set("cookie", credentials.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
await app
|
||||
.get(`/${appName}/api/users`)
|
||||
.set("cookie", newUserCookie)
|
||||
.expect(statusCodes.UNAUTHORIZED)
|
||||
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: testPassword,
|
||||
})
|
||||
.expect(statusCodes.UNAUTHORIZED)
|
||||
})
|
||||
|
||||
it("should not be able to re-authenticate when user is disabled", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: testPassword,
|
||||
})
|
||||
.expect(statusCodes.UNAUTHORIZED)
|
||||
})
|
||||
|
||||
it("should be able with re-authenticate when user is enabled again", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/enableUser`, {
|
||||
username: testUserName,
|
||||
})
|
||||
.set("cookie", credentials.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: testPassword,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
|
||||
let testUserTempCode
|
||||
it("should be able to reset password with temporary access", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/createTemporaryAccess`, {
|
||||
username: testUserName,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
testPassword = "test_user_new_password"
|
||||
|
||||
// the behaviour that creates the below file is async,
|
||||
/// to this timeout is giving it a change to work its magic
|
||||
await timeout(10)
|
||||
|
||||
const testUserTempCode = await readFile(
|
||||
`./tests/.data/tempaccess${testUserName}`,
|
||||
"utf8"
|
||||
)
|
||||
|
||||
await app
|
||||
.post(`/${appName}/api/setPasswordFromTemporaryCode`, {
|
||||
username: testUserName,
|
||||
tempCode: testUserTempCode,
|
||||
newPassword: testPassword,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: testPassword,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
|
||||
it("should not be able to set password with used temp code", async () => {
|
||||
await app
|
||||
.post(`/${appName}/api/setPasswordFromTemporaryCode`, {
|
||||
username: testUserName,
|
||||
tempCode: testUserTempCode,
|
||||
newPassword: "whatever",
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: "whatever",
|
||||
})
|
||||
.expect(statusCodes.UNAUTHORIZED)
|
||||
|
||||
await app
|
||||
.post(`/${appName}/api/authenticate`, {
|
||||
username: testUserName,
|
||||
password: testPassword,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
}
|
|
@ -1,246 +0,0 @@
|
|||
const testAppDef = require("../appPackages/testApp/appDefinition.json")
|
||||
const testAccessLevels = require("../appPackages/testApp/access_levels.json")
|
||||
const mainPage = require("../appPackages/testApp/pages/main/page.json")
|
||||
const unauthenticatedPage = require("../appPackages/testApp/pages/unauthenticated/page.json")
|
||||
const testComponents = require("../appPackages/testApp/customComponents/components.json")
|
||||
const testMoreComponents = require("../appPackages/testApp/moreCustomComponents/components.json")
|
||||
const statusCodes = require("../utilities/statusCodes")
|
||||
const screen1 = require("../appPackages/testApp/pages/main/screens/screen1.json")
|
||||
const screen2 = require("../appPackages/testApp/pages/main/screens/screen2.json")
|
||||
const { readJSON, pathExists, unlink, readFile } = require("fs-extra")
|
||||
const { getHashedCssPaths } = require("../utilities/builder/convertCssToFiles")
|
||||
const listScreens = require("../utilities/builder/listScreens")
|
||||
const { getApisWithFullAccess } = require("../utilities/budibaseApi")
|
||||
|
||||
const app = require("./testApp")()
|
||||
testComponents.textbox.name = `./customComponents/textbox`
|
||||
testMoreComponents.textbox.name = `./moreCustomComponents/textbox`
|
||||
|
||||
let _master
|
||||
const getmaster = async () => {
|
||||
if (!_master)
|
||||
_master = await getApisWithFullAccess({}, app.masterAppPackage)
|
||||
return _master
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
const testScreen = "./appPackages/testApp/pages/main/screens/newscreen.json"
|
||||
const testScreenAfterMove =
|
||||
"./appPackages/testApp/pages/main/screens/anotherscreen.json"
|
||||
|
||||
if (await pathExists(testScreen)) await unlink(testScreen)
|
||||
if (await pathExists(testScreenAfterMove)) await unlink(testScreenAfterMove)
|
||||
|
||||
await app.start()
|
||||
|
||||
const response = await app
|
||||
.post(`/_master/api/authenticate`, {
|
||||
username: app.credentials.masterOwner.username,
|
||||
password: app.credentials.masterOwner.password,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
app.credentials.masterOwner.cookie = response.header["set-cookie"]
|
||||
|
||||
const master = await getmaster()
|
||||
const newApp = master.recordApi.getNew("/applications", "application")
|
||||
newApp.name = "testApp"
|
||||
await app
|
||||
.post(`/_master/api/record/${newApp.key}`, newApp)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
|
||||
afterAll(async () => await app.destroy())
|
||||
|
||||
it("/apppackage should get appDefinition", async () => {
|
||||
const { body } = await app
|
||||
.get("/_builder/api/testApp/appPackage")
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
expect(body.appDefinition).toEqual(testAppDef)
|
||||
})
|
||||
|
||||
it("/apppackage should get access levels", async () => {
|
||||
const { body } = await app
|
||||
.get("/_builder/api/testApp/appPackage")
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
expect(body.accessLevels).toEqual(testAccessLevels)
|
||||
})
|
||||
|
||||
it("/apppackage should get pages", async () => {
|
||||
const { body } = await app
|
||||
.get("/_builder/api/testApp/appPackage")
|
||||
.expect(statusCodes.OK)
|
||||
expect(body.pages).toEqual({
|
||||
main: { ...mainPage, name: "main" },
|
||||
unauthenticated: { ...unauthenticatedPage, name: "unauthenticated" },
|
||||
})
|
||||
})
|
||||
|
||||
it("/apppackage should get components", async () => {
|
||||
const { body } = await app
|
||||
.get("/_builder/api/testApp/appPackage")
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
expect(body.components.components["./customComponents/textbox"]).toBeDefined()
|
||||
expect(
|
||||
body.components.components["./moreCustomComponents/textbox"]
|
||||
).toBeDefined()
|
||||
|
||||
expect(body.components.components["./customComponents/textbox"]).toEqual(
|
||||
testComponents.textbox
|
||||
)
|
||||
|
||||
expect(body.components.components["./moreCustomComponents/textbox"]).toEqual(
|
||||
testMoreComponents.textbox
|
||||
)
|
||||
})
|
||||
|
||||
it("/pages/:pageName/screens should get screens", async () => {
|
||||
const { body } = await app
|
||||
.get("/_builder/api/testApp/pages/main/screens")
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const expectedComponents = {
|
||||
screen1: { ...screen1, name: "screen1" },
|
||||
screen2: { ...screen2, name: "screen2" },
|
||||
}
|
||||
|
||||
expect(body).toEqual(expectedComponents)
|
||||
})
|
||||
|
||||
it("should be able to create new screen", async () => {
|
||||
const newscreen = {
|
||||
name: "newscreen",
|
||||
props: {
|
||||
_component: "@budibase/standard-component/div",
|
||||
className: "something",
|
||||
},
|
||||
}
|
||||
|
||||
await app
|
||||
.post("/_builder/api/testApp/pages/main/screen", newscreen)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const screenFile = "./appPackages/testApp/pages/main/screens/newscreen.json"
|
||||
expect(await pathExists(screenFile)).toBe(true)
|
||||
expect(await readJSON(screenFile)).toEqual(newscreen)
|
||||
})
|
||||
|
||||
it("should be able to update screen", async () => {
|
||||
const updatedscreen = {
|
||||
name: "newscreen",
|
||||
props: {
|
||||
_component: "@budibase/standard-component/div",
|
||||
className: "something else",
|
||||
},
|
||||
}
|
||||
|
||||
await app
|
||||
.post("/_builder/api/testApp/pages/main/screen", updatedscreen)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const screenFile = "./appPackages/testApp/pages/main/screens/newscreen.json"
|
||||
expect(await readJSON(screenFile)).toEqual(updatedscreen)
|
||||
})
|
||||
|
||||
it("should be able to rename screen", async () => {
|
||||
await app
|
||||
.patch("/_builder/api/testApp/pages/main/screen", {
|
||||
oldname: "newscreen",
|
||||
newname: "anotherscreen",
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const oldcomponentFile =
|
||||
"./appPackages/testApp/pages/main/screens/newscreen.json"
|
||||
const newcomponentFile =
|
||||
"./appPackages/testApp/pages/main/screens/anotherscreen.json"
|
||||
|
||||
expect(await pathExists(oldcomponentFile)).toBe(false)
|
||||
expect(await pathExists(newcomponentFile)).toBe(true)
|
||||
})
|
||||
|
||||
it("should be able to delete screen", async () => {
|
||||
await app
|
||||
.delete("/_builder/api/testApp/pages/main/screen/anotherscreen")
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const componentFile =
|
||||
"./appPackages/testApp/pages/main/screens/anotherscreen.json"
|
||||
expect(await pathExists(componentFile)).toBe(false)
|
||||
})
|
||||
|
||||
it("/savePage should prepare all necessary client files", async () => {
|
||||
const mainCss = "/*main page css*/"
|
||||
mainPage._css = mainCss
|
||||
const screen1Css = "/*screen1 css*/"
|
||||
screen1._css = screen1Css
|
||||
const screen2Css = "/*screen2 css*/"
|
||||
screen2._css = screen2Css
|
||||
|
||||
await app
|
||||
.post("/_builder/api/testApp/pages/main", {
|
||||
appDefinition: testAppDef,
|
||||
accessLevels: testAccessLevels,
|
||||
page: mainPage,
|
||||
uiFunctions: "{'1234':() => 'test return'}",
|
||||
screens: [screen1, screen2],
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const publicFolderMain = relative =>
|
||||
"./appPackages/testApp/public/main" + relative
|
||||
|
||||
const cssDir = publicFolderMain("/css")
|
||||
|
||||
expect(await pathExists(publicFolderMain("/index.html"))).toBe(true)
|
||||
|
||||
expect(
|
||||
await pathExists(publicFolderMain("/lib/customComponents/index.js"))
|
||||
).toBe(true)
|
||||
|
||||
expect(
|
||||
await pathExists(publicFolderMain("/lib/moreCustomComponents/index.js"))
|
||||
).toBe(true)
|
||||
|
||||
expect(
|
||||
await pathExists(
|
||||
publicFolderMain(
|
||||
"/lib/node_modules/@budibase/standard-components/dist/index.js"
|
||||
)
|
||||
)
|
||||
).toBe(true)
|
||||
|
||||
const indexHtmlMain = await readFile(publicFolderMain("/index.html"), "utf8")
|
||||
|
||||
const pageCssPaths = getHashedCssPaths(cssDir, mainCss)
|
||||
const screen1CssPaths = getHashedCssPaths(cssDir, screen1Css)
|
||||
const screen2CssPaths = getHashedCssPaths(cssDir, screen2Css)
|
||||
|
||||
expect(await pathExists(publicFolderMain(pageCssPaths.url))).toBe(true)
|
||||
const savedPageCss = await readFile(
|
||||
publicFolderMain(pageCssPaths.url),
|
||||
"utf8"
|
||||
)
|
||||
expect(savedPageCss).toEqual(mainCss)
|
||||
expect(indexHtmlMain.includes(pageCssPaths.url)).toBe(true)
|
||||
|
||||
expect(await pathExists(publicFolderMain(screen1CssPaths.url))).toBe(true)
|
||||
const savedScreen1Css = await readFile(
|
||||
publicFolderMain(screen1CssPaths.url),
|
||||
"utf8"
|
||||
)
|
||||
expect(savedScreen1Css).toEqual(screen1Css)
|
||||
expect(indexHtmlMain.includes(screen1CssPaths.url)).toBe(true)
|
||||
|
||||
expect(await pathExists(publicFolderMain(screen2CssPaths.url))).toBe(true)
|
||||
const savedScreen2Css = await readFile(
|
||||
publicFolderMain(screen2CssPaths.url),
|
||||
"utf8"
|
||||
)
|
||||
expect(savedScreen2Css).toEqual(screen2Css)
|
||||
expect(indexHtmlMain.includes(screen2CssPaths.url)).toBe(true)
|
||||
})
|
|
@ -1,143 +0,0 @@
|
|||
const statusCodes = require("../utilities/statusCodes")
|
||||
const constructHierarchy = require("../utilities/constructHierarchy")
|
||||
const { readFile } = require("fs-extra")
|
||||
constructHierarchy(require("../appPackages/_master/appDefinition.json"))
|
||||
const { createTarGzPackage } = require("../utilities/targzAppPackage")
|
||||
|
||||
module.exports = app => {
|
||||
let _master
|
||||
const getmaster = async () => {
|
||||
if (!_master)
|
||||
_master = await getApisWithFullAccess({}, app.masterAppPackage)
|
||||
return _master
|
||||
}
|
||||
|
||||
let newAppKey = ""
|
||||
it("create new application should be successful for owner", async () => {
|
||||
const master = await getmaster()
|
||||
const newApp = master.recordApi.getNew("/applications", "application")
|
||||
newApp.name = app.testAppInfo.name
|
||||
newAppKey = newApp.key
|
||||
app.apps.testApp1.key = newAppKey
|
||||
await app
|
||||
.post(`/_master/api/record/${newApp.key}`, newApp)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const response = await app
|
||||
.get(`/_master/api/record/${newApp.key}`)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
expect(response.body.name).toBe(newApp.name)
|
||||
})
|
||||
|
||||
let version1Key = ""
|
||||
it("should be able to upload new version including package files", async () => {
|
||||
jest.setTimeout(30000)
|
||||
const master = await getmaster()
|
||||
const version1 = master.recordApi.getNew(`${newAppKey}/versions`, "version")
|
||||
version1.name = "v1"
|
||||
version1.defaultAccessLevel = "owner"
|
||||
version1Key = version1.key
|
||||
|
||||
const { path, size } = await createTarGzPackage(app.config, "testApp")
|
||||
|
||||
version1.package = { relativePath: "package.tar.gz", size }
|
||||
|
||||
await app
|
||||
.post(`/_master/api/record/${version1.key}`, version1)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
await app
|
||||
.post(`/_master/api/files/${version1.key}`)
|
||||
.attach("file", path, "package.tar.gz")
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const savedAppResponse = await app
|
||||
.get(`/_master/api/record/${newAppKey}`)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
|
||||
const savedApp = savedAppResponse.body
|
||||
savedApp.defaultVersion = version1
|
||||
await app
|
||||
.post(`/_master/api/record/${newAppKey}`, savedApp)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
app.apps.testApp1.version1 = version1
|
||||
})
|
||||
|
||||
let instance1
|
||||
it("should be able to create new instance of app", async () => {
|
||||
const master = await getmaster()
|
||||
instance1 = master.recordApi.getNew(`${newAppKey}/instances`, "instance")
|
||||
instance1.name = "instance 1"
|
||||
instance1.active = true
|
||||
instance1.version = {
|
||||
key: version1Key,
|
||||
name: "v1",
|
||||
defaultAccessLevel: "owner",
|
||||
}
|
||||
|
||||
await app
|
||||
.post(`/_master/api/record/${instance1.key}`, instance1)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const loadInstanceResponse = await app
|
||||
.get(`/_master/api/record/${instance1.key}`)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
instance1 = loadInstanceResponse.body
|
||||
app.apps.testApp1.instance1 = instance1
|
||||
})
|
||||
|
||||
let user1_instance1
|
||||
it("should be able to create new user on instance, via master", async () => {
|
||||
const master = await getmaster()
|
||||
user1_instance1 = master.recordApi.getNew(`${newAppKey}/users`, "user")
|
||||
user1_instance1.name = app.credentials.testAppUser1.username
|
||||
user1_instance1.createdByMaster = true
|
||||
master.recordApi.setCustomId(user1_instance1, user1_instance1.name)
|
||||
/*const lookupResponse = await app.get(`/_master/api/lookup_field/${user1_instance1.key}?fields=instance`)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK);
|
||||
*/
|
||||
user1_instance1.instance = instance1
|
||||
user1_instance1.active = true
|
||||
//await timeout(100);
|
||||
await app
|
||||
.post(`/_master/api/record/${user1_instance1.key}`, user1_instance1)
|
||||
.set("cookie", app.credentials.masterOwner.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
})
|
||||
|
||||
it("should be able to set password for new user using temporary code", async () => {
|
||||
const testUserTempCode = await readFile(
|
||||
`./tests/.data/tempaccess${user1_instance1.name}`,
|
||||
"utf8"
|
||||
)
|
||||
user1_instance1.password = app.credentials.testAppUser1.password
|
||||
|
||||
await app
|
||||
.post("/testApp/api/setPasswordFromTemporaryCode", {
|
||||
username: app.credentials.testAppUser1.username,
|
||||
tempCode: testUserTempCode,
|
||||
newPassword: app.credentials.testAppUser1.password,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const response = await app
|
||||
.post("/testApp/api/authenticate", {
|
||||
username: app.credentials.testAppUser1.username,
|
||||
password: app.credentials.testAppUser1.password,
|
||||
})
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
app.credentials.testAppUser1.cookie = response.header["set-cookie"]
|
||||
})
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
const timeout = ms => new Promise(resolve => setTimeout(resolve, ms))
|
||||
|
||||
exports.timeout = timeout
|
||||
|
||||
module.exports.sleep = async (ms, fn, ...args) => {
|
||||
await timeout(ms)
|
||||
return await fn(...args)
|
||||
}
|
|
@ -1,135 +0,0 @@
|
|||
const statusCodes = require("../utilities/statusCodes")
|
||||
const { readFile, writeFile, remove } = require("fs-extra")
|
||||
|
||||
module.exports = app => {
|
||||
it("should serve unauthenticated index.html as default", async () => {
|
||||
const response = await app.get("/testApp").expect(statusCodes.OK)
|
||||
|
||||
const expectedIndexHtml = await readFile(
|
||||
"appPackages/testApp/public/unauthenticated/index.html",
|
||||
"utf8"
|
||||
)
|
||||
|
||||
expect(response.text).toBe(expectedIndexHtml)
|
||||
})
|
||||
|
||||
it("should serve specified files when unauthenticated", async () => {
|
||||
const response = await app.get("/testApp/app.js").expect(statusCodes.OK)
|
||||
|
||||
const expectedFile = await readFile(
|
||||
"appPackages/testApp/public/unauthenticated/app.js",
|
||||
"utf8"
|
||||
)
|
||||
|
||||
expect(response.text).toBe(expectedFile)
|
||||
})
|
||||
|
||||
it("should serve main index.html as default when authenticated", async () => {
|
||||
const response = await app
|
||||
.get("/testApp")
|
||||
.set("cookie", app.credentials.testAppUser1.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const expectedIndexHtml = await readFile(
|
||||
"appPackages/testApp/public/main/index.html",
|
||||
"utf8"
|
||||
)
|
||||
|
||||
expect(response.text).toBe(expectedIndexHtml)
|
||||
})
|
||||
|
||||
it("should serve specified files when authenticated", async () => {
|
||||
const response = await app
|
||||
.get("/testApp/budibase-client.js")
|
||||
.set("cookie", app.credentials.testAppUser1.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const expectedFile = await readFile(
|
||||
"appPackages/testApp/public/main/budibase-client.js",
|
||||
"utf8"
|
||||
)
|
||||
|
||||
expect(response.text).toBe(expectedFile)
|
||||
})
|
||||
|
||||
it("should serve file from shared when authenticated", async () => {
|
||||
const response = await app
|
||||
.get("/testApp/_shared/shared_file.txt")
|
||||
.set("cookie", app.credentials.testAppUser1.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const expectedFile = await readFile(
|
||||
"appPackages/testApp/public/_shared/shared_file.txt",
|
||||
"utf8"
|
||||
)
|
||||
|
||||
expect(response.text).toBe(expectedFile)
|
||||
})
|
||||
|
||||
it("should serve file from shared when not authenticated", async () => {
|
||||
const response = await app
|
||||
.get("/testApp/_shared/shared_file.txt")
|
||||
.expect(statusCodes.OK)
|
||||
|
||||
const expectedFile = await readFile(
|
||||
"appPackages/testApp/public/_shared/shared_file.txt",
|
||||
"utf8"
|
||||
)
|
||||
|
||||
expect(response.text).toBe(expectedFile)
|
||||
})
|
||||
|
||||
it("should serve file from latest when instance is versionless", async () => {
|
||||
try {
|
||||
await writeFile(
|
||||
"appPackages/testApp/public/_shared/new_file_for_versionless_test.txt",
|
||||
"thats right",
|
||||
{ encoding: "utf8" }
|
||||
)
|
||||
} catch (err) {
|
||||
// empty
|
||||
}
|
||||
|
||||
try {
|
||||
await app
|
||||
.get("/testApp/_shared/new_file_for_versionless_test.txt")
|
||||
.set("cookie", app.credentials.user1_versionlessInstance.cookie)
|
||||
.expect(statusCodes.OK)
|
||||
} finally {
|
||||
try {
|
||||
await remove(
|
||||
"appPackages/testApp/public/_shared/new_file_for_versionless_test.txt"
|
||||
)
|
||||
} catch (err) {
|
||||
// empty
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
it("should not serve file from latest when instance has version", async () => {
|
||||
try {
|
||||
await writeFile(
|
||||
"appPackages/testApp/public/_shared/new_file_for_versionless_test.txt",
|
||||
"thats right",
|
||||
{ encoding: "utf8" }
|
||||
)
|
||||
} catch (err) {
|
||||
// empty
|
||||
}
|
||||
|
||||
try {
|
||||
await app
|
||||
.get("/testApp/_shared/new_file_for_versionless_test.txt")
|
||||
.set("cookie", app.credentials.testAppUser1.cookie)
|
||||
.expect(statusCodes.NOT_FOUND)
|
||||
} finally {
|
||||
try {
|
||||
await remove(
|
||||
"appPackages/testApp/public/_shared/new_file_for_versionless_test.txt"
|
||||
)
|
||||
} catch (err) {
|
||||
// empty
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
const { resolve, join } = require("path")
|
||||
const { getRuntimePackageDirectory } = require("../utilities/runtimePackages")
|
||||
const injectPlugins = require("./injectedPlugins")
|
||||
const { cwd } = require("process")
|
||||
|
||||
const appDefinitionPath = appPath => join(appPath, "appDefinition.json")
|
||||
const pluginsPath = appPath => join(appPath, "plugins.js")
|
||||
const accessLevelsPath = appPath => join(appPath, "access_levels.json")
|
||||
|
||||
const createAppPackage = (context, appPath) => {
|
||||
const appDefModule = require(appDefinitionPath(appPath))
|
||||
|
||||
const pluginsModule = require(pluginsPath(appPath))
|
||||
|
||||
const accessLevels = require(accessLevelsPath(appPath))
|
||||
|
||||
return {
|
||||
appDefinition: appDefModule,
|
||||
behaviourSources: pluginsModule(context),
|
||||
appPath,
|
||||
accessLevels,
|
||||
...publicPaths(appPath),
|
||||
}
|
||||
}
|
||||
|
||||
const appPackageFolder = (config, appname) =>
|
||||
resolve(cwd(), config.latestPackagesFolder, appname)
|
||||
|
||||
module.exports.appPackageFolder = appPackageFolder
|
||||
|
||||
module.exports.appsFolder = config => appPackageFolder(config, "")
|
||||
|
||||
const applictionVersionPath = (context, appname, versionId) =>
|
||||
join(cwd(), getRuntimePackageDirectory(context, appname, versionId))
|
||||
|
||||
const publicPaths = appPath => ({
|
||||
mainUiPath: resolve(join(appPath, "public", "main")),
|
||||
unauthenticatedUiPath: resolve(join(appPath, "public", "unauthenticated")),
|
||||
sharedPath: resolve(join(appPath, "public", "_shared")),
|
||||
})
|
||||
|
||||
module.exports.applictionVersionPublicPaths = (context, appname, versionId) => {
|
||||
const appPath = applictionVersionPath(context, appname, versionId)
|
||||
return publicPaths(appPath)
|
||||
}
|
||||
|
||||
module.exports.applictionVersionPackage = async (
|
||||
context,
|
||||
appname,
|
||||
versionId,
|
||||
instanceKey
|
||||
) => {
|
||||
const pkg = createAppPackage(
|
||||
context,
|
||||
applictionVersionPath(context, appname, versionId)
|
||||
)
|
||||
|
||||
pkg.appDefinition = constructHierarchy(pkg.appDefinition)
|
||||
await injectPlugins(pkg, context.master, appname, instanceKey)
|
||||
return pkg
|
||||
}
|
||||
|
||||
module.exports.deleteCachedPackage = (context, appname, versionId) => {
|
||||
const appPath = applictionVersionPath(context, appname, versionId)
|
||||
|
||||
delete require.cache[resolve(appDefinitionPath(appPath))]
|
||||
delete require.cache[resolve(pluginsPath(appPath))]
|
||||
delete require.cache[resolve(accessLevelsPath(appPath))]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
module.exports = ({ masterAppInternal, instanceKey, app }) => async ({
|
||||
user,
|
||||
}) => {
|
||||
const { bbMaster } = masterAppInternal
|
||||
const existingUser = await masterAppInternal.getUser(app.id, user.name)
|
||||
|
||||
if (existingUser) return
|
||||
|
||||
const masterUser = bbMaster.recordApi.getNew(`${app.key}/users`, "user")
|
||||
masterUser.name = user.name
|
||||
bbMaster.recordApi.setCustomId(masterUser, masterUser.name)
|
||||
masterUser.createdByMaster = false
|
||||
masterUser.instance = await bbMaster.recordApi.load(instanceKey)
|
||||
|
||||
masterUser.active = user.enabled
|
||||
await bbMaster.recordApi.save(masterUser)
|
||||
}
|
||||
|
||||
exports.timeout = ms => new Promise(resolve => setTimeout(resolve, ms))
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = ({ masterAppInternal, app }) => async ({ username }) => {
|
||||
await masterAppInternal.disableUser(app, username)
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = ({ masterAppInternal, app }) => async ({ username }) => {
|
||||
await masterAppInternal.enableUser(app, username)
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
const createUser = require("./createUser")
|
||||
const enableUser = require("./enableUser")
|
||||
const disableUser = require("./disableUser")
|
||||
|
||||
module.exports = async (
|
||||
appPackage,
|
||||
masterAppInternal,
|
||||
appName,
|
||||
instanceKey
|
||||
) => {
|
||||
const plugin = await constructPlugin(masterAppInternal, appName, instanceKey)
|
||||
|
||||
appPackage.behaviourSources._injected = plugin
|
||||
|
||||
createActions(appPackage)
|
||||
createTriggers(appPackage)
|
||||
}
|
||||
|
||||
const createTriggers = appPackage => {
|
||||
const appDef = appPackage.appDefinition
|
||||
appDef.triggers.push({
|
||||
actionName: "createUser",
|
||||
eventName: "authApi:createUser:onComplete",
|
||||
optionsCreator: "return {user:context.result};",
|
||||
condition: "",
|
||||
})
|
||||
appDef.triggers.push({
|
||||
actionName: "enableUser",
|
||||
eventName: "authApi:enableUser:onComplete",
|
||||
optionsCreator: "return {username:context.username};",
|
||||
condition: "",
|
||||
})
|
||||
appDef.triggers.push({
|
||||
actionName: "disableUser",
|
||||
eventName: "authApi:disableUser:onComplete",
|
||||
optionsCreator: "return {username:context.username};",
|
||||
condition: "",
|
||||
})
|
||||
}
|
||||
|
||||
const createActions = appPackage => {
|
||||
const appDef = appPackage.appDefinition
|
||||
appDef.actions.push({
|
||||
name: "createUser",
|
||||
behaviourSource: "_injected",
|
||||
behaviourName: "createUser",
|
||||
initialOptions: {},
|
||||
})
|
||||
appDef.actions.push({
|
||||
name: "enableUser",
|
||||
behaviourSource: "_injected",
|
||||
behaviourName: "enableUser",
|
||||
initialOptions: {},
|
||||
})
|
||||
appDef.actions.push({
|
||||
name: "disableUser",
|
||||
behaviourSource: "_injected",
|
||||
behaviourName: "disableUser",
|
||||
initialOptions: {},
|
||||
})
|
||||
}
|
||||
|
||||
const constructPlugin = async (masterAppInternal, appName, instanceKey) => {
|
||||
const app = await masterAppInternal.getApplication(appName)
|
||||
const initialiseObj = {
|
||||
masterAppInternal,
|
||||
app,
|
||||
instanceKey,
|
||||
}
|
||||
|
||||
return {
|
||||
createUser: createUser(initialiseObj),
|
||||
enableUser: enableUser(initialiseObj),
|
||||
disableUser: disableUser(initialiseObj),
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
const { join } = require("path")
|
||||
const { isString, last } = require("lodash/fp")
|
||||
const { common } = require("@budibase/core")
|
||||
const runtimePackagesDirectory = "./runtime_apps"
|
||||
const LATEST_VERSIONID = "##LATEST##"
|
||||
const { $, splitKey } = common
|
||||
|
||||
const getRuntimeAppsDirectory = appName =>
|
||||
join(runtimePackagesDirectory, appName)
|
||||
|
||||
const getLatestDirectory = (appContext, appname) =>
|
||||
join(appContext.config.latestPackagesFolder, appname)
|
||||
|
||||
module.exports.LATEST_VERSIONID = LATEST_VERSIONID
|
||||
|
||||
module.exports.runtimePackagesDirectory = runtimePackagesDirectory
|
||||
|
||||
module.exports.getRuntimePackageDirectory = (appId, versionId) =>
|
||||
versionId === LATEST_VERSIONID
|
||||
? getLatestDirectory(appId)
|
||||
: join(getRuntimeAppsDirectory(appName), versionId)
|
||||
|
||||
module.exports.getRuntimeAppsDirectory = getRuntimeAppsDirectory
|
||||
|
||||
// the point of this in mainly to support running in dev
|
||||
// i.e. if no "versions" are in use, then it will route
|
||||
// to the latest package
|
||||
module.exports.determineVersionId = version => {
|
||||
let versionKey = isString(version) ? version : null
|
||||
|
||||
if (!versionKey && version && version.key) versionKey = version.key
|
||||
|
||||
return versionKey ? $(versionKey, [splitKey, last]) : LATEST_VERSIONID
|
||||
}
|
|
@ -1,119 +0,0 @@
|
|||
// Based on https://github.com/lafin/node-targz
|
||||
// MIT license
|
||||
|
||||
const fs = require("fs")
|
||||
const tar = require("tar-fs")
|
||||
const zlib = require("zlib")
|
||||
const { join, dirname, sep } = require("path")
|
||||
const { exists, mkdir, unlink, remove, stat } = require("fs-extra")
|
||||
const {
|
||||
getRuntimePackageDirectory,
|
||||
getRuntimeAppsDirectory,
|
||||
} = require("./runtimePackages")
|
||||
|
||||
module.exports.createTarGzPackage = async (config, appName) => {
|
||||
const appPath = join(config.latestPackagesFolder, appName)
|
||||
const distPath = join(appPath, "dist")
|
||||
|
||||
if (!(await exists(distPath))) {
|
||||
await mkdir(distPath)
|
||||
}
|
||||
|
||||
const packagePath = `${distPath}/package.tar.gz`
|
||||
if (await exists(`${packagePath}`)) {
|
||||
await unlink(packagePath)
|
||||
}
|
||||
|
||||
try {
|
||||
await compress(appPath, packagePath)
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
const size = (await stat(packagePath)).size
|
||||
return { size, path: packagePath }
|
||||
}
|
||||
|
||||
module.exports.unzipTarGzPackageToRuntime = async (
|
||||
context,
|
||||
src,
|
||||
appName,
|
||||
versionId
|
||||
) => {
|
||||
const versionDir = getRuntimePackageDirectory(context, appName, versionId)
|
||||
const appDir = getRuntimeAppsDirectory(appName)
|
||||
|
||||
if (await exists(appDir)) {
|
||||
if (await exists(versionDir)) {
|
||||
await remove(versionDir)
|
||||
}
|
||||
} else {
|
||||
await mkdir(appDir)
|
||||
}
|
||||
|
||||
await mkdir(versionDir)
|
||||
|
||||
await decompress(src, versionDir)
|
||||
}
|
||||
|
||||
const compress = (src, dest) =>
|
||||
new Promise((resolve, reject) => {
|
||||
// ensure opts
|
||||
let opts = { src, dest }
|
||||
opts.tar = {
|
||||
ignore: name =>
|
||||
dirname(name)
|
||||
.split(sep)
|
||||
.pop() === "dist" ||
|
||||
dirname(name)
|
||||
.split(sep)
|
||||
.pop() === "node_modules",
|
||||
}
|
||||
opts.gz = opts.gz || {}
|
||||
|
||||
// default gzip config
|
||||
opts.gz.level = opts.gz.level || 6
|
||||
opts.gz.memLevel = opts.gz.memLevel || 6
|
||||
|
||||
// ensure src and dest
|
||||
if (!opts.src) return reject("No source for compress!")
|
||||
if (!opts.dest) return reject("No destination for compress!")
|
||||
|
||||
// go
|
||||
process.nextTick(function() {
|
||||
tar
|
||||
.pack(opts.src, opts.tar)
|
||||
.on("error", reject)
|
||||
.pipe(zlib.createGzip(opts.gz).on("error", reject))
|
||||
.pipe(
|
||||
fs
|
||||
.createWriteStream(opts.dest)
|
||||
.on("error", reject)
|
||||
.on("finish", resolve)
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
const decompress = (src, dest) =>
|
||||
new Promise((resolve, reject) => {
|
||||
// ensure opts
|
||||
let opts = { src, dest }
|
||||
opts.tar = opts.tar || {}
|
||||
opts.gz = opts.gz || {}
|
||||
|
||||
// ensure src and dest
|
||||
if (!opts.src) return reject("No source for decompress!")
|
||||
if (!opts.dest) return reject("No destination for decompress!")
|
||||
|
||||
// go
|
||||
process.nextTick(function() {
|
||||
fs.createReadStream(opts.src)
|
||||
.on("error", reject)
|
||||
.pipe(zlib.createGunzip(opts.gz).on("error", reject))
|
||||
.pipe(
|
||||
tar
|
||||
.extract(opts.dest, opts.tar)
|
||||
.on("error", reject)
|
||||
.on("finish", resolve)
|
||||
)
|
||||
})
|
||||
})
|
|
@ -610,6 +610,11 @@ acorn-globals@^4.1.0:
|
|||
acorn "^6.0.1"
|
||||
acorn-walk "^6.0.1"
|
||||
|
||||
acorn-jsx@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
|
||||
integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
|
||||
|
||||
acorn-walk@^6.0.1:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
|
||||
|
@ -630,12 +635,17 @@ acorn@^6.0.1:
|
|||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
|
||||
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
|
||||
|
||||
acorn@^7.1.1:
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
|
||||
integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==
|
||||
|
||||
ajv-keywords@^3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
|
||||
integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
|
||||
|
||||
ajv@^6.12.0, ajv@^6.12.2:
|
||||
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2:
|
||||
version "6.12.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
|
||||
integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
|
||||
|
@ -672,6 +682,13 @@ ansi-escapes@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
|
||||
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
|
||||
|
||||
ansi-escapes@^4.2.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
|
||||
integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
|
||||
dependencies:
|
||||
type-fest "^0.11.0"
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||
|
@ -1181,7 +1198,7 @@ caseless@~0.12.0:
|
|||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||
|
||||
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
|
||||
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, 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==
|
||||
|
@ -1206,6 +1223,11 @@ chalk@^4.0.0:
|
|||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chardet@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
||||
|
||||
chokidar@^3.2.2:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
|
||||
|
@ -1251,6 +1273,18 @@ cli-boxes@^2.2.0:
|
|||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
|
||||
integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
|
||||
|
||||
cli-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
|
||||
integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
|
||||
dependencies:
|
||||
restore-cursor "^3.1.0"
|
||||
|
||||
cli-width@^2.0.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
|
||||
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
|
||||
|
||||
cliui@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
|
||||
|
@ -1456,7 +1490,7 @@ crc@^3.4.4:
|
|||
dependencies:
|
||||
buffer "^5.1.0"
|
||||
|
||||
cross-spawn@^6.0.0:
|
||||
cross-spawn@^6.0.0, cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
|
||||
|
@ -1519,7 +1553,7 @@ debug@^3.1.0, debug@^3.2.6:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.1.0, debug@^4.1.1:
|
||||
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
|
||||
|
@ -1700,6 +1734,13 @@ dmg-builder@22.6.0:
|
|||
js-yaml "^3.13.1"
|
||||
sanitize-filename "^1.6.3"
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||
integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
domexception@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
|
||||
|
@ -1966,11 +2007,83 @@ escodegen@^1.9.1:
|
|||
optionalDependencies:
|
||||
source-map "~0.6.1"
|
||||
|
||||
eslint-scope@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
|
||||
integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
|
||||
dependencies:
|
||||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-utils@^1.4.3:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
|
||||
integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
|
||||
eslint-visitor-keys@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
|
||||
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
|
||||
|
||||
eslint@^6.8.0:
|
||||
version "6.8.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
|
||||
integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
ajv "^6.10.0"
|
||||
chalk "^2.1.0"
|
||||
cross-spawn "^6.0.5"
|
||||
debug "^4.0.1"
|
||||
doctrine "^3.0.0"
|
||||
eslint-scope "^5.0.0"
|
||||
eslint-utils "^1.4.3"
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
espree "^6.1.2"
|
||||
esquery "^1.0.1"
|
||||
esutils "^2.0.2"
|
||||
file-entry-cache "^5.0.1"
|
||||
functional-red-black-tree "^1.0.1"
|
||||
glob-parent "^5.0.0"
|
||||
globals "^12.1.0"
|
||||
ignore "^4.0.6"
|
||||
import-fresh "^3.0.0"
|
||||
imurmurhash "^0.1.4"
|
||||
inquirer "^7.0.0"
|
||||
is-glob "^4.0.0"
|
||||
js-yaml "^3.13.1"
|
||||
json-stable-stringify-without-jsonify "^1.0.1"
|
||||
levn "^0.3.0"
|
||||
lodash "^4.17.14"
|
||||
minimatch "^3.0.4"
|
||||
mkdirp "^0.5.1"
|
||||
natural-compare "^1.4.0"
|
||||
optionator "^0.8.3"
|
||||
progress "^2.0.0"
|
||||
regexpp "^2.0.1"
|
||||
semver "^6.1.2"
|
||||
strip-ansi "^5.2.0"
|
||||
strip-json-comments "^3.0.1"
|
||||
table "^5.2.3"
|
||||
text-table "^0.2.0"
|
||||
v8-compile-cache "^2.0.3"
|
||||
|
||||
esmangle-evaluator@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz#620d866ef4861b3311f75766d52a8572bb3c6336"
|
||||
integrity sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY=
|
||||
|
||||
espree@^6.1.2:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
|
||||
integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
|
||||
dependencies:
|
||||
acorn "^7.1.1"
|
||||
acorn-jsx "^5.2.0"
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
|
||||
esprima-fb@^15001.1.0-dev-harmony-fb:
|
||||
version "15001.1.0-dev-harmony-fb"
|
||||
resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901"
|
||||
|
@ -2001,11 +2114,30 @@ esprima@~3.1.0:
|
|||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||
integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
|
||||
|
||||
estraverse@^4.2.0:
|
||||
esquery@^1.0.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
|
||||
integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
|
||||
dependencies:
|
||||
estraverse "^5.1.0"
|
||||
|
||||
esrecurse@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
|
||||
integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
|
||||
dependencies:
|
||||
estraverse "^4.1.0"
|
||||
|
||||
estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
||||
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
||||
|
||||
estraverse@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
|
||||
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
|
||||
|
||||
esutils@^2.0.2:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
|
@ -2084,6 +2216,15 @@ extend@^3.0.0, extend@~3.0.2:
|
|||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
|
||||
external-editor@^3.0.3:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
|
||||
integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
|
||||
dependencies:
|
||||
chardet "^0.7.0"
|
||||
iconv-lite "^0.4.24"
|
||||
tmp "^0.0.33"
|
||||
|
||||
extglob@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
|
||||
|
@ -2165,6 +2306,20 @@ fetch-cookie@0.7.3:
|
|||
es6-denodeify "^0.1.1"
|
||||
tough-cookie "^2.3.3"
|
||||
|
||||
figures@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
|
||||
integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
file-entry-cache@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
|
||||
integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
|
||||
dependencies:
|
||||
flat-cache "^2.0.1"
|
||||
|
||||
file-uri-to-path@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||
|
@ -2209,6 +2364,20 @@ find-up@^4.1.0:
|
|||
locate-path "^5.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
flat-cache@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
|
||||
integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
|
||||
dependencies:
|
||||
flatted "^2.0.0"
|
||||
rimraf "2.6.3"
|
||||
write "1.0.3"
|
||||
|
||||
flatted@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
|
||||
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
|
||||
|
||||
for-in@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||
|
@ -2306,6 +2475,11 @@ function-bind@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
functional-red-black-tree@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
|
||||
|
||||
gensync@^1.0.0-beta.1:
|
||||
version "1.0.0-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
|
||||
|
@ -2342,7 +2516,7 @@ getpass@^0.1.1:
|
|||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
glob-parent@~5.1.0:
|
||||
glob-parent@^5.0.0, glob-parent@~5.1.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
|
||||
integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
|
||||
|
@ -2407,6 +2581,13 @@ globals@^11.1.0:
|
|||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^12.1.0:
|
||||
version "12.4.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
|
||||
integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
|
||||
dependencies:
|
||||
type-fest "^0.8.1"
|
||||
|
||||
globalthis@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9"
|
||||
|
@ -2584,7 +2765,7 @@ humanize-number@0.0.2:
|
|||
resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18"
|
||||
integrity sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=
|
||||
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.5:
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.5:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||
|
@ -2608,6 +2789,11 @@ ignore-by-default@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||
integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
|
||||
|
||||
ignore@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
|
||||
|
||||
immediate@3.0.6, immediate@~3.0.5:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
|
||||
|
@ -2618,6 +2804,14 @@ immediate@^3.2.3:
|
|||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
|
||||
integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=
|
||||
|
||||
import-fresh@^3.0.0:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
|
||||
integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
|
||||
dependencies:
|
||||
parent-module "^1.0.0"
|
||||
resolve-from "^4.0.0"
|
||||
|
||||
import-lazy@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
|
||||
|
@ -2672,6 +2866,25 @@ inline-process-browser@^1.0.0:
|
|||
falafel "^1.0.1"
|
||||
through2 "^0.6.5"
|
||||
|
||||
inquirer@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29"
|
||||
integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==
|
||||
dependencies:
|
||||
ansi-escapes "^4.2.1"
|
||||
chalk "^3.0.0"
|
||||
cli-cursor "^3.1.0"
|
||||
cli-width "^2.0.0"
|
||||
external-editor "^3.0.3"
|
||||
figures "^3.0.0"
|
||||
lodash "^4.17.15"
|
||||
mute-stream "0.0.8"
|
||||
run-async "^2.4.0"
|
||||
rxjs "^6.5.3"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
through "^2.3.6"
|
||||
|
||||
invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
|
@ -2816,7 +3029,7 @@ is-generator-function@^1.0.7:
|
|||
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522"
|
||||
integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==
|
||||
|
||||
is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
|
||||
integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
|
||||
|
@ -3479,6 +3692,11 @@ json-schema@0.2.3:
|
|||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
||||
|
||||
json-stable-stringify-without-jsonify@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
||||
|
||||
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||
|
@ -3855,7 +4073,7 @@ leven@^3.1.0:
|
|||
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
|
||||
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
|
||||
|
||||
levn@~0.3.0:
|
||||
levn@^0.3.0, levn@~0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
|
||||
|
@ -3938,7 +4156,7 @@ lodash.sortby@^4.7.0:
|
|||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
|
||||
|
||||
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.15:
|
||||
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
|
||||
version "4.17.15"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
||||
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
||||
|
@ -4079,6 +4297,11 @@ mime@^2.4.4:
|
|||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009"
|
||||
integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==
|
||||
|
||||
mimic-fn@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||
|
||||
mimic-response@^1.0.0, mimic-response@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
|
@ -4126,6 +4349,11 @@ ms@^2.1.1:
|
|||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
||||
mute-stream@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
mz@^2.7.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||
|
@ -4371,6 +4599,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
|||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
onetime@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
|
||||
integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
only@~0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
|
||||
|
@ -4381,7 +4616,7 @@ opencollective-postinstall@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
|
||||
integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
|
||||
|
||||
optionator@^0.8.1:
|
||||
optionator@^0.8.1, optionator@^0.8.3:
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
||||
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
|
||||
|
@ -4393,6 +4628,11 @@ optionator@^0.8.1:
|
|||
type-check "~0.3.2"
|
||||
word-wrap "~1.2.3"
|
||||
|
||||
os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||
|
||||
p-cancelable@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
|
||||
|
@ -4451,6 +4691,13 @@ package-json@^6.3.0:
|
|||
registry-url "^5.0.0"
|
||||
semver "^6.2.0"
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||
integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
|
||||
dependencies:
|
||||
callsites "^3.0.0"
|
||||
|
||||
parse-json@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
||||
|
@ -4641,7 +4888,7 @@ process-nextick-args@~2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||
|
||||
progress@^2.0.3:
|
||||
progress@^2.0.0, progress@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
@ -4864,6 +5111,11 @@ regexparam@^1.3.0:
|
|||
resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f"
|
||||
integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==
|
||||
|
||||
regexpp@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
|
||||
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
|
||||
|
||||
registry-auth-token@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479"
|
||||
|
@ -4957,6 +5209,11 @@ resolve-from@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
|
||||
integrity sha1-six699nWiBvItuZTM17rywoYh0g=
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve-path@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
|
||||
|
@ -4989,11 +5246,26 @@ responselike@^1.0.2:
|
|||
dependencies:
|
||||
lowercase-keys "^1.0.0"
|
||||
|
||||
restore-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
||||
integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
|
||||
dependencies:
|
||||
onetime "^5.1.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
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==
|
||||
|
||||
rimraf@2.6.3:
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
|
||||
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
rimraf@^2.5.4, rimraf@^2.6.3:
|
||||
version "2.7.1"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
|
||||
|
@ -5018,6 +5290,18 @@ rsvp@^4.8.4:
|
|||
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
|
||||
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
|
||||
|
||||
run-async@^2.4.0:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
|
||||
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
|
||||
|
||||
rxjs@^6.5.3:
|
||||
version "6.5.5"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
|
||||
integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
|
@ -5084,7 +5368,7 @@ semver-diff@^3.1.1:
|
|||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
|
||||
semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, 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==
|
||||
|
@ -5178,6 +5462,15 @@ slash@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
|
||||
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
|
||||
|
||||
slice-ansi@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
|
||||
integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.0"
|
||||
astral-regex "^1.0.0"
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
|
||||
snapdragon-node@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
||||
|
@ -5475,6 +5768,11 @@ strip-eof@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
||||
|
||||
strip-json-comments@^3.0.1:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
|
||||
integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
|
||||
|
||||
strip-json-comments@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
|
@ -5542,6 +5840,16 @@ symbol-tree@^3.2.2:
|
|||
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
|
||||
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
|
||||
|
||||
table@^5.2.3:
|
||||
version "5.4.6"
|
||||
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
|
||||
integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
|
||||
dependencies:
|
||||
ajv "^6.10.2"
|
||||
lodash "^4.17.14"
|
||||
slice-ansi "^2.1.0"
|
||||
string-width "^3.0.0"
|
||||
|
||||
tar-fs@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2"
|
||||
|
@ -5586,6 +5894,11 @@ test-exclude@^5.2.3:
|
|||
read-pkg-up "^4.0.0"
|
||||
require-main-filename "^2.0.0"
|
||||
|
||||
text-table@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||
|
||||
thenify-all@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||
|
@ -5620,7 +5933,7 @@ through2@^0.6.2, through2@^0.6.5:
|
|||
readable-stream ">=1.0.33-1 <1.1.0-0"
|
||||
xtend ">=4.0.0 <4.1.0-0"
|
||||
|
||||
through@~2.3.4:
|
||||
through@^2.3.6, through@~2.3.4:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
@ -5630,6 +5943,13 @@ tiny-queue@^0.2.0:
|
|||
resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046"
|
||||
integrity sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
|
||||
dependencies:
|
||||
os-tmpdir "~1.0.2"
|
||||
|
||||
tmpl@1.0.x:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
|
||||
|
@ -5711,6 +6031,11 @@ truncate-utf8-bytes@^1.0.0:
|
|||
dependencies:
|
||||
utf8-byte-length "^1.0.1"
|
||||
|
||||
tslib@^1.9.0:
|
||||
version "1.11.2"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9"
|
||||
integrity sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg==
|
||||
|
||||
tsscmp@1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
|
||||
|
@ -5740,6 +6065,11 @@ type-check@~0.3.2:
|
|||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
|
||||
type-fest@^0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
|
||||
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
|
||||
|
||||
type-fest@^0.8.0, type-fest@^0.8.1:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
||||
|
@ -5899,6 +6229,11 @@ uuid@^3.3.2:
|
|||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
||||
v8-compile-cache@^2.0.3:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
|
||||
integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
|
||||
|
||||
validate-npm-package-license@^3.0.1:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
||||
|
@ -6081,6 +6416,13 @@ write-stream@~0.4.3:
|
|||
dependencies:
|
||||
readable-stream "~0.0.2"
|
||||
|
||||
write@1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
|
||||
integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
|
||||
dependencies:
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
ws@^5.2.0:
|
||||
version "5.2.2"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
|
||||
|
|
Loading…
Reference in New Issue