Pre plug format change
parent
08e6c3bad8
commit
a382ab3baa
22
package.json
22
package.json
|
@ -1,21 +1,26 @@
|
||||||
{
|
{
|
||||||
"name": "silverbullet",
|
"name": "@zefhemel/silverbullet",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@lezer/common": "https://github.com/zefhemel/common.git#046c880d1fcab713cadad327a5b7d8bb5de6522c"
|
"@lezer/common": "https://github.com/zefhemel/common.git#046c880d1fcab713cadad327a5b7d8bb5de6522c"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"plugbox-bundle": "./dist/bundler/plugbox-bundle.js"
|
"plugbox-bundle": "./dist/plugbox/plugbox-bundle.js",
|
||||||
|
"plugbox-server": "./dist/plugbox/plugbox-server.js",
|
||||||
|
"silverbullet": "./dist/server/server.js"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "rm -rf .parcel-cache && parcel watch",
|
"watch": "rm -rf .parcel-cache && parcel watch",
|
||||||
"build": "parcel build",
|
"build": "parcel build",
|
||||||
"clean": "rm -rf dist",
|
"clean": "rm -rf dist",
|
||||||
"plugs": "node dist/bundler/plugbox-bundle.js plugs/core/core.plug.json plugs/dist/core.plug.json && node dist/bundler/plugbox-bundle.js plugs/git/git.plug.json plugs/dist/git.plug.json",
|
"plugs": "plugbox-bundle -w --dist plugs/dist plugs/core/core.plug.json plugs/git/git.plug.json",
|
||||||
"server": "nodemon -w dist/server dist/server/server.js pages",
|
"server": "nodemon -w dist/server dist/server/server.js pages",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
"targets": {
|
"targets": {
|
||||||
"webapp": {
|
"webapp": {
|
||||||
"source": [
|
"source": [
|
||||||
|
@ -31,8 +36,11 @@
|
||||||
"isLibrary": true,
|
"isLibrary": true,
|
||||||
"context": "node"
|
"context": "node"
|
||||||
},
|
},
|
||||||
"bundler": {
|
"plugbox": {
|
||||||
"source": "plugbox/bin/plugbox-bundle.ts",
|
"source": [
|
||||||
|
"plugbox/bin/plugbox-bundle.ts",
|
||||||
|
"plugbox/bin/plugbox-server.ts"
|
||||||
|
],
|
||||||
"outputFormat": "commonjs",
|
"outputFormat": "commonjs",
|
||||||
"isLibrary": true,
|
"isLibrary": true,
|
||||||
"context": "node"
|
"context": "node"
|
||||||
|
@ -80,7 +88,7 @@
|
||||||
"knex": "^1.0.4",
|
"knex": "^1.0.4",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"node-cron": "^3.0.0",
|
"node-cron": "^3.0.0",
|
||||||
"node-fetch": "^3.2.3",
|
"node-fetch": "2",
|
||||||
"nodemon": "^2.0.15",
|
"nodemon": "^2.0.15",
|
||||||
"parcel": "^2.3.2",
|
"parcel": "^2.3.2",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
|
@ -90,6 +98,7 @@
|
||||||
"supertest": "^6.2.2",
|
"supertest": "^6.2.2",
|
||||||
"ts-jest": "^27.1.3",
|
"ts-jest": "^27.1.3",
|
||||||
"vm2": "^3.9.9",
|
"vm2": "^3.9.9",
|
||||||
|
"yaml": "^1.10.2",
|
||||||
"yargs": "^17.3.1"
|
"yargs": "^17.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -107,6 +116,7 @@
|
||||||
"@types/react": "^17.0.39",
|
"@types/react": "^17.0.39",
|
||||||
"@types/react-dom": "^17.0.11",
|
"@types/react-dom": "^17.0.11",
|
||||||
"@types/supertest": "^2.0.11",
|
"@types/supertest": "^2.0.11",
|
||||||
|
"@types/yaml": "^1.9.7",
|
||||||
"@vscode/sqlite3": "^5.0.7",
|
"@vscode/sqlite3": "^5.0.7",
|
||||||
"assert": "^2.0.0",
|
"assert": "^2.0.0",
|
||||||
"crypto-browserify": "^3.12.0",
|
"crypto-browserify": "^3.12.0",
|
||||||
|
|
|
@ -7,6 +7,7 @@ import path from "path";
|
||||||
import yargs from "yargs";
|
import yargs from "yargs";
|
||||||
import { hideBin } from "yargs/helpers";
|
import { hideBin } from "yargs/helpers";
|
||||||
import { Manifest } from "../types";
|
import { Manifest } from "../types";
|
||||||
|
import { watchFile } from "fs";
|
||||||
|
|
||||||
async function compile(filePath: string, functionName: string, debug: boolean) {
|
async function compile(filePath: string, functionName: string, debug: boolean) {
|
||||||
let outFile = "out.js";
|
let outFile = "out.js";
|
||||||
|
@ -63,18 +64,49 @@ async function bundle(manifestPath: string, sourceMaps: boolean) {
|
||||||
}
|
}
|
||||||
return manifest;
|
return manifest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function buildManifest(
|
||||||
|
manifestPath: string,
|
||||||
|
distPath: string,
|
||||||
|
debug: boolean
|
||||||
|
) {
|
||||||
|
let generatedManifest = await bundle(manifestPath, debug);
|
||||||
|
const outPath = path.join(distPath, path.basename(manifestPath));
|
||||||
|
console.log("Emitting bundle to", outPath);
|
||||||
|
await writeFile(outPath, JSON.stringify(generatedManifest, null, 2));
|
||||||
|
return { generatedManifest, outPath };
|
||||||
|
}
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
let args = await yargs(hideBin(process.argv))
|
let args = yargs(hideBin(process.argv))
|
||||||
.option("debug", {
|
.option("debug", {
|
||||||
type: "boolean",
|
type: "boolean",
|
||||||
})
|
})
|
||||||
|
.option("watch", {
|
||||||
|
type: "boolean",
|
||||||
|
alias: "w",
|
||||||
|
})
|
||||||
|
.option("dist", {
|
||||||
|
type: "string",
|
||||||
|
default: ".",
|
||||||
|
})
|
||||||
.parse();
|
.parse();
|
||||||
|
if (args._.length === 0) {
|
||||||
let generatedManifest = await bundle(args._[0] as string, !!args.debug);
|
console.log(
|
||||||
await writeFile(
|
"Usage: plugbox-bundle [--debug] [--dist <path>] <manifest.plug.json> <manifest2.plug.json> ..."
|
||||||
args._[1] as string,
|
);
|
||||||
JSON.stringify(generatedManifest, null, 2)
|
process.exit(1);
|
||||||
);
|
}
|
||||||
|
for (const plugManifestPath of args._) {
|
||||||
|
let manifestPath = plugManifestPath as string;
|
||||||
|
await buildManifest(manifestPath, args.dist, !!args.debug);
|
||||||
|
if (args.watch) {
|
||||||
|
watchFile(manifestPath, { interval: 1000 }, async () => {
|
||||||
|
console.log("Rebuilding", manifestPath);
|
||||||
|
await buildManifest(manifestPath, args.dist, !!args.debug);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
run().catch((e) => {
|
run().catch((e) => {
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
import express from "express";
|
||||||
|
import yargs from "yargs";
|
||||||
|
import { hideBin } from "yargs/helpers";
|
||||||
|
import { DiskPlugLoader } from "../plug_loader";
|
||||||
|
import { CronHook, NodeCronFeature } from "../feature/node_cron";
|
||||||
|
import shellSyscalls from "../syscall/shell.node";
|
||||||
|
import { System } from "../system";
|
||||||
|
import { EndpointFeature, EndpointHook } from "../feature/endpoint";
|
||||||
|
import { safeRun } from "../util";
|
||||||
|
import knex from "knex";
|
||||||
|
import {
|
||||||
|
ensureTable,
|
||||||
|
storeReadSyscalls,
|
||||||
|
storeWriteSyscalls,
|
||||||
|
} from "../syscall/store.knex_node";
|
||||||
|
import { fetchSyscalls } from "../syscall/fetch.node";
|
||||||
|
|
||||||
|
let args = yargs(hideBin(process.argv))
|
||||||
|
.option("port", {
|
||||||
|
type: "number",
|
||||||
|
default: 1337,
|
||||||
|
})
|
||||||
|
.parse();
|
||||||
|
|
||||||
|
if (!args._.length) {
|
||||||
|
console.error("Usage: plugbox-server <path-to-plugs>");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const plugPath = args._[0] as string;
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
type ServerHook = EndpointHook & CronHook;
|
||||||
|
const system = new System<ServerHook>("server");
|
||||||
|
|
||||||
|
safeRun(async () => {
|
||||||
|
const db = knex({
|
||||||
|
client: "better-sqlite3",
|
||||||
|
connection: {
|
||||||
|
filename: "plugbox.db",
|
||||||
|
},
|
||||||
|
useNullAsDefault: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
await ensureTable(db, "item");
|
||||||
|
|
||||||
|
let plugLoader = new DiskPlugLoader(system, plugPath);
|
||||||
|
await plugLoader.loadPlugs();
|
||||||
|
plugLoader.watcher();
|
||||||
|
system.addFeature(new NodeCronFeature());
|
||||||
|
system.addFeature(new EndpointFeature(app, ""));
|
||||||
|
system.registerSyscalls("shell", [], shellSyscalls("."));
|
||||||
|
system.registerSyscalls("fetch", [], fetchSyscalls());
|
||||||
|
system.registerSyscalls(
|
||||||
|
"store",
|
||||||
|
[],
|
||||||
|
storeWriteSyscalls(db, "item"),
|
||||||
|
storeReadSyscalls(db, "item")
|
||||||
|
);
|
||||||
|
app.listen(args.port, () => {
|
||||||
|
console.log(`Plugbox server listening on port ${args.port}`);
|
||||||
|
});
|
||||||
|
});
|
|
@ -6,6 +6,8 @@ import workerCode from "bundle-text:./node_worker.ts";
|
||||||
import { Sandbox } from "../sandbox";
|
import { Sandbox } from "../sandbox";
|
||||||
import { WorkerLike } from "./worker";
|
import { WorkerLike } from "./worker";
|
||||||
import { Plug } from "../plug";
|
import { Plug } from "../plug";
|
||||||
|
import path from "path";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
class NodeWorkerWrapper implements WorkerLike {
|
class NodeWorkerWrapper implements WorkerLike {
|
||||||
onMessage?: (message: any) => Promise<void>;
|
onMessage?: (message: any) => Promise<void>;
|
||||||
|
@ -33,16 +35,16 @@ class NodeWorkerWrapper implements WorkerLike {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Look for the node_modules directory, to be passed to the worker to find e.g. the vm2 module
|
||||||
|
let nodeModulesDir = __dirname;
|
||||||
|
while (!fs.existsSync(nodeModulesDir + "/node_modules")) {
|
||||||
|
nodeModulesDir = path.dirname(nodeModulesDir);
|
||||||
|
}
|
||||||
|
|
||||||
export function createSandbox(plug: Plug<any>) {
|
export function createSandbox(plug: Plug<any>) {
|
||||||
let worker = new Worker(workerCode, {
|
let worker = new Worker(workerCode, {
|
||||||
eval: true,
|
eval: true,
|
||||||
|
workerData: path.join(nodeModulesDir, "node_modules"),
|
||||||
});
|
});
|
||||||
return new Sandbox(
|
return new Sandbox(plug, new NodeWorkerWrapper(worker));
|
||||||
plug,
|
|
||||||
new NodeWorkerWrapper(
|
|
||||||
new Worker(workerCode, {
|
|
||||||
eval: true,
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
const { VM, VMScript } = require("vm2");
|
const { parentPort, workerData } = require("worker_threads");
|
||||||
const { parentPort } = require("worker_threads");
|
let vm2 = `${workerData}/vm2`;
|
||||||
|
const { VM, VMScript } = require(vm2);
|
||||||
|
|
||||||
|
// console.log("Process env", process.env);
|
||||||
|
|
||||||
let loadedFunctions = new Map<string, Function>();
|
let loadedFunctions = new Map<string, Function>();
|
||||||
let pendingRequests = new Map<
|
let pendingRequests = new Map<
|
||||||
|
|
|
@ -33,7 +33,7 @@ test("Run a plugbox endpoint server", async () => {
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 3123;
|
const port = 3123;
|
||||||
|
|
||||||
system.addFeature(new EndpointFeature(app));
|
system.addFeature(new EndpointFeature(app, "/_"));
|
||||||
|
|
||||||
let server = app.listen(port, () => {
|
let server = app.listen(port, () => {
|
||||||
console.log(`Listening on port ${port}`);
|
console.log(`Listening on port ${port}`);
|
||||||
|
|
|
@ -26,20 +26,21 @@ export type EndPointDef = {
|
||||||
handler: string; // function name
|
handler: string; // function name
|
||||||
};
|
};
|
||||||
|
|
||||||
const endPointPrefix = "/_";
|
|
||||||
|
|
||||||
export class EndpointFeature implements Feature<EndpointHook> {
|
export class EndpointFeature implements Feature<EndpointHook> {
|
||||||
private app: Express;
|
private app: Express;
|
||||||
|
private prefix: string;
|
||||||
|
|
||||||
constructor(app: Express) {
|
constructor(app: Express, prefix: string) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
this.prefix = prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
apply(system: System<EndpointHook>): void {
|
apply(system: System<EndpointHook>): void {
|
||||||
this.app.use((req: Request, res: Response, next: NextFunction) => {
|
this.app.use((req: Request, res: Response, next: NextFunction) => {
|
||||||
if (!req.path.startsWith(endPointPrefix)) {
|
if (!req.path.startsWith(this.prefix)) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
console.log("Endpoint request", req.path);
|
||||||
Promise.resolve()
|
Promise.resolve()
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
for (const [plugName, plug] of system.loadedPlugs.entries()) {
|
for (const [plugName, plug] of system.loadedPlugs.entries()) {
|
||||||
|
@ -48,8 +49,10 @@ export class EndpointFeature implements Feature<EndpointHook> {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const endpoints = manifest.hooks?.endpoints;
|
const endpoints = manifest.hooks?.endpoints;
|
||||||
|
console.log("Checking plug", plugName, endpoints);
|
||||||
if (endpoints) {
|
if (endpoints) {
|
||||||
let prefix = `${endPointPrefix}/${plugName}`;
|
let prefix = `${this.prefix}/${plugName}`;
|
||||||
|
console.log("Need prefix", prefix, "got", req.path);
|
||||||
if (!req.path.startsWith(prefix)) {
|
if (!req.path.startsWith(prefix)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { ClickEvent } from "../../webapp/src/app_event";
|
import type { ClickEvent } from "../../webapp/app_event";
|
||||||
import { syscall } from "../lib/syscall";
|
import { syscall } from "../lib/syscall";
|
||||||
|
|
||||||
export async function taskToggle(event: ClickEvent) {
|
export async function taskToggle(event: ClickEvent) {
|
||||||
|
|
|
@ -119,21 +119,21 @@ export class SocketServer {
|
||||||
}
|
}
|
||||||
|
|
||||||
onCall(
|
onCall(
|
||||||
"invokeFunction",
|
"invokeFunction",
|
||||||
(plugName: string, name: string, ...args: any[]): Promise<any> => {
|
(plugName: string, name: string, ...args: any[]): Promise<any> => {
|
||||||
let plug = this.system.loadedPlugs.get(plugName);
|
let plug = this.system.loadedPlugs.get(plugName);
|
||||||
if (!plug) {
|
if (!plug) {
|
||||||
throw new Error(`Plug ${plugName} not loaded`);
|
throw new Error(`Plug ${plugName} not loaded`);
|
||||||
}
|
|
||||||
console.log(
|
|
||||||
"Invoking function",
|
|
||||||
name,
|
|
||||||
"for plug",
|
|
||||||
plugName,
|
|
||||||
"as requested over socket"
|
|
||||||
);
|
|
||||||
return plug.invoke(name, args);
|
|
||||||
}
|
}
|
||||||
|
console.log(
|
||||||
|
"Invoking function",
|
||||||
|
name,
|
||||||
|
"for plug",
|
||||||
|
plugName,
|
||||||
|
"as requested over socket"
|
||||||
|
);
|
||||||
|
return plug.invoke(name, args);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log("Sending the sytem to the client");
|
console.log("Sending the sytem to the client");
|
||||||
|
|
|
@ -19,7 +19,7 @@ export class ExpressServer {
|
||||||
this.rootPath = rootPath;
|
this.rootPath = rootPath;
|
||||||
this.system = system;
|
this.system = system;
|
||||||
|
|
||||||
system.addFeature(new EndpointFeature(app));
|
system.addFeature(new EndpointFeature(app, "/_"));
|
||||||
|
|
||||||
// Fallback, serve index.html
|
// Fallback, serve index.html
|
||||||
let cachedIndex: string | undefined = undefined;
|
let cachedIndex: string | undefined = undefined;
|
||||||
|
|
|
@ -1,26 +1,30 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
import express from "express";
|
import express from "express";
|
||||||
import http from "http";
|
import http from "http";
|
||||||
import { Server } from "socket.io";
|
import {Server} from "socket.io";
|
||||||
import { SocketServer } from "./api_server";
|
import {SocketServer} from "./api_server";
|
||||||
import yargs from "yargs";
|
import yargs from "yargs";
|
||||||
import { hideBin } from "yargs/helpers";
|
import {hideBin} from "yargs/helpers";
|
||||||
import { SilverBulletHooks } from "../common/manifest";
|
import {SilverBulletHooks} from "../common/manifest";
|
||||||
import { ExpressServer } from "./express_server";
|
import {ExpressServer} from "./express_server";
|
||||||
import { DiskPlugLoader } from "../plugbox/plug_loader";
|
import {DiskPlugLoader} from "../plugbox/plug_loader";
|
||||||
import { NodeCronFeature } from "../plugbox/feature/node_cron";
|
import { NodeCronFeature } from "../plugbox/feature/node_cron";
|
||||||
import shellSyscalls from "../plugbox/syscall/shell.node";
|
import shellSyscalls from "../plugbox/syscall/shell.node";
|
||||||
import { System } from "../plugbox/system";
|
import { System } from "../plugbox/system";
|
||||||
|
|
||||||
let args = yargs(hideBin(process.argv))
|
let args = yargs(hideBin(process.argv))
|
||||||
.option("debug", {
|
|
||||||
type: "boolean",
|
|
||||||
})
|
|
||||||
.option("port", {
|
.option("port", {
|
||||||
type: "number",
|
type: "number",
|
||||||
default: 3000,
|
default: 3000,
|
||||||
})
|
})
|
||||||
.parse();
|
.parse();
|
||||||
|
|
||||||
|
if (!args._.length) {
|
||||||
|
console.error("Usage: silverbullet <path-to-pages>");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
const pagesPath = args._[0] as string;
|
const pagesPath = args._[0] as string;
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
@ -41,25 +45,25 @@ app.use("/", express.static(distDir));
|
||||||
|
|
||||||
let socketServer = new SocketServer(pagesPath, io, system);
|
let socketServer = new SocketServer(pagesPath, io, system);
|
||||||
socketServer.init().catch((e) => {
|
socketServer.init().catch((e) => {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
});
|
});
|
||||||
|
|
||||||
const expressServer = new ExpressServer(app, pagesPath, distDir, system);
|
const expressServer = new ExpressServer(app, pagesPath, distDir, system);
|
||||||
expressServer
|
expressServer
|
||||||
.init()
|
.init()
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
let plugLoader = new DiskPlugLoader(
|
let plugLoader = new DiskPlugLoader(
|
||||||
system,
|
system,
|
||||||
`${__dirname}/../../plugs/dist`
|
`${__dirname}/../../plugs/dist`
|
||||||
);
|
);
|
||||||
await plugLoader.loadPlugs();
|
await plugLoader.loadPlugs();
|
||||||
plugLoader.watcher();
|
plugLoader.watcher();
|
||||||
system.registerSyscalls("shell", ["shell"], shellSyscalls(pagesPath));
|
system.registerSyscalls("shell", ["shell"], shellSyscalls(pagesPath));
|
||||||
system.addFeature(new NodeCronFeature());
|
system.addFeature(new NodeCronFeature());
|
||||||
server.listen(port, () => {
|
server.listen(port, () => {
|
||||||
console.log(`Server listening on port ${port}`);
|
console.log(`Server listening on port ${port}`);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.error(e);
|
||||||
});
|
});
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
console.error(e);
|
|
||||||
});
|
|
||||||
|
|
|
@ -3,8 +3,7 @@ import { Space } from "./space";
|
||||||
import { safeRun } from "./util";
|
import { safeRun } from "./util";
|
||||||
import { io } from "socket.io-client";
|
import { io } from "socket.io-client";
|
||||||
|
|
||||||
let socket = io(`http://${location.hostname}:3000`);
|
let socket = io();
|
||||||
|
|
||||||
let editor = new Editor(new Space(socket), document.getElementById("root")!);
|
let editor = new Editor(new Space(socket), document.getElementById("root")!);
|
||||||
|
|
||||||
safeRun(async () => {
|
safeRun(async () => {
|
||||||
|
|
67
yarn.lock
67
yarn.lock
|
@ -1718,6 +1718,13 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/superagent" "*"
|
"@types/superagent" "*"
|
||||||
|
|
||||||
|
"@types/yaml@^1.9.7":
|
||||||
|
version "1.9.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/yaml/-/yaml-1.9.7.tgz#2331f36e0aac91311a63d33eb026c21687729679"
|
||||||
|
integrity sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==
|
||||||
|
dependencies:
|
||||||
|
yaml "*"
|
||||||
|
|
||||||
"@types/yargs-parser@*":
|
"@types/yargs-parser@*":
|
||||||
version "21.0.0"
|
version "21.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
|
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
|
||||||
|
@ -2709,11 +2716,6 @@ csstype@^3.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
|
||||||
integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
|
integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
|
||||||
|
|
||||||
data-uri-to-buffer@^4.0.0:
|
|
||||||
version "4.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b"
|
|
||||||
integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==
|
|
||||||
|
|
||||||
data-urls@^2.0.0:
|
data-urls@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
|
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
|
||||||
|
@ -3379,14 +3381,6 @@ fb-watchman@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
bser "2.1.1"
|
bser "2.1.1"
|
||||||
|
|
||||||
fetch-blob@^3.1.2, fetch-blob@^3.1.4:
|
|
||||||
version "3.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.5.tgz#0077bf5f3fcdbd9d75a0b5362f77dbb743489863"
|
|
||||||
integrity sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==
|
|
||||||
dependencies:
|
|
||||||
node-domexception "^1.0.0"
|
|
||||||
web-streams-polyfill "^3.0.3"
|
|
||||||
|
|
||||||
file-uri-to-path@1.0.0:
|
file-uri-to-path@1.0.0:
|
||||||
version "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"
|
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||||
|
@ -3443,13 +3437,6 @@ form-data@^4.0.0:
|
||||||
combined-stream "^1.0.8"
|
combined-stream "^1.0.8"
|
||||||
mime-types "^2.1.12"
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
formdata-polyfill@^4.0.10:
|
|
||||||
version "4.0.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
|
|
||||||
integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
|
|
||||||
dependencies:
|
|
||||||
fetch-blob "^3.1.2"
|
|
||||||
|
|
||||||
formidable@^2.0.1:
|
formidable@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff"
|
resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff"
|
||||||
|
@ -4966,19 +4953,12 @@ node-cron@^3.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
moment-timezone "^0.5.31"
|
moment-timezone "^0.5.31"
|
||||||
|
|
||||||
node-domexception@^1.0.0:
|
node-fetch@2:
|
||||||
version "1.0.0"
|
version "2.6.7"
|
||||||
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||||
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
|
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||||
|
|
||||||
node-fetch@^3.2.3:
|
|
||||||
version "3.2.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.3.tgz#a03c9cc2044d21d1a021566bd52f080f333719a6"
|
|
||||||
integrity sha512-AXP18u4pidSZ1xYXRDPY/8jdv3RAozIt/WLNR/MBGZAz+xjtlr90RvCnsvHQRiXyWliZF/CpytExp32UU67/SA==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
data-uri-to-buffer "^4.0.0"
|
whatwg-url "^5.0.0"
|
||||||
fetch-blob "^3.1.4"
|
|
||||||
formdata-polyfill "^4.0.10"
|
|
||||||
|
|
||||||
node-gyp-build@^4.2.3, node-gyp-build@^4.3.0:
|
node-gyp-build@^4.2.3, node-gyp-build@^4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
|
@ -6501,6 +6481,11 @@ tr46@^2.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.1.1"
|
punycode "^2.1.1"
|
||||||
|
|
||||||
|
tr46@~0.0.3:
|
||||||
|
version "0.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||||
|
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
|
||||||
|
|
||||||
ts-jest@^27.1.3:
|
ts-jest@^27.1.3:
|
||||||
version "27.1.3"
|
version "27.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957"
|
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957"
|
||||||
|
@ -6740,10 +6725,10 @@ weak-lru-cache@^1.2.2:
|
||||||
resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19"
|
resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19"
|
||||||
integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==
|
integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==
|
||||||
|
|
||||||
web-streams-polyfill@^3.0.3:
|
webidl-conversions@^3.0.0:
|
||||||
version "3.2.0"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965"
|
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||||
integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==
|
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
|
||||||
|
|
||||||
webidl-conversions@^4.0.2:
|
webidl-conversions@^4.0.2:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
|
@ -6772,6 +6757,14 @@ whatwg-mimetype@^2.3.0:
|
||||||
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
||||||
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
|
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
|
||||||
|
|
||||||
|
whatwg-url@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
|
||||||
|
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
|
||||||
|
dependencies:
|
||||||
|
tr46 "~0.0.3"
|
||||||
|
webidl-conversions "^3.0.0"
|
||||||
|
|
||||||
whatwg-url@^8.0.0, whatwg-url@^8.4.0, whatwg-url@^8.5.0:
|
whatwg-url@^8.0.0, whatwg-url@^8.4.0, whatwg-url@^8.5.0:
|
||||||
version "8.7.0"
|
version "8.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
|
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
|
||||||
|
@ -6904,7 +6897,7 @@ yallist@^4.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||||
|
|
||||||
yaml@^1.10.0, yaml@^1.10.2:
|
yaml@*, yaml@^1.10.0, yaml@^1.10.2:
|
||||||
version "1.10.2"
|
version "1.10.2"
|
||||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||||
|
|
Loading…
Reference in New Issue