master
(sebelum memperbarui) atau cabang bug-updating-deps
Apa yang Anda harapkan terjadi?
Semua tes lulus di semua lingkungan.
Apa yang sebenarnya terjadi
Satu pengujian gagal.
1360 passing (919ms)
4 pending
1 failing
1) fakeTimers.clock
.useFakeTimers
fakes provided methods:
AssertionError: [refute.same] function onNextTick() {} expected not to be the same object as function onNextTick() {}
at Object.fail (node_modules/@sinonjs/referee/lib/create-fail.js:5)
at Object.fail (node_modules/@sinonjs/referee/lib/define-assertion.js:46)
at assertion (node_modules/@sinonjs/referee/lib/define-assertion.js:68)
at Function.referee.<computed>.<computed> [as same] (node_modules/@sinonjs/referee/lib/define-assertion.js:93)
at Context.<anonymous> (test/util/fake-timers-test.js:1075)
Bagaimana cara memperbanyak
Lihat master
(671330ce). Jalankan npm update && npm test
.
Juga mendorong pembaruan: https://github.com/sinonjs/sinon/commit/c8ff2b8f6f438ccac7c5c3abd9a106dc84914610
Mencoba mengembalikan paket satu per satu secara manual (mencoba browserify, rollup, ++), tanpa melihat perbedaan.
Sekarang mencoba kebalikannya menggunakan skrip dengan hanya menginstal dan menguji satu paket pada satu waktu.
Keberhasilan. [email protected]
melakukan sesuatu yang berbeda.
$ cat test-script.sh
#!/bin/bash
set -e # exit on error
pkgs=([email protected] [email protected] [email protected] [email protected] [email protected])
for pkg in $pkgs; do
git reset --hard
npm install $pkg
npm test
done
Saya tidak dapat menemukan sesuatu yang mencurigakan di diff: https://github.com/browserify/browserify/compare/v16.2.3...v16.3.0?
package-lock.json
untuk pembaruan memang menyertakan satu bagian menarik dari perbedaan:
"process-nextick-args": {
"version": "2.0.1",
},
Perbedaan penuh (
git diff package-lock.json | egrep -v 'resolved|integrity|"dev"'
)
diff --git a/package-lock.json b/package-lock.json
index e12873c6..23ea8984 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -409,29 +409,29 @@
},
"acorn-node": {
- "version": "1.6.2",
+ "version": "1.7.0",
"requires": {
- "acorn": "^6.0.2",
+ "acorn": "^6.1.1",
"acorn-dynamic-import": "^4.0.0",
- "acorn-walk": "^6.1.0",
+ "acorn-walk": "^6.1.1",
"xtend": "^4.0.1"
},
"dependencies": {
"acorn": {
- "version": "6.0.4",
+ "version": "6.2.1",
}
}
},
"acorn-walk": {
- "version": "6.1.1",
+ "version": "6.2.0",
},
"agent-base": {
@@ -607,12 +607,30 @@
}
},
"assert": {
- "version": "1.4.1",
+ "version": "1.5.0",
"requires": {
+ "object-assign": "^4.1.1",
"util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ },
+ "util": {
+ "version": "0.10.3",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
}
},
"assign-symbols": {
@@ -627,15 +645,6 @@
},
- "astw": {
- "version": "2.2.0",
- "requires": {
- "acorn": "^4.0.3"
- }
- },
"async": {
"version": "2.6.1",
@@ -761,9 +770,9 @@
}
},
"base64-js": {
- "version": "1.2.1",
+ "version": "1.3.1",
},
"binary-extensions": {
@@ -881,9 +890,9 @@
},
"browser-resolve": {
- "version": "1.11.2",
+ "version": "1.11.3",
"requires": {
"resolve": "1.1.7"
@@ -904,9 +913,9 @@
},
"browserify": {
- "version": "16.2.3",
+ "version": "16.3.0",
"requires": {
"JSONStream": "^1.0.3",
@@ -971,13 +980,19 @@
"typedarray": "^0.0.6"
}
},
+ "safe-buffer": {
+ "version": "5.2.0",
+ },
"string_decoder": {
- "version": "1.1.1",
+ "version": "1.3.0",
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.0"
}
}
}
@@ -1064,9 +1079,9 @@
}
},
"buffer": {
- "version": "5.0.7",
+ "version": "5.2.1",
"requires": {
"base64-js": "^1.0.2",
@@ -1690,6 +1705,12 @@
"randombytes": "^2.0.0"
}
},
+ "dash-ast": {
+ "version": "1.0.0",
+ },
"date-fns": {
"version": "1.29.0",
@@ -3332,6 +3353,12 @@
}
}
},
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ },
"get-caller-file": {
"version": "2.0.5",
@@ -3652,9 +3679,9 @@
},
"ieee754": {
- "version": "1.1.8",
+ "version": "1.1.13",
},
"ignore": {
@@ -3793,19 +3820,47 @@
}
},
"insert-module-globals": {
- "version": "7.0.1",
+ "version": "7.2.0",
"requires": {
"JSONStream": "^1.0.3",
- "combine-source-map": "~0.7.1",
- "concat-stream": "~1.5.1",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
"is-buffer": "^1.1.0",
- "lexical-scope": "^1.2.0",
+ "path-is-absolute": "^1.0.1",
"process": "~0.11.0",
"through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "combine-source-map": {
+ "version": "0.8.0",
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ }
}
},
"invert-kv": {
@@ -4343,13 +4398,12 @@
}
},
"labeled-stream-splicer": {
- "version": "2.0.0",
+ "version": "2.0.2",
"requires": {
"inherits": "^2.0.1",
- "isarray": "~0.0.1",
"stream-splicer": "^2.0.0"
}
},
@@ -4592,15 +4646,6 @@
"type-check": "~0.3.2"
}
},
- "lexical-scope": {
- "version": "1.2.0",
- "requires": {
- "astw": "^2.0.0"
- }
- },
"linkify-it": {
"version": "2.0.3",
@@ -5768,14 +5813,14 @@
}
},
"module-deps": {
- "version": "6.2.0",
+ "version": "6.2.1",
"requires": {
"JSONStream": "^1.0.3",
"browser-resolve": "^1.7.0",
- "cached-path-relative": "^1.0.0",
+ "cached-path-relative": "^1.0.2",
"concat-stream": "~1.6.0",
"defined": "^1.0.0",
"detective": "^5.0.2",
@@ -5803,12 +5848,12 @@
}
},
"detective": {
- "version": "5.1.0",
+ "version": "5.2.0",
"requires": {
- "acorn-node": "^1.3.0",
+ "acorn-node": "^1.6.1",
"defined": "^1.0.0",
"minimist": "^1.1.1"
}
@@ -6607,9 +6652,9 @@
}
},
"pako": {
- "version": "1.0.6",
+ "version": "1.0.10",
},
"parent-module": {
@@ -6666,9 +6711,9 @@
},
"path-browserify": {
- "version": "0.0.0",
+ "version": "0.0.1",
},
"path-dirname": {
@@ -8221,6 +8266,12 @@
},
+ "simple-concat": {
+ "version": "1.0.0",
+ },
"slash": {
"version": "1.0.0",
@@ -8509,9 +8560,9 @@
}
},
"stream-browserify": {
- "version": "2.0.1",
+ "version": "2.0.2",
"requires": {
"inherits": "~2.0.1",
@@ -8529,22 +8580,60 @@
}
},
"stream-http": {
- "version": "2.7.2",
+ "version": "2.8.3",
"requires": {
"builtin-status-codes": "^3.0.0",
"inherits": "^2.0.1",
- "readable-stream": "^2.2.6",
+ "readable-stream": "^2.3.6",
"to-arraybuffer": "^1.0.0",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"stream-splicer": {
- "version": "2.0.0",
+ "version": "2.0.1",
"requires": {
"inherits": "^2.0.1",
@@ -8679,12 +8768,12 @@
},
"syntax-error": {
- "version": "1.3.0",
+ "version": "1.4.0",
"requires": {
- "acorn": "^4.0.3"
+ "acorn-node": "^1.2.0"
}
},
"table": {
@@ -8987,6 +9076,19 @@
},
+ "undeclared-identifiers": {
+ "version": "1.1.3",
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
"union-value": {
"version": "1.0.1",
@@ -9105,20 +9207,12 @@
},
"util": {
- "version": "0.10.3",
+ "version": "0.10.4",
"requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- }
+ "inherits": "2.0.3"
}
},
"util-deprecate": {
Ingin tahu apakah ini terkait (sebutkan pengatur waktu palsu sinon dan lolex):
https://github.com/calvinmetcalf/process-nextick-args/commit/108596de940c73e78e0378a4084ab73ac846aed0
Sepertinya bug di process-nextick-args
telah diperbaiki. Mau coba lagi?
Tidak ada yang terjadi dalam proyek itu selama lebih dari setahun, jadi masih harus gagal. Kami dapat memperbarui semua paket lain, tetapi ini akan tetap menjadi pemblokir untuk memperbarui browserify.
Karena bug ini memanifestasikan dirinya dalam kode timer palsu, saya berasumsi bug itu ada di Lolex, tetapi sayangnya, ternyata menambahkan tes yang sama ke lolex dan memutakhirkan Browserify (=> Chokidar => fsevents => proses-nextick-args) tidak _not_ memanifestasikan bug. Versi process-nextick-args yang sama (2.0.0) juga ada di sana (di Lolex). Yang menunjukkan bahwa ini adalah kode kecil yang khusus untuk fake-timers.js
milik Sinon. Tebakan saya pada kode module.exports
.
Untuk output di bawah ini, saya menambahkan beberapa output konsol:
$ git diff test/
diff --git a/test/util/fake-timers-test.js b/test/util/fake-timers-test.js
index 97965647..27944a18 100644
--- a/test/util/fake-timers-test.js
+++ b/test/util/fake-timers-test.js
@@ -1068,10 +1068,15 @@ describe("fakeTimers.clock", function() {
});
it("fakes provided methods", function() {
+ console.log("setImmediate", setImmediate);
+ console.log("fakeTimers.timers.setImmediate", fakeTimers.timers.setImmediate);
this.clock = fakeTimers.useFakeTimers({ toFake: ["setTimeout", "Date", "setImmediate"] });
refute.same(setTimeout, fakeTimers.timers.setTimeout);
refute.same(Date, fakeTimers.timers.Date);
+ console.log("setImmediate", setImmediate);
+ console.log("fakeTimers.timers.setImmediate", fakeTimers.timers.setImmediate);
refute.same(setImmediate, fakeTimers.timers.setImmediate);
});
Keluarkan sebelum memutakhirkan Browserify / proses-nextick-args
# chromium:
fakeTimers.clock
...
.setImmediate
β returns numeric id or object with numeric id
β calls the given callback immediately
β throws if no arguments
β manages separate timers per clock instance
β passes extra parameters through to the callback
.clearImmediate
β removes immediate callbacks
.tick
β triggers immediately without specified delay
β does not trigger without sufficient delay
β triggers after sufficient delay
β triggers simultaneous timers
β triggers multiple simultaneous timers
β triggers multiple simultaneous timers with zero callAt
β waits after setTimeout was called
β mini integration test
β triggers even when some throw
β calls function with global object or null (strict mode) as this
β triggers in the order scheduled
β creates updated Date while ticking
β fires timer in intervals of 13
β fires timers in correct order
β triggers timeouts and intervals in the order scheduled
β does not fire canceled intervals
β passes 6 seconds
β passes 1 minute
β passes 2 hours, 34 minutes and 12 seconds (63ms)
β throws for invalid format
β throws for invalid minutes
β throws for negative minutes
β treats missing argument as 0
β fires nested setTimeout calls properly
β does not silently catch exceptions
β returns the current now value
.useFakeTimers
β returns clock object
β has clock property
β sets initial timestamp
β replaces global setTimeout
β global fake setTimeout should return id
β replaces global clearTimeout
β restores global setTimeout
β restores global clearTimeout
β replaces global setInterval
β replaces global clearInterval
β restores global setInterval
β restores global clearInterval
β deletes global property on restore if it was inherited onto the global object
β restores global property on restore if it is present on the global object itself
β fakes Date constructor
β fake Date constructor should mirror Date's properties
β decide on Date.now support at call-time when supported
β decide on Date.now support at call-time when unsupported
β mirrors custom Date properties
β restores Date constructor
setImmediate undefined
fakeTimers.timers.setImmediate undefined
setImmediate function () {
return clock[method].apply(clock, arguments);
}
fakeTimers.timers.setImmediate undefined
β fakes provided methods
Bit yang menarik: setImmediate
adalah undefined
sebelum menjalankan tes, tetapi tes berjalan.
Keluarkan sebelum memutakhirkan Browserify / proses-nextick-args, tetapi hanya menjalankan pengujian tunggal
$ mochify test/util/fake-timers-test.js --grep "fakes provided methods" > output_pre.txt
# chromium:
fakeTimers.clock
.useFakeTimers
1) fakes provided methods
0 passing (32ms)
1 failing
1) fakeTimers.clock
.useFakeTimers
fakes provided methods:
ReferenceError: setImmediate is not defined
at Context.<anonymous> (test/util/fake-timers-test.js:1072)
Menarik: Kami mendapatkan kesalahan yang mengatakan setImmediate is not defined
dalam proses tunggal ini, yang berarti bahwa ketika kami menjalankan seluruh rangkaian pengujian, kami menambahkan global yang tidak ada (bahkan jika kami menyetelnya ke undefined
). Artinya, pengujian tersebut memengaruhi cakupan global. Ini mungkin penting untuk memahami mengapa kita tiba-tiba memiliki implementasi setImmediate
setelah memutakhirkan process-nextick-args
. Mungkin entah bagaimana ia memeriksa apakah variabel telah ditentukan (berbeda dari undefined
) .
Output setelah memutakhirkan Browserify / process-nextick-args (uji coba tunggal)
$ cat output_post.txt
# chromium:
fakeTimers.clock
.useFakeTimers
setImmediate function(fn) {
var id = nextImmediateId++;
var args = arguments.length < 2 ? false : slice.call(arguments, 1);
immediateIds[id] = true;
nextTick(function onNextTick() {
if (immediateIds[id]) {
// fn.call() is faster so we optimize for the common use-case
// <strong i="28">@see</strong> http://jsperf.com/call-apply-segu
if (args) {
fn.apply(null, args);
} else {
fn.call(null);
}
// Prevent ids from leaking
exports.clearImmediate(id);
}
});
return id;
}
fakeTimers.timers.setImmediate function(fn) {
var id = nextImmediateId++;
var args = arguments.length < 2 ? false : slice.call(arguments, 1);
immediateIds[id] = true;
nextTick(function onNextTick() {
if (immediateIds[id]) {
// fn.call() is faster so we optimize for the common use-case
// <strong i="29">@see</strong> http://jsperf.com/call-apply-segu
if (args) {
fn.apply(null, args);
} else {
fn.call(null);
}
// Prevent ids from leaking
exports.clearImmediate(id);
}
});
return id;
}
setImmediate function(fn) {
var id = nextImmediateId++;
var args = arguments.length < 2 ? false : slice.call(arguments, 1);
immediateIds[id] = true;
nextTick(function onNextTick() {
if (immediateIds[id]) {
// fn.call() is faster so we optimize for the common use-case
// <strong i="30">@see</strong> http://jsperf.com/call-apply-segu
if (args) {
fn.apply(null, args);
} else {
fn.call(null);
}
// Prevent ids from leaking
exports.clearImmediate(id);
}
});
return id;
}
fakeTimers.timers.setImmediate function(fn) {
var id = nextImmediateId++;
var args = arguments.length < 2 ? false : slice.call(arguments, 1);
immediateIds[id] = true;
nextTick(function onNextTick() {
if (immediateIds[id]) {
// fn.call() is faster so we optimize for the common use-case
// <strong i="31">@see</strong> http://jsperf.com/call-apply-segu
if (args) {
fn.apply(null, args);
} else {
fn.call(null);
}
// Prevent ids from leaking
exports.clearImmediate(id);
}
});
return id;
}
1) fakes provided methods
0 passing (79ms)
1 failing
1) fakeTimers.clock
.useFakeTimers
fakes provided methods:
AssertionError: [refute.same] function onNextTick() {} expected not to be the same object as function onNextTick() {}
at Object.fail (node_modules/@sinonjs/referee/lib/create-fail.js:5)
at Object.fail (node_modules/@sinonjs/referee/lib/define-assertion.js:46)
at assertion (node_modules/@sinonjs/referee/lib/define-assertion.js:68)
at Function.referee.<computed>.<computed> [as same] (node_modules/@sinonjs/referee/lib/define-assertion.js:93)
at Context.<anonymous> (test/util/fake-timers-test.js:1080)
Hal yang menarik di sini adalah itu
setImmediate
didefinisikan sebagai fungsi (ditentukan pengguna) sebelum pengujiansetImmediate
_tidak berubah_ selama pengujianMemperbarui ke Browserify 16.3 tidak diperlukan. Cukup melakukan npm install [email protected]
dan itu akan memperbarui semua deps untuk versi itu, dan itu menunjukkan bug yang sama.
Ini adalah perbedaan di package-lock.json
git diff package-lock.json
diff --git a/package-lock.json b/package-lock.json
index c2290730..92060702 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -403,12 +403,6 @@
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
"dev": true
},
- "acorn-dynamic-import": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
- "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
- "dev": true
- },
"acorn-jsx": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
@@ -416,29 +410,34 @@
"dev": true
},
"acorn-node": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz",
- "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==",
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
"dev": true,
"requires": {
- "acorn": "^6.0.2",
- "acorn-dynamic-import": "^4.0.0",
- "acorn-walk": "^6.1.0",
- "xtend": "^4.0.1"
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
},
"dependencies": {
"acorn": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
- "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
+ "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
}
}
},
"acorn-walk": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
- "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz",
+ "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==",
"dev": true
},
"agent-base": {
@@ -614,12 +613,30 @@
}
},
"assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
"dev": true,
"requires": {
+ "object-assign": "^4.1.1",
"util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
}
},
"assign-symbols": {
@@ -634,15 +651,6 @@
"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
"dev": true
},
- "astw": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
- "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
- "dev": true,
- "requires": {
- "acorn": "^4.0.3"
- }
- },
"async": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
@@ -768,9 +776,9 @@
}
},
"base64-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
- "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"dev": true
},
"binary-extensions": {
@@ -888,9 +896,9 @@
"dev": true
},
"browser-resolve": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
- "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
"dev": true,
"requires": {
"resolve": "1.1.7"
@@ -978,13 +986,19 @@
"typedarray": "^0.0.6"
}
},
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "dev": true
+ },
"string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.0"
}
}
}
@@ -1071,9 +1085,9 @@
}
},
"buffer": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.7.tgz",
- "integrity": "sha512-NeeHXWh5pCbPQCt2/6rLvXqapZfVsqw/YgRgaHpT3H9Uzgs+S0lSg5SQzouIuDvcmlQRqBe8hOO2scKCu3cxrg==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
+ "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
"dev": true,
"requires": {
"base64-js": "^1.0.2",
@@ -1697,6 +1711,12 @@
"randombytes": "^2.0.0"
}
},
+ "dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
+ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
+ "dev": true
+ },
"date-fns": {
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz",
@@ -3392,6 +3412,12 @@
}
}
},
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -3712,9 +3738,9 @@
"dev": true
},
"ieee754": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
- "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
"dev": true
},
"ignore": {
@@ -3853,19 +3879,47 @@
}
},
"insert-module-globals": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz",
- "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
+ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
"dev": true,
"requires": {
"JSONStream": "^1.0.3",
- "combine-source-map": "~0.7.1",
- "concat-stream": "~1.5.1",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
"is-buffer": "^1.1.0",
- "lexical-scope": "^1.2.0",
+ "path-is-absolute": "^1.0.1",
"process": "~0.11.0",
"through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ }
}
},
"invert-kv": {
@@ -4403,13 +4457,12 @@
}
},
"labeled-stream-splicer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz",
- "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
+ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
- "isarray": "~0.0.1",
"stream-splicer": "^2.0.0"
}
},
@@ -4652,15 +4705,6 @@
"type-check": "~0.3.2"
}
},
- "lexical-scope": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
- "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
- "dev": true,
- "requires": {
- "astw": "^2.0.0"
- }
- },
"linkify-it": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
@@ -5829,14 +5873,14 @@
}
},
"module-deps": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz",
- "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz",
+ "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==",
"dev": true,
"requires": {
"JSONStream": "^1.0.3",
"browser-resolve": "^1.7.0",
- "cached-path-relative": "^1.0.0",
+ "cached-path-relative": "^1.0.2",
"concat-stream": "~1.6.0",
"defined": "^1.0.0",
"detective": "^5.0.2",
@@ -5864,12 +5908,12 @@
}
},
"detective": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
- "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
"dev": true,
"requires": {
- "acorn-node": "^1.3.0",
+ "acorn-node": "^1.6.1",
"defined": "^1.0.0",
"minimist": "^1.1.1"
}
@@ -6668,9 +6712,9 @@
}
},
"pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
"dev": true
},
"parent-module": {
@@ -6727,9 +6771,9 @@
"dev": true
},
"path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true
},
"path-dirname": {
@@ -8282,6 +8326,12 @@
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
+ "simple-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
+ "dev": true
+ },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -8570,9 +8620,9 @@
}
},
"stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true,
"requires": {
"inherits": "~2.0.1",
@@ -8590,22 +8640,60 @@
}
},
"stream-http": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
- "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
"dev": true,
"requires": {
"builtin-status-codes": "^3.0.0",
"inherits": "^2.0.1",
- "readable-stream": "^2.2.6",
+ "readable-stream": "^2.3.6",
"to-arraybuffer": "^1.0.0",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"stream-splicer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
- "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
@@ -8740,12 +8828,12 @@
"dev": true
},
"syntax-error": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
- "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
"dev": true,
"requires": {
- "acorn": "^4.0.3"
+ "acorn-node": "^1.2.0"
}
},
"table": {
@@ -9048,6 +9136,19 @@
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
"dev": true
},
+ "undeclared-identifiers": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
+ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -9166,20 +9267,12 @@
"dev": true
},
"util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dev": true,
"requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- }
+ "inherits": "2.0.3"
}
},
"util-deprecate": {
Mungkin itu bisa digunakan untuk menemukan tersangka yang bersalah di node_modules
:
grep -rl setImmediate node_modules/
node_modules/inquirer/node_modules/rxjs/_esm2015/internal/util/Immediate.js
node_modules/inquirer/node_modules/rxjs/_esm2015/internal/scheduler/AsapAction.js
node_modules/inquirer/node_modules/rxjs/src/internal/util/Immediate.ts
node_modules/inquirer/node_modules/rxjs/src/internal/scheduler/AsapAction.ts
node_modules/inquirer/node_modules/rxjs/internal/util/Immediate.js
node_modules/inquirer/node_modules/rxjs/internal/util/Immediate.d.ts
node_modules/inquirer/node_modules/rxjs/internal/scheduler/AsapAction.js
node_modules/inquirer/node_modules/rxjs/_esm5/internal/util/Immediate.js
node_modules/inquirer/node_modules/rxjs/_esm5/internal/scheduler/AsapAction.js
node_modules/inquirer/node_modules/rxjs/bundles/rxjs.umd.min.js
node_modules/inquirer/node_modules/rxjs/bundles/rxjs.umd.js
node_modules/inquirer/node_modules/rxjs/bundles/rxjs.umd.js.map
node_modules/inquirer/node_modules/rxjs/bundles/rxjs.umd.min.js.map
node_modules/@types/node/index.d.ts
node_modules/@types/node/README.md
node_modules/@sinonjs/samsam/node_modules/lodash/lodash.js
node_modules/uglify-js/tools/domprops.json
node_modules/uglify-js/tools/exit.js
node_modules/mochify/node_modules/mocha/mocha.js
node_modules/mochify/node_modules/mocha/CHANGELOG.md
node_modules/mochify/node_modules/mocha/lib/runner.js
node_modules/mochify/lib/mochify.js
node_modules/readable-stream/lib/_stream_writable.js
node_modules/stream-splicer/index.js
node_modules/levelup/CHANGELOG.md
node_modules/levelup/lib/write-stream.js
node_modules/external-editor/main/index.js
node_modules/rxjs/util/Immediate.js.map
node_modules/rxjs/util/Immediate.js
node_modules/rxjs/util/Immediate.d.ts
node_modules/rxjs/_esm2015/util/Immediate.js
node_modules/rxjs/_esm2015/scheduler/AsapAction.js
node_modules/rxjs/scheduler/AsapAction.js.map
node_modules/rxjs/scheduler/AsapAction.js
node_modules/rxjs/src/util/Immediate.ts
node_modules/rxjs/src/scheduler/AsapAction.ts
node_modules/rxjs/_esm5/util/Immediate.js
node_modules/rxjs/_esm5/scheduler/AsapAction.js
node_modules/rxjs/bundles/Rx.js.map
node_modules/rxjs/bundles/Rx.min.js
node_modules/rxjs/bundles/Rx.js
node_modules/rxjs/bundles/Rx.min.js.map
node_modules/native-promise-only/npo.js
node_modules/native-promise-only/lib/npo.src.js
node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js
node_modules/es6-promise/CHANGELOG.md
node_modules/path-type/node_modules/pify/readme.md
node_modules/globals/globals.json
node_modules/timers-browserify/CHANGELOG.md
node_modules/timers-browserify/README.md
node_modules/timers-browserify/main.js
node_modules/neo-async/async.js
node_modules/neo-async/README.md
node_modules/neo-async/async.min.js
node_modules/neo-async/setImmediate.js
node_modules/readdirp/stream-api.js
node_modules/readdirp/readdirp.js
node_modules/level-blobs/node_modules/readable-stream/float.patch
node_modules/transformify/node_modules/readable-stream/float.patch
node_modules/mocha/mocha.js
node_modules/mocha/CHANGELOG.md
node_modules/mocha/lib/runner.js
node_modules/mocaccino/node_modules/readable-stream/lib/_stream_writable.js
node_modules/mocaccino/node_modules/mocha/mocha.js
node_modules/mocaccino/node_modules/mocha/CHANGELOG.md
node_modules/mocaccino/node_modules/mocha/lib/runner.js
node_modules/esm/esm/loader.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/toolbox.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/devtools_compatibility.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/console/console_module.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/heap_snapshot_worker.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/text_editor/text_editor_module.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/audits_worker/audits_worker_module.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/network/network_module.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/formatter_worker.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/sources/sources_module.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/shell.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources.pak
node_modules/load-json-file/node_modules/pify/readme.md
node_modules/async/memoize.js
node_modules/async/wrapSync.js
node_modules/async/nextTick.js
node_modules/async/CHANGELOG.md
node_modules/async/asyncify.js
node_modules/async/dist/async.min.map
node_modules/async/dist/async.js
node_modules/async/dist/async.min.js
node_modules/async/internal/queue.js
node_modules/async/internal/setImmediate.js
node_modules/async/transform.js
node_modules/async/priorityQueue.js
node_modules/async/index.js
node_modules/async/setImmediate.js
node_modules/async/ensureAsync.js
node_modules/lodash/lodash.js
node_modules/stream-http/node_modules/readable-stream/lib/_stream_writable.js
node_modules/lolex/lolex.js
node_modules/lolex/CHANGELOG.md
node_modules/lolex/src/lolex-src.js
node_modules/lolex/README.md
node_modules/prettier/bin-prettier.js
node_modules/prettier/index.js
node_modules/insert-module-globals/readme.markdown
node_modules/insert-module-globals/index.js
node_modules/insert-module-globals/test/immediate/main.js
node_modules/rollup-plugin-node-builtins/src/es6/timers.js
node_modules/rollup-plugin-node-builtins/src/es6/setimmediate.js
node_modules/lint-staged/node_modules/pify/readme.md
node_modules/fd-slicer/CHANGELOG.md
node_modules/fd-slicer/index.js
node_modules/nise/nise.js
node_modules/source-map-resolve/lib/source-map-resolve-node.js
node_modules/source-map-resolve/readme.md
node_modules/source-map-resolve/source-map-resolve.js
node_modules/yauzl/index.js
node_modules/yauzl/README.md
node_modules/rollup-plugin-node-globals/readme.md
node_modules/pify/readme.md
node_modules/extract-zip/index.js
Ini adalah file yang menyebutkan setImmediate
dan menggunakan process-nextick-args
. Saya pikir masalahnya terkait dengan ini, melihat bahwa sesuatu di luar Sinon mendefinisikan setImmediate
menggunakan nextTick
.
$ grep -l process-nextick-args $(cat setImm_hits )
node_modules/mochify/node_modules/mocha/mocha.js
node_modules/readable-stream/lib/_stream_writable.js
node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js
node_modules/mocha/mocha.js
node_modules/mocaccino/node_modules/readable-stream/lib/_stream_writable.js
node_modules/mocaccino/node_modules/mocha/mocha.js
node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/resources/inspector/audits_worker/audits_worker_module.js
node_modules/stream-http/node_modules/readable-stream/lib/_stream_writable.js
Saya melihat banyak hal yang berkaitan dengan Mochify dan streams, @mantoni. Apakah Anda tahu apa yang bisa menjadi akar penyebabnya?
Sebelum peningkatan, hanya ada dua dependensi dalam hierarki:
$ find node_modules/ -regex '.*/process-nextick-args/package.json'
node_modules/process-nextick-args/package.json
node_modules/mocaccino/node_modules/process-nextick-args/package.json
$ find node_modules/ -regex '.*/process-nextick-args/package.json' | xargs jq .version
"1.0.7"
"2.0.1"
Setelah peningkatan, ada tiga (baru stream-http
):
$ find node_modules/ -regex '.*/process-nextick-args/package.json'
node_modules/process-nextick-args/package.json
node_modules/mocaccino/node_modules/process-nextick-args/package.json
node_modules/stream-http/node_modules/process-nextick-args/package.json
carlerik at diffia9350 in /mnt/dev/sinon (2072-upgrade-browserify-bug)
$ find node_modules/ -regex '.*/process-nextick-args/package.json' | xargs jq .version
"1.0.7"
"2.0.1"
"2.0.1"
Saya telah menginvestasikan setengah jam untuk menggali ini. Meskipun saya tidak dapat menjelaskan mengapa ini terjadi, saya sampai pada kesimpulan bahwa Sinon melakukan (dan kemungkinan besar selalu melakukan) hal yang salah tentang setImmediate
.
Tanpa memutakhirkan apa pun, di cabang master saat ini, buat issue.js
dengan konten ini:
'use strict';
console.log(String(window.setImmediate));
require('.').useFakeTimers();
console.log(String(window.setImmediate));
Menjalankannya dengan cetakan node_modules/.bin/mochify issue.js
# chromium:
undefined
function () {
return clock[method].apply(clock, arguments);
}
0 passing (1ms)
Seperti yang Anda lihat, Chromium bahkan tidak menerapkan setImmediate
. Saya menemukan laporan bug chromium, di mana pengelola menyatakan bahwa mereka tidak bersedia menerapkannya: https://bugs.chromium.org/p/chromium/issues/detail?id=146172
Saya akan mengatakan masalahnya bukan bahwa setImmediate
tidak dipulihkan dengan benar, itu seharusnya tidak dipasang di tempat pertama. Saat ini, menggunakan timer palsu Sinon di lingkungan browser menghasilkan setImmediate
bekerja padahal seharusnya tidak.
Saya telah membuat permintaan tarik dengan kasus uji gagal yang menunjukkan masalah tersebut. Sayangnya, saya tidak punya waktu untuk mengerjakannya hari ini.
Itu adalah pendekatan pragmatis: coba saja dan lihat apakah membuat Sinon tidak menginstal setImmediate membuat bug hilang. Saya kira perbaikan sebenarnya mungkin perlu dilakukan di Lolex.
Saya menguji ini di lolex nanti. Tidak dapat direproduksi di sana, jadi kita hanya perlu menambahkan tanda centang di kode penginstalan Sinon untuk pengatur waktu.
Saya menemukan pendosa setelah melihat perbaikan yang disarankan (sinonjs / lolex # 268 dan sinonjs / lolex # 269) _not_ memperbaiki masalah. Tampaknya ini adalah transformasi browserify yang melakukan ini: https://github.com/browserify/insert-module-globals/releases/tag/v7.1.0
Saya mengetahuinya hanya dengan menjalankan mochify
pada satu tes di test/util/fake-timers-test.js
. Jika saya mengomentari baris yang membuat jam, setImmediate
akan terus tidak ditentukan. Jika saya mengomentarinya, itu menjadi jelas.
Mengetahui bahwa saya menghindari membuat setImmediate di Lolex 5 (yang merupakan ketergantungan di # 2131), saya tahu Lolex juga tidak bisa disalahkan. Jadi saya mencari di Google beberapa baris dari definisi string dari setImmediate dan menemukan definisi fungsi di insert-module-globals, yang merupakan ketergantungan dari Browserify. Dengan memperbarui Browserify, kami beralih dari v7.0.1 ke 7.3.0 dari ketergantungan ini, yang mulai menambahkan setImmediate
di v7.2.
Sepertinya browserify ini mengubah pemasangan global ini jika mendeteksi setImmediate digunakan / direferensikan? Dalam kasus apapun, kita tidak disalahkan di sini, tampaknya.
Tapi ada satu hal yang aneh. Saya ingin tahu apakah Mochify melakukan bisnis yang lucu ...
Saya dapat melihat bahwa transformasi yang disebutkan sedang disertakan dalam proses mochify: mochify --bundle bundle.js --consolify test/util/fake-timers-test.js
, tetapi _not_ disertakan saat membuat bundel Sinon: npm run build
.
@mantoni Apa yang dapat menyebabkan Mochify melakukan transformasi yang tidak dilakukan Browserify "normal"?
Hanya untuk memperjelas:
masalah dalam kasus ini adalah sesuatu (Browserify) menambahkan setImmediate
ke cakupan global _after_ kode deteksi kami telah berjalan, yang berarti banyak asumsi rusak. setImmediate
mulai tidak terdefinisi dan kami berharap ini juga tidak terdefinisi di akhir, tetapi telah disetel di suatu tempat untuk sementara.
Terima kasih telah menyelidiki ini π―
Saya harus menjadi bagian dari hackathon weekend, dalam beberapa hal, meskipun itu sedikit async π Senang akhirnya bisa sampai pada intinya.
Saya rasa saya tahu perbaikan dasar di sini (tentukan opts.insertGlobalVars
), tetapi @mantoni perlu membantu saya sedikit dengan bit mochify
.
Saya tidak melihat cara apapun untuk melewatkan flag Browserify pada baris perintah mochify
. Apa yang saya lihat dari dokumen mochify adalah ini:
Fungsi mochify mengembalikan instance Browserify. Silakan merujuk ke API Browserify untuk detailnya.
Saya menganggap itu berarti kita perlu mengganti penggunaan CLI saat ini dari Mochify dan menggantinya dengan javascript (seperti build.js
)? Saya juga menganggap itu berarti bahwa instance browserify yang dikembalikan dapat dikonfigurasi menggunakan opsi tambahan? Saya mungkin memposting dua kali ini untuk referensi ...
@ fatso83 Saya senang menambahkan lebih banyak opsi Browserify ke Mochify :)
Bagaimanapun, saya pikir masalahnya ada pada brout
, bagian yang sangat lama dari Mochify. Itu shims objek process
untuk moka dan mengalihkan write
panggilan di stdout / stderr. Ini berarti browserify mendeteksi objek process
sedang digunakan dan menambahkan shim global untuknya. Sebaiknya jalankan pipeline browserify internal di Mochify dengan --no-insert-globals
dan berikan process
shim kustom di brout
sebagai gantinya.
_Edit: _ Baris yang relevan di brout adalah ini: https://github.com/mantoni/brout.js/blob/14b62f4e8b88445f90a46adb1921c00921680087/lib/brout.js#L28
Eh, saya ingin memberikan PR, tapi saya tidak tahu apa yang akan saya lakukan, jadi ...
Jangan khawatir. Saya akan memperbaikinya, dan akan mencoba menemukan solusi yang lebih mudah dipahami daripada yang sekarang. Tetapi akan memakan waktu beberapa hari sampai saya menemukan waktu yang tepat.