From 085930a69d31508d5ce73c5bc390499e322dd52f Mon Sep 17 00:00:00 2001 From: loatheb Date: Sat, 9 Dec 2017 22:04:29 +0800 Subject: [PATCH 1/5] feat(browserify): add basic structure for browserify --- .../tiny-browserify/buildIns/index.js | 29 +++++++++++++++++++ .../tiny-browserify/buildIns/libs/assert.js | 0 .../tiny-browserify/buildIns/libs/buffer.js | 0 .../buildIns/libs/child_process.js | 0 .../tiny-browserify/buildIns/libs/console.js | 0 .../tiny-browserify/buildIns/libs/crypto.js | 0 .../tiny-browserify/buildIns/libs/dgram.js | 0 .../tiny-browserify/buildIns/libs/events.js | 0 .../tiny-browserify/buildIns/libs/fs.js | 0 .../tiny-browserify/buildIns/libs/http.js | 0 .../tiny-browserify/buildIns/libs/https.js | 0 .../tiny-browserify/buildIns/libs/net.js | 0 .../tiny-browserify/buildIns/libs/os.js | 0 .../tiny-browserify/buildIns/libs/path.js | 0 .../tiny-browserify/buildIns/libs/process.js | 0 .../buildIns/libs/querystring.js | 0 .../tiny-browserify/buildIns/libs/readline.js | 0 .../tiny-browserify/buildIns/libs/repl.js | 0 .../tiny-browserify/buildIns/libs/stream.js | 0 .../buildIns/libs/string_decoder.js | 0 .../tiny-browserify/buildIns/libs/tls.js | 0 .../tiny-browserify/buildIns/libs/tty.js | 0 .../tiny-browserify/buildIns/libs/url.js | 0 .../tiny-browserify/buildIns/libs/util.js | 0 .../tiny-browserify/buildIns/libs/vm.js | 0 .../tiny-browserify/buildIns/libs/zlib.js | 0 infrastructure/tiny-browserify/index.js | 0 27 files changed, 29 insertions(+) create mode 100644 infrastructure/tiny-browserify/buildIns/index.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/assert.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/buffer.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/child_process.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/console.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/crypto.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/dgram.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/events.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/fs.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/http.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/https.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/net.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/os.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/path.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/process.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/querystring.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/readline.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/repl.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/stream.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/string_decoder.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/tls.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/tty.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/url.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/util.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/vm.js create mode 100644 infrastructure/tiny-browserify/buildIns/libs/zlib.js create mode 100644 infrastructure/tiny-browserify/index.js diff --git a/infrastructure/tiny-browserify/buildIns/index.js b/infrastructure/tiny-browserify/buildIns/index.js new file mode 100644 index 0000000..aa525c1 --- /dev/null +++ b/infrastructure/tiny-browserify/buildIns/index.js @@ -0,0 +1,29 @@ +module.exports = { + assert: require('./libs/assert'), + buffer: require('./libs/buffer'), + child_process: require('./libs/child_process'), + cluster: require('./libs/cluster'), + console: require('./libs/console'), + crypto: require('./libs/crypto'), + dns: require('./libs/dns'), + events: require('./libs/events'), + fs: require('./libs/fs'), + http: require('./libs/http'), + https: require('./libs/https'), + net: require('./libs/net'), + os: require('./libs/os'), + path: require('./libs/path'), + process: require('./libs/process'), + querystring: require('./libs/querystring'), + readline: require('./libs/readline'), + repl: require('./libs/repl'), + stream: require('./libs/stream'), + string_decoder: require('./libs/string_decoder'), + tls: require('./libs/tls'), + tty: require('./libs/tty'), + dgram: require('./libs/dgram'), + url: require('./libs/url'), + util: require('./libs/util'), + vm: require('./libs/vm'), + zlib: require('./libs/zlib'), +} \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/assert.js b/infrastructure/tiny-browserify/buildIns/libs/assert.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/buffer.js b/infrastructure/tiny-browserify/buildIns/libs/buffer.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/child_process.js b/infrastructure/tiny-browserify/buildIns/libs/child_process.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/console.js b/infrastructure/tiny-browserify/buildIns/libs/console.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/crypto.js b/infrastructure/tiny-browserify/buildIns/libs/crypto.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/dgram.js b/infrastructure/tiny-browserify/buildIns/libs/dgram.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/events.js b/infrastructure/tiny-browserify/buildIns/libs/events.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/fs.js b/infrastructure/tiny-browserify/buildIns/libs/fs.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/http.js b/infrastructure/tiny-browserify/buildIns/libs/http.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/https.js b/infrastructure/tiny-browserify/buildIns/libs/https.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/net.js b/infrastructure/tiny-browserify/buildIns/libs/net.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/os.js b/infrastructure/tiny-browserify/buildIns/libs/os.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/path.js b/infrastructure/tiny-browserify/buildIns/libs/path.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/process.js b/infrastructure/tiny-browserify/buildIns/libs/process.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/querystring.js b/infrastructure/tiny-browserify/buildIns/libs/querystring.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/readline.js b/infrastructure/tiny-browserify/buildIns/libs/readline.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/repl.js b/infrastructure/tiny-browserify/buildIns/libs/repl.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/stream.js b/infrastructure/tiny-browserify/buildIns/libs/stream.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/string_decoder.js b/infrastructure/tiny-browserify/buildIns/libs/string_decoder.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/tls.js b/infrastructure/tiny-browserify/buildIns/libs/tls.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/tty.js b/infrastructure/tiny-browserify/buildIns/libs/tty.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/url.js b/infrastructure/tiny-browserify/buildIns/libs/url.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/util.js b/infrastructure/tiny-browserify/buildIns/libs/util.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/vm.js b/infrastructure/tiny-browserify/buildIns/libs/vm.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/buildIns/libs/zlib.js b/infrastructure/tiny-browserify/buildIns/libs/zlib.js new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/tiny-browserify/index.js b/infrastructure/tiny-browserify/index.js new file mode 100644 index 0000000..e69de29 From c6c8a0dc987a21dbd40386fe07281f64639c609c Mon Sep 17 00:00:00 2001 From: loatheb Date: Sat, 9 Dec 2017 23:08:47 +0800 Subject: [PATCH 2/5] feat(buildIns-console): add the console polyfill --- .../tiny-browserify/buildIns/libs/console.js | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/infrastructure/tiny-browserify/buildIns/libs/console.js b/infrastructure/tiny-browserify/buildIns/libs/console.js index e69de29..4834a89 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/console.js +++ b/infrastructure/tiny-browserify/buildIns/libs/console.js @@ -0,0 +1,25 @@ +if (typeof window === void 0 || !window.console || typeof window.console !== 'object') { + window.console = {} +} + +var console = window.console + +var methods = ['debug', 'error', 'info', 'log', 'warn', 'dir', 'dirxml', 'table', 'trace', 'group', 'groupCollapsed', + 'groupEnd', 'clear', 'count', 'assert', 'markTimeline', 'profile', 'profileEnd', 'timeline', 'timelineEnd', 'time', 'timeEnd', 'timeStamp', 'context'] + +var properties = ['memory'] +var i + +for (i = 0; i < methods.length; i++) { + var method = methods[i] + if (!console[method]) console[method] = dummy +} + +for (i = 0; i < properties.length; i++) { + var property = properties[i] + if (!console[property]) console[property] = {} +} + +function dummy() {} + +module.exports = console From 4a12da667d85acf52a82383e82a4bd0151ef4648 Mon Sep 17 00:00:00 2001 From: loatheb Date: Sun, 10 Dec 2017 11:29:18 +0800 Subject: [PATCH 3/5] feat(buildIns-assert): add most methods in assert --- .../tiny-browserify/buildIns/libs/assert.js | 136 ++++++++++++++++++ .../tiny-browserify/buildIns/libs/util.js | 18 +++ 2 files changed, 154 insertions(+) diff --git a/infrastructure/tiny-browserify/buildIns/libs/assert.js b/infrastructure/tiny-browserify/buildIns/libs/assert.js index e69de29..1734959 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/assert.js +++ b/infrastructure/tiny-browserify/buildIns/libs/assert.js @@ -0,0 +1,136 @@ +var inherites = require('./util').inherites + +function toString(value) { + if (typeof value === 'object') { + return JSON.stringify(value) + } + return value.toString() +} + +function travel(obj1, obj2, method) { + for (var i in obj1) { + try { + method(obj1[i], obj2[i]) + } catch(e) { + if (e instanceof AssertionError) return false + } + } + return true +} + +var tuples = [ + ['fail', fail], + ['AssertionError', AssertionError], + ['ok', ok], + ['equal', equal], + ['notEqual', notEqual], + ['deepEqual', deepEqual], + ['deepStrictEqual', deepStrictEqual], + ['notDeepEqual', notDeepEqual], + ['notDeepStrictEqual', notDeepStrictEqual], + ['strictEqual', strictEqual], + ['notStrictEqual', notStrictEqual], + ['throws', throws], + ['doesNotThrow', doesNotThrow], + ['ifError', ifError], +] + +function AssertionError(message) { + inherites(AssertionError, Error) + this.message = message + this.name = 'AssertionError' +} + +function ok(value, message) { + message = toString(message) || toString(value) + ' == true' + if (!value) { + throw new AssertionError(message) + } +} + +function equal(actual, expected, message) { + message = toString(message) || toString(actual) + ' == ' + toString(expected) + if (actual != expected) { + throw new AssertionError(message) + } +} + +function notEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' != ' + toString(expected) + if (actual == expected) { + throw new AssertionError(message) + } +} + +function deepEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' deepEqual ' + toString(expected) + if (!travel(actual, expected, equal)) { + throw new AssertionError(message) + } +} + +function deepStrictEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' deepEqual ' + toString(expected) + if (!travel(actual, expected, strictEqual)) { + throw new AssertionError(message) + } +} + +function notDeepEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' deepEqual ' + toString(expected) + if (!travel(actual, expected, notStrictEqual)) { + throw new AssertionError(message) + } +} + +function notDeepStrictEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' deepEqual ' + toString(expected) + if (!travel(actual, expected, notDeepStrictEqual)) { + throw new AssertionError(message) + } +} + +function strictEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' === ' + toString(expected) + if (actual !== expected) { + throw new AssertionError(message) + } +} + +function notStrictEqual(actual, expected, message) { + message = toString(message) || toString(actual) + ' !== ' + toString(expected) + if (actual === expected) { + throw new AssertionError(message) + } +} + +function throws() { + +} + +function doesNotThrow() { + +} + +function ifError() { + +} + +function fail() { + +} + +var assert = function() { + return ok.apply(ok, arguments) +} + +for (var i = 0; i < tuples.length; i++) { + var tuple = tuples[i] + var name = tuple[0] + var method = tuple[1] + if (!assert(name)) { + assert[name] = method + } +} + +module.exports = assert diff --git a/infrastructure/tiny-browserify/buildIns/libs/util.js b/infrastructure/tiny-browserify/buildIns/libs/util.js index e69de29..0979778 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/util.js +++ b/infrastructure/tiny-browserify/buildIns/libs/util.js @@ -0,0 +1,18 @@ +var inherites = function(constructor, superConstructor) { + constructor.super = superConstructor + + constructor.prototype = Object.create(superConstructor.prototype, { + constructor: { + value: constructor, + enumerable: false, + writable: true, + configurable: true + } + }) +} + +var util = { + inherites: inherites +} + +module.exports = util From b9c819ef685fef2c50183056cd8239cd9bc03357 Mon Sep 17 00:00:00 2001 From: loatheb Date: Wed, 13 Dec 2017 21:53:21 +0800 Subject: [PATCH 4/5] tweak(assert): upgrade the assert polyfill --- .../tiny-browserify/buildIns/libs/assert.js | 46 ++++++++++++++++--- .../tiny-browserify/buildIns/libs/util.js | 20 ++++++++ 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/infrastructure/tiny-browserify/buildIns/libs/assert.js b/infrastructure/tiny-browserify/buildIns/libs/assert.js index 1734959..884a177 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/assert.js +++ b/infrastructure/tiny-browserify/buildIns/libs/assert.js @@ -1,4 +1,7 @@ -var inherites = require('./util').inherites +var util = require('./util') +var inherites = util.inherites +var keys = util.keys +var isObject = util.isObject function toString(value) { if (typeof value === 'object') { @@ -8,7 +11,10 @@ function toString(value) { } function travel(obj1, obj2, method) { + if (keys(obj1) !== keys(obj2)) return false for (var i in obj1) { + if (!obj2.hasOwnproperty(i)) return false + if (isObject(obj1[i])) return travel(obj1[i], obj2[i], method) try { method(obj1[i], obj2[i]) } catch(e) { @@ -104,20 +110,48 @@ function notStrictEqual(actual, expected, message) { } } -function throws() { +function throws(func, error, message) { + var result + var reg = new RegExp(error) + try { + result = func() + } catch(e) { + result = e + } + if (!reg.test(error)) return + if (message) throw message + throw result } function doesNotThrow() { + var result + var reg = new RegExp(error) + try { + result = func() + } catch(e) { + result = e + } + if (reg.test(error)) return + if (message) throw message + throw result } -function ifError() { - +function ifError(value) { + if (!value) { + throw value + } } -function fail() { - +function fail(actual, expected, message, operator, stackStartFunction) { + operator = operator || '!=' + stackStartFunction = stackStartFunction || fail + var params = toString(actual) + ' ' + operator + ' ' + toString(expected) + var result = new Function(params) + if (result) return + if (message) throw message + throw params } var assert = function() { diff --git a/infrastructure/tiny-browserify/buildIns/libs/util.js b/infrastructure/tiny-browserify/buildIns/libs/util.js index 0979778..221bd36 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/util.js +++ b/infrastructure/tiny-browserify/buildIns/libs/util.js @@ -11,6 +11,26 @@ var inherites = function(constructor, superConstructor) { }) } +var isArray = function(item) { + return Object.prototype.toString.call(item) === '[object Array]' +} + +var isObject = function(item) { + return Object.prototype.toString.call(item) === '[object Object]' +} + +var keys = function(item) { + if (isArray(item)) return item + if (isObject(item)) { + var results = [] + for (var i in item) { + results.push(i) + } + return results + } + return [] +} + var util = { inherites: inherites } From 8c148d2585ce75cb0d29e181387d1b063cd76c5d Mon Sep 17 00:00:00 2001 From: loatheb Date: Wed, 13 Dec 2017 22:11:29 +0800 Subject: [PATCH 5/5] chore(empty-module): add build in empty modules --- infrastructure/tiny-browserify/buildIns/libs/child_process.js | 1 + infrastructure/tiny-browserify/buildIns/libs/fs.js | 1 + infrastructure/tiny-browserify/buildIns/libs/module.js | 1 + infrastructure/tiny-browserify/buildIns/libs/net.js | 1 + infrastructure/tiny-browserify/buildIns/libs/readline.js | 1 + infrastructure/tiny-browserify/buildIns/libs/repl.js | 1 + infrastructure/tiny-browserify/buildIns/libs/tls.js | 1 + 7 files changed, 7 insertions(+) create mode 100644 infrastructure/tiny-browserify/buildIns/libs/module.js diff --git a/infrastructure/tiny-browserify/buildIns/libs/child_process.js b/infrastructure/tiny-browserify/buildIns/libs/child_process.js index e69de29..4107d3b 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/child_process.js +++ b/infrastructure/tiny-browserify/buildIns/libs/child_process.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/fs.js b/infrastructure/tiny-browserify/buildIns/libs/fs.js index e69de29..4107d3b 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/fs.js +++ b/infrastructure/tiny-browserify/buildIns/libs/fs.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/module.js b/infrastructure/tiny-browserify/buildIns/libs/module.js new file mode 100644 index 0000000..4107d3b --- /dev/null +++ b/infrastructure/tiny-browserify/buildIns/libs/module.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/net.js b/infrastructure/tiny-browserify/buildIns/libs/net.js index e69de29..4107d3b 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/net.js +++ b/infrastructure/tiny-browserify/buildIns/libs/net.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/readline.js b/infrastructure/tiny-browserify/buildIns/libs/readline.js index e69de29..4107d3b 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/readline.js +++ b/infrastructure/tiny-browserify/buildIns/libs/readline.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/repl.js b/infrastructure/tiny-browserify/buildIns/libs/repl.js index e69de29..4107d3b 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/repl.js +++ b/infrastructure/tiny-browserify/buildIns/libs/repl.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file diff --git a/infrastructure/tiny-browserify/buildIns/libs/tls.js b/infrastructure/tiny-browserify/buildIns/libs/tls.js index e69de29..4107d3b 100644 --- a/infrastructure/tiny-browserify/buildIns/libs/tls.js +++ b/infrastructure/tiny-browserify/buildIns/libs/tls.js @@ -0,0 +1 @@ +/* dummy */ \ No newline at end of file