From: Daniel Imms Date: Sat, 1 Oct 2016 07:11:29 +0000 (-0700) Subject: Move to TypeScript build X-Git-Url: https://git.proxmox.com/?p=mirror_xterm.js.git;a=commitdiff_plain;h=441009d3591e6466892207ea01ac4e556d24a98b Move to TypeScript build --- diff --git a/.babelrc b/.babelrc deleted file mode 100644 index c13c5f6..0000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["es2015"] -} diff --git a/addons/attach/attach.js b/addons/attach/attach.js index 2ef1f73..bc64244 100644 --- a/addons/attach/attach.js +++ b/addons/attach/attach.js @@ -11,12 +11,12 @@ /* * CommonJS environment */ - module.exports = attach(require('../../src/xterm')); + module.exports = attach(require('../../build/xterm')); } else if (typeof define == 'function') { /* * Require.js is available */ - define(['../../src/xterm'], attach); + define(['../../build/xterm'], attach); } else { /* * Plain browser environment diff --git a/addons/fit/fit.js b/addons/fit/fit.js index 209e059..292f89e 100644 --- a/addons/fit/fit.js +++ b/addons/fit/fit.js @@ -16,12 +16,12 @@ /* * CommonJS environment */ - module.exports = fit(require('../../src/xterm')); + module.exports = fit(require('../../build/xterm')); } else if (typeof define == 'function') { /* * Require.js is available */ - define(['../../src/xterm'], fit); + define(['../../build/xterm'], fit); } else { /* * Plain browser environment diff --git a/addons/fullscreen/fullscreen.js b/addons/fullscreen/fullscreen.js index 9a655b3..3194ca6 100644 --- a/addons/fullscreen/fullscreen.js +++ b/addons/fullscreen/fullscreen.js @@ -15,12 +15,12 @@ /* * CommonJS environment */ - module.exports = fullscreen(require('../../src/xterm')); + module.exports = fullscreen(require('../../build/xterm')); } else if (typeof define == 'function') { /* * Require.js is available */ - define(['../../src/xterm'], fullscreen); + define(['../../build/xterm'], fullscreen); } else { /* * Plain browser environment diff --git a/addons/linkify/linkify.js b/addons/linkify/linkify.js index 746b430..336becb 100644 --- a/addons/linkify/linkify.js +++ b/addons/linkify/linkify.js @@ -3,12 +3,12 @@ /* * CommonJS environment */ - module.exports = linkify(require('../../src/xterm')); + module.exports = linkify(require('../../build/xterm')); } else if (typeof define == 'function') { /* * Require.js is available */ - define(['../../src/xterm'], linkify); + define(['../../build/xterm'], linkify); } else { /* * Plain browser environment diff --git a/bin/build b/bin/build index 42a4788..8ec5cbd 100755 --- a/bin/build +++ b/bin/build @@ -1,38 +1,5 @@ -#! /usr/bin/env node +#! /usr/bin/env sh -var child_process = require('child_process'); -var fs = require('fs'); - -var buildDir = process.env.BUILD_DIR || 'build'; - -if (!fs.existsSync(buildDir)){ - fs.mkdirSync(buildDir); -} - -// Add `node_modules/.bin` to PATH -process.env.PATH = process.cwd() + '/node_modules/.bin:' + process.env.PATH; - -console.log('Building xterm.js into ' + buildDir); - -// Build ES2015 modules into ES5 form, then concatenate them, -// then remove unused require calls and save in output file with source map. -console.log(' - Building ' + buildDir + '/xterm.js...'); - -var jsBuildCmd = 'browserify src/xterm.js -s Terminal -t [ babelify --presets [ es2015 ] ] --debug | '; -jsBuildCmd += 'derequire | exorcist ' + buildDir + '/xterm.js.map > ' + buildDir + '/xterm.js'; - -var jsBuildProcess = child_process.execSync(jsBuildCmd); - -if (jsBuildProcess.status) { - console.log(jsBuildProcess.error); -} - -console.log(' OK.'); - -// Copy CSS into $BUILD_DIR -console.log(' - Building ' + buildDir + '/xterm.css...'); - -fs.createReadStream('src/xterm.css').pipe( - fs.createWriteStream(buildDir + '/xterm.css') -); -console.log(' OK.'); +mkdir -p build +browserify src/xterm.js --standalone Terminal -p [ tsify ] --outfile build/xterm.js +cp src/xterm.css build/xterm.css diff --git a/package.json b/package.json index 6b667dc..aaf8998 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,10 @@ "repository": "https://github.com/sourcelair/xterm.js", "license": "MIT", "devDependencies": { - "babel-core": "6.14.0", - "babel-preset-es2015": "6.14.0", - "babelify": "^7.3.0", + "@types/node": "^6.0.41", "browserify": "^13.1.0", "chai": "3.5.0", - "derequire": "^2.0.3", "docdash": "0.4.0", - "exorcist": "^0.4.0", "express": "4.13.4", "express-ws": "2.0.0-rc.1", "glob": "^7.0.5", @@ -25,11 +21,14 @@ "mocha": "2.5.3", "nodemon": "1.10.2", "pty.js": "0.3.1", - "sleep": "^3.0.1" + "sleep": "^3.0.1", + "tsify": "^1.0.7", + "typescript": "^2.0.3", + "typings": "^1.4.0" }, "scripts": { "start": "nodemon --watch src --watch addons --exec bash -c './bin/build && node demo/app'", - "test": "mocha --recursive --compilers js:babel-core/register", + "test": "./bin/build && mocha --recursive", "build:docs": "jsdoc -c jsdoc.json", "build": "./bin/build" } diff --git a/src/xterm.js b/src/xterm.js index 3ccc99e..1dbef54 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -683,7 +683,7 @@ Terminal.prototype.open = function(parent) { Terminal.loadAddon = function(addon, callback) { if (typeof exports === 'object' && typeof module === 'object') { // CommonJS - return require(__dirname + '/../addons/' + addon); + return require('../addons/' + addon); } else if (typeof define == 'function') { // RequireJS return require(['../addons/' + addon + '/' + addon], callback); diff --git a/test/addons/linkify-test.js b/test/addons/linkify-test.js index 7cb2318..d3c20d7 100644 --- a/test/addons/linkify-test.js +++ b/test/addons/linkify-test.js @@ -1,5 +1,5 @@ var assert = require('chai').assert; -var Terminal = require('../../src/xterm'); +var Terminal = require('../../build/xterm'); var linkify = require('../../addons/linkify/linkify'); describe('linkify addon', function () { diff --git a/test/addons/test.js b/test/addons/test.js index ba689e6..bac30e8 100644 --- a/test/addons/test.js +++ b/test/addons/test.js @@ -1,5 +1,5 @@ var assert = require('chai').assert; -var Terminal = require('../../src/xterm'); +var Terminal = require('../../build/xterm'); describe('xterm.js addons', function() { it('should load addons with Terminal.loadAddon', function () { diff --git a/test/composition-helper-test.js b/test/composition-helper-test.js index d3071c2..52add91 100644 --- a/test/composition-helper-test.js +++ b/test/composition-helper-test.js @@ -1,5 +1,5 @@ var assert = require('chai').assert; -var Terminal = require('../src/xterm'); +var Terminal = require('../build/xterm'); describe('CompositionHelper', function () { var terminal; diff --git a/test/escape-sequences-test.js b/test/escape-sequences-test.js new file mode 100644 index 0000000..39f4f4e --- /dev/null +++ b/test/escape-sequences-test.js @@ -0,0 +1,108 @@ +var glob = require('glob'); +var fs = require('fs'); +var pty = require('pty.js'); +var sleep = require('sleep'); +var Terminal = require('../build/xterm'); + +var CONSOLE_LOG = console.log; + +// expect files need terminal at 80x25! +var COLS = 80; +var ROWS = 25; + +/** some helpers for pty interaction */ +// we need a pty in between to get the termios decorations +// for the basic test cases a raw pty device is enough +var primitive_pty = pty.native.open(COLS, ROWS); + +// fake sychronous pty write - read +// we just pipe the data from slave to master as a child program would do +// pty.js opens pipe fds with O_NONBLOCK +// just wait 10ms instead of setting fds to blocking mode +function pty_write_read(s) { + fs.writeSync(primitive_pty.slave, s); + sleep.usleep(10000); + var b = Buffer(64000); + var bytes = fs.readSync(primitive_pty.master, b, 0, 64000); + return b.toString('utf8', 0, bytes); +} + +// make sure raw pty is at x=0 and has no pending data +function pty_reset() { + pty_write_read('\r\n'); +} + +/* debug helpers */ +// generate colorful noisy output to compare xterm and emulator cell states +function formatError(in_, out_, expected) { + function addLineNumber(start, color) { + var counter = start || 0; + return function(s) { + counter += 1; + return '\x1b[33m' + (' ' + counter).slice(-2) + color + s; + } + } + var line80 = '12345678901234567890123456789012345678901234567890123456789012345678901234567890'; + var s = ''; + s += '\n\x1b[34m' + JSON.stringify(in_); + s += '\n\x1b[33m ' + line80 + '\n'; + s += out_.split('\n').map(addLineNumber(0, '\x1b[31m')).join('\n'); + s += '\n\x1b[33m ' + line80 + '\n'; + s += expected.split('\n').map(addLineNumber(0, '\x1b[32m')).join('\n'); + return s; +} + +// simple debug output of terminal cells +function terminalToString(term) { + var result = ''; + var line_s = ''; + for (var line=0; line