From cb7d6e51f9d9301a6e12561beb06d01c03cd59e2 Mon Sep 17 00:00:00 2001 From: He4eT Date: Sat, 20 May 2023 23:39:01 +0300 Subject: [PATCH] Use emglken 0.5.2 --- bin/player.stdio.js | 31 +++++++++++++++++++------------ bin/stdio.js | 16 ++++++++-------- src/cheapGlkOte.js | 5 +++-- src/fakeDialog.js | 7 ++++--- src/glkOte/glkote-term.js | 6 ++++-- src/index.js | 25 +++++++++++-------------- 6 files changed, 49 insertions(+), 41 deletions(-) diff --git a/bin/player.stdio.js b/bin/player.stdio.js index 4379e82..b0c0be9 100644 --- a/bin/player.stdio.js +++ b/bin/player.stdio.js @@ -4,11 +4,12 @@ * @see: https://github.com/curiousdannii/emglken/blob/master/bin/emglken.js */ -const fs = require('fs') -const minimist = require('minimist') +import { readFileSync } from 'fs' +import minimist from 'minimist' -const CheapGlkOte = require('../src/') -const { handlers } = require('./stdio') +import CheapGlkOte from '../src/index.js' + +import { handlers } from './stdio.js' const formats = [ { @@ -50,13 +51,19 @@ if (!format) { process.exit(0) } -const { glkInterface, sendFn } = CheapGlkOte(handlers) -handlers.setSend(sendFn) +import(`emglken/src/${format.id}.js`) + .then(({default: engine}) => engine) + .then((engine) => new engine()) + .then((vm) => { + const cheapGlkOte = CheapGlkOte(handlers) -const engine = require('emglken/src/' + format.engine) -const vm = new engine() + handlers.setSend(cheapGlkOte.send) -vm.prepare( - fs.readFileSync(storyfile), - glkInterface) -vm.start() + vm.init(readFileSync(storyfile), { + Dialog: cheapGlkOte.Dialog, + GlkOte: cheapGlkOte.GlkOte, + Glk: {}, + wasmBinary: readFileSync(new URL(`../node_modules/emglken/build/${format.id}-core.wasm`, import.meta.url)) + }) + vm.start() + }) diff --git a/bin/stdio.js b/bin/stdio.js index ffb5659..80ce972 100644 --- a/bin/stdio.js +++ b/bin/stdio.js @@ -2,14 +2,14 @@ * @see: https://github.com/curiousdannii/glkote-term/blob/master/src/glkote-dumb.js */ -const readline = require('readline') -const MuteStream = require('mute-stream') -const ansiEscapes = require('ansi-escapes') +import { createInterface, emitKeypressEvents } from 'readline' +import MuteStream from 'mute-stream' +import ansiEsc from 'ansi-escapes' const stdin = process.stdin const stdout = new MuteStream() stdout.pipe(process.stdout) -const rl = readline.createInterface({ +const rl = createInterface({ input: stdin, output: stdout, prompt: '' @@ -29,7 +29,7 @@ const onInit = () => { if (stdin.isTTY) { stdin.setRawMode(true) } - readline.emitKeypressEvents(stdin) + emitKeypressEvents(stdin) rl.resume() clearScreen() } @@ -71,7 +71,7 @@ const drawBuffer = messages => { if (x.style === 'input') { if (stdout.isTTY) { - stdout.write(ansiEscapes.eraseLines(2)) + stdout.write(ansiEsc.eraseLines(2)) stdout.write('> ') } } @@ -173,13 +173,13 @@ const detach_handlers = () => { const handle_line_input = line => { if (stdout.isTTY) { - stdout.write(ansiEscapes.eraseLines(1)) + stdout.write(ansiEsc.eraseLines(1)) } send(line, currentInputType, currentWindow) detach_handlers() } -module.exports.handlers = { +export const handlers = { onInit, onUpdateWindows, onUpdateInputs, diff --git a/src/cheapGlkOte.js b/src/cheapGlkOte.js index 671d12f..63c939c 100644 --- a/src/cheapGlkOte.js +++ b/src/cheapGlkOte.js @@ -2,13 +2,14 @@ * @see: https://github.com/curiousdannii/glkote-term/blob/master/src/glkote-dumb.js */ -const GlkOte = require('./glkOte/glkote-term') +import GlkOte from './glkOte/glkote-term.js' class CheapGlkOte extends GlkOte { constructor(handlers, loggers, size) { super(size) this.handlers = handlers + this.loggers = loggers } sendFn (message, type, window) { @@ -79,4 +80,4 @@ class CheapGlkOte extends GlkOte { } } -module.exports = CheapGlkOte +export default CheapGlkOte diff --git a/src/fakeDialog.js b/src/fakeDialog.js index 04f3f8e..a0af2ec 100644 --- a/src/fakeDialog.js +++ b/src/fakeDialog.js @@ -7,6 +7,7 @@ class FakeDialog { constructor(handlers, loggers) { this.streaming = false this.handlers = handlers + this.loggers = loggers } file_ref_exists({ usage }) { @@ -15,11 +16,11 @@ class FakeDialog { : false } - file_remove_ref (ref) { + file_remove_ref () { return true } - file_construct_ref(filename, usage, gameid) { + file_construct_ref(filename, usage) { return { filename, usage: usage || '' @@ -52,4 +53,4 @@ class FakeDialog { } } -module.exports = FakeDialog +export default FakeDialog diff --git a/src/glkOte/glkote-term.js b/src/glkOte/glkote-term.js index 2a4d251..5f16aa6 100644 --- a/src/glkOte/glkote-term.js +++ b/src/glkOte/glkote-term.js @@ -2,6 +2,8 @@ * @see: https://github.com/curiousdannii/glkote-term/blob/master/src/glkote-term.js */ +import packageJSON from '../../package.json' assert { type: 'json' } + class GlkOte { constructor({width, height}) { this.width = width @@ -11,7 +13,7 @@ class GlkOte { this.disabled = false this.generation = 0 this.interface = null - this.version = require('../../package.json').version + this.version = packageJSON.version } measure_window() { @@ -149,4 +151,4 @@ class GlkOte { } } -module.exports = GlkOte +export default GlkOte diff --git a/src/index.js b/src/index.js index 397397f..86e4638 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ -const FakeDialog = require('./fakeDialog') -const CheapGlkOte = require('./cheapGlkOte') +import FakeDialog from './fakeDialog.js' +import CheapGlkOte from './cheapGlkOte.js' const noop = () => void null @@ -12,39 +12,36 @@ const defaultHandlers = [ 'onFileNameRequest', 'onFileRead', 'onFileWrite', - 'onExit' + 'onExit', ].reduce((acc, x) => ((acc[x] = noop), acc), {}) const defaultLoggers = { log: console.log, warning: console.warn, - error: console.error + error: console.error, } const defaultSize = { width: 80, - height: 25 + height: 25, } -module.exports = (handlers_, {loggers: loggers_, size: size_ } = {}) => { +export default (handlers_, {loggers: loggers_, size: size_ } = {}) => { const handlers = Object.assign({}, defaultHandlers, handlers_) const loggers = - Object.assign({}, defaultLoggers, size_) + Object.assign({}, defaultLoggers, loggers_) const size = Object.assign({}, defaultSize, size_) const Dialog = new FakeDialog(handlers, loggers) const GlkOte = new CheapGlkOte(handlers, loggers, size) - const sendFn = GlkOte.sendFn.bind(GlkOte) + const send = GlkOte.sendFn.bind(GlkOte) return { - sendFn, - glkInterface: { - Dialog, - GlkOte, - Glk: {} - } + Dialog, + GlkOte, + send, } }