Updated Core
This commit is contained in:
parent
8b136eb565
commit
88ebfe4da2
25 changed files with 5678 additions and 1932 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,3 +1,3 @@
|
||||||
node_modules/
|
node_modules/
|
||||||
dist/
|
|
||||||
build/
|
build/
|
||||||
|
jobs/
|
||||||
|
|
BIN
bin/executor
Executable file
BIN
bin/executor
Executable file
Binary file not shown.
|
@ -1,4 +1,4 @@
|
||||||
const cap = 60;
|
const cap = 10;
|
||||||
|
|
||||||
const logNow = () => console.log(Date.now());
|
const logNow = () => console.log(Date.now());
|
||||||
|
|
||||||
|
|
0
bin/app.js → dist/app.js
vendored
0
bin/app.js → dist/app.js
vendored
14
dist/bundles/qualiteer-executor.js
vendored
Normal file
14
dist/bundles/qualiteer-executor.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
||||||
import { v4 } from "uuid";
|
import { v4 } from "uuid";
|
||||||
import doExec from "./internal-exec.js";
|
import applyJob from "./kubernetes.js";
|
||||||
|
|
||||||
export default class JobManager {
|
export default class JobManager {
|
||||||
constructor(clientMaxJobs) {
|
constructor(clientMaxJobs) {
|
||||||
|
@ -43,7 +43,7 @@ export default class JobManager {
|
||||||
job.id = v4();
|
job.id = v4();
|
||||||
job.log = [];
|
job.log = [];
|
||||||
this.clients[id].jobs.push(job);
|
this.clients[id].jobs.push(job);
|
||||||
if (process.env.INTERNAL_EXECUTOR === "true") doExec(job);
|
applyJob(job);
|
||||||
return { ...job };
|
return { ...job };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
9
lib/core/executor.js
Normal file
9
lib/core/executor.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import Executor from "../sockets/clients/Executor.js";
|
||||||
|
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
const url = args[0];
|
||||||
|
const jobId = args[1];
|
||||||
|
const command = args.slice(2);
|
||||||
|
const job = { id: jobId, command };
|
||||||
|
const exec = new Executor(url, job, command);
|
||||||
|
exec.runJob();
|
16
lib/core/internal-deploy.js
Normal file
16
lib/core/internal-deploy.js
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import { INFO, ERR, OK, VERB } from "../util/logging.js";
|
||||||
|
import Executor from "../sockets/clients/Executor.js";
|
||||||
|
import cp from "node:child_process";
|
||||||
|
|
||||||
|
const jobStr = process.argv.slice(2)[0];
|
||||||
|
const job = JSON.parse(jobStr);
|
||||||
|
const { command } = job.spec.template.spec.containers[0];
|
||||||
|
INFO("EXEC", "Internal Executor Starting!");
|
||||||
|
cp.exec(command, (error, stdout, stderr)=>{
|
||||||
|
if(error) ERR("EXEC", error);
|
||||||
|
//if(stdout) VERB("EXEC-STDOUT", stdout);
|
||||||
|
//if(stderr) VERB("EXEC-STDERR", stderr);
|
||||||
|
OK("EXEC", "Internal Executor Finished!");
|
||||||
|
process.exit(error? 1 : 0 );
|
||||||
|
});
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
import { INFO } from "../util/logging.js";
|
|
||||||
import Executor from "../sockets/clients/Executor.js";
|
|
||||||
|
|
||||||
export default (job) => {
|
|
||||||
INFO("EXEC", "Starting Internal Executor");
|
|
||||||
try {
|
|
||||||
const exec = new Executor("http://localhost:52000", job);
|
|
||||||
exec.runJob();
|
|
||||||
} catch (err) {
|
|
||||||
ERR("EXEC", err);
|
|
||||||
}
|
|
||||||
};
|
|
33
lib/core/k8s-job.json
Normal file
33
lib/core/k8s-job.json
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"apiVersion": "batch/v1",
|
||||||
|
"kind": "Job",
|
||||||
|
"metadata": {
|
||||||
|
"name": "qltr-job-test-suite-1"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"template": {
|
||||||
|
"spec": {
|
||||||
|
"containers": [
|
||||||
|
{
|
||||||
|
"resources": {
|
||||||
|
"requests": {
|
||||||
|
"memory": "64MI",
|
||||||
|
"cpu": "250m"
|
||||||
|
},
|
||||||
|
"limits": {
|
||||||
|
"memory": "128MI",
|
||||||
|
"cpu": "500m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": "qltr-job-test-suite-1",
|
||||||
|
"image": "node",
|
||||||
|
"imagePullPolicy": "Always",
|
||||||
|
"command": ["node", "--version"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"restartPolicy": "Never"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backoffLimit": 4
|
||||||
|
}
|
||||||
|
}
|
78
lib/core/kubernetes.js
Normal file
78
lib/core/kubernetes.js
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
import cp from "child_process";
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
const internalDeploy = process.env.INTERNAL_DEPLOY === "true";
|
||||||
|
const executorUrl = process.env.EXECUTOR_URL;
|
||||||
|
const executorScriptOnly = process.env.EXECUTOR_SCRIPT_ONLY === "true";
|
||||||
|
const executorBin = process.env.EXECUTOR_BIN ?? `qltr-executor${executorScriptOnly ? ".js": ""}`;
|
||||||
|
|
||||||
|
const qualiteerUrl = process.env.QUALITEER_URL ?? "file:///home/runner/Qualiteer/bin/executor";
|
||||||
|
|
||||||
|
const kubCmd = "kubectl apply -f";
|
||||||
|
const jobsDir = "jobs/";
|
||||||
|
const defaults = JSON.parse(
|
||||||
|
fs.readFileSync(path.resolve("./lib/core/k8s-job.json"))
|
||||||
|
);
|
||||||
|
|
||||||
|
const wrapCommand = (jobId, command) => {
|
||||||
|
const bin = executorScriptOnly ? `node ${executorBin}`:`chmod +x ${executorBin} && ./${executorBin}`;
|
||||||
|
const cmd = command.map((arg)=>JSON.stringify(arg))
|
||||||
|
const curlCmd = `curl -o qltr-executor ${executorUrl} && ${bin} ${qualiteerUrl} ${jobId} ${cmd.join(" ")}`;
|
||||||
|
return curlCmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
const createFile = (job) => {
|
||||||
|
const { name } = job.metadata;
|
||||||
|
const jobsPath = path.resolve(jobsDir);
|
||||||
|
if (!fs.existsSync(jobsPath)) fs.mkdirSync(jobsPath);
|
||||||
|
const filePath = path.resolve(jobsDir, `${name}.json`);
|
||||||
|
fs.writeFileSync(filePath, JSON.stringify(job));
|
||||||
|
return filePath;
|
||||||
|
};
|
||||||
|
|
||||||
|
const applyFileInternally = (filePath) => {
|
||||||
|
const job = fs.readFileSync(filePath, { encoding: "utf8" });
|
||||||
|
cp.fork(path.resolve("./lib/core/internal-deploy.js"), [job]);
|
||||||
|
};
|
||||||
|
|
||||||
|
const applyFile = async (filePath) => {
|
||||||
|
const command = `${kubCmd} ${filePath}`;
|
||||||
|
return new Promise((res, rej) =>
|
||||||
|
cp.exec(command, (err, stdout, stderr) => (err && rej(err)) || res(stdout))
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteFile = (filePath) => fs.unlinkSync(filePath);
|
||||||
|
|
||||||
|
const jobBuilder = (jobRequest) => {
|
||||||
|
const { resources, name, image, command, id: jobId } = jobRequest;
|
||||||
|
|
||||||
|
// Safety Checks
|
||||||
|
if (!jobId) throw Error("'jobId' required!");
|
||||||
|
if (!name) throw Error("'name' required!");
|
||||||
|
if (!command) throw Error("'command' required!");
|
||||||
|
if (!image) throw Error("'image' required!");
|
||||||
|
|
||||||
|
if (!Array.isArray(command)) throw Error("'command' must be an array!");
|
||||||
|
|
||||||
|
// Apply configuration
|
||||||
|
const job = { ...defaults };
|
||||||
|
job.metadata.name = `qltr-${name}-${jobId}`;
|
||||||
|
const container = job.spec.template.spec.containers[0];
|
||||||
|
container.name = job.metadata.name;
|
||||||
|
container.command = wrapCommand(jobId, command);
|
||||||
|
container.image = JSON.stringify(image);
|
||||||
|
|
||||||
|
// Apply resources
|
||||||
|
job.resources = { ...job.resources, ...resources };
|
||||||
|
return job;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async function createJob(jobRequest) {
|
||||||
|
const job = jobBuilder(jobRequest);
|
||||||
|
const filePath = createFile(job);
|
||||||
|
if (!internalDeploy) await applyFile(filePath);
|
||||||
|
else await applyFileInternally(filePath);
|
||||||
|
deleteFile(filePath);
|
||||||
|
}
|
3
lib/executor/dist/outfile.cjs
vendored
Normal file
3
lib/executor/dist/outfile.cjs
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// executor.js
|
||||||
|
console.log(process.argv);
|
||||||
|
console.log("SUCCESS");
|
2
lib/executor/executor.js
Normal file
2
lib/executor/executor.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
console.log(process.argv);
|
||||||
|
console.log("SUCCESS");
|
BIN
lib/executor/outfile-linux
Executable file
BIN
lib/executor/outfile-linux
Executable file
Binary file not shown.
BIN
lib/executor/outfile-macos
Executable file
BIN
lib/executor/outfile-macos
Executable file
Binary file not shown.
BIN
lib/executor/outfile-win.exe
Normal file
BIN
lib/executor/outfile-win.exe
Normal file
Binary file not shown.
713
lib/executor/package-lock.json
generated
Normal file
713
lib/executor/package-lock.json
generated
Normal file
|
@ -0,0 +1,713 @@
|
||||||
|
{
|
||||||
|
"name": "qualiteer-executor",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "qualiteer-executor",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "LGPL-2.1-only",
|
||||||
|
"dependencies": {
|
||||||
|
"socket.io-client": "^4.4.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"qualiteer-executor": "executor.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"esbuild": "^0.14.38"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@socket.io/component-emitter": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/engine.io-client": {
|
||||||
|
"version": "6.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.2.tgz",
|
||||||
|
"integrity": "sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.3.1",
|
||||||
|
"engine.io-parser": "~5.0.3",
|
||||||
|
"ws": "~8.2.3",
|
||||||
|
"xmlhttprequest-ssl": "~2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/engine.io-parser": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"esbuild": "bin/esbuild"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"esbuild-android-64": "0.14.38",
|
||||||
|
"esbuild-android-arm64": "0.14.38",
|
||||||
|
"esbuild-darwin-64": "0.14.38",
|
||||||
|
"esbuild-darwin-arm64": "0.14.38",
|
||||||
|
"esbuild-freebsd-64": "0.14.38",
|
||||||
|
"esbuild-freebsd-arm64": "0.14.38",
|
||||||
|
"esbuild-linux-32": "0.14.38",
|
||||||
|
"esbuild-linux-64": "0.14.38",
|
||||||
|
"esbuild-linux-arm": "0.14.38",
|
||||||
|
"esbuild-linux-arm64": "0.14.38",
|
||||||
|
"esbuild-linux-mips64le": "0.14.38",
|
||||||
|
"esbuild-linux-ppc64le": "0.14.38",
|
||||||
|
"esbuild-linux-riscv64": "0.14.38",
|
||||||
|
"esbuild-linux-s390x": "0.14.38",
|
||||||
|
"esbuild-netbsd-64": "0.14.38",
|
||||||
|
"esbuild-openbsd-64": "0.14.38",
|
||||||
|
"esbuild-sunos-64": "0.14.38",
|
||||||
|
"esbuild-windows-32": "0.14.38",
|
||||||
|
"esbuild-windows-64": "0.14.38",
|
||||||
|
"esbuild-windows-arm64": "0.14.38"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-android-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-android-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-darwin-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-darwin-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-freebsd-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"freebsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-freebsd-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"freebsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-32": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==",
|
||||||
|
"cpu": [
|
||||||
|
"ia32"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-arm": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-mips64le": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==",
|
||||||
|
"cpu": [
|
||||||
|
"mips64el"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-ppc64le": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==",
|
||||||
|
"cpu": [
|
||||||
|
"ppc64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-riscv64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-linux-s390x": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==",
|
||||||
|
"cpu": [
|
||||||
|
"s390x"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-netbsd-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"netbsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-openbsd-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"openbsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-sunos-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"sunos"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-windows-32": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==",
|
||||||
|
"cpu": [
|
||||||
|
"ia32"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-windows-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild-windows-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-client": {
|
||||||
|
"version": "4.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.0.tgz",
|
||||||
|
"integrity": "sha512-HW61c1G7OrYGxaI79WRn17+b03iBCdvhBj4iqyXHBoL5M8w2MSO/vChsjA93knG4GYEai1/vbXWJna9dzxXtSg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.3.2",
|
||||||
|
"engine.io-client": "~6.2.1",
|
||||||
|
"socket.io-parser": "~4.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-parser": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-tLfmEwcEwnlQTxFB7jibL/q2+q8dlVQzj4JdRLJ/W/G1+Fu9VSxCx1Lo+n1HvXxKnM//dUuD0xgiA7tQf57Vng==",
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.3.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "8.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||||
|
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": "^5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/xmlhttprequest-ssl": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"engine.io-client": {
|
||||||
|
"version": "6.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.2.tgz",
|
||||||
|
"integrity": "sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ==",
|
||||||
|
"requires": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.3.1",
|
||||||
|
"engine.io-parser": "~5.0.3",
|
||||||
|
"ws": "~8.2.3",
|
||||||
|
"xmlhttprequest-ssl": "~2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"engine.io-parser": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
|
||||||
|
},
|
||||||
|
"esbuild": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"esbuild-android-64": "0.14.38",
|
||||||
|
"esbuild-android-arm64": "0.14.38",
|
||||||
|
"esbuild-darwin-64": "0.14.38",
|
||||||
|
"esbuild-darwin-arm64": "0.14.38",
|
||||||
|
"esbuild-freebsd-64": "0.14.38",
|
||||||
|
"esbuild-freebsd-arm64": "0.14.38",
|
||||||
|
"esbuild-linux-32": "0.14.38",
|
||||||
|
"esbuild-linux-64": "0.14.38",
|
||||||
|
"esbuild-linux-arm": "0.14.38",
|
||||||
|
"esbuild-linux-arm64": "0.14.38",
|
||||||
|
"esbuild-linux-mips64le": "0.14.38",
|
||||||
|
"esbuild-linux-ppc64le": "0.14.38",
|
||||||
|
"esbuild-linux-riscv64": "0.14.38",
|
||||||
|
"esbuild-linux-s390x": "0.14.38",
|
||||||
|
"esbuild-netbsd-64": "0.14.38",
|
||||||
|
"esbuild-openbsd-64": "0.14.38",
|
||||||
|
"esbuild-sunos-64": "0.14.38",
|
||||||
|
"esbuild-windows-32": "0.14.38",
|
||||||
|
"esbuild-windows-64": "0.14.38",
|
||||||
|
"esbuild-windows-arm64": "0.14.38"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"esbuild-android-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-android-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-darwin-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-darwin-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-freebsd-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-freebsd-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-32": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-arm": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-mips64le": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-ppc64le": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-riscv64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-linux-s390x": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-netbsd-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-openbsd-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-sunos-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-windows-32": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-windows-64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"esbuild-windows-arm64": {
|
||||||
|
"version": "0.14.38",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz",
|
||||||
|
"integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
},
|
||||||
|
"socket.io-client": {
|
||||||
|
"version": "4.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.0.tgz",
|
||||||
|
"integrity": "sha512-HW61c1G7OrYGxaI79WRn17+b03iBCdvhBj4iqyXHBoL5M8w2MSO/vChsjA93knG4GYEai1/vbXWJna9dzxXtSg==",
|
||||||
|
"requires": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.3.2",
|
||||||
|
"engine.io-client": "~6.2.1",
|
||||||
|
"socket.io-parser": "~4.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"socket.io-parser": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-tLfmEwcEwnlQTxFB7jibL/q2+q8dlVQzj4JdRLJ/W/G1+Fu9VSxCx1Lo+n1HvXxKnM//dUuD0xgiA7tQf57Vng==",
|
||||||
|
"requires": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "8.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||||
|
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
|
"xmlhttprequest-ssl": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
lib/executor/package.json
Normal file
20
lib/executor/package.json
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"name": "qualiteer-executor",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Qualiteer Executor",
|
||||||
|
"type": "module",
|
||||||
|
"bin": {
|
||||||
|
"qualiteer-executor": "./executor.js"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"compile": "esbuild executor.js --platform=node --target=node16 --bundle --outfile=dist/outfile.cjs"
|
||||||
|
},
|
||||||
|
"author": "Dunemask",
|
||||||
|
"license": "LGPL-2.1-only",
|
||||||
|
"dependencies": {
|
||||||
|
"socket.io-client": "^4.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"esbuild": "^0.14.38"
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,7 +30,7 @@ export default class Executor {
|
||||||
}
|
}
|
||||||
|
|
||||||
spawn() {
|
spawn() {
|
||||||
const cmdArgs = this.job.command.split(" ");
|
const cmdArgs = this.job.command;
|
||||||
const cmd = cmdArgs.shift();
|
const cmd = cmdArgs.shift();
|
||||||
this.proc = cp.spawn(cmd, cmdArgs);
|
this.proc = cp.spawn(cmd, cmdArgs);
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ export default class Executor {
|
||||||
report(d, dType) {
|
report(d, dType) {
|
||||||
this.buf[dType] += d;
|
this.buf[dType] += d;
|
||||||
if (!this.buf[dType].includes("\n")) return;
|
if (!this.buf[dType].includes("\n")) return;
|
||||||
|
if(this.buf[dType].endsWith("\n")) this.buf[dType] = this.buf[dType].slice(0, -1);
|
||||||
this.socket.emit(events.JOB_REP, this.buf[dType]);
|
this.socket.emit(events.JOB_REP, this.buf[dType]);
|
||||||
if (dType === ERR) console.error(`err: ${this.buf[dType]}`);
|
if (dType === ERR) console.error(`err: ${this.buf[dType]}`);
|
||||||
else console.log(`out: ${this.buf[dType]}`);
|
else console.log(`out: ${this.buf[dType]}`);
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
"ignore": ["src/"]
|
"ignore": ["src/", "jobs/"]
|
||||||
}
|
}
|
||||||
|
|
6593
package-lock.json
generated
6593
package-lock.json
generated
File diff suppressed because it is too large
Load diff
86
package.json
86
package.json
|
@ -2,56 +2,31 @@
|
||||||
"name": "qualiteer",
|
"name": "qualiteer",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "QA Data Management",
|
"description": "QA Data Management",
|
||||||
|
"license": "LGPL-2.1-only",
|
||||||
|
"author": "Dunemask",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./lib/index.js",
|
".": "./lib/index.js",
|
||||||
"./clients": "./lib/sockets/clients/index.js",
|
"./clients": "./lib/sockets/clients/index.js",
|
||||||
"./web-clients": "./lib/sockets/clients/web.index.js"
|
"./web-clients": "./lib/sockets/clients/web.index.js"
|
||||||
},
|
},
|
||||||
|
"bin": {
|
||||||
|
"qualiteer": "./dist/app.js"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:react": "BUILD_PATH='./dist' react-scripts build",
|
"build:all": "npm run build:react && npm run export:executor",
|
||||||
"start": "node bin/app.js",
|
"build:bin:executor": "caxa -m \"Unpacking, please wait...\" -i dist/bundles/ -o bin/executor -- \"{{caxa}}/node_modules/.bin/node\" \"{{caxa}}/qualiteer-executor.js\"",
|
||||||
"start:dev": "nodemon bin/app.js",
|
"build:react": "react-scripts build",
|
||||||
|
"export:executor": "npm run pack:executor && npm run build:bin:executor",
|
||||||
|
"pack:executor": "rollup -c",
|
||||||
|
"start": "node dist/app.js",
|
||||||
|
"start:dev": "nodemon dist/app.js",
|
||||||
"start:dev:replit": "npm run start:dev & npm run start:react:replit",
|
"start:dev:replit": "npm run start:dev & npm run start:react:replit",
|
||||||
"start:react": "react-scripts start",
|
"start:react": "react-scripts start",
|
||||||
"start:react:replit": "DANGEROUSLY_DISABLE_HOST_CHECK=true npm run start:react",
|
"start:react:replit": "DANGEROUSLY_DISABLE_HOST_CHECK=true npm run start:react",
|
||||||
"test": "node tests/index.js",
|
"test": "node tests/index.js",
|
||||||
"test:dev": "nodemon tests/index.js"
|
"test:dev": "nodemon tests/index.js"
|
||||||
},
|
},
|
||||||
"bin": {
|
|
||||||
"qualiteer": "./bin/app.js"
|
|
||||||
},
|
|
||||||
"author": "Dunemask",
|
|
||||||
"license": "LGPL-2.1-only",
|
|
||||||
"optionalDependencies": {
|
|
||||||
"rabbiteer": "gitlab:Dunemask/rabbiteer"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@mui/icons-material": "^5.6.2",
|
|
||||||
"amqplib": "^0.8.0",
|
|
||||||
"chalk": "^5.0.1",
|
|
||||||
"dotenv": "^16.0.0",
|
|
||||||
"express": "^4.17.2",
|
|
||||||
"figlet": "^1.5.2",
|
|
||||||
"moment": "^2.29.3",
|
|
||||||
"pg-promise": "^10.11.1",
|
|
||||||
"postgres-migrations": "^5.3.0",
|
|
||||||
"socket.io": "^4.4.1",
|
|
||||||
"socket.io-client": "^4.4.1",
|
|
||||||
"uuid": "^8.3.2"
|
|
||||||
},
|
|
||||||
"proxy": "http://localhost:52000/",
|
|
||||||
"devDependencies": {
|
|
||||||
"@emotion/react": "^11.9.0",
|
|
||||||
"@emotion/styled": "^11.8.1",
|
|
||||||
"@mui/material": "^5.6.4",
|
|
||||||
"http-proxy-middleware": "^2.0.6",
|
|
||||||
"nodemon": "^2.0.15",
|
|
||||||
"react": "^18.1.0",
|
|
||||||
"react-dom": "^18.1.0",
|
|
||||||
"react-scripts": "^5.0.1",
|
|
||||||
"readline-sync": "^1.4.10"
|
|
||||||
},
|
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
">0.2%",
|
">0.2%",
|
||||||
|
@ -63,5 +38,40 @@
|
||||||
"last 1 firefox version",
|
"last 1 firefox version",
|
||||||
"last 1 safari version"
|
"last 1 safari version"
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"amqplib": "^0.8.0",
|
||||||
|
"chalk": "^5.0.1",
|
||||||
|
"dotenv": "^16.0.0",
|
||||||
|
"express": "^4.17.2",
|
||||||
|
"figlet": "^1.5.2",
|
||||||
|
"moment": "^2.29.3",
|
||||||
|
"path": "^0.12.7",
|
||||||
|
"pg-promise": "^10.11.1",
|
||||||
|
"postgres-migrations": "^5.3.0",
|
||||||
|
"socket.io": "^4.4.1",
|
||||||
|
"socket.io-client": "^4.4.1",
|
||||||
|
"uuid": "^8.3.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@emotion/react": "^11.9.0",
|
||||||
|
"@emotion/styled": "^11.8.1",
|
||||||
|
"@mui/icons-material": "^5.6.2",
|
||||||
|
"@mui/material": "^5.6.4",
|
||||||
|
"@rollup/plugin-commonjs": "^22.0.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^13.3.0",
|
||||||
|
"@rollup/plugin-replace": "^4.0.0",
|
||||||
|
"caxa": "^2.1.0",
|
||||||
|
"nodemon": "^2.0.15",
|
||||||
|
"react": "^18.1.0",
|
||||||
|
"react-dom": "^18.1.0",
|
||||||
|
"react-scripts": "^5.0.1",
|
||||||
|
"readline-sync": "^1.4.10",
|
||||||
|
"rollup": "^2.72.0",
|
||||||
|
"rollup-plugin-terser": "^7.0.2"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"rabbiteer": "gitlab:Dunemask/rabbiteer"
|
||||||
|
},
|
||||||
|
"proxy": "http://localhost:52000/"
|
||||||
}
|
}
|
||||||
|
|
BIN
qltr-executor
Executable file
BIN
qltr-executor
Executable file
Binary file not shown.
12
rollup.config.js
Normal file
12
rollup.config.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { nodeResolve } from "@rollup/plugin-node-resolve";
|
||||||
|
import commonjs from "@rollup/plugin-commonjs";
|
||||||
|
import { terser } from "rollup-plugin-terser";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
input: "lib/core/executor.js",
|
||||||
|
output: {
|
||||||
|
file: "dist/bundles/qualiteer-executor.js",
|
||||||
|
format: "cjs"
|
||||||
|
},
|
||||||
|
plugins: [nodeResolve(), commonjs(), terser()],
|
||||||
|
};
|
|
@ -11,12 +11,14 @@ const url = "https://Qualiteer.elijahparker3.repl.co";
|
||||||
|
|
||||||
// Create an initiator and make a job request
|
// Create an initiator and make a job request
|
||||||
const primary = new Initiator(url);
|
const primary = new Initiator(url);
|
||||||
const job = { command: "ls -la" };
|
const job = { command: ["node", "dev/other.js"], name: "testing", image: "node" };
|
||||||
await primary.newJob(job, null, () => console.log("Primary Job Concluded"));
|
await primary.newJob(job, null, () => console.log("Primary Job Concluded"));
|
||||||
const { clients } = qltr.jobs;
|
|
||||||
|
/*const { clients } = qltr.jobs;
|
||||||
const skId = Object.keys(clients)[0];
|
const skId = Object.keys(clients)[0];
|
||||||
const { jobs } = clients[skId];
|
const { jobs } = clients[skId];
|
||||||
const serverJob = jobs[0];
|
const serverJob = jobs[0];
|
||||||
|
|
||||||
const exec = new Executor(url, serverJob);
|
const exec = new Executor(url, serverJob);
|
||||||
exec.runJob();
|
exec.runJob();
|
||||||
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue