Skip to content

Commit 7c4b076

Browse files
committed
feature: gritty: migrate to ESM
1 parent 7cc62e0 commit 7c4b076

16 files changed

Lines changed: 119 additions & 156 deletions

File tree

.madrun.mjs renamed to .madrun.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import {run, cutEnv} from 'madrun';
2+
import {defineEnv} from 'supertape/env';
23

3-
const SUPERTAPE_TIMEOUT = 15_000;
4+
const env = defineEnv({
5+
css: true,
6+
timeout: 15_000,
7+
});
48

59
export default {
610
'start': () => 'node bin/gritty',
@@ -25,11 +29,6 @@ export default {
2529
'watch:lint': async () => `nodemon -w client -w server -w webpack.config.js -x ${await run('lint')}`,
2630
'report': () => 'c8 report --reporter=lcov',
2731

28-
'coverage': async () => [`c8 ${await cutEnv('test')}`, {
29-
SUPERTAPE_TIMEOUT,
30-
}],
31-
32-
'test': () => [`tape 'test/**/*.js'`, {
33-
SUPERTAPE_TIMEOUT,
34-
}],
32+
'coverage': async () => [env, `c8 ${await cutEnv('test')}`],
33+
'test': () => [env, `tape 'test/**/*.js'`],
3534
};

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,15 @@ And use it this way:
107107

108108
```js
109109
// server.js
110-
const http = require('node:http');
111-
const gritty = require('gritty');
110+
import http from 'node:http';
111+
import {gritty} from 'gritty';
112112

113-
const express = require('express');
114-
const io = require('socket.io');
113+
import express from 'express';
114+
import {Server} from 'socket.io';
115115

116116
const app = express();
117117
const server = http.createServer(app);
118-
const socket = io.listen(server);
118+
const socket = new Server(server);
119119

120120
const port = 1337;
121121
const ip = '0.0.0.0';

bin/gritty.js

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
#!/usr/bin/env node
22

3-
'use strict';
3+
import process from 'node:process';
4+
import http from 'node:http';
5+
import {fileURLToPath} from 'node:url';
6+
import {dirname} from 'node:path';
7+
import yargsParser from 'yargs-parser';
8+
import squad from 'squad';
9+
import express from 'express';
10+
import {Server} from 'socket.io';
11+
import {gritty} from '#gritty/server';
12+
import bin from '../help.json' with {
13+
type: 'json',
14+
};
15+
import pack from '../package.json' with {
16+
type: 'json',
17+
};
418

5-
const {join} = require('node:path');
6-
const process = require('node:process');
7-
const args = require('yargs-parser')(process.argv.slice(2), {
19+
const __filename = fileURLToPath(import.meta.url);
20+
const __dirname = dirname(__filename);
21+
22+
const args = yargsParser(process.argv.slice(2), {
823
boolean: [
924
'version',
1025
'help',
@@ -45,12 +60,10 @@ function main(args) {
4560
}
4661

4762
function path() {
48-
console.log(join(__dirname, '..'));
63+
console.log(new URL('..', import.meta.url).pathname);
4964
}
5065

5166
function start(options) {
52-
const squad = require('squad');
53-
5467
const {
5568
port,
5669
command,
@@ -61,12 +74,6 @@ function start(options) {
6174

6275
const DIR = `${__dirname}/../`;
6376

64-
const gritty = require('../');
65-
const http = require('node:http');
66-
67-
const express = require('express');
68-
const io = require('socket.io');
69-
7077
const app = express();
7178
const server = http.createServer(app);
7279

@@ -77,7 +84,7 @@ function start(options) {
7784
.use(gritty())
7885
.use(express.static(DIR));
7986

80-
const socket = io(server);
87+
const socket = new Server(server);
8188

8289
gritty.listen(socket, {
8390
command,
@@ -92,7 +99,6 @@ function start(options) {
9299
}
93100

94101
function help() {
95-
const bin = require('../help');
96102
const usage = 'Usage: gritty [options]';
97103

98104
console.log(usage);
@@ -104,7 +110,6 @@ function help() {
104110
}
105111

106112
function version() {
107-
const pack = require('../package');
108113
console.log('v' + pack.version);
109114
}
110115

client/get-el.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
'use strict';
2-
31
const isString = (a) => typeof a === 'string';
42

5-
module.exports = (el) => {
3+
export default (el) => {
64
if (isString(el))
75
return document.querySelector(el);
86

client/get-env.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
'use strict';
2-
31
const isFn = (a) => typeof a === 'function';
42

5-
module.exports = (env) => {
3+
export default (env) => {
64
const obj = {};
75

86
for (const name of Object.keys(env)) {

client/get-host.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
'use strict';
2-
3-
module.exports = () => {
1+
export default () => {
42
const l = location;
53

64
return l.origin || l.protocol + '//' + l.host;

client/gritty.js

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
1-
'use strict';
2-
3-
require('@xterm/xterm/css/xterm.css');
4-
5-
const {FitAddon} = require('@xterm/addon-fit');
6-
const {WebglAddon: _WebglAddon} = require('@xterm/addon-webgl');
7-
const currify = require('currify');
8-
const {tryCatch} = require('try-catch');
9-
10-
const wrap = require('wraptile');
11-
12-
const {io} = require('socket.io-client');
13-
const {Terminal: _Terminal} = require('@xterm/xterm');
14-
15-
const getEl = require('./get-el');
16-
const getHost = require('./get-host');
17-
const getEnv = require('./get-env');
1+
import '@xterm/xterm/css/xterm.css';
2+
import {FitAddon} from '@xterm/addon-fit';
3+
import {WebglAddon as _WebglAddon} from '@xterm/addon-webgl';
4+
import currify from 'currify';
5+
import {tryCatch} from 'try-catch';
6+
import wrap from 'wraptile';
7+
import {io} from 'socket.io-client';
8+
import * as _Terminal from '@xterm/xterm';
9+
import getEl from './get-el.js';
10+
import getHost from './get-host.js';
11+
import getEnv from './get-env.js';
1812

1913
const onWindowResize = wrap(_onWindowResize);
2014
const onTermData = currify(_onTermData);
@@ -25,17 +19,11 @@ const onDisconnect = wrap(_onDisconnect);
2519

2620
const onConnect = wrap(_onConnect);
2721

28-
module.exports = gritty;
29-
module.exports._onConnect = _onConnect;
30-
module.exports._onDisconnect = _onDisconnect;
31-
module.exports._onData = _onData;
32-
module.exports._onTermResize = _onTermResize;
33-
module.exports._onTermData = _onTermData;
34-
module.exports._onWindowResize = _onWindowResize;
22+
export default gritty;
3523

3624
const defaultFontFamily = 'Menlo, Consolas, "Liberation Mono", Monaco, "Lucida Console", monospace';
3725

38-
module.exports._defaultFontFamily = defaultFontFamily;
26+
export const _defaultFontFamily = defaultFontFamily;
3927

4028
function gritty(element, options = {}) {
4129
const el = getEl(element);
@@ -123,7 +111,7 @@ function createTerminal(terminalContainer, overrides) {
123111
};
124112
}
125113

126-
function _onConnect(socket, fitAddon, {env, cwd, cols, rows, command, autoRestart}) {
114+
export function _onConnect(socket, fitAddon, {env, cwd, cols, rows, command, autoRestart}) {
127115
socket.emit('terminal', {
128116
env,
129117
cwd,
@@ -139,26 +127,26 @@ function _onConnect(socket, fitAddon, {env, cwd, cols, rows, command, autoRestar
139127
fitAddon.fit();
140128
}
141129

142-
function _onDisconnect(terminal) {
130+
export function _onDisconnect(terminal) {
143131
terminal.writeln('terminal disconnected...');
144132
}
145133

146-
function _onData(terminal, data) {
134+
export function _onData(terminal, data) {
147135
terminal.write(data);
148136
}
149137

150-
function _onTermResize(socket, {cols, rows}) {
138+
export function _onTermResize(socket, {cols, rows}) {
151139
socket.emit('resize', {
152140
cols,
153141
rows,
154142
});
155143
}
156144

157-
function _onTermData(socket, data) {
145+
export function _onTermData(socket, data) {
158146
socket.emit('data', data);
159147
}
160148

161-
function _onWindowResize(fitAddon) {
149+
export function _onWindowResize(fitAddon) {
162150
// Uncaught Error: This API only accepts integers
163151
// when gritty mimized
164152
const fit = fitAddon.fit.bind(fitAddon);

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "gritty",
33
"version": "9.0.4",
4-
"type": "commonjs",
4+
"type": "module",
55
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
66
"description": "Web terminal emulator",
77
"bin": {
@@ -12,6 +12,10 @@
1212
"type": "git",
1313
"url": "git+https://github.com/cloudcmd/gritty.git"
1414
},
15+
"imports": {
16+
"#gritty/client": "./client/gritty.js",
17+
"#gritty/server": "./server/gritty.js"
18+
},
1519
"scripts": {
1620
"start": "madrun start",
1721
"start:dev": "madrun start:dev",

server/gritty.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
'use strict';
2-
3-
const process = require('node:process');
4-
5-
const path = require('node:path');
6-
7-
const log = require('debug')('gritty');
8-
const Router = require('router');
9-
10-
const currify = require('currify');
11-
const wraptile = require('wraptile');
12-
const _pty = require('node-pty');
13-
14-
const stringArgv = require('string-to-argv');
1+
import process from 'node:process';
2+
import path, {dirname} from 'node:path';
3+
import {fileURLToPath} from 'node:url';
4+
import debug from 'debug';
5+
import Router from 'router';
6+
import currify from 'currify';
7+
import wraptile from 'wraptile';
8+
import _pty from 'node-pty';
9+
import stringArgv from 'string-to-argv';
10+
11+
const __filename = fileURLToPath(import.meta.url);
12+
const __dirname = dirname(__filename);
13+
const log = debug('gritty');
1514
const isFn = (a) => typeof a === 'function';
1615
const isBool = (a) => typeof a === 'boolean';
1716

@@ -45,7 +44,7 @@ const choose = (a, b, options) => {
4544
return options.default;
4645
};
4746

48-
module.exports = (options = {}) => {
47+
export const gritty = (options = {}) => {
4948
const router = Router();
5049
const {prefix = '/gritty'} = options;
5150

@@ -103,7 +102,7 @@ function createTerminal(overrides = {}) {
103102
return term;
104103
}
105104

106-
module.exports.listen = (socket, options = {}) => {
105+
gritty.listen = (socket, options = {}) => {
107106
check(socket, options);
108107

109108
const {prefix, auth} = options;

test/before.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
'use strict';
2-
3-
const http = require('node:http');
4-
5-
const {promisify} = require('node:util');
6-
const express = require('express');
7-
8-
const io = require('socket.io');
9-
const gritty = require('..');
1+
import http from 'node:http';
2+
import {promisify} from 'node:util';
3+
import express from 'express';
4+
import {Server} from 'socket.io';
5+
import {gritty} from '#gritty/server';
106

117
const isFn = (a) => typeof a === 'function';
128

13-
module.exports = before;
9+
export default before;
1410

1511
function before(options, fn = options) {
1612
if (isFn(options))
@@ -25,7 +21,7 @@ function before(options, fn = options) {
2521

2622
app.use(gritty());
2723

28-
const socket = io(server);
24+
const socket = new Server(server);
2925

3026
gritty.listen(socket, options);
3127

@@ -35,7 +31,7 @@ function before(options, fn = options) {
3531
});
3632
}
3733

38-
module.exports.connect = promisify((options, fn = options) => {
34+
export const connect = promisify((options, fn = options) => {
3935
before(options, (port, done, socket) => {
4036
fn(null, {
4137
port,

0 commit comments

Comments
 (0)