Migrate to ES6 modules

This commit is contained in:
Jordan Eldredge 2019-08-05 08:11:57 -07:00
parent b2267d569b
commit 7cb1e45a1a
30 changed files with 175 additions and 142 deletions

View file

@ -3,9 +3,9 @@ import JSZip from "jszip";
import "./App.css";
import * as Utils from "./utils";
import initialize from "./initialize";
const System = require("./runtime/System");
const runtime = require("./runtime");
const interpret = require("./maki-interpreter/interpreter");
import System from "./runtime/System";
import runtime from "./runtime";
import interpret from "./maki-interpreter/interpreter";
async function getSkin() {
// const resp = await fetch(process.env.PUBLIC_URL + "/skins/CornerAmp_Redux.wal");
@ -34,10 +34,11 @@ function Container(props) {
if (default_visible !== undefined) {
style.display = default_visible ? "block" : "none";
}
return <div
data-node-type="container"
data-node-id={id}
style={style}>{children}</div>;
return (
<div data-node-type="container" data-node-id={id} style={style}>
{children}
</div>
);
}
function Layout({
@ -125,7 +126,17 @@ function Layer({ node, id, image, children, x, y }) {
);
}
function Button({ id, image, action, x, y, downImage, tooltip, node, children }) {
function Button({
id,
image,
action,
x,
y,
downImage,
tooltip,
node,
children,
}) {
const [down, setDown] = React.useState(false);
const imgId = down && downImage ? downImage : image;
if (imgId == null) {
@ -178,7 +189,7 @@ function ToggleButton(props) {
}
function Group(props) {
const { id, children, x, y} = props;
const { id, children, x, y } = props;
const style = {
position: "absolute",
};
@ -188,10 +199,11 @@ function Group(props) {
if (y !== undefined) {
style.top = Number(y);
}
return <div
data-node-type="group"
data-node-id={id}
style={style}>{children}</div>;
return (
<div data-node-type="group" data-node-id={id} style={style}>
{children}
</div>
);
}
const NODE_NAME_TO_COMPONENT = {
@ -213,9 +225,9 @@ function XmlNode({ node }) {
}
const Component = NODE_NAME_TO_COMPONENT[name];
const childNodes = node.children || [];
const children = childNodes.map((childNode, i) => (
childNode.visible && <XmlNode key={i} node={childNode} />
));
const children = childNodes.map(
(childNode, i) => childNode.visible && <XmlNode key={i} node={childNode} />
);
if (Component == null) {
console.warn("Unknown node type", name);
if (childNodes.length) {
@ -223,7 +235,11 @@ function XmlNode({ node }) {
}
return null;
}
return <Component node={node} {...attributes}>{children}</Component>;
return (
<Component node={node} {...attributes}>
{children}
</Component>
);
}
function App() {
@ -242,7 +258,11 @@ function App() {
if (node.xmlNode.attributes.file.endsWith("standardframe.maki")) {
break;
}
const scriptGroup = Utils.findParentNodeOfType(node, ["group", "WinampAbstractionLayer", "WasabiXML"]);
const scriptGroup = Utils.findParentNodeOfType(node, [
"group",
"WinampAbstractionLayer",
"WasabiXML",
]);
const system = new System(scriptGroup);
await interpret({
runtime,

View file

@ -1,6 +1,7 @@
import React from "react";
import Variable from "./Variable";
const { COMMANDS } = require("../maki-interpreter/constants");
import { COMMANDS } from "../maki-interpreter/constants";
export default function Command({ command, variables }) {
const { arg } = command;
let foo = null;

View file

@ -1,17 +1,21 @@
import * as Utils from "./utils";
const MakiObject = require("./runtime/MakiObject");
const WinampAbstractionLayer = require("./runtime/WinampAbstractionLayer");
const Layout = require('./runtime/Layout');
const Layer = require('./runtime/Layer');
const Container = require('./runtime/Container');
const JsElements = require("./runtime/JsElements");
const JsGammaSet = require("./runtime/JsGammaSet");
const JsGroupDef = require("./runtime/JsGroupDef");
const Group = require("./runtime/Group");
const Button = require("./runtime/Button");
const ToggleButton = require("./runtime/ToggleButton");
const Text = require("./runtime/Text");
const Status = require("./runtime/Status");
import {
getCaseInsensitveFile,
readUint8array,
asyncTreeFlatMap,
} from "./utils";
import MakiObject from "./runtime/MakiObject";
import WinampAbstractionLayer from "./runtime/WinampAbstractionLayer";
import Layout from "./runtime/Layout";
import Layer from "./runtime/Layer";
import Container from "./runtime/Container";
import JsElements from "./runtime/JsElements";
import JsGammaSet from "./runtime/JsGammaSet";
import JsGroupDef from "./runtime/JsGroupDef";
import Group from "./runtime/Group";
import Button from "./runtime/Button";
import ToggleButton from "./runtime/ToggleButton";
import Text from "./runtime/Text";
import Status from "./runtime/Status";
async function loadImage(imgUrl) {
return await new Promise(resolve => {
@ -94,7 +98,14 @@ const schema = {
],
container: ["groupdef", "layout", "scripts"],
scripts: ["script"],
elements: ["color", "bitmap", "bitmapfont", "truetypefont", "cursor", "elementalias"],
elements: [
"color",
"bitmap",
"bitmapfont",
"truetypefont",
"cursor",
"elementalias",
],
skininfo: [
"version",
"name",
@ -104,7 +115,14 @@ const schema = {
"homepage",
"screenshot",
],
wasabixml: ["skininfo", "scripts", "elements", "groupdef", "container", "gammaset"],
wasabixml: [
"skininfo",
"scripts",
"elements",
"groupdef",
"container",
"gammaset",
],
// same as above, wa3 vs wa5
winampabstractionlayer: [
"skininfo",
@ -146,7 +164,7 @@ const parsers = {
bitmap: async (node, parent, zip) => {
let { file, gammagroup, h, id, w, x, y } = node.attributes;
// TODO: Escape file for regex
const img = Utils.getCaseInsensitveFile(zip, file);
const img = getCaseInsensitveFile(zip, file);
if (img === undefined) {
return new MakiObject(node, parent);
}
@ -200,7 +218,7 @@ const parsers = {
albumart: noop,
playlistplus: noop,
async script(node, parent, zip) {
const script = await Utils.readUint8array(zip, node.attributes.file);
const script = await readUint8array(zip, node.attributes.file);
return new MakiObject(node, parent, { script });
},
};
@ -235,7 +253,9 @@ async function parseChildren(node, zip) {
}
if (!validChildren.has(childName)) {
throw new Error(`Invalid child of a ${node.xmlNode.name}: ${childName}`);
throw new Error(
`Invalid child of a ${node.xmlNode.name}: ${childName}`
);
}
const childParser = parsers[childName];
@ -260,7 +280,7 @@ async function parseChildren(node, zip) {
}
async function applyGroupDefs(root) {
await Utils.asyncTreeFlatMap(root, async node => {
await asyncTreeFlatMap(root, async node => {
switch (node.xmlNode.name) {
case "group": {
if (!node.children || node.children.length === 0) {

View file

@ -1,16 +0,0 @@
#!/usr/bin/env node
const fs = require("fs");
const path = require("path");
const run = require("./interpreter");
const runtime = require("./runtime");
const System = require("./runtime/System");
function main() {
const relativePath = process.argv[2];
const data = fs.readFileSync(path.join(__dirname, relativePath));
const system = new System();
run({ runtime, data, system, log: true });
}
main();

View file

@ -1,6 +1,6 @@
const parse = require("./parser");
const { getClass, getFormattedId } = require("./objects");
const interpret = require("./virtualMachine");
import parse from "./parser";
import { getClass, getFormattedId } from "./objects";
import interpret from "./virtualMachine";
// Note: if this incurs a performance overhead, we could pass a flag into the VM
// to not yield in production. In that case, we would never even enter the
@ -62,4 +62,4 @@ function main({ runtime, data, system, log, debugHandler }) {
system.js_start();
}
module.exports = main;
export default main;

View file

@ -1,14 +1,14 @@
const fs = require("fs");
const path = require("path");
const System = require("../runtime/System");
const runtime = require("../runtime");
const interpret = require("./interpreter");
const { VERSIONS } = require("./testConstants");
import { readFileSync } from "fs";
import { join } from "path";
import System from "../runtime/System";
import runtime from "../runtime";
import interpret from "./interpreter";
import { VERSIONS } from "./testConstants";
function runFile(version, fileName) {
const relativePath = `../../resources/maki_compiler/${version}/${fileName}`;
const system = new System();
const data = fs.readFileSync(path.join(__dirname, relativePath));
const data = readFileSync(join(__dirname, relativePath));
interpret({ runtime, data, system, log: false });
}

View file

@ -1,5 +1,5 @@
const { COMMANDS } = require("./constants");
const Variable = require("./variable");
import { COMMANDS } from "./constants";
import Variable from "./variable";
const MAGIC = "FG";
const PRIMITIVE_TYPES = {
@ -160,13 +160,17 @@ function readVariables({ makiFile, classes }) {
if (klass == null) {
throw new Error("Invalid type");
}
variables.push(new Variable({ type: klass, typeName: "OBJECT", global: !!global }));
variables.push(
new Variable({ type: klass, typeName: "OBJECT", global: !!global })
);
} else if (subClass) {
const variable = variables[typeOffset];
if (variable == null) {
throw new Error("Invalid type");
}
variables.push(new Variable({ type: variable, typeName: "SUBCLASS", global: !!global }));
variables.push(
new Variable({ type: variable, typeName: "SUBCLASS", global: !!global })
);
} else {
const typeName = PRIMITIVE_TYPES[typeOffset];
if (typeName == null) {
@ -195,7 +199,11 @@ function readVariables({ makiFile, classes }) {
default:
throw new Error("Invalid primitive type");
}
const variable = new Variable({ type: typeName, typeName, global: !!global });
const variable = new Variable({
type: typeName,
typeName,
global: !!global,
});
variable.setValue(value);
variables.push(variable);
}
@ -346,4 +354,4 @@ function parse(buffer) {
};
}
module.exports = parse;
export default parse;

View file

@ -1,11 +1,11 @@
const fs = require("fs");
const path = require("path");
const parse = require("./parser");
const { getClass } = require("./objects");
const { VERSIONS } = require("./testConstants");
import { readFileSync } from "fs";
import { join } from "path";
import parse from "./parser";
import { getClass } from "./objects";
import { VERSIONS } from "./testConstants";
function parseFile(relativePath) {
const buffer = fs.readFileSync(path.join(__dirname, relativePath));
const buffer = readFileSync(join(__dirname, relativePath));
return parse(buffer);
}

View file

@ -1,5 +1,5 @@
const Variable = require("./variable");
const runtime = require("../runtime");
import Variable from "./variable";
import runtime from "../runtime";
// Debug utility to pretty print a value/variable
function printValue(value) {
@ -52,4 +52,4 @@ function printCommand({ i, command, stack, variables }) {
});
}
module.exports = { printCommand };
export default { printCommand };

View file

@ -1,4 +1,4 @@
const Emitter = require("../Emitter");
import Emitter from "../Emitter";
class Variable {
constructor({ type, typeName, global }) {
@ -37,4 +37,4 @@ class Variable {
}
}
module.exports = Variable;
export default Variable;

View file

@ -1,4 +1,4 @@
const Variable = require("./variable");
import Variable from "./variable";
function coerceTypes(var1, var2, val1, val2) {
if (var2.type === "INT") {
@ -307,4 +307,4 @@ function* interpret(start, program, stack = []) {
}
}
module.exports = interpret;
export default interpret;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class Button extends GuiObject {
/**
@ -12,4 +12,4 @@ class Button extends GuiObject {
}
}
module.exports = Button;
export default Button;

View file

@ -1,5 +1,5 @@
const GuiObject = require("./GuiObject");
const { findDescendantByTypeAndId } = require("../utils");
import GuiObject from "./GuiObject";
import { findDescendantByTypeAndId } from "../utils";
class Container extends GuiObject {
/**
@ -16,4 +16,4 @@ class Container extends GuiObject {
}
}
module.exports = Container;
export default Container;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class Group extends GuiObject {
/**
@ -16,4 +16,4 @@ class Group extends GuiObject {
}
}
module.exports = Group;
export default Group;

View file

@ -1,5 +1,5 @@
const MakiObject = require("./MakiObject");
const { findDescendantByTypeAndId, unimplementedWarning } = require("../utils");
import MakiObject from "./MakiObject";
import { findDescendantByTypeAndId, unimplementedWarning } from "../utils";
class GuiObject extends MakiObject {
constructor(node, parent) {
@ -74,4 +74,4 @@ class GuiObject extends MakiObject {
}
}
module.exports = GuiObject;
export default GuiObject;

View file

@ -1,4 +1,4 @@
const MakiObject = require("./MakiObject");
import MakiObject from "./MakiObject";
class JsElements extends MakiObject {
/**
@ -12,4 +12,4 @@ class JsElements extends MakiObject {
}
}
module.exports = JsElements;
export default JsElements;

View file

@ -1,4 +1,4 @@
const MakiObject = require("./MakiObject");
import MakiObject from "./MakiObject";
class JsGammaSet extends MakiObject {
/**
@ -12,4 +12,4 @@ class JsGammaSet extends MakiObject {
}
}
module.exports = JsGammaSet;
export default JsGammaSet;

View file

@ -1,4 +1,4 @@
const MakiObject = require("./MakiObject");
import MakiObject from "./MakiObject";
class JsGroupDef extends MakiObject {
/**
@ -12,4 +12,4 @@ class JsGroupDef extends MakiObject {
}
}
module.exports = JsGroupDef;
export default JsGroupDef;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class Layer extends GuiObject {
/**
@ -12,4 +12,4 @@ class Layer extends GuiObject {
}
}
module.exports = Layer;
export default Layer;

View file

@ -1,5 +1,5 @@
const GuiObject = require("./GuiObject");
const { findParentNodeOfType } = require("../utils");
import GuiObject from "./GuiObject";
import { findParentNodeOfType } from "../utils";
class Layout extends GuiObject {
/**
@ -25,4 +25,4 @@ class Layout extends GuiObject {
}
}
module.exports = Layout;
export default Layout;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class List extends GuiObject {
/**
@ -12,4 +12,4 @@ class List extends GuiObject {
}
}
module.exports = List;
export default List;

View file

@ -1,5 +1,5 @@
const Emitter = require("../Emitter");
const { findElementById, findGroupDefById } = require("../utils");
import Emitter from "../Emitter";
import { findElementById, findGroupDefById } from "../utils";
class MakiObject {
constructor(node, parent, annotations = {}) {
@ -80,4 +80,4 @@ class MakiObject {
}
}
module.exports = MakiObject;
export default MakiObject;

View file

@ -1,5 +1,5 @@
const GuiObject = require("./GuiObject");
const { unimplementedWarning } = require("../utils");
import GuiObject from "./GuiObject";
import { unimplementedWarning } from "../utils";
class PopupMenu extends GuiObject {
/**
@ -25,4 +25,4 @@ class PopupMenu extends GuiObject {
}
}
module.exports = PopupMenu;
export default PopupMenu;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class Slider extends GuiObject {
/**
@ -12,4 +12,4 @@ class Slider extends GuiObject {
}
}
module.exports = Slider;
export default Slider;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class Status extends GuiObject {
/**
@ -12,4 +12,4 @@ class Status extends GuiObject {
}
}
module.exports = Status;
export default Status;

View file

@ -1,6 +1,6 @@
const Group = require("./Group");
const MakiObject = require("./MakiObject");
const { findDescendantByTypeAndId, unimplementedWarning } = require("../utils");
import Group from "./Group";
import MakiObject from "./MakiObject";
import { findDescendantByTypeAndId, unimplementedWarning } from "../utils";
class System extends MakiObject {
constructor(scriptGroup = new Group()) {
@ -71,4 +71,4 @@ class System extends MakiObject {
}
}
module.exports = System;
export default System;

View file

@ -1,4 +1,4 @@
const GuiObject = require("./GuiObject");
import GuiObject from "./GuiObject";
class Text extends GuiObject {
/**
@ -12,4 +12,4 @@ class Text extends GuiObject {
}
}
module.exports = Text;
export default Text;

View file

@ -1,4 +1,4 @@
const Button = require("./Button");
import Button from "./Button";
class ToggleButton extends Button {
/**
@ -12,4 +12,4 @@ class ToggleButton extends Button {
}
}
module.exports = ToggleButton;
export default ToggleButton;

View file

@ -1,4 +1,4 @@
const Group = require("./Group");
import Group from "./Group";
// Needs to behavve like a group to work with top level scripts that call `getScriptGroup`
class WinampAbstractionLayer extends Group {
@ -13,4 +13,4 @@ class WinampAbstractionLayer extends Group {
}
}
module.exports = WinampAbstractionLayer;
export default WinampAbstractionLayer;

View file

@ -1,16 +1,16 @@
const System = require("./System");
const Button = require("./Button");
const ToggleButton = require("./ToggleButton");
const Group = require("./Group");
const Layout = require('./Layout');
const Layer = require('./Layer');
const PopupMenu = require('./PopupMenu');
const List = require('./List');
const Status = require('./Status');
const Text = require('./Text');
const Container = require('./Container');
const GuiObject = require("./GuiObject");
const MakiObject = require("./MakiObject");
import System from "./System";
import Button from "./Button";
import ToggleButton from "./ToggleButton";
import Group from "./Group";
import Layout from "./Layout";
import Layer from "./Layer";
import PopupMenu from "./PopupMenu";
import List from "./List";
import Status from "./Status";
import Text from "./Text";
import Container from "./Container";
import GuiObject from "./GuiObject";
import MakiObject from "./MakiObject";
const runtime = {
"516549714a510d87b5a6e391e7f33532": MakiObject,
@ -28,4 +28,4 @@ const runtime = {
efaa867241fa310ea985dcb74bcb5b52: Text,
};
module.exports = runtime;
export default runtime;