mirror of
https://codeberg.org/vlw/monkeydo.git
synced 2025-09-13 15:53:40 +02:00
dev21w40a
This commit is contained in:
parent
6cf7330acc
commit
c3d584dc8f
3 changed files with 144 additions and 0 deletions
50
.gitignore
vendored
Normal file
50
.gitignore
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Bootstrapping #
|
||||
#################
|
||||
/node_modules
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
.env
|
||||
.env.backup
|
||||
.phpunit.result.cache
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
public/robots.txt
|
||||
|
||||
|
||||
# OS generated files #
|
||||
######################
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
Icon?
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
.directory
|
||||
|
||||
# Tool specific files #
|
||||
#######################
|
||||
# vim
|
||||
*~
|
||||
*.swp
|
||||
*.swo
|
||||
# sublime text & textmate
|
||||
*.sublime-*
|
||||
*.stTheme.cache
|
||||
*.tmlanguage.cache
|
||||
*.tmPreferences.cache
|
||||
# Eclipse
|
||||
.settings/*
|
||||
# JetBrains, aka PHPStorm, IntelliJ IDEA
|
||||
.idea/*
|
||||
# NetBeans
|
||||
nbproject/*
|
||||
# Visual Studio Code
|
||||
.vscode
|
||||
# Sass preprocessor
|
||||
.sass-cache/
|
84
Monkeydo.mjs
Normal file
84
Monkeydo.mjs
Normal file
|
@ -0,0 +1,84 @@
|
|||
import { default as MonkeyWorker } from "./classes/Worker.mjs";
|
||||
|
||||
export default class Monekydo {
|
||||
constructor(manifest = false) {
|
||||
this.monkeydo = {
|
||||
version: "0.1",
|
||||
debugLevel: 0,
|
||||
get debug() {
|
||||
return this.debugLevel > 0 ? true : false;
|
||||
},
|
||||
set debug(flag = 1) {
|
||||
this.debugLevel = flag;
|
||||
}
|
||||
};
|
||||
Object.seal(this.monkeydo);
|
||||
|
||||
this.header = null;
|
||||
this.body = null;
|
||||
|
||||
if(!window.Worker) {
|
||||
this.except("JavaScript Workers aren't supported by your browser");
|
||||
}
|
||||
}
|
||||
|
||||
debug(attachment = "ATTACHMENT_EMPTY") {
|
||||
if(this.monkeydo.debug) {
|
||||
console.warn("-- Monkeydo debug -->",attachment);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
async load(manifest) {
|
||||
const errorPrefix = "MANIFEST_IMPORT_FAILED: ";
|
||||
let data;
|
||||
// Monkeydo can only load a JSON string or URL to a JSON file
|
||||
if(typeof manifest !== "string") {
|
||||
this.debug(manifest);
|
||||
throw new TypeError(errorPrefix + "Expected JSON or URL");
|
||||
}
|
||||
|
||||
// Attempt to parse the argument as JSON
|
||||
try {
|
||||
data = JSON.parse(manifest);
|
||||
}
|
||||
catch {
|
||||
// If that fails, attempt to parse it as a URL
|
||||
try {
|
||||
manifest = new URL(manifest);
|
||||
const fetchManifest = await fetch(manifest);
|
||||
|
||||
// If the URL parsed but the fetch response is invalid, give up and throw an error
|
||||
if(!fetchManifest.ok || fetchManifest.headers.get("Content-Type") !== "application/json") {
|
||||
throw new TypeError(errorPrefix + "Invalid response Content-Type or HTTP status");
|
||||
}
|
||||
data = await fetchManifest.json();
|
||||
}
|
||||
catch(error) {
|
||||
this.debug(manifest);
|
||||
if(!error instanceof TypeError) {
|
||||
throw new TypeError(errorPrefix + "Invalid JSON or URL");
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
if(!data.hasOwnProperty("header") || !data.hasOwnProperty("body")) {
|
||||
this.debug(data);
|
||||
throw new Error(errorPrefix + "Object is not a Monkeydo manifest");
|
||||
}
|
||||
|
||||
this.header = data.header;
|
||||
this.body = data.body;
|
||||
return true;
|
||||
}
|
||||
|
||||
do() {
|
||||
const errorPrefix = "DO_FAILED: ";
|
||||
if(!this.header) {
|
||||
this.debug(this.header);
|
||||
throw new Error(errorPrefix + `Expected Monkeydo manifest, got '${this.header}' instead`);
|
||||
}
|
||||
const monkey = new MonkeyWorker();
|
||||
}
|
||||
}
|
10
classes/Worker.mjs
Normal file
10
classes/Worker.mjs
Normal file
|
@ -0,0 +1,10 @@
|
|||
export default class MonkeyWorker extends Worker {
|
||||
constructor() {
|
||||
super();
|
||||
onmessage = (message) => this.instruction(message);
|
||||
}
|
||||
|
||||
instruction(message) {
|
||||
console.log(message);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue