From 9aa9e807947d9e7405a2027a286ba0ee1ef940c8 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Fri, 12 Oct 2018 17:40:15 +0000 Subject: [PATCH 001/178] test: fix timeout when running sequential/test-fs-watch-system-limit.js During run of make test on Linux, it is possible for this test to spawn 200 processes and hang since there is a check to max out at 200 child processes. --- test/sequential/test-fs-watch-system-limit.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index e896cbf83b965a..6643e115027d27 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -11,6 +11,7 @@ if (!common.enoughTestCpu) const processes = []; const gatherStderr = new stream.PassThrough(); +const timeout = 30000; gatherStderr.setEncoding('utf8'); gatherStderr.setMaxListeners(Infinity); @@ -27,7 +28,6 @@ function spawnProcesses() { proc.stderr.pipe(gatherStderr); processes.push(proc); } - setTimeout(() => { if (!finished && processes.length < 200) spawnProcesses(); @@ -36,6 +36,16 @@ function spawnProcesses() { spawnProcesses(); +setTimeout(() => { + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); + + finished = true; + processes.forEach((proc) => proc.kill()); +}, timeout); + let accumulated = ''; gatherStderr.on('data', common.mustCallAtLeast((chunk) => { accumulated += chunk; @@ -43,7 +53,8 @@ gatherStderr.on('data', common.mustCallAtLeast((chunk) => { assert( accumulated.includes('ENOSPC: System limit for number ' + 'of file watchers reached') || - accumulated.includes('EMFILE: '), + accumulated.includes('EMFILE: ') || + accumulated.includes('Timeout'), accumulated); console.log(`done after ${processes.length} processes, cleaning up`); finished = true; From 3ab4146008bcee397bc76dbdf00e43647260218d Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 10 Oct 2018 15:24:08 -0700 Subject: [PATCH 002/178] deps: cherry-pick b0af309 from upstream V8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [api] Remove deprecated wasm methods These methods were deprecated in 7.0, now we can remove them. R=adamk@chromium.org Bug: v8:7868 Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng Change-Id: I60badb378a055152bdd27aed67d11ddf74fce174 Reviewed-on: https://chromium-review.googlesource.com/1209283 Reviewed-by: Adam Klein Commit-Queue: Clemens Hammacher Cr-Commit-Position: refs/heads/master@{#55695} Refs: https://github.com/v8/v8/commit/b0af30948505b68c843b538e109ab378d3750e37 PR-URL: https://github.com/nodejs/node/pull/23415 Reviewed-By: Refael Ackermann Reviewed-By: Rich Trott Reviewed-By: Joyee Cheung Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Tiancheng "Timothy" Gu Reviewed-By: Gus Caplan Reviewed-By: James M Snell Reviewed-By: Michaël Zasso Reviewed-By: Colin Ihrig --- common.gypi | 2 +- deps/v8/include/v8.h | 24 ------------------------ deps/v8/src/api.cc | 8 -------- 3 files changed, 1 insertion(+), 33 deletions(-) diff --git a/common.gypi b/common.gypi index 4c43db48f3cd30..50f69563be6d93 100644 --- a/common.gypi +++ b/common.gypi @@ -33,7 +33,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.4', + 'v8_embedder_string': '-node.5', # Enable disassembler for `--print-code` v8 options 'v8_enable_disassembler': 1, diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h index 4a104e57d873b9..6c3cc84fba718e 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -4362,13 +4362,6 @@ class V8_EXPORT WasmCompiledModule : public Object { public: typedef std::pair, size_t> SerializedModule; -// The COMMA macro allows us to use ',' inside of the V8_DEPRECATED macro. -#define COMMA , - V8_DEPRECATED( - "Use BufferReference.", - typedef std::pair CallerOwnedBuffer); -#undef COMMA - /** * A unowned reference to a byte buffer. */ @@ -4377,12 +4370,6 @@ class V8_EXPORT WasmCompiledModule : public Object { size_t size; BufferReference(const uint8_t* start, size_t size) : start(start), size(size) {} - // Temporarily allow conversion to and from CallerOwnedBuffer. - V8_DEPRECATED( - "Use BufferReference directly.", - inline BufferReference(CallerOwnedBuffer)); // NOLINT(runtime/explicit) - V8_DEPRECATED("Use BufferReference directly.", - inline operator CallerOwnedBuffer()); }; /** @@ -4429,8 +4416,6 @@ class V8_EXPORT WasmCompiledModule : public Object { * Get the wasm-encoded bytes that were used to compile this module. */ BufferReference GetWasmWireBytesRef(); - V8_DEPRECATED("Use GetWasmWireBytesRef version.", - Local GetWasmWireBytes()); /** * Serialize the compiled module. The serialized data does not include the @@ -4463,15 +4448,6 @@ class V8_EXPORT WasmCompiledModule : public Object { static void CheckCast(Value* obj); }; -// TODO(clemensh): Remove after M70 branch. -WasmCompiledModule::BufferReference::BufferReference( - WasmCompiledModule::CallerOwnedBuffer buf) - : BufferReference(buf.first, buf.second) {} -WasmCompiledModule::BufferReference:: -operator WasmCompiledModule::CallerOwnedBuffer() { - return {start, size}; -} - /** * The V8 interface for WebAssembly streaming compilation. When streaming * compilation is initiated, V8 passes a {WasmStreaming} object to the embedder diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index 5f1737b2a42b2d..fbd947b92301e3 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -7382,14 +7382,6 @@ WasmCompiledModule::BufferReference WasmCompiledModule::GetWasmWireBytesRef() { return {bytes_vec.start(), bytes_vec.size()}; } -Local WasmCompiledModule::GetWasmWireBytes() { - BufferReference ref = GetWasmWireBytesRef(); - CHECK_LE(ref.size, String::kMaxLength); - return String::NewFromOneByte(GetIsolate(), ref.start, NewStringType::kNormal, - static_cast(ref.size)) - .ToLocalChecked(); -} - WasmCompiledModule::TransferrableModule WasmCompiledModule::GetTransferrableModule() { if (i::FLAG_wasm_shared_code) { From 849aa1e504330eead82e43fa26b731f2fe8c64f9 Mon Sep 17 00:00:00 2001 From: David Xue Date: Fri, 12 Oct 2018 09:35:59 -0700 Subject: [PATCH 003/178] lib: migrate to getOptions in loaders.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23455 Reviewed-By: Tobias Nießen Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Gus Caplan Reviewed-By: Trivikram Kamat --- lib/internal/bootstrap/loaders.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/bootstrap/loaders.js b/lib/internal/bootstrap/loaders.js index 359812e1e9e342..b3072a02943b6d 100644 --- a/lib/internal/bootstrap/loaders.js +++ b/lib/internal/bootstrap/loaders.js @@ -212,7 +212,7 @@ NativeModule.isInternal = function(id) { return id.startsWith('internal/') || (id === 'worker_threads' && - !process.binding('config').experimentalWorker); + !internalBinding('options').getOptions('--experimental-worker')); }; } From c24e9633fbc72fc8e0f8b6d1e93a2f30b884791c Mon Sep 17 00:00:00 2001 From: "garrik.leonardo@gmail.com" Date: Fri, 12 Oct 2018 13:30:40 -0500 Subject: [PATCH 004/178] test: improve test coverage for fs module Covering the case when fs-read get invalid argument for file handle PR-URL: https://github.com/nodejs/node/pull/23601 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil --- test/parallel/test-fs-read.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/parallel/test-fs-read.js b/test/parallel/test-fs-read.js index 5843cdc8365024..d3de036b67e6e4 100644 --- a/test/parallel/test-fs-read.js +++ b/test/parallel/test-fs-read.js @@ -75,3 +75,11 @@ assert.throws( code: 'ERR_INVALID_CALLBACK', } ); + +assert.throws( + () => fs.read(null, Buffer.alloc(1), 0, 1, 0), + { + message: 'The "fd" argument must be of type number. Received type object', + code: 'ERR_INVALID_ARG_TYPE', + } +); From 9f7e3a404096db60438f6dc305b0a5fa4ecddae7 Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Wed, 10 Oct 2018 22:23:33 -0700 Subject: [PATCH 005/178] src: reduce platform worker barrier lifetime Minor cleanup in the lifetime for the platform worker initialization synchronization barrier. PR-URL: https://github.com/nodejs/node/pull/23419 Reviewed-By: Anna Henningsen Reviewed-By: Benjamin Gruenbaum Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell Reviewed-By: Denys Otrishko Reviewed-By: Colin Ihrig --- src/node_platform.cc | 15 +++++++++------ src/node_platform.h | 4 ---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/node_platform.cc b/src/node_platform.cc index 372a76fabe8a85..047cb43268929a 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -167,8 +167,11 @@ class WorkerThreadsTaskRunner::DelayedTaskScheduler { }; WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(int thread_pool_size) { - Mutex::ScopedLock lock(platform_workers_mutex_); - pending_platform_workers_ = thread_pool_size; + Mutex platform_workers_mutex; + ConditionVariable platform_workers_ready; + + Mutex::ScopedLock lock(platform_workers_mutex); + int pending_platform_workers = thread_pool_size; delayed_task_scheduler_.reset( new DelayedTaskScheduler(&pending_worker_tasks_)); @@ -176,8 +179,8 @@ WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(int thread_pool_size) { for (int i = 0; i < thread_pool_size; i++) { PlatformWorkerData* worker_data = new PlatformWorkerData{ - &pending_worker_tasks_, &platform_workers_mutex_, - &platform_workers_ready_, &pending_platform_workers_, i + &pending_worker_tasks_, &platform_workers_mutex, + &platform_workers_ready, &pending_platform_workers, i }; std::unique_ptr t { new uv_thread_t() }; if (uv_thread_create(t.get(), PlatformWorkerThread, @@ -189,8 +192,8 @@ WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(int thread_pool_size) { // Wait for platform workers to initialize before continuing with the // bootstrap. - while (pending_platform_workers_ > 0) { - platform_workers_ready_.Wait(lock); + while (pending_platform_workers > 0) { + platform_workers_ready.Wait(lock); } } diff --git a/src/node_platform.h b/src/node_platform.h index 441322a325b3c2..1308d4df6aa249 100644 --- a/src/node_platform.h +++ b/src/node_platform.h @@ -117,10 +117,6 @@ class WorkerThreadsTaskRunner { std::unique_ptr delayed_task_scheduler_; std::vector> threads_; - - Mutex platform_workers_mutex_; - ConditionVariable platform_workers_ready_; - int pending_platform_workers_; }; class NodePlatform : public MultiIsolatePlatform { From 64d65ed7ac1f31bb65dbcc7a7d0fe4e891297149 Mon Sep 17 00:00:00 2001 From: jungkumseok Date: Fri, 12 Oct 2018 09:13:42 -0700 Subject: [PATCH 006/178] test: fix `assert.strictEqual` arguments in test/parallel/test-c-ares.js When using `assert.strictEqual`, the first argument must be the actual value and the second argument must be the expected value. PR-URL: https://github.com/nodejs/node/pull/23448 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-c-ares.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-c-ares.js b/test/parallel/test-c-ares.js index 8b1cf79868c328..45e7d46829b00a 100644 --- a/test/parallel/test-c-ares.js +++ b/test/parallel/test-c-ares.js @@ -46,20 +46,20 @@ const dnsPromises = dns.promises; dns.lookup(null, common.mustCall((error, result, addressType) => { assert.ifError(error); - assert.strictEqual(null, result); - assert.strictEqual(4, addressType); + assert.strictEqual(result, null); + assert.strictEqual(addressType, 4); })); dns.lookup('127.0.0.1', common.mustCall((error, result, addressType) => { assert.ifError(error); - assert.strictEqual('127.0.0.1', result); - assert.strictEqual(4, addressType); + assert.strictEqual(result, '127.0.0.1'); + assert.strictEqual(addressType, 4); })); dns.lookup('::1', common.mustCall((error, result, addressType) => { assert.ifError(error); - assert.strictEqual('::1', result); - assert.strictEqual(6, addressType); + assert.strictEqual(result, '::1'); + assert.strictEqual(addressType, 6); })); [ From f0c5c962ce971213c0c055b91bb747860defd492 Mon Sep 17 00:00:00 2001 From: Khalid Adil Date: Fri, 12 Oct 2018 09:20:38 -0700 Subject: [PATCH 007/178] repl: remove unused variable e from try catch PR-URL: https://github.com/nodejs/node/pull/23449 Reviewed-By: Gireesh Punathil Reviewed-By: Beth Griggs Reviewed-By: Colin Ihrig Reviewed-By: Sakthipriyan Vairamani --- lib/repl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/repl.js b/lib/repl.js index 831d1519f563aa..d71f636cd64dc8 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -1485,7 +1485,7 @@ function defineDefaultCommands(repl) { this.outputStream.write('Failed to load: ' + file + ' is not a valid file\n'); } - } catch (e) { + } catch { this.outputStream.write('Failed to load: ' + file + '\n'); } this.displayPrompt(); From 478fe0aaff48c6dcbb586e2f82ea3a5499250985 Mon Sep 17 00:00:00 2001 From: Jared Haines Date: Fri, 12 Oct 2018 09:17:17 -0700 Subject: [PATCH 008/178] test: fix order of values in test assertions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Have actual first, expected second. PR-URL: https://github.com/nodejs/node/pull/23450 Reviewed-By: Gireesh Punathil Reviewed-By: Tobias Nießen Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-server.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/parallel/test-http-server.js b/test/parallel/test-http-server.js index 567f2b3b31b83b..d46e25bdf6c558 100644 --- a/test/parallel/test-http-server.js +++ b/test/parallel/test-http-server.js @@ -37,23 +37,23 @@ const server = http.createServer(function(req, res) { req.id = request_number++; if (req.id === 0) { - assert.strictEqual('GET', req.method); - assert.strictEqual('/hello', url.parse(req.url).pathname); - assert.strictEqual('world', qs.parse(url.parse(req.url).query).hello); - assert.strictEqual('b==ar', qs.parse(url.parse(req.url).query).foo); + assert.strictEqual(req.method, 'GET'); + assert.strictEqual(url.parse(req.url).pathname, '/hello'); + assert.strictEqual(qs.parse(url.parse(req.url).query).hello, 'world'); + assert.strictEqual(qs.parse(url.parse(req.url).query).foo, 'b==ar'); } if (req.id === 1) { - assert.strictEqual('POST', req.method); - assert.strictEqual('/quit', url.parse(req.url).pathname); + assert.strictEqual(req.method, 'POST'); + assert.strictEqual(url.parse(req.url).pathname, '/quit'); } if (req.id === 2) { - assert.strictEqual('foo', req.headers['x-x']); + assert.strictEqual(req.headers['x-x'], 'foo'); } if (req.id === 3) { - assert.strictEqual('bar', req.headers['x-x']); + assert.strictEqual(req.headers['x-x'], 'bar'); this.close(); } @@ -112,8 +112,8 @@ server.on('listening', function() { }); process.on('exit', function() { - assert.strictEqual(4, request_number); - assert.strictEqual(4, requests_sent); + assert.strictEqual(request_number, 4); + assert.strictEqual(requests_sent, 4); const hello = new RegExp('/hello'); assert.ok(hello.test(server_response)); @@ -121,5 +121,5 @@ process.on('exit', function() { const quit = new RegExp('/quit'); assert.ok(quit.test(server_response)); - assert.strictEqual(true, client_got_eof); + assert.strictEqual(client_got_eof, true); }); From dee9d27923ecb4b9cc8aaa0e233d712d802c2d0c Mon Sep 17 00:00:00 2001 From: Danu Widatama Date: Fri, 12 Oct 2018 09:05:57 -0700 Subject: [PATCH 009/178] test: fix http local address test assertion Reverse the argument for assertion. The first argument should be the actual value and the second value should be the expected value. When there is an AssertionError, the expected and actual value will be labeled correctly. PR-URL: https://github.com/nodejs/node/pull/23451 Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-localaddress.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-http-localaddress.js b/test/parallel/test-http-localaddress.js index 8c5e57b118b597..6763fae1265ac3 100644 --- a/test/parallel/test-http-localaddress.js +++ b/test/parallel/test-http-localaddress.js @@ -30,7 +30,7 @@ const assert = require('assert'); const server = http.createServer(function(req, res) { console.log(`Connect from: ${req.connection.remoteAddress}`); - assert.strictEqual('127.0.0.2', req.connection.remoteAddress); + assert.strictEqual(req.connection.remoteAddress, '127.0.0.2'); req.on('end', function() { res.writeHead(200, { 'Content-Type': 'text/plain' }); From c301518a456f36382a73ed9e36816061107b2444 Mon Sep 17 00:00:00 2001 From: mmisiarek Date: Fri, 12 Oct 2018 09:23:33 -0700 Subject: [PATCH 010/178] repl: remove unused variable from try catch Catch statement defines err variable that is never used, so it is safe to remove that. PR-URL: https://github.com/nodejs/node/pull/23452 Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- lib/internal/repl/await.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/repl/await.js b/lib/internal/repl/await.js index 5a26e835574603..e0b79805df049b 100644 --- a/lib/internal/repl/await.js +++ b/lib/internal/repl/await.js @@ -69,7 +69,7 @@ function processTopLevelAwait(src) { let root; try { root = acorn.parse(wrapped, { ecmaVersion: 10 }); - } catch (err) { + } catch { return null; } const body = root.body[0].expression.callee.body; From 0005846f033ae9866a6bc5dbbe7f73c6aeb67185 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Fri, 12 Oct 2018 09:33:37 -0700 Subject: [PATCH 011/178] test: replace assert.throws w/ common.expectsError Converts RangeError assertions to use common.expectsError and includes an assertion for the error code. PR-URL: https://github.com/nodejs/node/pull/23454 Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-buffer-alloc.js | 76 +++++++++++++----------------- 1 file changed, 34 insertions(+), 42 deletions(-) diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index 5088e3c06ff471..61bb3a8c57767b 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -74,41 +74,22 @@ new Buffer('', 'latin1'); new Buffer('', 'binary'); Buffer(0); +const outOfBoundsError = { + code: 'ERR_BUFFER_OUT_OF_BOUNDS', + type: RangeError +}; + // try to write a 0-length string beyond the end of b -common.expectsError( - () => b.write('', 2048), - { - code: 'ERR_BUFFER_OUT_OF_BOUNDS', - type: RangeError - } -); +common.expectsError(() => b.write('', 2048), outOfBoundsError); // throw when writing to negative offset -common.expectsError( - () => b.write('a', -1), - { - code: 'ERR_BUFFER_OUT_OF_BOUNDS', - type: RangeError - } -); +common.expectsError(() => b.write('a', -1), outOfBoundsError); // throw when writing past bounds from the pool -common.expectsError( - () => b.write('a', 2048), - { - code: 'ERR_BUFFER_OUT_OF_BOUNDS', - type: RangeError - } -); +common.expectsError(() => b.write('a', 2048), outOfBoundsError); // throw when writing to negative offset -common.expectsError( - () => b.write('a', -1), - { - code: 'ERR_BUFFER_OUT_OF_BOUNDS', - type: RangeError - } -); +common.expectsError(() => b.write('a', -1), outOfBoundsError); // try to copy 0 bytes worth of data into an empty buffer b.copy(Buffer.alloc(0), 0, 0, 0); @@ -804,20 +785,34 @@ assert.strictEqual(Buffer.from('13.37').length, 5); Buffer.from(Buffer.allocUnsafe(0), 0, 0); // issue GH-5587 -assert.throws(() => Buffer.alloc(8).writeFloatLE(0, 5), RangeError); -assert.throws(() => Buffer.alloc(16).writeDoubleLE(0, 9), RangeError); +common.expectsError( + () => Buffer.alloc(8).writeFloatLE(0, 5), + outOfBoundsError +); +common.expectsError( + () => Buffer.alloc(16).writeDoubleLE(0, 9), + outOfBoundsError +); // attempt to overflow buffers, similar to previous bug in array buffers -assert.throws(() => Buffer.allocUnsafe(8).writeFloatLE(0.0, 0xffffffff), - RangeError); -assert.throws(() => Buffer.allocUnsafe(8).writeFloatLE(0.0, 0xffffffff), - RangeError); - +common.expectsError( + () => Buffer.allocUnsafe(8).writeFloatLE(0.0, 0xffffffff), + outOfBoundsError +); +common.expectsError( + () => Buffer.allocUnsafe(8).writeFloatLE(0.0, 0xffffffff), + outOfBoundsError +); // ensure negative values can't get past offset -assert.throws(() => Buffer.allocUnsafe(8).writeFloatLE(0.0, -1), RangeError); -assert.throws(() => Buffer.allocUnsafe(8).writeFloatLE(0.0, -1), RangeError); - +common.expectsError( + () => Buffer.allocUnsafe(8).writeFloatLE(0.0, -1), + outOfBoundsError +); +common.expectsError( + () => Buffer.allocUnsafe(8).writeFloatLE(0.0, -1), + outOfBoundsError +); // test for common write(U)IntLE/BE { @@ -1010,10 +1005,7 @@ common.expectsError(() => { const a = Buffer.alloc(1); const b = Buffer.alloc(1); a.copy(b, 0, 0x100000000, 0x100000001); -}, { - code: 'ERR_OUT_OF_RANGE', - type: RangeError -}); +}, outOfBoundsError); // Unpooled buffer (replaces SlowBuffer) { From 84b21eb377531ecdc78d4f84309edc13e5beb595 Mon Sep 17 00:00:00 2001 From: Ivan Sieder Date: Fri, 12 Oct 2018 09:38:18 -0700 Subject: [PATCH 012/178] test: strictEqual correct order for http-information-processing test PR-URL: https://github.com/nodejs/node/pull/23456 Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-information-processing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-http-information-processing.js b/test/parallel/test-http-information-processing.js index 43d1bdafdf4dd1..94554c2109d433 100644 --- a/test/parallel/test-http-information-processing.js +++ b/test/parallel/test-http-information-processing.js @@ -38,7 +38,7 @@ server.listen(0, function() { req.on('response', function(res) { // Check that all 102 Processing received before full response received. assert.strictEqual(countdown.remaining, 1); - assert.strictEqual(200, res.statusCode, + assert.strictEqual(res.statusCode, 200, `Final status code was ${res.statusCode}, not 200.`); res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); From a2392704b2987073a2c918f349e91e7c5ecaed7c Mon Sep 17 00:00:00 2001 From: andy addington Date: Fri, 12 Oct 2018 09:30:12 -0700 Subject: [PATCH 013/178] test: fix assert.strictEqual argument order PR-URL: https://github.com/nodejs/node/pull/23457 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-vm-new-script-new-context.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-vm-new-script-new-context.js b/test/parallel/test-vm-new-script-new-context.js index b0ef06756bee6d..482b4130d615d9 100644 --- a/test/parallel/test-vm-new-script-new-context.js +++ b/test/parallel/test-vm-new-script-new-context.js @@ -30,8 +30,8 @@ const Script = require('vm').Script; const script = new Script('\'passed\';'); const result1 = script.runInNewContext(); const result2 = script.runInNewContext(); - assert.strictEqual('passed', result1); - assert.strictEqual('passed', result2); + assert.strictEqual(result1, 'passed'); + assert.strictEqual(result2, 'passed'); } { @@ -52,7 +52,7 @@ const Script = require('vm').Script; global.hello = 5; const script = new Script('hello = 2'); script.runInNewContext(); - assert.strictEqual(5, global.hello); + assert.strictEqual(global.hello, 5); // Cleanup delete global.hello; @@ -68,9 +68,9 @@ const Script = require('vm').Script; /* eslint-disable no-unused-vars */ const baz = script.runInNewContext(global.obj); /* eslint-enable no-unused-vars */ - assert.strictEqual(1, global.obj.foo); - assert.strictEqual(2, global.obj.bar); - assert.strictEqual(2, global.foo); + assert.strictEqual(global.obj.foo, 1); + assert.strictEqual(global.obj.bar, 2); + assert.strictEqual(global.foo, 2); // cleanup delete global.code; From 68b46372a7ea0d7f2364531de167fa2f9f7ca865 Mon Sep 17 00:00:00 2001 From: Matt Holmes Date: Fri, 12 Oct 2018 09:36:21 -0700 Subject: [PATCH 014/178] lib: remove unused 'e' from catch PR-URL: https://github.com/nodejs/node/pull/23458 Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Hitesh Kanwathirtha Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- lib/querystring.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/querystring.js b/lib/querystring.js index ba676d8c6d7fab..3a4d09bf78e848 100644 --- a/lib/querystring.js +++ b/lib/querystring.js @@ -109,7 +109,7 @@ function unescapeBuffer(s, decodeSpaces) { function qsUnescape(s, decodeSpaces) { try { return decodeURIComponent(s); - } catch (e) { + } catch { return QueryString.unescapeBuffer(s, decodeSpaces).toString(); } } From 767d4daeedfa1f336a9c652e13c154a55dcf92cd Mon Sep 17 00:00:00 2001 From: epeden Date: Fri, 12 Oct 2018 09:35:03 -0700 Subject: [PATCH 015/178] test: swap assert.strictEqual args to actual, expected PR-URL: https://github.com/nodejs/node/pull/23459 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-cluster-eaccess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-cluster-eaccess.js b/test/parallel/test-cluster-eaccess.js index c6a2a8ac25e251..346eb26110c12f 100644 --- a/test/parallel/test-cluster-eaccess.js +++ b/test/parallel/test-cluster-eaccess.js @@ -47,7 +47,7 @@ if (cluster.isMaster && process.argv.length !== 3) { worker.on('message', common.mustCall(function(err) { // disconnect first, so that we will not leave zombies worker.disconnect(); - assert.strictEqual('EADDRINUSE', err.code); + assert.strictEqual(err.code, 'EADDRINUSE'); })); } else if (process.argv.length !== 3) { // cluster.worker From 657ee7b0251234c11ddeb629936612f70bfbdb02 Mon Sep 17 00:00:00 2001 From: mdaum Date: Fri, 12 Oct 2018 09:32:00 -0700 Subject: [PATCH 016/178] test: fix incorrect ordering of args in assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/23461 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-upgrade-server2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-http-upgrade-server2.js b/test/parallel/test-http-upgrade-server2.js index 209ea1f4bc7c6e..a6c142e60ac9aa 100644 --- a/test/parallel/test-http-upgrade-server2.js +++ b/test/parallel/test-http-upgrade-server2.js @@ -36,7 +36,7 @@ server.on('upgrade', function(req, socket, upgradeHead) { }); process.on('uncaughtException', common.mustCall(function(e) { - assert.strictEqual('upgrade error', e.message); + assert.strictEqual(e.message, 'upgrade error'); process.exit(0); })); From 1c73990a7d7eba5296cded6bd4bd989a0bd636d3 Mon Sep 17 00:00:00 2001 From: Richard Markins Date: Fri, 12 Oct 2018 09:51:11 -0700 Subject: [PATCH 017/178] test: correct assert test PR-URL: https://github.com/nodejs/node/pull/23463 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-console-instance.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-console-instance.js b/test/parallel/test-console-instance.js index 5a2e10b419cb03..0b69212948dd2c 100644 --- a/test/parallel/test-console-instance.js +++ b/test/parallel/test-console-instance.js @@ -72,7 +72,7 @@ c.log('test'); c.error('test'); out.write = common.mustCall((d) => { - assert.strictEqual('{ foo: 1 }\n', d); + assert.strictEqual(d, '{ foo: 1 }\n'); }); c.dir({ foo: 1 }); From 8691d8f5426517d3a17ec1a9532dc43d68ae38d4 Mon Sep 17 00:00:00 2001 From: Denny Scott Date: Fri, 12 Oct 2018 09:33:37 -0700 Subject: [PATCH 018/178] test: remove unused e variable in catch statement PR-URL: https://github.com/nodejs/node/pull/23465 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-domain-with-abort-on-uncaught-exception.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-domain-with-abort-on-uncaught-exception.js b/test/parallel/test-domain-with-abort-on-uncaught-exception.js index 03ab39dbfc05d2..0707f123b8c3a1 100644 --- a/test/parallel/test-domain-with-abort-on-uncaught-exception.js +++ b/test/parallel/test-domain-with-abort-on-uncaught-exception.js @@ -50,7 +50,7 @@ if (process.argv[2] === 'child') { if (process.argv.includes('useTryCatch')) { try { throw new Error(domainErrHandlerExMessage); - } catch (e) { + } catch { } } else { throw new Error(domainErrHandlerExMessage); From c23d2505b3530e35a7cf2284775c74ac3056a100 Mon Sep 17 00:00:00 2001 From: Amie Date: Fri, 12 Oct 2018 09:33:32 -0700 Subject: [PATCH 019/178] test: fix incorrect expectation order test-http-expect-handling.js has an instance of the test value and the expected value being reversed. Refs: https://nodejs.org/api/assert.html PR-URL: https://github.com/nodejs/node/pull/23466 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-expect-handling.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-http-expect-handling.js b/test/parallel/test-http-expect-handling.js index fd1f244979459f..11d2b6ecf4e614 100644 --- a/test/parallel/test-http-expect-handling.js +++ b/test/parallel/test-http-expect-handling.js @@ -51,5 +51,5 @@ function nextTest() { process.on('exit', function() { - assert.strictEqual(2, testsComplete); + assert.strictEqual(testsComplete, 2); }); From ffa2710cea9fe01fa44c1b055d66725ff3416225 Mon Sep 17 00:00:00 2001 From: Maggie Nolan Date: Fri, 12 Oct 2018 09:54:24 -0700 Subject: [PATCH 020/178] test: correct order for assert.strictEqual for inspector-helper test PR-URL: https://github.com/nodejs/node/pull/23468 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/common/inspector-helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/common/inspector-helper.js b/test/common/inspector-helper.js index ae8fd9732d34f5..7cac2b29f9c90c 100644 --- a/test/common/inspector-helper.js +++ b/test/common/inspector-helper.js @@ -63,7 +63,7 @@ function parseWSFrame(buffer) { if (buffer[0] === 0x88 && buffer[1] === 0x00) { return { length: 2, message, closed: true }; } - assert.strictEqual(0x81, buffer[0]); + assert.strictEqual(buffer[0], 0x81); let dataLen = 0x7F & buffer[1]; let bodyOffset = 2; if (buffer.length < bodyOffset + dataLen) @@ -251,7 +251,7 @@ class InspectorSession { assert.strictEqual(scriptPath.toString(), expectedScriptPath.toString(), `${scriptPath} !== ${expectedScriptPath}`); - assert.strictEqual(line, location.lineNumber); + assert.strictEqual(location.lineNumber, line); return true; } } From 398978509257faaca9caba6cc11250ba4a8c29d1 Mon Sep 17 00:00:00 2001 From: "S. Everett Abbott" Date: Fri, 12 Oct 2018 09:56:49 -0700 Subject: [PATCH 021/178] test: update test-cluster-worker-events to use arrow functions PR-URL: https://github.com/nodejs/node/pull/23469 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell --- test/parallel/test-cluster-worker-events.js | 32 ++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-cluster-worker-events.js b/test/parallel/test-cluster-worker-events.js index 91e716285dc2b8..3b156addedc63f 100644 --- a/test/parallel/test-cluster-worker-events.js +++ b/test/parallel/test-cluster-worker-events.js @@ -30,7 +30,7 @@ if (cluster.isMaster) { const worker = cluster.fork(); - worker.on('exit', function(code) { + worker.on('exit', (code) => { assert.strictEqual(code, OK); process.exit(0); }); @@ -49,31 +49,31 @@ assert(cluster.isWorker); let sawProcess; let sawWorker; -process.on('message', function(m) { - assert(!sawProcess); - sawProcess = true; - check(m); -}); - -cluster.worker.on('message', function(m) { - assert(!sawWorker); - sawWorker = true; - check(m); -}); - const messages = []; -function check(m) { +const check = (m) => { messages.push(m); if (messages.length < 2) return; assert.deepStrictEqual(messages[0], messages[1]); - cluster.worker.once('error', function(e) { + cluster.worker.once('error', (e) => { assert.strictEqual(e, 'HI'); process.exit(OK); }); process.emit('error', 'HI'); -} +}; + +process.on('message', (m) => { + assert(!sawProcess); + sawProcess = true; + check(m); +}); + +cluster.worker.on('message', (m) => { + assert(!sawWorker); + sawWorker = true; + check(m); +}); From 882e0225d5855a17dafa10820bf1a0b833df8dac Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Sat, 13 Oct 2018 10:20:02 -0400 Subject: [PATCH 022/178] test: mark `test-http2-session-timeout` as flake on ARM PR-URL: https://github.com/nodejs/node/pull/23639 Refs: https://github.com/nodejs/node/issues/20628 Reviewed-By: Rich Trott --- test/sequential/sequential.status | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/sequential/sequential.status b/test/sequential/sequential.status index 7ba0bb09612b60..89f639777b5ca9 100644 --- a/test/sequential/sequential.status +++ b/test/sequential/sequential.status @@ -21,3 +21,7 @@ test-http2-large-file: PASS, FLAKY [$system==freebsd] [$system==aix] + +[$arch==arm] +# https://github.com/nodejs/node/issues/20628 +test-http2-session-timeout: PASS,FLAKY From 97d60f98ded602e24b90777a9160ec9cbd851eae Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Sat, 13 Oct 2018 18:37:53 +0000 Subject: [PATCH 023/178] test: don't write to stream if test passed successfully On success case, timeout still tries to fire and write to stream. Only write to stream if we haven't finished --- test/sequential/test-fs-watch-system-limit.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index 6643e115027d27..51e4b1fd92c0b4 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -37,13 +37,15 @@ function spawnProcesses() { spawnProcesses(); setTimeout(() => { - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); + if (!finished) { + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); - finished = true; - processes.forEach((proc) => proc.kill()); + finished = true; + processes.forEach((proc) => proc.kill()); + } }, timeout); let accumulated = ''; From dbfb5d40c636a5d0f2c33b879b41bef939354eac Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Fri, 12 Oct 2018 17:40:15 +0000 Subject: [PATCH 024/178] test: fix timeout when running sequential/test-fs-watch-system-limit.js During run of make test on Linux, it is possible for this test to spawn 200 processes and hang since there is a check to max out at 200 child processes. --- test/sequential/test-fs-watch-system-limit.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index e896cbf83b965a..6643e115027d27 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -11,6 +11,7 @@ if (!common.enoughTestCpu) const processes = []; const gatherStderr = new stream.PassThrough(); +const timeout = 30000; gatherStderr.setEncoding('utf8'); gatherStderr.setMaxListeners(Infinity); @@ -27,7 +28,6 @@ function spawnProcesses() { proc.stderr.pipe(gatherStderr); processes.push(proc); } - setTimeout(() => { if (!finished && processes.length < 200) spawnProcesses(); @@ -36,6 +36,16 @@ function spawnProcesses() { spawnProcesses(); +setTimeout(() => { + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); + + finished = true; + processes.forEach((proc) => proc.kill()); +}, timeout); + let accumulated = ''; gatherStderr.on('data', common.mustCallAtLeast((chunk) => { accumulated += chunk; @@ -43,7 +53,8 @@ gatherStderr.on('data', common.mustCallAtLeast((chunk) => { assert( accumulated.includes('ENOSPC: System limit for number ' + 'of file watchers reached') || - accumulated.includes('EMFILE: '), + accumulated.includes('EMFILE: ') || + accumulated.includes('Timeout'), accumulated); console.log(`done after ${processes.length} processes, cleaning up`); finished = true; From 1ffcd0c4e78e8563b7579fc80fbbf67a9eff9b11 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Sat, 13 Oct 2018 18:37:53 +0000 Subject: [PATCH 025/178] test: don't write to stream if test passed successfully On success case, timeout still tries to fire and write to stream. Only write to stream if we haven't finished --- test/sequential/test-fs-watch-system-limit.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index 6643e115027d27..51e4b1fd92c0b4 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -37,13 +37,15 @@ function spawnProcesses() { spawnProcesses(); setTimeout(() => { - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); + if (!finished) { + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); - finished = true; - processes.forEach((proc) => proc.kill()); + finished = true; + processes.forEach((proc) => proc.kill()); + } }, timeout); let accumulated = ''; From 401dac324c5e7b24d3e6663d29589b11562c5b12 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 13 Oct 2018 13:07:21 -0700 Subject: [PATCH 026/178] test: fix errors in test-buffer-alloc.js This fixes test code that was mistaken landed by me this morning. (Code & Learn rush gone bad.) Sorry. Please fast track. PR-URL: https://github.com/nodejs/node/pull/23645 Reviewed-By: Anna Henningsen Reviewed-By: Franziska Hinkelmann --- test/parallel/test-buffer-alloc.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index 61bb3a8c57767b..6039a17eedb5fd 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -79,6 +79,11 @@ const outOfBoundsError = { type: RangeError }; +const outOfRangeError = { + code: 'ERR_OUT_OF_RANGE', + type: RangeError +}; + // try to write a 0-length string beyond the end of b common.expectsError(() => b.write('', 2048), outOfBoundsError); @@ -787,31 +792,31 @@ Buffer.from(Buffer.allocUnsafe(0), 0, 0); // issue GH-5587 common.expectsError( () => Buffer.alloc(8).writeFloatLE(0, 5), - outOfBoundsError + outOfRangeError ); common.expectsError( () => Buffer.alloc(16).writeDoubleLE(0, 9), - outOfBoundsError + outOfRangeError ); // attempt to overflow buffers, similar to previous bug in array buffers common.expectsError( () => Buffer.allocUnsafe(8).writeFloatLE(0.0, 0xffffffff), - outOfBoundsError + outOfRangeError ); common.expectsError( () => Buffer.allocUnsafe(8).writeFloatLE(0.0, 0xffffffff), - outOfBoundsError + outOfRangeError ); // ensure negative values can't get past offset common.expectsError( () => Buffer.allocUnsafe(8).writeFloatLE(0.0, -1), - outOfBoundsError + outOfRangeError ); common.expectsError( () => Buffer.allocUnsafe(8).writeFloatLE(0.0, -1), - outOfBoundsError + outOfRangeError ); // test for common write(U)IntLE/BE @@ -1005,7 +1010,7 @@ common.expectsError(() => { const a = Buffer.alloc(1); const b = Buffer.alloc(1); a.copy(b, 0, 0x100000000, 0x100000001); -}, outOfBoundsError); +}, outOfRangeError); // Unpooled buffer (replaces SlowBuffer) { From 9d1c9d7e9b9ae1ab201206fc85b7f553fb2bd6bb Mon Sep 17 00:00:00 2001 From: Andres Monge Date: Fri, 12 Oct 2018 09:41:57 -0700 Subject: [PATCH 027/178] lib: migrate from process.binding to internalBinding We are migrating towards using internalBinding(\'options\').getOptions() instead of process.binding(\'config\') to access the value of the --experimental-vm-modules command line option. PR-URL: https://github.com/nodejs/node/pull/23586 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- lib/vm.js | 2 +- .../test-inspector-has-inspector-false.js | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 test/sequential/test-inspector-has-inspector-false.js diff --git a/lib/vm.js b/lib/vm.js index 869b4aa65485cb..1bb948fa550531 100644 --- a/lib/vm.js +++ b/lib/vm.js @@ -415,7 +415,7 @@ module.exports = { compileFunction, }; -if (process.binding('config').experimentalVMModules) { +if (internalBinding('options').getOptions('--experimental-vm-modules')) { const { SourceTextModule } = require('internal/vm/source_text_module'); module.exports.SourceTextModule = SourceTextModule; } diff --git a/test/sequential/test-inspector-has-inspector-false.js b/test/sequential/test-inspector-has-inspector-false.js new file mode 100644 index 00000000000000..cdb7ca9e19e79b --- /dev/null +++ b/test/sequential/test-inspector-has-inspector-false.js @@ -0,0 +1,15 @@ +// Flags: --expose-internals +'use strict'; + +const common = require('../common'); + +// This is to ensure that the sendInspectorCommand function calls the error +// function if its called with the v8_enable_inspector is disabled + +process.config.variables.v8_enable_inspector = 0; +const inspector = require('internal/util/inspector'); + +inspector.sendInspectorCommand( + common.mustNotCall('Inspector callback should not be called'), + common.mustCall(1), +); From 0f8eaa4712c575951a703f175daaf0a4e66198a0 Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Sun, 7 Oct 2018 19:07:57 -0400 Subject: [PATCH 028/178] doc,meta: add references to outside C++ guides with explicit priorities PR-URL: https://github.com/nodejs/node/pull/23317 Reviewed-By: Anna Henningsen --- CPP_STYLE_GUIDE.md | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/CPP_STYLE_GUIDE.md b/CPP_STYLE_GUIDE.md index ae0135b5c0bdff..c717ca31724e5f 100644 --- a/CPP_STYLE_GUIDE.md +++ b/CPP_STYLE_GUIDE.md @@ -2,6 +2,7 @@ ## Table of Contents +* [Guides and References](#guides-and-references) * [Formatting](#formatting) * [Left-leaning (C++ style) asterisks for pointer declarations](#left-leaning-c-style-asterisks-for-pointer-declarations) * [C++ style comments](#c-style-comments) @@ -25,14 +26,30 @@ * [Avoid throwing JavaScript errors in C++ methods](#avoid-throwing-javascript-errors-in-c) * [Avoid throwing JavaScript errors in nested C++ methods](#avoid-throwing-javascript-errors-in-nested-c-methods) -Unfortunately, the C++ linter (based on -[Google’s `cpplint`](https://github.com/google/styleguide)), which can be run -explicitly via `make lint-cpp`, does not currently catch a lot of rules that are -specific to the Node.js C++ code base. This document explains the most common of -these rules: + +## Guides and References + +The Node.js C++ codebase strives to be consistent in its use of language +features and idioms, as well as have some specific guidelines for the use of +runtime features. + +Coding guidelines are based on the following guides (highest priority first): +1. This document +2. The [Google C++ Style Guide][] +3. The ISO [C++ Core Guidelines][] + +In general code should follow the C++ Core Guidelines, unless overridden by the +Google C++ Style Guide or this document. At the moment these guidelines are +checked manually by reviewers, with the goal to validate this with automatic +tools. ## Formatting +Unfortunately, the C++ linter (based on [Google’s `cpplint`][]), which can be +run explicitly via `make lint-cpp`, does not currently catch a lot of rules that +are specific to the Node.js C++ code base. This document explains the most +common of these rules: + ### Left-leaning (C++ style) asterisks for pointer declarations `char* buffer;` instead of `char *buffer;` @@ -304,4 +321,8 @@ not inside of nested calls. Using C++ `throw` is not allowed. + +[C++ Core Guidelines]: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines +[Google C++ Style Guide]: https://google.github.io/styleguide/cppguide.html +[Google’s `cpplint`]: https://github.com/google/styleguide [errors]: https://github.com/nodejs/node/blob/master/doc/guides/using-internal-errors.md From 39ae00042902969c35ef05ff0195e9112055a970 Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Sat, 6 Oct 2018 10:36:23 -0400 Subject: [PATCH 029/178] doc,meta: refresh wording in colab guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23292 Refs: https://github.com/nodejs/node/pull/23249 Reviewed-By: Michaël Zasso Reviewed-By: Vse Mozhet Byt Reviewed-By: Anna Henningsen Reviewed-By: Trivikram Kamat Reviewed-By: Rich Trott --- COLLABORATOR_GUIDE.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/COLLABORATOR_GUIDE.md b/COLLABORATOR_GUIDE.md index e46d0e08b0ccf9..8d260be70f2d18 100644 --- a/COLLABORATOR_GUIDE.md +++ b/COLLABORATOR_GUIDE.md @@ -503,10 +503,11 @@ The TSC should serve as the final arbiter where required. 1. Never use GitHub's green ["Merge Pull Request"][] button. Reasons for not using the web interface button: - * The merge method will add an unnecessary merge commit. - * The squash & merge method can add metadata (the PR #) to the commit title. - * If more than one author has contributed to the PR, keep the most recent - author when squashing. + * The "Create a merge commit" method will add an unnecessary merge commit. + * The "Squash and merge" method will add metadata (the PR #) to the commit + title. If more than one author has contributed to the PR, squashing will + only keep the most recent author. + * The "Rebase and merge" method has no way of adding metadata to the commit. 1. Make sure the CI is done and the result is green. If the CI is not green, check for flaky tests and infrastructure failures. Please check if those were already reported in the appropriate repository ([node][flaky tests] and @@ -517,13 +518,12 @@ The TSC should serve as the final arbiter where required. present. 1. Review the commit message to ensure that it adheres to the guidelines outlined in the [contributing][] guide. -1. Add all necessary [metadata](#metadata) to commit messages before landing. - See the commit log for examples such as [this - one](https://github.com/nodejs/node/commit/b636ba8186) if unsure exactly how - to format your commit messages. +1. Add all necessary [metadata](#metadata) to commit messages before landing. If + you are unsure exactly how to format the commit messages, use the commit log + as a reference. See [this commit][commit-example] as an example. -Check PRs from new contributors to make sure the person's name and email address -are correct before merging. +For PRs from first time contributors, be [welcoming](#welcoming-first-time-contributors). +Also, verify that their git settings are to their liking. All commits should be self-contained, meaning every commit should pass all tests. This makes it much easier when bisecting to find a breaking change. @@ -901,6 +901,7 @@ If you cannot find who to cc for a file, `git shortlog -n -s ` may help. [`node-core-utils`]: https://github.com/nodejs/node-core-utils [backporting guide]: doc/guides/backporting-to-release-lines.md [contributing]: ./doc/guides/contributing/pull-requests.md#commit-message-guidelines +[commit-example]: https://github.com/nodejs/node/commit/b636ba8186 [flaky tests]: https://github.com/nodejs/node/issues?q=is%3Aopen+is%3Aissue+label%3A%22CI+%2F+flaky+test%22y [git-node]: https://github.com/nodejs/node-core-utils/blob/master/docs/git-node.md [git-node-metadata]: https://github.com/nodejs/node-core-utils/blob/master/docs/git-node.md#git-node-metadata From fc0da7f6b435c6980b8f84869df0f5e02b2761c1 Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Sat, 6 Oct 2018 10:39:18 -0400 Subject: [PATCH 030/178] doc,meta: assign PR semantics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23292 Refs: https://github.com/nodejs/node/pull/23249 Reviewed-By: Michaël Zasso Reviewed-By: Vse Mozhet Byt Reviewed-By: Anna Henningsen Reviewed-By: Trivikram Kamat Reviewed-By: Rich Trott --- COLLABORATOR_GUIDE.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/COLLABORATOR_GUIDE.md b/COLLABORATOR_GUIDE.md index 8d260be70f2d18..7dba23dc74e566 100644 --- a/COLLABORATOR_GUIDE.md +++ b/COLLABORATOR_GUIDE.md @@ -100,7 +100,8 @@ As soon as the PR is ready to land, please do so. Landing your own pull requests allows other Collaborators to focus on other pull requests. If your pull request is still awaiting the [minimum time to land](#waiting-for-approvals), add the `author ready` label so other Collaborators know it can land as soon as the time -ends. +ends. If instead you wish to land the PR yourself, indicate this intent by using +the "assign yourself" button, to self-assign the PR. ## Accepting Modifications @@ -501,6 +502,9 @@ The TSC should serve as the final arbiter where required. ## Landing Pull Requests +1. Avoid landing PRs that are assigned to someone else. Authors who wish to land + their own PRs will self-assign them, or delegate to someone else. If in + doubt, ask the assignee whether it is okay to land. 1. Never use GitHub's green ["Merge Pull Request"][] button. Reasons for not using the web interface button: * The "Create a merge commit" method will add an unnecessary merge commit. From b22903eacd727c0c0c163161d128aaffd94c946e Mon Sep 17 00:00:00 2001 From: James Traver Date: Fri, 12 Oct 2018 11:38:56 -0500 Subject: [PATCH 031/178] worker: remove delete MessagePort.prototype.hasRef Node Code+Learn: remove delete MessagePort.prototype.hasRef; PR-URL: https://github.com/nodejs/node/pull/23471 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Shelley Vohr --- lib/internal/worker.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/internal/worker.js b/lib/internal/worker.js index 41432f55e94d35..88580893cdc015 100644 --- a/lib/internal/worker.js +++ b/lib/internal/worker.js @@ -71,7 +71,6 @@ Object.setPrototypeOf(MessagePort.prototype, EventEmitter.prototype); // Finally, purge methods we don't want to be public. delete MessagePort.prototype.stop; delete MessagePort.prototype.drain; -delete MessagePort.prototype.hasRef; MessagePort.prototype.ref = MessagePortPrototype.ref; MessagePort.prototype.unref = MessagePortPrototype.unref; From cf7b5a8dc25a6e81da2e661e5d2ab3b2c60d9124 Mon Sep 17 00:00:00 2001 From: Emily Kolar Date: Fri, 12 Oct 2018 09:55:48 -0700 Subject: [PATCH 032/178] test: correctly order assertion arguments PR-URL: https://github.com/nodejs/node/pull/23473 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/sequential/test-inspector-debug-brk-flag.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sequential/test-inspector-debug-brk-flag.js b/test/sequential/test-inspector-debug-brk-flag.js index d488eea2626584..7fa85c269c9343 100644 --- a/test/sequential/test-inspector-debug-brk-flag.js +++ b/test/sequential/test-inspector-debug-brk-flag.js @@ -34,7 +34,7 @@ async function runTests() { await testBreakpointOnStart(session); await session.runToCompletion(); - assert.strictEqual(55, (await child.expectShutdown()).exitCode); + assert.strictEqual((await child.expectShutdown()).exitCode, 55); } runTests(); From a9e6e68c0b5ba15b8f6fb50ba1fae6f2dd37dc7a Mon Sep 17 00:00:00 2001 From: Yitong Date: Fri, 12 Oct 2018 10:03:05 -0700 Subject: [PATCH 033/178] test: swap actual and expected in assertions 'test/parallel/test-fs-write.js' contains assertions where the first argument provided is the expected value and the second value is the actual value. This is backward from the documentation for assertions like 'assert.strictEqual()' where the first value should be the actual value being tested and the second value is the expected value. PR-URL: https://github.com/nodejs/node/pull/23474 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Shelley Vohr --- test/parallel/test-fs-write.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/test/parallel/test-fs-write.js b/test/parallel/test-fs-write.js index a3c8814bc392ce..d6022e81067f14 100644 --- a/test/parallel/test-fs-write.js +++ b/test/parallel/test-fs-write.js @@ -41,41 +41,41 @@ common.allowGlobals(externalizeString, isOneByteString, x); { const expected = 'ümlaut eins'; // Must be a unique string. externalizeString(expected); - assert.strictEqual(true, isOneByteString(expected)); + assert.strictEqual(isOneByteString(expected), true); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'latin1'); fs.closeSync(fd); - assert.strictEqual(expected, fs.readFileSync(fn, 'latin1')); + assert.strictEqual(fs.readFileSync(fn, 'latin1'), expected); } { const expected = 'ümlaut zwei'; // Must be a unique string. externalizeString(expected); - assert.strictEqual(true, isOneByteString(expected)); + assert.strictEqual(isOneByteString(expected), true); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'utf8'); fs.closeSync(fd); - assert.strictEqual(expected, fs.readFileSync(fn, 'utf8')); + assert.strictEqual(fs.readFileSync(fn, 'utf8'), expected); } { const expected = '中文 1'; // Must be a unique string. externalizeString(expected); - assert.strictEqual(false, isOneByteString(expected)); + assert.strictEqual(isOneByteString(expected), false); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'ucs2'); fs.closeSync(fd); - assert.strictEqual(expected, fs.readFileSync(fn, 'ucs2')); + assert.strictEqual(fs.readFileSync(fn, 'ucs2'), expected); } { const expected = '中文 2'; // Must be a unique string. externalizeString(expected); - assert.strictEqual(false, isOneByteString(expected)); + assert.strictEqual(isOneByteString(expected), false); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'utf8'); fs.closeSync(fd); - assert.strictEqual(expected, fs.readFileSync(fn, 'utf8')); + assert.strictEqual(fs.readFileSync(fn, 'utf8'), expected); } /* eslint-enable no-undef */ @@ -84,16 +84,16 @@ fs.open(fn, 'w', 0o644, common.mustCall(function(err, fd) { const done = common.mustCall(function(err, written) { assert.ifError(err); - assert.strictEqual(Buffer.byteLength(expected), written); + assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); const found = fs.readFileSync(fn, 'utf8'); fs.unlinkSync(fn); - assert.strictEqual(expected, found); + assert.strictEqual(found, expected); }); const written = common.mustCall(function(err, written) { assert.ifError(err); - assert.strictEqual(0, written); + assert.strictEqual(written, 0); fs.write(fd, expected, 0, 'utf8', done); }); @@ -106,16 +106,16 @@ fs.open(fn2, args, 0o644, common.mustCall((err, fd) => { const done = common.mustCall((err, written) => { assert.ifError(err); - assert.strictEqual(Buffer.byteLength(expected), written); + assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); const found = fs.readFileSync(fn2, 'utf8'); fs.unlinkSync(fn2); - assert.strictEqual(expected, found); + assert.strictEqual(found, expected); }); const written = common.mustCall(function(err, written) { assert.ifError(err); - assert.strictEqual(0, written); + assert.strictEqual(written, 0); fs.write(fd, expected, 0, 'utf8', done); }); @@ -127,7 +127,7 @@ fs.open(fn3, 'w', 0o644, common.mustCall(function(err, fd) { const done = common.mustCall(function(err, written) { assert.ifError(err); - assert.strictEqual(Buffer.byteLength(expected), written); + assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); }); From e48d9aa873e7abec76cd27a8a50167f81574fccd Mon Sep 17 00:00:00 2001 From: Yitong Date: Fri, 12 Oct 2018 10:04:07 -0700 Subject: [PATCH 034/178] test: replace function with arrow function PR-URL: https://github.com/nodejs/node/pull/23474 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Shelley Vohr --- test/parallel/test-fs-write.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-fs-write.js b/test/parallel/test-fs-write.js index d6022e81067f14..d75974b58d33cf 100644 --- a/test/parallel/test-fs-write.js +++ b/test/parallel/test-fs-write.js @@ -79,10 +79,10 @@ common.allowGlobals(externalizeString, isOneByteString, x); } /* eslint-enable no-undef */ -fs.open(fn, 'w', 0o644, common.mustCall(function(err, fd) { +fs.open(fn, 'w', 0o644, common.mustCall((err, fd) => { assert.ifError(err); - const done = common.mustCall(function(err, written) { + const done = common.mustCall((err, written) => { assert.ifError(err); assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); @@ -91,7 +91,7 @@ fs.open(fn, 'w', 0o644, common.mustCall(function(err, fd) { assert.strictEqual(found, expected); }); - const written = common.mustCall(function(err, written) { + const written = common.mustCall((err, written) => { assert.ifError(err); assert.strictEqual(written, 0); fs.write(fd, expected, 0, 'utf8', done); @@ -113,7 +113,7 @@ fs.open(fn2, args, 0o644, common.mustCall((err, fd) => { assert.strictEqual(found, expected); }); - const written = common.mustCall(function(err, written) { + const written = common.mustCall((err, written) => { assert.ifError(err); assert.strictEqual(written, 0); fs.write(fd, expected, 0, 'utf8', done); @@ -122,10 +122,10 @@ fs.open(fn2, args, 0o644, common.mustCall((err, fd) => { fs.write(fd, '', 0, 'utf8', written); })); -fs.open(fn3, 'w', 0o644, common.mustCall(function(err, fd) { +fs.open(fn3, 'w', 0o644, common.mustCall((err, fd) => { assert.ifError(err); - const done = common.mustCall(function(err, written) { + const done = common.mustCall((err, written) => { assert.ifError(err); assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); From 7f74515cd1622dcfbcc57327e613fa78b0be07f2 Mon Sep 17 00:00:00 2001 From: Tim Cheung Date: Fri, 12 Oct 2018 09:43:06 -0700 Subject: [PATCH 035/178] test: flip assertion arguments for make-callback/test.js Assertion arguments should have the first value be the actual value, while the second value be the expected value. PR-URL: https://github.com/nodejs/node/pull/23470 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/addons/make-callback/test.js | 34 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/addons/make-callback/test.js b/test/addons/make-callback/test.js index efea43df3c9f9e..c5a71b5ab7a3e0 100644 --- a/test/addons/make-callback/test.js +++ b/test/addons/make-callback/test.js @@ -6,39 +6,39 @@ const vm = require('vm'); const binding = require(`./build/${common.buildType}/binding`); const makeCallback = binding.makeCallback; -assert.strictEqual(42, makeCallback(process, common.mustCall(function() { - assert.strictEqual(0, arguments.length); - assert.strictEqual(this, process); +assert.strictEqual(makeCallback(process, common.mustCall(function() { + assert.strictEqual(arguments.length, 0); + assert.strictEqual(process, this); return 42; -}))); +})), 42); -assert.strictEqual(42, makeCallback(process, common.mustCall(function(x) { - assert.strictEqual(1, arguments.length); - assert.strictEqual(this, process); +assert.strictEqual(makeCallback(process, common.mustCall(function(x) { + assert.strictEqual(arguments.length, 1); + assert.strictEqual(process, this); assert.strictEqual(x, 1337); return 42; -}), 1337)); +}), 1337), 42); const recv = { one: common.mustCall(function() { - assert.strictEqual(0, arguments.length); - assert.strictEqual(this, recv); + assert.strictEqual(arguments.length, 0); + assert.strictEqual(recv, this); return 42; }), two: common.mustCall(function(x) { - assert.strictEqual(1, arguments.length); - assert.strictEqual(this, recv); + assert.strictEqual(arguments.length, 1); + assert.strictEqual(recv, this); assert.strictEqual(x, 1337); return 42; }), }; -assert.strictEqual(42, makeCallback(recv, 'one')); -assert.strictEqual(42, makeCallback(recv, 'two', 1337)); +assert.strictEqual(makeCallback(recv, 'one'), 42); +assert.strictEqual(makeCallback(recv, 'two', 1337), 42); // Check that callbacks on a receiver from a different context works. const foreignObject = vm.runInNewContext('({ fortytwo() { return 42; } })'); -assert.strictEqual(42, makeCallback(foreignObject, 'fortytwo')); +assert.strictEqual(makeCallback(foreignObject, 'fortytwo'), 42); // Check that the callback is made in the context of the receiver. const target = vm.runInNewContext(` @@ -48,7 +48,7 @@ const target = vm.runInNewContext(` return Object; }) `); -assert.notStrictEqual(Object, makeCallback(process, target, Object)); +assert.notStrictEqual(makeCallback(process, target, Object), Object); // Runs in inner context. const forward = vm.runInNewContext(` @@ -62,4 +62,4 @@ function endpoint($Object) { throw new Error('bad'); return Object; } -assert.strictEqual(Object, makeCallback(process, forward, endpoint)); +assert.strictEqual(makeCallback(process, forward, endpoint), Object); From f569ecf7b387df33e54683eb5bef690a16b045ac Mon Sep 17 00:00:00 2001 From: Lian Li Date: Fri, 12 Oct 2018 09:47:06 -0700 Subject: [PATCH 036/178] readline: assert without the use of event listener PR-URL: https://github.com/nodejs/node/pull/23472 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Shelley Vohr Reviewed-By: Trivikram Kamat --- .../parallel/test-readline-emit-keypress-events.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/parallel/test-readline-emit-keypress-events.js b/test/parallel/test-readline-emit-keypress-events.js index ddadf6d223feaf..3b9aece4654ac1 100644 --- a/test/parallel/test-readline-emit-keypress-events.js +++ b/test/parallel/test-readline-emit-keypress-events.js @@ -20,11 +20,9 @@ stream.on('keypress', (s, k) => { stream.write('foo'); -process.on('exit', () => { - assert.deepStrictEqual(sequence, ['f', 'o', 'o']); - assert.deepStrictEqual(keys, [ - { sequence: 'f', name: 'f', ctrl: false, meta: false, shift: false }, - { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false }, - { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false } - ]); -}); +assert.deepStrictEqual(sequence, ['f', 'o', 'o']); +assert.deepStrictEqual(keys, [ + { sequence: 'f', name: 'f', ctrl: false, meta: false, shift: false }, + { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false }, + { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false } +]); From ede79c4cb8c9ad885a3eb6794683049057e23896 Mon Sep 17 00:00:00 2001 From: Dylson Valente Neto Date: Fri, 12 Oct 2018 11:15:37 -0700 Subject: [PATCH 037/178] test: swap the order arguments are passed to assert Documentation for assertions rule actual values should be passed first followed by the expected value. This commit update the assertions the changed file contains to comply to that rule. Changes also label the assertions. PR-URL: https://github.com/nodejs/node/pull/23580 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Anna Henningsen Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Gireesh Punathil --- test/pummel/test-keep-alive.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/test/pummel/test-keep-alive.js b/test/pummel/test-keep-alive.js index 479ec12948175e..b62d731c7b4006 100644 --- a/test/pummel/test-keep-alive.js +++ b/test/pummel/test-keep-alive.js @@ -104,7 +104,20 @@ server.listen(common.PORT, () => { }); process.on('exit', function() { - assert.strictEqual(true, normalReqSec > 50); - assert.strictEqual(true, keepAliveReqSec > 50); - assert.strictEqual(true, normalReqSec < keepAliveReqSec); + assert.strictEqual( + normalReqSec > 50, + true, + `normalReqSec should be greater than 50, but got ${normalReqSec}` + ); + assert.strictEqual( + keepAliveReqSec > 50, + true, + `keepAliveReqSec should be greater than 50, but got ${keepAliveReqSec}` + ); + assert.strictEqual( + normalReqSec < keepAliveReqSec, + true, + 'normalReqSec should be less than keepAliveReqSec, ' + + `but ${normalReqSec} is greater than ${keepAliveReqSec}` + ); }); From eeb2c8fcbbd15d42376249d43fec0cda648b9f72 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 11 Oct 2018 17:15:15 -0700 Subject: [PATCH 038/178] doc: edit BUILDING.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I should have done this a few days ago so it could land in time for Code & Learn, but oh well. Here are some revisions to BUILDING.md to try to make it easier to read. PR-URL: https://github.com/nodejs/node/pull/23435 Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Michaël Zasso Reviewed-By: Richard Lau Reviewed-By: James M Snell Reviewed-By: Refael Ackermann Reviewed-By: Anna Henningsen Reviewed-By: Vse Mozhet Byt Reviewed-By: George Adams --- BUILDING.md | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index b8809b7174ec9e..d532394532a5c2 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -52,8 +52,7 @@ which it is attached. ### Input -Node.js relies on V8 and libuv. Therefore, we adopt a subset of their -supported platforms. +Node.js relies on V8 and libuv. We adopt a subset of their supported platforms. ### Strategy @@ -111,8 +110,8 @@ platforms in production. community will only address issues that reproduce on native GNU/Linux systems. Issues that only reproduce on WSL should be reported in the [WSL issue tracker](https://github.com/Microsoft/WSL/issues). Running the - Windows binary (`node.exe`) in WSL is not recommended, and will not work - without adjustment (such as stdio redirection). + Windows binary (`node.exe`) in WSL is not recommended. It will not work + without workarounds such as stdio redirection. ### Supported toolchains @@ -144,10 +143,8 @@ Otherwise `configure` will fail with an error. This can be avoided by either providing a newer assembler as per the list above or by using the `--openssl-no-asm` flag. -*Note:* The forthcoming OpenSSL-1.1.1 will require higher - version. Please refer - https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_ia32cap.html for - details. +The forthcoming OpenSSL-1.1.1 will have different requirements. Please refer to + https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_ia32cap.html for details. ## Building Node.js on supported platforms @@ -216,7 +213,7 @@ $ make test-only At this point, you are ready to make code changes and re-run the tests. -If you are running tests prior to submitting a Pull Request, the recommended +If you are running tests before submitting a Pull Request, the recommended command is: ```console @@ -344,7 +341,7 @@ Prerequisites: and tools which can be included in the global `PATH`. * The [NetWide Assembler](http://www.nasm.us/), for OpenSSL assembler modules. If not installed in the default location, it needs to be manually added - to `PATH`. Build with `openssl-no-asm` option does not require this. + to `PATH`. A build with the `openssl-no-asm` option does not need this. * **Optional** (to build the MSI): the [WiX Toolset v3.11](http://wixtoolset.org/releases/) and the [Wix Toolset Visual Studio 2017 Extension](https://marketplace.visualstudio.com/items?itemName=RobMensching.WixToolsetVisualStudio2017Extension). @@ -369,12 +366,10 @@ To test if Node.js was built correctly: ### Android/Android-based devices (e.g. Firefox OS) -Although these instructions for building on Android are provided, please note -that Android is not an officially supported platform at this time. Patches to -improve the Android build are accepted. However, there is no testing on Android -in the current continuous integration environment. The participation of people -dedicated and determined to improve Android building, testing, and support is -encouraged. +Android is not a supported platform. Patches to improve the Android build are +welcome. There is no testing on Android in the current continuous integration +environment. The participation of people dedicated and determined to improve +Android building, testing, and support is encouraged. Be sure you have downloaded and extracted [Android NDK](https://developer.android.com/tools/sdk/ndk/index.html) before in From ff8db70bc2eacf1cc494573bb6e8335b82c9da49 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 12 Oct 2018 12:45:26 -0400 Subject: [PATCH 039/178] benchmark: add common.binding() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recently, process.binding() was replaced with internalBinding(). However, internalBinding() is not available on older builds of Node, which are often used for benchmarking purposes. This commit adds a common.binding() to the benchmarks to work around the issue. Hopefully, this can be removed in the not too distant future. PR-URL: https://github.com/nodejs/node/pull/23460 Fixes: https://github.com/nodejs/node/issues/23436 Reviewed-By: Michaël Zasso Reviewed-By: James M Snell Reviewed-By: Weijia Wang Reviewed-By: Trivikram Kamat --- benchmark/common.js | 10 ++++++++++ benchmark/http/bench-parser.js | 3 +-- benchmark/misc/punycode.js | 2 +- benchmark/misc/trace.js | 6 ++---- benchmark/net/tcp-raw-c2s.js | 10 ++++++---- benchmark/net/tcp-raw-pipe.js | 10 ++++++---- benchmark/net/tcp-raw-s2c.js | 10 ++++++---- benchmark/util/type-check.js | 3 +-- 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/benchmark/common.js b/benchmark/common.js index 148f51830f7b8d..79aef5a55f9bcd 100644 --- a/benchmark/common.js +++ b/benchmark/common.js @@ -242,3 +242,13 @@ Benchmark.prototype.report = function(rate, elapsed) { type: 'report' }); }; + +exports.binding = function(bindingName) { + try { + const { internalBinding } = require('internal/test/binding'); + + return internalBinding(bindingName); + } catch { + return process.binding(bindingName); + } +}; diff --git a/benchmark/http/bench-parser.js b/benchmark/http/bench-parser.js index 8208df11223b90..a54f0efa75e3c1 100644 --- a/benchmark/http/bench-parser.js +++ b/benchmark/http/bench-parser.js @@ -10,8 +10,7 @@ const bench = common.createBenchmark(main, { }); function main({ len, n }) { - const { internalBinding } = require('internal/test/binding'); - const { HTTPParser } = internalBinding('http_parser'); + const { HTTPParser } = common.binding('http_parser'); const REQUEST = HTTPParser.REQUEST; const kOnHeaders = HTTPParser.kOnHeaders | 0; const kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0; diff --git a/benchmark/misc/punycode.js b/benchmark/misc/punycode.js index 369adcf17d3973..a55660fbc07247 100644 --- a/benchmark/misc/punycode.js +++ b/benchmark/misc/punycode.js @@ -3,7 +3,7 @@ const common = require('../common.js'); let icu; try { - icu = process.binding('icu'); + icu = common.binding('icu'); } catch (err) {} const punycode = require('punycode'); diff --git a/benchmark/misc/trace.js b/benchmark/misc/trace.js index fb51c91e9e3e7e..d76f53cf04e82d 100644 --- a/benchmark/misc/trace.js +++ b/benchmark/misc/trace.js @@ -11,7 +11,7 @@ const bench = common.createBenchmark(main, { const { TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN: kBeforeEvent -} = process.binding('constants').trace; +} = common.binding('constants').trace; function doTrace(n, trace) { bench.start(); @@ -31,12 +31,10 @@ function doIsTraceCategoryEnabled(n, isTraceCategoryEnabled) { } function main({ n, method }) { - const { internalBinding } = require('internal/test/binding'); - const { trace, isTraceCategoryEnabled - } = internalBinding('trace_events'); + } = common.binding('trace_events'); switch (method) { case '': diff --git a/benchmark/net/tcp-raw-c2s.js b/benchmark/net/tcp-raw-c2s.js index d6666011d5601d..1f10ae7c839d87 100644 --- a/benchmark/net/tcp-raw-c2s.js +++ b/benchmark/net/tcp-raw-c2s.js @@ -15,10 +15,12 @@ const bench = common.createBenchmark(main, { }, { flags: [ '--expose-internals', '--no-warnings' ] }); function main({ dur, len, type }) { - const { internalBinding } = require('internal/test/binding'); - const { TCP, constants: TCPConstants } = process.binding('tcp_wrap'); - const { TCPConnectWrap } = process.binding('tcp_wrap'); - const { WriteWrap } = internalBinding('stream_wrap'); + const { + TCP, + TCPConnectWrap, + constants: TCPConstants + } = common.binding('tcp_wrap'); + const { WriteWrap } = common.binding('stream_wrap'); const PORT = common.PORT; const serverHandle = new TCP(TCPConstants.SERVER); diff --git a/benchmark/net/tcp-raw-pipe.js b/benchmark/net/tcp-raw-pipe.js index 8203abca6e92b9..16dc6955c46240 100644 --- a/benchmark/net/tcp-raw-pipe.js +++ b/benchmark/net/tcp-raw-pipe.js @@ -17,10 +17,12 @@ const bench = common.createBenchmark(main, { }); function main({ dur, len, type }) { - const { internalBinding } = require('internal/test/binding'); - const { TCP, constants: TCPConstants } = process.binding('tcp_wrap'); - const { TCPConnectWrap } = process.binding('tcp_wrap'); - const { WriteWrap } = internalBinding('stream_wrap'); + const { + TCP, + TCPConnectWrap, + constants: TCPConstants + } = common.binding('tcp_wrap'); + const { WriteWrap } = common.binding('stream_wrap'); const PORT = common.PORT; function fail(err, syscall) { diff --git a/benchmark/net/tcp-raw-s2c.js b/benchmark/net/tcp-raw-s2c.js index 1e42b311ad7b2a..1700d23890a3b5 100644 --- a/benchmark/net/tcp-raw-s2c.js +++ b/benchmark/net/tcp-raw-s2c.js @@ -17,10 +17,12 @@ const bench = common.createBenchmark(main, { }); function main({ dur, len, type }) { - const { internalBinding } = require('internal/test/binding'); - const { TCP, constants: TCPConstants } = process.binding('tcp_wrap'); - const { TCPConnectWrap } = process.binding('tcp_wrap'); - const { WriteWrap } = internalBinding('stream_wrap'); + const { + TCP, + TCPConnectWrap, + constants: TCPConstants + } = common.binding('tcp_wrap'); + const { WriteWrap } = common.binding('stream_wrap'); const PORT = common.PORT; const serverHandle = new TCP(TCPConstants.SERVER); diff --git a/benchmark/util/type-check.js b/benchmark/util/type-check.js index d9acdaedf5a57f..f11471980d9216 100644 --- a/benchmark/util/type-check.js +++ b/benchmark/util/type-check.js @@ -38,8 +38,7 @@ function main({ type, argument, version, n }) { // For testing, if supplied with an empty type, default to ArrayBufferView. type = type || 'ArrayBufferView'; - const { internalBinding } = require('internal/test/binding'); - const util = internalBinding('util'); + const util = common.binding('util'); const types = require('internal/util/types'); const func = { native: util, js: types }[version][`is${type}`]; From 190d146b78c1a8a49c8445727a463cb9938b1a69 Mon Sep 17 00:00:00 2001 From: ashleysimpson Date: Fri, 12 Oct 2018 10:01:24 -0700 Subject: [PATCH 040/178] test: inline common module boolean PR-URL: https://github.com/nodejs/node/pull/23479 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/addons/load-long-path/test.js | 2 +- test/common/README.md | 5 ----- test/common/index.js | 2 -- test/common/index.mjs | 2 -- 4 files changed, 1 insertion(+), 10 deletions(-) diff --git a/test/addons/load-long-path/test.js b/test/addons/load-long-path/test.js index ee09230676b5e8..7d1a37bd96055e 100644 --- a/test/addons/load-long-path/test.js +++ b/test/addons/load-long-path/test.js @@ -1,6 +1,6 @@ 'use strict'; const common = require('../../common'); -if (common.isWOW64) +if (common.isWindows && (process.env.PROCESSOR_ARCHITEW6432 !== undefined)) common.skip('doesn\'t work on WOW64'); const fs = require('fs'); diff --git a/test/common/README.md b/test/common/README.md index e63c83fd806dfb..0a2281b091b267 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -213,11 +213,6 @@ Platform check for SunOS. Platform check for Windows. -### isWOW64 -* [<boolean>] - -Platform check for Windows 32-bit on Windows 64-bit. - ### localhostIPv4 * [<string>] diff --git a/test/common/index.js b/test/common/index.js index e76dfcce8b0b8f..9cbf9189690600 100644 --- a/test/common/index.js +++ b/test/common/index.js @@ -46,7 +46,6 @@ const isMainThread = (() => { })(); const isWindows = process.platform === 'win32'; -const isWOW64 = isWindows && (process.env.PROCESSOR_ARCHITEW6432 !== undefined); const isAIX = process.platform === 'aix'; const isLinuxPPCBE = (process.platform === 'linux') && (process.arch === 'ppc64') && @@ -721,7 +720,6 @@ module.exports = { isOSX, isSunOS, isWindows, - isWOW64, localIPv6Hosts, mustCall, mustCallAsync, diff --git a/test/common/index.mjs b/test/common/index.mjs index bb17d9d37171a6..bead7333d12e81 100644 --- a/test/common/index.mjs +++ b/test/common/index.mjs @@ -5,7 +5,6 @@ import common from './index.js'; const { isMainThread, isWindows, - isWOW64, isAIX, isLinuxPPCBE, isSunOS, @@ -54,7 +53,6 @@ const { export { isMainThread, isWindows, - isWOW64, isAIX, isLinuxPPCBE, isSunOS, From 20fb64c3ddc936b462e595332cfa13e712407bcb Mon Sep 17 00:00:00 2001 From: Paige Kato Date: Fri, 12 Oct 2018 09:50:47 -0700 Subject: [PATCH 041/178] test: remove unused variable from catch PR-URL: https://github.com/nodejs/node/pull/23477 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/parallel/test-readline-interface.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index 0550019e64f46f..ec553832c42d68 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -509,7 +509,7 @@ function isWarned(emitter) { }); try { fi.emit('data', 'fooX'); - } catch (e) { } + } catch { } fi.emit('data', 'bar'); assert.strictEqual(keys.join(''), 'fooXbar'); rli.close(); From ff3c56c7929e1b56b319c666599175e8cf5f1da5 Mon Sep 17 00:00:00 2001 From: Stephen Heitman Date: Fri, 12 Oct 2018 09:51:28 -0700 Subject: [PATCH 042/178] test: remove unused "e" from catch in http2 test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23476 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Shelley Vohr Reviewed-By: Michaël Zasso Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Trivikram Kamat --- test/parallel/test-http2-respond-file-fd-invalid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-http2-respond-file-fd-invalid.js b/test/parallel/test-http2-respond-file-fd-invalid.js index 21fcf790b449eb..7630b93bc63942 100644 --- a/test/parallel/test-http2-respond-file-fd-invalid.js +++ b/test/parallel/test-http2-respond-file-fd-invalid.js @@ -25,7 +25,7 @@ server.on('stream', (stream) => { // Get first known bad file descriptor. try { while (fs.fstatSync(++fd)); - } catch (e) { + } catch { // do nothing; we now have an invalid fd } From 8059ff2f0b01a4ee5c9da6c5db6b256f0c4ed42c Mon Sep 17 00:00:00 2001 From: Muzafar Umarov Date: Fri, 12 Oct 2018 12:47:35 -0400 Subject: [PATCH 043/178] benchmark: added a test benchmark for worker Wrote a sequential benchmark test for worker. This is to make sure the benchmark for work runs properly. PR-URL: https://github.com/nodejs/node/pull/23475 Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/sequential/test-benchmark-worker.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 test/sequential/test-benchmark-worker.js diff --git a/test/sequential/test-benchmark-worker.js b/test/sequential/test-benchmark-worker.js new file mode 100644 index 00000000000000..ae9a8a6701ae4a --- /dev/null +++ b/test/sequential/test-benchmark-worker.js @@ -0,0 +1,23 @@ +'use strict'; + +const common = require('../common'); + +if (!common.enoughTestMem) + common.skip('Insufficient memory for Worker benchmark test'); + +// Because the worker benchmarks can run on different threads, +// this should be in sequential rather than parallel to make sure +// it does not conflict with tests that choose random available ports. + +const runBenchmark = require('../common/benchmark'); + +runBenchmark('worker', + [ + 'n=1', + 'sendsPerBroadcast=1', + 'workers=1', + 'payload=string' + ], + { + NODEJS_BENCHMARK_ZERO_ALLOWED: 1 + }); From 541367ac8e17619f4d11af836f41bc18a789623b Mon Sep 17 00:00:00 2001 From: Quinn Langille Date: Fri, 12 Oct 2018 09:53:59 -0700 Subject: [PATCH 044/178] test: removed mustCallAsync from common and added inside testcase PR-URL: https://github.com/nodejs/node/pull/23467 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/common/README.md | 11 ----------- test/common/index.js | 7 ------- test/common/index.mjs | 2 -- test/parallel/test-http2-backpressure.js | 8 +++++++- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/test/common/README.md b/test/common/README.md index 0a2281b091b267..63b7905113f577 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -234,17 +234,6 @@ fail. If `fn` is not provided, an empty function will be used. -### mustCallAsync([fn][, exact]) -* `fn` [<Function>] -* `exact` [<number>] default = 1 -* return [<Function>] - -The same as `mustCall()`, except that it is also checked that the Promise -returned by the function is fulfilled for each invocation of the function. - -The return value of the wrapped function is the return value of the original -function, if necessary wrapped as a promise. - ### mustCallAtLeast([fn][, minimum]) * `fn` [<Function>] default = () => {} * `minimum` [<number>] default = 1 diff --git a/test/common/index.js b/test/common/index.js index 9cbf9189690600..53977beef5bc74 100644 --- a/test/common/index.js +++ b/test/common/index.js @@ -308,12 +308,6 @@ function mustCallAtLeast(fn, minimum) { return _mustCallInner(fn, minimum, 'minimum'); } -function mustCallAsync(fn, exact) { - return mustCall((...args) => { - return Promise.resolve(fn(...args)).then(mustCall((val) => val)); - }, exact); -} - function _mustCallInner(fn, criteria = 1, field) { if (process._exiting) throw new Error('Cannot use common.mustCall*() in process exit handler'); @@ -722,7 +716,6 @@ module.exports = { isWindows, localIPv6Hosts, mustCall, - mustCallAsync, mustCallAtLeast, mustNotCall, nodeProcessAborted, diff --git a/test/common/index.mjs b/test/common/index.mjs index bead7333d12e81..068dd35049c301 100644 --- a/test/common/index.mjs +++ b/test/common/index.mjs @@ -26,7 +26,6 @@ const { allowGlobals, mustCall, mustCallAtLeast, - mustCallAsync, hasMultiLocalhost, skipIfEslintMissing, canCreateSymLink, @@ -74,7 +73,6 @@ export { allowGlobals, mustCall, mustCallAtLeast, - mustCallAsync, hasMultiLocalhost, skipIfEslintMissing, canCreateSymLink, diff --git a/test/parallel/test-http2-backpressure.js b/test/parallel/test-http2-backpressure.js index db58e8da33df33..1f9687831eb1a8 100644 --- a/test/parallel/test-http2-backpressure.js +++ b/test/parallel/test-http2-backpressure.js @@ -12,7 +12,7 @@ const makeDuplexPair = require('../common/duplexpair'); { let req; const server = http2.createServer(); - server.on('stream', common.mustCallAsync(async (stream, headers) => { + server.on('stream', mustCallAsync(async (stream, headers) => { stream.respond({ 'content-type': 'text/html', ':status': 200 @@ -45,3 +45,9 @@ function event(ee, eventName) { ee.once(eventName, common.mustCall(resolve)); }); } + +function mustCallAsync(fn, exact) { + return common.mustCall((...args) => { + return Promise.resolve(fn(...args)).then(common.mustCall((val) => val)); + }, exact); +} From 20b3698ac14fdd9664654fa90302a5f8b6b58193 Mon Sep 17 00:00:00 2001 From: "Bruce A. MacNaughton" Date: Fri, 12 Oct 2018 11:20:55 -0700 Subject: [PATCH 045/178] src: throw if functions used as constructors in node_crypto.cc Throw an error if verify_error_getter_templ or verify_error_getter_templ2 are used as constructors. PR-URL: https://github.com/nodejs/node/pull/23582 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Tiancheng "Timothy" Gu --- src/node_crypto.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 627c14360e18fd..7d2cba22576a72 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -3940,8 +3940,7 @@ void DiffieHellman::Initialize(Environment* env, Local target) { env->as_external(), Signature::New(env->isolate(), t), /* length */ 0, - // TODO(TimothyGu): should be deny - ConstructorBehavior::kAllow, + ConstructorBehavior::kThrow, SideEffectType::kHasNoSideEffect); t->InstanceTemplate()->SetAccessorProperty( @@ -3969,8 +3968,7 @@ void DiffieHellman::Initialize(Environment* env, Local target) { env->as_external(), Signature::New(env->isolate(), t2), /* length */ 0, - // TODO(TimothyGu): should be deny - ConstructorBehavior::kAllow, + ConstructorBehavior::kThrow, SideEffectType::kHasNoSideEffect); t2->InstanceTemplate()->SetAccessorProperty( From c19ab565ca888bace37980d2bc990b3e7936f716 Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Fri, 12 Oct 2018 09:19:35 -0700 Subject: [PATCH 046/178] src: change constructor behavior in stream_base-inl.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change ConstructorBehavior from kAllow to kThrow. Co-authored-by: Bruce A. MacNaughton Refs: https://github.com/nodejs/node/pull/23453 PR-URL: https://github.com/nodejs/node/pull/23447 Reviewed-By: Tobias Nießen Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- src/stream_base-inl.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/stream_base-inl.h b/src/stream_base-inl.h index 027b938d30df1c..0209281f942e1c 100644 --- a/src/stream_base-inl.h +++ b/src/stream_base-inl.h @@ -275,29 +275,28 @@ void StreamBase::AddMethods(Environment* env, Local t) { Local signature = Signature::New(env->isolate(), t); - // TODO(TimothyGu): None of these should have ConstructorBehavior::kAllow. Local get_fd_templ = env->NewFunctionTemplate(GetFD, signature, - v8::ConstructorBehavior::kAllow, + v8::ConstructorBehavior::kThrow, v8::SideEffectType::kHasNoSideEffect); Local get_external_templ = env->NewFunctionTemplate(GetExternal, signature, - v8::ConstructorBehavior::kAllow, + v8::ConstructorBehavior::kThrow, v8::SideEffectType::kHasNoSideEffect); Local get_bytes_read_templ = env->NewFunctionTemplate(GetBytesRead, signature, - v8::ConstructorBehavior::kAllow, + v8::ConstructorBehavior::kThrow, v8::SideEffectType::kHasNoSideEffect); Local get_bytes_written_templ = env->NewFunctionTemplate(GetBytesWritten, signature, - v8::ConstructorBehavior::kAllow, + v8::ConstructorBehavior::kThrow, v8::SideEffectType::kHasNoSideEffect); t->PrototypeTemplate()->SetAccessorProperty(env->fd_string(), From cb6c33e368d97c0c61a085e56b7196a676a09d85 Mon Sep 17 00:00:00 2001 From: Rock Hu Date: Fri, 12 Oct 2018 10:06:36 -0700 Subject: [PATCH 047/178] test: fix assert.strictEqual params order PR-URL: https://github.com/nodejs/node/pull/23480 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Shelley Vohr --- test/sequential/test-pipe.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/sequential/test-pipe.js b/test/sequential/test-pipe.js index bc2084295d738d..c5bff3563be1e6 100644 --- a/test/sequential/test-pipe.js +++ b/test/sequential/test-pipe.js @@ -75,7 +75,7 @@ const tcp = net.Server(common.mustCall((s) => { s.on('data', (d) => { tcpLengthSeen += d.length; for (let j = 0; j < d.length; j++) { - assert.strictEqual(buffer[i], d[j]); + assert.strictEqual(d[j], buffer[i]); i++; } }); @@ -103,7 +103,7 @@ function startClient() { }, common.mustCall((res) => { res.setEncoding('utf8'); res.on('data', common.mustCall((string) => { - assert.strictEqual('thanks', string); + assert.strictEqual(string, 'thanks'); gotThanks = true; })); })); @@ -113,5 +113,5 @@ function startClient() { process.on('exit', () => { assert.ok(gotThanks); - assert.strictEqual(bufferSize, tcpLengthSeen); + assert.strictEqual(tcpLengthSeen, bufferSize); }); From 446aadd2e23bb91709644c493f20f7c5ae103ff8 Mon Sep 17 00:00:00 2001 From: Stacey Date: Fri, 12 Oct 2018 09:56:31 -0700 Subject: [PATCH 048/178] test: fix argument order for assert.strictEqual PR-URL: https://github.com/nodejs/node/pull/23485 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/sequential/test-inspector-scriptparsed-context.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sequential/test-inspector-scriptparsed-context.js b/test/sequential/test-inspector-scriptparsed-context.js index e1ec209994f18e..56cc41dd86a397 100644 --- a/test/sequential/test-inspector-scriptparsed-context.js +++ b/test/sequential/test-inspector-scriptparsed-context.js @@ -81,7 +81,7 @@ async function runTests() { await session.waitForBreakOnLine(0, 'evalmachine.'); await session.runToCompletion(); - assert.strictEqual(0, (await instance.expectShutdown()).exitCode); + assert.strictEqual((await instance.expectShutdown()).exitCode, 0); } runTests(); From 7b3f14a640c2b2af00bae59bdc5420e0cdef525b Mon Sep 17 00:00:00 2001 From: Matt Jiles Date: Fri, 12 Oct 2018 12:50:41 -0400 Subject: [PATCH 049/178] tls: update try catch syntax try catch syntax allows elimination of function arguments so removed unused err argument PR-URL: https://github.com/nodejs/node/pull/23484 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- lib/tls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tls.js b/lib/tls.js index f771a661d07692..57228ca273cb98 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -176,7 +176,7 @@ exports.checkServerIdentity = function checkServerIdentity(hostname, cert) { let uri; try { uri = new URL(name.slice(4)); - } catch (err) { + } catch { uri = url.parse(name.slice(4)); if (!urlWarningEmitted && !process.noDeprecation) { urlWarningEmitted = true; From 5799f41c93b354c3529e2ab4259141a1c88cac37 Mon Sep 17 00:00:00 2001 From: Claire Liu Date: Fri, 12 Oct 2018 09:56:36 -0700 Subject: [PATCH 050/178] lib: remove an unused variable PR-URL: https://github.com/nodejs/node/pull/23482 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- lib/internal/bootstrap/node.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index d3bd5d74e08095..2f638555ee28ce 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -632,7 +632,9 @@ const { kExpandStackSymbol } = NativeModule.require('internal/util'); if (typeof er[kExpandStackSymbol] === 'function') er[kExpandStackSymbol](); - } catch (er) {} + } catch { + // Nothing to be done about it at this point. + } return false; } From fd230c131deb049ea027fda87bc20b24efd6a4f5 Mon Sep 17 00:00:00 2001 From: Michal Hynek Date: Fri, 12 Oct 2018 09:20:12 -0700 Subject: [PATCH 051/178] test: removed unused variable Removed an unused variable in test-buffer-failed-alloc-typed-arrays.js. PR-URL: https://github.com/nodejs/node/pull/23481 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/parallel/test-buffer-failed-alloc-typed-arrays.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-buffer-failed-alloc-typed-arrays.js b/test/parallel/test-buffer-failed-alloc-typed-arrays.js index fd9c2744e55f69..59cc7bc8d95e03 100644 --- a/test/parallel/test-buffer-failed-alloc-typed-arrays.js +++ b/test/parallel/test-buffer-failed-alloc-typed-arrays.js @@ -26,7 +26,7 @@ for (const allocator of allocators) { // These allocations are known to fail. If they do, // Uint32Array should still produce a zeroed out result. allocator(size); - } catch (e) { + } catch { assert.deepStrictEqual(new Uint32Array(10), zeroArray); } } From 8ce99faa5073298fcec9be91a30e3aa98a8620d3 Mon Sep 17 00:00:00 2001 From: David Corona Date: Fri, 12 Oct 2018 09:55:13 -0700 Subject: [PATCH 052/178] src: move default assignment of async_id_ in async_wrap.h Moving the default assignment of async_id from the constructor in async_wrap.cc to class definition in async_wrap.h PR-URL: https://github.com/nodejs/node/pull/23495 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Shelley Vohr Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Trivikram Kamat --- src/async_wrap.cc | 1 - src/async_wrap.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 596fcc8356d500..29bd64f2c5e3fe 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -563,7 +563,6 @@ AsyncWrap::AsyncWrap(Environment* env, CHECK_NE(provider, PROVIDER_NONE); CHECK_GE(object->InternalFieldCount(), 1); - async_id_ = -1; // Use AsyncReset() call to execute the init() callbacks. AsyncReset(execution_async_id, silent); } diff --git a/src/async_wrap.h b/src/async_wrap.h index 360380afc3459b..e3d5748bbc6077 100644 --- a/src/async_wrap.h +++ b/src/async_wrap.h @@ -200,7 +200,7 @@ class AsyncWrap : public BaseObject { inline AsyncWrap(); const ProviderType provider_type_; // Because the values may be Reset(), cannot be made const. - double async_id_; + double async_id_ = -1; double trigger_async_id_; }; From 6783eedcb93d84362422b6a5d3db4dacfc33f4b3 Mon Sep 17 00:00:00 2001 From: Anna Zhao Date: Fri, 12 Oct 2018 10:06:42 -0700 Subject: [PATCH 053/178] test: change to arrow functions in send-bad-arguments PR-URL: https://github.com/nodejs/node/pull/23483 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Shelley Vohr --- test/parallel/test-dgram-send-bad-arguments.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-dgram-send-bad-arguments.js b/test/parallel/test-dgram-send-bad-arguments.js index e96a01de3281f2..4eb7dca7a38e5d 100644 --- a/test/parallel/test-dgram-send-bad-arguments.js +++ b/test/parallel/test-dgram-send-bad-arguments.js @@ -28,17 +28,17 @@ const buf = Buffer.from('test'); const host = '127.0.0.1'; const sock = dgram.createSocket('udp4'); -assert.throws(function() { +assert.throws(() => { sock.send(); }, TypeError); // First argument should be a buffer. // send(buf, offset, length, port, host) -assert.throws(function() { sock.send(buf, 1, 1, -1, host); }, RangeError); -assert.throws(function() { sock.send(buf, 1, 1, 0, host); }, RangeError); -assert.throws(function() { sock.send(buf, 1, 1, 65536, host); }, RangeError); +assert.throws(() => { sock.send(buf, 1, 1, -1, host); }, RangeError); +assert.throws(() => { sock.send(buf, 1, 1, 0, host); }, RangeError); +assert.throws(() => { sock.send(buf, 1, 1, 65536, host); }, RangeError); // send(buf, port, host) -assert.throws(function() { sock.send(23, 12345, host); }, TypeError); +assert.throws(() => { sock.send(23, 12345, host); }, TypeError); // send([buf1, ..], port, host) -assert.throws(function() { sock.send([buf, 23], 12345, host); }, TypeError); +assert.throws(() => { sock.send([buf, 23], 12345, host); }, TypeError); From ea9df8b4a48f70cdd86c81d9e20b72d4be1bcd73 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 12 Oct 2018 17:56:22 -0400 Subject: [PATCH 054/178] tools: update ESLint to 5.7.0 Update ESLint to 5.7.0. PR-URL: https://github.com/nodejs/node/pull/23629 Reviewed-By: Rich Trott Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- .../eslint/lib/rules/camelcase.js | 44 +- .../eslint/lib/rules/no-extra-bind.js | 22 + .../node_modules/eslint/lib/rules/no-tabs.js | 29 +- .../eslint/lib/rules/no-unused-vars.js | 2 +- .../node_modules/eslint/lib/rules/one-var.js | 5 + .../rules/padding-line-between-statements.js | 3 + .../eslint/lib/rules/space-infix-ops.js | 41 +- .../eslint/node_modules/ajv-keywords/LICENSE | 21 - .../node_modules/ajv-keywords/README.md | 683 ------------------ .../eslint/node_modules/ajv-keywords/index.js | 35 - .../ajv-keywords/keywords/_formatLimit.js | 90 --- .../ajv-keywords/keywords/_util.js | 15 - .../ajv-keywords/keywords/deepProperties.js | 54 -- .../ajv-keywords/keywords/deepRequired.js | 57 -- .../keywords/dot/_formatLimit.jst | 116 --- .../keywords/dot/patternRequired.jst | 33 - .../ajv-keywords/keywords/dot/switch.jst | 73 -- .../ajv-keywords/keywords/dotjs/README.md | 3 - .../keywords/dotjs/_formatLimit.js | 176 ----- .../keywords/dotjs/patternRequired.js | 58 -- .../ajv-keywords/keywords/dotjs/switch.js | 128 ---- .../ajv-keywords/keywords/dynamicDefaults.js | 68 -- .../ajv-keywords/keywords/formatMaximum.js | 3 - .../ajv-keywords/keywords/formatMinimum.js | 3 - .../ajv-keywords/keywords/index.js | 19 - .../ajv-keywords/keywords/instanceof.js | 58 -- .../ajv-keywords/keywords/patternRequired.js | 21 - .../ajv-keywords/keywords/prohibited.js | 25 - .../ajv-keywords/keywords/range.js | 36 - .../ajv-keywords/keywords/regexp.js | 36 - .../ajv-keywords/keywords/select.js | 79 -- .../ajv-keywords/keywords/switch.js | 38 - .../ajv-keywords/keywords/transform.js | 79 -- .../ajv-keywords/keywords/typeof.js | 32 - .../keywords/uniqueItemProperties.js | 32 - .../node_modules/ajv-keywords/package.json | 55 -- .../eslint/node_modules/color-name/README.md | 22 +- .../eslint/node_modules/color-name/index.js | 42 +- .../eslint/node_modules/debug/README.md | 30 +- .../eslint/node_modules/debug/dist/debug.js | 1 + .../eslint/node_modules/debug/package.json | 15 +- .../eslint/node_modules/debug/src/common.js | 19 + .../node_modules/external-editor/README.md | 2 +- .../eslint/node_modules/globals/globals.json | 4 +- .../eslint/node_modules/globals/package.json | 2 +- .../eslint/node_modules/regexpp/index.d.ts | 397 +++++----- .../eslint/node_modules/regexpp/index.js | 15 + .../eslint/node_modules/regexpp/index.js.map | 2 +- .../eslint/node_modules/regexpp/index.mjs | 15 + .../eslint/node_modules/regexpp/index.mjs.map | 2 +- .../eslint/node_modules/regexpp/package.json | 2 +- .../node_modules/rxjs/bundles/rxjs.umd.js | 166 ++--- .../node_modules/rxjs/bundles/rxjs.umd.min.js | 1 + .../rxjs/src/internal/util/TimeoutError.ts | 48 +- .../eslint/node_modules/semver/README.md | 21 +- .../eslint/node_modules/semver/bin/semver | 18 +- .../eslint/node_modules/semver/package.json | 2 +- .../eslint/node_modules/semver/semver.js | 236 +++--- .../eslint/node_modules/table/LICENSE | 2 +- .../eslint/node_modules/table/README.md | 16 +- .../node_modules/table/dist/alignString.js | 40 +- .../table/dist/alignString.js.flow | 96 +++ .../table/dist/alignString.js.map | 1 + .../node_modules/table/dist/alignTableData.js | 23 +- .../table/dist/alignTableData.js.flow | 21 + .../table/dist/alignTableData.js.map | 1 + .../table/dist/calculateCellHeight.js | 31 +- .../table/dist/calculateCellHeight.js.flow | 29 + .../table/dist/calculateCellHeight.js.map | 1 + .../table/dist/calculateCellWidthIndex.js | 17 +- .../dist/calculateCellWidthIndex.js.flow | 13 + .../table/dist/calculateCellWidthIndex.js.map | 1 + .../dist/calculateMaximumColumnWidthIndex.js | 22 +- .../calculateMaximumColumnWidthIndex.js.flow | 27 + .../calculateMaximumColumnWidthIndex.js.map | 1 + .../table/dist/calculateRowHeightIndex.js | 34 +- .../dist/calculateRowHeightIndex.js.flow | 35 + .../table/dist/calculateRowHeightIndex.js.map | 1 + .../node_modules/table/dist/createStream.js | 103 +-- .../table/dist/createStream.js.flow | 124 ++++ .../table/dist/createStream.js.map | 1 + .../node_modules/table/dist/drawBorder.js | 24 +- .../table/dist/drawBorder.js.flow | 95 +++ .../node_modules/table/dist/drawBorder.js.map | 1 + .../eslint/node_modules/table/dist/drawRow.js | 11 +- .../node_modules/table/dist/drawRow.js.flow | 15 + .../node_modules/table/dist/drawRow.js.map | 1 + .../node_modules/table/dist/drawTable.js | 23 +- .../node_modules/table/dist/drawTable.js.flow | 52 ++ .../node_modules/table/dist/drawTable.js.map | 1 + .../table/dist/getBorderCharacters.js | 23 +- .../table/dist/getBorderCharacters.js.flow | 120 +++ .../table/dist/getBorderCharacters.js.map | 1 + .../eslint/node_modules/table/dist/index.js | 38 +- .../node_modules/table/dist/index.js.flow | 9 + .../node_modules/table/dist/index.js.map | 1 + .../node_modules/table/dist/makeConfig.js | 51 +- .../table/dist/makeConfig.js.flow | 72 ++ .../node_modules/table/dist/makeConfig.js.map | 1 + .../table/dist/makeStreamConfig.js | 46 +- .../table/dist/makeStreamConfig.js.flow | 83 +++ .../table/dist/makeStreamConfig.js.map | 1 + .../table/dist/mapDataUsingRowHeightIndex.js | 39 +- .../dist/mapDataUsingRowHeightIndex.js.flow | 41 ++ .../dist/mapDataUsingRowHeightIndex.js.map | 1 + .../node_modules/table/dist/padTableData.js | 12 +- .../table/dist/padTableData.js.flow | 14 + .../table/dist/padTableData.js.map | 1 + .../table/dist/schemas/config.json | 2 +- .../table/dist/schemas/streamConfig.json | 2 +- .../table/dist/stringifyTableData.js | 9 +- .../table/dist/stringifyTableData.js.flow | 11 + .../table/dist/stringifyTableData.js.map | 1 + .../eslint/node_modules/table/dist/table.js | 82 +-- .../node_modules/table/dist/table.js.flow | 95 +++ .../node_modules/table/dist/table.js.map | 1 + .../table/dist/truncateTableData.js | 17 +- .../table/dist/truncateTableData.js.flow | 17 + .../table/dist/truncateTableData.js.map | 1 + .../node_modules/table/dist/validateConfig.js | 9 +- .../table/dist/validateConfig.js.flow | 34 + .../table/dist/validateConfig.js.map | 1 + .../table/dist/validateStreamConfig.js | 9 +- .../table/dist/validateTableData.js | 77 +- .../table/dist/validateTableData.js.flow | 46 ++ .../table/dist/validateTableData.js.map | 1 + .../node_modules/table/dist/wrapString.js | 28 +- .../table/dist/wrapString.js.flow | 29 + .../node_modules/table/dist/wrapString.js.map | 1 + .../node_modules/table/dist/wrapWord.js | 35 +- .../node_modules/table/dist/wrapWord.js.flow | 39 + .../node_modules/table/dist/wrapWord.js.map | 1 + .../eslint/node_modules/table/package.json | 72 +- .../node_modules/tslib/CopyrightNotice.txt | 29 +- .../eslint/node_modules/tslib/LICENSE.txt | 110 +-- .../eslint/node_modules/tslib/README.md | 268 +++---- .../eslint/node_modules/tslib/tslib.d.ts | 66 +- .../eslint/node_modules/tslib/tslib.es6.js | 372 +++++----- .../eslint/node_modules/tslib/tslib.js | 486 ++++++------- tools/node_modules/eslint/package.json | 6 +- 140 files changed, 2961 insertions(+), 3747 deletions(-) delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/LICENSE delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/README.md delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/index.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/_formatLimit.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/_util.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/deepProperties.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/deepRequired.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/_formatLimit.jst delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/patternRequired.jst delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/switch.jst delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/README.md delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/_formatLimit.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/patternRequired.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/switch.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dynamicDefaults.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMaximum.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMinimum.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/index.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/instanceof.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/patternRequired.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/prohibited.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/range.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/regexp.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/select.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/switch.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/transform.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/typeof.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/keywords/uniqueItemProperties.js delete mode 100644 tools/node_modules/eslint/node_modules/ajv-keywords/package.json create mode 100644 tools/node_modules/eslint/node_modules/table/dist/alignString.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/alignString.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/createStream.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/createStream.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/drawRow.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/drawRow.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/drawTable.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/drawTable.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/index.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/index.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/padTableData.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/padTableData.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/table.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/table.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/wrapString.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/wrapString.js.map create mode 100644 tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.flow create mode 100644 tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.map diff --git a/tools/node_modules/eslint/lib/rules/camelcase.js b/tools/node_modules/eslint/lib/rules/camelcase.js index 3005963ab04c2d..41040450f94294 100644 --- a/tools/node_modules/eslint/lib/rules/camelcase.js +++ b/tools/node_modules/eslint/lib/rules/camelcase.js @@ -27,6 +27,16 @@ module.exports = { }, properties: { enum: ["always", "never"] + }, + allow: { + type: "array", + items: [ + { + type: "string" + } + ], + minItems: 0, + uniqueItems: true } }, additionalProperties: false @@ -40,6 +50,15 @@ module.exports = { create(context) { + const options = context.options[0] || {}; + let properties = options.properties || ""; + const ignoreDestructuring = options.ignoreDestructuring || false; + const allow = options.allow || []; + + if (properties !== "always" && properties !== "never") { + properties = "always"; + } + //-------------------------------------------------------------------------- // Helpers //-------------------------------------------------------------------------- @@ -60,6 +79,18 @@ module.exports = { return name.indexOf("_") > -1 && name !== name.toUpperCase(); } + /** + * Checks if a string match the ignore list + * @param {string} name The string to check. + * @returns {boolean} if the string is ignored + * @private + */ + function isAllowed(name) { + return allow.findIndex( + entry => name === entry || name.match(new RegExp(entry)) + ) !== -1; + } + /** * Checks if a parent of a node is an ObjectPattern. * @param {ASTNode} node The node to check. @@ -93,14 +124,6 @@ module.exports = { } } - const options = context.options[0] || {}; - let properties = options.properties || ""; - const ignoreDestructuring = options.ignoreDestructuring || false; - - if (properties !== "always" && properties !== "never") { - properties = "always"; - } - return { Identifier(node) { @@ -112,6 +135,11 @@ module.exports = { const name = node.name.replace(/^_+|_+$/g, ""), effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent; + // First, we ignore the node if it match the ignore list + if (isAllowed(name)) { + return; + } + // MemberExpressions get special rules if (node.parent.type === "MemberExpression") { diff --git a/tools/node_modules/eslint/lib/rules/no-extra-bind.js b/tools/node_modules/eslint/lib/rules/no-extra-bind.js index b8376adfc11779..6d6cad13e97deb 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-bind.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-bind.js @@ -10,6 +10,12 @@ const astUtils = require("../util/ast-utils"); +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +const SIDE_EFFECT_FREE_NODE_TYPES = new Set(["Literal", "Identifier", "ThisExpression", "FunctionExpression"]); + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -35,6 +41,18 @@ module.exports = { create(context) { let scopeInfo = null; + /** + * Checks if a node is free of side effects. + * + * This check is stricter than it needs to be, in order to keep the implementation simple. + * + * @param {ASTNode} node A node to check. + * @returns {boolean} True if the node is known to be side-effect free, false otherwise. + */ + function isSideEffectFree(node) { + return SIDE_EFFECT_FREE_NODE_TYPES.has(node.type); + } + /** * Reports a given function node. * @@ -48,6 +66,10 @@ module.exports = { messageId: "unexpected", loc: node.parent.property.loc.start, fix(fixer) { + if (node.parent.parent.arguments.length && !isSideEffectFree(node.parent.parent.arguments[0])) { + return null; + } + const firstTokenToRemove = context.getSourceCode() .getFirstTokenBetween(node.parent.object, node.parent.property, astUtils.isNotClosingParenToken); diff --git a/tools/node_modules/eslint/lib/rules/no-tabs.js b/tools/node_modules/eslint/lib/rules/no-tabs.js index 08a8fa5b758b4f..c22a94da38bee1 100644 --- a/tools/node_modules/eslint/lib/rules/no-tabs.js +++ b/tools/node_modules/eslint/lib/rules/no-tabs.js @@ -8,7 +8,9 @@ //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ -const regex = /\t/; + +const tabRegex = /\t+/g; +const anyNonWhitespaceRegex = /\S/; //------------------------------------------------------------------------------ // Public Interface @@ -22,21 +24,36 @@ module.exports = { recommended: false, url: "https://eslint.org/docs/rules/no-tabs" }, - schema: [] + schema: [{ + type: "object", + properties: { + allowIndentationTabs: { + type: "boolean" + } + }, + additionalProperties: false + }] }, create(context) { + const sourceCode = context.getSourceCode(); + const allowIndentationTabs = context.options && context.options[0] && context.options[0].allowIndentationTabs; + return { Program(node) { - context.getSourceCode().getLines().forEach((line, index) => { - const match = regex.exec(line); + sourceCode.getLines().forEach((line, index) => { + let match; + + while ((match = tabRegex.exec(line)) !== null) { + if (allowIndentationTabs && !anyNonWhitespaceRegex.test(line.slice(0, match.index))) { + continue; + } - if (match) { context.report({ node, loc: { line: index + 1, - column: match.index + 1 + column: match.index }, message: "Unexpected tab character." }); diff --git a/tools/node_modules/eslint/lib/rules/no-unused-vars.js b/tools/node_modules/eslint/lib/rules/no-unused-vars.js index fff3e33d92355f..6f36813aca57a5 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-vars.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-vars.js @@ -469,7 +469,7 @@ module.exports = { const posteriorParams = params.slice(params.indexOf(variable) + 1); // If any used parameters occur after this parameter, do not report. - return !posteriorParams.some(v => v.references.length > 0); + return !posteriorParams.some(v => v.references.length > 0 || v.eslintUsed); } /** diff --git a/tools/node_modules/eslint/lib/rules/one-var.js b/tools/node_modules/eslint/lib/rules/one-var.js index 15b664d77a3ce9..3efd0f27f7f301 100644 --- a/tools/node_modules/eslint/lib/rules/one-var.js +++ b/tools/node_modules/eslint/lib/rules/one-var.js @@ -314,6 +314,11 @@ module.exports = { function splitDeclarations(declaration) { return fixer => declaration.declarations.map(declarator => { const tokenAfterDeclarator = sourceCode.getTokenAfter(declarator); + + if (tokenAfterDeclarator === null) { + return null; + } + const afterComma = sourceCode.getTokenAfter(tokenAfterDeclarator, { includeComments: true }); if (tokenAfterDeclarator.value !== ",") { diff --git a/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js b/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js index f571e1e2e33500..4af85fef015aad 100644 --- a/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js +++ b/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js @@ -353,6 +353,9 @@ const StatementTypes = { node.type === "ExpressionStatement" && !isDirectivePrologue(node, sourceCode) }, + iife: { + test: isIIFEStatement + }, "multiline-block-like": { test: (node, sourceCode) => node.loc.start.line !== node.loc.end.line && diff --git a/tools/node_modules/eslint/lib/rules/space-infix-ops.js b/tools/node_modules/eslint/lib/rules/space-infix-ops.js index 49b64658d190e0..17b49cc1184ca1 100644 --- a/tools/node_modules/eslint/lib/rules/space-infix-ops.js +++ b/tools/node_modules/eslint/lib/rules/space-infix-ops.js @@ -34,37 +34,25 @@ module.exports = { create(context) { const int32Hint = context.options[0] ? context.options[0].int32Hint === true : false; - - const OPERATORS = [ - "*", "/", "%", "+", "-", "<<", ">>", ">>>", "<", "<=", ">", ">=", "in", - "instanceof", "==", "!=", "===", "!==", "&", "^", "|", "&&", "||", "=", - "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "&=", "^=", "|=", - "?", ":", ",", "**" - ]; - const sourceCode = context.getSourceCode(); /** * Returns the first token which violates the rule * @param {ASTNode} left - The left node of the main node * @param {ASTNode} right - The right node of the main node + * @param {string} op - The operator of the main node * @returns {Object} The violator token or null * @private */ - function getFirstNonSpacedToken(left, right) { - const tokens = sourceCode.getTokensBetween(left, right, 1); - - for (let i = 1, l = tokens.length - 1; i < l; ++i) { - const op = tokens[i]; - - if ( - (op.type === "Punctuator" || op.type === "Keyword") && - OPERATORS.indexOf(op.value) >= 0 && - (tokens[i - 1].range[1] >= op.range[0] || op.range[1] >= tokens[i + 1].range[0]) - ) { - return op; - } + function getFirstNonSpacedToken(left, right, op) { + const operator = sourceCode.getFirstTokenBetween(left, right, token => token.value === op); + const prev = sourceCode.getTokenBefore(operator); + const next = sourceCode.getTokenAfter(operator); + + if (!sourceCode.isSpaceBetweenTokens(prev, operator) || !sourceCode.isSpaceBetweenTokens(operator, next)) { + return operator; } + return null; } @@ -110,7 +98,10 @@ module.exports = { const leftNode = (node.left.typeAnnotation) ? node.left.typeAnnotation : node.left; const rightNode = node.right; - const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode); + // search for = in AssignmentPattern nodes + const operator = node.operator || "="; + + const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode, operator); if (nonSpacedNode) { if (!(int32Hint && sourceCode.getText(node).endsWith("|0"))) { @@ -126,8 +117,8 @@ module.exports = { * @private */ function checkConditional(node) { - const nonSpacedConsequesntNode = getFirstNonSpacedToken(node.test, node.consequent); - const nonSpacedAlternateNode = getFirstNonSpacedToken(node.consequent, node.alternate); + const nonSpacedConsequesntNode = getFirstNonSpacedToken(node.test, node.consequent, "?"); + const nonSpacedAlternateNode = getFirstNonSpacedToken(node.consequent, node.alternate, ":"); if (nonSpacedConsequesntNode) { report(node, nonSpacedConsequesntNode); @@ -147,7 +138,7 @@ module.exports = { const rightNode = node.init; if (rightNode) { - const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode); + const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode, "="); if (nonSpacedNode) { report(node, nonSpacedNode); diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/LICENSE b/tools/node_modules/eslint/node_modules/ajv-keywords/LICENSE deleted file mode 100644 index 90139aa74cef2d..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/README.md b/tools/node_modules/eslint/node_modules/ajv-keywords/README.md deleted file mode 100644 index 6b630be1ec23a8..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/README.md +++ /dev/null @@ -1,683 +0,0 @@ -# ajv-keywords - -Custom JSON-Schema keywords for [Ajv](https://github.com/epoberezkin/ajv) validator - -[![Build Status](https://travis-ci.org/epoberezkin/ajv-keywords.svg?branch=master)](https://travis-ci.org/epoberezkin/ajv-keywords) -[![npm](https://img.shields.io/npm/v/ajv-keywords.svg)](https://www.npmjs.com/package/ajv-keywords) -[![npm downloads](https://img.shields.io/npm/dm/ajv-keywords.svg)](https://www.npmjs.com/package/ajv-keywords) -[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/ajv-keywords/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/ajv-keywords?branch=master) -[![Greenkeeper badge](https://badges.greenkeeper.io/epoberezkin/ajv-keywords.svg)](https://greenkeeper.io/) -[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv) - - -## Contents - -- [Install](#install) -- [Usage](#usage) -- [Keywords](#keywords) - - [typeof](#typeof) - - [instanceof](#instanceof) - - [range and exclusiveRange](#range-and-exclusiverange) - - [switch](#switch) - - [select/selectCases/selectDefault](#selectselectcasesselectdefault) (BETA) - - [patternRequired](#patternrequired) - - [prohibited](#prohibited) - - [deepProperties](#deepproperties) - - [deepRequired](#deeprequired) - - [uniqueItemProperties](#uniqueitemproperties) - - [regexp](#regexp) - - [formatMaximum / formatMinimum and formatExclusiveMaximum / formatExclusiveMinimum](#formatmaximum--formatminimum-and-formatexclusivemaximum--formatexclusiveminimum) - - [dynamicDefaults](#dynamicdefaults) - - [transform](#transform) -- [License](#license) - - -## Install - -``` -npm install ajv-keywords -``` - - -## Usage - -To add all available keywords: - -```javascript -var Ajv = require('ajv'); -var ajv = new Ajv; -require('ajv-keywords')(ajv); - -ajv.validate({ instanceof: 'RegExp' }, /.*/); // true -ajv.validate({ instanceof: 'RegExp' }, '.*'); // false -``` - -To add a single keyword: - -```javascript -require('ajv-keywords')(ajv, 'instanceof'); -``` - -To add multiple keywords: - -```javascript -require('ajv-keywords')(ajv, ['typeof', 'instanceof']); -``` - -To add a single keyword in browser (to avoid adding unused code): - -```javascript -require('ajv-keywords/keywords/instanceof')(ajv); -``` - - -## Keywords - -### `typeof` - -Based on JavaScript `typeof` operation. - -The value of the keyword should be a string (`"undefined"`, `"string"`, `"number"`, `"object"`, `"function"`, `"boolean"` or `"symbol"`) or array of strings. - -To pass validation the result of `typeof` operation on the value should be equal to the string (or one of the strings in the array). - -``` -ajv.validate({ typeof: 'undefined' }, undefined); // true -ajv.validate({ typeof: 'undefined' }, null); // false -ajv.validate({ typeof: ['undefined', 'object'] }, null); // true -``` - - -### `instanceof` - -Based on JavaScript `instanceof` operation. - -The value of the keyword should be a string (`"Object"`, `"Array"`, `"Function"`, `"Number"`, `"String"`, `"Date"`, `"RegExp"`, `"Promise"` or `"Buffer"`) or array of strings. - -To pass validation the result of `data instanceof ...` operation on the value should be true: - -``` -ajv.validate({ instanceof: 'Array' }, []); // true -ajv.validate({ instanceof: 'Array' }, {}); // false -ajv.validate({ instanceof: ['Array', 'Function'] }, function(){}); // true -``` - -You can add your own constructor function to be recognised by this keyword: - -```javascript -function MyClass() {} -var instanceofDefinition = require('ajv-keywords').get('instanceof').definition; -// or require('ajv-keywords/keywords/instanceof').definition; -instanceofDefinition.CONSTRUCTORS.MyClass = MyClass; - -ajv.validate({ instanceof: 'MyClass' }, new MyClass); // true -``` - - -### `range` and `exclusiveRange` - -Syntax sugar for the combination of minimum and maximum keywords, also fails schema compilation if there are no numbers in the range. - -The value of this keyword must be the array consisting of two numbers, the second must be greater or equal than the first one. - -If the validated value is not a number the validation passes, otherwise to pass validation the value should be greater (or equal) than the first number and smaller (or equal) than the second number in the array. If `exclusiveRange` keyword is present in the same schema and its value is true, the validated value must not be equal to the range boundaries. - -```javascript -var schema = { range: [1, 3] }; -ajv.validate(schema, 1); // true -ajv.validate(schema, 2); // true -ajv.validate(schema, 3); // true -ajv.validate(schema, 0.99); // false -ajv.validate(schema, 3.01); // false - -var schema = { range: [1, 3], exclusiveRange: true }; -ajv.validate(schema, 1.01); // true -ajv.validate(schema, 2); // true -ajv.validate(schema, 2.99); // true -ajv.validate(schema, 1); // false -ajv.validate(schema, 3); // false -``` - - -### `switch` - -This keyword allows to perform advanced conditional validation. - -The value of the keyword is the array of if/then clauses. Each clause is the object with the following properties: - -- `if` (optional) - the value is JSON-schema -- `then` (required) - the value is JSON-schema or boolean -- `continue` (optional) - the value is boolean - -The validation process is dynamic; all clauses are executed sequentially in the following way: - -1. `if`: - 1. `if` property is JSON-schema according to which the data is: - 1. valid => go to step 2. - 2. invalid => go to the NEXT clause, if this was the last clause the validation of `switch` SUCCEEDS. - 2. `if` property is absent => go to step 2. -2. `then`: - 1. `then` property is `true` or it is JSON-schema according to which the data is valid => go to step 3. - 2. `then` property is `false` or it is JSON-schema according to which the data is invalid => the validation of `switch` FAILS. -3. `continue`: - 1. `continue` property is `true` => go to the NEXT clause, if this was the last clause the validation of `switch` SUCCEEDS. - 2. `continue` property is `false` or absent => validation of `switch` SUCCEEDS. - -```javascript -require('ajv-keywords')(ajv, 'switch'); - -var schema = { - type: 'array', - items: { - type: 'integer', - 'switch': [ - { if: { not: { minimum: 1 } }, then: false }, - { if: { maximum: 10 }, then: true }, - { if: { maximum: 100 }, then: { multipleOf: 10 } }, - { if: { maximum: 1000 }, then: { multipleOf: 100 } }, - { then: false } - ] - } -}; - -var validItems = [1, 5, 10, 20, 50, 100, 200, 500, 1000]; - -var invalidItems = [1, 0, 2000, 11, 57, 123, 'foo']; -``` - -__Please note__: this keyword is moved here from Ajv, mainly to preserve backward compatibility. It is unlikely to become a standard. It's preferable to use `if`/`then`/`else` keywords if possible, as they are likely to be added to the standard. The above schema is equivalent to (for example): - -```javascript -{ - type: 'array', - items: { - type: 'integer', - if: { minimum: 1, maximum: 10 }, - then: true, - else: { - if: { maximum: 100 }, - then: { multipleOf: 10 }, - else: { - if: { maximum: 1000 }, - then: { multipleOf: 100 }, - else: false - } - } - } -} -``` - - -### `select`/`selectCases`/`selectDefault` - -These keywords allow to choose the schema to validate the data based on the value of some property in the validated data. - -These keywords must be present in the same schema object (`selectDefault` is optional). - -The value of `select` keyword should be a [$data reference](https://github.com/epoberezkin/ajv/tree/5.0.2-beta.0#data-reference) that points to any primitive JSON type (string, number, boolean or null) in the data that is validated. You can also use a constant of primitive type as the value of this keyword (e.g., for debugging purposes). - -The value of `selectCases` keyword must be an object where each property name is a possible string representation of the value of `select` keyword and each property value is a corresponding schema (from draft-06 it can be boolean) that must be used to validate the data. - -The value of `selectDefault` keyword is a schema (from draft-06 it can be boolean) that must be used to validate the data in case `selectCases` has no key equal to the stringified value of `select` keyword. - -The validation succeeds in one of the following cases: -- the validation of data using selected schema succeeds, -- none of the schemas is selected for validation, -- the value of select is undefined (no property in the data that the data reference points to). - -If `select` value (in data) is not a primitive type the validation fails. - -__Please note__: these keywords require Ajv `$data` option to support [$data reference](https://github.com/epoberezkin/ajv/tree/5.0.2-beta.0#data-reference). - - -```javascript -require('ajv-keywords')(ajv, 'select'); - -var schema = { - type: object, - required: ['kind'], - properties: { - kind: { type: 'string' } - }, - select: { $data: '0/kind' }, - selectCases: { - foo: { - required: ['foo'], - properties: { - kind: {}, - foo: { type: 'string' } - }, - additionalProperties: false - }, - bar: { - required: ['bar'], - properties: { - kind: {}, - bar: { type: 'number' } - }, - additionalProperties: false - } - }, - selectDefault: { - propertyNames: { - not: { enum: ['foo', 'bar'] } - } - } -}; - -var validDataList = [ - { kind: 'foo', foo: 'any' }, - { kind: 'bar', bar: 1 }, - { kind: 'anything_else', not_bar_or_foo: 'any value' } -]; - -var invalidDataList = [ - { kind: 'foo' }, // no propery foo - { kind: 'bar' }, // no propery bar - { kind: 'foo', foo: 'any', another: 'any value' }, // additional property - { kind: 'bar', bar: 1, another: 'any value' }, // additional property - { kind: 'anything_else', foo: 'any' } // property foo not allowed - { kind: 'anything_else', bar: 1 } // property bar not allowed -]; -``` - -__Please note__: the current implementation is BETA. It does not allow using relative URIs in $ref keywords in schemas in `selectCases` and `selectDefault` that point outside of these schemas. The workaround is to use absolute URIs (that can point to any (sub-)schema added to Ajv, including those inside the current root schema where `select` is used). See [tests](https://github.com/epoberezkin/ajv-keywords/blob/v2.0.0/spec/tests/select.json#L314). - - -### `patternRequired` - -This keyword allows to require the presence of properties that match some pattern(s). - -This keyword applies only to objects. If the data is not an object, the validation succeeds. - -The value of this keyword should be an array of strings, each string being a regular expression. For data object to be valid each regular expression in this array should match at least one property name in the data object. - -If the array contains multiple regular expressions, more than one expression can match the same property name. - -```javascript -var schema = { patternRequired: [ 'f.*o', 'b.*r' ] }; - -var validData = { foo: 1, bar: 2 }; -var alsoValidData = { foobar: 3 }; - -var invalidDataList = [ {}, { foo: 1 }, { bar: 2 } ]; -``` - - -### `prohibited` - -This keyword allows to prohibit that any of the properties in the list is present in the object. - -This keyword applies only to objects. If the data is not an object, the validation succeeds. - -The value of this keyword should be an array of strings, each string being a property name. For data object to be valid none of the properties in this array should be present in the object. - -``` -var schema = { prohibited: ['foo', 'bar']}; - -var validData = { baz: 1 }; -var alsoValidData = {}; - -var invalidDataList = [ - { foo: 1 }, - { bar: 2 }, - { foo: 1, bar: 2} -]; -``` - - -### `deepProperties` - -This keyword allows to validate deep properties (identified by JSON pointers). - -This keyword applies only to objects. If the data is not an object, the validation succeeds. - -The value should be an object, where keys are JSON pointers to the data, starting from the current position in data, and the values are JSON schemas. For data object to be valid the value of each JSON pointer should be valid according to the corresponding schema. - -```javascript -var schema = { - type: 'object', - deepProperties: { - "/users/1/role": { "enum": ["admin"] } - } -}; - -var validData = { - users: [ - {}, - { - id: 123, - role: 'admin' - } - ] -}; - -var alsoValidData = { - users: { - "1": { - id: 123, - role: 'admin' - } - } -}; - -var invalidData = { - users: [ - {}, - { - id: 123, - role: 'user' - } - ] -}; - -var alsoInvalidData = { - users: { - "1": { - id: 123, - role: 'user' - } - } -}; -``` - - -### `deepRequired` - -This keyword allows to check that some deep properties (identified by JSON pointers) are available. - -This keyword applies only to objects. If the data is not an object, the validation succeeds. - -The value should be an array of JSON pointers to the data, starting from the current position in data. For data object to be valid each JSON pointer should be some existing part of the data. - -```javascript -var schema = { - type: 'object', - deepRequired: ["/users/1/role"] -}; - -var validData = { - users: [ - {}, - { - id: 123, - role: 'admin' - } - ] -}; - -var invalidData = { - users: [ - {}, - { - id: 123 - } - ] -}; -``` - -See [json-schema-org/json-schema-spec#203](https://github.com/json-schema-org/json-schema-spec/issues/203#issue-197211916) for an example of the equivalent schema without `deepRequired` keyword. - - -### `uniqueItemProperties` - -The keyword allows to check that some properties in array items are unique. - -This keyword applies only to arrays. If the data is not an array, the validation succeeds. - -The value of this keyword must be an array of strings - property names that should have unique values across all items. - -```javascript -var schema = { uniqueItemProperties: [ "id", "name" ] }; - -var validData = [ - { id: 1 }, - { id: 2 }, - { id: 3 } -]; - -var invalidData1 = [ - { id: 1 }, - { id: 1 }, - { id: 3 } -]; - -var invalidData2 = [ - { id: 1, name: "taco" }, - { id: 2, name: "taco" }, // duplicate "name" - { id: 3, name: "salsa" } -]; -``` - -This keyword is contributed by [@blainesch](https://github.com/blainesch). - - -### `regexp` - -This keyword allows to use regular expressions with flags in schemas (the standard `pattern` keyword does not support flags). - -This keyword applies only to strings. If the data is not a string, the validation succeeds. - -The value of this keyword can be either a string (the result of `regexp.toString()`) or an object with the properties `pattern` and `flags` (the same strings that should be passed to RegExp constructor). - -```javascript -var schema = { - type: 'object', - properties: { - foo: { regexp: '/foo/i' }, - bar: { regexp: { pattern: 'bar', flags: 'i' } } - } -}; - -var validData = { - foo: 'Food', - bar: 'Barmen' -}; - -var invalidData = { - foo: 'fog', - bar: 'bad' -}; -``` - - -### `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` - -These keywords allow to define minimum/maximum constraints when the format keyword defines ordering. - -These keywords apply only to strings. If the data is not a string, the validation succeeds. - -The value of keyword `formatMaximum` (`formatMinimum`) should be a string. This value is the maximum (minimum) allowed value for the data to be valid as determined by `format` keyword. - -When this keyword is added, it defines comparison rules for formats `"date"`, `"time"` and `"date-time". Custom formats also can have comparison rules. See [addFormat](https://github.com/epoberezkin/ajv#api-addformat) method. - -The value of keyword `formatExclusiveMaximum` (`formatExclusiveMinimum`) should be a boolean value. These keyword cannot be used without `formatMaximum` (`formatMinimum`). If this keyword value is equal to `true`, the data to be valid should not be equal to the value in `formatMaximum` (`formatMinimum`) keyword. - -```javascript -require('ajv-keywords')(ajv, ['formatMinimum', 'formatMaximum']); - -var schema = { - format: 'date', - formatMinimum: '2016-02-06', - formatMaximum: '2016-12-27', - formatExclusiveMaximum: true -} - -var validDataList = ['2016-02-06', '2016-12-26', 1]; - -var invalidDataList = ['2016-02-05', '2016-12-27', 'abc']; -``` - - -### `dynamicDefaults` - -This keyword allows to assign dynamic defaults to properties, such as timestamps, unique IDs etc. - -This keyword only works if `useDefaults` options is used and not inside `anyOf` keywrods etc., in the same way as [default keyword treated by Ajv](https://github.com/epoberezkin/ajv#assigning-defaults). - -The keyword should be added on the object level. Its value should be an object with each property corresponding to a property name, in the same way as in standard `properties` keyword. The value of each property can be: - -- an identifier of default function (a string) -- an object with properties `func` (an identifier) and `args` (an object with parameters that will be passed to this function during schema compilation - see examples). - -The properties used in `dynamicDefaults` should not be added to `required` keyword (or validation will fail), because unlike `default` this keyword is processed after validation. - -There are several predefined dynamic default functions: - -- `"timestamp"` - current timestamp in milliseconds -- `"datetime"` - current date and time as string (ISO, valid according to `date-time` format) -- `"date"` - current date as string (ISO, valid according to `date` format) -- `"time"` - current time as string (ISO, valid according to `time` format) -- `"random"` - pseudo-random number in [0, 1) interval -- `"randomint"` - pseudo-random integer number. If string is used as a property value, the function will randomly return 0 or 1. If object `{func: 'randomint', max: N}` is used then the default will be an integer number in [0, N) interval. -- `"seq"` - sequential integer number starting from 0. If string is used as a property value, the default sequence will be used. If object `{func: 'seq', name: 'foo'}` is used then the sequence with name `"foo"` will be used. Sequences are global, even if different ajv instances are used. - -```javascript -var schema = { - type: 'object', - dynamicDefaults: { - ts: 'datetime', - r: { func: 'randomint', max: 100 }, - id: { func: 'seq', name: 'id' } - }, - properties: { - ts: { - type: 'string', - format: 'datetime' - }, - r: { - type: 'integer', - minimum: 0, - maximum: 100, - exclusiveMaximum: true - }, - id: { - type: 'integer', - minimum: 0 - } - } -}; - -var data = {}; -ajv.validate(data); // true -data; // { ts: '2016-12-01T22:07:28.829Z', r: 25, id: 0 } - -var data1 = {}; -ajv.validate(data1); // true -data1; // { ts: '2016-12-01T22:07:29.832Z', r: 68, id: 1 } - -ajv.validate(data1); // true -data1; // didn't change, as all properties were defined -``` - -You can add your own dynamic default function to be recognised by this keyword: - -```javascript -var uuid = require('uuid'); - -function uuidV4() { return uuid.v4(); } - -var definition = require('ajv-keywords').get('dynamicDefaults').definition; -// or require('ajv-keywords/keywords/dynamicDefaults').definition; -definition.DEFAULTS.uuid = uuidV4; - -var schema = { - dynamicDefaults: { id: 'uuid' }, - properties: { id: { type: 'string', format: 'uuid' } } -}; - -var data = {}; -ajv.validate(schema, data); // true -data; // { id: 'a1183fbe-697b-4030-9bcc-cfeb282a9150' }; - -var data1 = {}; -ajv.validate(schema, data1); // true -data1; // { id: '5b008de7-1669-467a-a5c6-70fa244d7209' } -``` - -You also can define dynamic default that accepts parameters, e.g. version of uuid: - -```javascript -var uuid = require('uuid'); - -function getUuid(args) { - var version = 'v' + (arvs && args.v || 4); - return function() { - return uuid[version](); - }; -} - -var definition = require('ajv-keywords').get('dynamicDefaults').definition; -definition.DEFAULTS.uuid = getUuid; - -var schema = { - dynamicDefaults: { - id1: 'uuid', // v4 - id2: { func: 'uuid', v: 4 }, // v4 - id3: { func: 'uuid', v: 1 } // v1 - } -}; -``` - -### `transform` - -This keyword allows a string to be modified before validation. - -These keywords apply only to strings. If the data is not a string, the transform is skipped. - -There are limitation due to how ajv is written: -- a stand alone string cannot be transformed. ie `data = 'a'; ajv.validate(schema, data);` -- currently cannot work with `ajv-pack` - -**Supported options:** -- `trim`: remove whitespace from start and end -- `trimLeft`: remove whitespace from start -- `trimRight`: remove whitespace from end -- `toLowerCase`: case string to all lower case -- `toUpperCase`: case string to all upper case -- `toEnumCase`: case string to match case in schema - -Options are applied in the order they are listed. - -Note: `toEnumCase` requires that all allowed values are unique when case insensitive. - -**Example: multiple options** -```javascript -require('ajv-keywords')(ajv, ['transform']); - -var schema = { - type: 'array', - items: { - type:'string', - transform:['trim','lowercase'] - } -}; - -var data = [' MixCase ']; -avj.validate(schema, data); -console.log(data); // ['mixcase'] - -``` - -**Example: `enumcase`** -```javascript -require('ajv-keywords')(ajv, ['transform']); - -var schema = { - type: 'array', - items: { - type:'string', - transform:['trim','enumcase'], - enum:['pH'] - } -}; - -var data = ['ph',' Ph','PH','pH ']; -avj.validate(schema, data); -console.log(data); // ['pH','pH','pH','pH'] -``` - - -## License - -[MIT](https://github.com/epoberezkin/ajv-keywords/blob/master/LICENSE) diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/index.js b/tools/node_modules/eslint/node_modules/ajv-keywords/index.js deleted file mode 100644 index 07a8edabc1c5ce..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var KEYWORDS = require('./keywords'); - -module.exports = defineKeywords; - - -/** - * Defines one or several keywords in ajv instance - * @param {Ajv} ajv validator instance - * @param {String|Array|undefined} keyword keyword(s) to define - * @return {Ajv} ajv instance (for chaining) - */ -function defineKeywords(ajv, keyword) { - if (Array.isArray(keyword)) { - for (var i=0; i d2) return 1; - if (d1 < d2) return -1; - if (d1 === d2) return 0; -} - - -function compareTime(t1, t2) { - if (!(t1 && t2)) return; - t1 = t1.match(TIME); - t2 = t2.match(TIME); - if (!(t1 && t2)) return; - t1 = t1[1] + t1[2] + t1[3] + (t1[4]||''); - t2 = t2[1] + t2[2] + t2[3] + (t2[4]||''); - if (t1 > t2) return 1; - if (t1 < t2) return -1; - if (t1 === t2) return 0; -} - - -function compareDateTime(dt1, dt2) { - if (!(dt1 && dt2)) return; - dt1 = dt1.split(DATE_TIME_SEPARATOR); - dt2 = dt2.split(DATE_TIME_SEPARATOR); - var res = compareDate(dt1[0], dt2[0]); - if (res === undefined) return; - return res || compareTime(dt1[1], dt2[1]); -} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/_util.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/_util.js deleted file mode 100644 index eebd07aad9646b..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/_util.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -module.exports = { - metaSchemaRef: metaSchemaRef -}; - -var META_SCHEMA_ID = 'http://json-schema.org/draft-06/schema'; - -function metaSchemaRef(ajv) { - var defaultMeta = ajv._opts.defaultMeta; - if (typeof defaultMeta == 'string') return { $ref: defaultMeta }; - if (ajv.getSchema(META_SCHEMA_ID)) return { $ref: META_SCHEMA_ID }; - console.warn('meta schema not defined'); - return {}; -} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/deepProperties.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/deepProperties.js deleted file mode 100644 index 3dac5fb55f0f15..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/deepProperties.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var util = require('./_util'); - -module.exports = function defFunc(ajv) { - defFunc.definition = { - type: 'object', - macro: function (schema) { - var schemas = []; - for (var pointer in schema) - schemas.push(getSchema(pointer, schema[pointer])); - return { 'allOf': schemas }; - }, - metaSchema: { - type: 'object', - propertyNames: { - type: 'string', - format: 'json-pointer' - }, - additionalProperties: util.metaSchemaRef(ajv) - } - }; - - ajv.addKeyword('deepProperties', defFunc.definition); - return ajv; -}; - - -function getSchema(jsonPointer, schema) { - var segments = jsonPointer.split('/'); - var rootSchema = {}; - var pointerSchema = rootSchema; - for (var i=1; i' - , $result = 'result' + $lvl; -}} - -{{# def.$data }} - - -{{? $isDataExcl }} - {{ - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) - , $exclusive = 'exclusive' + $lvl - , $opExpr = 'op' + $lvl - , $opStr = '\' + ' + $opExpr + ' + \''; - }} - var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; - {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} - - if (typeof {{=$schemaValueExcl}} != 'boolean' && {{=$schemaValueExcl}} !== undefined) { - {{=$valid}} = false; - {{ var $errorKeyword = $exclusiveKeyword; }} - {{# def.error:'_formatExclusiveLimit' }} - } - - {{# def.elseIfValid }} - - {{# def.compareFormat }} - var {{=$exclusive}} = {{=$schemaValueExcl}} === true; - - if ({{=$valid}} === undefined) { - {{=$valid}} = {{=$exclusive}} - ? {{=$result}} {{=$op}} 0 - : {{=$result}} {{=$op}}= 0; - } - - if (!{{=$valid}}) var op{{=$lvl}} = {{=$exclusive}} ? '{{=$op}}' : '{{=$op}}='; -{{??}} - {{ - var $exclusive = $schemaExcl === true - , $opStr = $op; /*used in error*/ - if (!$exclusive) $opStr += '='; - var $opExpr = '\'' + $opStr + '\''; /*used in error*/ - }} - - {{# def.compareFormat }} - - if ({{=$valid}} === undefined) - {{=$valid}} = {{=$result}} {{=$op}}{{?!$exclusive}}={{?}} 0; -{{?}} - -{{= $closingBraces }} - -if (!{{=$valid}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_formatLimit' }} -} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/patternRequired.jst b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/patternRequired.jst deleted file mode 100644 index 6f82f6265e65ac..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/patternRequired.jst +++ /dev/null @@ -1,33 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} - -{{ - var $key = 'key' + $lvl - , $idx = 'idx' + $lvl - , $matched = 'patternMatched' + $lvl - , $dataProperties = 'dataProperties' + $lvl - , $closingBraces = '' - , $ownProperties = it.opts.ownProperties; -}} - -var {{=$valid}} = true; -{{? $ownProperties }} - var {{=$dataProperties}} = undefined; -{{?}} - -{{~ $schema:$pProperty }} - var {{=$matched}} = false; - {{# def.iterateProperties }} - {{=$matched}} = {{= it.usePattern($pProperty) }}.test({{=$key}}); - if ({{=$matched}}) break; - } - - {{ var $missingPattern = it.util.escapeQuotes($pProperty); }} - if (!{{=$matched}}) { - {{=$valid}} = false; - {{# def.addError:'patternRequired' }} - } {{# def.elseIfValid }} -{{~}} - -{{= $closingBraces }} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/switch.jst b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/switch.jst deleted file mode 100644 index 389678e3453f95..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dot/switch.jst +++ /dev/null @@ -1,73 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateIf: - {{# def.setCompositeRule }} - {{ $it.createErrors = false; }} - {{# def._validateSwitchRule:if }} - {{ $it.createErrors = true; }} - {{# def.resetCompositeRule }} - {{=$ifPassed}} = {{=$nextValid}}; -#}} - -{{## def.validateThen: - {{? typeof $sch.then == 'boolean' }} - {{? $sch.then === false }} - {{# def.error:'switch' }} - {{?}} - var {{=$nextValid}} = {{= $sch.then }}; - {{??}} - {{# def._validateSwitchRule:then }} - {{?}} -#}} - -{{## def._validateSwitchRule:_clause: - {{ - $it.schema = $sch._clause; - $it.schemaPath = $schemaPath + '[' + $caseIndex + ']._clause'; - $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/_clause'; - }} - {{# def.insertSubschemaCode }} -#}} - -{{## def.switchCase: - {{? $sch.if && {{# def.nonEmptySchema:$sch.if }} }} - var {{=$errs}} = errors; - {{# def.validateIf }} - if ({{=$ifPassed}}) { - {{# def.validateThen }} - } else { - {{# def.resetErrors }} - } - {{??}} - {{=$ifPassed}} = true; - {{# def.validateThen }} - {{?}} -#}} - - -{{ - var $ifPassed = 'ifPassed' + it.level - , $currentBaseId = $it.baseId - , $shouldContinue; -}} -var {{=$ifPassed}}; - -{{~ $schema:$sch:$caseIndex }} - {{? $caseIndex && !$shouldContinue }} - if (!{{=$ifPassed}}) { - {{ $closingBraces+= '}'; }} - {{?}} - - {{# def.switchCase }} - {{ $shouldContinue = $sch.continue }} -{{~}} - -{{= $closingBraces }} - -var {{=$valid}} = {{=$nextValid}}; - -{{# def.cleanUp }} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/README.md b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/README.md deleted file mode 100644 index e2846c86bfa38f..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -These files are compiled dot templates from dot folder. - -Do NOT edit them directly, edit the templates and run `npm run build` from main ajv-keywords folder. diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/_formatLimit.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/_formatLimit.js deleted file mode 100644 index fc56e20648913a..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/_formatLimit.js +++ /dev/null @@ -1,176 +0,0 @@ -'use strict'; -module.exports = function generate__formatLimit(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - out += 'var ' + ($valid) + ' = undefined;'; - if (it.opts.format === false) { - out += ' ' + ($valid) + ' = true; '; - return out; - } - var $schemaFormat = it.schema.format, - $isDataFormat = it.opts.$data && $schemaFormat.$data, - $closingBraces = ''; - if ($isDataFormat) { - var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr), - $format = 'format' + $lvl, - $compare = 'compare' + $lvl; - out += ' var ' + ($format) + ' = formats[' + ($schemaValueFormat) + '] , ' + ($compare) + ' = ' + ($format) + ' && ' + ($format) + '.compare;'; - } else { - var $format = it.formats[$schemaFormat]; - if (!($format && $format.compare)) { - out += ' ' + ($valid) + ' = true; '; - return out; - } - var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare'; - } - var $isMax = $keyword == 'formatMaximum', - $exclusiveKeyword = 'formatExclusive' + ($isMax ? 'Maximum' : 'Minimum'), - $schemaExcl = it.schema[$exclusiveKeyword], - $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, - $op = $isMax ? '<' : '>', - $result = 'result' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if ($isDataExcl) { - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), - $exclusive = 'exclusive' + $lvl, - $opExpr = 'op' + $lvl, - $opStr = '\' + ' + $opExpr + ' + \''; - out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; - $schemaValueExcl = 'schemaExcl' + $lvl; - out += ' if (typeof ' + ($schemaValueExcl) + ' != \'boolean\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; '; - var $errorKeyword = $exclusiveKeyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_formatExclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - $closingBraces += '}'; - out += ' else { '; - } - if ($isData) { - out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'string\') ' + ($valid) + ' = false; else { '; - $closingBraces += '}'; - } - if ($isDataFormat) { - out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { '; - $closingBraces += '}'; - } - out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var ' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = ' + ($exclusive) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';'; - } else { - var $exclusive = $schemaExcl === true, - $opStr = $op; - if (!$exclusive) $opStr += '='; - var $opExpr = '\'' + $opStr + '\''; - if ($isData) { - out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'string\') ' + ($valid) + ' = false; else { '; - $closingBraces += '}'; - } - if ($isDataFormat) { - out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { '; - $closingBraces += '}'; - } - out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op); - if (!$exclusive) { - out += '='; - } - out += ' 0;'; - } - out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_formatLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , exclusive: ' + ($exclusive) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be ' + ($opStr) + ' "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '}'; - return out; -} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/patternRequired.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/patternRequired.js deleted file mode 100644 index 31bd0b683a9b15..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/patternRequired.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; -module.exports = function generate_patternRequired(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $matched = 'patternMatched' + $lvl, - $dataProperties = 'dataProperties' + $lvl, - $closingBraces = '', - $ownProperties = it.opts.ownProperties; - out += 'var ' + ($valid) + ' = true;'; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined;'; - } - var arr1 = $schema; - if (arr1) { - var $pProperty, i1 = -1, - l1 = arr1.length - 1; - while (i1 < l1) { - $pProperty = arr1[i1 += 1]; - out += ' var ' + ($matched) + ' = false; '; - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } '; - var $missingPattern = it.util.escapeQuotes($pProperty); - out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('patternRequired') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingPattern: \'' + ($missingPattern) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should have property matching pattern \\\'' + ($missingPattern) + '\\\'\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; - if ($breakOnError) { - $closingBraces += '}'; - out += ' else { '; - } - } - } - out += '' + ($closingBraces); - return out; -} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/switch.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/switch.js deleted file mode 100644 index d6de28bf944f2b..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dotjs/switch.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict'; -module.exports = function generate_switch(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $ifPassed = 'ifPassed' + it.level, - $currentBaseId = $it.baseId, - $shouldContinue; - out += 'var ' + ($ifPassed) + ';'; - var arr1 = $schema; - if (arr1) { - var $sch, $caseIndex = -1, - l1 = arr1.length - 1; - while ($caseIndex < l1) { - $sch = arr1[$caseIndex += 1]; - if ($caseIndex && !$shouldContinue) { - out += ' if (!' + ($ifPassed) + ') { '; - $closingBraces += '}'; - } - if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) { - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.createErrors = false; - $it.schema = $sch.if; - $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if'; - $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - $it.createErrors = true; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($ifPassed) + ' = ' + ($nextValid) + '; if (' + ($ifPassed) + ') { '; - if (typeof $sch.then == 'boolean') { - if ($sch.then === false) { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('switch') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { caseIndex: ' + ($caseIndex) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should pass "switch" keyword validation\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } - out += ' var ' + ($nextValid) + ' = ' + ($sch.then) + '; '; - } else { - $it.schema = $sch.then; - $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then'; - $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } '; - } else { - out += ' ' + ($ifPassed) + ' = true; '; - if (typeof $sch.then == 'boolean') { - if ($sch.then === false) { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('switch') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { caseIndex: ' + ($caseIndex) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should pass "switch" keyword validation\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } - out += ' var ' + ($nextValid) + ' = ' + ($sch.then) + '; '; - } else { - $it.schema = $sch.then; - $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then'; - $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - } - } - $shouldContinue = $sch.continue - } - } - out += '' + ($closingBraces) + 'var ' + ($valid) + ' = ' + ($nextValid) + '; '; - out = it.util.cleanUpCode(out); - return out; -} diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dynamicDefaults.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dynamicDefaults.js deleted file mode 100644 index e6766d12117b56..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/dynamicDefaults.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -var sequences = {}; - -var DEFAULTS = { - timestamp: function() { return Date.now(); }, - datetime: function() { return (new Date).toISOString(); }, - date: function() { return (new Date).toISOString().slice(0, 10); }, - time: function() { return (new Date).toISOString().slice(11); }, - random: function() { return Math.random(); }, - randomint: function (args) { - var limit = args && args.max || 2; - return function() { return Math.floor(Math.random() * limit); }; - }, - seq: function (args) { - var name = args && args.name || ''; - sequences[name] = sequences[name] || 0; - return function() { return sequences[name]++; }; - } -}; - -module.exports = function defFunc(ajv) { - defFunc.definition = { - compile: function (schema, parentSchema, it) { - var funcs = {}; - - for (var key in schema) { - var d = schema[key]; - var func = getDefault(typeof d == 'string' ? d : d.func); - funcs[key] = func.length ? func(d.args) : func; - } - - return it.opts.useDefaults && !it.compositeRule - ? assignDefaults - : noop; - - function assignDefaults(data) { - for (var prop in schema) - if (data[prop] === undefined) data[prop] = funcs[prop](); - return true; - } - - function noop() { return true; } - }, - DEFAULTS: DEFAULTS, - metaSchema: { - type: 'object', - additionalProperties: { - type: ['string', 'object'], - additionalProperties: false, - required: ['func', 'args'], - properties: { - func: { type: 'string' }, - args: { type: 'object' } - } - } - } - }; - - ajv.addKeyword('dynamicDefaults', defFunc.definition); - return ajv; - - function getDefault(d) { - var def = DEFAULTS[d]; - if (def) return def; - throw new Error('invalid "dynamicDefaults" keyword property value: ' + d); - } -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMaximum.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMaximum.js deleted file mode 100644 index e7daabf85baa80..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMaximum.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./_formatLimit')('Maximum'); diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMinimum.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMinimum.js deleted file mode 100644 index eddd6e404b3352..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/formatMinimum.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./_formatLimit')('Minimum'); diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/index.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/index.js deleted file mode 100644 index 618ed0214689c9..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -module.exports = { - 'instanceof': require('./instanceof'), - range: require('./range'), - regexp: require('./regexp'), - 'typeof': require('./typeof'), - dynamicDefaults: require('./dynamicDefaults'), - prohibited: require('./prohibited'), - uniqueItemProperties: require('./uniqueItemProperties'), - deepProperties: require('./deepProperties'), - deepRequired: require('./deepRequired'), - formatMinimum: require('./formatMinimum'), - formatMaximum: require('./formatMaximum'), - patternRequired: require('./patternRequired'), - 'switch': require('./switch'), - select: require('./select'), - transform: require('./transform') -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/instanceof.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/instanceof.js deleted file mode 100644 index ea88f5ca396234..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/instanceof.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var CONSTRUCTORS = { - Object: Object, - Array: Array, - Function: Function, - Number: Number, - String: String, - Date: Date, - RegExp: RegExp -}; - -module.exports = function defFunc(ajv) { - /* istanbul ignore else */ - if (typeof Buffer != 'undefined') - CONSTRUCTORS.Buffer = Buffer; - - /* istanbul ignore else */ - if (typeof Promise != 'undefined') - CONSTRUCTORS.Promise = Promise; - - defFunc.definition = { - compile: function (schema) { - if (typeof schema == 'string') { - var Constructor = getConstructor(schema); - return function (data) { - return data instanceof Constructor; - }; - } - - var constructors = schema.map(getConstructor); - return function (data) { - for (var i=0; i max || (exclusive && min == max)) - throw new Error('There are no numbers in range'); - } -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/regexp.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/regexp.js deleted file mode 100644 index 84efbd666adf54..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/regexp.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -module.exports = function defFunc(ajv) { - defFunc.definition = { - type: 'string', - inline: function (it, keyword, schema) { - return getRegExp() + '.test(data' + (it.dataLevel || '') + ')'; - - function getRegExp() { - try { - if (typeof schema == 'object') - return new RegExp(schema.pattern, schema.flags); - - var rx = schema.match(/^\/(.*)\/([gimy]*)$/); - if (rx) return new RegExp(rx[1], rx[2]); - throw new Error('cannot parse string into RegExp'); - } catch(e) { - console.error('regular expression', schema, 'is invalid'); - throw e; - } - } - }, - metaSchema: { - type: ['string', 'object'], - properties: { - pattern: { type: 'string' }, - flags: { type: 'string' } - }, - required: ['pattern'], - additionalProperties: false - } - }; - - ajv.addKeyword('regexp', defFunc.definition); - return ajv; -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/select.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/select.js deleted file mode 100644 index f79c6c7a02e8ac..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/select.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -var util = require('./_util'); - -module.exports = function defFunc(ajv) { - if (!ajv._opts.$data) { - console.warn('keyword select requires $data option'); - return ajv; - } - var metaSchemaRef = util.metaSchemaRef(ajv); - var compiledCaseSchemas = []; - - defFunc.definition = { - validate: function v(schema, data, parentSchema) { - if (parentSchema.selectCases === undefined) - throw new Error('keyword "selectCases" is absent'); - var compiled = getCompiledSchemas(parentSchema, false); - var validate = compiled.cases[schema]; - if (validate === undefined) validate = compiled.default; - if (typeof validate == 'boolean') return validate; - var valid = validate(data); - if (!valid) v.errors = validate.errors; - return valid; - }, - $data: true, - metaSchema: { type: ['string', 'number', 'boolean', 'null'] } - }; - - ajv.addKeyword('select', defFunc.definition); - ajv.addKeyword('selectCases', { - compile: function (schemas, parentSchema) { - var compiled = getCompiledSchemas(parentSchema); - for (var value in schemas) - compiled.cases[value] = compileOrBoolean(schemas[value]); - return function() { return true; }; - }, - valid: true, - metaSchema: { - type: 'object', - additionalProperties: metaSchemaRef - } - }); - ajv.addKeyword('selectDefault', { - compile: function (schema, parentSchema) { - var compiled = getCompiledSchemas(parentSchema); - compiled.default = compileOrBoolean(schema); - return function() { return true; }; - }, - valid: true, - metaSchema: metaSchemaRef - }); - return ajv; - - - function getCompiledSchemas(parentSchema, create) { - var compiled; - compiledCaseSchemas.some(function (c) { - if (c.parentSchema === parentSchema) { - compiled = c; - return true; - } - }); - if (!compiled && create !== false) { - compiled = { - parentSchema: parentSchema, - cases: {}, - default: true - }; - compiledCaseSchemas.push(compiled); - } - return compiled; - } - - function compileOrBoolean(schema) { - return typeof schema == 'boolean' - ? schema - : ajv.compile(schema); - } -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/switch.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/switch.js deleted file mode 100644 index 5b0f3f830b18a7..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/switch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var util = require('./_util'); - -module.exports = function defFunc(ajv) { - if (ajv.RULES.keywords.switch && ajv.RULES.keywords.if) return; - - var metaSchemaRef = util.metaSchemaRef(ajv); - - defFunc.definition = { - inline: require('./dotjs/switch'), - statements: true, - errors: 'full', - metaSchema: { - type: 'array', - items: { - required: [ 'then' ], - properties: { - 'if': metaSchemaRef, - 'then': { - anyOf: [ - { type: 'boolean' }, - metaSchemaRef - ] - }, - 'continue': { type: 'boolean' } - }, - additionalProperties: false, - dependencies: { - 'continue': [ 'if' ] - } - } - } - }; - - ajv.addKeyword('switch', defFunc.definition); - return ajv; -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/transform.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/transform.js deleted file mode 100644 index 7ea069032832ab..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/transform.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -module.exports = function defFunc (ajv) { - defFunc.definition = { - type: 'string', - errors: false, - modifying: true, - valid: true, - compile: function (schema, parentSchema) { - - // build hash table to enum values - var hashtable = {}; - - if (schema.indexOf('toEnumCase') !== -1) { - // requires `enum` in schema - if (!parentSchema.enum) - throw new Error('Missing enum. To use `transform:["toEnumCase"]`, `enum:[...]` is required.'); - for (var i = parentSchema.enum.length; i--; i) { - var v = parentSchema.enum[i]; - if (typeof v !== 'string') continue; - var k = makeHashTableKey(v); - // requires all `enum` values have unique keys - if (hashtable[k]) - throw new Error('Invalid enum uniqueness. To use `transform:["toEnumCase"]`, all values must be unique when case insensitive.'); - hashtable[k] = v; - } - } - - var transform = { - trimLeft: function (value) { - return value.replace(/^[\s]+/, ''); - }, - trimRight: function (value) { - return value.replace(/[\s]+$/, ''); - }, - trim: function (value) { - return value.trim(); - }, - toLowerCase: function (value) { - return value.toLowerCase(); - }, - toUpperCase: function (value) { - return value.toUpperCase(); - }, - toEnumCase: function (value) { - return hashtable[makeHashTableKey(value)] || value; - } - }; - - return function (value, objectKey, object, key) { - // skip if value only - if (!object) return; - - // apply transform in order provided - for (var j = 0, l = schema.length; j < l; j++) { - if (typeof object[key] !== 'string') continue; - object[key] = transform[schema[j]](object[key]); - } - }; - }, - metaSchema: { - type: 'array', - items: { - type: 'string', - enum: [ - 'trimLeft', 'trimRight', 'trim', - 'toLowerCase', 'toUpperCase', 'toEnumCase' - ] - } - } - }; - - ajv.addKeyword('transform', defFunc.definition); - return ajv; - - function makeHashTableKey (value) { - return value.toLowerCase(); - } -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/typeof.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/typeof.js deleted file mode 100644 index 3a3574d83fa135..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/typeof.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var KNOWN_TYPES = ['undefined', 'string', 'number', 'object', 'function', 'boolean', 'symbol']; - -module.exports = function defFunc(ajv) { - defFunc.definition = { - inline: function (it, keyword, schema) { - var data = 'data' + (it.dataLevel || ''); - if (typeof schema == 'string') return 'typeof ' + data + ' == "' + schema + '"'; - schema = 'validate.schema' + it.schemaPath + '.' + keyword; - return schema + '.indexOf(typeof ' + data + ') >= 0'; - }, - metaSchema: { - anyOf: [ - { - type: 'string', - enum: KNOWN_TYPES - }, - { - type: 'array', - items: { - type: 'string', - enum: KNOWN_TYPES - } - } - ] - } - }; - - ajv.addKeyword('typeof', defFunc.definition); - return ajv; -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/uniqueItemProperties.js b/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/uniqueItemProperties.js deleted file mode 100644 index 2a8e7e841dbe65..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/keywords/uniqueItemProperties.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -module.exports = function defFunc(ajv) { - defFunc.definition = { - type: 'array', - compile: function(keys, parentSchema, it) { - var equal = it.util.equal; - return function(data) { - if (data.length > 1) { - for (var k=0; k < keys.length; k++) { - var key = keys[k]; - for (var i = data.length; i--;) { - if (typeof data[i] != 'object') continue; - for (var j = i; j--;) { - if (typeof data[j] == 'object' && equal(data[i][key], data[j][key])) - return false; - } - } - } - } - return true; - }; - }, - metaSchema: { - type: 'array', - items: {type: 'string'} - } - }; - - ajv.addKeyword('uniqueItemProperties', defFunc.definition); - return ajv; -}; diff --git a/tools/node_modules/eslint/node_modules/ajv-keywords/package.json b/tools/node_modules/eslint/node_modules/ajv-keywords/package.json deleted file mode 100644 index b1e163f8ba782b..00000000000000 --- a/tools/node_modules/eslint/node_modules/ajv-keywords/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "author": { - "name": "Evgeny Poberezkin" - }, - "bugs": { - "url": "https://github.com/epoberezkin/ajv-keywords/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Custom JSON-Schema keywords for Ajv validator", - "devDependencies": { - "ajv": "^6.0.0", - "ajv-pack": "^0.3.0", - "chai": "^4.0.2", - "coveralls": "^3.0.0", - "dot": "^1.1.1", - "eslint": "^4.9.0", - "glob": "^7.1.1", - "istanbul": "^0.4.3", - "js-beautify": "^1.7.4", - "json-schema-test": "^2.0.0", - "mocha": "^5.0.0", - "pre-commit": "^1.1.3", - "uuid": "^3.0.1" - }, - "files": [ - "index.js", - "keywords" - ], - "homepage": "https://github.com/epoberezkin/ajv-keywords#readme", - "keywords": [ - "JSON-Schema", - "ajv", - "keywords" - ], - "license": "MIT", - "main": "index.js", - "name": "ajv-keywords", - "peerDependencies": { - "ajv": "^6.0.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/epoberezkin/ajv-keywords.git" - }, - "scripts": { - "build": "node node_modules/ajv/scripts/compile-dots.js node_modules/ajv/lib keywords", - "eslint": "eslint index.js keywords/*.js", - "prepublish": "npm run build", - "test": "npm run build && npm run eslint && npm run test-cov", - "test-cov": "istanbul cover -x 'spec/**' node_modules/mocha/bin/_mocha -- spec/*.spec.js -R spec", - "test-spec": "mocha spec/*.spec.js -R spec" - }, - "version": "3.2.0" -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/color-name/README.md b/tools/node_modules/eslint/node_modules/color-name/README.md index 3611a6b523fe85..932b979176f33b 100644 --- a/tools/node_modules/eslint/node_modules/color-name/README.md +++ b/tools/node_modules/eslint/node_modules/color-name/README.md @@ -1,11 +1,11 @@ -A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. - -[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) - - -```js -var colors = require('color-name'); -colors.red //[255,0,0] -``` - - +A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. + +[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) + + +```js +var colors = require('color-name'); +colors.red //[255,0,0] +``` + + diff --git a/tools/node_modules/eslint/node_modules/color-name/index.js b/tools/node_modules/eslint/node_modules/color-name/index.js index 53251f94581b9b..b7c198a6f3d7c5 100644 --- a/tools/node_modules/eslint/node_modules/color-name/index.js +++ b/tools/node_modules/eslint/node_modules/color-name/index.js @@ -1,14 +1,14 @@ -'use strict' - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], "blanchedalmond": [255, 235, 205], "blue": [0, 0, 255], "blueviolet": [138, 43, 226], @@ -140,13 +140,13 @@ module.exports = { "steelblue": [70, 130, 180], "tan": [210, 180, 140], "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; diff --git a/tools/node_modules/eslint/node_modules/debug/README.md b/tools/node_modules/eslint/node_modules/debug/README.md index b6e88368a0651c..88dae35d9fc958 100644 --- a/tools/node_modules/eslint/node_modules/debug/README.md +++ b/tools/node_modules/eslint/node_modules/debug/README.md @@ -269,7 +269,7 @@ log('still goes to stdout, but via console.info now'); ``` ## Extend -You can simply extend debugger +You can simply extend debugger ```js const log = require('debug')('auth'); @@ -299,24 +299,42 @@ console.log(3, debug.enabled('test')); ``` -print : +print : ``` 1 false 2 true 3 false ``` -Usage : -`enable(namespaces)` +Usage : +`enable(namespaces)` `namespaces` can include modes separated by a colon and wildcards. - -Note that calling `enable()` completely overrides previously set DEBUG variable : + +Note that calling `enable()` completely overrides previously set DEBUG variable : ``` $ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' => false ``` +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + ## Checking whether a debug target is enabled After you've created a debug instance, you can determine whether or not it is diff --git a/tools/node_modules/eslint/node_modules/debug/dist/debug.js b/tools/node_modules/eslint/node_modules/debug/dist/debug.js index 33951e1642fa80..f271e01c86b44e 100644 --- a/tools/node_modules/eslint/node_modules/debug/dist/debug.js +++ b/tools/node_modules/eslint/node_modules/debug/dist/debug.js @@ -883,3 +883,4 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }] }, {}, [4])(4); }); + diff --git a/tools/node_modules/eslint/node_modules/debug/package.json b/tools/node_modules/eslint/node_modules/debug/package.json index c620d67bb3fd9d..85c3e476666698 100644 --- a/tools/node_modules/eslint/node_modules/debug/package.json +++ b/tools/node_modules/eslint/node_modules/debug/package.json @@ -61,6 +61,19 @@ "type": "git", "url": "git://github.com/visionmedia/debug.git" }, + "scripts": { + "build": "npm run build:debug && npm run build:test", + "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js", + "build:test": "babel -d dist test.js", + "clean": "rimraf dist coverage", + "lint": "xo", + "posttest:node": "cat ./coverage/lcov.info | coveralls", + "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .", + "pretest:browser": "npm run build", + "test": "npm run test:node && npm run test:browser", + "test:browser": "karma start --single-run", + "test:node": "istanbul cover _mocha -- test.js" + }, "unpkg": "./dist/debug.js", - "version": "4.0.1" + "version": "4.1.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/debug/src/common.js b/tools/node_modules/eslint/node_modules/debug/src/common.js index dab9e480278b32..0b6d0b64c7ab5b 100644 --- a/tools/node_modules/eslint/node_modules/debug/src/common.js +++ b/tools/node_modules/eslint/node_modules/debug/src/common.js @@ -187,10 +187,16 @@ function setup(env) { /** * Disable debug output. * + * @return {String} namespaces * @api public */ function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); createDebug.enable(''); + return namespaces; } /** @@ -223,6 +229,19 @@ function setup(env) { return false; } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + /** * Coerce `val`. * diff --git a/tools/node_modules/eslint/node_modules/external-editor/README.md b/tools/node_modules/eslint/node_modules/external-editor/README.md index e19055b4e0e85a..a6c69017ea10b4 100644 --- a/tools/node_modules/eslint/node_modules/external-editor/README.md +++ b/tools/node_modules/eslint/node_modules/external-editor/README.md @@ -101,7 +101,7 @@ A full featured example - `text` (string) *readonly* The text in the temporary file. - `editor.bin` (string) The editor determined from the environment. - `editor.args` (array) Default arguments for the bin -- `tempFile` (string) Path to temporary file. Can be changed, but be careful as the temporary file probably already +- `tempFile` (string) Path to temporary file. Can be changed, but be careful as the temporary file probably already exists and would need be removed manually. - `lastExitStatus` (number) The last exit code emitted from the editor. diff --git a/tools/node_modules/eslint/node_modules/globals/globals.json b/tools/node_modules/eslint/node_modules/globals/globals.json index 4e6bbb13825147..d805cdd73c6bdb 100644 --- a/tools/node_modules/eslint/node_modules/globals/globals.json +++ b/tools/node_modules/eslint/node_modules/globals/globals.json @@ -996,6 +996,7 @@ "URLSearchParams": false, "WebSocket": false, "Worker": false, + "WorkerGlobalScope": false, "XMLHttpRequest": false }, "node": { @@ -1191,7 +1192,8 @@ "jQuery": false }, "yui": { - "Y": false, + "YAHOO": false, + "YAHOO_config": false, "YUI": false, "YUI_config": false }, diff --git a/tools/node_modules/eslint/node_modules/globals/package.json b/tools/node_modules/eslint/node_modules/globals/package.json index 00bff44ad26229..ef0bf02ac857ab 100644 --- a/tools/node_modules/eslint/node_modules/globals/package.json +++ b/tools/node_modules/eslint/node_modules/globals/package.json @@ -41,7 +41,7 @@ "scripts": { "test": "xo && ava" }, - "version": "11.7.0", + "version": "11.8.0", "xo": { "ignores": [ "get-browser-globals.js" diff --git a/tools/node_modules/eslint/node_modules/regexpp/index.d.ts b/tools/node_modules/eslint/node_modules/regexpp/index.d.ts index 174b40e714531f..5b6ff6fec5038b 100644 --- a/tools/node_modules/eslint/node_modules/regexpp/index.d.ts +++ b/tools/node_modules/eslint/node_modules/regexpp/index.d.ts @@ -1,149 +1,149 @@ -// Generated by dts-bundle v0.7.3 - -declare module 'regexpp' { - import * as AST from "regexpp/ast"; - import { RegExpParser } from "regexpp/parser"; - import { RegExpValidator } from "regexpp/validator"; - import { RegExpVisitor } from "regexpp/visitor"; - export { AST, RegExpParser, RegExpValidator }; - export function parseRegExpLiteral(source: string | RegExp, options?: RegExpParser.Options): AST.RegExpLiteral; - export function validateRegExpLiteral(source: string, options?: RegExpValidator.Options): void; - export function visitRegExpAST(node: AST.Node, handlers: RegExpVisitor.Handlers): void; -} - -declare module 'regexpp/ast' { - export type Node = BranchNode | LeafNode; - export type BranchNode = RegExpLiteral | Pattern | Alternative | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion | CharacterClassRange; - export type LeafNode = BoundaryAssertion | CharacterSet | Character | Backreference | Flags; - export type Element = Assertion | Quantifier | QuantifiableElement; - export type QuantifiableElement = Group | CapturingGroup | CharacterClass | CharacterSet | Character | Backreference | LookaheadAssertion; - export type CharacterClassElement = EscapeCharacterSet | UnicodePropertyCharacterSet | Character | CharacterClassRange; - export interface NodeBase { - type: Node["type"]; - parent: Node["parent"]; - start: number; - end: number; - raw: string; - } - export interface RegExpLiteral extends NodeBase { - type: "RegExpLiteral"; - parent: null; - pattern: Pattern; - flags: Flags; - } - export interface Pattern extends NodeBase { - type: "Pattern"; - parent: RegExpLiteral | null; - alternatives: Alternative[]; - } - export interface Alternative extends NodeBase { - type: "Alternative"; - parent: Pattern | Group | CapturingGroup | LookaroundAssertion; - elements: Element[]; - } - export interface Group extends NodeBase { - type: "Group"; - parent: Alternative | Quantifier; - alternatives: Alternative[]; - } - export interface CapturingGroup extends NodeBase { - type: "CapturingGroup"; - parent: Alternative | Quantifier; - name: string | null; - alternatives: Alternative[]; - references: Backreference[]; - } - export type LookaroundAssertion = LookaheadAssertion | LookbehindAssertion; - export interface LookaheadAssertion extends NodeBase { - type: "Assertion"; - parent: Alternative | Quantifier; - kind: "lookahead"; - negate: boolean; - alternatives: Alternative[]; - } - export interface LookbehindAssertion extends NodeBase { - type: "Assertion"; - parent: Alternative; - kind: "lookbehind"; - negate: boolean; - alternatives: Alternative[]; - } - export interface Quantifier extends NodeBase { - type: "Quantifier"; - parent: Alternative; - min: number; - max: number; - greedy: boolean; - element: QuantifiableElement; - } - export interface CharacterClass extends NodeBase { - type: "CharacterClass"; - parent: Alternative | Quantifier; - negate: boolean; - elements: CharacterClassElement[]; - } - export interface CharacterClassRange extends NodeBase { - type: "CharacterClassRange"; - parent: CharacterClass; - min: Character; - max: Character; - } - export type Assertion = BoundaryAssertion | LookaroundAssertion; - export type BoundaryAssertion = EdgeAssertion | WordBoundaryAssertion; - export interface EdgeAssertion extends NodeBase { - type: "Assertion"; - parent: Alternative | Quantifier; - kind: "start" | "end"; - } - export interface WordBoundaryAssertion extends NodeBase { - type: "Assertion"; - parent: Alternative | Quantifier; - kind: "word"; - negate: boolean; - } - export type CharacterSet = AnyCharacterSet | EscapeCharacterSet | UnicodePropertyCharacterSet; - export interface AnyCharacterSet extends NodeBase { - type: "CharacterSet"; - parent: Alternative | Quantifier; - kind: "any"; - } - export interface EscapeCharacterSet extends NodeBase { - type: "CharacterSet"; - parent: Alternative | Quantifier | CharacterClass; - kind: "digit" | "space" | "word"; - negate: boolean; - } - export interface UnicodePropertyCharacterSet extends NodeBase { - type: "CharacterSet"; - parent: Alternative | Quantifier | CharacterClass; - kind: "property"; - key: string; - value: string | null; - negate: boolean; - } - export interface Character extends NodeBase { - type: "Character"; - parent: Alternative | Quantifier | CharacterClass | CharacterClassRange; - value: number; - } - export interface Backreference extends NodeBase { - type: "Backreference"; - parent: Alternative | Quantifier; - ref: number | string; - resolved: CapturingGroup; - } - export interface Flags extends NodeBase { - type: "Flags"; - parent: RegExpLiteral | null; - dotAll: boolean; - global: boolean; - ignoreCase: boolean; - multiline: boolean; - sticky: boolean; - unicode: boolean; - } -} - +// Generated by dts-bundle v0.7.3 + +declare module 'regexpp' { + import * as AST from "regexpp/ast"; + import { RegExpParser } from "regexpp/parser"; + import { RegExpValidator } from "regexpp/validator"; + import { RegExpVisitor } from "regexpp/visitor"; + export { AST, RegExpParser, RegExpValidator }; + export function parseRegExpLiteral(source: string | RegExp, options?: RegExpParser.Options): AST.RegExpLiteral; + export function validateRegExpLiteral(source: string, options?: RegExpValidator.Options): void; + export function visitRegExpAST(node: AST.Node, handlers: RegExpVisitor.Handlers): void; +} + +declare module 'regexpp/ast' { + export type Node = BranchNode | LeafNode; + export type BranchNode = RegExpLiteral | Pattern | Alternative | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion | CharacterClassRange; + export type LeafNode = BoundaryAssertion | CharacterSet | Character | Backreference | Flags; + export type Element = Assertion | Quantifier | QuantifiableElement; + export type QuantifiableElement = Group | CapturingGroup | CharacterClass | CharacterSet | Character | Backreference | LookaheadAssertion; + export type CharacterClassElement = EscapeCharacterSet | UnicodePropertyCharacterSet | Character | CharacterClassRange; + export interface NodeBase { + type: Node["type"]; + parent: Node["parent"]; + start: number; + end: number; + raw: string; + } + export interface RegExpLiteral extends NodeBase { + type: "RegExpLiteral"; + parent: null; + pattern: Pattern; + flags: Flags; + } + export interface Pattern extends NodeBase { + type: "Pattern"; + parent: RegExpLiteral | null; + alternatives: Alternative[]; + } + export interface Alternative extends NodeBase { + type: "Alternative"; + parent: Pattern | Group | CapturingGroup | LookaroundAssertion; + elements: Element[]; + } + export interface Group extends NodeBase { + type: "Group"; + parent: Alternative | Quantifier; + alternatives: Alternative[]; + } + export interface CapturingGroup extends NodeBase { + type: "CapturingGroup"; + parent: Alternative | Quantifier; + name: string | null; + alternatives: Alternative[]; + references: Backreference[]; + } + export type LookaroundAssertion = LookaheadAssertion | LookbehindAssertion; + export interface LookaheadAssertion extends NodeBase { + type: "Assertion"; + parent: Alternative | Quantifier; + kind: "lookahead"; + negate: boolean; + alternatives: Alternative[]; + } + export interface LookbehindAssertion extends NodeBase { + type: "Assertion"; + parent: Alternative; + kind: "lookbehind"; + negate: boolean; + alternatives: Alternative[]; + } + export interface Quantifier extends NodeBase { + type: "Quantifier"; + parent: Alternative; + min: number; + max: number; + greedy: boolean; + element: QuantifiableElement; + } + export interface CharacterClass extends NodeBase { + type: "CharacterClass"; + parent: Alternative | Quantifier; + negate: boolean; + elements: CharacterClassElement[]; + } + export interface CharacterClassRange extends NodeBase { + type: "CharacterClassRange"; + parent: CharacterClass; + min: Character; + max: Character; + } + export type Assertion = BoundaryAssertion | LookaroundAssertion; + export type BoundaryAssertion = EdgeAssertion | WordBoundaryAssertion; + export interface EdgeAssertion extends NodeBase { + type: "Assertion"; + parent: Alternative | Quantifier; + kind: "start" | "end"; + } + export interface WordBoundaryAssertion extends NodeBase { + type: "Assertion"; + parent: Alternative | Quantifier; + kind: "word"; + negate: boolean; + } + export type CharacterSet = AnyCharacterSet | EscapeCharacterSet | UnicodePropertyCharacterSet; + export interface AnyCharacterSet extends NodeBase { + type: "CharacterSet"; + parent: Alternative | Quantifier; + kind: "any"; + } + export interface EscapeCharacterSet extends NodeBase { + type: "CharacterSet"; + parent: Alternative | Quantifier | CharacterClass; + kind: "digit" | "space" | "word"; + negate: boolean; + } + export interface UnicodePropertyCharacterSet extends NodeBase { + type: "CharacterSet"; + parent: Alternative | Quantifier | CharacterClass; + kind: "property"; + key: string; + value: string | null; + negate: boolean; + } + export interface Character extends NodeBase { + type: "Character"; + parent: Alternative | Quantifier | CharacterClass | CharacterClassRange; + value: number; + } + export interface Backreference extends NodeBase { + type: "Backreference"; + parent: Alternative | Quantifier; + ref: number | string; + resolved: CapturingGroup; + } + export interface Flags extends NodeBase { + type: "Flags"; + parent: RegExpLiteral | null; + dotAll: boolean; + global: boolean; + ignoreCase: boolean; + multiline: boolean; + sticky: boolean; + unicode: boolean; + } +} + declare module 'regexpp/parser' { import { Flags, RegExpLiteral, Pattern } from "regexpp/ast"; export namespace RegExpParser { @@ -186,55 +186,56 @@ declare module 'regexpp/validator' { onAnyCharacterSet?(start: number, end: number, kind: "any"): void; onEscapeCharacterSet?(start: number, end: number, kind: "digit" | "space" | "word", negate: boolean): void; onUnicodePropertyCharacterSet?(start: number, end: number, kind: "property", key: string, value: string | null, negate: boolean): void; - onCharacter?(start: number, end: number, value: number): void; - onBackreference?(start: number, end: number, ref: number | string): void; - onCharacterClassEnter?(start: number, negate: boolean): void; - onCharacterClassLeave?(start: number, end: number, negate: boolean): void; - onCharacterClassRange?(start: number, end: number, min: number, max: number): void; - } - } - export class RegExpValidator { - constructor(options?: RegExpValidator.Options); - validateLiteral(source: string, start?: number, end?: number): void; - validateFlags(source: string, start?: number, end?: number): void; - validatePattern(source: string, start?: number, end?: number, uFlag?: boolean): void; - } -} - -declare module 'regexpp/visitor' { - import { Alternative, Assertion, Backreference, CapturingGroup, Character, CharacterClass, CharacterClassRange, CharacterSet, Flags, Group, Node, Pattern, Quantifier, RegExpLiteral } from "regexpp/ast"; - export class RegExpVisitor { - constructor(handlers: RegExpVisitor.Handlers); - visit(node: Node): void; - } - export namespace RegExpVisitor { - interface Handlers { - onAlternativeEnter?(node: Alternative): void; - onAlternativeLeave?(node: Alternative): void; - onAssertionEnter?(node: Assertion): void; - onAssertionLeave?(node: Assertion): void; - onBackreferenceEnter?(node: Backreference): void; - onBackreferenceLeave?(node: Backreference): void; - onCapturingGroupEnter?(node: CapturingGroup): void; - onCapturingGroupLeave?(node: CapturingGroup): void; - onCharacterEnter?(node: Character): void; - onCharacterLeave?(node: Character): void; - onCharacterClassEnter?(node: CharacterClass): void; - onCharacterClassLeave?(node: CharacterClass): void; - onCharacterClassRangeEnter?(node: CharacterClassRange): void; - onCharacterClassRangeLeave?(node: CharacterClassRange): void; - onCharacterSetEnter?(node: CharacterSet): void; - onCharacterSetLeave?(node: CharacterSet): void; - onFlagsEnter?(node: Flags): void; - onFlagsLeave?(node: Flags): void; - onGroupEnter?(node: Group): void; - onGroupLeave?(node: Group): void; - onPatternEnter?(node: Pattern): void; - onPatternLeave?(node: Pattern): void; - onQuantifierEnter?(node: Quantifier): void; - onQuantifierLeave?(node: Quantifier): void; - onRegExpLiteralEnter?(node: RegExpLiteral): void; - onRegExpLiteralLeave?(node: RegExpLiteral): void; - } - } -} + onCharacter?(start: number, end: number, value: number): void; + onBackreference?(start: number, end: number, ref: number | string): void; + onCharacterClassEnter?(start: number, negate: boolean): void; + onCharacterClassLeave?(start: number, end: number, negate: boolean): void; + onCharacterClassRange?(start: number, end: number, min: number, max: number): void; + } + } + export class RegExpValidator { + constructor(options?: RegExpValidator.Options); + validateLiteral(source: string, start?: number, end?: number): void; + validateFlags(source: string, start?: number, end?: number): void; + validatePattern(source: string, start?: number, end?: number, uFlag?: boolean): void; + } +} + +declare module 'regexpp/visitor' { + import { Alternative, Assertion, Backreference, CapturingGroup, Character, CharacterClass, CharacterClassRange, CharacterSet, Flags, Group, Node, Pattern, Quantifier, RegExpLiteral } from "regexpp/ast"; + export class RegExpVisitor { + constructor(handlers: RegExpVisitor.Handlers); + visit(node: Node): void; + } + export namespace RegExpVisitor { + interface Handlers { + onAlternativeEnter?(node: Alternative): void; + onAlternativeLeave?(node: Alternative): void; + onAssertionEnter?(node: Assertion): void; + onAssertionLeave?(node: Assertion): void; + onBackreferenceEnter?(node: Backreference): void; + onBackreferenceLeave?(node: Backreference): void; + onCapturingGroupEnter?(node: CapturingGroup): void; + onCapturingGroupLeave?(node: CapturingGroup): void; + onCharacterEnter?(node: Character): void; + onCharacterLeave?(node: Character): void; + onCharacterClassEnter?(node: CharacterClass): void; + onCharacterClassLeave?(node: CharacterClass): void; + onCharacterClassRangeEnter?(node: CharacterClassRange): void; + onCharacterClassRangeLeave?(node: CharacterClassRange): void; + onCharacterSetEnter?(node: CharacterSet): void; + onCharacterSetLeave?(node: CharacterSet): void; + onFlagsEnter?(node: Flags): void; + onFlagsLeave?(node: Flags): void; + onGroupEnter?(node: Group): void; + onGroupLeave?(node: Group): void; + onPatternEnter?(node: Pattern): void; + onPatternLeave?(node: Pattern): void; + onQuantifierEnter?(node: Quantifier): void; + onQuantifierLeave?(node: Quantifier): void; + onRegExpLiteralEnter?(node: RegExpLiteral): void; + onRegExpLiteralLeave?(node: RegExpLiteral): void; + } + } +} + diff --git a/tools/node_modules/eslint/node_modules/regexpp/index.js b/tools/node_modules/eslint/node_modules/regexpp/index.js index 63fce03400d5b5..71e5c98897e94f 100644 --- a/tools/node_modules/eslint/node_modules/regexpp/index.js +++ b/tools/node_modules/eslint/node_modules/regexpp/index.js @@ -5684,6 +5684,9 @@ class RegExpValidator { if (cp === RightParenthesis) { this.raise("Unmatched ')'"); } + if (cp === ReverseSolidus) { + this.raise("\\ at end of pattern"); + } if (cp === RightSquareBracket || cp === RightCurlyBracket) { this.raise("Lone quantifier brackets"); } @@ -5920,12 +5923,23 @@ class RegExpValidator { eatExtendedAtom() { return (this.eatDot() || this.eatReverseSolidusAtomEscape() || + this.eatReverseSolidusFollowedByC() || this.eatCharacterClass() || this.eatUncapturingGroup() || this.eatCapturingGroup() || this.eatInvalidBracedQuantifier() || this.eatExtendedPatternCharacter()); } + eatReverseSolidusFollowedByC() { + if (this.currentCodePoint === ReverseSolidus && + this.nextCodePoint === LatinSmallLetterC) { + this._lastIntValue = this.currentCodePoint; + this.advance(); + this.onCharacter(this.index - 1, this.index, ReverseSolidus); + return true; + } + return false; + } eatInvalidBracedQuantifier() { if (this.eatBracedQuantifier(true)) { this.raise("Nothing to repeat"); @@ -5956,6 +5970,7 @@ class RegExpValidator { if (cp !== -1 && cp !== CircumflexAccent && cp !== DollarSign && + cp !== ReverseSolidus && cp !== FullStop && cp !== Asterisk && cp !== PlusSign && diff --git a/tools/node_modules/eslint/node_modules/regexpp/index.js.map b/tools/node_modules/eslint/node_modules/regexpp/index.js.map index 5a8db58b9eb14a..2b94917b30c169 100644 --- a/tools/node_modules/eslint/node_modules/regexpp/index.js.map +++ b/tools/node_modules/eslint/node_modules/regexpp/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js.map","sources":["src/unicode/ids.ts","src/unicode/property-data.ts","src/unicode/index.ts","src/reader.ts","src/regexp-syntax-error.ts","src/validator.ts","src/parser.ts","src/visitor.ts","src/index.ts"],"sourcesContent":["/* Generated from DerivedCoreProperties-11.0.0.txt */\nexport function isIdStart(cp: number): boolean {\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp)\n}\nexport function isIdContinue(cp: number): boolean {\n if (cp < 0x30) return false\n if (cp < 0x3a) return true\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp === 0x5f) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp) || isLargeIdContinue(cp)\n}\n\nfunction isLargeIdStart(cp: number): boolean {\n if (cp < 0x30a1) {\n if (cp < 0xec0) {\n if (cp < 0xa35) {\n if (cp < 0x6e5) {\n if (cp < 0x37a) {\n if (cp < 0x294) {\n if (cp < 0xf8) {\n if (cp === 0xaa) return true\n if (cp === 0xb5) return true\n if (cp === 0xba) return true\n if (cp < 0xc0) return false\n if (cp < 0xd7) return true\n if (cp < 0xd8) return false\n if (cp < 0xf7) return true\n return false\n }\n if (cp < 0x1bb) return true\n if (cp === 0x1bb) return true\n if (cp < 0x1bc) return false\n if (cp < 0x1c0) return true\n if (cp < 0x1c0) return false\n if (cp < 0x1c4) return true\n if (cp < 0x1c4) return false\n if (cp < 0x294) return true\n return false\n }\n if (cp < 0x2ec) {\n if (cp === 0x294) return true\n if (cp < 0x295) return false\n if (cp < 0x2b0) return true\n if (cp < 0x2b0) return false\n if (cp < 0x2c2) return true\n if (cp < 0x2c6) return false\n if (cp < 0x2d2) return true\n if (cp < 0x2e0) return false\n if (cp < 0x2e5) return true\n return false\n }\n if (cp === 0x2ec) return true\n if (cp === 0x2ee) return true\n if (cp < 0x370) return false\n if (cp < 0x374) return true\n if (cp === 0x374) return true\n if (cp < 0x376) return false\n if (cp < 0x378) return true\n return false\n }\n if (cp < 0x531) {\n if (cp < 0x38c) {\n if (cp === 0x37a) return true\n if (cp < 0x37b) return false\n if (cp < 0x37e) return true\n if (cp === 0x37f) return true\n if (cp === 0x386) return true\n if (cp < 0x388) return false\n if (cp < 0x38b) return true\n return false\n }\n if (cp === 0x38c) return true\n if (cp < 0x38e) return false\n if (cp < 0x3a2) return true\n if (cp < 0x3a3) return false\n if (cp < 0x3f6) return true\n if (cp < 0x3f7) return false\n if (cp < 0x482) return true\n if (cp < 0x48a) return false\n if (cp < 0x530) return true\n return false\n }\n if (cp < 0x620) {\n if (cp < 0x531) return false\n if (cp < 0x557) return true\n if (cp === 0x559) return true\n if (cp < 0x560) return false\n if (cp < 0x589) return true\n if (cp < 0x5d0) return false\n if (cp < 0x5eb) return true\n if (cp < 0x5ef) return false\n if (cp < 0x5f3) return true\n return false\n }\n if (cp < 0x640) return true\n if (cp === 0x640) return true\n if (cp < 0x641) return false\n if (cp < 0x64b) return true\n if (cp < 0x66e) return false\n if (cp < 0x670) return true\n if (cp < 0x671) return false\n if (cp < 0x6d4) return true\n if (cp === 0x6d5) return true\n return false\n }\n if (cp < 0x950) {\n if (cp < 0x7fa) {\n if (cp < 0x712) {\n if (cp < 0x6e5) return false\n if (cp < 0x6e7) return true\n if (cp < 0x6ee) return false\n if (cp < 0x6f0) return true\n if (cp < 0x6fa) return false\n if (cp < 0x6fd) return true\n if (cp === 0x6ff) return true\n if (cp === 0x710) return true\n return false\n }\n if (cp < 0x730) return true\n if (cp < 0x74d) return false\n if (cp < 0x7a6) return true\n if (cp === 0x7b1) return true\n if (cp < 0x7ca) return false\n if (cp < 0x7eb) return true\n if (cp < 0x7f4) return false\n if (cp < 0x7f6) return true\n return false\n }\n if (cp < 0x840) {\n if (cp === 0x7fa) return true\n if (cp < 0x800) return false\n if (cp < 0x816) return true\n if (cp === 0x81a) return true\n if (cp === 0x824) return true\n if (cp === 0x828) return true\n return false\n }\n if (cp < 0x859) return true\n if (cp < 0x860) return false\n if (cp < 0x86b) return true\n if (cp < 0x8a0) return false\n if (cp < 0x8b5) return true\n if (cp < 0x8b6) return false\n if (cp < 0x8be) return true\n if (cp < 0x904) return false\n if (cp < 0x93a) return true\n if (cp === 0x93d) return true\n return false\n }\n if (cp < 0x9bd) {\n if (cp < 0x98f) {\n if (cp === 0x950) return true\n if (cp < 0x958) return false\n if (cp < 0x962) return true\n if (cp === 0x971) return true\n if (cp < 0x972) return false\n if (cp < 0x981) return true\n if (cp < 0x985) return false\n if (cp < 0x98d) return true\n return false\n }\n if (cp < 0x991) return true\n if (cp < 0x993) return false\n if (cp < 0x9a9) return true\n if (cp < 0x9aa) return false\n if (cp < 0x9b1) return true\n if (cp === 0x9b2) return true\n if (cp < 0x9b6) return false\n if (cp < 0x9ba) return true\n return false\n }\n if (cp < 0x9fc) {\n if (cp === 0x9bd) return true\n if (cp === 0x9ce) return true\n if (cp < 0x9dc) return false\n if (cp < 0x9de) return true\n if (cp < 0x9df) return false\n if (cp < 0x9e2) return true\n if (cp < 0x9f0) return false\n if (cp < 0x9f2) return true\n return false\n }\n if (cp === 0x9fc) return true\n if (cp < 0xa05) return false\n if (cp < 0xa0b) return true\n if (cp < 0xa0f) return false\n if (cp < 0xa11) return true\n if (cp < 0xa13) return false\n if (cp < 0xa29) return true\n if (cp < 0xa2a) return false\n if (cp < 0xa31) return true\n if (cp < 0xa32) return false\n if (cp < 0xa34) return true\n return false\n }\n if (cp < 0xc60) {\n if (cp < 0xb3d) {\n if (cp < 0xab5) {\n if (cp < 0xa85) {\n if (cp < 0xa35) return false\n if (cp < 0xa37) return true\n if (cp < 0xa38) return false\n if (cp < 0xa3a) return true\n if (cp < 0xa59) return false\n if (cp < 0xa5d) return true\n if (cp === 0xa5e) return true\n if (cp < 0xa72) return false\n if (cp < 0xa75) return true\n return false\n }\n if (cp < 0xa8e) return true\n if (cp < 0xa8f) return false\n if (cp < 0xa92) return true\n if (cp < 0xa93) return false\n if (cp < 0xaa9) return true\n if (cp < 0xaaa) return false\n if (cp < 0xab1) return true\n if (cp < 0xab2) return false\n if (cp < 0xab4) return true\n return false\n }\n if (cp < 0xb05) {\n if (cp < 0xab5) return false\n if (cp < 0xaba) return true\n if (cp === 0xabd) return true\n if (cp === 0xad0) return true\n if (cp < 0xae0) return false\n if (cp < 0xae2) return true\n if (cp === 0xaf9) return true\n return false\n }\n if (cp < 0xb0d) return true\n if (cp < 0xb0f) return false\n if (cp < 0xb11) return true\n if (cp < 0xb13) return false\n if (cp < 0xb29) return true\n if (cp < 0xb2a) return false\n if (cp < 0xb31) return true\n if (cp < 0xb32) return false\n if (cp < 0xb34) return true\n if (cp < 0xb35) return false\n if (cp < 0xb3a) return true\n return false\n }\n if (cp < 0xb9e) {\n if (cp < 0xb85) {\n if (cp === 0xb3d) return true\n if (cp < 0xb5c) return false\n if (cp < 0xb5e) return true\n if (cp < 0xb5f) return false\n if (cp < 0xb62) return true\n if (cp === 0xb71) return true\n if (cp === 0xb83) return true\n return false\n }\n if (cp < 0xb8b) return true\n if (cp < 0xb8e) return false\n if (cp < 0xb91) return true\n if (cp < 0xb92) return false\n if (cp < 0xb96) return true\n if (cp < 0xb99) return false\n if (cp < 0xb9b) return true\n if (cp === 0xb9c) return true\n return false\n }\n if (cp < 0xc05) {\n if (cp < 0xb9e) return false\n if (cp < 0xba0) return true\n if (cp < 0xba3) return false\n if (cp < 0xba5) return true\n if (cp < 0xba8) return false\n if (cp < 0xbab) return true\n if (cp < 0xbae) return false\n if (cp < 0xbba) return true\n if (cp === 0xbd0) return true\n return false\n }\n if (cp < 0xc0d) return true\n if (cp < 0xc0e) return false\n if (cp < 0xc11) return true\n if (cp < 0xc12) return false\n if (cp < 0xc29) return true\n if (cp < 0xc2a) return false\n if (cp < 0xc3a) return true\n if (cp === 0xc3d) return true\n if (cp < 0xc58) return false\n if (cp < 0xc5b) return true\n return false\n }\n if (cp < 0xdb3) {\n if (cp < 0xcf1) {\n if (cp < 0xcaa) {\n if (cp < 0xc60) return false\n if (cp < 0xc62) return true\n if (cp === 0xc80) return true\n if (cp < 0xc85) return false\n if (cp < 0xc8d) return true\n if (cp < 0xc8e) return false\n if (cp < 0xc91) return true\n if (cp < 0xc92) return false\n if (cp < 0xca9) return true\n return false\n }\n if (cp < 0xcb4) return true\n if (cp < 0xcb5) return false\n if (cp < 0xcba) return true\n if (cp === 0xcbd) return true\n if (cp === 0xcde) return true\n if (cp < 0xce0) return false\n if (cp < 0xce2) return true\n return false\n }\n if (cp < 0xd4e) {\n if (cp < 0xcf1) return false\n if (cp < 0xcf3) return true\n if (cp < 0xd05) return false\n if (cp < 0xd0d) return true\n if (cp < 0xd0e) return false\n if (cp < 0xd11) return true\n if (cp < 0xd12) return false\n if (cp < 0xd3b) return true\n if (cp === 0xd3d) return true\n return false\n }\n if (cp === 0xd4e) return true\n if (cp < 0xd54) return false\n if (cp < 0xd57) return true\n if (cp < 0xd5f) return false\n if (cp < 0xd62) return true\n if (cp < 0xd7a) return false\n if (cp < 0xd80) return true\n if (cp < 0xd85) return false\n if (cp < 0xd97) return true\n if (cp < 0xd9a) return false\n if (cp < 0xdb2) return true\n return false\n }\n if (cp < 0xe8a) {\n if (cp < 0xe40) {\n if (cp < 0xdb3) return false\n if (cp < 0xdbc) return true\n if (cp === 0xdbd) return true\n if (cp < 0xdc0) return false\n if (cp < 0xdc7) return true\n if (cp < 0xe01) return false\n if (cp < 0xe31) return true\n if (cp < 0xe32) return false\n if (cp < 0xe34) return true\n return false\n }\n if (cp < 0xe46) return true\n if (cp === 0xe46) return true\n if (cp < 0xe81) return false\n if (cp < 0xe83) return true\n if (cp === 0xe84) return true\n if (cp < 0xe87) return false\n if (cp < 0xe89) return true\n return false\n }\n if (cp < 0xea5) {\n if (cp === 0xe8a) return true\n if (cp === 0xe8d) return true\n if (cp < 0xe94) return false\n if (cp < 0xe98) return true\n if (cp < 0xe99) return false\n if (cp < 0xea0) return true\n if (cp < 0xea1) return false\n if (cp < 0xea4) return true\n return false\n }\n if (cp === 0xea5) return true\n if (cp === 0xea7) return true\n if (cp < 0xeaa) return false\n if (cp < 0xeac) return true\n if (cp < 0xead) return false\n if (cp < 0xeb1) return true\n if (cp < 0xeb2) return false\n if (cp < 0xeb4) return true\n if (cp === 0xebd) return true\n return false\n }\n if (cp < 0x1ce9) {\n if (cp < 0x166f) {\n if (cp < 0x10fd) {\n if (cp < 0x105a) {\n if (cp < 0xf49) {\n if (cp < 0xec0) return false\n if (cp < 0xec5) return true\n if (cp === 0xec6) return true\n if (cp < 0xedc) return false\n if (cp < 0xee0) return true\n if (cp === 0xf00) return true\n if (cp < 0xf40) return false\n if (cp < 0xf48) return true\n return false\n }\n if (cp < 0xf6d) return true\n if (cp < 0xf88) return false\n if (cp < 0xf8d) return true\n if (cp < 0x1000) return false\n if (cp < 0x102b) return true\n if (cp === 0x103f) return true\n if (cp < 0x1050) return false\n if (cp < 0x1056) return true\n return false\n }\n if (cp < 0x108e) {\n if (cp < 0x105a) return false\n if (cp < 0x105e) return true\n if (cp === 0x1061) return true\n if (cp < 0x1065) return false\n if (cp < 0x1067) return true\n if (cp < 0x106e) return false\n if (cp < 0x1071) return true\n if (cp < 0x1075) return false\n if (cp < 0x1082) return true\n return false\n }\n if (cp === 0x108e) return true\n if (cp < 0x10a0) return false\n if (cp < 0x10c6) return true\n if (cp === 0x10c7) return true\n if (cp === 0x10cd) return true\n if (cp < 0x10d0) return false\n if (cp < 0x10fb) return true\n if (cp === 0x10fc) return true\n return false\n }\n if (cp < 0x12b8) {\n if (cp < 0x125a) {\n if (cp < 0x10fd) return false\n if (cp < 0x1100) return true\n if (cp < 0x1100) return false\n if (cp < 0x1249) return true\n if (cp < 0x124a) return false\n if (cp < 0x124e) return true\n if (cp < 0x1250) return false\n if (cp < 0x1257) return true\n if (cp === 0x1258) return true\n return false\n }\n if (cp < 0x125e) return true\n if (cp < 0x1260) return false\n if (cp < 0x1289) return true\n if (cp < 0x128a) return false\n if (cp < 0x128e) return true\n if (cp < 0x1290) return false\n if (cp < 0x12b1) return true\n if (cp < 0x12b2) return false\n if (cp < 0x12b6) return true\n return false\n }\n if (cp < 0x1312) {\n if (cp < 0x12b8) return false\n if (cp < 0x12bf) return true\n if (cp === 0x12c0) return true\n if (cp < 0x12c2) return false\n if (cp < 0x12c6) return true\n if (cp < 0x12c8) return false\n if (cp < 0x12d7) return true\n if (cp < 0x12d8) return false\n if (cp < 0x1311) return true\n return false\n }\n if (cp < 0x1316) return true\n if (cp < 0x1318) return false\n if (cp < 0x135b) return true\n if (cp < 0x1380) return false\n if (cp < 0x1390) return true\n if (cp < 0x13a0) return false\n if (cp < 0x13f6) return true\n if (cp < 0x13f8) return false\n if (cp < 0x13fe) return true\n if (cp < 0x1401) return false\n if (cp < 0x166d) return true\n return false\n }\n if (cp < 0x18b0) {\n if (cp < 0x176e) {\n if (cp < 0x1700) {\n if (cp < 0x166f) return false\n if (cp < 0x1680) return true\n if (cp < 0x1681) return false\n if (cp < 0x169b) return true\n if (cp < 0x16a0) return false\n if (cp < 0x16eb) return true\n if (cp < 0x16ee) return false\n if (cp < 0x16f1) return true\n if (cp < 0x16f1) return false\n if (cp < 0x16f9) return true\n return false\n }\n if (cp < 0x170d) return true\n if (cp < 0x170e) return false\n if (cp < 0x1712) return true\n if (cp < 0x1720) return false\n if (cp < 0x1732) return true\n if (cp < 0x1740) return false\n if (cp < 0x1752) return true\n if (cp < 0x1760) return false\n if (cp < 0x176d) return true\n return false\n }\n if (cp < 0x1843) {\n if (cp < 0x176e) return false\n if (cp < 0x1771) return true\n if (cp < 0x1780) return false\n if (cp < 0x17b4) return true\n if (cp === 0x17d7) return true\n if (cp === 0x17dc) return true\n if (cp < 0x1820) return false\n if (cp < 0x1843) return true\n return false\n }\n if (cp === 0x1843) return true\n if (cp < 0x1844) return false\n if (cp < 0x1879) return true\n if (cp < 0x1880) return false\n if (cp < 0x1885) return true\n if (cp < 0x1885) return false\n if (cp < 0x1887) return true\n if (cp < 0x1887) return false\n if (cp < 0x18a9) return true\n if (cp === 0x18aa) return true\n return false\n }\n if (cp < 0x1b45) {\n if (cp < 0x19b0) {\n if (cp < 0x18b0) return false\n if (cp < 0x18f6) return true\n if (cp < 0x1900) return false\n if (cp < 0x191f) return true\n if (cp < 0x1950) return false\n if (cp < 0x196e) return true\n if (cp < 0x1970) return false\n if (cp < 0x1975) return true\n if (cp < 0x1980) return false\n if (cp < 0x19ac) return true\n return false\n }\n if (cp < 0x19ca) return true\n if (cp < 0x1a00) return false\n if (cp < 0x1a17) return true\n if (cp < 0x1a20) return false\n if (cp < 0x1a55) return true\n if (cp === 0x1aa7) return true\n if (cp < 0x1b05) return false\n if (cp < 0x1b34) return true\n return false\n }\n if (cp < 0x1c4d) {\n if (cp < 0x1b45) return false\n if (cp < 0x1b4c) return true\n if (cp < 0x1b83) return false\n if (cp < 0x1ba1) return true\n if (cp < 0x1bae) return false\n if (cp < 0x1bb0) return true\n if (cp < 0x1bba) return false\n if (cp < 0x1be6) return true\n if (cp < 0x1c00) return false\n if (cp < 0x1c24) return true\n return false\n }\n if (cp < 0x1c50) return true\n if (cp < 0x1c5a) return false\n if (cp < 0x1c78) return true\n if (cp < 0x1c78) return false\n if (cp < 0x1c7e) return true\n if (cp < 0x1c80) return false\n if (cp < 0x1c89) return true\n if (cp < 0x1c90) return false\n if (cp < 0x1cbb) return true\n if (cp < 0x1cbd) return false\n if (cp < 0x1cc0) return true\n return false\n }\n if (cp < 0x212f) {\n if (cp < 0x1fc2) {\n if (cp < 0x1f18) {\n if (cp < 0x1d6b) {\n if (cp < 0x1ce9) return false\n if (cp < 0x1ced) return true\n if (cp < 0x1cee) return false\n if (cp < 0x1cf2) return true\n if (cp < 0x1cf5) return false\n if (cp < 0x1cf7) return true\n if (cp < 0x1d00) return false\n if (cp < 0x1d2c) return true\n if (cp < 0x1d2c) return false\n if (cp < 0x1d6b) return true\n return false\n }\n if (cp < 0x1d78) return true\n if (cp === 0x1d78) return true\n if (cp < 0x1d79) return false\n if (cp < 0x1d9b) return true\n if (cp < 0x1d9b) return false\n if (cp < 0x1dc0) return true\n if (cp < 0x1e00) return false\n if (cp < 0x1f16) return true\n return false\n }\n if (cp < 0x1f5b) {\n if (cp < 0x1f18) return false\n if (cp < 0x1f1e) return true\n if (cp < 0x1f20) return false\n if (cp < 0x1f46) return true\n if (cp < 0x1f48) return false\n if (cp < 0x1f4e) return true\n if (cp < 0x1f50) return false\n if (cp < 0x1f58) return true\n if (cp === 0x1f59) return true\n return false\n }\n if (cp === 0x1f5b) return true\n if (cp === 0x1f5d) return true\n if (cp < 0x1f5f) return false\n if (cp < 0x1f7e) return true\n if (cp < 0x1f80) return false\n if (cp < 0x1fb5) return true\n if (cp < 0x1fb6) return false\n if (cp < 0x1fbd) return true\n if (cp === 0x1fbe) return true\n return false\n }\n if (cp < 0x2102) {\n if (cp < 0x1ff2) {\n if (cp < 0x1fc2) return false\n if (cp < 0x1fc5) return true\n if (cp < 0x1fc6) return false\n if (cp < 0x1fcd) return true\n if (cp < 0x1fd0) return false\n if (cp < 0x1fd4) return true\n if (cp < 0x1fd6) return false\n if (cp < 0x1fdc) return true\n if (cp < 0x1fe0) return false\n if (cp < 0x1fed) return true\n return false\n }\n if (cp < 0x1ff5) return true\n if (cp < 0x1ff6) return false\n if (cp < 0x1ffd) return true\n if (cp === 0x2071) return true\n if (cp === 0x207f) return true\n if (cp < 0x2090) return false\n if (cp < 0x209d) return true\n return false\n }\n if (cp < 0x2119) {\n if (cp === 0x2102) return true\n if (cp === 0x2107) return true\n if (cp < 0x210a) return false\n if (cp < 0x2114) return true\n if (cp === 0x2115) return true\n if (cp === 0x2118) return true\n return false\n }\n if (cp < 0x211e) return true\n if (cp === 0x2124) return true\n if (cp === 0x2126) return true\n if (cp === 0x2128) return true\n if (cp < 0x212a) return false\n if (cp < 0x212e) return true\n if (cp === 0x212e) return true\n return false\n }\n if (cp < 0x2d80) {\n if (cp < 0x2c30) {\n if (cp < 0x214e) {\n if (cp < 0x212f) return false\n if (cp < 0x2135) return true\n if (cp < 0x2135) return false\n if (cp < 0x2139) return true\n if (cp === 0x2139) return true\n if (cp < 0x213c) return false\n if (cp < 0x2140) return true\n if (cp < 0x2145) return false\n if (cp < 0x214a) return true\n return false\n }\n if (cp === 0x214e) return true\n if (cp < 0x2160) return false\n if (cp < 0x2183) return true\n if (cp < 0x2183) return false\n if (cp < 0x2185) return true\n if (cp < 0x2185) return false\n if (cp < 0x2189) return true\n if (cp < 0x2c00) return false\n if (cp < 0x2c2f) return true\n return false\n }\n if (cp < 0x2cf2) {\n if (cp < 0x2c30) return false\n if (cp < 0x2c5f) return true\n if (cp < 0x2c60) return false\n if (cp < 0x2c7c) return true\n if (cp < 0x2c7c) return false\n if (cp < 0x2c7e) return true\n if (cp < 0x2c7e) return false\n if (cp < 0x2ce5) return true\n if (cp < 0x2ceb) return false\n if (cp < 0x2cef) return true\n return false\n }\n if (cp < 0x2cf4) return true\n if (cp < 0x2d00) return false\n if (cp < 0x2d26) return true\n if (cp === 0x2d27) return true\n if (cp === 0x2d2d) return true\n if (cp < 0x2d30) return false\n if (cp < 0x2d68) return true\n if (cp === 0x2d6f) return true\n return false\n }\n if (cp < 0x3006) {\n if (cp < 0x2dc0) {\n if (cp < 0x2d80) return false\n if (cp < 0x2d97) return true\n if (cp < 0x2da0) return false\n if (cp < 0x2da7) return true\n if (cp < 0x2da8) return false\n if (cp < 0x2daf) return true\n if (cp < 0x2db0) return false\n if (cp < 0x2db7) return true\n if (cp < 0x2db8) return false\n if (cp < 0x2dbf) return true\n return false\n }\n if (cp < 0x2dc7) return true\n if (cp < 0x2dc8) return false\n if (cp < 0x2dcf) return true\n if (cp < 0x2dd0) return false\n if (cp < 0x2dd7) return true\n if (cp < 0x2dd8) return false\n if (cp < 0x2ddf) return true\n if (cp === 0x3005) return true\n return false\n }\n if (cp < 0x303b) {\n if (cp === 0x3006) return true\n if (cp === 0x3007) return true\n if (cp < 0x3021) return false\n if (cp < 0x302a) return true\n if (cp < 0x3031) return false\n if (cp < 0x3036) return true\n if (cp < 0x3038) return false\n if (cp < 0x303b) return true\n return false\n }\n if (cp === 0x303b) return true\n if (cp === 0x303c) return true\n if (cp < 0x3041) return false\n if (cp < 0x3097) return true\n if (cp < 0x309b) return false\n if (cp < 0x309d) return true\n if (cp < 0x309d) return false\n if (cp < 0x309f) return true\n if (cp === 0x309f) return true\n return false\n }\n if (cp < 0x10b60) {\n if (cp < 0xd7b0) {\n if (cp < 0xa882) {\n if (cp < 0xa67f) {\n if (cp < 0xa015) {\n if (cp < 0x31a0) {\n if (cp < 0x30a1) return false\n if (cp < 0x30fb) return true\n if (cp < 0x30fc) return false\n if (cp < 0x30ff) return true\n if (cp === 0x30ff) return true\n if (cp < 0x3105) return false\n if (cp < 0x3130) return true\n if (cp < 0x3131) return false\n if (cp < 0x318f) return true\n return false\n }\n if (cp < 0x31bb) return true\n if (cp < 0x31f0) return false\n if (cp < 0x3200) return true\n if (cp < 0x3400) return false\n if (cp < 0x4db6) return true\n if (cp < 0x4e00) return false\n if (cp < 0x9ff0) return true\n if (cp < 0xa000) return false\n if (cp < 0xa015) return true\n return false\n }\n if (cp < 0xa60c) {\n if (cp === 0xa015) return true\n if (cp < 0xa016) return false\n if (cp < 0xa48d) return true\n if (cp < 0xa4d0) return false\n if (cp < 0xa4f8) return true\n if (cp < 0xa4f8) return false\n if (cp < 0xa4fe) return true\n if (cp < 0xa500) return false\n if (cp < 0xa60c) return true\n return false\n }\n if (cp === 0xa60c) return true\n if (cp < 0xa610) return false\n if (cp < 0xa620) return true\n if (cp < 0xa62a) return false\n if (cp < 0xa62c) return true\n if (cp < 0xa640) return false\n if (cp < 0xa66e) return true\n if (cp === 0xa66e) return true\n return false\n }\n if (cp < 0xa78b) {\n if (cp < 0xa717) {\n if (cp === 0xa67f) return true\n if (cp < 0xa680) return false\n if (cp < 0xa69c) return true\n if (cp < 0xa69c) return false\n if (cp < 0xa69e) return true\n if (cp < 0xa6a0) return false\n if (cp < 0xa6e6) return true\n if (cp < 0xa6e6) return false\n if (cp < 0xa6f0) return true\n return false\n }\n if (cp < 0xa720) return true\n if (cp < 0xa722) return false\n if (cp < 0xa770) return true\n if (cp === 0xa770) return true\n if (cp < 0xa771) return false\n if (cp < 0xa788) return true\n if (cp === 0xa788) return true\n return false\n }\n if (cp < 0xa7fa) {\n if (cp < 0xa78b) return false\n if (cp < 0xa78f) return true\n if (cp === 0xa78f) return true\n if (cp < 0xa790) return false\n if (cp < 0xa7ba) return true\n if (cp === 0xa7f7) return true\n if (cp < 0xa7f8) return false\n if (cp < 0xa7fa) return true\n return false\n }\n if (cp === 0xa7fa) return true\n if (cp < 0xa7fb) return false\n if (cp < 0xa802) return true\n if (cp < 0xa803) return false\n if (cp < 0xa806) return true\n if (cp < 0xa807) return false\n if (cp < 0xa80b) return true\n if (cp < 0xa80c) return false\n if (cp < 0xa823) return true\n if (cp < 0xa840) return false\n if (cp < 0xa874) return true\n return false\n }\n if (cp < 0xaab1) {\n if (cp < 0xa9e6) {\n if (cp < 0xa930) {\n if (cp < 0xa882) return false\n if (cp < 0xa8b4) return true\n if (cp < 0xa8f2) return false\n if (cp < 0xa8f8) return true\n if (cp === 0xa8fb) return true\n if (cp < 0xa8fd) return false\n if (cp < 0xa8ff) return true\n if (cp < 0xa90a) return false\n if (cp < 0xa926) return true\n return false\n }\n if (cp < 0xa947) return true\n if (cp < 0xa960) return false\n if (cp < 0xa97d) return true\n if (cp < 0xa984) return false\n if (cp < 0xa9b3) return true\n if (cp === 0xa9cf) return true\n if (cp < 0xa9e0) return false\n if (cp < 0xa9e5) return true\n return false\n }\n if (cp < 0xaa44) {\n if (cp === 0xa9e6) return true\n if (cp < 0xa9e7) return false\n if (cp < 0xa9f0) return true\n if (cp < 0xa9fa) return false\n if (cp < 0xa9ff) return true\n if (cp < 0xaa00) return false\n if (cp < 0xaa29) return true\n if (cp < 0xaa40) return false\n if (cp < 0xaa43) return true\n return false\n }\n if (cp < 0xaa4c) return true\n if (cp < 0xaa60) return false\n if (cp < 0xaa70) return true\n if (cp === 0xaa70) return true\n if (cp < 0xaa71) return false\n if (cp < 0xaa77) return true\n if (cp === 0xaa7a) return true\n if (cp < 0xaa7e) return false\n if (cp < 0xaab0) return true\n return false\n }\n if (cp < 0xab01) {\n if (cp < 0xaadb) {\n if (cp === 0xaab1) return true\n if (cp < 0xaab5) return false\n if (cp < 0xaab7) return true\n if (cp < 0xaab9) return false\n if (cp < 0xaabe) return true\n if (cp === 0xaac0) return true\n if (cp === 0xaac2) return true\n return false\n }\n if (cp < 0xaadd) return true\n if (cp === 0xaadd) return true\n if (cp < 0xaae0) return false\n if (cp < 0xaaeb) return true\n if (cp === 0xaaf2) return true\n if (cp < 0xaaf3) return false\n if (cp < 0xaaf5) return true\n return false\n }\n if (cp < 0xab30) {\n if (cp < 0xab01) return false\n if (cp < 0xab07) return true\n if (cp < 0xab09) return false\n if (cp < 0xab0f) return true\n if (cp < 0xab11) return false\n if (cp < 0xab17) return true\n if (cp < 0xab20) return false\n if (cp < 0xab27) return true\n if (cp < 0xab28) return false\n if (cp < 0xab2f) return true\n return false\n }\n if (cp < 0xab5b) return true\n if (cp < 0xab5c) return false\n if (cp < 0xab60) return true\n if (cp < 0xab60) return false\n if (cp < 0xab66) return true\n if (cp < 0xab70) return false\n if (cp < 0xabc0) return true\n if (cp < 0xabc0) return false\n if (cp < 0xabe3) return true\n if (cp < 0xac00) return false\n if (cp < 0xd7a4) return true\n return false\n }\n if (cp < 0x1032d) {\n if (cp < 0xff41) {\n if (cp < 0xfb3e) {\n if (cp < 0xfb13) {\n if (cp < 0xd7b0) return false\n if (cp < 0xd7c7) return true\n if (cp < 0xd7cb) return false\n if (cp < 0xd7fc) return true\n if (cp < 0xf900) return false\n if (cp < 0xfa6e) return true\n if (cp < 0xfa70) return false\n if (cp < 0xfada) return true\n if (cp < 0xfb00) return false\n if (cp < 0xfb07) return true\n return false\n }\n if (cp < 0xfb18) return true\n if (cp === 0xfb1d) return true\n if (cp < 0xfb1f) return false\n if (cp < 0xfb29) return true\n if (cp < 0xfb2a) return false\n if (cp < 0xfb37) return true\n if (cp < 0xfb38) return false\n if (cp < 0xfb3d) return true\n return false\n }\n if (cp < 0xfd50) {\n if (cp === 0xfb3e) return true\n if (cp < 0xfb40) return false\n if (cp < 0xfb42) return true\n if (cp < 0xfb43) return false\n if (cp < 0xfb45) return true\n if (cp < 0xfb46) return false\n if (cp < 0xfbb2) return true\n if (cp < 0xfbd3) return false\n if (cp < 0xfd3e) return true\n return false\n }\n if (cp < 0xfd90) return true\n if (cp < 0xfd92) return false\n if (cp < 0xfdc8) return true\n if (cp < 0xfdf0) return false\n if (cp < 0xfdfc) return true\n if (cp < 0xfe70) return false\n if (cp < 0xfe75) return true\n if (cp < 0xfe76) return false\n if (cp < 0xfefd) return true\n if (cp < 0xff21) return false\n if (cp < 0xff3b) return true\n return false\n }\n if (cp < 0x10000) {\n if (cp < 0xffa0) {\n if (cp < 0xff41) return false\n if (cp < 0xff5b) return true\n if (cp < 0xff66) return false\n if (cp < 0xff70) return true\n if (cp === 0xff70) return true\n if (cp < 0xff71) return false\n if (cp < 0xff9e) return true\n if (cp < 0xff9e) return false\n if (cp < 0xffa0) return true\n return false\n }\n if (cp < 0xffbf) return true\n if (cp < 0xffc2) return false\n if (cp < 0xffc8) return true\n if (cp < 0xffca) return false\n if (cp < 0xffd0) return true\n if (cp < 0xffd2) return false\n if (cp < 0xffd8) return true\n if (cp < 0xffda) return false\n if (cp < 0xffdd) return true\n return false\n }\n if (cp < 0x10050) {\n if (cp < 0x10000) return false\n if (cp < 0x1000c) return true\n if (cp < 0x1000d) return false\n if (cp < 0x10027) return true\n if (cp < 0x10028) return false\n if (cp < 0x1003b) return true\n if (cp < 0x1003c) return false\n if (cp < 0x1003e) return true\n if (cp < 0x1003f) return false\n if (cp < 0x1004e) return true\n return false\n }\n if (cp < 0x1005e) return true\n if (cp < 0x10080) return false\n if (cp < 0x100fb) return true\n if (cp < 0x10140) return false\n if (cp < 0x10175) return true\n if (cp < 0x10280) return false\n if (cp < 0x1029d) return true\n if (cp < 0x102a0) return false\n if (cp < 0x102d1) return true\n if (cp < 0x10300) return false\n if (cp < 0x10320) return true\n return false\n }\n if (cp < 0x10837) {\n if (cp < 0x10450) {\n if (cp < 0x10380) {\n if (cp < 0x1032d) return false\n if (cp < 0x10341) return true\n if (cp === 0x10341) return true\n if (cp < 0x10342) return false\n if (cp < 0x1034a) return true\n if (cp === 0x1034a) return true\n if (cp < 0x10350) return false\n if (cp < 0x10376) return true\n return false\n }\n if (cp < 0x1039e) return true\n if (cp < 0x103a0) return false\n if (cp < 0x103c4) return true\n if (cp < 0x103c8) return false\n if (cp < 0x103d0) return true\n if (cp < 0x103d1) return false\n if (cp < 0x103d6) return true\n if (cp < 0x10400) return false\n if (cp < 0x10450) return true\n return false\n }\n if (cp < 0x10600) {\n if (cp < 0x10450) return false\n if (cp < 0x1049e) return true\n if (cp < 0x104b0) return false\n if (cp < 0x104d4) return true\n if (cp < 0x104d8) return false\n if (cp < 0x104fc) return true\n if (cp < 0x10500) return false\n if (cp < 0x10528) return true\n if (cp < 0x10530) return false\n if (cp < 0x10564) return true\n return false\n }\n if (cp < 0x10737) return true\n if (cp < 0x10740) return false\n if (cp < 0x10756) return true\n if (cp < 0x10760) return false\n if (cp < 0x10768) return true\n if (cp < 0x10800) return false\n if (cp < 0x10806) return true\n if (cp === 0x10808) return true\n if (cp < 0x1080a) return false\n if (cp < 0x10836) return true\n return false\n }\n if (cp < 0x109be) {\n if (cp < 0x108e0) {\n if (cp < 0x10837) return false\n if (cp < 0x10839) return true\n if (cp === 0x1083c) return true\n if (cp < 0x1083f) return false\n if (cp < 0x10856) return true\n if (cp < 0x10860) return false\n if (cp < 0x10877) return true\n if (cp < 0x10880) return false\n if (cp < 0x1089f) return true\n return false\n }\n if (cp < 0x108f3) return true\n if (cp < 0x108f4) return false\n if (cp < 0x108f6) return true\n if (cp < 0x10900) return false\n if (cp < 0x10916) return true\n if (cp < 0x10920) return false\n if (cp < 0x1093a) return true\n if (cp < 0x10980) return false\n if (cp < 0x109b8) return true\n return false\n }\n if (cp < 0x10a60) {\n if (cp < 0x109be) return false\n if (cp < 0x109c0) return true\n if (cp === 0x10a00) return true\n if (cp < 0x10a10) return false\n if (cp < 0x10a14) return true\n if (cp < 0x10a15) return false\n if (cp < 0x10a18) return true\n if (cp < 0x10a19) return false\n if (cp < 0x10a36) return true\n return false\n }\n if (cp < 0x10a7d) return true\n if (cp < 0x10a80) return false\n if (cp < 0x10a9d) return true\n if (cp < 0x10ac0) return false\n if (cp < 0x10ac8) return true\n if (cp < 0x10ac9) return false\n if (cp < 0x10ae5) return true\n if (cp < 0x10b00) return false\n if (cp < 0x10b36) return true\n if (cp < 0x10b40) return false\n if (cp < 0x10b56) return true\n return false\n }\n if (cp < 0x16e40) {\n if (cp < 0x11580) {\n if (cp < 0x11213) {\n if (cp < 0x11083) {\n if (cp < 0x10d00) {\n if (cp < 0x10b60) return false\n if (cp < 0x10b73) return true\n if (cp < 0x10b80) return false\n if (cp < 0x10b92) return true\n if (cp < 0x10c00) return false\n if (cp < 0x10c49) return true\n if (cp < 0x10c80) return false\n if (cp < 0x10cb3) return true\n if (cp < 0x10cc0) return false\n if (cp < 0x10cf3) return true\n return false\n }\n if (cp < 0x10d24) return true\n if (cp < 0x10f00) return false\n if (cp < 0x10f1d) return true\n if (cp === 0x10f27) return true\n if (cp < 0x10f30) return false\n if (cp < 0x10f46) return true\n if (cp < 0x11003) return false\n if (cp < 0x11038) return true\n return false\n }\n if (cp < 0x11176) {\n if (cp < 0x11083) return false\n if (cp < 0x110b0) return true\n if (cp < 0x110d0) return false\n if (cp < 0x110e9) return true\n if (cp < 0x11103) return false\n if (cp < 0x11127) return true\n if (cp === 0x11144) return true\n if (cp < 0x11150) return false\n if (cp < 0x11173) return true\n return false\n }\n if (cp === 0x11176) return true\n if (cp < 0x11183) return false\n if (cp < 0x111b3) return true\n if (cp < 0x111c1) return false\n if (cp < 0x111c5) return true\n if (cp === 0x111da) return true\n if (cp === 0x111dc) return true\n if (cp < 0x11200) return false\n if (cp < 0x11212) return true\n return false\n }\n if (cp < 0x1132a) {\n if (cp < 0x1129f) {\n if (cp < 0x11213) return false\n if (cp < 0x1122c) return true\n if (cp < 0x11280) return false\n if (cp < 0x11287) return true\n if (cp === 0x11288) return true\n if (cp < 0x1128a) return false\n if (cp < 0x1128e) return true\n if (cp < 0x1128f) return false\n if (cp < 0x1129e) return true\n return false\n }\n if (cp < 0x112a9) return true\n if (cp < 0x112b0) return false\n if (cp < 0x112df) return true\n if (cp < 0x11305) return false\n if (cp < 0x1130d) return true\n if (cp < 0x1130f) return false\n if (cp < 0x11311) return true\n if (cp < 0x11313) return false\n if (cp < 0x11329) return true\n return false\n }\n if (cp < 0x1135d) {\n if (cp < 0x1132a) return false\n if (cp < 0x11331) return true\n if (cp < 0x11332) return false\n if (cp < 0x11334) return true\n if (cp < 0x11335) return false\n if (cp < 0x1133a) return true\n if (cp === 0x1133d) return true\n if (cp === 0x11350) return true\n return false\n }\n if (cp < 0x11362) return true\n if (cp < 0x11400) return false\n if (cp < 0x11435) return true\n if (cp < 0x11447) return false\n if (cp < 0x1144b) return true\n if (cp < 0x11480) return false\n if (cp < 0x114b0) return true\n if (cp < 0x114c4) return false\n if (cp < 0x114c6) return true\n if (cp === 0x114c7) return true\n return false\n }\n if (cp < 0x11d00) {\n if (cp < 0x11a0b) {\n if (cp < 0x11700) {\n if (cp < 0x11580) return false\n if (cp < 0x115af) return true\n if (cp < 0x115d8) return false\n if (cp < 0x115dc) return true\n if (cp < 0x11600) return false\n if (cp < 0x11630) return true\n if (cp === 0x11644) return true\n if (cp < 0x11680) return false\n if (cp < 0x116ab) return true\n return false\n }\n if (cp < 0x1171b) return true\n if (cp < 0x11800) return false\n if (cp < 0x1182c) return true\n if (cp < 0x118a0) return false\n if (cp < 0x118e0) return true\n if (cp === 0x118ff) return true\n if (cp === 0x11a00) return true\n return false\n }\n if (cp < 0x11a9d) {\n if (cp < 0x11a0b) return false\n if (cp < 0x11a33) return true\n if (cp === 0x11a3a) return true\n if (cp === 0x11a50) return true\n if (cp < 0x11a5c) return false\n if (cp < 0x11a84) return true\n if (cp < 0x11a86) return false\n if (cp < 0x11a8a) return true\n return false\n }\n if (cp === 0x11a9d) return true\n if (cp < 0x11ac0) return false\n if (cp < 0x11af9) return true\n if (cp < 0x11c00) return false\n if (cp < 0x11c09) return true\n if (cp < 0x11c0a) return false\n if (cp < 0x11c2f) return true\n if (cp === 0x11c40) return true\n if (cp < 0x11c72) return false\n if (cp < 0x11c90) return true\n return false\n }\n if (cp < 0x12400) {\n if (cp < 0x11d67) {\n if (cp < 0x11d00) return false\n if (cp < 0x11d07) return true\n if (cp < 0x11d08) return false\n if (cp < 0x11d0a) return true\n if (cp < 0x11d0b) return false\n if (cp < 0x11d31) return true\n if (cp === 0x11d46) return true\n if (cp < 0x11d60) return false\n if (cp < 0x11d66) return true\n return false\n }\n if (cp < 0x11d69) return true\n if (cp < 0x11d6a) return false\n if (cp < 0x11d8a) return true\n if (cp === 0x11d98) return true\n if (cp < 0x11ee0) return false\n if (cp < 0x11ef3) return true\n if (cp < 0x12000) return false\n if (cp < 0x1239a) return true\n return false\n }\n if (cp < 0x16a40) {\n if (cp < 0x12400) return false\n if (cp < 0x1246f) return true\n if (cp < 0x12480) return false\n if (cp < 0x12544) return true\n if (cp < 0x13000) return false\n if (cp < 0x1342f) return true\n if (cp < 0x14400) return false\n if (cp < 0x14647) return true\n if (cp < 0x16800) return false\n if (cp < 0x16a39) return true\n return false\n }\n if (cp < 0x16a5f) return true\n if (cp < 0x16ad0) return false\n if (cp < 0x16aee) return true\n if (cp < 0x16b00) return false\n if (cp < 0x16b30) return true\n if (cp < 0x16b40) return false\n if (cp < 0x16b44) return true\n if (cp < 0x16b63) return false\n if (cp < 0x16b78) return true\n if (cp < 0x16b7d) return false\n if (cp < 0x16b90) return true\n return false\n }\n if (cp < 0x1d7c4) {\n if (cp < 0x1d4bd) {\n if (cp < 0x1bc70) {\n if (cp < 0x17000) {\n if (cp < 0x16e40) return false\n if (cp < 0x16e80) return true\n if (cp < 0x16f00) return false\n if (cp < 0x16f45) return true\n if (cp === 0x16f50) return true\n if (cp < 0x16f93) return false\n if (cp < 0x16fa0) return true\n if (cp < 0x16fe0) return false\n if (cp < 0x16fe2) return true\n return false\n }\n if (cp < 0x187f2) return true\n if (cp < 0x18800) return false\n if (cp < 0x18af3) return true\n if (cp < 0x1b000) return false\n if (cp < 0x1b11f) return true\n if (cp < 0x1b170) return false\n if (cp < 0x1b2fc) return true\n if (cp < 0x1bc00) return false\n if (cp < 0x1bc6b) return true\n return false\n }\n if (cp < 0x1d49e) {\n if (cp < 0x1bc70) return false\n if (cp < 0x1bc7d) return true\n if (cp < 0x1bc80) return false\n if (cp < 0x1bc89) return true\n if (cp < 0x1bc90) return false\n if (cp < 0x1bc9a) return true\n if (cp < 0x1d400) return false\n if (cp < 0x1d455) return true\n if (cp < 0x1d456) return false\n if (cp < 0x1d49d) return true\n return false\n }\n if (cp < 0x1d4a0) return true\n if (cp === 0x1d4a2) return true\n if (cp < 0x1d4a5) return false\n if (cp < 0x1d4a7) return true\n if (cp < 0x1d4a9) return false\n if (cp < 0x1d4ad) return true\n if (cp < 0x1d4ae) return false\n if (cp < 0x1d4ba) return true\n if (cp === 0x1d4bb) return true\n return false\n }\n if (cp < 0x1d552) {\n if (cp < 0x1d51e) {\n if (cp < 0x1d4bd) return false\n if (cp < 0x1d4c4) return true\n if (cp < 0x1d4c5) return false\n if (cp < 0x1d506) return true\n if (cp < 0x1d507) return false\n if (cp < 0x1d50b) return true\n if (cp < 0x1d50d) return false\n if (cp < 0x1d515) return true\n if (cp < 0x1d516) return false\n if (cp < 0x1d51d) return true\n return false\n }\n if (cp < 0x1d53a) return true\n if (cp < 0x1d53b) return false\n if (cp < 0x1d53f) return true\n if (cp < 0x1d540) return false\n if (cp < 0x1d545) return true\n if (cp === 0x1d546) return true\n if (cp < 0x1d54a) return false\n if (cp < 0x1d551) return true\n return false\n }\n if (cp < 0x1d716) {\n if (cp < 0x1d552) return false\n if (cp < 0x1d6a6) return true\n if (cp < 0x1d6a8) return false\n if (cp < 0x1d6c1) return true\n if (cp < 0x1d6c2) return false\n if (cp < 0x1d6db) return true\n if (cp < 0x1d6dc) return false\n if (cp < 0x1d6fb) return true\n if (cp < 0x1d6fc) return false\n if (cp < 0x1d715) return true\n return false\n }\n if (cp < 0x1d735) return true\n if (cp < 0x1d736) return false\n if (cp < 0x1d74f) return true\n if (cp < 0x1d750) return false\n if (cp < 0x1d76f) return true\n if (cp < 0x1d770) return false\n if (cp < 0x1d789) return true\n if (cp < 0x1d78a) return false\n if (cp < 0x1d7a9) return true\n if (cp < 0x1d7aa) return false\n if (cp < 0x1d7c3) return true\n return false\n }\n if (cp < 0x1ee5b) {\n if (cp < 0x1ee39) {\n if (cp < 0x1ee21) {\n if (cp < 0x1d7c4) return false\n if (cp < 0x1d7cc) return true\n if (cp < 0x1e800) return false\n if (cp < 0x1e8c5) return true\n if (cp < 0x1e900) return false\n if (cp < 0x1e944) return true\n if (cp < 0x1ee00) return false\n if (cp < 0x1ee04) return true\n if (cp < 0x1ee05) return false\n if (cp < 0x1ee20) return true\n return false\n }\n if (cp < 0x1ee23) return true\n if (cp === 0x1ee24) return true\n if (cp === 0x1ee27) return true\n if (cp < 0x1ee29) return false\n if (cp < 0x1ee33) return true\n if (cp < 0x1ee34) return false\n if (cp < 0x1ee38) return true\n return false\n }\n if (cp < 0x1ee4b) {\n if (cp === 0x1ee39) return true\n if (cp === 0x1ee3b) return true\n if (cp === 0x1ee42) return true\n if (cp === 0x1ee47) return true\n if (cp === 0x1ee49) return true\n return false\n }\n if (cp === 0x1ee4b) return true\n if (cp < 0x1ee4d) return false\n if (cp < 0x1ee50) return true\n if (cp < 0x1ee51) return false\n if (cp < 0x1ee53) return true\n if (cp === 0x1ee54) return true\n if (cp === 0x1ee57) return true\n if (cp === 0x1ee59) return true\n return false\n }\n if (cp < 0x1ee80) {\n if (cp < 0x1ee67) {\n if (cp === 0x1ee5b) return true\n if (cp === 0x1ee5d) return true\n if (cp === 0x1ee5f) return true\n if (cp < 0x1ee61) return false\n if (cp < 0x1ee63) return true\n if (cp === 0x1ee64) return true\n return false\n }\n if (cp < 0x1ee6b) return true\n if (cp < 0x1ee6c) return false\n if (cp < 0x1ee73) return true\n if (cp < 0x1ee74) return false\n if (cp < 0x1ee78) return true\n if (cp < 0x1ee79) return false\n if (cp < 0x1ee7d) return true\n if (cp === 0x1ee7e) return true\n return false\n }\n if (cp < 0x20000) {\n if (cp < 0x1ee80) return false\n if (cp < 0x1ee8a) return true\n if (cp < 0x1ee8b) return false\n if (cp < 0x1ee9c) return true\n if (cp < 0x1eea1) return false\n if (cp < 0x1eea4) return true\n if (cp < 0x1eea5) return false\n if (cp < 0x1eeaa) return true\n if (cp < 0x1eeab) return false\n if (cp < 0x1eebc) return true\n return false\n }\n if (cp < 0x2a6d7) return true\n if (cp < 0x2a700) return false\n if (cp < 0x2b735) return true\n if (cp < 0x2b740) return false\n if (cp < 0x2b81e) return true\n if (cp < 0x2b820) return false\n if (cp < 0x2cea2) return true\n if (cp < 0x2ceb0) return false\n if (cp < 0x2ebe1) return true\n if (cp < 0x2f800) return false\n if (cp < 0x2fa1e) return true\n return false\n}\n\nfunction isLargeIdContinue(cp: number): boolean {\n if (cp < 0x1cd0) {\n if (cp < 0xd82) {\n if (cp < 0xa83) {\n if (cp < 0x93b) {\n if (cp < 0x6ea) {\n if (cp < 0x5c7) {\n if (cp === 0xb7) return true\n if (cp < 0x300) return false\n if (cp < 0x370) return true\n if (cp === 0x387) return true\n if (cp < 0x483) return false\n if (cp < 0x488) return true\n if (cp < 0x591) return false\n if (cp < 0x5be) return true\n if (cp === 0x5bf) return true\n if (cp < 0x5c1) return false\n if (cp < 0x5c3) return true\n if (cp < 0x5c4) return false\n if (cp < 0x5c6) return true\n return false\n }\n if (cp === 0x5c7) return true\n if (cp < 0x610) return false\n if (cp < 0x61b) return true\n if (cp < 0x64b) return false\n if (cp < 0x660) return true\n if (cp < 0x660) return false\n if (cp < 0x66a) return true\n if (cp === 0x670) return true\n if (cp < 0x6d6) return false\n if (cp < 0x6dd) return true\n if (cp < 0x6df) return false\n if (cp < 0x6e5) return true\n if (cp < 0x6e7) return false\n if (cp < 0x6e9) return true\n return false\n }\n if (cp < 0x816) {\n if (cp < 0x6ea) return false\n if (cp < 0x6ee) return true\n if (cp < 0x6f0) return false\n if (cp < 0x6fa) return true\n if (cp === 0x711) return true\n if (cp < 0x730) return false\n if (cp < 0x74b) return true\n if (cp < 0x7a6) return false\n if (cp < 0x7b1) return true\n if (cp < 0x7c0) return false\n if (cp < 0x7ca) return true\n if (cp < 0x7eb) return false\n if (cp < 0x7f4) return true\n if (cp === 0x7fd) return true\n return false\n }\n if (cp < 0x81a) return true\n if (cp < 0x81b) return false\n if (cp < 0x824) return true\n if (cp < 0x825) return false\n if (cp < 0x828) return true\n if (cp < 0x829) return false\n if (cp < 0x82e) return true\n if (cp < 0x859) return false\n if (cp < 0x85c) return true\n if (cp < 0x8d3) return false\n if (cp < 0x8e2) return true\n if (cp < 0x8e3) return false\n if (cp < 0x903) return true\n if (cp === 0x903) return true\n if (cp === 0x93a) return true\n return false\n }\n if (cp < 0x9cd) {\n if (cp < 0x962) {\n if (cp === 0x93b) return true\n if (cp === 0x93c) return true\n if (cp < 0x93e) return false\n if (cp < 0x941) return true\n if (cp < 0x941) return false\n if (cp < 0x949) return true\n if (cp < 0x949) return false\n if (cp < 0x94d) return true\n if (cp === 0x94d) return true\n if (cp < 0x94e) return false\n if (cp < 0x950) return true\n if (cp < 0x951) return false\n if (cp < 0x958) return true\n return false\n }\n if (cp < 0x964) return true\n if (cp < 0x966) return false\n if (cp < 0x970) return true\n if (cp === 0x981) return true\n if (cp < 0x982) return false\n if (cp < 0x984) return true\n if (cp === 0x9bc) return true\n if (cp < 0x9be) return false\n if (cp < 0x9c1) return true\n if (cp < 0x9c1) return false\n if (cp < 0x9c5) return true\n if (cp < 0x9c7) return false\n if (cp < 0x9c9) return true\n if (cp < 0x9cb) return false\n if (cp < 0x9cd) return true\n return false\n }\n if (cp < 0xa3e) {\n if (cp === 0x9cd) return true\n if (cp === 0x9d7) return true\n if (cp < 0x9e2) return false\n if (cp < 0x9e4) return true\n if (cp < 0x9e6) return false\n if (cp < 0x9f0) return true\n if (cp === 0x9fe) return true\n if (cp < 0xa01) return false\n if (cp < 0xa03) return true\n if (cp === 0xa03) return true\n if (cp === 0xa3c) return true\n return false\n }\n if (cp < 0xa41) return true\n if (cp < 0xa41) return false\n if (cp < 0xa43) return true\n if (cp < 0xa47) return false\n if (cp < 0xa49) return true\n if (cp < 0xa4b) return false\n if (cp < 0xa4e) return true\n if (cp === 0xa51) return true\n if (cp < 0xa66) return false\n if (cp < 0xa70) return true\n if (cp < 0xa70) return false\n if (cp < 0xa72) return true\n if (cp === 0xa75) return true\n if (cp < 0xa81) return false\n if (cp < 0xa83) return true\n return false\n }\n if (cp < 0xc00) {\n if (cp < 0xb41) {\n if (cp < 0xae2) {\n if (cp === 0xa83) return true\n if (cp === 0xabc) return true\n if (cp < 0xabe) return false\n if (cp < 0xac1) return true\n if (cp < 0xac1) return false\n if (cp < 0xac6) return true\n if (cp < 0xac7) return false\n if (cp < 0xac9) return true\n if (cp === 0xac9) return true\n if (cp < 0xacb) return false\n if (cp < 0xacd) return true\n if (cp === 0xacd) return true\n return false\n }\n if (cp < 0xae4) return true\n if (cp < 0xae6) return false\n if (cp < 0xaf0) return true\n if (cp < 0xafa) return false\n if (cp < 0xb00) return true\n if (cp === 0xb01) return true\n if (cp < 0xb02) return false\n if (cp < 0xb04) return true\n if (cp === 0xb3c) return true\n if (cp === 0xb3e) return true\n if (cp === 0xb3f) return true\n if (cp === 0xb40) return true\n return false\n }\n if (cp < 0xb82) {\n if (cp < 0xb41) return false\n if (cp < 0xb45) return true\n if (cp < 0xb47) return false\n if (cp < 0xb49) return true\n if (cp < 0xb4b) return false\n if (cp < 0xb4d) return true\n if (cp === 0xb4d) return true\n if (cp === 0xb56) return true\n if (cp === 0xb57) return true\n if (cp < 0xb62) return false\n if (cp < 0xb64) return true\n if (cp < 0xb66) return false\n if (cp < 0xb70) return true\n return false\n }\n if (cp === 0xb82) return true\n if (cp < 0xbbe) return false\n if (cp < 0xbc0) return true\n if (cp === 0xbc0) return true\n if (cp < 0xbc1) return false\n if (cp < 0xbc3) return true\n if (cp < 0xbc6) return false\n if (cp < 0xbc9) return true\n if (cp < 0xbca) return false\n if (cp < 0xbcd) return true\n if (cp === 0xbcd) return true\n if (cp === 0xbd7) return true\n if (cp < 0xbe6) return false\n if (cp < 0xbf0) return true\n return false\n }\n if (cp < 0xcc7) {\n if (cp < 0xc62) {\n if (cp === 0xc00) return true\n if (cp < 0xc01) return false\n if (cp < 0xc04) return true\n if (cp === 0xc04) return true\n if (cp < 0xc3e) return false\n if (cp < 0xc41) return true\n if (cp < 0xc41) return false\n if (cp < 0xc45) return true\n if (cp < 0xc46) return false\n if (cp < 0xc49) return true\n if (cp < 0xc4a) return false\n if (cp < 0xc4e) return true\n if (cp < 0xc55) return false\n if (cp < 0xc57) return true\n return false\n }\n if (cp < 0xc64) return true\n if (cp < 0xc66) return false\n if (cp < 0xc70) return true\n if (cp === 0xc81) return true\n if (cp < 0xc82) return false\n if (cp < 0xc84) return true\n if (cp === 0xcbc) return true\n if (cp === 0xcbe) return true\n if (cp === 0xcbf) return true\n if (cp < 0xcc0) return false\n if (cp < 0xcc5) return true\n if (cp === 0xcc6) return true\n return false\n }\n if (cp < 0xd3b) {\n if (cp < 0xcc7) return false\n if (cp < 0xcc9) return true\n if (cp < 0xcca) return false\n if (cp < 0xccc) return true\n if (cp < 0xccc) return false\n if (cp < 0xcce) return true\n if (cp < 0xcd5) return false\n if (cp < 0xcd7) return true\n if (cp < 0xce2) return false\n if (cp < 0xce4) return true\n if (cp < 0xce6) return false\n if (cp < 0xcf0) return true\n if (cp < 0xd00) return false\n if (cp < 0xd02) return true\n if (cp < 0xd02) return false\n if (cp < 0xd04) return true\n return false\n }\n if (cp < 0xd3d) return true\n if (cp < 0xd3e) return false\n if (cp < 0xd41) return true\n if (cp < 0xd41) return false\n if (cp < 0xd45) return true\n if (cp < 0xd46) return false\n if (cp < 0xd49) return true\n if (cp < 0xd4a) return false\n if (cp < 0xd4d) return true\n if (cp === 0xd4d) return true\n if (cp === 0xd57) return true\n if (cp < 0xd62) return false\n if (cp < 0xd64) return true\n if (cp < 0xd66) return false\n if (cp < 0xd70) return true\n return false\n }\n if (cp < 0x17e0) {\n if (cp < 0x1038) {\n if (cp < 0xf18) {\n if (cp < 0xe31) {\n if (cp < 0xd82) return false\n if (cp < 0xd84) return true\n if (cp === 0xdca) return true\n if (cp < 0xdcf) return false\n if (cp < 0xdd2) return true\n if (cp < 0xdd2) return false\n if (cp < 0xdd5) return true\n if (cp === 0xdd6) return true\n if (cp < 0xdd8) return false\n if (cp < 0xde0) return true\n if (cp < 0xde6) return false\n if (cp < 0xdf0) return true\n if (cp < 0xdf2) return false\n if (cp < 0xdf4) return true\n return false\n }\n if (cp === 0xe31) return true\n if (cp < 0xe34) return false\n if (cp < 0xe3b) return true\n if (cp < 0xe47) return false\n if (cp < 0xe4f) return true\n if (cp < 0xe50) return false\n if (cp < 0xe5a) return true\n if (cp === 0xeb1) return true\n if (cp < 0xeb4) return false\n if (cp < 0xeba) return true\n if (cp < 0xebb) return false\n if (cp < 0xebd) return true\n if (cp < 0xec8) return false\n if (cp < 0xece) return true\n if (cp < 0xed0) return false\n if (cp < 0xeda) return true\n return false\n }\n if (cp < 0xf80) {\n if (cp < 0xf18) return false\n if (cp < 0xf1a) return true\n if (cp < 0xf20) return false\n if (cp < 0xf2a) return true\n if (cp === 0xf35) return true\n if (cp === 0xf37) return true\n if (cp === 0xf39) return true\n if (cp < 0xf3e) return false\n if (cp < 0xf40) return true\n if (cp < 0xf71) return false\n if (cp < 0xf7f) return true\n if (cp === 0xf7f) return true\n return false\n }\n if (cp < 0xf85) return true\n if (cp < 0xf86) return false\n if (cp < 0xf88) return true\n if (cp < 0xf8d) return false\n if (cp < 0xf98) return true\n if (cp < 0xf99) return false\n if (cp < 0xfbd) return true\n if (cp === 0xfc6) return true\n if (cp < 0x102b) return false\n if (cp < 0x102d) return true\n if (cp < 0x102d) return false\n if (cp < 0x1031) return true\n if (cp === 0x1031) return true\n if (cp < 0x1032) return false\n if (cp < 0x1038) return true\n return false\n }\n if (cp < 0x1090) {\n if (cp < 0x1062) {\n if (cp === 0x1038) return true\n if (cp < 0x1039) return false\n if (cp < 0x103b) return true\n if (cp < 0x103b) return false\n if (cp < 0x103d) return true\n if (cp < 0x103d) return false\n if (cp < 0x103f) return true\n if (cp < 0x1040) return false\n if (cp < 0x104a) return true\n if (cp < 0x1056) return false\n if (cp < 0x1058) return true\n if (cp < 0x1058) return false\n if (cp < 0x105a) return true\n if (cp < 0x105e) return false\n if (cp < 0x1061) return true\n return false\n }\n if (cp < 0x1065) return true\n if (cp < 0x1067) return false\n if (cp < 0x106e) return true\n if (cp < 0x1071) return false\n if (cp < 0x1075) return true\n if (cp === 0x1082) return true\n if (cp < 0x1083) return false\n if (cp < 0x1085) return true\n if (cp < 0x1085) return false\n if (cp < 0x1087) return true\n if (cp < 0x1087) return false\n if (cp < 0x108d) return true\n if (cp === 0x108d) return true\n if (cp === 0x108f) return true\n return false\n }\n if (cp < 0x1772) {\n if (cp < 0x1090) return false\n if (cp < 0x109a) return true\n if (cp < 0x109a) return false\n if (cp < 0x109d) return true\n if (cp === 0x109d) return true\n if (cp < 0x135d) return false\n if (cp < 0x1360) return true\n if (cp < 0x1369) return false\n if (cp < 0x1372) return true\n if (cp < 0x1712) return false\n if (cp < 0x1715) return true\n if (cp < 0x1732) return false\n if (cp < 0x1735) return true\n if (cp < 0x1752) return false\n if (cp < 0x1754) return true\n return false\n }\n if (cp < 0x1774) return true\n if (cp < 0x17b4) return false\n if (cp < 0x17b6) return true\n if (cp === 0x17b6) return true\n if (cp < 0x17b7) return false\n if (cp < 0x17be) return true\n if (cp < 0x17be) return false\n if (cp < 0x17c6) return true\n if (cp === 0x17c6) return true\n if (cp < 0x17c7) return false\n if (cp < 0x17c9) return true\n if (cp < 0x17c9) return false\n if (cp < 0x17d4) return true\n if (cp === 0x17dd) return true\n return false\n }\n if (cp < 0x1b04) {\n if (cp < 0x1a1b) {\n if (cp < 0x1930) {\n if (cp < 0x17e0) return false\n if (cp < 0x17ea) return true\n if (cp < 0x180b) return false\n if (cp < 0x180e) return true\n if (cp < 0x1810) return false\n if (cp < 0x181a) return true\n if (cp === 0x18a9) return true\n if (cp < 0x1920) return false\n if (cp < 0x1923) return true\n if (cp < 0x1923) return false\n if (cp < 0x1927) return true\n if (cp < 0x1927) return false\n if (cp < 0x1929) return true\n if (cp < 0x1929) return false\n if (cp < 0x192c) return true\n return false\n }\n if (cp < 0x1932) return true\n if (cp === 0x1932) return true\n if (cp < 0x1933) return false\n if (cp < 0x1939) return true\n if (cp < 0x1939) return false\n if (cp < 0x193c) return true\n if (cp < 0x1946) return false\n if (cp < 0x1950) return true\n if (cp < 0x19d0) return false\n if (cp < 0x19da) return true\n if (cp === 0x19da) return true\n if (cp < 0x1a17) return false\n if (cp < 0x1a19) return true\n if (cp < 0x1a19) return false\n if (cp < 0x1a1b) return true\n return false\n }\n if (cp < 0x1a63) {\n if (cp === 0x1a1b) return true\n if (cp === 0x1a55) return true\n if (cp === 0x1a56) return true\n if (cp === 0x1a57) return true\n if (cp < 0x1a58) return false\n if (cp < 0x1a5f) return true\n if (cp === 0x1a60) return true\n if (cp === 0x1a61) return true\n if (cp === 0x1a62) return true\n return false\n }\n if (cp < 0x1a65) return true\n if (cp < 0x1a65) return false\n if (cp < 0x1a6d) return true\n if (cp < 0x1a6d) return false\n if (cp < 0x1a73) return true\n if (cp < 0x1a73) return false\n if (cp < 0x1a7d) return true\n if (cp === 0x1a7f) return true\n if (cp < 0x1a80) return false\n if (cp < 0x1a8a) return true\n if (cp < 0x1a90) return false\n if (cp < 0x1a9a) return true\n if (cp < 0x1ab0) return false\n if (cp < 0x1abe) return true\n if (cp < 0x1b00) return false\n if (cp < 0x1b04) return true\n return false\n }\n if (cp < 0x1baa) {\n if (cp < 0x1b43) {\n if (cp === 0x1b04) return true\n if (cp === 0x1b34) return true\n if (cp === 0x1b35) return true\n if (cp < 0x1b36) return false\n if (cp < 0x1b3b) return true\n if (cp === 0x1b3b) return true\n if (cp === 0x1b3c) return true\n if (cp < 0x1b3d) return false\n if (cp < 0x1b42) return true\n if (cp === 0x1b42) return true\n return false\n }\n if (cp < 0x1b45) return true\n if (cp < 0x1b50) return false\n if (cp < 0x1b5a) return true\n if (cp < 0x1b6b) return false\n if (cp < 0x1b74) return true\n if (cp < 0x1b80) return false\n if (cp < 0x1b82) return true\n if (cp === 0x1b82) return true\n if (cp === 0x1ba1) return true\n if (cp < 0x1ba2) return false\n if (cp < 0x1ba6) return true\n if (cp < 0x1ba6) return false\n if (cp < 0x1ba8) return true\n if (cp < 0x1ba8) return false\n if (cp < 0x1baa) return true\n return false\n }\n if (cp < 0x1bee) {\n if (cp === 0x1baa) return true\n if (cp < 0x1bab) return false\n if (cp < 0x1bae) return true\n if (cp < 0x1bb0) return false\n if (cp < 0x1bba) return true\n if (cp === 0x1be6) return true\n if (cp === 0x1be7) return true\n if (cp < 0x1be8) return false\n if (cp < 0x1bea) return true\n if (cp < 0x1bea) return false\n if (cp < 0x1bed) return true\n if (cp === 0x1bed) return true\n return false\n }\n if (cp === 0x1bee) return true\n if (cp < 0x1bef) return false\n if (cp < 0x1bf2) return true\n if (cp < 0x1bf2) return false\n if (cp < 0x1bf4) return true\n if (cp < 0x1c24) return false\n if (cp < 0x1c2c) return true\n if (cp < 0x1c2c) return false\n if (cp < 0x1c34) return true\n if (cp < 0x1c34) return false\n if (cp < 0x1c36) return true\n if (cp < 0x1c36) return false\n if (cp < 0x1c38) return true\n if (cp < 0x1c40) return false\n if (cp < 0x1c4a) return true\n if (cp < 0x1c50) return false\n if (cp < 0x1c5a) return true\n return false\n }\n if (cp < 0x1123e) {\n if (cp < 0xaab7) {\n if (cp < 0xa8b4) {\n if (cp < 0x2d7f) {\n if (cp < 0x1cf8) {\n if (cp < 0x1cd0) return false\n if (cp < 0x1cd3) return true\n if (cp < 0x1cd4) return false\n if (cp < 0x1ce1) return true\n if (cp === 0x1ce1) return true\n if (cp < 0x1ce2) return false\n if (cp < 0x1ce9) return true\n if (cp === 0x1ced) return true\n if (cp < 0x1cf2) return false\n if (cp < 0x1cf4) return true\n if (cp === 0x1cf4) return true\n if (cp === 0x1cf7) return true\n return false\n }\n if (cp < 0x1cfa) return true\n if (cp < 0x1dc0) return false\n if (cp < 0x1dfa) return true\n if (cp < 0x1dfb) return false\n if (cp < 0x1e00) return true\n if (cp < 0x203f) return false\n if (cp < 0x2041) return true\n if (cp === 0x2054) return true\n if (cp < 0x20d0) return false\n if (cp < 0x20dd) return true\n if (cp === 0x20e1) return true\n if (cp < 0x20e5) return false\n if (cp < 0x20f1) return true\n if (cp < 0x2cef) return false\n if (cp < 0x2cf2) return true\n return false\n }\n if (cp < 0xa69e) {\n if (cp === 0x2d7f) return true\n if (cp < 0x2de0) return false\n if (cp < 0x2e00) return true\n if (cp < 0x302a) return false\n if (cp < 0x302e) return true\n if (cp < 0x302e) return false\n if (cp < 0x3030) return true\n if (cp < 0x3099) return false\n if (cp < 0x309b) return true\n if (cp < 0xa620) return false\n if (cp < 0xa62a) return true\n if (cp === 0xa66f) return true\n if (cp < 0xa674) return false\n if (cp < 0xa67e) return true\n return false\n }\n if (cp < 0xa6a0) return true\n if (cp < 0xa6f0) return false\n if (cp < 0xa6f2) return true\n if (cp === 0xa802) return true\n if (cp === 0xa806) return true\n if (cp === 0xa80b) return true\n if (cp < 0xa823) return false\n if (cp < 0xa825) return true\n if (cp < 0xa825) return false\n if (cp < 0xa827) return true\n if (cp === 0xa827) return true\n if (cp < 0xa880) return false\n if (cp < 0xa882) return true\n return false\n }\n if (cp < 0xa9d0) {\n if (cp < 0xa952) {\n if (cp < 0xa8b4) return false\n if (cp < 0xa8c4) return true\n if (cp < 0xa8c4) return false\n if (cp < 0xa8c6) return true\n if (cp < 0xa8d0) return false\n if (cp < 0xa8da) return true\n if (cp < 0xa8e0) return false\n if (cp < 0xa8f2) return true\n if (cp === 0xa8ff) return true\n if (cp < 0xa900) return false\n if (cp < 0xa90a) return true\n if (cp < 0xa926) return false\n if (cp < 0xa92e) return true\n if (cp < 0xa947) return false\n if (cp < 0xa952) return true\n return false\n }\n if (cp < 0xa954) return true\n if (cp < 0xa980) return false\n if (cp < 0xa983) return true\n if (cp === 0xa983) return true\n if (cp === 0xa9b3) return true\n if (cp < 0xa9b4) return false\n if (cp < 0xa9b6) return true\n if (cp < 0xa9b6) return false\n if (cp < 0xa9ba) return true\n if (cp < 0xa9ba) return false\n if (cp < 0xa9bc) return true\n if (cp === 0xa9bc) return true\n if (cp < 0xa9bd) return false\n if (cp < 0xa9c1) return true\n return false\n }\n if (cp < 0xaa43) {\n if (cp < 0xa9d0) return false\n if (cp < 0xa9da) return true\n if (cp === 0xa9e5) return true\n if (cp < 0xa9f0) return false\n if (cp < 0xa9fa) return true\n if (cp < 0xaa29) return false\n if (cp < 0xaa2f) return true\n if (cp < 0xaa2f) return false\n if (cp < 0xaa31) return true\n if (cp < 0xaa31) return false\n if (cp < 0xaa33) return true\n if (cp < 0xaa33) return false\n if (cp < 0xaa35) return true\n if (cp < 0xaa35) return false\n if (cp < 0xaa37) return true\n return false\n }\n if (cp === 0xaa43) return true\n if (cp === 0xaa4c) return true\n if (cp === 0xaa4d) return true\n if (cp < 0xaa50) return false\n if (cp < 0xaa5a) return true\n if (cp === 0xaa7b) return true\n if (cp === 0xaa7c) return true\n if (cp === 0xaa7d) return true\n if (cp === 0xaab0) return true\n if (cp < 0xaab2) return false\n if (cp < 0xaab5) return true\n return false\n }\n if (cp < 0x10d30) {\n if (cp < 0xfe00) {\n if (cp < 0xabe3) {\n if (cp < 0xaab7) return false\n if (cp < 0xaab9) return true\n if (cp < 0xaabe) return false\n if (cp < 0xaac0) return true\n if (cp === 0xaac1) return true\n if (cp === 0xaaeb) return true\n if (cp < 0xaaec) return false\n if (cp < 0xaaee) return true\n if (cp < 0xaaee) return false\n if (cp < 0xaaf0) return true\n if (cp === 0xaaf5) return true\n if (cp === 0xaaf6) return true\n return false\n }\n if (cp < 0xabe5) return true\n if (cp === 0xabe5) return true\n if (cp < 0xabe6) return false\n if (cp < 0xabe8) return true\n if (cp === 0xabe8) return true\n if (cp < 0xabe9) return false\n if (cp < 0xabeb) return true\n if (cp === 0xabec) return true\n if (cp === 0xabed) return true\n if (cp < 0xabf0) return false\n if (cp < 0xabfa) return true\n if (cp === 0xfb1e) return true\n return false\n }\n if (cp < 0x10376) {\n if (cp < 0xfe00) return false\n if (cp < 0xfe10) return true\n if (cp < 0xfe20) return false\n if (cp < 0xfe30) return true\n if (cp < 0xfe33) return false\n if (cp < 0xfe35) return true\n if (cp < 0xfe4d) return false\n if (cp < 0xfe50) return true\n if (cp < 0xff10) return false\n if (cp < 0xff1a) return true\n if (cp === 0xff3f) return true\n if (cp === 0x101fd) return true\n if (cp === 0x102e0) return true\n return false\n }\n if (cp < 0x1037b) return true\n if (cp < 0x104a0) return false\n if (cp < 0x104aa) return true\n if (cp < 0x10a01) return false\n if (cp < 0x10a04) return true\n if (cp < 0x10a05) return false\n if (cp < 0x10a07) return true\n if (cp < 0x10a0c) return false\n if (cp < 0x10a10) return true\n if (cp < 0x10a38) return false\n if (cp < 0x10a3b) return true\n if (cp === 0x10a3f) return true\n if (cp < 0x10ae5) return false\n if (cp < 0x10ae7) return true\n if (cp < 0x10d24) return false\n if (cp < 0x10d28) return true\n return false\n }\n if (cp < 0x1112d) {\n if (cp < 0x11082) {\n if (cp < 0x10d30) return false\n if (cp < 0x10d3a) return true\n if (cp < 0x10f46) return false\n if (cp < 0x10f51) return true\n if (cp === 0x11000) return true\n if (cp === 0x11001) return true\n if (cp === 0x11002) return true\n if (cp < 0x11038) return false\n if (cp < 0x11047) return true\n if (cp < 0x11066) return false\n if (cp < 0x11070) return true\n if (cp < 0x1107f) return false\n if (cp < 0x11082) return true\n return false\n }\n if (cp === 0x11082) return true\n if (cp < 0x110b0) return false\n if (cp < 0x110b3) return true\n if (cp < 0x110b3) return false\n if (cp < 0x110b7) return true\n if (cp < 0x110b7) return false\n if (cp < 0x110b9) return true\n if (cp < 0x110b9) return false\n if (cp < 0x110bb) return true\n if (cp < 0x110f0) return false\n if (cp < 0x110fa) return true\n if (cp < 0x11100) return false\n if (cp < 0x11103) return true\n if (cp < 0x11127) return false\n if (cp < 0x1112c) return true\n if (cp === 0x1112c) return true\n return false\n }\n if (cp < 0x111bf) {\n if (cp < 0x1112d) return false\n if (cp < 0x11135) return true\n if (cp < 0x11136) return false\n if (cp < 0x11140) return true\n if (cp < 0x11145) return false\n if (cp < 0x11147) return true\n if (cp === 0x11173) return true\n if (cp < 0x11180) return false\n if (cp < 0x11182) return true\n if (cp === 0x11182) return true\n if (cp < 0x111b3) return false\n if (cp < 0x111b6) return true\n if (cp < 0x111b6) return false\n if (cp < 0x111bf) return true\n return false\n }\n if (cp < 0x111c1) return true\n if (cp < 0x111c9) return false\n if (cp < 0x111cd) return true\n if (cp < 0x111d0) return false\n if (cp < 0x111da) return true\n if (cp < 0x1122c) return false\n if (cp < 0x1122f) return true\n if (cp < 0x1122f) return false\n if (cp < 0x11232) return true\n if (cp < 0x11232) return false\n if (cp < 0x11234) return true\n if (cp === 0x11234) return true\n if (cp === 0x11235) return true\n if (cp < 0x11236) return false\n if (cp < 0x11238) return true\n return false\n }\n if (cp < 0x11a33) {\n if (cp < 0x115af) {\n if (cp < 0x11435) {\n if (cp < 0x1133e) {\n if (cp === 0x1123e) return true\n if (cp === 0x112df) return true\n if (cp < 0x112e0) return false\n if (cp < 0x112e3) return true\n if (cp < 0x112e3) return false\n if (cp < 0x112eb) return true\n if (cp < 0x112f0) return false\n if (cp < 0x112fa) return true\n if (cp < 0x11300) return false\n if (cp < 0x11302) return true\n if (cp < 0x11302) return false\n if (cp < 0x11304) return true\n if (cp < 0x1133b) return false\n if (cp < 0x1133d) return true\n return false\n }\n if (cp < 0x11340) return true\n if (cp === 0x11340) return true\n if (cp < 0x11341) return false\n if (cp < 0x11345) return true\n if (cp < 0x11347) return false\n if (cp < 0x11349) return true\n if (cp < 0x1134b) return false\n if (cp < 0x1134e) return true\n if (cp === 0x11357) return true\n if (cp < 0x11362) return false\n if (cp < 0x11364) return true\n if (cp < 0x11366) return false\n if (cp < 0x1136d) return true\n if (cp < 0x11370) return false\n if (cp < 0x11375) return true\n return false\n }\n if (cp < 0x114b0) {\n if (cp < 0x11435) return false\n if (cp < 0x11438) return true\n if (cp < 0x11438) return false\n if (cp < 0x11440) return true\n if (cp < 0x11440) return false\n if (cp < 0x11442) return true\n if (cp < 0x11442) return false\n if (cp < 0x11445) return true\n if (cp === 0x11445) return true\n if (cp === 0x11446) return true\n if (cp < 0x11450) return false\n if (cp < 0x1145a) return true\n if (cp === 0x1145e) return true\n return false\n }\n if (cp < 0x114b3) return true\n if (cp < 0x114b3) return false\n if (cp < 0x114b9) return true\n if (cp === 0x114b9) return true\n if (cp === 0x114ba) return true\n if (cp < 0x114bb) return false\n if (cp < 0x114bf) return true\n if (cp < 0x114bf) return false\n if (cp < 0x114c1) return true\n if (cp === 0x114c1) return true\n if (cp < 0x114c2) return false\n if (cp < 0x114c4) return true\n if (cp < 0x114d0) return false\n if (cp < 0x114da) return true\n return false\n }\n if (cp < 0x116ae) {\n if (cp < 0x11633) {\n if (cp < 0x115af) return false\n if (cp < 0x115b2) return true\n if (cp < 0x115b2) return false\n if (cp < 0x115b6) return true\n if (cp < 0x115b8) return false\n if (cp < 0x115bc) return true\n if (cp < 0x115bc) return false\n if (cp < 0x115be) return true\n if (cp === 0x115be) return true\n if (cp < 0x115bf) return false\n if (cp < 0x115c1) return true\n if (cp < 0x115dc) return false\n if (cp < 0x115de) return true\n if (cp < 0x11630) return false\n if (cp < 0x11633) return true\n return false\n }\n if (cp < 0x1163b) return true\n if (cp < 0x1163b) return false\n if (cp < 0x1163d) return true\n if (cp === 0x1163d) return true\n if (cp === 0x1163e) return true\n if (cp < 0x1163f) return false\n if (cp < 0x11641) return true\n if (cp < 0x11650) return false\n if (cp < 0x1165a) return true\n if (cp === 0x116ab) return true\n if (cp === 0x116ac) return true\n if (cp === 0x116ad) return true\n return false\n }\n if (cp < 0x11726) {\n if (cp < 0x116ae) return false\n if (cp < 0x116b0) return true\n if (cp < 0x116b0) return false\n if (cp < 0x116b6) return true\n if (cp === 0x116b6) return true\n if (cp === 0x116b7) return true\n if (cp < 0x116c0) return false\n if (cp < 0x116ca) return true\n if (cp < 0x1171d) return false\n if (cp < 0x11720) return true\n if (cp < 0x11720) return false\n if (cp < 0x11722) return true\n if (cp < 0x11722) return false\n if (cp < 0x11726) return true\n return false\n }\n if (cp === 0x11726) return true\n if (cp < 0x11727) return false\n if (cp < 0x1172c) return true\n if (cp < 0x11730) return false\n if (cp < 0x1173a) return true\n if (cp < 0x1182c) return false\n if (cp < 0x1182f) return true\n if (cp < 0x1182f) return false\n if (cp < 0x11838) return true\n if (cp === 0x11838) return true\n if (cp < 0x11839) return false\n if (cp < 0x1183b) return true\n if (cp < 0x118e0) return false\n if (cp < 0x118ea) return true\n if (cp < 0x11a01) return false\n if (cp < 0x11a0b) return true\n return false\n }\n if (cp < 0x11d97) {\n if (cp < 0x11ca9) {\n if (cp < 0x11a97) {\n if (cp < 0x11a33) return false\n if (cp < 0x11a39) return true\n if (cp === 0x11a39) return true\n if (cp < 0x11a3b) return false\n if (cp < 0x11a3f) return true\n if (cp === 0x11a47) return true\n if (cp < 0x11a51) return false\n if (cp < 0x11a57) return true\n if (cp < 0x11a57) return false\n if (cp < 0x11a59) return true\n if (cp < 0x11a59) return false\n if (cp < 0x11a5c) return true\n if (cp < 0x11a8a) return false\n if (cp < 0x11a97) return true\n return false\n }\n if (cp === 0x11a97) return true\n if (cp < 0x11a98) return false\n if (cp < 0x11a9a) return true\n if (cp === 0x11c2f) return true\n if (cp < 0x11c30) return false\n if (cp < 0x11c37) return true\n if (cp < 0x11c38) return false\n if (cp < 0x11c3e) return true\n if (cp === 0x11c3e) return true\n if (cp === 0x11c3f) return true\n if (cp < 0x11c50) return false\n if (cp < 0x11c5a) return true\n if (cp < 0x11c92) return false\n if (cp < 0x11ca8) return true\n return false\n }\n if (cp < 0x11d3c) {\n if (cp === 0x11ca9) return true\n if (cp < 0x11caa) return false\n if (cp < 0x11cb1) return true\n if (cp === 0x11cb1) return true\n if (cp < 0x11cb2) return false\n if (cp < 0x11cb4) return true\n if (cp === 0x11cb4) return true\n if (cp < 0x11cb5) return false\n if (cp < 0x11cb7) return true\n if (cp < 0x11d31) return false\n if (cp < 0x11d37) return true\n if (cp === 0x11d3a) return true\n return false\n }\n if (cp < 0x11d3e) return true\n if (cp < 0x11d3f) return false\n if (cp < 0x11d46) return true\n if (cp === 0x11d47) return true\n if (cp < 0x11d50) return false\n if (cp < 0x11d5a) return true\n if (cp < 0x11d8a) return false\n if (cp < 0x11d8f) return true\n if (cp < 0x11d90) return false\n if (cp < 0x11d92) return true\n if (cp < 0x11d93) return false\n if (cp < 0x11d95) return true\n if (cp === 0x11d95) return true\n if (cp === 0x11d96) return true\n return false\n }\n if (cp < 0x1d242) {\n if (cp < 0x16f51) {\n if (cp === 0x11d97) return true\n if (cp < 0x11da0) return false\n if (cp < 0x11daa) return true\n if (cp < 0x11ef3) return false\n if (cp < 0x11ef5) return true\n if (cp < 0x11ef5) return false\n if (cp < 0x11ef7) return true\n if (cp < 0x16a60) return false\n if (cp < 0x16a6a) return true\n if (cp < 0x16af0) return false\n if (cp < 0x16af5) return true\n if (cp < 0x16b30) return false\n if (cp < 0x16b37) return true\n if (cp < 0x16b50) return false\n if (cp < 0x16b5a) return true\n return false\n }\n if (cp < 0x16f7f) return true\n if (cp < 0x16f8f) return false\n if (cp < 0x16f93) return true\n if (cp < 0x1bc9d) return false\n if (cp < 0x1bc9f) return true\n if (cp < 0x1d165) return false\n if (cp < 0x1d167) return true\n if (cp < 0x1d167) return false\n if (cp < 0x1d16a) return true\n if (cp < 0x1d16d) return false\n if (cp < 0x1d173) return true\n if (cp < 0x1d17b) return false\n if (cp < 0x1d183) return true\n if (cp < 0x1d185) return false\n if (cp < 0x1d18c) return true\n if (cp < 0x1d1aa) return false\n if (cp < 0x1d1ae) return true\n return false\n }\n if (cp < 0x1e000) {\n if (cp < 0x1d242) return false\n if (cp < 0x1d245) return true\n if (cp < 0x1d7ce) return false\n if (cp < 0x1d800) return true\n if (cp < 0x1da00) return false\n if (cp < 0x1da37) return true\n if (cp < 0x1da3b) return false\n if (cp < 0x1da6d) return true\n if (cp === 0x1da75) return true\n if (cp === 0x1da84) return true\n if (cp < 0x1da9b) return false\n if (cp < 0x1daa0) return true\n if (cp < 0x1daa1) return false\n if (cp < 0x1dab0) return true\n return false\n }\n if (cp < 0x1e007) return true\n if (cp < 0x1e008) return false\n if (cp < 0x1e019) return true\n if (cp < 0x1e01b) return false\n if (cp < 0x1e022) return true\n if (cp < 0x1e023) return false\n if (cp < 0x1e025) return true\n if (cp < 0x1e026) return false\n if (cp < 0x1e02b) return true\n if (cp < 0x1e8d0) return false\n if (cp < 0x1e8d7) return true\n if (cp < 0x1e944) return false\n if (cp < 0x1e94b) return true\n if (cp < 0x1e950) return false\n if (cp < 0x1e95a) return true\n if (cp < 0xe0100) return false\n if (cp < 0xe01f0) return true\n return false\n}\n","const PropertyData: Object & { [key: string]: Set } = {\n $LONE: new Set([\n \"ASCII\",\n \"ASCII_Hex_Digit\",\n \"AHex\",\n \"Alphabetic\",\n \"Alpha\",\n \"Any\",\n \"Assigned\",\n \"Bidi_Control\",\n \"Bidi_C\",\n \"Bidi_Mirrored\",\n \"Bidi_M\",\n \"Case_Ignorable\",\n \"CI\",\n \"Cased\",\n \"Changes_When_Casefolded\",\n \"CWCF\",\n \"Changes_When_Casemapped\",\n \"CWCM\",\n \"Changes_When_Lowercased\",\n \"CWL\",\n \"Changes_When_NFKC_Casefolded\",\n \"CWKCF\",\n \"Changes_When_Titlecased\",\n \"CWT\",\n \"Changes_When_Uppercased\",\n \"CWU\",\n \"Dash\",\n \"Default_Ignorable_Code_Point\",\n \"DI\",\n \"Deprecated\",\n \"Dep\",\n \"Diacritic\",\n \"Dia\",\n \"Emoji\",\n \"Emoji_Component\",\n \"Emoji_Modifier\",\n \"Emoji_Modifier_Base\",\n \"Emoji_Presentation\",\n \"Extender\",\n \"Ext\",\n \"Grapheme_Base\",\n \"Gr_Base\",\n \"Grapheme_Extend\",\n \"Gr_Ext\",\n \"Hex_Digit\",\n \"Hex\",\n \"IDS_Binary_Operator\",\n \"IDSB\",\n \"IDS_Trinary_Operator\",\n \"IDST\",\n \"ID_Continue\",\n \"IDC\",\n \"ID_Start\",\n \"IDS\",\n \"Ideographic\",\n \"Ideo\",\n \"Join_Control\",\n \"Join_C\",\n \"Logical_Order_Exception\",\n \"LOE\",\n \"Lowercase\",\n \"Lower\",\n \"Math\",\n \"Noncharacter_Code_Point\",\n \"NChar\",\n \"Pattern_Syntax\",\n \"Pat_Syn\",\n \"Pattern_White_Space\",\n \"Pat_WS\",\n \"Quotation_Mark\",\n \"QMark\",\n \"Radical\",\n \"Regional_Indicator\",\n \"RI\",\n \"Sentence_Terminal\",\n \"STerm\",\n \"Soft_Dotted\",\n \"SD\",\n \"Terminal_Punctuation\",\n \"Term\",\n \"Unified_Ideograph\",\n \"UIdeo\",\n \"Uppercase\",\n \"Upper\",\n \"Variation_Selector\",\n \"VS\",\n \"White_Space\",\n \"space\",\n \"XID_Continue\",\n \"XIDC\",\n \"XID_Start\",\n \"XIDS\",\n ]),\n General_Category: new Set([\n \"Cased_Letter\",\n \"LC\",\n \"Close_Punctuation\",\n \"Pe\",\n \"Connector_Punctuation\",\n \"Pc\",\n \"Control\",\n \"Cc\",\n \"cntrl\",\n \"Currency_Symbol\",\n \"Sc\",\n \"Dash_Punctuation\",\n \"Pd\",\n \"Decimal_Number\",\n \"Nd\",\n \"digit\",\n \"Enclosing_Mark\",\n \"Me\",\n \"Final_Punctuation\",\n \"Pf\",\n \"Format\",\n \"Cf\",\n \"Initial_Punctuation\",\n \"Pi\",\n \"Letter\",\n \"L\",\n \"Letter_Number\",\n \"Nl\",\n \"Line_Separator\",\n \"Zl\",\n \"Lowercase_Letter\",\n \"Ll\",\n \"Mark\",\n \"M\",\n \"Combining_Mark\",\n \"Math_Symbol\",\n \"Sm\",\n \"Modifier_Letter\",\n \"Lm\",\n \"Modifier_Symbol\",\n \"Sk\",\n \"Nonspacing_Mark\",\n \"Mn\",\n \"Number\",\n \"N\",\n \"Open_Punctuation\",\n \"Ps\",\n \"Other\",\n \"C\",\n \"Other_Letter\",\n \"Lo\",\n \"Other_Number\",\n \"No\",\n \"Other_Punctuation\",\n \"Po\",\n \"Other_Symbol\",\n \"So\",\n \"Paragraph_Separator\",\n \"Zp\",\n \"Private_Use\",\n \"Co\",\n \"Punctuation\",\n \"P\",\n \"punct\",\n \"Separator\",\n \"Z\",\n \"Space_Separator\",\n \"Zs\",\n \"Spacing_Mark\",\n \"Mc\",\n \"Surrogate\",\n \"Cs\",\n \"Symbol\",\n \"S\",\n \"Titlecase_Letter\",\n \"Lt\",\n \"Unassigned\",\n \"Cn\",\n \"Uppercase_Letter\",\n \"Lu\",\n ]),\n Script: new Set([\n \"Adlam\",\n \"Adlm\",\n \"Ahom\",\n \"Anatolian_Hieroglyphs\",\n \"Hluw\",\n \"Arabic\",\n \"Arab\",\n \"Armenian\",\n \"Armn\",\n \"Avestan\",\n \"Avst\",\n \"Balinese\",\n \"Bali\",\n \"Bamum\",\n \"Bamu\",\n \"Bassa_Vah\",\n \"Bass\",\n \"Batak\",\n \"Batk\",\n \"Bengali\",\n \"Beng\",\n \"Bhaiksuki\",\n \"Bhks\",\n \"Bopomofo\",\n \"Bopo\",\n \"Brahmi\",\n \"Brah\",\n \"Braille\",\n \"Brai\",\n \"Buginese\",\n \"Bugi\",\n \"Buhid\",\n \"Buhd\",\n \"Canadian_Aboriginal\",\n \"Cans\",\n \"Carian\",\n \"Cari\",\n \"Caucasian_Albanian\",\n \"Aghb\",\n \"Chakma\",\n \"Cakm\",\n \"Cham\",\n \"Cherokee\",\n \"Cher\",\n \"Common\",\n \"Zyyy\",\n \"Coptic\",\n \"Copt\",\n \"Qaac\",\n \"Cuneiform\",\n \"Xsux\",\n \"Cypriot\",\n \"Cprt\",\n \"Cyrillic\",\n \"Cyrl\",\n \"Deseret\",\n \"Dsrt\",\n \"Devanagari\",\n \"Deva\",\n \"Duployan\",\n \"Dupl\",\n \"Egyptian_Hieroglyphs\",\n \"Egyp\",\n \"Elbasan\",\n \"Elba\",\n \"Ethiopic\",\n \"Ethi\",\n \"Georgian\",\n \"Geor\",\n \"Glagolitic\",\n \"Glag\",\n \"Gothic\",\n \"Goth\",\n \"Grantha\",\n \"Gran\",\n \"Greek\",\n \"Grek\",\n \"Gujarati\",\n \"Gujr\",\n \"Gurmukhi\",\n \"Guru\",\n \"Han\",\n \"Hani\",\n \"Hangul\",\n \"Hang\",\n \"Hanunoo\",\n \"Hano\",\n \"Hatran\",\n \"Hatr\",\n \"Hebrew\",\n \"Hebr\",\n \"Hiragana\",\n \"Hira\",\n \"Imperial_Aramaic\",\n \"Armi\",\n \"Inherited\",\n \"Zinh\",\n \"Qaai\",\n \"Inscriptional_Pahlavi\",\n \"Phli\",\n \"Inscriptional_Parthian\",\n \"Prti\",\n \"Javanese\",\n \"Java\",\n \"Kaithi\",\n \"Kthi\",\n \"Kannada\",\n \"Knda\",\n \"Katakana\",\n \"Kana\",\n \"Kayah_Li\",\n \"Kali\",\n \"Kharoshthi\",\n \"Khar\",\n \"Khmer\",\n \"Khmr\",\n \"Khojki\",\n \"Khoj\",\n \"Khudawadi\",\n \"Sind\",\n \"Lao\",\n \"Laoo\",\n \"Latin\",\n \"Latn\",\n \"Lepcha\",\n \"Lepc\",\n \"Limbu\",\n \"Limb\",\n \"Linear_A\",\n \"Lina\",\n \"Linear_B\",\n \"Linb\",\n \"Lisu\",\n \"Lycian\",\n \"Lyci\",\n \"Lydian\",\n \"Lydi\",\n \"Mahajani\",\n \"Mahj\",\n \"Malayalam\",\n \"Mlym\",\n \"Mandaic\",\n \"Mand\",\n \"Manichaean\",\n \"Mani\",\n \"Marchen\",\n \"Marc\",\n \"Masaram_Gondi\",\n \"Gonm\",\n \"Meetei_Mayek\",\n \"Mtei\",\n \"Mende_Kikakui\",\n \"Mend\",\n \"Meroitic_Cursive\",\n \"Merc\",\n \"Meroitic_Hieroglyphs\",\n \"Mero\",\n \"Miao\",\n \"Plrd\",\n \"Modi\",\n \"Mongolian\",\n \"Mong\",\n \"Mro\",\n \"Mroo\",\n \"Multani\",\n \"Mult\",\n \"Myanmar\",\n \"Mymr\",\n \"Nabataean\",\n \"Nbat\",\n \"New_Tai_Lue\",\n \"Talu\",\n \"Newa\",\n \"Nko\",\n \"Nkoo\",\n \"Nushu\",\n \"Nshu\",\n \"Ogham\",\n \"Ogam\",\n \"Ol_Chiki\",\n \"Olck\",\n \"Old_Hungarian\",\n \"Hung\",\n \"Old_Italic\",\n \"Ital\",\n \"Old_North_Arabian\",\n \"Narb\",\n \"Old_Permic\",\n \"Perm\",\n \"Old_Persian\",\n \"Xpeo\",\n \"Old_South_Arabian\",\n \"Sarb\",\n \"Old_Turkic\",\n \"Orkh\",\n \"Oriya\",\n \"Orya\",\n \"Osage\",\n \"Osge\",\n \"Osmanya\",\n \"Osma\",\n \"Pahawh_Hmong\",\n \"Hmng\",\n \"Palmyrene\",\n \"Palm\",\n \"Pau_Cin_Hau\",\n \"Pauc\",\n \"Phags_Pa\",\n \"Phag\",\n \"Phoenician\",\n \"Phnx\",\n \"Psalter_Pahlavi\",\n \"Phlp\",\n \"Rejang\",\n \"Rjng\",\n \"Runic\",\n \"Runr\",\n \"Samaritan\",\n \"Samr\",\n \"Saurashtra\",\n \"Saur\",\n \"Sharada\",\n \"Shrd\",\n \"Shavian\",\n \"Shaw\",\n \"Siddham\",\n \"Sidd\",\n \"SignWriting\",\n \"Sgnw\",\n \"Sinhala\",\n \"Sinh\",\n \"Sora_Sompeng\",\n \"Sora\",\n \"Soyombo\",\n \"Soyo\",\n \"Sundanese\",\n \"Sund\",\n \"Syloti_Nagri\",\n \"Sylo\",\n \"Syriac\",\n \"Syrc\",\n \"Tagalog\",\n \"Tglg\",\n \"Tagbanwa\",\n \"Tagb\",\n \"Tai_Le\",\n \"Tale\",\n \"Tai_Tham\",\n \"Lana\",\n \"Tai_Viet\",\n \"Tavt\",\n \"Takri\",\n \"Takr\",\n \"Tamil\",\n \"Taml\",\n \"Tangut\",\n \"Tang\",\n \"Telugu\",\n \"Telu\",\n \"Thaana\",\n \"Thaa\",\n \"Thai\",\n \"Tibetan\",\n \"Tibt\",\n \"Tifinagh\",\n \"Tfng\",\n \"Tirhuta\",\n \"Tirh\",\n \"Ugaritic\",\n \"Ugar\",\n \"Vai\",\n \"Vaii\",\n \"Warang_Citi\",\n \"Wara\",\n \"Yi\",\n \"Yiii\",\n \"Zanabazar_Square\",\n \"Zanb\",\n ]),\n}\n\nPropertyData.gc = PropertyData.General_Category\nPropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =\n PropertyData.Script\n\nexport { PropertyData }\n","export { isIdContinue, isIdStart } from \"./ids\"\nexport { PropertyData } from \"./property-data\"\n\nexport const Null = 0x00\nexport const Backspace = 0x08\nexport const CharacterTabulation = 0x09\nexport const LineFeed = 0x0a\nexport const LineTabulation = 0x0b\nexport const FormFeed = 0x0c\nexport const CarriageReturn = 0x0d\nexport const ExclamationMark = 0x21\nexport const DollarSign = 0x24\nexport const LeftParenthesis = 0x28\nexport const RightParenthesis = 0x29\nexport const Asterisk = 0x2a\nexport const PlusSign = 0x2b\nexport const Comma = 0x2c\nexport const HyphenMinus = 0x2d\nexport const FullStop = 0x2e\nexport const Solidus = 0x2f\nexport const DigitZero = 0x30\nexport const DigitOne = 0x31\nexport const DigitSeven = 0x37\nexport const DigitNine = 0x39\nexport const Colon = 0x3a\nexport const LessThanSign = 0x3c\nexport const EqualsSign = 0x3d\nexport const GreaterThanSign = 0x3e\nexport const QuestionMark = 0x3f\nexport const LatinCapitalLetterA = 0x41\nexport const LatinCapitalLetterB = 0x42\nexport const LatinCapitalLetterD = 0x44\nexport const LatinCapitalLetterF = 0x46\nexport const LatinCapitalLetterP = 0x50\nexport const LatinCapitalLetterS = 0x53\nexport const LatinCapitalLetterW = 0x57\nexport const LatinCapitalLetterZ = 0x5a\nexport const LowLine = 0x5f\nexport const LatinSmallLetterA = 0x61\nexport const LatinSmallLetterB = 0x62\nexport const LatinSmallLetterC = 0x63\nexport const LatinSmallLetterD = 0x64\nexport const LatinSmallLetterF = 0x66\nexport const LatinSmallLetterG = 0x67\nexport const LatinSmallLetterI = 0x69\nexport const LatinSmallLetterK = 0x6b\nexport const LatinSmallLetterM = 0x6d\nexport const LatinSmallLetterN = 0x6e\nexport const LatinSmallLetterP = 0x70\nexport const LatinSmallLetterR = 0x72\nexport const LatinSmallLetterS = 0x73\nexport const LatinSmallLetterT = 0x74\nexport const LatinSmallLetterU = 0x75\nexport const LatinSmallLetterV = 0x76\nexport const LatinSmallLetterW = 0x77\nexport const LatinSmallLetterX = 0x78\nexport const LatinSmallLetterY = 0x79\nexport const LatinSmallLetterZ = 0x7a\nexport const LeftSquareBracket = 0x5b\nexport const ReverseSolidus = 0x5c\nexport const RightSquareBracket = 0x5d\nexport const CircumflexAccent = 0x5e\nexport const LeftCurlyBracket = 0x7b\nexport const VerticalLine = 0x7c\nexport const RightCurlyBracket = 0x7d\nexport const ZeroWidthNonJoiner = 0x200c\nexport const ZeroWidthJoiner = 0x200d\nexport const LineSeparator = 0x2028\nexport const ParagraphSeparator = 0x2029\n\nexport const MinCodePoint = 0x00\nexport const MaxCodePoint = 0x10ffff\n\nexport function isLatinLetter(code: number): boolean {\n return (\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)\n )\n}\n\nexport function isDecimalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitNine\n}\n\nexport function isOctalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitSeven\n}\n\nexport function isHexDigit(code: number): boolean {\n return (\n (code >= DigitZero && code <= DigitNine) ||\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterF)\n )\n}\n\nexport function isLineTerminator(code: number): boolean {\n return (\n code === LineFeed ||\n code === CarriageReturn ||\n code === LineSeparator ||\n code === ParagraphSeparator\n )\n}\n\nexport function isValidUnicode(code: number): boolean {\n return code >= MinCodePoint && code <= MaxCodePoint\n}\n\nexport function digitToInt(code: number): number {\n if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n return code - LatinSmallLetterA + 10\n }\n if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n return code - LatinCapitalLetterA + 10\n }\n return code - DigitZero\n}\n","const legacyImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.charCodeAt(i) : -1\n },\n width(c: number): number {\n return 1\n },\n}\nconst unicodeImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.codePointAt(i)! : -1\n },\n width(c: number): number {\n return c > 0xffff ? 2 : 1\n },\n}\n\nexport class Reader {\n private _impl = legacyImpl\n private _s = \"\"\n private _i = 0\n private _end = 0\n private _cp1: number = -1\n private _w1 = 1\n private _cp2: number = -1\n private _w2 = 1\n private _cp3: number = -1\n private _w3 = 1\n private _cp4: number = -1\n\n public get source(): string {\n return this._s\n }\n\n public get index(): number {\n return this._i\n }\n\n public get currentCodePoint(): number {\n return this._cp1\n }\n\n public get nextCodePoint(): number {\n return this._cp2\n }\n\n public get nextCodePoint2(): number {\n return this._cp3\n }\n\n public get nextCodePoint3(): number {\n return this._cp4\n }\n\n public reset(\n source: string,\n start: number,\n end: number,\n uFlag: boolean,\n ): void {\n this._impl = uFlag ? unicodeImpl : legacyImpl\n this._s = source\n this._end = end\n this.rewind(start)\n }\n\n public rewind(index: number): void {\n const impl = this._impl\n this._i = index\n this._cp1 = impl.at(this._s, this._end, index)\n this._w1 = impl.width(this._cp1)\n this._cp2 = impl.at(this._s, this._end, index + this._w1)\n this._w2 = impl.width(this._cp2)\n this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2)\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n index + this._w1 + this._w2 + this._w3,\n )\n }\n\n public advance(): void {\n if (this._cp1 !== -1) {\n const impl = this._impl\n this._i += this._w1\n this._cp1 = this._cp2\n this._w1 = this._w2\n this._cp2 = this._cp3\n this._w2 = impl.width(this._cp2)\n this._cp3 = this._cp4\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n this._i + this._w1 + this._w2 + this._w3,\n )\n }\n }\n\n public eat(cp: number): boolean {\n if (this._cp1 === cp) {\n this.advance()\n return true\n }\n return false\n }\n\n public eat2(cp1: number, cp2: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2) {\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n\n public eat3(cp1: number, cp2: number, cp3: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n this.advance()\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n}\n","export class RegExpSyntaxError extends SyntaxError {\n public index: number\n public constructor(\n source: string,\n uFlag: boolean,\n index: number,\n message: string,\n ) {\n /*eslint-disable no-param-reassign */\n if (source) {\n if (source[0] !== \"/\") {\n source = `/${source}/${uFlag ? \"u\" : \"\"}`\n }\n source = `: ${source}`\n }\n /*eslint-enable no-param-reassign */\n\n super(`Invalid regular expression${source}: ${message}`)\n this.index = index\n }\n}\n","import { Reader } from \"./reader\"\nimport { RegExpSyntaxError } from \"./regexp-syntax-error\"\nimport {\n Asterisk,\n Backspace,\n CarriageReturn,\n CharacterTabulation,\n CircumflexAccent,\n Colon,\n Comma,\n DigitNine,\n DigitOne,\n digitToInt,\n DigitZero,\n DollarSign,\n EqualsSign,\n ExclamationMark,\n FormFeed,\n FullStop,\n GreaterThanSign,\n HyphenMinus,\n isDecimalDigit,\n isHexDigit,\n isIdContinue,\n isIdStart,\n isLatinLetter,\n isLineTerminator,\n isOctalDigit,\n isValidUnicode,\n LatinCapitalLetterB,\n LatinCapitalLetterD,\n LatinCapitalLetterP,\n LatinCapitalLetterS,\n LatinCapitalLetterW,\n LatinSmallLetterB,\n LatinSmallLetterC,\n LatinSmallLetterD,\n LatinSmallLetterF,\n LatinSmallLetterG,\n LatinSmallLetterI,\n LatinSmallLetterK,\n LatinSmallLetterM,\n LatinSmallLetterN,\n LatinSmallLetterP,\n LatinSmallLetterR,\n LatinSmallLetterS,\n LatinSmallLetterT,\n LatinSmallLetterU,\n LatinSmallLetterV,\n LatinSmallLetterW,\n LatinSmallLetterX,\n LatinSmallLetterY,\n LeftCurlyBracket,\n LeftParenthesis,\n LeftSquareBracket,\n LessThanSign,\n LineFeed,\n LineTabulation,\n LowLine,\n PlusSign,\n PropertyData,\n QuestionMark,\n ReverseSolidus,\n RightCurlyBracket,\n RightParenthesis,\n RightSquareBracket,\n Solidus,\n VerticalLine,\n ZeroWidthJoiner,\n ZeroWidthNonJoiner,\n} from \"./unicode\"\n\nfunction isSyntaxCharacter(cp: number): boolean {\n return (\n cp === CircumflexAccent ||\n cp === DollarSign ||\n cp === ReverseSolidus ||\n cp === FullStop ||\n cp === Asterisk ||\n cp === PlusSign ||\n cp === QuestionMark ||\n cp === LeftParenthesis ||\n cp === RightParenthesis ||\n cp === LeftSquareBracket ||\n cp === RightSquareBracket ||\n cp === LeftCurlyBracket ||\n cp === RightCurlyBracket ||\n cp === VerticalLine\n )\n}\n\nfunction isRegExpIdentifierStart(cp: number): boolean {\n return isIdStart(cp) || cp === DollarSign || cp === LowLine\n}\n\nfunction isRegExpIdentifierPart(cp: number): boolean {\n return (\n isIdContinue(cp) ||\n cp === DollarSign ||\n cp === LowLine ||\n cp === ZeroWidthNonJoiner ||\n cp === ZeroWidthJoiner\n )\n}\n\nfunction isUnicodePropertyNameCharacter(cp: number): boolean {\n return isLatinLetter(cp) || cp === LowLine\n}\n\nfunction isUnicodePropertyValueCharacter(cp: number): boolean {\n return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp)\n}\n\nfunction isValidUnicodeProperty(name: string, value: string): boolean {\n //eslint-disable-next-line no-prototype-builtins\n return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value)\n}\n\nfunction isValidUnicodePropertyName(name: string): boolean {\n return PropertyData.$LONE.has(name)\n}\n\nexport namespace RegExpValidator {\n /**\n * The options for RegExpValidator construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n\n /**\n * A function that is called when the validator entered a RegExp literal.\n * @param start The 0-based index of the first character.\n */\n onLiteralEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a RegExp literal.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onLiteralLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator found flags.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param global `g` flag.\n * @param ignoreCase `i` flag.\n * @param multiline `m` flag.\n * @param unicode `u` flag.\n * @param sticky `y` flag.\n * @param dotAll `s` flag.\n */\n onFlags?(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a pattern.\n * @param start The 0-based index of the first character.\n */\n onPatternEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a pattern.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onPatternLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a disjunction.\n * @param start The 0-based index of the first character.\n */\n onDisjunctionEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a disjunction.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onDisjunctionLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered an alternative.\n * @param start The 0-based index of the first character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeEnter?(start: number, index: number): void\n\n /**\n * A function that is called when the validator left an alternative.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeLeave?(start: number, end: number, index: number): void\n\n /**\n * A function that is called when the validator entered an uncapturing group.\n * @param start The 0-based index of the first character.\n */\n onGroupEnter?(start: number): void\n\n /**\n * A function that is called when the validator left an uncapturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onGroupLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a capturing group.\n * @param start The 0-based index of the first character.\n * @param name The group name.\n */\n onCapturingGroupEnter?(start: number, name: string | null): void\n\n /**\n * A function that is called when the validator left a capturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param name The group name.\n */\n onCapturingGroupLeave?(\n start: number,\n end: number,\n name: string | null,\n ): void\n\n /**\n * A function that is called when the validator found a quantifier.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum number of repeating.\n * @param max The maximum number of repeating.\n * @param greedy The flag to choose the longest matching.\n */\n onQuantifier?(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionEnter?(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator left a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionLeave?(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found an edge boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n */\n onEdgeAssertion?(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void\n\n /**\n * A function that is called when the validator found a word boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onWordBoundaryAssertion?(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a dot.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n */\n onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void\n\n /**\n * A function that is called when the validator found a character set escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param negate The flag which represents that the character set is negative.\n */\n onEscapeCharacterSet?(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a Unicode proerty escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param key The property name.\n * @param value The property value.\n * @param negate The flag which represents that the character set is negative.\n */\n onUnicodePropertyCharacterSet?(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param value The code point of the character.\n */\n onCharacter?(start: number, end: number, value: number): void\n\n /**\n * A function that is called when the validator found a backreference.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param ref The key of the referred capturing group.\n */\n onBackreference?(start: number, end: number, ref: number | string): void\n\n /**\n * A function that is called when the validator entered a character class.\n * @param start The 0-based index of the first character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassEnter?(start: number, negate: boolean): void\n\n /**\n * A function that is called when the validator left a character class.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassLeave?(\n start: number,\n end: number,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character class range.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum code point of the range.\n * @param max The maximum code point of the range.\n */\n onCharacterClassRange?(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void\n }\n}\n\n/**\n * The regular expression validator.\n */\nexport class RegExpValidator {\n private readonly _options: RegExpValidator.Options\n private readonly _reader = new Reader()\n private _uFlag = false\n private _nFlag = false\n private _lastIntValue = 0\n private _lastMinValue = 0\n private _lastMaxValue = 0\n private _lastStrValue = \"\"\n private _lastKeyValue = \"\"\n private _lastValValue = \"\"\n private _lastAssertionIsQuantifiable = false\n private _numCapturingParens = 0\n private _groupNames = new Set()\n private _backreferenceNames = new Set()\n\n /**\n * Initialize this validator.\n * @param options The options of validator.\n */\n public constructor(options?: RegExpValidator.Options) {\n this._options = options || {}\n }\n\n /**\n * Validate a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n this._uFlag = this._nFlag = false\n this.reset(source, start, end)\n\n this.onLiteralEnter(start)\n if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n const flagStart = this.index\n const uFlag = source.indexOf(\"u\", flagStart) !== -1\n this.validateFlags(source, flagStart, end)\n this.validatePattern(source, start + 1, flagStart - 1, uFlag)\n } else if (start >= end) {\n this.raise(\"Empty\")\n } else {\n const c = String.fromCodePoint(this.currentCodePoint)\n this.raise(`Unexpected character '${c}'`)\n }\n this.onLiteralLeave(start, end)\n }\n\n /**\n * Validate a regular expression flags. E.g. \"gim\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n const existingFlags = new Set()\n let global = false\n let ignoreCase = false\n let multiline = false\n let sticky = false\n let unicode = false\n let dotAll = false\n for (let i = start; i < end; ++i) {\n const flag = source.charCodeAt(i)\n\n if (existingFlags.has(flag)) {\n this.raise(`Duplicated flag '${source[i]}'`)\n }\n existingFlags.add(flag)\n\n if (flag === LatinSmallLetterG) {\n global = true\n } else if (flag === LatinSmallLetterI) {\n ignoreCase = true\n } else if (flag === LatinSmallLetterM) {\n multiline = true\n } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n unicode = true\n } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n sticky = true\n } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n dotAll = true\n } else {\n this.raise(`Invalid flag '${source[i]}'`)\n }\n }\n this.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n\n /**\n * Validate a regular expression pattern. E.g. \"abc\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n */\n public validatePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): void {\n this._uFlag = uFlag && this.ecmaVersion >= 2015\n this._nFlag = uFlag && this.ecmaVersion >= 2018\n this.reset(source, start, end)\n this.pattern()\n\n if (\n !this._nFlag &&\n this.ecmaVersion >= 2018 &&\n this._groupNames.size > 0\n ) {\n this._nFlag = true\n this.rewind(start)\n this.pattern()\n }\n }\n\n // #region Delegate for Options\n\n private get strict() {\n return Boolean(this._options.strict || this._uFlag)\n }\n\n private get ecmaVersion() {\n return this._options.ecmaVersion || 2018\n }\n\n private onLiteralEnter(start: number): void {\n if (this._options.onLiteralEnter) {\n this._options.onLiteralEnter(start)\n }\n }\n\n private onLiteralLeave(start: number, end: number): void {\n if (this._options.onLiteralLeave) {\n this._options.onLiteralLeave(start, end)\n }\n }\n\n private onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n if (this._options.onFlags) {\n this._options.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n }\n\n private onPatternEnter(start: number): void {\n if (this._options.onPatternEnter) {\n this._options.onPatternEnter(start)\n }\n }\n\n private onPatternLeave(start: number, end: number): void {\n if (this._options.onPatternLeave) {\n this._options.onPatternLeave(start, end)\n }\n }\n\n private onDisjunctionEnter(start: number): void {\n if (this._options.onDisjunctionEnter) {\n this._options.onDisjunctionEnter(start)\n }\n }\n\n private onDisjunctionLeave(start: number, end: number): void {\n if (this._options.onDisjunctionLeave) {\n this._options.onDisjunctionLeave(start, end)\n }\n }\n\n private onAlternativeEnter(start: number, index: number): void {\n if (this._options.onAlternativeEnter) {\n this._options.onAlternativeEnter(start, index)\n }\n }\n\n private onAlternativeLeave(\n start: number,\n end: number,\n index: number,\n ): void {\n if (this._options.onAlternativeLeave) {\n this._options.onAlternativeLeave(start, end, index)\n }\n }\n\n private onGroupEnter(start: number): void {\n if (this._options.onGroupEnter) {\n this._options.onGroupEnter(start)\n }\n }\n\n private onGroupLeave(start: number, end: number): void {\n if (this._options.onGroupLeave) {\n this._options.onGroupLeave(start, end)\n }\n }\n\n private onCapturingGroupEnter(start: number, name: string | null): void {\n if (this._options.onCapturingGroupEnter) {\n this._options.onCapturingGroupEnter(start, name)\n }\n }\n\n private onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n if (this._options.onCapturingGroupLeave) {\n this._options.onCapturingGroupLeave(start, end, name)\n }\n }\n\n private onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n if (this._options.onQuantifier) {\n this._options.onQuantifier(start, end, min, max, greedy)\n }\n }\n\n private onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionEnter) {\n this._options.onLookaroundAssertionEnter(start, kind, negate)\n }\n }\n\n private onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionLeave) {\n this._options.onLookaroundAssertionLeave(start, end, kind, negate)\n }\n }\n\n private onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n if (this._options.onEdgeAssertion) {\n this._options.onEdgeAssertion(start, end, kind)\n }\n }\n\n private onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n if (this._options.onWordBoundaryAssertion) {\n this._options.onWordBoundaryAssertion(start, end, kind, negate)\n }\n }\n\n private onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n if (this._options.onAnyCharacterSet) {\n this._options.onAnyCharacterSet(start, end, kind)\n }\n }\n\n private onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n if (this._options.onEscapeCharacterSet) {\n this._options.onEscapeCharacterSet(start, end, kind, negate)\n }\n }\n\n private onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n if (this._options.onUnicodePropertyCharacterSet) {\n this._options.onUnicodePropertyCharacterSet(\n start,\n end,\n kind,\n key,\n value,\n negate,\n )\n }\n }\n\n private onCharacter(start: number, end: number, value: number): void {\n if (this._options.onCharacter) {\n this._options.onCharacter(start, end, value)\n }\n }\n\n private onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n if (this._options.onBackreference) {\n this._options.onBackreference(start, end, ref)\n }\n }\n\n private onCharacterClassEnter(start: number, negate: boolean): void {\n if (this._options.onCharacterClassEnter) {\n this._options.onCharacterClassEnter(start, negate)\n }\n }\n\n private onCharacterClassLeave(\n start: number,\n end: number,\n negate: boolean,\n ): void {\n if (this._options.onCharacterClassLeave) {\n this._options.onCharacterClassLeave(start, end, negate)\n }\n }\n\n private onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n if (this._options.onCharacterClassRange) {\n this._options.onCharacterClassRange(start, end, min, max)\n }\n }\n\n // #endregion\n\n // #region Delegate for Reader\n\n private get source(): string {\n return this._reader.source\n }\n\n private get index(): number {\n return this._reader.index\n }\n\n private get currentCodePoint(): number {\n return this._reader.currentCodePoint\n }\n\n private get nextCodePoint(): number {\n return this._reader.nextCodePoint\n }\n\n private get nextCodePoint2(): number {\n return this._reader.nextCodePoint2\n }\n\n private get nextCodePoint3(): number {\n return this._reader.nextCodePoint3\n }\n\n private reset(source: string, start: number, end: number): void {\n this._reader.reset(source, start, end, this._uFlag)\n }\n\n private rewind(index: number): void {\n this._reader.rewind(index)\n }\n\n private advance(): void {\n this._reader.advance()\n }\n\n private eat(cp: number): boolean {\n return this._reader.eat(cp)\n }\n\n private eat2(cp1: number, cp2: number): boolean {\n return this._reader.eat2(cp1, cp2)\n }\n\n private eat3(cp1: number, cp2: number, cp3: number): boolean {\n return this._reader.eat3(cp1, cp2, cp3)\n }\n\n // #endregion\n\n private raise(message: string): never {\n throw new RegExpSyntaxError(\n this.source,\n this._uFlag,\n this.index,\n message,\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegularExpressionBody\n private eatRegExpBody(): boolean {\n const start = this.index\n let inClass = false\n let escaped = false\n\n for (;;) {\n const cp = this.currentCodePoint\n if (cp === -1 || isLineTerminator(cp)) {\n const kind = inClass ? \"character class\" : \"regular expression\"\n this.raise(`Unterminated ${kind}`)\n }\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n (cp === Solidus && !inClass) ||\n (cp === Asterisk && this.index === start)\n ) {\n break\n }\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n private pattern(): void {\n const start = this.index\n this._numCapturingParens = this.countCapturingParens()\n this._groupNames.clear()\n this._backreferenceNames.clear()\n\n this.onPatternEnter(start)\n this.disjunction()\n\n const cp = this.currentCodePoint\n if (this.currentCodePoint !== -1) {\n if (cp === RightParenthesis) {\n this.raise(\"Unmatched ')'\")\n }\n if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n this.raise(\"Lone quantifier brackets\")\n }\n const c = String.fromCodePoint(cp)\n this.raise(`Unexpected character '${c}'`)\n }\n for (const name of this._backreferenceNames) {\n if (!this._groupNames.has(name)) {\n this.raise(\"Invalid named capture referenced\")\n }\n }\n this.onPatternLeave(start, this.index)\n }\n\n private countCapturingParens(): number {\n const start = this.index\n let inClass = false\n let escaped = false\n let count = 0\n let cp = 0\n\n while ((cp = this.currentCodePoint) !== -1) {\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n cp === LeftParenthesis &&\n !inClass &&\n (this.nextCodePoint !== QuestionMark ||\n (this.nextCodePoint2 === LessThanSign &&\n this.nextCodePoint3 !== EqualsSign &&\n this.nextCodePoint3 !== ExclamationMark))\n ) {\n count += 1\n }\n this.advance()\n }\n\n this.rewind(start)\n return count\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n private disjunction(): void {\n const start = this.index\n let i = 0\n\n this.onDisjunctionEnter(start)\n this.alternative(i++)\n while (this.eat(VerticalLine)) {\n this.alternative(i++)\n }\n\n if (this.eatQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n if (this.eat(LeftCurlyBracket)) {\n this.raise(\"Lone quantifier brackets\")\n }\n this.onDisjunctionLeave(start, this.index)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n private alternative(i: number): void {\n const start = this.index\n\n this.onAlternativeEnter(start, i)\n while (this.currentCodePoint !== -1 && this.eatTerm()) {\n // do nothing.\n }\n this.onAlternativeLeave(start, this.index, i)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Term\n private eatTerm(): boolean {\n if (this.eatAssertion()) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `this.lastAssertionIsQuantifiable` is true if the last eaten\n // Assertion is a QuantifiableAssertion.\n if (this._lastAssertionIsQuantifiable) {\n this.eatQuantifier()\n }\n return true\n }\n\n if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {\n this.eatQuantifier()\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Assertion\n private eatAssertion(): boolean {\n const start = this.index\n this._lastAssertionIsQuantifiable = false\n\n // ^, $, \\B \\b\n if (this.eat(CircumflexAccent)) {\n this.onEdgeAssertion(start, this.index, \"start\")\n return true\n }\n if (this.eat(DollarSign)) {\n this.onEdgeAssertion(start, this.index, \"end\")\n return true\n }\n if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", true)\n return true\n }\n if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", false)\n return true\n }\n\n // Lookahead / Lookbehind\n if (this.eat2(LeftParenthesis, QuestionMark)) {\n const lookbehind =\n this.ecmaVersion >= 2018 && this.eat(LessThanSign)\n let negate = false\n if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n const kind = lookbehind ? \"lookbehind\" : \"lookahead\"\n this.onLookaroundAssertionEnter(start, kind, negate)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this._lastAssertionIsQuantifiable = !lookbehind && !this.strict\n this.onLookaroundAssertionLeave(start, this.index, kind, negate)\n return true\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n private eatQuantifier(noError = false): boolean {\n const start = this.index\n let min = 0\n let max = 0\n let greedy = false\n\n if (this.eat(Asterisk)) {\n min = 0\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(PlusSign)) {\n min = 1\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(QuestionMark)) {\n min = 0\n max = 1\n } else if (this.eatBracedQuantifier(noError)) {\n min = this._lastMinValue\n max = this._lastMaxValue\n } else {\n return false\n }\n greedy = !this.eat(QuestionMark)\n\n if (!noError) {\n this.onQuantifier(start, this.index, min, max, greedy)\n }\n return true\n }\n\n private eatBracedQuantifier(noError: boolean): boolean {\n const start = this.index\n if (this.eat(LeftCurlyBracket)) {\n this._lastMinValue = 0\n this._lastMaxValue = Number.POSITIVE_INFINITY\n if (this.eatDecimalDigits()) {\n this._lastMinValue = this._lastMaxValue = this._lastIntValue\n if (this.eat(Comma)) {\n this._lastMaxValue = this.eatDecimalDigits()\n ? this._lastIntValue\n : Number.POSITIVE_INFINITY\n }\n if (this.eat(RightCurlyBracket)) {\n if (!noError && this._lastMaxValue < this._lastMinValue) {\n this.raise(\"numbers out of order in {} quantifier\")\n }\n return true\n }\n }\n if (!noError && this.strict) {\n this.raise(\"Incomplete quantifier\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n private eatAtom(): boolean {\n return (\n this.eatPatternCharacter() ||\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup()\n )\n }\n\n private eatDot(): boolean {\n if (this.eat(FullStop)) {\n this.onAnyCharacterSet(this.index - 1, this.index, \"any\")\n return true\n }\n return false\n }\n\n private eatReverseSolidusAtomEscape(): boolean {\n const start = this.index\n if (this.eat(ReverseSolidus)) {\n if (this.eatAtomEscape()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatUncapturingGroup(): boolean {\n const start = this.index\n if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n this.onGroupEnter(start)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onGroupLeave(start, this.index)\n return true\n }\n return false\n }\n\n private eatCapturingGroup(): boolean {\n const start = this.index\n if (this.eat(LeftParenthesis)) {\n this._lastStrValue = \"\"\n if (this.ecmaVersion >= 2018) {\n this.groupSpecifier()\n } else if (this.currentCodePoint === QuestionMark) {\n this.raise(\"Invalid group\")\n }\n const name = this._lastStrValue || null\n\n this.onCapturingGroupEnter(start, name)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onCapturingGroupLeave(start, this.index, name)\n\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedAtom\n private eatExtendedAtom(): boolean {\n return (\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup() ||\n this.eatInvalidBracedQuantifier() ||\n this.eatExtendedPatternCharacter()\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-InvalidBracedQuantifier\n private eatInvalidBracedQuantifier(): boolean {\n if (this.eatBracedQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n private eatSyntaxCharacter(): boolean {\n if (isSyntaxCharacter(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n private eatPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (cp !== -1 && !isSyntaxCharacter(cp)) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedPatternCharacter\n private eatExtendedPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (\n cp !== -1 &&\n cp !== CircumflexAccent &&\n cp !== DollarSign &&\n cp !== FullStop &&\n cp !== Asterisk &&\n cp !== PlusSign &&\n cp !== QuestionMark &&\n cp !== LeftParenthesis &&\n cp !== RightParenthesis &&\n cp !== LeftSquareBracket &&\n cp !== VerticalLine\n ) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // GroupSpecifier[U] ::\n // [empty]\n // `?` GroupName[?U]\n private groupSpecifier(): void {\n this._lastStrValue = \"\"\n if (this.eat(QuestionMark)) {\n if (this.eatGroupName()) {\n if (!this._groupNames.has(this._lastStrValue)) {\n this._groupNames.add(this._lastStrValue)\n return\n }\n this.raise(\"Duplicate capture group name\")\n }\n this.raise(\"Invalid group\")\n }\n }\n\n // GroupName[U] ::\n // `<` RegExpIdentifierName[?U] `>`\n private eatGroupName(): boolean {\n this._lastStrValue = \"\"\n if (this.eat(LessThanSign)) {\n if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n return true\n }\n this.raise(\"Invalid capture group name\")\n }\n return false\n }\n\n // RegExpIdentifierName[U] ::\n // RegExpIdentifierStart[?U]\n // RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n private eatRegExpIdentifierName(): boolean {\n this._lastStrValue = \"\"\n if (this.eatRegExpIdentifierStart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n while (this.eatRegExpIdentifierPart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n }\n return true\n }\n return false\n }\n\n // RegExpIdentifierStart[U] ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n private eatRegExpIdentifierStart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierStart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // RegExpIdentifierPart[U] ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n // \n // \n private eatRegExpIdentifierPart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierPart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-AtomEscape\n private eatAtomEscape(): boolean {\n if (\n this.eatBackreference() ||\n this.eatCharacterClassEscape() ||\n this.eatCharacterEscape() ||\n (this._nFlag && this.eatKGroupName())\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n return false\n }\n\n private eatBackreference(): boolean {\n const start = this.index\n if (this.eatDecimalEscape()) {\n const n = this._lastIntValue\n if (n <= this._numCapturingParens) {\n this.onBackreference(start - 1, this.index, n)\n return true\n }\n if (this.strict) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatKGroupName(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterK)) {\n if (this.eatGroupName()) {\n const groupName = this._lastStrValue\n this._backreferenceNames.add(groupName)\n this.onBackreference(start - 1, this.index, groupName)\n return true\n }\n this.raise(\"Invalid named reference\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-CharacterEscape\n private eatCharacterEscape(): boolean {\n const start = this.index\n if (\n this.eatControlEscape() ||\n this.eatCControlLetter() ||\n this.eatZero() ||\n this.eatHexEscapeSequence() ||\n this.eatRegExpUnicodeEscapeSequence() ||\n (!this.strict && this.eatLegacyOctalEscapeSequence()) ||\n this.eatIdentityEscape()\n ) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n return false\n }\n\n private eatCControlLetter(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterC)) {\n if (this.eatControlLetter()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatZero(): boolean {\n if (\n this.currentCodePoint === DigitZero &&\n !isDecimalDigit(this.nextCodePoint)\n ) {\n this._lastIntValue = 0\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n private eatControlEscape(): boolean {\n if (this.eat(LatinSmallLetterT)) {\n this._lastIntValue = CharacterTabulation\n return true\n }\n if (this.eat(LatinSmallLetterN)) {\n this._lastIntValue = LineFeed\n return true\n }\n if (this.eat(LatinSmallLetterV)) {\n this._lastIntValue = LineTabulation\n return true\n }\n if (this.eat(LatinSmallLetterF)) {\n this._lastIntValue = FormFeed\n return true\n }\n if (this.eat(LatinSmallLetterR)) {\n this._lastIntValue = CarriageReturn\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n private eatControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isLatinLetter(cp)) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n private eatRegExpUnicodeEscapeSequence(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterU)) {\n if (this.eatFixedHexDigits(4)) {\n const lead = this._lastIntValue\n if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {\n const leadSurrogateEnd = this.index\n if (\n this.eat(ReverseSolidus) &&\n this.eat(LatinSmallLetterU) &&\n this.eatFixedHexDigits(4)\n ) {\n const trail = this._lastIntValue\n if (trail >= 0xdc00 && trail <= 0xdfff) {\n this._lastIntValue =\n (lead - 0xd800) * 0x400 +\n (trail - 0xdc00) +\n 0x10000\n return true\n }\n }\n this.rewind(leadSurrogateEnd)\n this._lastIntValue = lead\n }\n return true\n }\n if (\n this._uFlag &&\n this.eat(LeftCurlyBracket) &&\n this.eatHexDigits() &&\n this.eat(RightCurlyBracket) &&\n isValidUnicode(this._lastIntValue)\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid unicode escape\")\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-IdentityEscape\n private eatIdentityEscape(): boolean {\n if (this._uFlag) {\n if (this.eatSyntaxCharacter()) {\n return true\n }\n if (this.eat(Solidus)) {\n this._lastIntValue = Solidus\n return true\n }\n return false\n }\n\n if (this.isValidIdentityEscape(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n\n return false\n }\n private isValidIdentityEscape(cp: number): boolean {\n if (cp === -1) {\n return false\n }\n if (this.strict) {\n return !isIdContinue(cp)\n }\n return (\n cp !== LatinSmallLetterC &&\n (!this._nFlag || cp !== LatinSmallLetterK)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n private eatDecimalEscape(): boolean {\n this._lastIntValue = 0\n let cp = this.currentCodePoint\n if (cp >= DigitOne && cp <= DigitNine) {\n do {\n this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero)\n this.advance()\n } while (\n (cp = this.currentCodePoint) >= DigitZero &&\n cp <= DigitNine\n )\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n private eatCharacterClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true)\n return true\n }\n if (this.eat(LatinSmallLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", true)\n return true\n }\n if (this.eat(LatinSmallLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", true)\n return true\n }\n\n let negate = false\n if (\n this._uFlag &&\n this.ecmaVersion >= 2018 &&\n (this.eat(LatinSmallLetterP) ||\n (negate = this.eat(LatinCapitalLetterP)))\n ) {\n this._lastIntValue = -1\n if (\n this.eat(LeftCurlyBracket) &&\n this.eatUnicodePropertyValueExpression() &&\n this.eat(RightCurlyBracket)\n ) {\n this.onUnicodePropertyCharacterSet(\n start - 1,\n this.index,\n \"property\",\n this._lastKeyValue,\n this._lastValValue || null,\n negate,\n )\n return true\n }\n this.raise(\"Invalid property name\")\n }\n\n return false\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n private eatUnicodePropertyValueExpression(): boolean {\n const start = this.index\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n this._lastKeyValue = this._lastStrValue\n if (this.eatUnicodePropertyValue()) {\n this._lastValValue = this._lastStrValue\n if (\n isValidUnicodeProperty(\n this._lastKeyValue,\n this._lastValValue,\n )\n ) {\n return true\n }\n this.raise(\"Invalid property name\")\n }\n }\n this.rewind(start)\n\n // LoneUnicodePropertyNameOrValue\n if (this.eatLoneUnicodePropertyNameOrValue()) {\n const nameOrValue = this._lastStrValue\n if (isValidUnicodeProperty(\"General_Category\", nameOrValue)) {\n this._lastKeyValue = \"General_Category\"\n this._lastValValue = nameOrValue\n return true\n }\n if (isValidUnicodePropertyName(nameOrValue)) {\n this._lastKeyValue = nameOrValue\n this._lastValValue = \"\"\n return true\n }\n this.raise(\"Invalid property name\")\n }\n return false\n }\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n private eatUnicodePropertyName(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n private eatUnicodePropertyValue(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n private eatLoneUnicodePropertyNameOrValue(): boolean {\n return this.eatUnicodePropertyValue()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n private eatCharacterClass(): boolean {\n const start = this.index\n if (this.eat(LeftSquareBracket)) {\n const negate = this.eat(CircumflexAccent)\n this.onCharacterClassEnter(start, negate)\n this.classRanges()\n if (!this.eat(RightSquareBracket)) {\n this.raise(\"Unterminated character class\")\n }\n this.onCharacterClassLeave(start, this.index, negate)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n private classRanges(): void {\n let start = this.index\n while (this.eatClassAtom()) {\n const left = this._lastIntValue\n const hyphenStart = this.index\n if (this.eat(HyphenMinus)) {\n this.onCharacter(hyphenStart, this.index, HyphenMinus)\n\n if (this.eatClassAtom()) {\n const right = this._lastIntValue\n\n if (left === -1 || right === -1) {\n if (this.strict) {\n this.raise(\"Invalid character class\")\n }\n } else if (left > right) {\n this.raise(\"Range out of order in character class\")\n } else {\n this.onCharacterClassRange(\n start,\n this.index,\n left,\n right,\n )\n }\n }\n }\n\n start = this.index\n }\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n private eatClassAtom(): boolean {\n const start = this.index\n\n if (this.eat(ReverseSolidus)) {\n if (this.eatClassEscape()) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n\n const cp = this.currentCodePoint\n if (cp !== -1 && cp !== RightSquareBracket) {\n this.advance()\n this._lastIntValue = cp\n this.onCharacter(start, this.index, cp)\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassEscape\n private eatClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterB)) {\n this._lastIntValue = Backspace\n this.onCharacter(start - 1, this.index, Backspace)\n return true\n }\n\n if (this._uFlag && this.eat(HyphenMinus)) {\n this._lastIntValue = HyphenMinus\n this.onCharacter(start - 1, this.index, HyphenMinus)\n return true\n }\n\n if (!this._uFlag && this.eat(LatinSmallLetterC)) {\n if (this.eatClassControlLetter()) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n this.rewind(start)\n }\n\n return this.eatCharacterClassEscape() || this.eatCharacterEscape()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassControlLetter\n private eatClassControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isDecimalDigit(cp) || cp === LowLine) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatHexEscapeSequence(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterX)) {\n if (this.eatFixedHexDigits(2)) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n private eatDecimalDigits(): boolean {\n const start = this.index\n\n this._lastIntValue = 0\n while (isDecimalDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 10 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n private eatHexDigits(): boolean {\n const start = this.index\n this._lastIntValue = 0\n while (isHexDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 16 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n private eatLegacyOctalEscapeSequence(): boolean {\n if (this.eatOctalDigit()) {\n const n1 = this._lastIntValue\n if (this.eatOctalDigit()) {\n const n2 = this._lastIntValue\n if (n1 <= 3 && this.eatOctalDigit()) {\n this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue\n } else {\n this._lastIntValue = n1 * 8 + n2\n }\n } else {\n this._lastIntValue = n1\n }\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n private eatOctalDigit(): boolean {\n const cp = this.currentCodePoint\n if (isOctalDigit(cp)) {\n this.advance()\n this._lastIntValue = cp - DigitZero\n return true\n }\n this._lastIntValue = 0\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatFixedHexDigits(length: number): boolean {\n const start = this.index\n this._lastIntValue = 0\n for (let i = 0; i < length; ++i) {\n const cp = this.currentCodePoint\n if (!isHexDigit(cp)) {\n this.rewind(start)\n return false\n }\n this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp)\n this.advance()\n }\n return true\n }\n}\n","import {\n Alternative,\n Backreference,\n CapturingGroup,\n CharacterClass,\n CharacterClassElement,\n CharacterClassRange,\n Flags,\n Group,\n RegExpLiteral,\n LookaroundAssertion,\n Pattern,\n Quantifier,\n} from \"./ast\"\nimport { HyphenMinus } from \"./unicode\"\nimport { RegExpValidator } from \"./validator\"\n\ntype AppendableNode =\n | Pattern\n | Alternative\n | Group\n | CapturingGroup\n | CharacterClass\n | LookaroundAssertion\n\nconst DummyPattern = {} as Pattern\nconst DummyFlags = {} as Flags\nconst DummyCapturingGroup = {} as CapturingGroup\n\nclass RegExpParserState {\n public readonly strict: boolean\n public readonly ecmaVersion: 5 | 2015 | 2016 | 2017 | 2018\n private _node: AppendableNode = DummyPattern\n private _flags: Flags = DummyFlags\n private _backreferences: Backreference[] = []\n private _capturingGroups: CapturingGroup[] = []\n\n public source = \"\"\n\n public constructor(options?: RegExpParser.Options) {\n this.strict = Boolean(options && options.strict)\n this.ecmaVersion = (options && options.ecmaVersion) || 2018\n }\n\n public get pattern(): Pattern {\n if (this._node.type !== \"Pattern\") {\n throw new Error(\"UnknownError\")\n }\n return this._node\n }\n\n public get flags(): Flags {\n if (this._flags.type !== \"Flags\") {\n throw new Error(\"UnknownError\")\n }\n return this._flags\n }\n\n public onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n this._flags = {\n type: \"Flags\",\n parent: null,\n start,\n end,\n raw: this.source.slice(start, end),\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n }\n }\n\n public onPatternEnter(start: number): void {\n this._node = {\n type: \"Pattern\",\n parent: null,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n this._backreferences.length = 0\n this._capturingGroups.length = 0\n }\n\n public onPatternLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n\n for (const reference of this._backreferences) {\n const ref = reference.ref\n const group =\n typeof ref === \"number\"\n ? this._capturingGroups[ref - 1]\n : this._capturingGroups.find(g => g.name === ref)!\n reference.resolved = group\n group.references.push(reference)\n }\n }\n\n public onAlternativeEnter(start: number): void {\n const parent = this._node\n if (\n parent.type !== \"Assertion\" &&\n parent.type !== \"CapturingGroup\" &&\n parent.type !== \"Group\" &&\n parent.type !== \"Pattern\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Alternative\",\n parent,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n parent.alternatives.push(this._node)\n }\n\n public onAlternativeLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onGroupEnter(start: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Group\",\n parent,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n parent.elements.push(this._node)\n }\n\n public onGroupLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Group\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCapturingGroupEnter(start: number, name: string | null): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CapturingGroup\",\n parent,\n start,\n end: start,\n raw: \"\",\n name,\n alternatives: [],\n references: [],\n }\n parent.elements.push(this._node)\n this._capturingGroups.push(this._node)\n }\n\n public onCapturingGroupLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CapturingGroup\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last element.\n const element = parent.elements.pop()\n if (\n element == null ||\n element.type === \"Quantifier\" ||\n (element.type === \"Assertion\" && element.kind !== \"lookahead\")\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: Quantifier = {\n type: \"Quantifier\",\n parent,\n start: element.start,\n end,\n raw: this.source.slice(element.start, end),\n min,\n max,\n greedy,\n element,\n }\n parent.elements.push(node)\n element.parent = node\n }\n\n public onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Assertion\",\n parent,\n start,\n end: start,\n raw: \"\",\n kind,\n negate,\n alternatives: [],\n } as LookaroundAssertion\n parent.elements.push(this._node)\n }\n\n public onLookaroundAssertionLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Assertion\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n key,\n value,\n negate,\n })\n }\n\n public onCharacter(start: number, end: number, value: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"Character\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n value,\n })\n }\n\n public onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n const node: Backreference = {\n type: \"Backreference\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n ref,\n resolved: DummyCapturingGroup,\n }\n parent.elements.push(node)\n this._backreferences.push(node)\n }\n\n public onCharacterClassEnter(start: number, negate: boolean): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CharacterClass\",\n parent,\n start,\n end: start,\n raw: \"\",\n negate,\n elements: [],\n }\n parent.elements.push(this._node)\n }\n\n public onCharacterClassLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CharacterClass\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCharacterClassRange(start: number, end: number): void {\n const parent = this._node\n if (parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last three elements.\n const elements = parent.elements\n const max = elements.pop()\n const hyphen = elements.pop()\n const min = elements.pop()\n if (\n !min ||\n !max ||\n !hyphen ||\n min.type !== \"Character\" ||\n max.type !== \"Character\" ||\n hyphen.type !== \"Character\" ||\n hyphen.value !== HyphenMinus\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: CharacterClassRange = {\n type: \"CharacterClassRange\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n min,\n max,\n }\n min.parent = node\n max.parent = node\n elements.push(node)\n }\n}\n\nexport namespace RegExpParser {\n /**\n * The options for RegExpParser construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n }\n}\n\nexport class RegExpParser {\n private _state: RegExpParserState\n private _validator: RegExpValidator\n\n /**\n * Initialize this parser.\n * @param options The options of parser.\n */\n public constructor(options?: RegExpParser.Options) {\n this._state = new RegExpParserState(options)\n this._validator = new RegExpValidator(this._state)\n }\n\n /**\n * Parse a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given regular expression.\n */\n public parseLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): RegExpLiteral {\n this._state.source = source\n this._validator.validateLiteral(source, start, end)\n const pattern = this._state.pattern\n const flags = this._state.flags\n const literal: RegExpLiteral = {\n type: \"RegExpLiteral\",\n parent: null,\n start,\n end,\n raw: source,\n pattern,\n flags,\n }\n pattern.parent = literal\n flags.parent = literal\n return literal\n }\n\n /**\n * Parse a regular expression flags. E.g. \"gim\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given flags.\n */\n public parseFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): Flags {\n this._state.source = source\n this._validator.validateFlags(source, start, end)\n return this._state.flags\n }\n\n /**\n * Parse a regular expression pattern. E.g. \"abc\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n * @returns The AST of the given pattern.\n */\n public parsePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): Pattern {\n this._state.source = source\n this._validator.validatePattern(source, start, end, uFlag)\n return this._state.pattern\n }\n}\n","import {\n Alternative,\n Assertion,\n Backreference,\n CapturingGroup,\n Character,\n CharacterClass,\n CharacterClassRange,\n CharacterSet,\n Flags,\n Group,\n Node,\n Pattern,\n Quantifier,\n RegExpLiteral,\n} from \"./ast\"\n\n/**\n * The visitor to walk on AST.\n */\nexport class RegExpVisitor {\n private readonly _handlers: RegExpVisitor.Handlers\n\n /**\n * Initialize this visitor.\n * @param handlers Callbacks for each node.\n */\n public constructor(handlers: RegExpVisitor.Handlers) {\n this._handlers = handlers\n }\n\n /**\n * Visit a given node and descendant nodes.\n * @param node The root node to visit tree.\n */\n public visit(node: Node): void {\n switch (node.type) {\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"Assertion\":\n this.visitAssertion(node)\n break\n case \"Backreference\":\n this.visitBackreference(node)\n break\n case \"CapturingGroup\":\n this.visitCapturingGroup(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"CharacterClass\":\n this.visitCharacterClass(node)\n break\n case \"CharacterClassRange\":\n this.visitCharacterClassRange(node)\n break\n case \"CharacterSet\":\n this.visitCharacterSet(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n case \"RegExpLiteral\":\n this.visitRegExpLiteral(node)\n break\n default:\n throw new Error(`Unknown type: ${(node as any).type}`)\n }\n }\n\n private visitAlternative(node: Alternative): void {\n if (this._handlers.onAlternativeEnter) {\n this._handlers.onAlternativeEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onAlternativeLeave) {\n this._handlers.onAlternativeLeave(node)\n }\n }\n private visitAssertion(node: Assertion): void {\n if (this._handlers.onAssertionEnter) {\n this._handlers.onAssertionEnter(node)\n }\n if (node.kind === \"lookahead\" || node.kind === \"lookbehind\") {\n node.alternatives.forEach(this.visit, this)\n }\n if (this._handlers.onAssertionLeave) {\n this._handlers.onAssertionLeave(node)\n }\n }\n private visitBackreference(node: Backreference): void {\n if (this._handlers.onBackreferenceEnter) {\n this._handlers.onBackreferenceEnter(node)\n }\n if (this._handlers.onBackreferenceLeave) {\n this._handlers.onBackreferenceLeave(node)\n }\n }\n private visitCapturingGroup(node: CapturingGroup): void {\n if (this._handlers.onCapturingGroupEnter) {\n this._handlers.onCapturingGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onCapturingGroupLeave) {\n this._handlers.onCapturingGroupLeave(node)\n }\n }\n private visitCharacter(node: Character): void {\n if (this._handlers.onCharacterEnter) {\n this._handlers.onCharacterEnter(node)\n }\n if (this._handlers.onCharacterLeave) {\n this._handlers.onCharacterLeave(node)\n }\n }\n private visitCharacterClass(node: CharacterClass): void {\n if (this._handlers.onCharacterClassEnter) {\n this._handlers.onCharacterClassEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onCharacterClassLeave) {\n this._handlers.onCharacterClassLeave(node)\n }\n }\n private visitCharacterClassRange(node: CharacterClassRange): void {\n if (this._handlers.onCharacterClassRangeEnter) {\n this._handlers.onCharacterClassRangeEnter(node)\n }\n this.visitCharacter(node.min)\n this.visitCharacter(node.max)\n if (this._handlers.onCharacterClassRangeLeave) {\n this._handlers.onCharacterClassRangeLeave(node)\n }\n }\n private visitCharacterSet(node: CharacterSet): void {\n if (this._handlers.onCharacterSetEnter) {\n this._handlers.onCharacterSetEnter(node)\n }\n if (this._handlers.onCharacterSetLeave) {\n this._handlers.onCharacterSetLeave(node)\n }\n }\n private visitFlags(node: Flags): void {\n if (this._handlers.onFlagsEnter) {\n this._handlers.onFlagsEnter(node)\n }\n if (this._handlers.onFlagsLeave) {\n this._handlers.onFlagsLeave(node)\n }\n }\n private visitGroup(node: Group): void {\n if (this._handlers.onGroupEnter) {\n this._handlers.onGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onGroupLeave) {\n this._handlers.onGroupLeave(node)\n }\n }\n private visitPattern(node: Pattern): void {\n if (this._handlers.onPatternEnter) {\n this._handlers.onPatternEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onPatternLeave) {\n this._handlers.onPatternLeave(node)\n }\n }\n private visitQuantifier(node: Quantifier): void {\n if (this._handlers.onQuantifierEnter) {\n this._handlers.onQuantifierEnter(node)\n }\n this.visit(node.element)\n if (this._handlers.onQuantifierLeave) {\n this._handlers.onQuantifierLeave(node)\n }\n }\n private visitRegExpLiteral(node: RegExpLiteral): void {\n if (this._handlers.onRegExpLiteralEnter) {\n this._handlers.onRegExpLiteralEnter(node)\n }\n this.visitPattern(node.pattern)\n this.visitFlags(node.flags)\n if (this._handlers.onRegExpLiteralLeave) {\n this._handlers.onRegExpLiteralLeave(node)\n }\n }\n}\n\nexport namespace RegExpVisitor {\n export interface Handlers {\n onAlternativeEnter?(node: Alternative): void\n onAlternativeLeave?(node: Alternative): void\n onAssertionEnter?(node: Assertion): void\n onAssertionLeave?(node: Assertion): void\n onBackreferenceEnter?(node: Backreference): void\n onBackreferenceLeave?(node: Backreference): void\n onCapturingGroupEnter?(node: CapturingGroup): void\n onCapturingGroupLeave?(node: CapturingGroup): void\n onCharacterEnter?(node: Character): void\n onCharacterLeave?(node: Character): void\n onCharacterClassEnter?(node: CharacterClass): void\n onCharacterClassLeave?(node: CharacterClass): void\n onCharacterClassRangeEnter?(node: CharacterClassRange): void\n onCharacterClassRangeLeave?(node: CharacterClassRange): void\n onCharacterSetEnter?(node: CharacterSet): void\n onCharacterSetLeave?(node: CharacterSet): void\n onFlagsEnter?(node: Flags): void\n onFlagsLeave?(node: Flags): void\n onGroupEnter?(node: Group): void\n onGroupLeave?(node: Group): void\n onPatternEnter?(node: Pattern): void\n onPatternLeave?(node: Pattern): void\n onQuantifierEnter?(node: Quantifier): void\n onQuantifierLeave?(node: Quantifier): void\n onRegExpLiteralEnter?(node: RegExpLiteral): void\n onRegExpLiteralLeave?(node: RegExpLiteral): void\n }\n}\n","import * as AST from \"./ast\"\nimport { RegExpParser } from \"./parser\"\nimport { RegExpValidator } from \"./validator\"\nimport { RegExpVisitor } from \"./visitor\"\n\nexport { AST, RegExpParser, RegExpValidator }\n\n/**\n * Parse a given regular expression literal then make AST object.\n * @param source The source code to parse.\n * @param options The options to parse.\n * @returns The AST of the regular expression.\n */\nexport function parseRegExpLiteral(\n source: string | RegExp,\n options?: RegExpParser.Options,\n): AST.RegExpLiteral {\n return new RegExpParser(options).parseLiteral(String(source))\n}\n\n/**\n * Validate a given regular expression literal.\n * @param source The source code to validate.\n * @param options The options to validate.\n */\nexport function validateRegExpLiteral(\n source: string,\n options?: RegExpValidator.Options,\n): void {\n return new RegExpValidator(options).validateLiteral(source)\n}\n\nexport function visitRegExpAST(\n node: AST.Node,\n handlers: RegExpVisitor.Handlers,\n): void {\n new RegExpVisitor(handlers).visit(node)\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js.map","sources":["src/unicode/ids.ts","src/unicode/property-data.ts","src/unicode/index.ts","src/reader.ts","src/regexp-syntax-error.ts","src/validator.ts","src/parser.ts","src/visitor.ts","src/index.ts"],"sourcesContent":["/* Generated from DerivedCoreProperties-11.0.0.txt */\nexport function isIdStart(cp: number): boolean {\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp)\n}\nexport function isIdContinue(cp: number): boolean {\n if (cp < 0x30) return false\n if (cp < 0x3a) return true\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp === 0x5f) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp) || isLargeIdContinue(cp)\n}\n\nfunction isLargeIdStart(cp: number): boolean {\n if (cp < 0x30a1) {\n if (cp < 0xec0) {\n if (cp < 0xa35) {\n if (cp < 0x6e5) {\n if (cp < 0x37a) {\n if (cp < 0x294) {\n if (cp < 0xf8) {\n if (cp === 0xaa) return true\n if (cp === 0xb5) return true\n if (cp === 0xba) return true\n if (cp < 0xc0) return false\n if (cp < 0xd7) return true\n if (cp < 0xd8) return false\n if (cp < 0xf7) return true\n return false\n }\n if (cp < 0x1bb) return true\n if (cp === 0x1bb) return true\n if (cp < 0x1bc) return false\n if (cp < 0x1c0) return true\n if (cp < 0x1c0) return false\n if (cp < 0x1c4) return true\n if (cp < 0x1c4) return false\n if (cp < 0x294) return true\n return false\n }\n if (cp < 0x2ec) {\n if (cp === 0x294) return true\n if (cp < 0x295) return false\n if (cp < 0x2b0) return true\n if (cp < 0x2b0) return false\n if (cp < 0x2c2) return true\n if (cp < 0x2c6) return false\n if (cp < 0x2d2) return true\n if (cp < 0x2e0) return false\n if (cp < 0x2e5) return true\n return false\n }\n if (cp === 0x2ec) return true\n if (cp === 0x2ee) return true\n if (cp < 0x370) return false\n if (cp < 0x374) return true\n if (cp === 0x374) return true\n if (cp < 0x376) return false\n if (cp < 0x378) return true\n return false\n }\n if (cp < 0x531) {\n if (cp < 0x38c) {\n if (cp === 0x37a) return true\n if (cp < 0x37b) return false\n if (cp < 0x37e) return true\n if (cp === 0x37f) return true\n if (cp === 0x386) return true\n if (cp < 0x388) return false\n if (cp < 0x38b) return true\n return false\n }\n if (cp === 0x38c) return true\n if (cp < 0x38e) return false\n if (cp < 0x3a2) return true\n if (cp < 0x3a3) return false\n if (cp < 0x3f6) return true\n if (cp < 0x3f7) return false\n if (cp < 0x482) return true\n if (cp < 0x48a) return false\n if (cp < 0x530) return true\n return false\n }\n if (cp < 0x620) {\n if (cp < 0x531) return false\n if (cp < 0x557) return true\n if (cp === 0x559) return true\n if (cp < 0x560) return false\n if (cp < 0x589) return true\n if (cp < 0x5d0) return false\n if (cp < 0x5eb) return true\n if (cp < 0x5ef) return false\n if (cp < 0x5f3) return true\n return false\n }\n if (cp < 0x640) return true\n if (cp === 0x640) return true\n if (cp < 0x641) return false\n if (cp < 0x64b) return true\n if (cp < 0x66e) return false\n if (cp < 0x670) return true\n if (cp < 0x671) return false\n if (cp < 0x6d4) return true\n if (cp === 0x6d5) return true\n return false\n }\n if (cp < 0x950) {\n if (cp < 0x7fa) {\n if (cp < 0x712) {\n if (cp < 0x6e5) return false\n if (cp < 0x6e7) return true\n if (cp < 0x6ee) return false\n if (cp < 0x6f0) return true\n if (cp < 0x6fa) return false\n if (cp < 0x6fd) return true\n if (cp === 0x6ff) return true\n if (cp === 0x710) return true\n return false\n }\n if (cp < 0x730) return true\n if (cp < 0x74d) return false\n if (cp < 0x7a6) return true\n if (cp === 0x7b1) return true\n if (cp < 0x7ca) return false\n if (cp < 0x7eb) return true\n if (cp < 0x7f4) return false\n if (cp < 0x7f6) return true\n return false\n }\n if (cp < 0x840) {\n if (cp === 0x7fa) return true\n if (cp < 0x800) return false\n if (cp < 0x816) return true\n if (cp === 0x81a) return true\n if (cp === 0x824) return true\n if (cp === 0x828) return true\n return false\n }\n if (cp < 0x859) return true\n if (cp < 0x860) return false\n if (cp < 0x86b) return true\n if (cp < 0x8a0) return false\n if (cp < 0x8b5) return true\n if (cp < 0x8b6) return false\n if (cp < 0x8be) return true\n if (cp < 0x904) return false\n if (cp < 0x93a) return true\n if (cp === 0x93d) return true\n return false\n }\n if (cp < 0x9bd) {\n if (cp < 0x98f) {\n if (cp === 0x950) return true\n if (cp < 0x958) return false\n if (cp < 0x962) return true\n if (cp === 0x971) return true\n if (cp < 0x972) return false\n if (cp < 0x981) return true\n if (cp < 0x985) return false\n if (cp < 0x98d) return true\n return false\n }\n if (cp < 0x991) return true\n if (cp < 0x993) return false\n if (cp < 0x9a9) return true\n if (cp < 0x9aa) return false\n if (cp < 0x9b1) return true\n if (cp === 0x9b2) return true\n if (cp < 0x9b6) return false\n if (cp < 0x9ba) return true\n return false\n }\n if (cp < 0x9fc) {\n if (cp === 0x9bd) return true\n if (cp === 0x9ce) return true\n if (cp < 0x9dc) return false\n if (cp < 0x9de) return true\n if (cp < 0x9df) return false\n if (cp < 0x9e2) return true\n if (cp < 0x9f0) return false\n if (cp < 0x9f2) return true\n return false\n }\n if (cp === 0x9fc) return true\n if (cp < 0xa05) return false\n if (cp < 0xa0b) return true\n if (cp < 0xa0f) return false\n if (cp < 0xa11) return true\n if (cp < 0xa13) return false\n if (cp < 0xa29) return true\n if (cp < 0xa2a) return false\n if (cp < 0xa31) return true\n if (cp < 0xa32) return false\n if (cp < 0xa34) return true\n return false\n }\n if (cp < 0xc60) {\n if (cp < 0xb3d) {\n if (cp < 0xab5) {\n if (cp < 0xa85) {\n if (cp < 0xa35) return false\n if (cp < 0xa37) return true\n if (cp < 0xa38) return false\n if (cp < 0xa3a) return true\n if (cp < 0xa59) return false\n if (cp < 0xa5d) return true\n if (cp === 0xa5e) return true\n if (cp < 0xa72) return false\n if (cp < 0xa75) return true\n return false\n }\n if (cp < 0xa8e) return true\n if (cp < 0xa8f) return false\n if (cp < 0xa92) return true\n if (cp < 0xa93) return false\n if (cp < 0xaa9) return true\n if (cp < 0xaaa) return false\n if (cp < 0xab1) return true\n if (cp < 0xab2) return false\n if (cp < 0xab4) return true\n return false\n }\n if (cp < 0xb05) {\n if (cp < 0xab5) return false\n if (cp < 0xaba) return true\n if (cp === 0xabd) return true\n if (cp === 0xad0) return true\n if (cp < 0xae0) return false\n if (cp < 0xae2) return true\n if (cp === 0xaf9) return true\n return false\n }\n if (cp < 0xb0d) return true\n if (cp < 0xb0f) return false\n if (cp < 0xb11) return true\n if (cp < 0xb13) return false\n if (cp < 0xb29) return true\n if (cp < 0xb2a) return false\n if (cp < 0xb31) return true\n if (cp < 0xb32) return false\n if (cp < 0xb34) return true\n if (cp < 0xb35) return false\n if (cp < 0xb3a) return true\n return false\n }\n if (cp < 0xb9e) {\n if (cp < 0xb85) {\n if (cp === 0xb3d) return true\n if (cp < 0xb5c) return false\n if (cp < 0xb5e) return true\n if (cp < 0xb5f) return false\n if (cp < 0xb62) return true\n if (cp === 0xb71) return true\n if (cp === 0xb83) return true\n return false\n }\n if (cp < 0xb8b) return true\n if (cp < 0xb8e) return false\n if (cp < 0xb91) return true\n if (cp < 0xb92) return false\n if (cp < 0xb96) return true\n if (cp < 0xb99) return false\n if (cp < 0xb9b) return true\n if (cp === 0xb9c) return true\n return false\n }\n if (cp < 0xc05) {\n if (cp < 0xb9e) return false\n if (cp < 0xba0) return true\n if (cp < 0xba3) return false\n if (cp < 0xba5) return true\n if (cp < 0xba8) return false\n if (cp < 0xbab) return true\n if (cp < 0xbae) return false\n if (cp < 0xbba) return true\n if (cp === 0xbd0) return true\n return false\n }\n if (cp < 0xc0d) return true\n if (cp < 0xc0e) return false\n if (cp < 0xc11) return true\n if (cp < 0xc12) return false\n if (cp < 0xc29) return true\n if (cp < 0xc2a) return false\n if (cp < 0xc3a) return true\n if (cp === 0xc3d) return true\n if (cp < 0xc58) return false\n if (cp < 0xc5b) return true\n return false\n }\n if (cp < 0xdb3) {\n if (cp < 0xcf1) {\n if (cp < 0xcaa) {\n if (cp < 0xc60) return false\n if (cp < 0xc62) return true\n if (cp === 0xc80) return true\n if (cp < 0xc85) return false\n if (cp < 0xc8d) return true\n if (cp < 0xc8e) return false\n if (cp < 0xc91) return true\n if (cp < 0xc92) return false\n if (cp < 0xca9) return true\n return false\n }\n if (cp < 0xcb4) return true\n if (cp < 0xcb5) return false\n if (cp < 0xcba) return true\n if (cp === 0xcbd) return true\n if (cp === 0xcde) return true\n if (cp < 0xce0) return false\n if (cp < 0xce2) return true\n return false\n }\n if (cp < 0xd4e) {\n if (cp < 0xcf1) return false\n if (cp < 0xcf3) return true\n if (cp < 0xd05) return false\n if (cp < 0xd0d) return true\n if (cp < 0xd0e) return false\n if (cp < 0xd11) return true\n if (cp < 0xd12) return false\n if (cp < 0xd3b) return true\n if (cp === 0xd3d) return true\n return false\n }\n if (cp === 0xd4e) return true\n if (cp < 0xd54) return false\n if (cp < 0xd57) return true\n if (cp < 0xd5f) return false\n if (cp < 0xd62) return true\n if (cp < 0xd7a) return false\n if (cp < 0xd80) return true\n if (cp < 0xd85) return false\n if (cp < 0xd97) return true\n if (cp < 0xd9a) return false\n if (cp < 0xdb2) return true\n return false\n }\n if (cp < 0xe8a) {\n if (cp < 0xe40) {\n if (cp < 0xdb3) return false\n if (cp < 0xdbc) return true\n if (cp === 0xdbd) return true\n if (cp < 0xdc0) return false\n if (cp < 0xdc7) return true\n if (cp < 0xe01) return false\n if (cp < 0xe31) return true\n if (cp < 0xe32) return false\n if (cp < 0xe34) return true\n return false\n }\n if (cp < 0xe46) return true\n if (cp === 0xe46) return true\n if (cp < 0xe81) return false\n if (cp < 0xe83) return true\n if (cp === 0xe84) return true\n if (cp < 0xe87) return false\n if (cp < 0xe89) return true\n return false\n }\n if (cp < 0xea5) {\n if (cp === 0xe8a) return true\n if (cp === 0xe8d) return true\n if (cp < 0xe94) return false\n if (cp < 0xe98) return true\n if (cp < 0xe99) return false\n if (cp < 0xea0) return true\n if (cp < 0xea1) return false\n if (cp < 0xea4) return true\n return false\n }\n if (cp === 0xea5) return true\n if (cp === 0xea7) return true\n if (cp < 0xeaa) return false\n if (cp < 0xeac) return true\n if (cp < 0xead) return false\n if (cp < 0xeb1) return true\n if (cp < 0xeb2) return false\n if (cp < 0xeb4) return true\n if (cp === 0xebd) return true\n return false\n }\n if (cp < 0x1ce9) {\n if (cp < 0x166f) {\n if (cp < 0x10fd) {\n if (cp < 0x105a) {\n if (cp < 0xf49) {\n if (cp < 0xec0) return false\n if (cp < 0xec5) return true\n if (cp === 0xec6) return true\n if (cp < 0xedc) return false\n if (cp < 0xee0) return true\n if (cp === 0xf00) return true\n if (cp < 0xf40) return false\n if (cp < 0xf48) return true\n return false\n }\n if (cp < 0xf6d) return true\n if (cp < 0xf88) return false\n if (cp < 0xf8d) return true\n if (cp < 0x1000) return false\n if (cp < 0x102b) return true\n if (cp === 0x103f) return true\n if (cp < 0x1050) return false\n if (cp < 0x1056) return true\n return false\n }\n if (cp < 0x108e) {\n if (cp < 0x105a) return false\n if (cp < 0x105e) return true\n if (cp === 0x1061) return true\n if (cp < 0x1065) return false\n if (cp < 0x1067) return true\n if (cp < 0x106e) return false\n if (cp < 0x1071) return true\n if (cp < 0x1075) return false\n if (cp < 0x1082) return true\n return false\n }\n if (cp === 0x108e) return true\n if (cp < 0x10a0) return false\n if (cp < 0x10c6) return true\n if (cp === 0x10c7) return true\n if (cp === 0x10cd) return true\n if (cp < 0x10d0) return false\n if (cp < 0x10fb) return true\n if (cp === 0x10fc) return true\n return false\n }\n if (cp < 0x12b8) {\n if (cp < 0x125a) {\n if (cp < 0x10fd) return false\n if (cp < 0x1100) return true\n if (cp < 0x1100) return false\n if (cp < 0x1249) return true\n if (cp < 0x124a) return false\n if (cp < 0x124e) return true\n if (cp < 0x1250) return false\n if (cp < 0x1257) return true\n if (cp === 0x1258) return true\n return false\n }\n if (cp < 0x125e) return true\n if (cp < 0x1260) return false\n if (cp < 0x1289) return true\n if (cp < 0x128a) return false\n if (cp < 0x128e) return true\n if (cp < 0x1290) return false\n if (cp < 0x12b1) return true\n if (cp < 0x12b2) return false\n if (cp < 0x12b6) return true\n return false\n }\n if (cp < 0x1312) {\n if (cp < 0x12b8) return false\n if (cp < 0x12bf) return true\n if (cp === 0x12c0) return true\n if (cp < 0x12c2) return false\n if (cp < 0x12c6) return true\n if (cp < 0x12c8) return false\n if (cp < 0x12d7) return true\n if (cp < 0x12d8) return false\n if (cp < 0x1311) return true\n return false\n }\n if (cp < 0x1316) return true\n if (cp < 0x1318) return false\n if (cp < 0x135b) return true\n if (cp < 0x1380) return false\n if (cp < 0x1390) return true\n if (cp < 0x13a0) return false\n if (cp < 0x13f6) return true\n if (cp < 0x13f8) return false\n if (cp < 0x13fe) return true\n if (cp < 0x1401) return false\n if (cp < 0x166d) return true\n return false\n }\n if (cp < 0x18b0) {\n if (cp < 0x176e) {\n if (cp < 0x1700) {\n if (cp < 0x166f) return false\n if (cp < 0x1680) return true\n if (cp < 0x1681) return false\n if (cp < 0x169b) return true\n if (cp < 0x16a0) return false\n if (cp < 0x16eb) return true\n if (cp < 0x16ee) return false\n if (cp < 0x16f1) return true\n if (cp < 0x16f1) return false\n if (cp < 0x16f9) return true\n return false\n }\n if (cp < 0x170d) return true\n if (cp < 0x170e) return false\n if (cp < 0x1712) return true\n if (cp < 0x1720) return false\n if (cp < 0x1732) return true\n if (cp < 0x1740) return false\n if (cp < 0x1752) return true\n if (cp < 0x1760) return false\n if (cp < 0x176d) return true\n return false\n }\n if (cp < 0x1843) {\n if (cp < 0x176e) return false\n if (cp < 0x1771) return true\n if (cp < 0x1780) return false\n if (cp < 0x17b4) return true\n if (cp === 0x17d7) return true\n if (cp === 0x17dc) return true\n if (cp < 0x1820) return false\n if (cp < 0x1843) return true\n return false\n }\n if (cp === 0x1843) return true\n if (cp < 0x1844) return false\n if (cp < 0x1879) return true\n if (cp < 0x1880) return false\n if (cp < 0x1885) return true\n if (cp < 0x1885) return false\n if (cp < 0x1887) return true\n if (cp < 0x1887) return false\n if (cp < 0x18a9) return true\n if (cp === 0x18aa) return true\n return false\n }\n if (cp < 0x1b45) {\n if (cp < 0x19b0) {\n if (cp < 0x18b0) return false\n if (cp < 0x18f6) return true\n if (cp < 0x1900) return false\n if (cp < 0x191f) return true\n if (cp < 0x1950) return false\n if (cp < 0x196e) return true\n if (cp < 0x1970) return false\n if (cp < 0x1975) return true\n if (cp < 0x1980) return false\n if (cp < 0x19ac) return true\n return false\n }\n if (cp < 0x19ca) return true\n if (cp < 0x1a00) return false\n if (cp < 0x1a17) return true\n if (cp < 0x1a20) return false\n if (cp < 0x1a55) return true\n if (cp === 0x1aa7) return true\n if (cp < 0x1b05) return false\n if (cp < 0x1b34) return true\n return false\n }\n if (cp < 0x1c4d) {\n if (cp < 0x1b45) return false\n if (cp < 0x1b4c) return true\n if (cp < 0x1b83) return false\n if (cp < 0x1ba1) return true\n if (cp < 0x1bae) return false\n if (cp < 0x1bb0) return true\n if (cp < 0x1bba) return false\n if (cp < 0x1be6) return true\n if (cp < 0x1c00) return false\n if (cp < 0x1c24) return true\n return false\n }\n if (cp < 0x1c50) return true\n if (cp < 0x1c5a) return false\n if (cp < 0x1c78) return true\n if (cp < 0x1c78) return false\n if (cp < 0x1c7e) return true\n if (cp < 0x1c80) return false\n if (cp < 0x1c89) return true\n if (cp < 0x1c90) return false\n if (cp < 0x1cbb) return true\n if (cp < 0x1cbd) return false\n if (cp < 0x1cc0) return true\n return false\n }\n if (cp < 0x212f) {\n if (cp < 0x1fc2) {\n if (cp < 0x1f18) {\n if (cp < 0x1d6b) {\n if (cp < 0x1ce9) return false\n if (cp < 0x1ced) return true\n if (cp < 0x1cee) return false\n if (cp < 0x1cf2) return true\n if (cp < 0x1cf5) return false\n if (cp < 0x1cf7) return true\n if (cp < 0x1d00) return false\n if (cp < 0x1d2c) return true\n if (cp < 0x1d2c) return false\n if (cp < 0x1d6b) return true\n return false\n }\n if (cp < 0x1d78) return true\n if (cp === 0x1d78) return true\n if (cp < 0x1d79) return false\n if (cp < 0x1d9b) return true\n if (cp < 0x1d9b) return false\n if (cp < 0x1dc0) return true\n if (cp < 0x1e00) return false\n if (cp < 0x1f16) return true\n return false\n }\n if (cp < 0x1f5b) {\n if (cp < 0x1f18) return false\n if (cp < 0x1f1e) return true\n if (cp < 0x1f20) return false\n if (cp < 0x1f46) return true\n if (cp < 0x1f48) return false\n if (cp < 0x1f4e) return true\n if (cp < 0x1f50) return false\n if (cp < 0x1f58) return true\n if (cp === 0x1f59) return true\n return false\n }\n if (cp === 0x1f5b) return true\n if (cp === 0x1f5d) return true\n if (cp < 0x1f5f) return false\n if (cp < 0x1f7e) return true\n if (cp < 0x1f80) return false\n if (cp < 0x1fb5) return true\n if (cp < 0x1fb6) return false\n if (cp < 0x1fbd) return true\n if (cp === 0x1fbe) return true\n return false\n }\n if (cp < 0x2102) {\n if (cp < 0x1ff2) {\n if (cp < 0x1fc2) return false\n if (cp < 0x1fc5) return true\n if (cp < 0x1fc6) return false\n if (cp < 0x1fcd) return true\n if (cp < 0x1fd0) return false\n if (cp < 0x1fd4) return true\n if (cp < 0x1fd6) return false\n if (cp < 0x1fdc) return true\n if (cp < 0x1fe0) return false\n if (cp < 0x1fed) return true\n return false\n }\n if (cp < 0x1ff5) return true\n if (cp < 0x1ff6) return false\n if (cp < 0x1ffd) return true\n if (cp === 0x2071) return true\n if (cp === 0x207f) return true\n if (cp < 0x2090) return false\n if (cp < 0x209d) return true\n return false\n }\n if (cp < 0x2119) {\n if (cp === 0x2102) return true\n if (cp === 0x2107) return true\n if (cp < 0x210a) return false\n if (cp < 0x2114) return true\n if (cp === 0x2115) return true\n if (cp === 0x2118) return true\n return false\n }\n if (cp < 0x211e) return true\n if (cp === 0x2124) return true\n if (cp === 0x2126) return true\n if (cp === 0x2128) return true\n if (cp < 0x212a) return false\n if (cp < 0x212e) return true\n if (cp === 0x212e) return true\n return false\n }\n if (cp < 0x2d80) {\n if (cp < 0x2c30) {\n if (cp < 0x214e) {\n if (cp < 0x212f) return false\n if (cp < 0x2135) return true\n if (cp < 0x2135) return false\n if (cp < 0x2139) return true\n if (cp === 0x2139) return true\n if (cp < 0x213c) return false\n if (cp < 0x2140) return true\n if (cp < 0x2145) return false\n if (cp < 0x214a) return true\n return false\n }\n if (cp === 0x214e) return true\n if (cp < 0x2160) return false\n if (cp < 0x2183) return true\n if (cp < 0x2183) return false\n if (cp < 0x2185) return true\n if (cp < 0x2185) return false\n if (cp < 0x2189) return true\n if (cp < 0x2c00) return false\n if (cp < 0x2c2f) return true\n return false\n }\n if (cp < 0x2cf2) {\n if (cp < 0x2c30) return false\n if (cp < 0x2c5f) return true\n if (cp < 0x2c60) return false\n if (cp < 0x2c7c) return true\n if (cp < 0x2c7c) return false\n if (cp < 0x2c7e) return true\n if (cp < 0x2c7e) return false\n if (cp < 0x2ce5) return true\n if (cp < 0x2ceb) return false\n if (cp < 0x2cef) return true\n return false\n }\n if (cp < 0x2cf4) return true\n if (cp < 0x2d00) return false\n if (cp < 0x2d26) return true\n if (cp === 0x2d27) return true\n if (cp === 0x2d2d) return true\n if (cp < 0x2d30) return false\n if (cp < 0x2d68) return true\n if (cp === 0x2d6f) return true\n return false\n }\n if (cp < 0x3006) {\n if (cp < 0x2dc0) {\n if (cp < 0x2d80) return false\n if (cp < 0x2d97) return true\n if (cp < 0x2da0) return false\n if (cp < 0x2da7) return true\n if (cp < 0x2da8) return false\n if (cp < 0x2daf) return true\n if (cp < 0x2db0) return false\n if (cp < 0x2db7) return true\n if (cp < 0x2db8) return false\n if (cp < 0x2dbf) return true\n return false\n }\n if (cp < 0x2dc7) return true\n if (cp < 0x2dc8) return false\n if (cp < 0x2dcf) return true\n if (cp < 0x2dd0) return false\n if (cp < 0x2dd7) return true\n if (cp < 0x2dd8) return false\n if (cp < 0x2ddf) return true\n if (cp === 0x3005) return true\n return false\n }\n if (cp < 0x303b) {\n if (cp === 0x3006) return true\n if (cp === 0x3007) return true\n if (cp < 0x3021) return false\n if (cp < 0x302a) return true\n if (cp < 0x3031) return false\n if (cp < 0x3036) return true\n if (cp < 0x3038) return false\n if (cp < 0x303b) return true\n return false\n }\n if (cp === 0x303b) return true\n if (cp === 0x303c) return true\n if (cp < 0x3041) return false\n if (cp < 0x3097) return true\n if (cp < 0x309b) return false\n if (cp < 0x309d) return true\n if (cp < 0x309d) return false\n if (cp < 0x309f) return true\n if (cp === 0x309f) return true\n return false\n }\n if (cp < 0x10b60) {\n if (cp < 0xd7b0) {\n if (cp < 0xa882) {\n if (cp < 0xa67f) {\n if (cp < 0xa015) {\n if (cp < 0x31a0) {\n if (cp < 0x30a1) return false\n if (cp < 0x30fb) return true\n if (cp < 0x30fc) return false\n if (cp < 0x30ff) return true\n if (cp === 0x30ff) return true\n if (cp < 0x3105) return false\n if (cp < 0x3130) return true\n if (cp < 0x3131) return false\n if (cp < 0x318f) return true\n return false\n }\n if (cp < 0x31bb) return true\n if (cp < 0x31f0) return false\n if (cp < 0x3200) return true\n if (cp < 0x3400) return false\n if (cp < 0x4db6) return true\n if (cp < 0x4e00) return false\n if (cp < 0x9ff0) return true\n if (cp < 0xa000) return false\n if (cp < 0xa015) return true\n return false\n }\n if (cp < 0xa60c) {\n if (cp === 0xa015) return true\n if (cp < 0xa016) return false\n if (cp < 0xa48d) return true\n if (cp < 0xa4d0) return false\n if (cp < 0xa4f8) return true\n if (cp < 0xa4f8) return false\n if (cp < 0xa4fe) return true\n if (cp < 0xa500) return false\n if (cp < 0xa60c) return true\n return false\n }\n if (cp === 0xa60c) return true\n if (cp < 0xa610) return false\n if (cp < 0xa620) return true\n if (cp < 0xa62a) return false\n if (cp < 0xa62c) return true\n if (cp < 0xa640) return false\n if (cp < 0xa66e) return true\n if (cp === 0xa66e) return true\n return false\n }\n if (cp < 0xa78b) {\n if (cp < 0xa717) {\n if (cp === 0xa67f) return true\n if (cp < 0xa680) return false\n if (cp < 0xa69c) return true\n if (cp < 0xa69c) return false\n if (cp < 0xa69e) return true\n if (cp < 0xa6a0) return false\n if (cp < 0xa6e6) return true\n if (cp < 0xa6e6) return false\n if (cp < 0xa6f0) return true\n return false\n }\n if (cp < 0xa720) return true\n if (cp < 0xa722) return false\n if (cp < 0xa770) return true\n if (cp === 0xa770) return true\n if (cp < 0xa771) return false\n if (cp < 0xa788) return true\n if (cp === 0xa788) return true\n return false\n }\n if (cp < 0xa7fa) {\n if (cp < 0xa78b) return false\n if (cp < 0xa78f) return true\n if (cp === 0xa78f) return true\n if (cp < 0xa790) return false\n if (cp < 0xa7ba) return true\n if (cp === 0xa7f7) return true\n if (cp < 0xa7f8) return false\n if (cp < 0xa7fa) return true\n return false\n }\n if (cp === 0xa7fa) return true\n if (cp < 0xa7fb) return false\n if (cp < 0xa802) return true\n if (cp < 0xa803) return false\n if (cp < 0xa806) return true\n if (cp < 0xa807) return false\n if (cp < 0xa80b) return true\n if (cp < 0xa80c) return false\n if (cp < 0xa823) return true\n if (cp < 0xa840) return false\n if (cp < 0xa874) return true\n return false\n }\n if (cp < 0xaab1) {\n if (cp < 0xa9e6) {\n if (cp < 0xa930) {\n if (cp < 0xa882) return false\n if (cp < 0xa8b4) return true\n if (cp < 0xa8f2) return false\n if (cp < 0xa8f8) return true\n if (cp === 0xa8fb) return true\n if (cp < 0xa8fd) return false\n if (cp < 0xa8ff) return true\n if (cp < 0xa90a) return false\n if (cp < 0xa926) return true\n return false\n }\n if (cp < 0xa947) return true\n if (cp < 0xa960) return false\n if (cp < 0xa97d) return true\n if (cp < 0xa984) return false\n if (cp < 0xa9b3) return true\n if (cp === 0xa9cf) return true\n if (cp < 0xa9e0) return false\n if (cp < 0xa9e5) return true\n return false\n }\n if (cp < 0xaa44) {\n if (cp === 0xa9e6) return true\n if (cp < 0xa9e7) return false\n if (cp < 0xa9f0) return true\n if (cp < 0xa9fa) return false\n if (cp < 0xa9ff) return true\n if (cp < 0xaa00) return false\n if (cp < 0xaa29) return true\n if (cp < 0xaa40) return false\n if (cp < 0xaa43) return true\n return false\n }\n if (cp < 0xaa4c) return true\n if (cp < 0xaa60) return false\n if (cp < 0xaa70) return true\n if (cp === 0xaa70) return true\n if (cp < 0xaa71) return false\n if (cp < 0xaa77) return true\n if (cp === 0xaa7a) return true\n if (cp < 0xaa7e) return false\n if (cp < 0xaab0) return true\n return false\n }\n if (cp < 0xab01) {\n if (cp < 0xaadb) {\n if (cp === 0xaab1) return true\n if (cp < 0xaab5) return false\n if (cp < 0xaab7) return true\n if (cp < 0xaab9) return false\n if (cp < 0xaabe) return true\n if (cp === 0xaac0) return true\n if (cp === 0xaac2) return true\n return false\n }\n if (cp < 0xaadd) return true\n if (cp === 0xaadd) return true\n if (cp < 0xaae0) return false\n if (cp < 0xaaeb) return true\n if (cp === 0xaaf2) return true\n if (cp < 0xaaf3) return false\n if (cp < 0xaaf5) return true\n return false\n }\n if (cp < 0xab30) {\n if (cp < 0xab01) return false\n if (cp < 0xab07) return true\n if (cp < 0xab09) return false\n if (cp < 0xab0f) return true\n if (cp < 0xab11) return false\n if (cp < 0xab17) return true\n if (cp < 0xab20) return false\n if (cp < 0xab27) return true\n if (cp < 0xab28) return false\n if (cp < 0xab2f) return true\n return false\n }\n if (cp < 0xab5b) return true\n if (cp < 0xab5c) return false\n if (cp < 0xab60) return true\n if (cp < 0xab60) return false\n if (cp < 0xab66) return true\n if (cp < 0xab70) return false\n if (cp < 0xabc0) return true\n if (cp < 0xabc0) return false\n if (cp < 0xabe3) return true\n if (cp < 0xac00) return false\n if (cp < 0xd7a4) return true\n return false\n }\n if (cp < 0x1032d) {\n if (cp < 0xff41) {\n if (cp < 0xfb3e) {\n if (cp < 0xfb13) {\n if (cp < 0xd7b0) return false\n if (cp < 0xd7c7) return true\n if (cp < 0xd7cb) return false\n if (cp < 0xd7fc) return true\n if (cp < 0xf900) return false\n if (cp < 0xfa6e) return true\n if (cp < 0xfa70) return false\n if (cp < 0xfada) return true\n if (cp < 0xfb00) return false\n if (cp < 0xfb07) return true\n return false\n }\n if (cp < 0xfb18) return true\n if (cp === 0xfb1d) return true\n if (cp < 0xfb1f) return false\n if (cp < 0xfb29) return true\n if (cp < 0xfb2a) return false\n if (cp < 0xfb37) return true\n if (cp < 0xfb38) return false\n if (cp < 0xfb3d) return true\n return false\n }\n if (cp < 0xfd50) {\n if (cp === 0xfb3e) return true\n if (cp < 0xfb40) return false\n if (cp < 0xfb42) return true\n if (cp < 0xfb43) return false\n if (cp < 0xfb45) return true\n if (cp < 0xfb46) return false\n if (cp < 0xfbb2) return true\n if (cp < 0xfbd3) return false\n if (cp < 0xfd3e) return true\n return false\n }\n if (cp < 0xfd90) return true\n if (cp < 0xfd92) return false\n if (cp < 0xfdc8) return true\n if (cp < 0xfdf0) return false\n if (cp < 0xfdfc) return true\n if (cp < 0xfe70) return false\n if (cp < 0xfe75) return true\n if (cp < 0xfe76) return false\n if (cp < 0xfefd) return true\n if (cp < 0xff21) return false\n if (cp < 0xff3b) return true\n return false\n }\n if (cp < 0x10000) {\n if (cp < 0xffa0) {\n if (cp < 0xff41) return false\n if (cp < 0xff5b) return true\n if (cp < 0xff66) return false\n if (cp < 0xff70) return true\n if (cp === 0xff70) return true\n if (cp < 0xff71) return false\n if (cp < 0xff9e) return true\n if (cp < 0xff9e) return false\n if (cp < 0xffa0) return true\n return false\n }\n if (cp < 0xffbf) return true\n if (cp < 0xffc2) return false\n if (cp < 0xffc8) return true\n if (cp < 0xffca) return false\n if (cp < 0xffd0) return true\n if (cp < 0xffd2) return false\n if (cp < 0xffd8) return true\n if (cp < 0xffda) return false\n if (cp < 0xffdd) return true\n return false\n }\n if (cp < 0x10050) {\n if (cp < 0x10000) return false\n if (cp < 0x1000c) return true\n if (cp < 0x1000d) return false\n if (cp < 0x10027) return true\n if (cp < 0x10028) return false\n if (cp < 0x1003b) return true\n if (cp < 0x1003c) return false\n if (cp < 0x1003e) return true\n if (cp < 0x1003f) return false\n if (cp < 0x1004e) return true\n return false\n }\n if (cp < 0x1005e) return true\n if (cp < 0x10080) return false\n if (cp < 0x100fb) return true\n if (cp < 0x10140) return false\n if (cp < 0x10175) return true\n if (cp < 0x10280) return false\n if (cp < 0x1029d) return true\n if (cp < 0x102a0) return false\n if (cp < 0x102d1) return true\n if (cp < 0x10300) return false\n if (cp < 0x10320) return true\n return false\n }\n if (cp < 0x10837) {\n if (cp < 0x10450) {\n if (cp < 0x10380) {\n if (cp < 0x1032d) return false\n if (cp < 0x10341) return true\n if (cp === 0x10341) return true\n if (cp < 0x10342) return false\n if (cp < 0x1034a) return true\n if (cp === 0x1034a) return true\n if (cp < 0x10350) return false\n if (cp < 0x10376) return true\n return false\n }\n if (cp < 0x1039e) return true\n if (cp < 0x103a0) return false\n if (cp < 0x103c4) return true\n if (cp < 0x103c8) return false\n if (cp < 0x103d0) return true\n if (cp < 0x103d1) return false\n if (cp < 0x103d6) return true\n if (cp < 0x10400) return false\n if (cp < 0x10450) return true\n return false\n }\n if (cp < 0x10600) {\n if (cp < 0x10450) return false\n if (cp < 0x1049e) return true\n if (cp < 0x104b0) return false\n if (cp < 0x104d4) return true\n if (cp < 0x104d8) return false\n if (cp < 0x104fc) return true\n if (cp < 0x10500) return false\n if (cp < 0x10528) return true\n if (cp < 0x10530) return false\n if (cp < 0x10564) return true\n return false\n }\n if (cp < 0x10737) return true\n if (cp < 0x10740) return false\n if (cp < 0x10756) return true\n if (cp < 0x10760) return false\n if (cp < 0x10768) return true\n if (cp < 0x10800) return false\n if (cp < 0x10806) return true\n if (cp === 0x10808) return true\n if (cp < 0x1080a) return false\n if (cp < 0x10836) return true\n return false\n }\n if (cp < 0x109be) {\n if (cp < 0x108e0) {\n if (cp < 0x10837) return false\n if (cp < 0x10839) return true\n if (cp === 0x1083c) return true\n if (cp < 0x1083f) return false\n if (cp < 0x10856) return true\n if (cp < 0x10860) return false\n if (cp < 0x10877) return true\n if (cp < 0x10880) return false\n if (cp < 0x1089f) return true\n return false\n }\n if (cp < 0x108f3) return true\n if (cp < 0x108f4) return false\n if (cp < 0x108f6) return true\n if (cp < 0x10900) return false\n if (cp < 0x10916) return true\n if (cp < 0x10920) return false\n if (cp < 0x1093a) return true\n if (cp < 0x10980) return false\n if (cp < 0x109b8) return true\n return false\n }\n if (cp < 0x10a60) {\n if (cp < 0x109be) return false\n if (cp < 0x109c0) return true\n if (cp === 0x10a00) return true\n if (cp < 0x10a10) return false\n if (cp < 0x10a14) return true\n if (cp < 0x10a15) return false\n if (cp < 0x10a18) return true\n if (cp < 0x10a19) return false\n if (cp < 0x10a36) return true\n return false\n }\n if (cp < 0x10a7d) return true\n if (cp < 0x10a80) return false\n if (cp < 0x10a9d) return true\n if (cp < 0x10ac0) return false\n if (cp < 0x10ac8) return true\n if (cp < 0x10ac9) return false\n if (cp < 0x10ae5) return true\n if (cp < 0x10b00) return false\n if (cp < 0x10b36) return true\n if (cp < 0x10b40) return false\n if (cp < 0x10b56) return true\n return false\n }\n if (cp < 0x16e40) {\n if (cp < 0x11580) {\n if (cp < 0x11213) {\n if (cp < 0x11083) {\n if (cp < 0x10d00) {\n if (cp < 0x10b60) return false\n if (cp < 0x10b73) return true\n if (cp < 0x10b80) return false\n if (cp < 0x10b92) return true\n if (cp < 0x10c00) return false\n if (cp < 0x10c49) return true\n if (cp < 0x10c80) return false\n if (cp < 0x10cb3) return true\n if (cp < 0x10cc0) return false\n if (cp < 0x10cf3) return true\n return false\n }\n if (cp < 0x10d24) return true\n if (cp < 0x10f00) return false\n if (cp < 0x10f1d) return true\n if (cp === 0x10f27) return true\n if (cp < 0x10f30) return false\n if (cp < 0x10f46) return true\n if (cp < 0x11003) return false\n if (cp < 0x11038) return true\n return false\n }\n if (cp < 0x11176) {\n if (cp < 0x11083) return false\n if (cp < 0x110b0) return true\n if (cp < 0x110d0) return false\n if (cp < 0x110e9) return true\n if (cp < 0x11103) return false\n if (cp < 0x11127) return true\n if (cp === 0x11144) return true\n if (cp < 0x11150) return false\n if (cp < 0x11173) return true\n return false\n }\n if (cp === 0x11176) return true\n if (cp < 0x11183) return false\n if (cp < 0x111b3) return true\n if (cp < 0x111c1) return false\n if (cp < 0x111c5) return true\n if (cp === 0x111da) return true\n if (cp === 0x111dc) return true\n if (cp < 0x11200) return false\n if (cp < 0x11212) return true\n return false\n }\n if (cp < 0x1132a) {\n if (cp < 0x1129f) {\n if (cp < 0x11213) return false\n if (cp < 0x1122c) return true\n if (cp < 0x11280) return false\n if (cp < 0x11287) return true\n if (cp === 0x11288) return true\n if (cp < 0x1128a) return false\n if (cp < 0x1128e) return true\n if (cp < 0x1128f) return false\n if (cp < 0x1129e) return true\n return false\n }\n if (cp < 0x112a9) return true\n if (cp < 0x112b0) return false\n if (cp < 0x112df) return true\n if (cp < 0x11305) return false\n if (cp < 0x1130d) return true\n if (cp < 0x1130f) return false\n if (cp < 0x11311) return true\n if (cp < 0x11313) return false\n if (cp < 0x11329) return true\n return false\n }\n if (cp < 0x1135d) {\n if (cp < 0x1132a) return false\n if (cp < 0x11331) return true\n if (cp < 0x11332) return false\n if (cp < 0x11334) return true\n if (cp < 0x11335) return false\n if (cp < 0x1133a) return true\n if (cp === 0x1133d) return true\n if (cp === 0x11350) return true\n return false\n }\n if (cp < 0x11362) return true\n if (cp < 0x11400) return false\n if (cp < 0x11435) return true\n if (cp < 0x11447) return false\n if (cp < 0x1144b) return true\n if (cp < 0x11480) return false\n if (cp < 0x114b0) return true\n if (cp < 0x114c4) return false\n if (cp < 0x114c6) return true\n if (cp === 0x114c7) return true\n return false\n }\n if (cp < 0x11d00) {\n if (cp < 0x11a0b) {\n if (cp < 0x11700) {\n if (cp < 0x11580) return false\n if (cp < 0x115af) return true\n if (cp < 0x115d8) return false\n if (cp < 0x115dc) return true\n if (cp < 0x11600) return false\n if (cp < 0x11630) return true\n if (cp === 0x11644) return true\n if (cp < 0x11680) return false\n if (cp < 0x116ab) return true\n return false\n }\n if (cp < 0x1171b) return true\n if (cp < 0x11800) return false\n if (cp < 0x1182c) return true\n if (cp < 0x118a0) return false\n if (cp < 0x118e0) return true\n if (cp === 0x118ff) return true\n if (cp === 0x11a00) return true\n return false\n }\n if (cp < 0x11a9d) {\n if (cp < 0x11a0b) return false\n if (cp < 0x11a33) return true\n if (cp === 0x11a3a) return true\n if (cp === 0x11a50) return true\n if (cp < 0x11a5c) return false\n if (cp < 0x11a84) return true\n if (cp < 0x11a86) return false\n if (cp < 0x11a8a) return true\n return false\n }\n if (cp === 0x11a9d) return true\n if (cp < 0x11ac0) return false\n if (cp < 0x11af9) return true\n if (cp < 0x11c00) return false\n if (cp < 0x11c09) return true\n if (cp < 0x11c0a) return false\n if (cp < 0x11c2f) return true\n if (cp === 0x11c40) return true\n if (cp < 0x11c72) return false\n if (cp < 0x11c90) return true\n return false\n }\n if (cp < 0x12400) {\n if (cp < 0x11d67) {\n if (cp < 0x11d00) return false\n if (cp < 0x11d07) return true\n if (cp < 0x11d08) return false\n if (cp < 0x11d0a) return true\n if (cp < 0x11d0b) return false\n if (cp < 0x11d31) return true\n if (cp === 0x11d46) return true\n if (cp < 0x11d60) return false\n if (cp < 0x11d66) return true\n return false\n }\n if (cp < 0x11d69) return true\n if (cp < 0x11d6a) return false\n if (cp < 0x11d8a) return true\n if (cp === 0x11d98) return true\n if (cp < 0x11ee0) return false\n if (cp < 0x11ef3) return true\n if (cp < 0x12000) return false\n if (cp < 0x1239a) return true\n return false\n }\n if (cp < 0x16a40) {\n if (cp < 0x12400) return false\n if (cp < 0x1246f) return true\n if (cp < 0x12480) return false\n if (cp < 0x12544) return true\n if (cp < 0x13000) return false\n if (cp < 0x1342f) return true\n if (cp < 0x14400) return false\n if (cp < 0x14647) return true\n if (cp < 0x16800) return false\n if (cp < 0x16a39) return true\n return false\n }\n if (cp < 0x16a5f) return true\n if (cp < 0x16ad0) return false\n if (cp < 0x16aee) return true\n if (cp < 0x16b00) return false\n if (cp < 0x16b30) return true\n if (cp < 0x16b40) return false\n if (cp < 0x16b44) return true\n if (cp < 0x16b63) return false\n if (cp < 0x16b78) return true\n if (cp < 0x16b7d) return false\n if (cp < 0x16b90) return true\n return false\n }\n if (cp < 0x1d7c4) {\n if (cp < 0x1d4bd) {\n if (cp < 0x1bc70) {\n if (cp < 0x17000) {\n if (cp < 0x16e40) return false\n if (cp < 0x16e80) return true\n if (cp < 0x16f00) return false\n if (cp < 0x16f45) return true\n if (cp === 0x16f50) return true\n if (cp < 0x16f93) return false\n if (cp < 0x16fa0) return true\n if (cp < 0x16fe0) return false\n if (cp < 0x16fe2) return true\n return false\n }\n if (cp < 0x187f2) return true\n if (cp < 0x18800) return false\n if (cp < 0x18af3) return true\n if (cp < 0x1b000) return false\n if (cp < 0x1b11f) return true\n if (cp < 0x1b170) return false\n if (cp < 0x1b2fc) return true\n if (cp < 0x1bc00) return false\n if (cp < 0x1bc6b) return true\n return false\n }\n if (cp < 0x1d49e) {\n if (cp < 0x1bc70) return false\n if (cp < 0x1bc7d) return true\n if (cp < 0x1bc80) return false\n if (cp < 0x1bc89) return true\n if (cp < 0x1bc90) return false\n if (cp < 0x1bc9a) return true\n if (cp < 0x1d400) return false\n if (cp < 0x1d455) return true\n if (cp < 0x1d456) return false\n if (cp < 0x1d49d) return true\n return false\n }\n if (cp < 0x1d4a0) return true\n if (cp === 0x1d4a2) return true\n if (cp < 0x1d4a5) return false\n if (cp < 0x1d4a7) return true\n if (cp < 0x1d4a9) return false\n if (cp < 0x1d4ad) return true\n if (cp < 0x1d4ae) return false\n if (cp < 0x1d4ba) return true\n if (cp === 0x1d4bb) return true\n return false\n }\n if (cp < 0x1d552) {\n if (cp < 0x1d51e) {\n if (cp < 0x1d4bd) return false\n if (cp < 0x1d4c4) return true\n if (cp < 0x1d4c5) return false\n if (cp < 0x1d506) return true\n if (cp < 0x1d507) return false\n if (cp < 0x1d50b) return true\n if (cp < 0x1d50d) return false\n if (cp < 0x1d515) return true\n if (cp < 0x1d516) return false\n if (cp < 0x1d51d) return true\n return false\n }\n if (cp < 0x1d53a) return true\n if (cp < 0x1d53b) return false\n if (cp < 0x1d53f) return true\n if (cp < 0x1d540) return false\n if (cp < 0x1d545) return true\n if (cp === 0x1d546) return true\n if (cp < 0x1d54a) return false\n if (cp < 0x1d551) return true\n return false\n }\n if (cp < 0x1d716) {\n if (cp < 0x1d552) return false\n if (cp < 0x1d6a6) return true\n if (cp < 0x1d6a8) return false\n if (cp < 0x1d6c1) return true\n if (cp < 0x1d6c2) return false\n if (cp < 0x1d6db) return true\n if (cp < 0x1d6dc) return false\n if (cp < 0x1d6fb) return true\n if (cp < 0x1d6fc) return false\n if (cp < 0x1d715) return true\n return false\n }\n if (cp < 0x1d735) return true\n if (cp < 0x1d736) return false\n if (cp < 0x1d74f) return true\n if (cp < 0x1d750) return false\n if (cp < 0x1d76f) return true\n if (cp < 0x1d770) return false\n if (cp < 0x1d789) return true\n if (cp < 0x1d78a) return false\n if (cp < 0x1d7a9) return true\n if (cp < 0x1d7aa) return false\n if (cp < 0x1d7c3) return true\n return false\n }\n if (cp < 0x1ee5b) {\n if (cp < 0x1ee39) {\n if (cp < 0x1ee21) {\n if (cp < 0x1d7c4) return false\n if (cp < 0x1d7cc) return true\n if (cp < 0x1e800) return false\n if (cp < 0x1e8c5) return true\n if (cp < 0x1e900) return false\n if (cp < 0x1e944) return true\n if (cp < 0x1ee00) return false\n if (cp < 0x1ee04) return true\n if (cp < 0x1ee05) return false\n if (cp < 0x1ee20) return true\n return false\n }\n if (cp < 0x1ee23) return true\n if (cp === 0x1ee24) return true\n if (cp === 0x1ee27) return true\n if (cp < 0x1ee29) return false\n if (cp < 0x1ee33) return true\n if (cp < 0x1ee34) return false\n if (cp < 0x1ee38) return true\n return false\n }\n if (cp < 0x1ee4b) {\n if (cp === 0x1ee39) return true\n if (cp === 0x1ee3b) return true\n if (cp === 0x1ee42) return true\n if (cp === 0x1ee47) return true\n if (cp === 0x1ee49) return true\n return false\n }\n if (cp === 0x1ee4b) return true\n if (cp < 0x1ee4d) return false\n if (cp < 0x1ee50) return true\n if (cp < 0x1ee51) return false\n if (cp < 0x1ee53) return true\n if (cp === 0x1ee54) return true\n if (cp === 0x1ee57) return true\n if (cp === 0x1ee59) return true\n return false\n }\n if (cp < 0x1ee80) {\n if (cp < 0x1ee67) {\n if (cp === 0x1ee5b) return true\n if (cp === 0x1ee5d) return true\n if (cp === 0x1ee5f) return true\n if (cp < 0x1ee61) return false\n if (cp < 0x1ee63) return true\n if (cp === 0x1ee64) return true\n return false\n }\n if (cp < 0x1ee6b) return true\n if (cp < 0x1ee6c) return false\n if (cp < 0x1ee73) return true\n if (cp < 0x1ee74) return false\n if (cp < 0x1ee78) return true\n if (cp < 0x1ee79) return false\n if (cp < 0x1ee7d) return true\n if (cp === 0x1ee7e) return true\n return false\n }\n if (cp < 0x20000) {\n if (cp < 0x1ee80) return false\n if (cp < 0x1ee8a) return true\n if (cp < 0x1ee8b) return false\n if (cp < 0x1ee9c) return true\n if (cp < 0x1eea1) return false\n if (cp < 0x1eea4) return true\n if (cp < 0x1eea5) return false\n if (cp < 0x1eeaa) return true\n if (cp < 0x1eeab) return false\n if (cp < 0x1eebc) return true\n return false\n }\n if (cp < 0x2a6d7) return true\n if (cp < 0x2a700) return false\n if (cp < 0x2b735) return true\n if (cp < 0x2b740) return false\n if (cp < 0x2b81e) return true\n if (cp < 0x2b820) return false\n if (cp < 0x2cea2) return true\n if (cp < 0x2ceb0) return false\n if (cp < 0x2ebe1) return true\n if (cp < 0x2f800) return false\n if (cp < 0x2fa1e) return true\n return false\n}\n\nfunction isLargeIdContinue(cp: number): boolean {\n if (cp < 0x1cd0) {\n if (cp < 0xd82) {\n if (cp < 0xa83) {\n if (cp < 0x93b) {\n if (cp < 0x6ea) {\n if (cp < 0x5c7) {\n if (cp === 0xb7) return true\n if (cp < 0x300) return false\n if (cp < 0x370) return true\n if (cp === 0x387) return true\n if (cp < 0x483) return false\n if (cp < 0x488) return true\n if (cp < 0x591) return false\n if (cp < 0x5be) return true\n if (cp === 0x5bf) return true\n if (cp < 0x5c1) return false\n if (cp < 0x5c3) return true\n if (cp < 0x5c4) return false\n if (cp < 0x5c6) return true\n return false\n }\n if (cp === 0x5c7) return true\n if (cp < 0x610) return false\n if (cp < 0x61b) return true\n if (cp < 0x64b) return false\n if (cp < 0x660) return true\n if (cp < 0x660) return false\n if (cp < 0x66a) return true\n if (cp === 0x670) return true\n if (cp < 0x6d6) return false\n if (cp < 0x6dd) return true\n if (cp < 0x6df) return false\n if (cp < 0x6e5) return true\n if (cp < 0x6e7) return false\n if (cp < 0x6e9) return true\n return false\n }\n if (cp < 0x816) {\n if (cp < 0x6ea) return false\n if (cp < 0x6ee) return true\n if (cp < 0x6f0) return false\n if (cp < 0x6fa) return true\n if (cp === 0x711) return true\n if (cp < 0x730) return false\n if (cp < 0x74b) return true\n if (cp < 0x7a6) return false\n if (cp < 0x7b1) return true\n if (cp < 0x7c0) return false\n if (cp < 0x7ca) return true\n if (cp < 0x7eb) return false\n if (cp < 0x7f4) return true\n if (cp === 0x7fd) return true\n return false\n }\n if (cp < 0x81a) return true\n if (cp < 0x81b) return false\n if (cp < 0x824) return true\n if (cp < 0x825) return false\n if (cp < 0x828) return true\n if (cp < 0x829) return false\n if (cp < 0x82e) return true\n if (cp < 0x859) return false\n if (cp < 0x85c) return true\n if (cp < 0x8d3) return false\n if (cp < 0x8e2) return true\n if (cp < 0x8e3) return false\n if (cp < 0x903) return true\n if (cp === 0x903) return true\n if (cp === 0x93a) return true\n return false\n }\n if (cp < 0x9cd) {\n if (cp < 0x962) {\n if (cp === 0x93b) return true\n if (cp === 0x93c) return true\n if (cp < 0x93e) return false\n if (cp < 0x941) return true\n if (cp < 0x941) return false\n if (cp < 0x949) return true\n if (cp < 0x949) return false\n if (cp < 0x94d) return true\n if (cp === 0x94d) return true\n if (cp < 0x94e) return false\n if (cp < 0x950) return true\n if (cp < 0x951) return false\n if (cp < 0x958) return true\n return false\n }\n if (cp < 0x964) return true\n if (cp < 0x966) return false\n if (cp < 0x970) return true\n if (cp === 0x981) return true\n if (cp < 0x982) return false\n if (cp < 0x984) return true\n if (cp === 0x9bc) return true\n if (cp < 0x9be) return false\n if (cp < 0x9c1) return true\n if (cp < 0x9c1) return false\n if (cp < 0x9c5) return true\n if (cp < 0x9c7) return false\n if (cp < 0x9c9) return true\n if (cp < 0x9cb) return false\n if (cp < 0x9cd) return true\n return false\n }\n if (cp < 0xa3e) {\n if (cp === 0x9cd) return true\n if (cp === 0x9d7) return true\n if (cp < 0x9e2) return false\n if (cp < 0x9e4) return true\n if (cp < 0x9e6) return false\n if (cp < 0x9f0) return true\n if (cp === 0x9fe) return true\n if (cp < 0xa01) return false\n if (cp < 0xa03) return true\n if (cp === 0xa03) return true\n if (cp === 0xa3c) return true\n return false\n }\n if (cp < 0xa41) return true\n if (cp < 0xa41) return false\n if (cp < 0xa43) return true\n if (cp < 0xa47) return false\n if (cp < 0xa49) return true\n if (cp < 0xa4b) return false\n if (cp < 0xa4e) return true\n if (cp === 0xa51) return true\n if (cp < 0xa66) return false\n if (cp < 0xa70) return true\n if (cp < 0xa70) return false\n if (cp < 0xa72) return true\n if (cp === 0xa75) return true\n if (cp < 0xa81) return false\n if (cp < 0xa83) return true\n return false\n }\n if (cp < 0xc00) {\n if (cp < 0xb41) {\n if (cp < 0xae2) {\n if (cp === 0xa83) return true\n if (cp === 0xabc) return true\n if (cp < 0xabe) return false\n if (cp < 0xac1) return true\n if (cp < 0xac1) return false\n if (cp < 0xac6) return true\n if (cp < 0xac7) return false\n if (cp < 0xac9) return true\n if (cp === 0xac9) return true\n if (cp < 0xacb) return false\n if (cp < 0xacd) return true\n if (cp === 0xacd) return true\n return false\n }\n if (cp < 0xae4) return true\n if (cp < 0xae6) return false\n if (cp < 0xaf0) return true\n if (cp < 0xafa) return false\n if (cp < 0xb00) return true\n if (cp === 0xb01) return true\n if (cp < 0xb02) return false\n if (cp < 0xb04) return true\n if (cp === 0xb3c) return true\n if (cp === 0xb3e) return true\n if (cp === 0xb3f) return true\n if (cp === 0xb40) return true\n return false\n }\n if (cp < 0xb82) {\n if (cp < 0xb41) return false\n if (cp < 0xb45) return true\n if (cp < 0xb47) return false\n if (cp < 0xb49) return true\n if (cp < 0xb4b) return false\n if (cp < 0xb4d) return true\n if (cp === 0xb4d) return true\n if (cp === 0xb56) return true\n if (cp === 0xb57) return true\n if (cp < 0xb62) return false\n if (cp < 0xb64) return true\n if (cp < 0xb66) return false\n if (cp < 0xb70) return true\n return false\n }\n if (cp === 0xb82) return true\n if (cp < 0xbbe) return false\n if (cp < 0xbc0) return true\n if (cp === 0xbc0) return true\n if (cp < 0xbc1) return false\n if (cp < 0xbc3) return true\n if (cp < 0xbc6) return false\n if (cp < 0xbc9) return true\n if (cp < 0xbca) return false\n if (cp < 0xbcd) return true\n if (cp === 0xbcd) return true\n if (cp === 0xbd7) return true\n if (cp < 0xbe6) return false\n if (cp < 0xbf0) return true\n return false\n }\n if (cp < 0xcc7) {\n if (cp < 0xc62) {\n if (cp === 0xc00) return true\n if (cp < 0xc01) return false\n if (cp < 0xc04) return true\n if (cp === 0xc04) return true\n if (cp < 0xc3e) return false\n if (cp < 0xc41) return true\n if (cp < 0xc41) return false\n if (cp < 0xc45) return true\n if (cp < 0xc46) return false\n if (cp < 0xc49) return true\n if (cp < 0xc4a) return false\n if (cp < 0xc4e) return true\n if (cp < 0xc55) return false\n if (cp < 0xc57) return true\n return false\n }\n if (cp < 0xc64) return true\n if (cp < 0xc66) return false\n if (cp < 0xc70) return true\n if (cp === 0xc81) return true\n if (cp < 0xc82) return false\n if (cp < 0xc84) return true\n if (cp === 0xcbc) return true\n if (cp === 0xcbe) return true\n if (cp === 0xcbf) return true\n if (cp < 0xcc0) return false\n if (cp < 0xcc5) return true\n if (cp === 0xcc6) return true\n return false\n }\n if (cp < 0xd3b) {\n if (cp < 0xcc7) return false\n if (cp < 0xcc9) return true\n if (cp < 0xcca) return false\n if (cp < 0xccc) return true\n if (cp < 0xccc) return false\n if (cp < 0xcce) return true\n if (cp < 0xcd5) return false\n if (cp < 0xcd7) return true\n if (cp < 0xce2) return false\n if (cp < 0xce4) return true\n if (cp < 0xce6) return false\n if (cp < 0xcf0) return true\n if (cp < 0xd00) return false\n if (cp < 0xd02) return true\n if (cp < 0xd02) return false\n if (cp < 0xd04) return true\n return false\n }\n if (cp < 0xd3d) return true\n if (cp < 0xd3e) return false\n if (cp < 0xd41) return true\n if (cp < 0xd41) return false\n if (cp < 0xd45) return true\n if (cp < 0xd46) return false\n if (cp < 0xd49) return true\n if (cp < 0xd4a) return false\n if (cp < 0xd4d) return true\n if (cp === 0xd4d) return true\n if (cp === 0xd57) return true\n if (cp < 0xd62) return false\n if (cp < 0xd64) return true\n if (cp < 0xd66) return false\n if (cp < 0xd70) return true\n return false\n }\n if (cp < 0x17e0) {\n if (cp < 0x1038) {\n if (cp < 0xf18) {\n if (cp < 0xe31) {\n if (cp < 0xd82) return false\n if (cp < 0xd84) return true\n if (cp === 0xdca) return true\n if (cp < 0xdcf) return false\n if (cp < 0xdd2) return true\n if (cp < 0xdd2) return false\n if (cp < 0xdd5) return true\n if (cp === 0xdd6) return true\n if (cp < 0xdd8) return false\n if (cp < 0xde0) return true\n if (cp < 0xde6) return false\n if (cp < 0xdf0) return true\n if (cp < 0xdf2) return false\n if (cp < 0xdf4) return true\n return false\n }\n if (cp === 0xe31) return true\n if (cp < 0xe34) return false\n if (cp < 0xe3b) return true\n if (cp < 0xe47) return false\n if (cp < 0xe4f) return true\n if (cp < 0xe50) return false\n if (cp < 0xe5a) return true\n if (cp === 0xeb1) return true\n if (cp < 0xeb4) return false\n if (cp < 0xeba) return true\n if (cp < 0xebb) return false\n if (cp < 0xebd) return true\n if (cp < 0xec8) return false\n if (cp < 0xece) return true\n if (cp < 0xed0) return false\n if (cp < 0xeda) return true\n return false\n }\n if (cp < 0xf80) {\n if (cp < 0xf18) return false\n if (cp < 0xf1a) return true\n if (cp < 0xf20) return false\n if (cp < 0xf2a) return true\n if (cp === 0xf35) return true\n if (cp === 0xf37) return true\n if (cp === 0xf39) return true\n if (cp < 0xf3e) return false\n if (cp < 0xf40) return true\n if (cp < 0xf71) return false\n if (cp < 0xf7f) return true\n if (cp === 0xf7f) return true\n return false\n }\n if (cp < 0xf85) return true\n if (cp < 0xf86) return false\n if (cp < 0xf88) return true\n if (cp < 0xf8d) return false\n if (cp < 0xf98) return true\n if (cp < 0xf99) return false\n if (cp < 0xfbd) return true\n if (cp === 0xfc6) return true\n if (cp < 0x102b) return false\n if (cp < 0x102d) return true\n if (cp < 0x102d) return false\n if (cp < 0x1031) return true\n if (cp === 0x1031) return true\n if (cp < 0x1032) return false\n if (cp < 0x1038) return true\n return false\n }\n if (cp < 0x1090) {\n if (cp < 0x1062) {\n if (cp === 0x1038) return true\n if (cp < 0x1039) return false\n if (cp < 0x103b) return true\n if (cp < 0x103b) return false\n if (cp < 0x103d) return true\n if (cp < 0x103d) return false\n if (cp < 0x103f) return true\n if (cp < 0x1040) return false\n if (cp < 0x104a) return true\n if (cp < 0x1056) return false\n if (cp < 0x1058) return true\n if (cp < 0x1058) return false\n if (cp < 0x105a) return true\n if (cp < 0x105e) return false\n if (cp < 0x1061) return true\n return false\n }\n if (cp < 0x1065) return true\n if (cp < 0x1067) return false\n if (cp < 0x106e) return true\n if (cp < 0x1071) return false\n if (cp < 0x1075) return true\n if (cp === 0x1082) return true\n if (cp < 0x1083) return false\n if (cp < 0x1085) return true\n if (cp < 0x1085) return false\n if (cp < 0x1087) return true\n if (cp < 0x1087) return false\n if (cp < 0x108d) return true\n if (cp === 0x108d) return true\n if (cp === 0x108f) return true\n return false\n }\n if (cp < 0x1772) {\n if (cp < 0x1090) return false\n if (cp < 0x109a) return true\n if (cp < 0x109a) return false\n if (cp < 0x109d) return true\n if (cp === 0x109d) return true\n if (cp < 0x135d) return false\n if (cp < 0x1360) return true\n if (cp < 0x1369) return false\n if (cp < 0x1372) return true\n if (cp < 0x1712) return false\n if (cp < 0x1715) return true\n if (cp < 0x1732) return false\n if (cp < 0x1735) return true\n if (cp < 0x1752) return false\n if (cp < 0x1754) return true\n return false\n }\n if (cp < 0x1774) return true\n if (cp < 0x17b4) return false\n if (cp < 0x17b6) return true\n if (cp === 0x17b6) return true\n if (cp < 0x17b7) return false\n if (cp < 0x17be) return true\n if (cp < 0x17be) return false\n if (cp < 0x17c6) return true\n if (cp === 0x17c6) return true\n if (cp < 0x17c7) return false\n if (cp < 0x17c9) return true\n if (cp < 0x17c9) return false\n if (cp < 0x17d4) return true\n if (cp === 0x17dd) return true\n return false\n }\n if (cp < 0x1b04) {\n if (cp < 0x1a1b) {\n if (cp < 0x1930) {\n if (cp < 0x17e0) return false\n if (cp < 0x17ea) return true\n if (cp < 0x180b) return false\n if (cp < 0x180e) return true\n if (cp < 0x1810) return false\n if (cp < 0x181a) return true\n if (cp === 0x18a9) return true\n if (cp < 0x1920) return false\n if (cp < 0x1923) return true\n if (cp < 0x1923) return false\n if (cp < 0x1927) return true\n if (cp < 0x1927) return false\n if (cp < 0x1929) return true\n if (cp < 0x1929) return false\n if (cp < 0x192c) return true\n return false\n }\n if (cp < 0x1932) return true\n if (cp === 0x1932) return true\n if (cp < 0x1933) return false\n if (cp < 0x1939) return true\n if (cp < 0x1939) return false\n if (cp < 0x193c) return true\n if (cp < 0x1946) return false\n if (cp < 0x1950) return true\n if (cp < 0x19d0) return false\n if (cp < 0x19da) return true\n if (cp === 0x19da) return true\n if (cp < 0x1a17) return false\n if (cp < 0x1a19) return true\n if (cp < 0x1a19) return false\n if (cp < 0x1a1b) return true\n return false\n }\n if (cp < 0x1a63) {\n if (cp === 0x1a1b) return true\n if (cp === 0x1a55) return true\n if (cp === 0x1a56) return true\n if (cp === 0x1a57) return true\n if (cp < 0x1a58) return false\n if (cp < 0x1a5f) return true\n if (cp === 0x1a60) return true\n if (cp === 0x1a61) return true\n if (cp === 0x1a62) return true\n return false\n }\n if (cp < 0x1a65) return true\n if (cp < 0x1a65) return false\n if (cp < 0x1a6d) return true\n if (cp < 0x1a6d) return false\n if (cp < 0x1a73) return true\n if (cp < 0x1a73) return false\n if (cp < 0x1a7d) return true\n if (cp === 0x1a7f) return true\n if (cp < 0x1a80) return false\n if (cp < 0x1a8a) return true\n if (cp < 0x1a90) return false\n if (cp < 0x1a9a) return true\n if (cp < 0x1ab0) return false\n if (cp < 0x1abe) return true\n if (cp < 0x1b00) return false\n if (cp < 0x1b04) return true\n return false\n }\n if (cp < 0x1baa) {\n if (cp < 0x1b43) {\n if (cp === 0x1b04) return true\n if (cp === 0x1b34) return true\n if (cp === 0x1b35) return true\n if (cp < 0x1b36) return false\n if (cp < 0x1b3b) return true\n if (cp === 0x1b3b) return true\n if (cp === 0x1b3c) return true\n if (cp < 0x1b3d) return false\n if (cp < 0x1b42) return true\n if (cp === 0x1b42) return true\n return false\n }\n if (cp < 0x1b45) return true\n if (cp < 0x1b50) return false\n if (cp < 0x1b5a) return true\n if (cp < 0x1b6b) return false\n if (cp < 0x1b74) return true\n if (cp < 0x1b80) return false\n if (cp < 0x1b82) return true\n if (cp === 0x1b82) return true\n if (cp === 0x1ba1) return true\n if (cp < 0x1ba2) return false\n if (cp < 0x1ba6) return true\n if (cp < 0x1ba6) return false\n if (cp < 0x1ba8) return true\n if (cp < 0x1ba8) return false\n if (cp < 0x1baa) return true\n return false\n }\n if (cp < 0x1bee) {\n if (cp === 0x1baa) return true\n if (cp < 0x1bab) return false\n if (cp < 0x1bae) return true\n if (cp < 0x1bb0) return false\n if (cp < 0x1bba) return true\n if (cp === 0x1be6) return true\n if (cp === 0x1be7) return true\n if (cp < 0x1be8) return false\n if (cp < 0x1bea) return true\n if (cp < 0x1bea) return false\n if (cp < 0x1bed) return true\n if (cp === 0x1bed) return true\n return false\n }\n if (cp === 0x1bee) return true\n if (cp < 0x1bef) return false\n if (cp < 0x1bf2) return true\n if (cp < 0x1bf2) return false\n if (cp < 0x1bf4) return true\n if (cp < 0x1c24) return false\n if (cp < 0x1c2c) return true\n if (cp < 0x1c2c) return false\n if (cp < 0x1c34) return true\n if (cp < 0x1c34) return false\n if (cp < 0x1c36) return true\n if (cp < 0x1c36) return false\n if (cp < 0x1c38) return true\n if (cp < 0x1c40) return false\n if (cp < 0x1c4a) return true\n if (cp < 0x1c50) return false\n if (cp < 0x1c5a) return true\n return false\n }\n if (cp < 0x1123e) {\n if (cp < 0xaab7) {\n if (cp < 0xa8b4) {\n if (cp < 0x2d7f) {\n if (cp < 0x1cf8) {\n if (cp < 0x1cd0) return false\n if (cp < 0x1cd3) return true\n if (cp < 0x1cd4) return false\n if (cp < 0x1ce1) return true\n if (cp === 0x1ce1) return true\n if (cp < 0x1ce2) return false\n if (cp < 0x1ce9) return true\n if (cp === 0x1ced) return true\n if (cp < 0x1cf2) return false\n if (cp < 0x1cf4) return true\n if (cp === 0x1cf4) return true\n if (cp === 0x1cf7) return true\n return false\n }\n if (cp < 0x1cfa) return true\n if (cp < 0x1dc0) return false\n if (cp < 0x1dfa) return true\n if (cp < 0x1dfb) return false\n if (cp < 0x1e00) return true\n if (cp < 0x203f) return false\n if (cp < 0x2041) return true\n if (cp === 0x2054) return true\n if (cp < 0x20d0) return false\n if (cp < 0x20dd) return true\n if (cp === 0x20e1) return true\n if (cp < 0x20e5) return false\n if (cp < 0x20f1) return true\n if (cp < 0x2cef) return false\n if (cp < 0x2cf2) return true\n return false\n }\n if (cp < 0xa69e) {\n if (cp === 0x2d7f) return true\n if (cp < 0x2de0) return false\n if (cp < 0x2e00) return true\n if (cp < 0x302a) return false\n if (cp < 0x302e) return true\n if (cp < 0x302e) return false\n if (cp < 0x3030) return true\n if (cp < 0x3099) return false\n if (cp < 0x309b) return true\n if (cp < 0xa620) return false\n if (cp < 0xa62a) return true\n if (cp === 0xa66f) return true\n if (cp < 0xa674) return false\n if (cp < 0xa67e) return true\n return false\n }\n if (cp < 0xa6a0) return true\n if (cp < 0xa6f0) return false\n if (cp < 0xa6f2) return true\n if (cp === 0xa802) return true\n if (cp === 0xa806) return true\n if (cp === 0xa80b) return true\n if (cp < 0xa823) return false\n if (cp < 0xa825) return true\n if (cp < 0xa825) return false\n if (cp < 0xa827) return true\n if (cp === 0xa827) return true\n if (cp < 0xa880) return false\n if (cp < 0xa882) return true\n return false\n }\n if (cp < 0xa9d0) {\n if (cp < 0xa952) {\n if (cp < 0xa8b4) return false\n if (cp < 0xa8c4) return true\n if (cp < 0xa8c4) return false\n if (cp < 0xa8c6) return true\n if (cp < 0xa8d0) return false\n if (cp < 0xa8da) return true\n if (cp < 0xa8e0) return false\n if (cp < 0xa8f2) return true\n if (cp === 0xa8ff) return true\n if (cp < 0xa900) return false\n if (cp < 0xa90a) return true\n if (cp < 0xa926) return false\n if (cp < 0xa92e) return true\n if (cp < 0xa947) return false\n if (cp < 0xa952) return true\n return false\n }\n if (cp < 0xa954) return true\n if (cp < 0xa980) return false\n if (cp < 0xa983) return true\n if (cp === 0xa983) return true\n if (cp === 0xa9b3) return true\n if (cp < 0xa9b4) return false\n if (cp < 0xa9b6) return true\n if (cp < 0xa9b6) return false\n if (cp < 0xa9ba) return true\n if (cp < 0xa9ba) return false\n if (cp < 0xa9bc) return true\n if (cp === 0xa9bc) return true\n if (cp < 0xa9bd) return false\n if (cp < 0xa9c1) return true\n return false\n }\n if (cp < 0xaa43) {\n if (cp < 0xa9d0) return false\n if (cp < 0xa9da) return true\n if (cp === 0xa9e5) return true\n if (cp < 0xa9f0) return false\n if (cp < 0xa9fa) return true\n if (cp < 0xaa29) return false\n if (cp < 0xaa2f) return true\n if (cp < 0xaa2f) return false\n if (cp < 0xaa31) return true\n if (cp < 0xaa31) return false\n if (cp < 0xaa33) return true\n if (cp < 0xaa33) return false\n if (cp < 0xaa35) return true\n if (cp < 0xaa35) return false\n if (cp < 0xaa37) return true\n return false\n }\n if (cp === 0xaa43) return true\n if (cp === 0xaa4c) return true\n if (cp === 0xaa4d) return true\n if (cp < 0xaa50) return false\n if (cp < 0xaa5a) return true\n if (cp === 0xaa7b) return true\n if (cp === 0xaa7c) return true\n if (cp === 0xaa7d) return true\n if (cp === 0xaab0) return true\n if (cp < 0xaab2) return false\n if (cp < 0xaab5) return true\n return false\n }\n if (cp < 0x10d30) {\n if (cp < 0xfe00) {\n if (cp < 0xabe3) {\n if (cp < 0xaab7) return false\n if (cp < 0xaab9) return true\n if (cp < 0xaabe) return false\n if (cp < 0xaac0) return true\n if (cp === 0xaac1) return true\n if (cp === 0xaaeb) return true\n if (cp < 0xaaec) return false\n if (cp < 0xaaee) return true\n if (cp < 0xaaee) return false\n if (cp < 0xaaf0) return true\n if (cp === 0xaaf5) return true\n if (cp === 0xaaf6) return true\n return false\n }\n if (cp < 0xabe5) return true\n if (cp === 0xabe5) return true\n if (cp < 0xabe6) return false\n if (cp < 0xabe8) return true\n if (cp === 0xabe8) return true\n if (cp < 0xabe9) return false\n if (cp < 0xabeb) return true\n if (cp === 0xabec) return true\n if (cp === 0xabed) return true\n if (cp < 0xabf0) return false\n if (cp < 0xabfa) return true\n if (cp === 0xfb1e) return true\n return false\n }\n if (cp < 0x10376) {\n if (cp < 0xfe00) return false\n if (cp < 0xfe10) return true\n if (cp < 0xfe20) return false\n if (cp < 0xfe30) return true\n if (cp < 0xfe33) return false\n if (cp < 0xfe35) return true\n if (cp < 0xfe4d) return false\n if (cp < 0xfe50) return true\n if (cp < 0xff10) return false\n if (cp < 0xff1a) return true\n if (cp === 0xff3f) return true\n if (cp === 0x101fd) return true\n if (cp === 0x102e0) return true\n return false\n }\n if (cp < 0x1037b) return true\n if (cp < 0x104a0) return false\n if (cp < 0x104aa) return true\n if (cp < 0x10a01) return false\n if (cp < 0x10a04) return true\n if (cp < 0x10a05) return false\n if (cp < 0x10a07) return true\n if (cp < 0x10a0c) return false\n if (cp < 0x10a10) return true\n if (cp < 0x10a38) return false\n if (cp < 0x10a3b) return true\n if (cp === 0x10a3f) return true\n if (cp < 0x10ae5) return false\n if (cp < 0x10ae7) return true\n if (cp < 0x10d24) return false\n if (cp < 0x10d28) return true\n return false\n }\n if (cp < 0x1112d) {\n if (cp < 0x11082) {\n if (cp < 0x10d30) return false\n if (cp < 0x10d3a) return true\n if (cp < 0x10f46) return false\n if (cp < 0x10f51) return true\n if (cp === 0x11000) return true\n if (cp === 0x11001) return true\n if (cp === 0x11002) return true\n if (cp < 0x11038) return false\n if (cp < 0x11047) return true\n if (cp < 0x11066) return false\n if (cp < 0x11070) return true\n if (cp < 0x1107f) return false\n if (cp < 0x11082) return true\n return false\n }\n if (cp === 0x11082) return true\n if (cp < 0x110b0) return false\n if (cp < 0x110b3) return true\n if (cp < 0x110b3) return false\n if (cp < 0x110b7) return true\n if (cp < 0x110b7) return false\n if (cp < 0x110b9) return true\n if (cp < 0x110b9) return false\n if (cp < 0x110bb) return true\n if (cp < 0x110f0) return false\n if (cp < 0x110fa) return true\n if (cp < 0x11100) return false\n if (cp < 0x11103) return true\n if (cp < 0x11127) return false\n if (cp < 0x1112c) return true\n if (cp === 0x1112c) return true\n return false\n }\n if (cp < 0x111bf) {\n if (cp < 0x1112d) return false\n if (cp < 0x11135) return true\n if (cp < 0x11136) return false\n if (cp < 0x11140) return true\n if (cp < 0x11145) return false\n if (cp < 0x11147) return true\n if (cp === 0x11173) return true\n if (cp < 0x11180) return false\n if (cp < 0x11182) return true\n if (cp === 0x11182) return true\n if (cp < 0x111b3) return false\n if (cp < 0x111b6) return true\n if (cp < 0x111b6) return false\n if (cp < 0x111bf) return true\n return false\n }\n if (cp < 0x111c1) return true\n if (cp < 0x111c9) return false\n if (cp < 0x111cd) return true\n if (cp < 0x111d0) return false\n if (cp < 0x111da) return true\n if (cp < 0x1122c) return false\n if (cp < 0x1122f) return true\n if (cp < 0x1122f) return false\n if (cp < 0x11232) return true\n if (cp < 0x11232) return false\n if (cp < 0x11234) return true\n if (cp === 0x11234) return true\n if (cp === 0x11235) return true\n if (cp < 0x11236) return false\n if (cp < 0x11238) return true\n return false\n }\n if (cp < 0x11a33) {\n if (cp < 0x115af) {\n if (cp < 0x11435) {\n if (cp < 0x1133e) {\n if (cp === 0x1123e) return true\n if (cp === 0x112df) return true\n if (cp < 0x112e0) return false\n if (cp < 0x112e3) return true\n if (cp < 0x112e3) return false\n if (cp < 0x112eb) return true\n if (cp < 0x112f0) return false\n if (cp < 0x112fa) return true\n if (cp < 0x11300) return false\n if (cp < 0x11302) return true\n if (cp < 0x11302) return false\n if (cp < 0x11304) return true\n if (cp < 0x1133b) return false\n if (cp < 0x1133d) return true\n return false\n }\n if (cp < 0x11340) return true\n if (cp === 0x11340) return true\n if (cp < 0x11341) return false\n if (cp < 0x11345) return true\n if (cp < 0x11347) return false\n if (cp < 0x11349) return true\n if (cp < 0x1134b) return false\n if (cp < 0x1134e) return true\n if (cp === 0x11357) return true\n if (cp < 0x11362) return false\n if (cp < 0x11364) return true\n if (cp < 0x11366) return false\n if (cp < 0x1136d) return true\n if (cp < 0x11370) return false\n if (cp < 0x11375) return true\n return false\n }\n if (cp < 0x114b0) {\n if (cp < 0x11435) return false\n if (cp < 0x11438) return true\n if (cp < 0x11438) return false\n if (cp < 0x11440) return true\n if (cp < 0x11440) return false\n if (cp < 0x11442) return true\n if (cp < 0x11442) return false\n if (cp < 0x11445) return true\n if (cp === 0x11445) return true\n if (cp === 0x11446) return true\n if (cp < 0x11450) return false\n if (cp < 0x1145a) return true\n if (cp === 0x1145e) return true\n return false\n }\n if (cp < 0x114b3) return true\n if (cp < 0x114b3) return false\n if (cp < 0x114b9) return true\n if (cp === 0x114b9) return true\n if (cp === 0x114ba) return true\n if (cp < 0x114bb) return false\n if (cp < 0x114bf) return true\n if (cp < 0x114bf) return false\n if (cp < 0x114c1) return true\n if (cp === 0x114c1) return true\n if (cp < 0x114c2) return false\n if (cp < 0x114c4) return true\n if (cp < 0x114d0) return false\n if (cp < 0x114da) return true\n return false\n }\n if (cp < 0x116ae) {\n if (cp < 0x11633) {\n if (cp < 0x115af) return false\n if (cp < 0x115b2) return true\n if (cp < 0x115b2) return false\n if (cp < 0x115b6) return true\n if (cp < 0x115b8) return false\n if (cp < 0x115bc) return true\n if (cp < 0x115bc) return false\n if (cp < 0x115be) return true\n if (cp === 0x115be) return true\n if (cp < 0x115bf) return false\n if (cp < 0x115c1) return true\n if (cp < 0x115dc) return false\n if (cp < 0x115de) return true\n if (cp < 0x11630) return false\n if (cp < 0x11633) return true\n return false\n }\n if (cp < 0x1163b) return true\n if (cp < 0x1163b) return false\n if (cp < 0x1163d) return true\n if (cp === 0x1163d) return true\n if (cp === 0x1163e) return true\n if (cp < 0x1163f) return false\n if (cp < 0x11641) return true\n if (cp < 0x11650) return false\n if (cp < 0x1165a) return true\n if (cp === 0x116ab) return true\n if (cp === 0x116ac) return true\n if (cp === 0x116ad) return true\n return false\n }\n if (cp < 0x11726) {\n if (cp < 0x116ae) return false\n if (cp < 0x116b0) return true\n if (cp < 0x116b0) return false\n if (cp < 0x116b6) return true\n if (cp === 0x116b6) return true\n if (cp === 0x116b7) return true\n if (cp < 0x116c0) return false\n if (cp < 0x116ca) return true\n if (cp < 0x1171d) return false\n if (cp < 0x11720) return true\n if (cp < 0x11720) return false\n if (cp < 0x11722) return true\n if (cp < 0x11722) return false\n if (cp < 0x11726) return true\n return false\n }\n if (cp === 0x11726) return true\n if (cp < 0x11727) return false\n if (cp < 0x1172c) return true\n if (cp < 0x11730) return false\n if (cp < 0x1173a) return true\n if (cp < 0x1182c) return false\n if (cp < 0x1182f) return true\n if (cp < 0x1182f) return false\n if (cp < 0x11838) return true\n if (cp === 0x11838) return true\n if (cp < 0x11839) return false\n if (cp < 0x1183b) return true\n if (cp < 0x118e0) return false\n if (cp < 0x118ea) return true\n if (cp < 0x11a01) return false\n if (cp < 0x11a0b) return true\n return false\n }\n if (cp < 0x11d97) {\n if (cp < 0x11ca9) {\n if (cp < 0x11a97) {\n if (cp < 0x11a33) return false\n if (cp < 0x11a39) return true\n if (cp === 0x11a39) return true\n if (cp < 0x11a3b) return false\n if (cp < 0x11a3f) return true\n if (cp === 0x11a47) return true\n if (cp < 0x11a51) return false\n if (cp < 0x11a57) return true\n if (cp < 0x11a57) return false\n if (cp < 0x11a59) return true\n if (cp < 0x11a59) return false\n if (cp < 0x11a5c) return true\n if (cp < 0x11a8a) return false\n if (cp < 0x11a97) return true\n return false\n }\n if (cp === 0x11a97) return true\n if (cp < 0x11a98) return false\n if (cp < 0x11a9a) return true\n if (cp === 0x11c2f) return true\n if (cp < 0x11c30) return false\n if (cp < 0x11c37) return true\n if (cp < 0x11c38) return false\n if (cp < 0x11c3e) return true\n if (cp === 0x11c3e) return true\n if (cp === 0x11c3f) return true\n if (cp < 0x11c50) return false\n if (cp < 0x11c5a) return true\n if (cp < 0x11c92) return false\n if (cp < 0x11ca8) return true\n return false\n }\n if (cp < 0x11d3c) {\n if (cp === 0x11ca9) return true\n if (cp < 0x11caa) return false\n if (cp < 0x11cb1) return true\n if (cp === 0x11cb1) return true\n if (cp < 0x11cb2) return false\n if (cp < 0x11cb4) return true\n if (cp === 0x11cb4) return true\n if (cp < 0x11cb5) return false\n if (cp < 0x11cb7) return true\n if (cp < 0x11d31) return false\n if (cp < 0x11d37) return true\n if (cp === 0x11d3a) return true\n return false\n }\n if (cp < 0x11d3e) return true\n if (cp < 0x11d3f) return false\n if (cp < 0x11d46) return true\n if (cp === 0x11d47) return true\n if (cp < 0x11d50) return false\n if (cp < 0x11d5a) return true\n if (cp < 0x11d8a) return false\n if (cp < 0x11d8f) return true\n if (cp < 0x11d90) return false\n if (cp < 0x11d92) return true\n if (cp < 0x11d93) return false\n if (cp < 0x11d95) return true\n if (cp === 0x11d95) return true\n if (cp === 0x11d96) return true\n return false\n }\n if (cp < 0x1d242) {\n if (cp < 0x16f51) {\n if (cp === 0x11d97) return true\n if (cp < 0x11da0) return false\n if (cp < 0x11daa) return true\n if (cp < 0x11ef3) return false\n if (cp < 0x11ef5) return true\n if (cp < 0x11ef5) return false\n if (cp < 0x11ef7) return true\n if (cp < 0x16a60) return false\n if (cp < 0x16a6a) return true\n if (cp < 0x16af0) return false\n if (cp < 0x16af5) return true\n if (cp < 0x16b30) return false\n if (cp < 0x16b37) return true\n if (cp < 0x16b50) return false\n if (cp < 0x16b5a) return true\n return false\n }\n if (cp < 0x16f7f) return true\n if (cp < 0x16f8f) return false\n if (cp < 0x16f93) return true\n if (cp < 0x1bc9d) return false\n if (cp < 0x1bc9f) return true\n if (cp < 0x1d165) return false\n if (cp < 0x1d167) return true\n if (cp < 0x1d167) return false\n if (cp < 0x1d16a) return true\n if (cp < 0x1d16d) return false\n if (cp < 0x1d173) return true\n if (cp < 0x1d17b) return false\n if (cp < 0x1d183) return true\n if (cp < 0x1d185) return false\n if (cp < 0x1d18c) return true\n if (cp < 0x1d1aa) return false\n if (cp < 0x1d1ae) return true\n return false\n }\n if (cp < 0x1e000) {\n if (cp < 0x1d242) return false\n if (cp < 0x1d245) return true\n if (cp < 0x1d7ce) return false\n if (cp < 0x1d800) return true\n if (cp < 0x1da00) return false\n if (cp < 0x1da37) return true\n if (cp < 0x1da3b) return false\n if (cp < 0x1da6d) return true\n if (cp === 0x1da75) return true\n if (cp === 0x1da84) return true\n if (cp < 0x1da9b) return false\n if (cp < 0x1daa0) return true\n if (cp < 0x1daa1) return false\n if (cp < 0x1dab0) return true\n return false\n }\n if (cp < 0x1e007) return true\n if (cp < 0x1e008) return false\n if (cp < 0x1e019) return true\n if (cp < 0x1e01b) return false\n if (cp < 0x1e022) return true\n if (cp < 0x1e023) return false\n if (cp < 0x1e025) return true\n if (cp < 0x1e026) return false\n if (cp < 0x1e02b) return true\n if (cp < 0x1e8d0) return false\n if (cp < 0x1e8d7) return true\n if (cp < 0x1e944) return false\n if (cp < 0x1e94b) return true\n if (cp < 0x1e950) return false\n if (cp < 0x1e95a) return true\n if (cp < 0xe0100) return false\n if (cp < 0xe01f0) return true\n return false\n}\n","const PropertyData: Object & { [key: string]: Set } = {\n $LONE: new Set([\n \"ASCII\",\n \"ASCII_Hex_Digit\",\n \"AHex\",\n \"Alphabetic\",\n \"Alpha\",\n \"Any\",\n \"Assigned\",\n \"Bidi_Control\",\n \"Bidi_C\",\n \"Bidi_Mirrored\",\n \"Bidi_M\",\n \"Case_Ignorable\",\n \"CI\",\n \"Cased\",\n \"Changes_When_Casefolded\",\n \"CWCF\",\n \"Changes_When_Casemapped\",\n \"CWCM\",\n \"Changes_When_Lowercased\",\n \"CWL\",\n \"Changes_When_NFKC_Casefolded\",\n \"CWKCF\",\n \"Changes_When_Titlecased\",\n \"CWT\",\n \"Changes_When_Uppercased\",\n \"CWU\",\n \"Dash\",\n \"Default_Ignorable_Code_Point\",\n \"DI\",\n \"Deprecated\",\n \"Dep\",\n \"Diacritic\",\n \"Dia\",\n \"Emoji\",\n \"Emoji_Component\",\n \"Emoji_Modifier\",\n \"Emoji_Modifier_Base\",\n \"Emoji_Presentation\",\n \"Extender\",\n \"Ext\",\n \"Grapheme_Base\",\n \"Gr_Base\",\n \"Grapheme_Extend\",\n \"Gr_Ext\",\n \"Hex_Digit\",\n \"Hex\",\n \"IDS_Binary_Operator\",\n \"IDSB\",\n \"IDS_Trinary_Operator\",\n \"IDST\",\n \"ID_Continue\",\n \"IDC\",\n \"ID_Start\",\n \"IDS\",\n \"Ideographic\",\n \"Ideo\",\n \"Join_Control\",\n \"Join_C\",\n \"Logical_Order_Exception\",\n \"LOE\",\n \"Lowercase\",\n \"Lower\",\n \"Math\",\n \"Noncharacter_Code_Point\",\n \"NChar\",\n \"Pattern_Syntax\",\n \"Pat_Syn\",\n \"Pattern_White_Space\",\n \"Pat_WS\",\n \"Quotation_Mark\",\n \"QMark\",\n \"Radical\",\n \"Regional_Indicator\",\n \"RI\",\n \"Sentence_Terminal\",\n \"STerm\",\n \"Soft_Dotted\",\n \"SD\",\n \"Terminal_Punctuation\",\n \"Term\",\n \"Unified_Ideograph\",\n \"UIdeo\",\n \"Uppercase\",\n \"Upper\",\n \"Variation_Selector\",\n \"VS\",\n \"White_Space\",\n \"space\",\n \"XID_Continue\",\n \"XIDC\",\n \"XID_Start\",\n \"XIDS\",\n ]),\n General_Category: new Set([\n \"Cased_Letter\",\n \"LC\",\n \"Close_Punctuation\",\n \"Pe\",\n \"Connector_Punctuation\",\n \"Pc\",\n \"Control\",\n \"Cc\",\n \"cntrl\",\n \"Currency_Symbol\",\n \"Sc\",\n \"Dash_Punctuation\",\n \"Pd\",\n \"Decimal_Number\",\n \"Nd\",\n \"digit\",\n \"Enclosing_Mark\",\n \"Me\",\n \"Final_Punctuation\",\n \"Pf\",\n \"Format\",\n \"Cf\",\n \"Initial_Punctuation\",\n \"Pi\",\n \"Letter\",\n \"L\",\n \"Letter_Number\",\n \"Nl\",\n \"Line_Separator\",\n \"Zl\",\n \"Lowercase_Letter\",\n \"Ll\",\n \"Mark\",\n \"M\",\n \"Combining_Mark\",\n \"Math_Symbol\",\n \"Sm\",\n \"Modifier_Letter\",\n \"Lm\",\n \"Modifier_Symbol\",\n \"Sk\",\n \"Nonspacing_Mark\",\n \"Mn\",\n \"Number\",\n \"N\",\n \"Open_Punctuation\",\n \"Ps\",\n \"Other\",\n \"C\",\n \"Other_Letter\",\n \"Lo\",\n \"Other_Number\",\n \"No\",\n \"Other_Punctuation\",\n \"Po\",\n \"Other_Symbol\",\n \"So\",\n \"Paragraph_Separator\",\n \"Zp\",\n \"Private_Use\",\n \"Co\",\n \"Punctuation\",\n \"P\",\n \"punct\",\n \"Separator\",\n \"Z\",\n \"Space_Separator\",\n \"Zs\",\n \"Spacing_Mark\",\n \"Mc\",\n \"Surrogate\",\n \"Cs\",\n \"Symbol\",\n \"S\",\n \"Titlecase_Letter\",\n \"Lt\",\n \"Unassigned\",\n \"Cn\",\n \"Uppercase_Letter\",\n \"Lu\",\n ]),\n Script: new Set([\n \"Adlam\",\n \"Adlm\",\n \"Ahom\",\n \"Anatolian_Hieroglyphs\",\n \"Hluw\",\n \"Arabic\",\n \"Arab\",\n \"Armenian\",\n \"Armn\",\n \"Avestan\",\n \"Avst\",\n \"Balinese\",\n \"Bali\",\n \"Bamum\",\n \"Bamu\",\n \"Bassa_Vah\",\n \"Bass\",\n \"Batak\",\n \"Batk\",\n \"Bengali\",\n \"Beng\",\n \"Bhaiksuki\",\n \"Bhks\",\n \"Bopomofo\",\n \"Bopo\",\n \"Brahmi\",\n \"Brah\",\n \"Braille\",\n \"Brai\",\n \"Buginese\",\n \"Bugi\",\n \"Buhid\",\n \"Buhd\",\n \"Canadian_Aboriginal\",\n \"Cans\",\n \"Carian\",\n \"Cari\",\n \"Caucasian_Albanian\",\n \"Aghb\",\n \"Chakma\",\n \"Cakm\",\n \"Cham\",\n \"Cherokee\",\n \"Cher\",\n \"Common\",\n \"Zyyy\",\n \"Coptic\",\n \"Copt\",\n \"Qaac\",\n \"Cuneiform\",\n \"Xsux\",\n \"Cypriot\",\n \"Cprt\",\n \"Cyrillic\",\n \"Cyrl\",\n \"Deseret\",\n \"Dsrt\",\n \"Devanagari\",\n \"Deva\",\n \"Duployan\",\n \"Dupl\",\n \"Egyptian_Hieroglyphs\",\n \"Egyp\",\n \"Elbasan\",\n \"Elba\",\n \"Ethiopic\",\n \"Ethi\",\n \"Georgian\",\n \"Geor\",\n \"Glagolitic\",\n \"Glag\",\n \"Gothic\",\n \"Goth\",\n \"Grantha\",\n \"Gran\",\n \"Greek\",\n \"Grek\",\n \"Gujarati\",\n \"Gujr\",\n \"Gurmukhi\",\n \"Guru\",\n \"Han\",\n \"Hani\",\n \"Hangul\",\n \"Hang\",\n \"Hanunoo\",\n \"Hano\",\n \"Hatran\",\n \"Hatr\",\n \"Hebrew\",\n \"Hebr\",\n \"Hiragana\",\n \"Hira\",\n \"Imperial_Aramaic\",\n \"Armi\",\n \"Inherited\",\n \"Zinh\",\n \"Qaai\",\n \"Inscriptional_Pahlavi\",\n \"Phli\",\n \"Inscriptional_Parthian\",\n \"Prti\",\n \"Javanese\",\n \"Java\",\n \"Kaithi\",\n \"Kthi\",\n \"Kannada\",\n \"Knda\",\n \"Katakana\",\n \"Kana\",\n \"Kayah_Li\",\n \"Kali\",\n \"Kharoshthi\",\n \"Khar\",\n \"Khmer\",\n \"Khmr\",\n \"Khojki\",\n \"Khoj\",\n \"Khudawadi\",\n \"Sind\",\n \"Lao\",\n \"Laoo\",\n \"Latin\",\n \"Latn\",\n \"Lepcha\",\n \"Lepc\",\n \"Limbu\",\n \"Limb\",\n \"Linear_A\",\n \"Lina\",\n \"Linear_B\",\n \"Linb\",\n \"Lisu\",\n \"Lycian\",\n \"Lyci\",\n \"Lydian\",\n \"Lydi\",\n \"Mahajani\",\n \"Mahj\",\n \"Malayalam\",\n \"Mlym\",\n \"Mandaic\",\n \"Mand\",\n \"Manichaean\",\n \"Mani\",\n \"Marchen\",\n \"Marc\",\n \"Masaram_Gondi\",\n \"Gonm\",\n \"Meetei_Mayek\",\n \"Mtei\",\n \"Mende_Kikakui\",\n \"Mend\",\n \"Meroitic_Cursive\",\n \"Merc\",\n \"Meroitic_Hieroglyphs\",\n \"Mero\",\n \"Miao\",\n \"Plrd\",\n \"Modi\",\n \"Mongolian\",\n \"Mong\",\n \"Mro\",\n \"Mroo\",\n \"Multani\",\n \"Mult\",\n \"Myanmar\",\n \"Mymr\",\n \"Nabataean\",\n \"Nbat\",\n \"New_Tai_Lue\",\n \"Talu\",\n \"Newa\",\n \"Nko\",\n \"Nkoo\",\n \"Nushu\",\n \"Nshu\",\n \"Ogham\",\n \"Ogam\",\n \"Ol_Chiki\",\n \"Olck\",\n \"Old_Hungarian\",\n \"Hung\",\n \"Old_Italic\",\n \"Ital\",\n \"Old_North_Arabian\",\n \"Narb\",\n \"Old_Permic\",\n \"Perm\",\n \"Old_Persian\",\n \"Xpeo\",\n \"Old_South_Arabian\",\n \"Sarb\",\n \"Old_Turkic\",\n \"Orkh\",\n \"Oriya\",\n \"Orya\",\n \"Osage\",\n \"Osge\",\n \"Osmanya\",\n \"Osma\",\n \"Pahawh_Hmong\",\n \"Hmng\",\n \"Palmyrene\",\n \"Palm\",\n \"Pau_Cin_Hau\",\n \"Pauc\",\n \"Phags_Pa\",\n \"Phag\",\n \"Phoenician\",\n \"Phnx\",\n \"Psalter_Pahlavi\",\n \"Phlp\",\n \"Rejang\",\n \"Rjng\",\n \"Runic\",\n \"Runr\",\n \"Samaritan\",\n \"Samr\",\n \"Saurashtra\",\n \"Saur\",\n \"Sharada\",\n \"Shrd\",\n \"Shavian\",\n \"Shaw\",\n \"Siddham\",\n \"Sidd\",\n \"SignWriting\",\n \"Sgnw\",\n \"Sinhala\",\n \"Sinh\",\n \"Sora_Sompeng\",\n \"Sora\",\n \"Soyombo\",\n \"Soyo\",\n \"Sundanese\",\n \"Sund\",\n \"Syloti_Nagri\",\n \"Sylo\",\n \"Syriac\",\n \"Syrc\",\n \"Tagalog\",\n \"Tglg\",\n \"Tagbanwa\",\n \"Tagb\",\n \"Tai_Le\",\n \"Tale\",\n \"Tai_Tham\",\n \"Lana\",\n \"Tai_Viet\",\n \"Tavt\",\n \"Takri\",\n \"Takr\",\n \"Tamil\",\n \"Taml\",\n \"Tangut\",\n \"Tang\",\n \"Telugu\",\n \"Telu\",\n \"Thaana\",\n \"Thaa\",\n \"Thai\",\n \"Tibetan\",\n \"Tibt\",\n \"Tifinagh\",\n \"Tfng\",\n \"Tirhuta\",\n \"Tirh\",\n \"Ugaritic\",\n \"Ugar\",\n \"Vai\",\n \"Vaii\",\n \"Warang_Citi\",\n \"Wara\",\n \"Yi\",\n \"Yiii\",\n \"Zanabazar_Square\",\n \"Zanb\",\n ]),\n}\n\nPropertyData.gc = PropertyData.General_Category\nPropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =\n PropertyData.Script\n\nexport { PropertyData }\n","export { isIdContinue, isIdStart } from \"./ids\"\nexport { PropertyData } from \"./property-data\"\n\nexport const Null = 0x00\nexport const Backspace = 0x08\nexport const CharacterTabulation = 0x09\nexport const LineFeed = 0x0a\nexport const LineTabulation = 0x0b\nexport const FormFeed = 0x0c\nexport const CarriageReturn = 0x0d\nexport const ExclamationMark = 0x21\nexport const DollarSign = 0x24\nexport const LeftParenthesis = 0x28\nexport const RightParenthesis = 0x29\nexport const Asterisk = 0x2a\nexport const PlusSign = 0x2b\nexport const Comma = 0x2c\nexport const HyphenMinus = 0x2d\nexport const FullStop = 0x2e\nexport const Solidus = 0x2f\nexport const DigitZero = 0x30\nexport const DigitOne = 0x31\nexport const DigitSeven = 0x37\nexport const DigitNine = 0x39\nexport const Colon = 0x3a\nexport const LessThanSign = 0x3c\nexport const EqualsSign = 0x3d\nexport const GreaterThanSign = 0x3e\nexport const QuestionMark = 0x3f\nexport const LatinCapitalLetterA = 0x41\nexport const LatinCapitalLetterB = 0x42\nexport const LatinCapitalLetterD = 0x44\nexport const LatinCapitalLetterF = 0x46\nexport const LatinCapitalLetterP = 0x50\nexport const LatinCapitalLetterS = 0x53\nexport const LatinCapitalLetterW = 0x57\nexport const LatinCapitalLetterZ = 0x5a\nexport const LowLine = 0x5f\nexport const LatinSmallLetterA = 0x61\nexport const LatinSmallLetterB = 0x62\nexport const LatinSmallLetterC = 0x63\nexport const LatinSmallLetterD = 0x64\nexport const LatinSmallLetterF = 0x66\nexport const LatinSmallLetterG = 0x67\nexport const LatinSmallLetterI = 0x69\nexport const LatinSmallLetterK = 0x6b\nexport const LatinSmallLetterM = 0x6d\nexport const LatinSmallLetterN = 0x6e\nexport const LatinSmallLetterP = 0x70\nexport const LatinSmallLetterR = 0x72\nexport const LatinSmallLetterS = 0x73\nexport const LatinSmallLetterT = 0x74\nexport const LatinSmallLetterU = 0x75\nexport const LatinSmallLetterV = 0x76\nexport const LatinSmallLetterW = 0x77\nexport const LatinSmallLetterX = 0x78\nexport const LatinSmallLetterY = 0x79\nexport const LatinSmallLetterZ = 0x7a\nexport const LeftSquareBracket = 0x5b\nexport const ReverseSolidus = 0x5c\nexport const RightSquareBracket = 0x5d\nexport const CircumflexAccent = 0x5e\nexport const LeftCurlyBracket = 0x7b\nexport const VerticalLine = 0x7c\nexport const RightCurlyBracket = 0x7d\nexport const ZeroWidthNonJoiner = 0x200c\nexport const ZeroWidthJoiner = 0x200d\nexport const LineSeparator = 0x2028\nexport const ParagraphSeparator = 0x2029\n\nexport const MinCodePoint = 0x00\nexport const MaxCodePoint = 0x10ffff\n\nexport function isLatinLetter(code: number): boolean {\n return (\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)\n )\n}\n\nexport function isDecimalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitNine\n}\n\nexport function isOctalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitSeven\n}\n\nexport function isHexDigit(code: number): boolean {\n return (\n (code >= DigitZero && code <= DigitNine) ||\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterF)\n )\n}\n\nexport function isLineTerminator(code: number): boolean {\n return (\n code === LineFeed ||\n code === CarriageReturn ||\n code === LineSeparator ||\n code === ParagraphSeparator\n )\n}\n\nexport function isValidUnicode(code: number): boolean {\n return code >= MinCodePoint && code <= MaxCodePoint\n}\n\nexport function digitToInt(code: number): number {\n if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n return code - LatinSmallLetterA + 10\n }\n if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n return code - LatinCapitalLetterA + 10\n }\n return code - DigitZero\n}\n","const legacyImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.charCodeAt(i) : -1\n },\n width(c: number): number {\n return 1\n },\n}\nconst unicodeImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.codePointAt(i)! : -1\n },\n width(c: number): number {\n return c > 0xffff ? 2 : 1\n },\n}\n\nexport class Reader {\n private _impl = legacyImpl\n private _s = \"\"\n private _i = 0\n private _end = 0\n private _cp1: number = -1\n private _w1 = 1\n private _cp2: number = -1\n private _w2 = 1\n private _cp3: number = -1\n private _w3 = 1\n private _cp4: number = -1\n\n public get source(): string {\n return this._s\n }\n\n public get index(): number {\n return this._i\n }\n\n public get currentCodePoint(): number {\n return this._cp1\n }\n\n public get nextCodePoint(): number {\n return this._cp2\n }\n\n public get nextCodePoint2(): number {\n return this._cp3\n }\n\n public get nextCodePoint3(): number {\n return this._cp4\n }\n\n public reset(\n source: string,\n start: number,\n end: number,\n uFlag: boolean,\n ): void {\n this._impl = uFlag ? unicodeImpl : legacyImpl\n this._s = source\n this._end = end\n this.rewind(start)\n }\n\n public rewind(index: number): void {\n const impl = this._impl\n this._i = index\n this._cp1 = impl.at(this._s, this._end, index)\n this._w1 = impl.width(this._cp1)\n this._cp2 = impl.at(this._s, this._end, index + this._w1)\n this._w2 = impl.width(this._cp2)\n this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2)\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n index + this._w1 + this._w2 + this._w3,\n )\n }\n\n public advance(): void {\n if (this._cp1 !== -1) {\n const impl = this._impl\n this._i += this._w1\n this._cp1 = this._cp2\n this._w1 = this._w2\n this._cp2 = this._cp3\n this._w2 = impl.width(this._cp2)\n this._cp3 = this._cp4\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n this._i + this._w1 + this._w2 + this._w3,\n )\n }\n }\n\n public eat(cp: number): boolean {\n if (this._cp1 === cp) {\n this.advance()\n return true\n }\n return false\n }\n\n public eat2(cp1: number, cp2: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2) {\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n\n public eat3(cp1: number, cp2: number, cp3: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n this.advance()\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n}\n","export class RegExpSyntaxError extends SyntaxError {\n public index: number\n public constructor(\n source: string,\n uFlag: boolean,\n index: number,\n message: string,\n ) {\n /*eslint-disable no-param-reassign */\n if (source) {\n if (source[0] !== \"/\") {\n source = `/${source}/${uFlag ? \"u\" : \"\"}`\n }\n source = `: ${source}`\n }\n /*eslint-enable no-param-reassign */\n\n super(`Invalid regular expression${source}: ${message}`)\n this.index = index\n }\n}\n","import { Reader } from \"./reader\"\nimport { RegExpSyntaxError } from \"./regexp-syntax-error\"\nimport {\n Asterisk,\n Backspace,\n CarriageReturn,\n CharacterTabulation,\n CircumflexAccent,\n Colon,\n Comma,\n DigitNine,\n DigitOne,\n digitToInt,\n DigitZero,\n DollarSign,\n EqualsSign,\n ExclamationMark,\n FormFeed,\n FullStop,\n GreaterThanSign,\n HyphenMinus,\n isDecimalDigit,\n isHexDigit,\n isIdContinue,\n isIdStart,\n isLatinLetter,\n isLineTerminator,\n isOctalDigit,\n isValidUnicode,\n LatinCapitalLetterB,\n LatinCapitalLetterD,\n LatinCapitalLetterP,\n LatinCapitalLetterS,\n LatinCapitalLetterW,\n LatinSmallLetterB,\n LatinSmallLetterC,\n LatinSmallLetterD,\n LatinSmallLetterF,\n LatinSmallLetterG,\n LatinSmallLetterI,\n LatinSmallLetterK,\n LatinSmallLetterM,\n LatinSmallLetterN,\n LatinSmallLetterP,\n LatinSmallLetterR,\n LatinSmallLetterS,\n LatinSmallLetterT,\n LatinSmallLetterU,\n LatinSmallLetterV,\n LatinSmallLetterW,\n LatinSmallLetterX,\n LatinSmallLetterY,\n LeftCurlyBracket,\n LeftParenthesis,\n LeftSquareBracket,\n LessThanSign,\n LineFeed,\n LineTabulation,\n LowLine,\n PlusSign,\n PropertyData,\n QuestionMark,\n ReverseSolidus,\n RightCurlyBracket,\n RightParenthesis,\n RightSquareBracket,\n Solidus,\n VerticalLine,\n ZeroWidthJoiner,\n ZeroWidthNonJoiner,\n} from \"./unicode\"\n\nfunction isSyntaxCharacter(cp: number): boolean {\n return (\n cp === CircumflexAccent ||\n cp === DollarSign ||\n cp === ReverseSolidus ||\n cp === FullStop ||\n cp === Asterisk ||\n cp === PlusSign ||\n cp === QuestionMark ||\n cp === LeftParenthesis ||\n cp === RightParenthesis ||\n cp === LeftSquareBracket ||\n cp === RightSquareBracket ||\n cp === LeftCurlyBracket ||\n cp === RightCurlyBracket ||\n cp === VerticalLine\n )\n}\n\nfunction isRegExpIdentifierStart(cp: number): boolean {\n return isIdStart(cp) || cp === DollarSign || cp === LowLine\n}\n\nfunction isRegExpIdentifierPart(cp: number): boolean {\n return (\n isIdContinue(cp) ||\n cp === DollarSign ||\n cp === LowLine ||\n cp === ZeroWidthNonJoiner ||\n cp === ZeroWidthJoiner\n )\n}\n\nfunction isUnicodePropertyNameCharacter(cp: number): boolean {\n return isLatinLetter(cp) || cp === LowLine\n}\n\nfunction isUnicodePropertyValueCharacter(cp: number): boolean {\n return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp)\n}\n\nfunction isValidUnicodeProperty(name: string, value: string): boolean {\n //eslint-disable-next-line no-prototype-builtins\n return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value)\n}\n\nfunction isValidUnicodePropertyName(name: string): boolean {\n return PropertyData.$LONE.has(name)\n}\n\nexport namespace RegExpValidator {\n /**\n * The options for RegExpValidator construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n\n /**\n * A function that is called when the validator entered a RegExp literal.\n * @param start The 0-based index of the first character.\n */\n onLiteralEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a RegExp literal.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onLiteralLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator found flags.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param global `g` flag.\n * @param ignoreCase `i` flag.\n * @param multiline `m` flag.\n * @param unicode `u` flag.\n * @param sticky `y` flag.\n * @param dotAll `s` flag.\n */\n onFlags?(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a pattern.\n * @param start The 0-based index of the first character.\n */\n onPatternEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a pattern.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onPatternLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a disjunction.\n * @param start The 0-based index of the first character.\n */\n onDisjunctionEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a disjunction.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onDisjunctionLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered an alternative.\n * @param start The 0-based index of the first character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeEnter?(start: number, index: number): void\n\n /**\n * A function that is called when the validator left an alternative.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeLeave?(start: number, end: number, index: number): void\n\n /**\n * A function that is called when the validator entered an uncapturing group.\n * @param start The 0-based index of the first character.\n */\n onGroupEnter?(start: number): void\n\n /**\n * A function that is called when the validator left an uncapturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onGroupLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a capturing group.\n * @param start The 0-based index of the first character.\n * @param name The group name.\n */\n onCapturingGroupEnter?(start: number, name: string | null): void\n\n /**\n * A function that is called when the validator left a capturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param name The group name.\n */\n onCapturingGroupLeave?(\n start: number,\n end: number,\n name: string | null,\n ): void\n\n /**\n * A function that is called when the validator found a quantifier.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum number of repeating.\n * @param max The maximum number of repeating.\n * @param greedy The flag to choose the longest matching.\n */\n onQuantifier?(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionEnter?(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator left a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionLeave?(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found an edge boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n */\n onEdgeAssertion?(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void\n\n /**\n * A function that is called when the validator found a word boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onWordBoundaryAssertion?(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a dot.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n */\n onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void\n\n /**\n * A function that is called when the validator found a character set escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param negate The flag which represents that the character set is negative.\n */\n onEscapeCharacterSet?(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a Unicode proerty escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param key The property name.\n * @param value The property value.\n * @param negate The flag which represents that the character set is negative.\n */\n onUnicodePropertyCharacterSet?(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param value The code point of the character.\n */\n onCharacter?(start: number, end: number, value: number): void\n\n /**\n * A function that is called when the validator found a backreference.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param ref The key of the referred capturing group.\n */\n onBackreference?(start: number, end: number, ref: number | string): void\n\n /**\n * A function that is called when the validator entered a character class.\n * @param start The 0-based index of the first character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassEnter?(start: number, negate: boolean): void\n\n /**\n * A function that is called when the validator left a character class.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassLeave?(\n start: number,\n end: number,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character class range.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum code point of the range.\n * @param max The maximum code point of the range.\n */\n onCharacterClassRange?(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void\n }\n}\n\n/**\n * The regular expression validator.\n */\nexport class RegExpValidator {\n private readonly _options: RegExpValidator.Options\n private readonly _reader = new Reader()\n private _uFlag = false\n private _nFlag = false\n private _lastIntValue = 0\n private _lastMinValue = 0\n private _lastMaxValue = 0\n private _lastStrValue = \"\"\n private _lastKeyValue = \"\"\n private _lastValValue = \"\"\n private _lastAssertionIsQuantifiable = false\n private _numCapturingParens = 0\n private _groupNames = new Set()\n private _backreferenceNames = new Set()\n\n /**\n * Initialize this validator.\n * @param options The options of validator.\n */\n public constructor(options?: RegExpValidator.Options) {\n this._options = options || {}\n }\n\n /**\n * Validate a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n this._uFlag = this._nFlag = false\n this.reset(source, start, end)\n\n this.onLiteralEnter(start)\n if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n const flagStart = this.index\n const uFlag = source.indexOf(\"u\", flagStart) !== -1\n this.validateFlags(source, flagStart, end)\n this.validatePattern(source, start + 1, flagStart - 1, uFlag)\n } else if (start >= end) {\n this.raise(\"Empty\")\n } else {\n const c = String.fromCodePoint(this.currentCodePoint)\n this.raise(`Unexpected character '${c}'`)\n }\n this.onLiteralLeave(start, end)\n }\n\n /**\n * Validate a regular expression flags. E.g. \"gim\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n const existingFlags = new Set()\n let global = false\n let ignoreCase = false\n let multiline = false\n let sticky = false\n let unicode = false\n let dotAll = false\n for (let i = start; i < end; ++i) {\n const flag = source.charCodeAt(i)\n\n if (existingFlags.has(flag)) {\n this.raise(`Duplicated flag '${source[i]}'`)\n }\n existingFlags.add(flag)\n\n if (flag === LatinSmallLetterG) {\n global = true\n } else if (flag === LatinSmallLetterI) {\n ignoreCase = true\n } else if (flag === LatinSmallLetterM) {\n multiline = true\n } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n unicode = true\n } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n sticky = true\n } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n dotAll = true\n } else {\n this.raise(`Invalid flag '${source[i]}'`)\n }\n }\n this.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n\n /**\n * Validate a regular expression pattern. E.g. \"abc\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n */\n public validatePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): void {\n this._uFlag = uFlag && this.ecmaVersion >= 2015\n this._nFlag = uFlag && this.ecmaVersion >= 2018\n this.reset(source, start, end)\n this.pattern()\n\n if (\n !this._nFlag &&\n this.ecmaVersion >= 2018 &&\n this._groupNames.size > 0\n ) {\n this._nFlag = true\n this.rewind(start)\n this.pattern()\n }\n }\n\n // #region Delegate for Options\n\n private get strict() {\n return Boolean(this._options.strict || this._uFlag)\n }\n\n private get ecmaVersion() {\n return this._options.ecmaVersion || 2018\n }\n\n private onLiteralEnter(start: number): void {\n if (this._options.onLiteralEnter) {\n this._options.onLiteralEnter(start)\n }\n }\n\n private onLiteralLeave(start: number, end: number): void {\n if (this._options.onLiteralLeave) {\n this._options.onLiteralLeave(start, end)\n }\n }\n\n private onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n if (this._options.onFlags) {\n this._options.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n }\n\n private onPatternEnter(start: number): void {\n if (this._options.onPatternEnter) {\n this._options.onPatternEnter(start)\n }\n }\n\n private onPatternLeave(start: number, end: number): void {\n if (this._options.onPatternLeave) {\n this._options.onPatternLeave(start, end)\n }\n }\n\n private onDisjunctionEnter(start: number): void {\n if (this._options.onDisjunctionEnter) {\n this._options.onDisjunctionEnter(start)\n }\n }\n\n private onDisjunctionLeave(start: number, end: number): void {\n if (this._options.onDisjunctionLeave) {\n this._options.onDisjunctionLeave(start, end)\n }\n }\n\n private onAlternativeEnter(start: number, index: number): void {\n if (this._options.onAlternativeEnter) {\n this._options.onAlternativeEnter(start, index)\n }\n }\n\n private onAlternativeLeave(\n start: number,\n end: number,\n index: number,\n ): void {\n if (this._options.onAlternativeLeave) {\n this._options.onAlternativeLeave(start, end, index)\n }\n }\n\n private onGroupEnter(start: number): void {\n if (this._options.onGroupEnter) {\n this._options.onGroupEnter(start)\n }\n }\n\n private onGroupLeave(start: number, end: number): void {\n if (this._options.onGroupLeave) {\n this._options.onGroupLeave(start, end)\n }\n }\n\n private onCapturingGroupEnter(start: number, name: string | null): void {\n if (this._options.onCapturingGroupEnter) {\n this._options.onCapturingGroupEnter(start, name)\n }\n }\n\n private onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n if (this._options.onCapturingGroupLeave) {\n this._options.onCapturingGroupLeave(start, end, name)\n }\n }\n\n private onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n if (this._options.onQuantifier) {\n this._options.onQuantifier(start, end, min, max, greedy)\n }\n }\n\n private onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionEnter) {\n this._options.onLookaroundAssertionEnter(start, kind, negate)\n }\n }\n\n private onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionLeave) {\n this._options.onLookaroundAssertionLeave(start, end, kind, negate)\n }\n }\n\n private onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n if (this._options.onEdgeAssertion) {\n this._options.onEdgeAssertion(start, end, kind)\n }\n }\n\n private onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n if (this._options.onWordBoundaryAssertion) {\n this._options.onWordBoundaryAssertion(start, end, kind, negate)\n }\n }\n\n private onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n if (this._options.onAnyCharacterSet) {\n this._options.onAnyCharacterSet(start, end, kind)\n }\n }\n\n private onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n if (this._options.onEscapeCharacterSet) {\n this._options.onEscapeCharacterSet(start, end, kind, negate)\n }\n }\n\n private onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n if (this._options.onUnicodePropertyCharacterSet) {\n this._options.onUnicodePropertyCharacterSet(\n start,\n end,\n kind,\n key,\n value,\n negate,\n )\n }\n }\n\n private onCharacter(start: number, end: number, value: number): void {\n if (this._options.onCharacter) {\n this._options.onCharacter(start, end, value)\n }\n }\n\n private onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n if (this._options.onBackreference) {\n this._options.onBackreference(start, end, ref)\n }\n }\n\n private onCharacterClassEnter(start: number, negate: boolean): void {\n if (this._options.onCharacterClassEnter) {\n this._options.onCharacterClassEnter(start, negate)\n }\n }\n\n private onCharacterClassLeave(\n start: number,\n end: number,\n negate: boolean,\n ): void {\n if (this._options.onCharacterClassLeave) {\n this._options.onCharacterClassLeave(start, end, negate)\n }\n }\n\n private onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n if (this._options.onCharacterClassRange) {\n this._options.onCharacterClassRange(start, end, min, max)\n }\n }\n\n // #endregion\n\n // #region Delegate for Reader\n\n private get source(): string {\n return this._reader.source\n }\n\n private get index(): number {\n return this._reader.index\n }\n\n private get currentCodePoint(): number {\n return this._reader.currentCodePoint\n }\n\n private get nextCodePoint(): number {\n return this._reader.nextCodePoint\n }\n\n private get nextCodePoint2(): number {\n return this._reader.nextCodePoint2\n }\n\n private get nextCodePoint3(): number {\n return this._reader.nextCodePoint3\n }\n\n private reset(source: string, start: number, end: number): void {\n this._reader.reset(source, start, end, this._uFlag)\n }\n\n private rewind(index: number): void {\n this._reader.rewind(index)\n }\n\n private advance(): void {\n this._reader.advance()\n }\n\n private eat(cp: number): boolean {\n return this._reader.eat(cp)\n }\n\n private eat2(cp1: number, cp2: number): boolean {\n return this._reader.eat2(cp1, cp2)\n }\n\n private eat3(cp1: number, cp2: number, cp3: number): boolean {\n return this._reader.eat3(cp1, cp2, cp3)\n }\n\n // #endregion\n\n private raise(message: string): never {\n throw new RegExpSyntaxError(\n this.source,\n this._uFlag,\n this.index,\n message,\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegularExpressionBody\n private eatRegExpBody(): boolean {\n const start = this.index\n let inClass = false\n let escaped = false\n\n for (;;) {\n const cp = this.currentCodePoint\n if (cp === -1 || isLineTerminator(cp)) {\n const kind = inClass ? \"character class\" : \"regular expression\"\n this.raise(`Unterminated ${kind}`)\n }\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n (cp === Solidus && !inClass) ||\n (cp === Asterisk && this.index === start)\n ) {\n break\n }\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n private pattern(): void {\n const start = this.index\n this._numCapturingParens = this.countCapturingParens()\n this._groupNames.clear()\n this._backreferenceNames.clear()\n\n this.onPatternEnter(start)\n this.disjunction()\n\n const cp = this.currentCodePoint\n if (this.currentCodePoint !== -1) {\n if (cp === RightParenthesis) {\n this.raise(\"Unmatched ')'\")\n }\n if (cp === ReverseSolidus) {\n this.raise(\"\\\\ at end of pattern\")\n }\n if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n this.raise(\"Lone quantifier brackets\")\n }\n const c = String.fromCodePoint(cp)\n this.raise(`Unexpected character '${c}'`)\n }\n for (const name of this._backreferenceNames) {\n if (!this._groupNames.has(name)) {\n this.raise(\"Invalid named capture referenced\")\n }\n }\n this.onPatternLeave(start, this.index)\n }\n\n private countCapturingParens(): number {\n const start = this.index\n let inClass = false\n let escaped = false\n let count = 0\n let cp = 0\n\n while ((cp = this.currentCodePoint) !== -1) {\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n cp === LeftParenthesis &&\n !inClass &&\n (this.nextCodePoint !== QuestionMark ||\n (this.nextCodePoint2 === LessThanSign &&\n this.nextCodePoint3 !== EqualsSign &&\n this.nextCodePoint3 !== ExclamationMark))\n ) {\n count += 1\n }\n this.advance()\n }\n\n this.rewind(start)\n return count\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n private disjunction(): void {\n const start = this.index\n let i = 0\n\n this.onDisjunctionEnter(start)\n this.alternative(i++)\n while (this.eat(VerticalLine)) {\n this.alternative(i++)\n }\n\n if (this.eatQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n if (this.eat(LeftCurlyBracket)) {\n this.raise(\"Lone quantifier brackets\")\n }\n this.onDisjunctionLeave(start, this.index)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n private alternative(i: number): void {\n const start = this.index\n\n this.onAlternativeEnter(start, i)\n while (this.currentCodePoint !== -1 && this.eatTerm()) {\n // do nothing.\n }\n this.onAlternativeLeave(start, this.index, i)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Term\n private eatTerm(): boolean {\n if (this.eatAssertion()) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `this.lastAssertionIsQuantifiable` is true if the last eaten\n // Assertion is a QuantifiableAssertion.\n if (this._lastAssertionIsQuantifiable) {\n this.eatQuantifier()\n }\n return true\n }\n\n if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {\n this.eatQuantifier()\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Assertion\n private eatAssertion(): boolean {\n const start = this.index\n this._lastAssertionIsQuantifiable = false\n\n // ^, $, \\B \\b\n if (this.eat(CircumflexAccent)) {\n this.onEdgeAssertion(start, this.index, \"start\")\n return true\n }\n if (this.eat(DollarSign)) {\n this.onEdgeAssertion(start, this.index, \"end\")\n return true\n }\n if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", true)\n return true\n }\n if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", false)\n return true\n }\n\n // Lookahead / Lookbehind\n if (this.eat2(LeftParenthesis, QuestionMark)) {\n const lookbehind =\n this.ecmaVersion >= 2018 && this.eat(LessThanSign)\n let negate = false\n if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n const kind = lookbehind ? \"lookbehind\" : \"lookahead\"\n this.onLookaroundAssertionEnter(start, kind, negate)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this._lastAssertionIsQuantifiable = !lookbehind && !this.strict\n this.onLookaroundAssertionLeave(start, this.index, kind, negate)\n return true\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n private eatQuantifier(noError = false): boolean {\n const start = this.index\n let min = 0\n let max = 0\n let greedy = false\n\n if (this.eat(Asterisk)) {\n min = 0\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(PlusSign)) {\n min = 1\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(QuestionMark)) {\n min = 0\n max = 1\n } else if (this.eatBracedQuantifier(noError)) {\n min = this._lastMinValue\n max = this._lastMaxValue\n } else {\n return false\n }\n greedy = !this.eat(QuestionMark)\n\n if (!noError) {\n this.onQuantifier(start, this.index, min, max, greedy)\n }\n return true\n }\n\n private eatBracedQuantifier(noError: boolean): boolean {\n const start = this.index\n if (this.eat(LeftCurlyBracket)) {\n this._lastMinValue = 0\n this._lastMaxValue = Number.POSITIVE_INFINITY\n if (this.eatDecimalDigits()) {\n this._lastMinValue = this._lastMaxValue = this._lastIntValue\n if (this.eat(Comma)) {\n this._lastMaxValue = this.eatDecimalDigits()\n ? this._lastIntValue\n : Number.POSITIVE_INFINITY\n }\n if (this.eat(RightCurlyBracket)) {\n if (!noError && this._lastMaxValue < this._lastMinValue) {\n this.raise(\"numbers out of order in {} quantifier\")\n }\n return true\n }\n }\n if (!noError && this.strict) {\n this.raise(\"Incomplete quantifier\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n private eatAtom(): boolean {\n return (\n this.eatPatternCharacter() ||\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup()\n )\n }\n\n private eatDot(): boolean {\n if (this.eat(FullStop)) {\n this.onAnyCharacterSet(this.index - 1, this.index, \"any\")\n return true\n }\n return false\n }\n\n private eatReverseSolidusAtomEscape(): boolean {\n const start = this.index\n if (this.eat(ReverseSolidus)) {\n if (this.eatAtomEscape()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatUncapturingGroup(): boolean {\n const start = this.index\n if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n this.onGroupEnter(start)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onGroupLeave(start, this.index)\n return true\n }\n return false\n }\n\n private eatCapturingGroup(): boolean {\n const start = this.index\n if (this.eat(LeftParenthesis)) {\n this._lastStrValue = \"\"\n if (this.ecmaVersion >= 2018) {\n this.groupSpecifier()\n } else if (this.currentCodePoint === QuestionMark) {\n this.raise(\"Invalid group\")\n }\n const name = this._lastStrValue || null\n\n this.onCapturingGroupEnter(start, name)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onCapturingGroupLeave(start, this.index, name)\n\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedAtom\n private eatExtendedAtom(): boolean {\n return (\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatReverseSolidusFollowedByC() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup() ||\n this.eatInvalidBracedQuantifier() ||\n this.eatExtendedPatternCharacter()\n )\n }\n\n // \\ [lookahead = c]\n private eatReverseSolidusFollowedByC(): boolean {\n if (\n this.currentCodePoint === ReverseSolidus &&\n this.nextCodePoint === LatinSmallLetterC\n ) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n this.onCharacter(this.index - 1, this.index, ReverseSolidus)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-InvalidBracedQuantifier\n private eatInvalidBracedQuantifier(): boolean {\n if (this.eatBracedQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n private eatSyntaxCharacter(): boolean {\n if (isSyntaxCharacter(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n private eatPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (cp !== -1 && !isSyntaxCharacter(cp)) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedPatternCharacter\n private eatExtendedPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (\n cp !== -1 &&\n cp !== CircumflexAccent &&\n cp !== DollarSign &&\n cp !== ReverseSolidus &&\n cp !== FullStop &&\n cp !== Asterisk &&\n cp !== PlusSign &&\n cp !== QuestionMark &&\n cp !== LeftParenthesis &&\n cp !== RightParenthesis &&\n cp !== LeftSquareBracket &&\n cp !== VerticalLine\n ) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // GroupSpecifier[U] ::\n // [empty]\n // `?` GroupName[?U]\n private groupSpecifier(): void {\n this._lastStrValue = \"\"\n if (this.eat(QuestionMark)) {\n if (this.eatGroupName()) {\n if (!this._groupNames.has(this._lastStrValue)) {\n this._groupNames.add(this._lastStrValue)\n return\n }\n this.raise(\"Duplicate capture group name\")\n }\n this.raise(\"Invalid group\")\n }\n }\n\n // GroupName[U] ::\n // `<` RegExpIdentifierName[?U] `>`\n private eatGroupName(): boolean {\n this._lastStrValue = \"\"\n if (this.eat(LessThanSign)) {\n if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n return true\n }\n this.raise(\"Invalid capture group name\")\n }\n return false\n }\n\n // RegExpIdentifierName[U] ::\n // RegExpIdentifierStart[?U]\n // RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n private eatRegExpIdentifierName(): boolean {\n this._lastStrValue = \"\"\n if (this.eatRegExpIdentifierStart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n while (this.eatRegExpIdentifierPart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n }\n return true\n }\n return false\n }\n\n // RegExpIdentifierStart[U] ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n private eatRegExpIdentifierStart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierStart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // RegExpIdentifierPart[U] ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n // \n // \n private eatRegExpIdentifierPart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierPart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-AtomEscape\n private eatAtomEscape(): boolean {\n if (\n this.eatBackreference() ||\n this.eatCharacterClassEscape() ||\n this.eatCharacterEscape() ||\n (this._nFlag && this.eatKGroupName())\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n return false\n }\n\n private eatBackreference(): boolean {\n const start = this.index\n if (this.eatDecimalEscape()) {\n const n = this._lastIntValue\n if (n <= this._numCapturingParens) {\n this.onBackreference(start - 1, this.index, n)\n return true\n }\n if (this.strict) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatKGroupName(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterK)) {\n if (this.eatGroupName()) {\n const groupName = this._lastStrValue\n this._backreferenceNames.add(groupName)\n this.onBackreference(start - 1, this.index, groupName)\n return true\n }\n this.raise(\"Invalid named reference\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-CharacterEscape\n private eatCharacterEscape(): boolean {\n const start = this.index\n if (\n this.eatControlEscape() ||\n this.eatCControlLetter() ||\n this.eatZero() ||\n this.eatHexEscapeSequence() ||\n this.eatRegExpUnicodeEscapeSequence() ||\n (!this.strict && this.eatLegacyOctalEscapeSequence()) ||\n this.eatIdentityEscape()\n ) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n return false\n }\n\n private eatCControlLetter(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterC)) {\n if (this.eatControlLetter()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatZero(): boolean {\n if (\n this.currentCodePoint === DigitZero &&\n !isDecimalDigit(this.nextCodePoint)\n ) {\n this._lastIntValue = 0\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n private eatControlEscape(): boolean {\n if (this.eat(LatinSmallLetterT)) {\n this._lastIntValue = CharacterTabulation\n return true\n }\n if (this.eat(LatinSmallLetterN)) {\n this._lastIntValue = LineFeed\n return true\n }\n if (this.eat(LatinSmallLetterV)) {\n this._lastIntValue = LineTabulation\n return true\n }\n if (this.eat(LatinSmallLetterF)) {\n this._lastIntValue = FormFeed\n return true\n }\n if (this.eat(LatinSmallLetterR)) {\n this._lastIntValue = CarriageReturn\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n private eatControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isLatinLetter(cp)) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n //eslint-disable-next-line complexity\n private eatRegExpUnicodeEscapeSequence(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterU)) {\n if (this.eatFixedHexDigits(4)) {\n const lead = this._lastIntValue\n if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {\n const leadSurrogateEnd = this.index\n if (\n this.eat(ReverseSolidus) &&\n this.eat(LatinSmallLetterU) &&\n this.eatFixedHexDigits(4)\n ) {\n const trail = this._lastIntValue\n if (trail >= 0xdc00 && trail <= 0xdfff) {\n this._lastIntValue =\n (lead - 0xd800) * 0x400 +\n (trail - 0xdc00) +\n 0x10000\n return true\n }\n }\n this.rewind(leadSurrogateEnd)\n this._lastIntValue = lead\n }\n return true\n }\n if (\n this._uFlag &&\n this.eat(LeftCurlyBracket) &&\n this.eatHexDigits() &&\n this.eat(RightCurlyBracket) &&\n isValidUnicode(this._lastIntValue)\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid unicode escape\")\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-IdentityEscape\n private eatIdentityEscape(): boolean {\n if (this._uFlag) {\n if (this.eatSyntaxCharacter()) {\n return true\n }\n if (this.eat(Solidus)) {\n this._lastIntValue = Solidus\n return true\n }\n return false\n }\n\n if (this.isValidIdentityEscape(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n\n return false\n }\n private isValidIdentityEscape(cp: number): boolean {\n if (cp === -1) {\n return false\n }\n if (this.strict) {\n return !isIdContinue(cp)\n }\n return (\n cp !== LatinSmallLetterC &&\n (!this._nFlag || cp !== LatinSmallLetterK)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n private eatDecimalEscape(): boolean {\n this._lastIntValue = 0\n let cp = this.currentCodePoint\n if (cp >= DigitOne && cp <= DigitNine) {\n do {\n this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero)\n this.advance()\n } while (\n (cp = this.currentCodePoint) >= DigitZero &&\n cp <= DigitNine\n )\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n private eatCharacterClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true)\n return true\n }\n if (this.eat(LatinSmallLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", true)\n return true\n }\n if (this.eat(LatinSmallLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", true)\n return true\n }\n\n let negate = false\n if (\n this._uFlag &&\n this.ecmaVersion >= 2018 &&\n (this.eat(LatinSmallLetterP) ||\n (negate = this.eat(LatinCapitalLetterP)))\n ) {\n this._lastIntValue = -1\n if (\n this.eat(LeftCurlyBracket) &&\n this.eatUnicodePropertyValueExpression() &&\n this.eat(RightCurlyBracket)\n ) {\n this.onUnicodePropertyCharacterSet(\n start - 1,\n this.index,\n \"property\",\n this._lastKeyValue,\n this._lastValValue || null,\n negate,\n )\n return true\n }\n this.raise(\"Invalid property name\")\n }\n\n return false\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n private eatUnicodePropertyValueExpression(): boolean {\n const start = this.index\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n this._lastKeyValue = this._lastStrValue\n if (this.eatUnicodePropertyValue()) {\n this._lastValValue = this._lastStrValue\n if (\n isValidUnicodeProperty(\n this._lastKeyValue,\n this._lastValValue,\n )\n ) {\n return true\n }\n this.raise(\"Invalid property name\")\n }\n }\n this.rewind(start)\n\n // LoneUnicodePropertyNameOrValue\n if (this.eatLoneUnicodePropertyNameOrValue()) {\n const nameOrValue = this._lastStrValue\n if (isValidUnicodeProperty(\"General_Category\", nameOrValue)) {\n this._lastKeyValue = \"General_Category\"\n this._lastValValue = nameOrValue\n return true\n }\n if (isValidUnicodePropertyName(nameOrValue)) {\n this._lastKeyValue = nameOrValue\n this._lastValValue = \"\"\n return true\n }\n this.raise(\"Invalid property name\")\n }\n return false\n }\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n private eatUnicodePropertyName(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n private eatUnicodePropertyValue(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n private eatLoneUnicodePropertyNameOrValue(): boolean {\n return this.eatUnicodePropertyValue()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n private eatCharacterClass(): boolean {\n const start = this.index\n if (this.eat(LeftSquareBracket)) {\n const negate = this.eat(CircumflexAccent)\n this.onCharacterClassEnter(start, negate)\n this.classRanges()\n if (!this.eat(RightSquareBracket)) {\n this.raise(\"Unterminated character class\")\n }\n this.onCharacterClassLeave(start, this.index, negate)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n private classRanges(): void {\n let start = this.index\n while (this.eatClassAtom()) {\n const left = this._lastIntValue\n const hyphenStart = this.index\n if (this.eat(HyphenMinus)) {\n this.onCharacter(hyphenStart, this.index, HyphenMinus)\n\n if (this.eatClassAtom()) {\n const right = this._lastIntValue\n\n if (left === -1 || right === -1) {\n if (this.strict) {\n this.raise(\"Invalid character class\")\n }\n } else if (left > right) {\n this.raise(\"Range out of order in character class\")\n } else {\n this.onCharacterClassRange(\n start,\n this.index,\n left,\n right,\n )\n }\n }\n }\n\n start = this.index\n }\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n private eatClassAtom(): boolean {\n const start = this.index\n\n if (this.eat(ReverseSolidus)) {\n if (this.eatClassEscape()) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n\n const cp = this.currentCodePoint\n if (cp !== -1 && cp !== RightSquareBracket) {\n this.advance()\n this._lastIntValue = cp\n this.onCharacter(start, this.index, cp)\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassEscape\n private eatClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterB)) {\n this._lastIntValue = Backspace\n this.onCharacter(start - 1, this.index, Backspace)\n return true\n }\n\n if (this._uFlag && this.eat(HyphenMinus)) {\n this._lastIntValue = HyphenMinus\n this.onCharacter(start - 1, this.index, HyphenMinus)\n return true\n }\n\n if (!this._uFlag && this.eat(LatinSmallLetterC)) {\n if (this.eatClassControlLetter()) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n this.rewind(start)\n }\n\n return this.eatCharacterClassEscape() || this.eatCharacterEscape()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassControlLetter\n private eatClassControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isDecimalDigit(cp) || cp === LowLine) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatHexEscapeSequence(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterX)) {\n if (this.eatFixedHexDigits(2)) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n private eatDecimalDigits(): boolean {\n const start = this.index\n\n this._lastIntValue = 0\n while (isDecimalDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 10 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n private eatHexDigits(): boolean {\n const start = this.index\n this._lastIntValue = 0\n while (isHexDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 16 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n private eatLegacyOctalEscapeSequence(): boolean {\n if (this.eatOctalDigit()) {\n const n1 = this._lastIntValue\n if (this.eatOctalDigit()) {\n const n2 = this._lastIntValue\n if (n1 <= 3 && this.eatOctalDigit()) {\n this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue\n } else {\n this._lastIntValue = n1 * 8 + n2\n }\n } else {\n this._lastIntValue = n1\n }\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n private eatOctalDigit(): boolean {\n const cp = this.currentCodePoint\n if (isOctalDigit(cp)) {\n this.advance()\n this._lastIntValue = cp - DigitZero\n return true\n }\n this._lastIntValue = 0\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatFixedHexDigits(length: number): boolean {\n const start = this.index\n this._lastIntValue = 0\n for (let i = 0; i < length; ++i) {\n const cp = this.currentCodePoint\n if (!isHexDigit(cp)) {\n this.rewind(start)\n return false\n }\n this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp)\n this.advance()\n }\n return true\n }\n}\n","import {\n Alternative,\n Backreference,\n CapturingGroup,\n CharacterClass,\n CharacterClassElement,\n CharacterClassRange,\n Flags,\n Group,\n RegExpLiteral,\n LookaroundAssertion,\n Pattern,\n Quantifier,\n} from \"./ast\"\nimport { HyphenMinus } from \"./unicode\"\nimport { RegExpValidator } from \"./validator\"\n\ntype AppendableNode =\n | Pattern\n | Alternative\n | Group\n | CapturingGroup\n | CharacterClass\n | LookaroundAssertion\n\nconst DummyPattern = {} as Pattern\nconst DummyFlags = {} as Flags\nconst DummyCapturingGroup = {} as CapturingGroup\n\nclass RegExpParserState {\n public readonly strict: boolean\n public readonly ecmaVersion: 5 | 2015 | 2016 | 2017 | 2018\n private _node: AppendableNode = DummyPattern\n private _flags: Flags = DummyFlags\n private _backreferences: Backreference[] = []\n private _capturingGroups: CapturingGroup[] = []\n\n public source = \"\"\n\n public constructor(options?: RegExpParser.Options) {\n this.strict = Boolean(options && options.strict)\n this.ecmaVersion = (options && options.ecmaVersion) || 2018\n }\n\n public get pattern(): Pattern {\n if (this._node.type !== \"Pattern\") {\n throw new Error(\"UnknownError\")\n }\n return this._node\n }\n\n public get flags(): Flags {\n if (this._flags.type !== \"Flags\") {\n throw new Error(\"UnknownError\")\n }\n return this._flags\n }\n\n public onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n this._flags = {\n type: \"Flags\",\n parent: null,\n start,\n end,\n raw: this.source.slice(start, end),\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n }\n }\n\n public onPatternEnter(start: number): void {\n this._node = {\n type: \"Pattern\",\n parent: null,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n this._backreferences.length = 0\n this._capturingGroups.length = 0\n }\n\n public onPatternLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n\n for (const reference of this._backreferences) {\n const ref = reference.ref\n const group =\n typeof ref === \"number\"\n ? this._capturingGroups[ref - 1]\n : this._capturingGroups.find(g => g.name === ref)!\n reference.resolved = group\n group.references.push(reference)\n }\n }\n\n public onAlternativeEnter(start: number): void {\n const parent = this._node\n if (\n parent.type !== \"Assertion\" &&\n parent.type !== \"CapturingGroup\" &&\n parent.type !== \"Group\" &&\n parent.type !== \"Pattern\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Alternative\",\n parent,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n parent.alternatives.push(this._node)\n }\n\n public onAlternativeLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onGroupEnter(start: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Group\",\n parent,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n parent.elements.push(this._node)\n }\n\n public onGroupLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Group\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCapturingGroupEnter(start: number, name: string | null): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CapturingGroup\",\n parent,\n start,\n end: start,\n raw: \"\",\n name,\n alternatives: [],\n references: [],\n }\n parent.elements.push(this._node)\n this._capturingGroups.push(this._node)\n }\n\n public onCapturingGroupLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CapturingGroup\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last element.\n const element = parent.elements.pop()\n if (\n element == null ||\n element.type === \"Quantifier\" ||\n (element.type === \"Assertion\" && element.kind !== \"lookahead\")\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: Quantifier = {\n type: \"Quantifier\",\n parent,\n start: element.start,\n end,\n raw: this.source.slice(element.start, end),\n min,\n max,\n greedy,\n element,\n }\n parent.elements.push(node)\n element.parent = node\n }\n\n public onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Assertion\",\n parent,\n start,\n end: start,\n raw: \"\",\n kind,\n negate,\n alternatives: [],\n } as LookaroundAssertion\n parent.elements.push(this._node)\n }\n\n public onLookaroundAssertionLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Assertion\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n key,\n value,\n negate,\n })\n }\n\n public onCharacter(start: number, end: number, value: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"Character\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n value,\n })\n }\n\n public onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n const node: Backreference = {\n type: \"Backreference\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n ref,\n resolved: DummyCapturingGroup,\n }\n parent.elements.push(node)\n this._backreferences.push(node)\n }\n\n public onCharacterClassEnter(start: number, negate: boolean): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CharacterClass\",\n parent,\n start,\n end: start,\n raw: \"\",\n negate,\n elements: [],\n }\n parent.elements.push(this._node)\n }\n\n public onCharacterClassLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CharacterClass\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCharacterClassRange(start: number, end: number): void {\n const parent = this._node\n if (parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last three elements.\n const elements = parent.elements\n const max = elements.pop()\n const hyphen = elements.pop()\n const min = elements.pop()\n if (\n !min ||\n !max ||\n !hyphen ||\n min.type !== \"Character\" ||\n max.type !== \"Character\" ||\n hyphen.type !== \"Character\" ||\n hyphen.value !== HyphenMinus\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: CharacterClassRange = {\n type: \"CharacterClassRange\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n min,\n max,\n }\n min.parent = node\n max.parent = node\n elements.push(node)\n }\n}\n\nexport namespace RegExpParser {\n /**\n * The options for RegExpParser construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n }\n}\n\nexport class RegExpParser {\n private _state: RegExpParserState\n private _validator: RegExpValidator\n\n /**\n * Initialize this parser.\n * @param options The options of parser.\n */\n public constructor(options?: RegExpParser.Options) {\n this._state = new RegExpParserState(options)\n this._validator = new RegExpValidator(this._state)\n }\n\n /**\n * Parse a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given regular expression.\n */\n public parseLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): RegExpLiteral {\n this._state.source = source\n this._validator.validateLiteral(source, start, end)\n const pattern = this._state.pattern\n const flags = this._state.flags\n const literal: RegExpLiteral = {\n type: \"RegExpLiteral\",\n parent: null,\n start,\n end,\n raw: source,\n pattern,\n flags,\n }\n pattern.parent = literal\n flags.parent = literal\n return literal\n }\n\n /**\n * Parse a regular expression flags. E.g. \"gim\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given flags.\n */\n public parseFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): Flags {\n this._state.source = source\n this._validator.validateFlags(source, start, end)\n return this._state.flags\n }\n\n /**\n * Parse a regular expression pattern. E.g. \"abc\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n * @returns The AST of the given pattern.\n */\n public parsePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): Pattern {\n this._state.source = source\n this._validator.validatePattern(source, start, end, uFlag)\n return this._state.pattern\n }\n}\n","import {\n Alternative,\n Assertion,\n Backreference,\n CapturingGroup,\n Character,\n CharacterClass,\n CharacterClassRange,\n CharacterSet,\n Flags,\n Group,\n Node,\n Pattern,\n Quantifier,\n RegExpLiteral,\n} from \"./ast\"\n\n/**\n * The visitor to walk on AST.\n */\nexport class RegExpVisitor {\n private readonly _handlers: RegExpVisitor.Handlers\n\n /**\n * Initialize this visitor.\n * @param handlers Callbacks for each node.\n */\n public constructor(handlers: RegExpVisitor.Handlers) {\n this._handlers = handlers\n }\n\n /**\n * Visit a given node and descendant nodes.\n * @param node The root node to visit tree.\n */\n public visit(node: Node): void {\n switch (node.type) {\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"Assertion\":\n this.visitAssertion(node)\n break\n case \"Backreference\":\n this.visitBackreference(node)\n break\n case \"CapturingGroup\":\n this.visitCapturingGroup(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"CharacterClass\":\n this.visitCharacterClass(node)\n break\n case \"CharacterClassRange\":\n this.visitCharacterClassRange(node)\n break\n case \"CharacterSet\":\n this.visitCharacterSet(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n case \"RegExpLiteral\":\n this.visitRegExpLiteral(node)\n break\n default:\n throw new Error(`Unknown type: ${(node as any).type}`)\n }\n }\n\n private visitAlternative(node: Alternative): void {\n if (this._handlers.onAlternativeEnter) {\n this._handlers.onAlternativeEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onAlternativeLeave) {\n this._handlers.onAlternativeLeave(node)\n }\n }\n private visitAssertion(node: Assertion): void {\n if (this._handlers.onAssertionEnter) {\n this._handlers.onAssertionEnter(node)\n }\n if (node.kind === \"lookahead\" || node.kind === \"lookbehind\") {\n node.alternatives.forEach(this.visit, this)\n }\n if (this._handlers.onAssertionLeave) {\n this._handlers.onAssertionLeave(node)\n }\n }\n private visitBackreference(node: Backreference): void {\n if (this._handlers.onBackreferenceEnter) {\n this._handlers.onBackreferenceEnter(node)\n }\n if (this._handlers.onBackreferenceLeave) {\n this._handlers.onBackreferenceLeave(node)\n }\n }\n private visitCapturingGroup(node: CapturingGroup): void {\n if (this._handlers.onCapturingGroupEnter) {\n this._handlers.onCapturingGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onCapturingGroupLeave) {\n this._handlers.onCapturingGroupLeave(node)\n }\n }\n private visitCharacter(node: Character): void {\n if (this._handlers.onCharacterEnter) {\n this._handlers.onCharacterEnter(node)\n }\n if (this._handlers.onCharacterLeave) {\n this._handlers.onCharacterLeave(node)\n }\n }\n private visitCharacterClass(node: CharacterClass): void {\n if (this._handlers.onCharacterClassEnter) {\n this._handlers.onCharacterClassEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onCharacterClassLeave) {\n this._handlers.onCharacterClassLeave(node)\n }\n }\n private visitCharacterClassRange(node: CharacterClassRange): void {\n if (this._handlers.onCharacterClassRangeEnter) {\n this._handlers.onCharacterClassRangeEnter(node)\n }\n this.visitCharacter(node.min)\n this.visitCharacter(node.max)\n if (this._handlers.onCharacterClassRangeLeave) {\n this._handlers.onCharacterClassRangeLeave(node)\n }\n }\n private visitCharacterSet(node: CharacterSet): void {\n if (this._handlers.onCharacterSetEnter) {\n this._handlers.onCharacterSetEnter(node)\n }\n if (this._handlers.onCharacterSetLeave) {\n this._handlers.onCharacterSetLeave(node)\n }\n }\n private visitFlags(node: Flags): void {\n if (this._handlers.onFlagsEnter) {\n this._handlers.onFlagsEnter(node)\n }\n if (this._handlers.onFlagsLeave) {\n this._handlers.onFlagsLeave(node)\n }\n }\n private visitGroup(node: Group): void {\n if (this._handlers.onGroupEnter) {\n this._handlers.onGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onGroupLeave) {\n this._handlers.onGroupLeave(node)\n }\n }\n private visitPattern(node: Pattern): void {\n if (this._handlers.onPatternEnter) {\n this._handlers.onPatternEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onPatternLeave) {\n this._handlers.onPatternLeave(node)\n }\n }\n private visitQuantifier(node: Quantifier): void {\n if (this._handlers.onQuantifierEnter) {\n this._handlers.onQuantifierEnter(node)\n }\n this.visit(node.element)\n if (this._handlers.onQuantifierLeave) {\n this._handlers.onQuantifierLeave(node)\n }\n }\n private visitRegExpLiteral(node: RegExpLiteral): void {\n if (this._handlers.onRegExpLiteralEnter) {\n this._handlers.onRegExpLiteralEnter(node)\n }\n this.visitPattern(node.pattern)\n this.visitFlags(node.flags)\n if (this._handlers.onRegExpLiteralLeave) {\n this._handlers.onRegExpLiteralLeave(node)\n }\n }\n}\n\nexport namespace RegExpVisitor {\n export interface Handlers {\n onAlternativeEnter?(node: Alternative): void\n onAlternativeLeave?(node: Alternative): void\n onAssertionEnter?(node: Assertion): void\n onAssertionLeave?(node: Assertion): void\n onBackreferenceEnter?(node: Backreference): void\n onBackreferenceLeave?(node: Backreference): void\n onCapturingGroupEnter?(node: CapturingGroup): void\n onCapturingGroupLeave?(node: CapturingGroup): void\n onCharacterEnter?(node: Character): void\n onCharacterLeave?(node: Character): void\n onCharacterClassEnter?(node: CharacterClass): void\n onCharacterClassLeave?(node: CharacterClass): void\n onCharacterClassRangeEnter?(node: CharacterClassRange): void\n onCharacterClassRangeLeave?(node: CharacterClassRange): void\n onCharacterSetEnter?(node: CharacterSet): void\n onCharacterSetLeave?(node: CharacterSet): void\n onFlagsEnter?(node: Flags): void\n onFlagsLeave?(node: Flags): void\n onGroupEnter?(node: Group): void\n onGroupLeave?(node: Group): void\n onPatternEnter?(node: Pattern): void\n onPatternLeave?(node: Pattern): void\n onQuantifierEnter?(node: Quantifier): void\n onQuantifierLeave?(node: Quantifier): void\n onRegExpLiteralEnter?(node: RegExpLiteral): void\n onRegExpLiteralLeave?(node: RegExpLiteral): void\n }\n}\n","import * as AST from \"./ast\"\nimport { RegExpParser } from \"./parser\"\nimport { RegExpValidator } from \"./validator\"\nimport { RegExpVisitor } from \"./visitor\"\n\nexport { AST, RegExpParser, RegExpValidator }\n\n/**\n * Parse a given regular expression literal then make AST object.\n * @param source The source code to parse.\n * @param options The options to parse.\n * @returns The AST of the regular expression.\n */\nexport function parseRegExpLiteral(\n source: string | RegExp,\n options?: RegExpParser.Options,\n): AST.RegExpLiteral {\n return new RegExpParser(options).parseLiteral(String(source))\n}\n\n/**\n * Validate a given regular expression literal.\n * @param source The source code to validate.\n * @param options The options to validate.\n */\nexport function validateRegExpLiteral(\n source: string,\n options?: RegExpValidator.Options,\n): void {\n return new RegExpValidator(options).validateLiteral(source)\n}\n\nexport function visitRegExpAST(\n node: AST.Node,\n handlers: RegExpVisitor.Handlers,\n): void {\n new RegExpVisitor(handlers).visit(node)\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/regexpp/index.mjs b/tools/node_modules/eslint/node_modules/regexpp/index.mjs index 8136467d076b2e..5bf62de2c53c0e 100644 --- a/tools/node_modules/eslint/node_modules/regexpp/index.mjs +++ b/tools/node_modules/eslint/node_modules/regexpp/index.mjs @@ -5680,6 +5680,9 @@ class RegExpValidator { if (cp === RightParenthesis) { this.raise("Unmatched ')'"); } + if (cp === ReverseSolidus) { + this.raise("\\ at end of pattern"); + } if (cp === RightSquareBracket || cp === RightCurlyBracket) { this.raise("Lone quantifier brackets"); } @@ -5916,12 +5919,23 @@ class RegExpValidator { eatExtendedAtom() { return (this.eatDot() || this.eatReverseSolidusAtomEscape() || + this.eatReverseSolidusFollowedByC() || this.eatCharacterClass() || this.eatUncapturingGroup() || this.eatCapturingGroup() || this.eatInvalidBracedQuantifier() || this.eatExtendedPatternCharacter()); } + eatReverseSolidusFollowedByC() { + if (this.currentCodePoint === ReverseSolidus && + this.nextCodePoint === LatinSmallLetterC) { + this._lastIntValue = this.currentCodePoint; + this.advance(); + this.onCharacter(this.index - 1, this.index, ReverseSolidus); + return true; + } + return false; + } eatInvalidBracedQuantifier() { if (this.eatBracedQuantifier(true)) { this.raise("Nothing to repeat"); @@ -5952,6 +5966,7 @@ class RegExpValidator { if (cp !== -1 && cp !== CircumflexAccent && cp !== DollarSign && + cp !== ReverseSolidus && cp !== FullStop && cp !== Asterisk && cp !== PlusSign && diff --git a/tools/node_modules/eslint/node_modules/regexpp/index.mjs.map b/tools/node_modules/eslint/node_modules/regexpp/index.mjs.map index ea0af99ea26b20..78109af1e3c38f 100644 --- a/tools/node_modules/eslint/node_modules/regexpp/index.mjs.map +++ b/tools/node_modules/eslint/node_modules/regexpp/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index.mjs.map","sources":["src/unicode/ids.ts","src/unicode/property-data.ts","src/unicode/index.ts","src/reader.ts","src/regexp-syntax-error.ts","src/validator.ts","src/parser.ts","src/visitor.ts","src/index.ts"],"sourcesContent":["/* Generated from DerivedCoreProperties-11.0.0.txt */\nexport function isIdStart(cp: number): boolean {\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp)\n}\nexport function isIdContinue(cp: number): boolean {\n if (cp < 0x30) return false\n if (cp < 0x3a) return true\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp === 0x5f) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp) || isLargeIdContinue(cp)\n}\n\nfunction isLargeIdStart(cp: number): boolean {\n if (cp < 0x30a1) {\n if (cp < 0xec0) {\n if (cp < 0xa35) {\n if (cp < 0x6e5) {\n if (cp < 0x37a) {\n if (cp < 0x294) {\n if (cp < 0xf8) {\n if (cp === 0xaa) return true\n if (cp === 0xb5) return true\n if (cp === 0xba) return true\n if (cp < 0xc0) return false\n if (cp < 0xd7) return true\n if (cp < 0xd8) return false\n if (cp < 0xf7) return true\n return false\n }\n if (cp < 0x1bb) return true\n if (cp === 0x1bb) return true\n if (cp < 0x1bc) return false\n if (cp < 0x1c0) return true\n if (cp < 0x1c0) return false\n if (cp < 0x1c4) return true\n if (cp < 0x1c4) return false\n if (cp < 0x294) return true\n return false\n }\n if (cp < 0x2ec) {\n if (cp === 0x294) return true\n if (cp < 0x295) return false\n if (cp < 0x2b0) return true\n if (cp < 0x2b0) return false\n if (cp < 0x2c2) return true\n if (cp < 0x2c6) return false\n if (cp < 0x2d2) return true\n if (cp < 0x2e0) return false\n if (cp < 0x2e5) return true\n return false\n }\n if (cp === 0x2ec) return true\n if (cp === 0x2ee) return true\n if (cp < 0x370) return false\n if (cp < 0x374) return true\n if (cp === 0x374) return true\n if (cp < 0x376) return false\n if (cp < 0x378) return true\n return false\n }\n if (cp < 0x531) {\n if (cp < 0x38c) {\n if (cp === 0x37a) return true\n if (cp < 0x37b) return false\n if (cp < 0x37e) return true\n if (cp === 0x37f) return true\n if (cp === 0x386) return true\n if (cp < 0x388) return false\n if (cp < 0x38b) return true\n return false\n }\n if (cp === 0x38c) return true\n if (cp < 0x38e) return false\n if (cp < 0x3a2) return true\n if (cp < 0x3a3) return false\n if (cp < 0x3f6) return true\n if (cp < 0x3f7) return false\n if (cp < 0x482) return true\n if (cp < 0x48a) return false\n if (cp < 0x530) return true\n return false\n }\n if (cp < 0x620) {\n if (cp < 0x531) return false\n if (cp < 0x557) return true\n if (cp === 0x559) return true\n if (cp < 0x560) return false\n if (cp < 0x589) return true\n if (cp < 0x5d0) return false\n if (cp < 0x5eb) return true\n if (cp < 0x5ef) return false\n if (cp < 0x5f3) return true\n return false\n }\n if (cp < 0x640) return true\n if (cp === 0x640) return true\n if (cp < 0x641) return false\n if (cp < 0x64b) return true\n if (cp < 0x66e) return false\n if (cp < 0x670) return true\n if (cp < 0x671) return false\n if (cp < 0x6d4) return true\n if (cp === 0x6d5) return true\n return false\n }\n if (cp < 0x950) {\n if (cp < 0x7fa) {\n if (cp < 0x712) {\n if (cp < 0x6e5) return false\n if (cp < 0x6e7) return true\n if (cp < 0x6ee) return false\n if (cp < 0x6f0) return true\n if (cp < 0x6fa) return false\n if (cp < 0x6fd) return true\n if (cp === 0x6ff) return true\n if (cp === 0x710) return true\n return false\n }\n if (cp < 0x730) return true\n if (cp < 0x74d) return false\n if (cp < 0x7a6) return true\n if (cp === 0x7b1) return true\n if (cp < 0x7ca) return false\n if (cp < 0x7eb) return true\n if (cp < 0x7f4) return false\n if (cp < 0x7f6) return true\n return false\n }\n if (cp < 0x840) {\n if (cp === 0x7fa) return true\n if (cp < 0x800) return false\n if (cp < 0x816) return true\n if (cp === 0x81a) return true\n if (cp === 0x824) return true\n if (cp === 0x828) return true\n return false\n }\n if (cp < 0x859) return true\n if (cp < 0x860) return false\n if (cp < 0x86b) return true\n if (cp < 0x8a0) return false\n if (cp < 0x8b5) return true\n if (cp < 0x8b6) return false\n if (cp < 0x8be) return true\n if (cp < 0x904) return false\n if (cp < 0x93a) return true\n if (cp === 0x93d) return true\n return false\n }\n if (cp < 0x9bd) {\n if (cp < 0x98f) {\n if (cp === 0x950) return true\n if (cp < 0x958) return false\n if (cp < 0x962) return true\n if (cp === 0x971) return true\n if (cp < 0x972) return false\n if (cp < 0x981) return true\n if (cp < 0x985) return false\n if (cp < 0x98d) return true\n return false\n }\n if (cp < 0x991) return true\n if (cp < 0x993) return false\n if (cp < 0x9a9) return true\n if (cp < 0x9aa) return false\n if (cp < 0x9b1) return true\n if (cp === 0x9b2) return true\n if (cp < 0x9b6) return false\n if (cp < 0x9ba) return true\n return false\n }\n if (cp < 0x9fc) {\n if (cp === 0x9bd) return true\n if (cp === 0x9ce) return true\n if (cp < 0x9dc) return false\n if (cp < 0x9de) return true\n if (cp < 0x9df) return false\n if (cp < 0x9e2) return true\n if (cp < 0x9f0) return false\n if (cp < 0x9f2) return true\n return false\n }\n if (cp === 0x9fc) return true\n if (cp < 0xa05) return false\n if (cp < 0xa0b) return true\n if (cp < 0xa0f) return false\n if (cp < 0xa11) return true\n if (cp < 0xa13) return false\n if (cp < 0xa29) return true\n if (cp < 0xa2a) return false\n if (cp < 0xa31) return true\n if (cp < 0xa32) return false\n if (cp < 0xa34) return true\n return false\n }\n if (cp < 0xc60) {\n if (cp < 0xb3d) {\n if (cp < 0xab5) {\n if (cp < 0xa85) {\n if (cp < 0xa35) return false\n if (cp < 0xa37) return true\n if (cp < 0xa38) return false\n if (cp < 0xa3a) return true\n if (cp < 0xa59) return false\n if (cp < 0xa5d) return true\n if (cp === 0xa5e) return true\n if (cp < 0xa72) return false\n if (cp < 0xa75) return true\n return false\n }\n if (cp < 0xa8e) return true\n if (cp < 0xa8f) return false\n if (cp < 0xa92) return true\n if (cp < 0xa93) return false\n if (cp < 0xaa9) return true\n if (cp < 0xaaa) return false\n if (cp < 0xab1) return true\n if (cp < 0xab2) return false\n if (cp < 0xab4) return true\n return false\n }\n if (cp < 0xb05) {\n if (cp < 0xab5) return false\n if (cp < 0xaba) return true\n if (cp === 0xabd) return true\n if (cp === 0xad0) return true\n if (cp < 0xae0) return false\n if (cp < 0xae2) return true\n if (cp === 0xaf9) return true\n return false\n }\n if (cp < 0xb0d) return true\n if (cp < 0xb0f) return false\n if (cp < 0xb11) return true\n if (cp < 0xb13) return false\n if (cp < 0xb29) return true\n if (cp < 0xb2a) return false\n if (cp < 0xb31) return true\n if (cp < 0xb32) return false\n if (cp < 0xb34) return true\n if (cp < 0xb35) return false\n if (cp < 0xb3a) return true\n return false\n }\n if (cp < 0xb9e) {\n if (cp < 0xb85) {\n if (cp === 0xb3d) return true\n if (cp < 0xb5c) return false\n if (cp < 0xb5e) return true\n if (cp < 0xb5f) return false\n if (cp < 0xb62) return true\n if (cp === 0xb71) return true\n if (cp === 0xb83) return true\n return false\n }\n if (cp < 0xb8b) return true\n if (cp < 0xb8e) return false\n if (cp < 0xb91) return true\n if (cp < 0xb92) return false\n if (cp < 0xb96) return true\n if (cp < 0xb99) return false\n if (cp < 0xb9b) return true\n if (cp === 0xb9c) return true\n return false\n }\n if (cp < 0xc05) {\n if (cp < 0xb9e) return false\n if (cp < 0xba0) return true\n if (cp < 0xba3) return false\n if (cp < 0xba5) return true\n if (cp < 0xba8) return false\n if (cp < 0xbab) return true\n if (cp < 0xbae) return false\n if (cp < 0xbba) return true\n if (cp === 0xbd0) return true\n return false\n }\n if (cp < 0xc0d) return true\n if (cp < 0xc0e) return false\n if (cp < 0xc11) return true\n if (cp < 0xc12) return false\n if (cp < 0xc29) return true\n if (cp < 0xc2a) return false\n if (cp < 0xc3a) return true\n if (cp === 0xc3d) return true\n if (cp < 0xc58) return false\n if (cp < 0xc5b) return true\n return false\n }\n if (cp < 0xdb3) {\n if (cp < 0xcf1) {\n if (cp < 0xcaa) {\n if (cp < 0xc60) return false\n if (cp < 0xc62) return true\n if (cp === 0xc80) return true\n if (cp < 0xc85) return false\n if (cp < 0xc8d) return true\n if (cp < 0xc8e) return false\n if (cp < 0xc91) return true\n if (cp < 0xc92) return false\n if (cp < 0xca9) return true\n return false\n }\n if (cp < 0xcb4) return true\n if (cp < 0xcb5) return false\n if (cp < 0xcba) return true\n if (cp === 0xcbd) return true\n if (cp === 0xcde) return true\n if (cp < 0xce0) return false\n if (cp < 0xce2) return true\n return false\n }\n if (cp < 0xd4e) {\n if (cp < 0xcf1) return false\n if (cp < 0xcf3) return true\n if (cp < 0xd05) return false\n if (cp < 0xd0d) return true\n if (cp < 0xd0e) return false\n if (cp < 0xd11) return true\n if (cp < 0xd12) return false\n if (cp < 0xd3b) return true\n if (cp === 0xd3d) return true\n return false\n }\n if (cp === 0xd4e) return true\n if (cp < 0xd54) return false\n if (cp < 0xd57) return true\n if (cp < 0xd5f) return false\n if (cp < 0xd62) return true\n if (cp < 0xd7a) return false\n if (cp < 0xd80) return true\n if (cp < 0xd85) return false\n if (cp < 0xd97) return true\n if (cp < 0xd9a) return false\n if (cp < 0xdb2) return true\n return false\n }\n if (cp < 0xe8a) {\n if (cp < 0xe40) {\n if (cp < 0xdb3) return false\n if (cp < 0xdbc) return true\n if (cp === 0xdbd) return true\n if (cp < 0xdc0) return false\n if (cp < 0xdc7) return true\n if (cp < 0xe01) return false\n if (cp < 0xe31) return true\n if (cp < 0xe32) return false\n if (cp < 0xe34) return true\n return false\n }\n if (cp < 0xe46) return true\n if (cp === 0xe46) return true\n if (cp < 0xe81) return false\n if (cp < 0xe83) return true\n if (cp === 0xe84) return true\n if (cp < 0xe87) return false\n if (cp < 0xe89) return true\n return false\n }\n if (cp < 0xea5) {\n if (cp === 0xe8a) return true\n if (cp === 0xe8d) return true\n if (cp < 0xe94) return false\n if (cp < 0xe98) return true\n if (cp < 0xe99) return false\n if (cp < 0xea0) return true\n if (cp < 0xea1) return false\n if (cp < 0xea4) return true\n return false\n }\n if (cp === 0xea5) return true\n if (cp === 0xea7) return true\n if (cp < 0xeaa) return false\n if (cp < 0xeac) return true\n if (cp < 0xead) return false\n if (cp < 0xeb1) return true\n if (cp < 0xeb2) return false\n if (cp < 0xeb4) return true\n if (cp === 0xebd) return true\n return false\n }\n if (cp < 0x1ce9) {\n if (cp < 0x166f) {\n if (cp < 0x10fd) {\n if (cp < 0x105a) {\n if (cp < 0xf49) {\n if (cp < 0xec0) return false\n if (cp < 0xec5) return true\n if (cp === 0xec6) return true\n if (cp < 0xedc) return false\n if (cp < 0xee0) return true\n if (cp === 0xf00) return true\n if (cp < 0xf40) return false\n if (cp < 0xf48) return true\n return false\n }\n if (cp < 0xf6d) return true\n if (cp < 0xf88) return false\n if (cp < 0xf8d) return true\n if (cp < 0x1000) return false\n if (cp < 0x102b) return true\n if (cp === 0x103f) return true\n if (cp < 0x1050) return false\n if (cp < 0x1056) return true\n return false\n }\n if (cp < 0x108e) {\n if (cp < 0x105a) return false\n if (cp < 0x105e) return true\n if (cp === 0x1061) return true\n if (cp < 0x1065) return false\n if (cp < 0x1067) return true\n if (cp < 0x106e) return false\n if (cp < 0x1071) return true\n if (cp < 0x1075) return false\n if (cp < 0x1082) return true\n return false\n }\n if (cp === 0x108e) return true\n if (cp < 0x10a0) return false\n if (cp < 0x10c6) return true\n if (cp === 0x10c7) return true\n if (cp === 0x10cd) return true\n if (cp < 0x10d0) return false\n if (cp < 0x10fb) return true\n if (cp === 0x10fc) return true\n return false\n }\n if (cp < 0x12b8) {\n if (cp < 0x125a) {\n if (cp < 0x10fd) return false\n if (cp < 0x1100) return true\n if (cp < 0x1100) return false\n if (cp < 0x1249) return true\n if (cp < 0x124a) return false\n if (cp < 0x124e) return true\n if (cp < 0x1250) return false\n if (cp < 0x1257) return true\n if (cp === 0x1258) return true\n return false\n }\n if (cp < 0x125e) return true\n if (cp < 0x1260) return false\n if (cp < 0x1289) return true\n if (cp < 0x128a) return false\n if (cp < 0x128e) return true\n if (cp < 0x1290) return false\n if (cp < 0x12b1) return true\n if (cp < 0x12b2) return false\n if (cp < 0x12b6) return true\n return false\n }\n if (cp < 0x1312) {\n if (cp < 0x12b8) return false\n if (cp < 0x12bf) return true\n if (cp === 0x12c0) return true\n if (cp < 0x12c2) return false\n if (cp < 0x12c6) return true\n if (cp < 0x12c8) return false\n if (cp < 0x12d7) return true\n if (cp < 0x12d8) return false\n if (cp < 0x1311) return true\n return false\n }\n if (cp < 0x1316) return true\n if (cp < 0x1318) return false\n if (cp < 0x135b) return true\n if (cp < 0x1380) return false\n if (cp < 0x1390) return true\n if (cp < 0x13a0) return false\n if (cp < 0x13f6) return true\n if (cp < 0x13f8) return false\n if (cp < 0x13fe) return true\n if (cp < 0x1401) return false\n if (cp < 0x166d) return true\n return false\n }\n if (cp < 0x18b0) {\n if (cp < 0x176e) {\n if (cp < 0x1700) {\n if (cp < 0x166f) return false\n if (cp < 0x1680) return true\n if (cp < 0x1681) return false\n if (cp < 0x169b) return true\n if (cp < 0x16a0) return false\n if (cp < 0x16eb) return true\n if (cp < 0x16ee) return false\n if (cp < 0x16f1) return true\n if (cp < 0x16f1) return false\n if (cp < 0x16f9) return true\n return false\n }\n if (cp < 0x170d) return true\n if (cp < 0x170e) return false\n if (cp < 0x1712) return true\n if (cp < 0x1720) return false\n if (cp < 0x1732) return true\n if (cp < 0x1740) return false\n if (cp < 0x1752) return true\n if (cp < 0x1760) return false\n if (cp < 0x176d) return true\n return false\n }\n if (cp < 0x1843) {\n if (cp < 0x176e) return false\n if (cp < 0x1771) return true\n if (cp < 0x1780) return false\n if (cp < 0x17b4) return true\n if (cp === 0x17d7) return true\n if (cp === 0x17dc) return true\n if (cp < 0x1820) return false\n if (cp < 0x1843) return true\n return false\n }\n if (cp === 0x1843) return true\n if (cp < 0x1844) return false\n if (cp < 0x1879) return true\n if (cp < 0x1880) return false\n if (cp < 0x1885) return true\n if (cp < 0x1885) return false\n if (cp < 0x1887) return true\n if (cp < 0x1887) return false\n if (cp < 0x18a9) return true\n if (cp === 0x18aa) return true\n return false\n }\n if (cp < 0x1b45) {\n if (cp < 0x19b0) {\n if (cp < 0x18b0) return false\n if (cp < 0x18f6) return true\n if (cp < 0x1900) return false\n if (cp < 0x191f) return true\n if (cp < 0x1950) return false\n if (cp < 0x196e) return true\n if (cp < 0x1970) return false\n if (cp < 0x1975) return true\n if (cp < 0x1980) return false\n if (cp < 0x19ac) return true\n return false\n }\n if (cp < 0x19ca) return true\n if (cp < 0x1a00) return false\n if (cp < 0x1a17) return true\n if (cp < 0x1a20) return false\n if (cp < 0x1a55) return true\n if (cp === 0x1aa7) return true\n if (cp < 0x1b05) return false\n if (cp < 0x1b34) return true\n return false\n }\n if (cp < 0x1c4d) {\n if (cp < 0x1b45) return false\n if (cp < 0x1b4c) return true\n if (cp < 0x1b83) return false\n if (cp < 0x1ba1) return true\n if (cp < 0x1bae) return false\n if (cp < 0x1bb0) return true\n if (cp < 0x1bba) return false\n if (cp < 0x1be6) return true\n if (cp < 0x1c00) return false\n if (cp < 0x1c24) return true\n return false\n }\n if (cp < 0x1c50) return true\n if (cp < 0x1c5a) return false\n if (cp < 0x1c78) return true\n if (cp < 0x1c78) return false\n if (cp < 0x1c7e) return true\n if (cp < 0x1c80) return false\n if (cp < 0x1c89) return true\n if (cp < 0x1c90) return false\n if (cp < 0x1cbb) return true\n if (cp < 0x1cbd) return false\n if (cp < 0x1cc0) return true\n return false\n }\n if (cp < 0x212f) {\n if (cp < 0x1fc2) {\n if (cp < 0x1f18) {\n if (cp < 0x1d6b) {\n if (cp < 0x1ce9) return false\n if (cp < 0x1ced) return true\n if (cp < 0x1cee) return false\n if (cp < 0x1cf2) return true\n if (cp < 0x1cf5) return false\n if (cp < 0x1cf7) return true\n if (cp < 0x1d00) return false\n if (cp < 0x1d2c) return true\n if (cp < 0x1d2c) return false\n if (cp < 0x1d6b) return true\n return false\n }\n if (cp < 0x1d78) return true\n if (cp === 0x1d78) return true\n if (cp < 0x1d79) return false\n if (cp < 0x1d9b) return true\n if (cp < 0x1d9b) return false\n if (cp < 0x1dc0) return true\n if (cp < 0x1e00) return false\n if (cp < 0x1f16) return true\n return false\n }\n if (cp < 0x1f5b) {\n if (cp < 0x1f18) return false\n if (cp < 0x1f1e) return true\n if (cp < 0x1f20) return false\n if (cp < 0x1f46) return true\n if (cp < 0x1f48) return false\n if (cp < 0x1f4e) return true\n if (cp < 0x1f50) return false\n if (cp < 0x1f58) return true\n if (cp === 0x1f59) return true\n return false\n }\n if (cp === 0x1f5b) return true\n if (cp === 0x1f5d) return true\n if (cp < 0x1f5f) return false\n if (cp < 0x1f7e) return true\n if (cp < 0x1f80) return false\n if (cp < 0x1fb5) return true\n if (cp < 0x1fb6) return false\n if (cp < 0x1fbd) return true\n if (cp === 0x1fbe) return true\n return false\n }\n if (cp < 0x2102) {\n if (cp < 0x1ff2) {\n if (cp < 0x1fc2) return false\n if (cp < 0x1fc5) return true\n if (cp < 0x1fc6) return false\n if (cp < 0x1fcd) return true\n if (cp < 0x1fd0) return false\n if (cp < 0x1fd4) return true\n if (cp < 0x1fd6) return false\n if (cp < 0x1fdc) return true\n if (cp < 0x1fe0) return false\n if (cp < 0x1fed) return true\n return false\n }\n if (cp < 0x1ff5) return true\n if (cp < 0x1ff6) return false\n if (cp < 0x1ffd) return true\n if (cp === 0x2071) return true\n if (cp === 0x207f) return true\n if (cp < 0x2090) return false\n if (cp < 0x209d) return true\n return false\n }\n if (cp < 0x2119) {\n if (cp === 0x2102) return true\n if (cp === 0x2107) return true\n if (cp < 0x210a) return false\n if (cp < 0x2114) return true\n if (cp === 0x2115) return true\n if (cp === 0x2118) return true\n return false\n }\n if (cp < 0x211e) return true\n if (cp === 0x2124) return true\n if (cp === 0x2126) return true\n if (cp === 0x2128) return true\n if (cp < 0x212a) return false\n if (cp < 0x212e) return true\n if (cp === 0x212e) return true\n return false\n }\n if (cp < 0x2d80) {\n if (cp < 0x2c30) {\n if (cp < 0x214e) {\n if (cp < 0x212f) return false\n if (cp < 0x2135) return true\n if (cp < 0x2135) return false\n if (cp < 0x2139) return true\n if (cp === 0x2139) return true\n if (cp < 0x213c) return false\n if (cp < 0x2140) return true\n if (cp < 0x2145) return false\n if (cp < 0x214a) return true\n return false\n }\n if (cp === 0x214e) return true\n if (cp < 0x2160) return false\n if (cp < 0x2183) return true\n if (cp < 0x2183) return false\n if (cp < 0x2185) return true\n if (cp < 0x2185) return false\n if (cp < 0x2189) return true\n if (cp < 0x2c00) return false\n if (cp < 0x2c2f) return true\n return false\n }\n if (cp < 0x2cf2) {\n if (cp < 0x2c30) return false\n if (cp < 0x2c5f) return true\n if (cp < 0x2c60) return false\n if (cp < 0x2c7c) return true\n if (cp < 0x2c7c) return false\n if (cp < 0x2c7e) return true\n if (cp < 0x2c7e) return false\n if (cp < 0x2ce5) return true\n if (cp < 0x2ceb) return false\n if (cp < 0x2cef) return true\n return false\n }\n if (cp < 0x2cf4) return true\n if (cp < 0x2d00) return false\n if (cp < 0x2d26) return true\n if (cp === 0x2d27) return true\n if (cp === 0x2d2d) return true\n if (cp < 0x2d30) return false\n if (cp < 0x2d68) return true\n if (cp === 0x2d6f) return true\n return false\n }\n if (cp < 0x3006) {\n if (cp < 0x2dc0) {\n if (cp < 0x2d80) return false\n if (cp < 0x2d97) return true\n if (cp < 0x2da0) return false\n if (cp < 0x2da7) return true\n if (cp < 0x2da8) return false\n if (cp < 0x2daf) return true\n if (cp < 0x2db0) return false\n if (cp < 0x2db7) return true\n if (cp < 0x2db8) return false\n if (cp < 0x2dbf) return true\n return false\n }\n if (cp < 0x2dc7) return true\n if (cp < 0x2dc8) return false\n if (cp < 0x2dcf) return true\n if (cp < 0x2dd0) return false\n if (cp < 0x2dd7) return true\n if (cp < 0x2dd8) return false\n if (cp < 0x2ddf) return true\n if (cp === 0x3005) return true\n return false\n }\n if (cp < 0x303b) {\n if (cp === 0x3006) return true\n if (cp === 0x3007) return true\n if (cp < 0x3021) return false\n if (cp < 0x302a) return true\n if (cp < 0x3031) return false\n if (cp < 0x3036) return true\n if (cp < 0x3038) return false\n if (cp < 0x303b) return true\n return false\n }\n if (cp === 0x303b) return true\n if (cp === 0x303c) return true\n if (cp < 0x3041) return false\n if (cp < 0x3097) return true\n if (cp < 0x309b) return false\n if (cp < 0x309d) return true\n if (cp < 0x309d) return false\n if (cp < 0x309f) return true\n if (cp === 0x309f) return true\n return false\n }\n if (cp < 0x10b60) {\n if (cp < 0xd7b0) {\n if (cp < 0xa882) {\n if (cp < 0xa67f) {\n if (cp < 0xa015) {\n if (cp < 0x31a0) {\n if (cp < 0x30a1) return false\n if (cp < 0x30fb) return true\n if (cp < 0x30fc) return false\n if (cp < 0x30ff) return true\n if (cp === 0x30ff) return true\n if (cp < 0x3105) return false\n if (cp < 0x3130) return true\n if (cp < 0x3131) return false\n if (cp < 0x318f) return true\n return false\n }\n if (cp < 0x31bb) return true\n if (cp < 0x31f0) return false\n if (cp < 0x3200) return true\n if (cp < 0x3400) return false\n if (cp < 0x4db6) return true\n if (cp < 0x4e00) return false\n if (cp < 0x9ff0) return true\n if (cp < 0xa000) return false\n if (cp < 0xa015) return true\n return false\n }\n if (cp < 0xa60c) {\n if (cp === 0xa015) return true\n if (cp < 0xa016) return false\n if (cp < 0xa48d) return true\n if (cp < 0xa4d0) return false\n if (cp < 0xa4f8) return true\n if (cp < 0xa4f8) return false\n if (cp < 0xa4fe) return true\n if (cp < 0xa500) return false\n if (cp < 0xa60c) return true\n return false\n }\n if (cp === 0xa60c) return true\n if (cp < 0xa610) return false\n if (cp < 0xa620) return true\n if (cp < 0xa62a) return false\n if (cp < 0xa62c) return true\n if (cp < 0xa640) return false\n if (cp < 0xa66e) return true\n if (cp === 0xa66e) return true\n return false\n }\n if (cp < 0xa78b) {\n if (cp < 0xa717) {\n if (cp === 0xa67f) return true\n if (cp < 0xa680) return false\n if (cp < 0xa69c) return true\n if (cp < 0xa69c) return false\n if (cp < 0xa69e) return true\n if (cp < 0xa6a0) return false\n if (cp < 0xa6e6) return true\n if (cp < 0xa6e6) return false\n if (cp < 0xa6f0) return true\n return false\n }\n if (cp < 0xa720) return true\n if (cp < 0xa722) return false\n if (cp < 0xa770) return true\n if (cp === 0xa770) return true\n if (cp < 0xa771) return false\n if (cp < 0xa788) return true\n if (cp === 0xa788) return true\n return false\n }\n if (cp < 0xa7fa) {\n if (cp < 0xa78b) return false\n if (cp < 0xa78f) return true\n if (cp === 0xa78f) return true\n if (cp < 0xa790) return false\n if (cp < 0xa7ba) return true\n if (cp === 0xa7f7) return true\n if (cp < 0xa7f8) return false\n if (cp < 0xa7fa) return true\n return false\n }\n if (cp === 0xa7fa) return true\n if (cp < 0xa7fb) return false\n if (cp < 0xa802) return true\n if (cp < 0xa803) return false\n if (cp < 0xa806) return true\n if (cp < 0xa807) return false\n if (cp < 0xa80b) return true\n if (cp < 0xa80c) return false\n if (cp < 0xa823) return true\n if (cp < 0xa840) return false\n if (cp < 0xa874) return true\n return false\n }\n if (cp < 0xaab1) {\n if (cp < 0xa9e6) {\n if (cp < 0xa930) {\n if (cp < 0xa882) return false\n if (cp < 0xa8b4) return true\n if (cp < 0xa8f2) return false\n if (cp < 0xa8f8) return true\n if (cp === 0xa8fb) return true\n if (cp < 0xa8fd) return false\n if (cp < 0xa8ff) return true\n if (cp < 0xa90a) return false\n if (cp < 0xa926) return true\n return false\n }\n if (cp < 0xa947) return true\n if (cp < 0xa960) return false\n if (cp < 0xa97d) return true\n if (cp < 0xa984) return false\n if (cp < 0xa9b3) return true\n if (cp === 0xa9cf) return true\n if (cp < 0xa9e0) return false\n if (cp < 0xa9e5) return true\n return false\n }\n if (cp < 0xaa44) {\n if (cp === 0xa9e6) return true\n if (cp < 0xa9e7) return false\n if (cp < 0xa9f0) return true\n if (cp < 0xa9fa) return false\n if (cp < 0xa9ff) return true\n if (cp < 0xaa00) return false\n if (cp < 0xaa29) return true\n if (cp < 0xaa40) return false\n if (cp < 0xaa43) return true\n return false\n }\n if (cp < 0xaa4c) return true\n if (cp < 0xaa60) return false\n if (cp < 0xaa70) return true\n if (cp === 0xaa70) return true\n if (cp < 0xaa71) return false\n if (cp < 0xaa77) return true\n if (cp === 0xaa7a) return true\n if (cp < 0xaa7e) return false\n if (cp < 0xaab0) return true\n return false\n }\n if (cp < 0xab01) {\n if (cp < 0xaadb) {\n if (cp === 0xaab1) return true\n if (cp < 0xaab5) return false\n if (cp < 0xaab7) return true\n if (cp < 0xaab9) return false\n if (cp < 0xaabe) return true\n if (cp === 0xaac0) return true\n if (cp === 0xaac2) return true\n return false\n }\n if (cp < 0xaadd) return true\n if (cp === 0xaadd) return true\n if (cp < 0xaae0) return false\n if (cp < 0xaaeb) return true\n if (cp === 0xaaf2) return true\n if (cp < 0xaaf3) return false\n if (cp < 0xaaf5) return true\n return false\n }\n if (cp < 0xab30) {\n if (cp < 0xab01) return false\n if (cp < 0xab07) return true\n if (cp < 0xab09) return false\n if (cp < 0xab0f) return true\n if (cp < 0xab11) return false\n if (cp < 0xab17) return true\n if (cp < 0xab20) return false\n if (cp < 0xab27) return true\n if (cp < 0xab28) return false\n if (cp < 0xab2f) return true\n return false\n }\n if (cp < 0xab5b) return true\n if (cp < 0xab5c) return false\n if (cp < 0xab60) return true\n if (cp < 0xab60) return false\n if (cp < 0xab66) return true\n if (cp < 0xab70) return false\n if (cp < 0xabc0) return true\n if (cp < 0xabc0) return false\n if (cp < 0xabe3) return true\n if (cp < 0xac00) return false\n if (cp < 0xd7a4) return true\n return false\n }\n if (cp < 0x1032d) {\n if (cp < 0xff41) {\n if (cp < 0xfb3e) {\n if (cp < 0xfb13) {\n if (cp < 0xd7b0) return false\n if (cp < 0xd7c7) return true\n if (cp < 0xd7cb) return false\n if (cp < 0xd7fc) return true\n if (cp < 0xf900) return false\n if (cp < 0xfa6e) return true\n if (cp < 0xfa70) return false\n if (cp < 0xfada) return true\n if (cp < 0xfb00) return false\n if (cp < 0xfb07) return true\n return false\n }\n if (cp < 0xfb18) return true\n if (cp === 0xfb1d) return true\n if (cp < 0xfb1f) return false\n if (cp < 0xfb29) return true\n if (cp < 0xfb2a) return false\n if (cp < 0xfb37) return true\n if (cp < 0xfb38) return false\n if (cp < 0xfb3d) return true\n return false\n }\n if (cp < 0xfd50) {\n if (cp === 0xfb3e) return true\n if (cp < 0xfb40) return false\n if (cp < 0xfb42) return true\n if (cp < 0xfb43) return false\n if (cp < 0xfb45) return true\n if (cp < 0xfb46) return false\n if (cp < 0xfbb2) return true\n if (cp < 0xfbd3) return false\n if (cp < 0xfd3e) return true\n return false\n }\n if (cp < 0xfd90) return true\n if (cp < 0xfd92) return false\n if (cp < 0xfdc8) return true\n if (cp < 0xfdf0) return false\n if (cp < 0xfdfc) return true\n if (cp < 0xfe70) return false\n if (cp < 0xfe75) return true\n if (cp < 0xfe76) return false\n if (cp < 0xfefd) return true\n if (cp < 0xff21) return false\n if (cp < 0xff3b) return true\n return false\n }\n if (cp < 0x10000) {\n if (cp < 0xffa0) {\n if (cp < 0xff41) return false\n if (cp < 0xff5b) return true\n if (cp < 0xff66) return false\n if (cp < 0xff70) return true\n if (cp === 0xff70) return true\n if (cp < 0xff71) return false\n if (cp < 0xff9e) return true\n if (cp < 0xff9e) return false\n if (cp < 0xffa0) return true\n return false\n }\n if (cp < 0xffbf) return true\n if (cp < 0xffc2) return false\n if (cp < 0xffc8) return true\n if (cp < 0xffca) return false\n if (cp < 0xffd0) return true\n if (cp < 0xffd2) return false\n if (cp < 0xffd8) return true\n if (cp < 0xffda) return false\n if (cp < 0xffdd) return true\n return false\n }\n if (cp < 0x10050) {\n if (cp < 0x10000) return false\n if (cp < 0x1000c) return true\n if (cp < 0x1000d) return false\n if (cp < 0x10027) return true\n if (cp < 0x10028) return false\n if (cp < 0x1003b) return true\n if (cp < 0x1003c) return false\n if (cp < 0x1003e) return true\n if (cp < 0x1003f) return false\n if (cp < 0x1004e) return true\n return false\n }\n if (cp < 0x1005e) return true\n if (cp < 0x10080) return false\n if (cp < 0x100fb) return true\n if (cp < 0x10140) return false\n if (cp < 0x10175) return true\n if (cp < 0x10280) return false\n if (cp < 0x1029d) return true\n if (cp < 0x102a0) return false\n if (cp < 0x102d1) return true\n if (cp < 0x10300) return false\n if (cp < 0x10320) return true\n return false\n }\n if (cp < 0x10837) {\n if (cp < 0x10450) {\n if (cp < 0x10380) {\n if (cp < 0x1032d) return false\n if (cp < 0x10341) return true\n if (cp === 0x10341) return true\n if (cp < 0x10342) return false\n if (cp < 0x1034a) return true\n if (cp === 0x1034a) return true\n if (cp < 0x10350) return false\n if (cp < 0x10376) return true\n return false\n }\n if (cp < 0x1039e) return true\n if (cp < 0x103a0) return false\n if (cp < 0x103c4) return true\n if (cp < 0x103c8) return false\n if (cp < 0x103d0) return true\n if (cp < 0x103d1) return false\n if (cp < 0x103d6) return true\n if (cp < 0x10400) return false\n if (cp < 0x10450) return true\n return false\n }\n if (cp < 0x10600) {\n if (cp < 0x10450) return false\n if (cp < 0x1049e) return true\n if (cp < 0x104b0) return false\n if (cp < 0x104d4) return true\n if (cp < 0x104d8) return false\n if (cp < 0x104fc) return true\n if (cp < 0x10500) return false\n if (cp < 0x10528) return true\n if (cp < 0x10530) return false\n if (cp < 0x10564) return true\n return false\n }\n if (cp < 0x10737) return true\n if (cp < 0x10740) return false\n if (cp < 0x10756) return true\n if (cp < 0x10760) return false\n if (cp < 0x10768) return true\n if (cp < 0x10800) return false\n if (cp < 0x10806) return true\n if (cp === 0x10808) return true\n if (cp < 0x1080a) return false\n if (cp < 0x10836) return true\n return false\n }\n if (cp < 0x109be) {\n if (cp < 0x108e0) {\n if (cp < 0x10837) return false\n if (cp < 0x10839) return true\n if (cp === 0x1083c) return true\n if (cp < 0x1083f) return false\n if (cp < 0x10856) return true\n if (cp < 0x10860) return false\n if (cp < 0x10877) return true\n if (cp < 0x10880) return false\n if (cp < 0x1089f) return true\n return false\n }\n if (cp < 0x108f3) return true\n if (cp < 0x108f4) return false\n if (cp < 0x108f6) return true\n if (cp < 0x10900) return false\n if (cp < 0x10916) return true\n if (cp < 0x10920) return false\n if (cp < 0x1093a) return true\n if (cp < 0x10980) return false\n if (cp < 0x109b8) return true\n return false\n }\n if (cp < 0x10a60) {\n if (cp < 0x109be) return false\n if (cp < 0x109c0) return true\n if (cp === 0x10a00) return true\n if (cp < 0x10a10) return false\n if (cp < 0x10a14) return true\n if (cp < 0x10a15) return false\n if (cp < 0x10a18) return true\n if (cp < 0x10a19) return false\n if (cp < 0x10a36) return true\n return false\n }\n if (cp < 0x10a7d) return true\n if (cp < 0x10a80) return false\n if (cp < 0x10a9d) return true\n if (cp < 0x10ac0) return false\n if (cp < 0x10ac8) return true\n if (cp < 0x10ac9) return false\n if (cp < 0x10ae5) return true\n if (cp < 0x10b00) return false\n if (cp < 0x10b36) return true\n if (cp < 0x10b40) return false\n if (cp < 0x10b56) return true\n return false\n }\n if (cp < 0x16e40) {\n if (cp < 0x11580) {\n if (cp < 0x11213) {\n if (cp < 0x11083) {\n if (cp < 0x10d00) {\n if (cp < 0x10b60) return false\n if (cp < 0x10b73) return true\n if (cp < 0x10b80) return false\n if (cp < 0x10b92) return true\n if (cp < 0x10c00) return false\n if (cp < 0x10c49) return true\n if (cp < 0x10c80) return false\n if (cp < 0x10cb3) return true\n if (cp < 0x10cc0) return false\n if (cp < 0x10cf3) return true\n return false\n }\n if (cp < 0x10d24) return true\n if (cp < 0x10f00) return false\n if (cp < 0x10f1d) return true\n if (cp === 0x10f27) return true\n if (cp < 0x10f30) return false\n if (cp < 0x10f46) return true\n if (cp < 0x11003) return false\n if (cp < 0x11038) return true\n return false\n }\n if (cp < 0x11176) {\n if (cp < 0x11083) return false\n if (cp < 0x110b0) return true\n if (cp < 0x110d0) return false\n if (cp < 0x110e9) return true\n if (cp < 0x11103) return false\n if (cp < 0x11127) return true\n if (cp === 0x11144) return true\n if (cp < 0x11150) return false\n if (cp < 0x11173) return true\n return false\n }\n if (cp === 0x11176) return true\n if (cp < 0x11183) return false\n if (cp < 0x111b3) return true\n if (cp < 0x111c1) return false\n if (cp < 0x111c5) return true\n if (cp === 0x111da) return true\n if (cp === 0x111dc) return true\n if (cp < 0x11200) return false\n if (cp < 0x11212) return true\n return false\n }\n if (cp < 0x1132a) {\n if (cp < 0x1129f) {\n if (cp < 0x11213) return false\n if (cp < 0x1122c) return true\n if (cp < 0x11280) return false\n if (cp < 0x11287) return true\n if (cp === 0x11288) return true\n if (cp < 0x1128a) return false\n if (cp < 0x1128e) return true\n if (cp < 0x1128f) return false\n if (cp < 0x1129e) return true\n return false\n }\n if (cp < 0x112a9) return true\n if (cp < 0x112b0) return false\n if (cp < 0x112df) return true\n if (cp < 0x11305) return false\n if (cp < 0x1130d) return true\n if (cp < 0x1130f) return false\n if (cp < 0x11311) return true\n if (cp < 0x11313) return false\n if (cp < 0x11329) return true\n return false\n }\n if (cp < 0x1135d) {\n if (cp < 0x1132a) return false\n if (cp < 0x11331) return true\n if (cp < 0x11332) return false\n if (cp < 0x11334) return true\n if (cp < 0x11335) return false\n if (cp < 0x1133a) return true\n if (cp === 0x1133d) return true\n if (cp === 0x11350) return true\n return false\n }\n if (cp < 0x11362) return true\n if (cp < 0x11400) return false\n if (cp < 0x11435) return true\n if (cp < 0x11447) return false\n if (cp < 0x1144b) return true\n if (cp < 0x11480) return false\n if (cp < 0x114b0) return true\n if (cp < 0x114c4) return false\n if (cp < 0x114c6) return true\n if (cp === 0x114c7) return true\n return false\n }\n if (cp < 0x11d00) {\n if (cp < 0x11a0b) {\n if (cp < 0x11700) {\n if (cp < 0x11580) return false\n if (cp < 0x115af) return true\n if (cp < 0x115d8) return false\n if (cp < 0x115dc) return true\n if (cp < 0x11600) return false\n if (cp < 0x11630) return true\n if (cp === 0x11644) return true\n if (cp < 0x11680) return false\n if (cp < 0x116ab) return true\n return false\n }\n if (cp < 0x1171b) return true\n if (cp < 0x11800) return false\n if (cp < 0x1182c) return true\n if (cp < 0x118a0) return false\n if (cp < 0x118e0) return true\n if (cp === 0x118ff) return true\n if (cp === 0x11a00) return true\n return false\n }\n if (cp < 0x11a9d) {\n if (cp < 0x11a0b) return false\n if (cp < 0x11a33) return true\n if (cp === 0x11a3a) return true\n if (cp === 0x11a50) return true\n if (cp < 0x11a5c) return false\n if (cp < 0x11a84) return true\n if (cp < 0x11a86) return false\n if (cp < 0x11a8a) return true\n return false\n }\n if (cp === 0x11a9d) return true\n if (cp < 0x11ac0) return false\n if (cp < 0x11af9) return true\n if (cp < 0x11c00) return false\n if (cp < 0x11c09) return true\n if (cp < 0x11c0a) return false\n if (cp < 0x11c2f) return true\n if (cp === 0x11c40) return true\n if (cp < 0x11c72) return false\n if (cp < 0x11c90) return true\n return false\n }\n if (cp < 0x12400) {\n if (cp < 0x11d67) {\n if (cp < 0x11d00) return false\n if (cp < 0x11d07) return true\n if (cp < 0x11d08) return false\n if (cp < 0x11d0a) return true\n if (cp < 0x11d0b) return false\n if (cp < 0x11d31) return true\n if (cp === 0x11d46) return true\n if (cp < 0x11d60) return false\n if (cp < 0x11d66) return true\n return false\n }\n if (cp < 0x11d69) return true\n if (cp < 0x11d6a) return false\n if (cp < 0x11d8a) return true\n if (cp === 0x11d98) return true\n if (cp < 0x11ee0) return false\n if (cp < 0x11ef3) return true\n if (cp < 0x12000) return false\n if (cp < 0x1239a) return true\n return false\n }\n if (cp < 0x16a40) {\n if (cp < 0x12400) return false\n if (cp < 0x1246f) return true\n if (cp < 0x12480) return false\n if (cp < 0x12544) return true\n if (cp < 0x13000) return false\n if (cp < 0x1342f) return true\n if (cp < 0x14400) return false\n if (cp < 0x14647) return true\n if (cp < 0x16800) return false\n if (cp < 0x16a39) return true\n return false\n }\n if (cp < 0x16a5f) return true\n if (cp < 0x16ad0) return false\n if (cp < 0x16aee) return true\n if (cp < 0x16b00) return false\n if (cp < 0x16b30) return true\n if (cp < 0x16b40) return false\n if (cp < 0x16b44) return true\n if (cp < 0x16b63) return false\n if (cp < 0x16b78) return true\n if (cp < 0x16b7d) return false\n if (cp < 0x16b90) return true\n return false\n }\n if (cp < 0x1d7c4) {\n if (cp < 0x1d4bd) {\n if (cp < 0x1bc70) {\n if (cp < 0x17000) {\n if (cp < 0x16e40) return false\n if (cp < 0x16e80) return true\n if (cp < 0x16f00) return false\n if (cp < 0x16f45) return true\n if (cp === 0x16f50) return true\n if (cp < 0x16f93) return false\n if (cp < 0x16fa0) return true\n if (cp < 0x16fe0) return false\n if (cp < 0x16fe2) return true\n return false\n }\n if (cp < 0x187f2) return true\n if (cp < 0x18800) return false\n if (cp < 0x18af3) return true\n if (cp < 0x1b000) return false\n if (cp < 0x1b11f) return true\n if (cp < 0x1b170) return false\n if (cp < 0x1b2fc) return true\n if (cp < 0x1bc00) return false\n if (cp < 0x1bc6b) return true\n return false\n }\n if (cp < 0x1d49e) {\n if (cp < 0x1bc70) return false\n if (cp < 0x1bc7d) return true\n if (cp < 0x1bc80) return false\n if (cp < 0x1bc89) return true\n if (cp < 0x1bc90) return false\n if (cp < 0x1bc9a) return true\n if (cp < 0x1d400) return false\n if (cp < 0x1d455) return true\n if (cp < 0x1d456) return false\n if (cp < 0x1d49d) return true\n return false\n }\n if (cp < 0x1d4a0) return true\n if (cp === 0x1d4a2) return true\n if (cp < 0x1d4a5) return false\n if (cp < 0x1d4a7) return true\n if (cp < 0x1d4a9) return false\n if (cp < 0x1d4ad) return true\n if (cp < 0x1d4ae) return false\n if (cp < 0x1d4ba) return true\n if (cp === 0x1d4bb) return true\n return false\n }\n if (cp < 0x1d552) {\n if (cp < 0x1d51e) {\n if (cp < 0x1d4bd) return false\n if (cp < 0x1d4c4) return true\n if (cp < 0x1d4c5) return false\n if (cp < 0x1d506) return true\n if (cp < 0x1d507) return false\n if (cp < 0x1d50b) return true\n if (cp < 0x1d50d) return false\n if (cp < 0x1d515) return true\n if (cp < 0x1d516) return false\n if (cp < 0x1d51d) return true\n return false\n }\n if (cp < 0x1d53a) return true\n if (cp < 0x1d53b) return false\n if (cp < 0x1d53f) return true\n if (cp < 0x1d540) return false\n if (cp < 0x1d545) return true\n if (cp === 0x1d546) return true\n if (cp < 0x1d54a) return false\n if (cp < 0x1d551) return true\n return false\n }\n if (cp < 0x1d716) {\n if (cp < 0x1d552) return false\n if (cp < 0x1d6a6) return true\n if (cp < 0x1d6a8) return false\n if (cp < 0x1d6c1) return true\n if (cp < 0x1d6c2) return false\n if (cp < 0x1d6db) return true\n if (cp < 0x1d6dc) return false\n if (cp < 0x1d6fb) return true\n if (cp < 0x1d6fc) return false\n if (cp < 0x1d715) return true\n return false\n }\n if (cp < 0x1d735) return true\n if (cp < 0x1d736) return false\n if (cp < 0x1d74f) return true\n if (cp < 0x1d750) return false\n if (cp < 0x1d76f) return true\n if (cp < 0x1d770) return false\n if (cp < 0x1d789) return true\n if (cp < 0x1d78a) return false\n if (cp < 0x1d7a9) return true\n if (cp < 0x1d7aa) return false\n if (cp < 0x1d7c3) return true\n return false\n }\n if (cp < 0x1ee5b) {\n if (cp < 0x1ee39) {\n if (cp < 0x1ee21) {\n if (cp < 0x1d7c4) return false\n if (cp < 0x1d7cc) return true\n if (cp < 0x1e800) return false\n if (cp < 0x1e8c5) return true\n if (cp < 0x1e900) return false\n if (cp < 0x1e944) return true\n if (cp < 0x1ee00) return false\n if (cp < 0x1ee04) return true\n if (cp < 0x1ee05) return false\n if (cp < 0x1ee20) return true\n return false\n }\n if (cp < 0x1ee23) return true\n if (cp === 0x1ee24) return true\n if (cp === 0x1ee27) return true\n if (cp < 0x1ee29) return false\n if (cp < 0x1ee33) return true\n if (cp < 0x1ee34) return false\n if (cp < 0x1ee38) return true\n return false\n }\n if (cp < 0x1ee4b) {\n if (cp === 0x1ee39) return true\n if (cp === 0x1ee3b) return true\n if (cp === 0x1ee42) return true\n if (cp === 0x1ee47) return true\n if (cp === 0x1ee49) return true\n return false\n }\n if (cp === 0x1ee4b) return true\n if (cp < 0x1ee4d) return false\n if (cp < 0x1ee50) return true\n if (cp < 0x1ee51) return false\n if (cp < 0x1ee53) return true\n if (cp === 0x1ee54) return true\n if (cp === 0x1ee57) return true\n if (cp === 0x1ee59) return true\n return false\n }\n if (cp < 0x1ee80) {\n if (cp < 0x1ee67) {\n if (cp === 0x1ee5b) return true\n if (cp === 0x1ee5d) return true\n if (cp === 0x1ee5f) return true\n if (cp < 0x1ee61) return false\n if (cp < 0x1ee63) return true\n if (cp === 0x1ee64) return true\n return false\n }\n if (cp < 0x1ee6b) return true\n if (cp < 0x1ee6c) return false\n if (cp < 0x1ee73) return true\n if (cp < 0x1ee74) return false\n if (cp < 0x1ee78) return true\n if (cp < 0x1ee79) return false\n if (cp < 0x1ee7d) return true\n if (cp === 0x1ee7e) return true\n return false\n }\n if (cp < 0x20000) {\n if (cp < 0x1ee80) return false\n if (cp < 0x1ee8a) return true\n if (cp < 0x1ee8b) return false\n if (cp < 0x1ee9c) return true\n if (cp < 0x1eea1) return false\n if (cp < 0x1eea4) return true\n if (cp < 0x1eea5) return false\n if (cp < 0x1eeaa) return true\n if (cp < 0x1eeab) return false\n if (cp < 0x1eebc) return true\n return false\n }\n if (cp < 0x2a6d7) return true\n if (cp < 0x2a700) return false\n if (cp < 0x2b735) return true\n if (cp < 0x2b740) return false\n if (cp < 0x2b81e) return true\n if (cp < 0x2b820) return false\n if (cp < 0x2cea2) return true\n if (cp < 0x2ceb0) return false\n if (cp < 0x2ebe1) return true\n if (cp < 0x2f800) return false\n if (cp < 0x2fa1e) return true\n return false\n}\n\nfunction isLargeIdContinue(cp: number): boolean {\n if (cp < 0x1cd0) {\n if (cp < 0xd82) {\n if (cp < 0xa83) {\n if (cp < 0x93b) {\n if (cp < 0x6ea) {\n if (cp < 0x5c7) {\n if (cp === 0xb7) return true\n if (cp < 0x300) return false\n if (cp < 0x370) return true\n if (cp === 0x387) return true\n if (cp < 0x483) return false\n if (cp < 0x488) return true\n if (cp < 0x591) return false\n if (cp < 0x5be) return true\n if (cp === 0x5bf) return true\n if (cp < 0x5c1) return false\n if (cp < 0x5c3) return true\n if (cp < 0x5c4) return false\n if (cp < 0x5c6) return true\n return false\n }\n if (cp === 0x5c7) return true\n if (cp < 0x610) return false\n if (cp < 0x61b) return true\n if (cp < 0x64b) return false\n if (cp < 0x660) return true\n if (cp < 0x660) return false\n if (cp < 0x66a) return true\n if (cp === 0x670) return true\n if (cp < 0x6d6) return false\n if (cp < 0x6dd) return true\n if (cp < 0x6df) return false\n if (cp < 0x6e5) return true\n if (cp < 0x6e7) return false\n if (cp < 0x6e9) return true\n return false\n }\n if (cp < 0x816) {\n if (cp < 0x6ea) return false\n if (cp < 0x6ee) return true\n if (cp < 0x6f0) return false\n if (cp < 0x6fa) return true\n if (cp === 0x711) return true\n if (cp < 0x730) return false\n if (cp < 0x74b) return true\n if (cp < 0x7a6) return false\n if (cp < 0x7b1) return true\n if (cp < 0x7c0) return false\n if (cp < 0x7ca) return true\n if (cp < 0x7eb) return false\n if (cp < 0x7f4) return true\n if (cp === 0x7fd) return true\n return false\n }\n if (cp < 0x81a) return true\n if (cp < 0x81b) return false\n if (cp < 0x824) return true\n if (cp < 0x825) return false\n if (cp < 0x828) return true\n if (cp < 0x829) return false\n if (cp < 0x82e) return true\n if (cp < 0x859) return false\n if (cp < 0x85c) return true\n if (cp < 0x8d3) return false\n if (cp < 0x8e2) return true\n if (cp < 0x8e3) return false\n if (cp < 0x903) return true\n if (cp === 0x903) return true\n if (cp === 0x93a) return true\n return false\n }\n if (cp < 0x9cd) {\n if (cp < 0x962) {\n if (cp === 0x93b) return true\n if (cp === 0x93c) return true\n if (cp < 0x93e) return false\n if (cp < 0x941) return true\n if (cp < 0x941) return false\n if (cp < 0x949) return true\n if (cp < 0x949) return false\n if (cp < 0x94d) return true\n if (cp === 0x94d) return true\n if (cp < 0x94e) return false\n if (cp < 0x950) return true\n if (cp < 0x951) return false\n if (cp < 0x958) return true\n return false\n }\n if (cp < 0x964) return true\n if (cp < 0x966) return false\n if (cp < 0x970) return true\n if (cp === 0x981) return true\n if (cp < 0x982) return false\n if (cp < 0x984) return true\n if (cp === 0x9bc) return true\n if (cp < 0x9be) return false\n if (cp < 0x9c1) return true\n if (cp < 0x9c1) return false\n if (cp < 0x9c5) return true\n if (cp < 0x9c7) return false\n if (cp < 0x9c9) return true\n if (cp < 0x9cb) return false\n if (cp < 0x9cd) return true\n return false\n }\n if (cp < 0xa3e) {\n if (cp === 0x9cd) return true\n if (cp === 0x9d7) return true\n if (cp < 0x9e2) return false\n if (cp < 0x9e4) return true\n if (cp < 0x9e6) return false\n if (cp < 0x9f0) return true\n if (cp === 0x9fe) return true\n if (cp < 0xa01) return false\n if (cp < 0xa03) return true\n if (cp === 0xa03) return true\n if (cp === 0xa3c) return true\n return false\n }\n if (cp < 0xa41) return true\n if (cp < 0xa41) return false\n if (cp < 0xa43) return true\n if (cp < 0xa47) return false\n if (cp < 0xa49) return true\n if (cp < 0xa4b) return false\n if (cp < 0xa4e) return true\n if (cp === 0xa51) return true\n if (cp < 0xa66) return false\n if (cp < 0xa70) return true\n if (cp < 0xa70) return false\n if (cp < 0xa72) return true\n if (cp === 0xa75) return true\n if (cp < 0xa81) return false\n if (cp < 0xa83) return true\n return false\n }\n if (cp < 0xc00) {\n if (cp < 0xb41) {\n if (cp < 0xae2) {\n if (cp === 0xa83) return true\n if (cp === 0xabc) return true\n if (cp < 0xabe) return false\n if (cp < 0xac1) return true\n if (cp < 0xac1) return false\n if (cp < 0xac6) return true\n if (cp < 0xac7) return false\n if (cp < 0xac9) return true\n if (cp === 0xac9) return true\n if (cp < 0xacb) return false\n if (cp < 0xacd) return true\n if (cp === 0xacd) return true\n return false\n }\n if (cp < 0xae4) return true\n if (cp < 0xae6) return false\n if (cp < 0xaf0) return true\n if (cp < 0xafa) return false\n if (cp < 0xb00) return true\n if (cp === 0xb01) return true\n if (cp < 0xb02) return false\n if (cp < 0xb04) return true\n if (cp === 0xb3c) return true\n if (cp === 0xb3e) return true\n if (cp === 0xb3f) return true\n if (cp === 0xb40) return true\n return false\n }\n if (cp < 0xb82) {\n if (cp < 0xb41) return false\n if (cp < 0xb45) return true\n if (cp < 0xb47) return false\n if (cp < 0xb49) return true\n if (cp < 0xb4b) return false\n if (cp < 0xb4d) return true\n if (cp === 0xb4d) return true\n if (cp === 0xb56) return true\n if (cp === 0xb57) return true\n if (cp < 0xb62) return false\n if (cp < 0xb64) return true\n if (cp < 0xb66) return false\n if (cp < 0xb70) return true\n return false\n }\n if (cp === 0xb82) return true\n if (cp < 0xbbe) return false\n if (cp < 0xbc0) return true\n if (cp === 0xbc0) return true\n if (cp < 0xbc1) return false\n if (cp < 0xbc3) return true\n if (cp < 0xbc6) return false\n if (cp < 0xbc9) return true\n if (cp < 0xbca) return false\n if (cp < 0xbcd) return true\n if (cp === 0xbcd) return true\n if (cp === 0xbd7) return true\n if (cp < 0xbe6) return false\n if (cp < 0xbf0) return true\n return false\n }\n if (cp < 0xcc7) {\n if (cp < 0xc62) {\n if (cp === 0xc00) return true\n if (cp < 0xc01) return false\n if (cp < 0xc04) return true\n if (cp === 0xc04) return true\n if (cp < 0xc3e) return false\n if (cp < 0xc41) return true\n if (cp < 0xc41) return false\n if (cp < 0xc45) return true\n if (cp < 0xc46) return false\n if (cp < 0xc49) return true\n if (cp < 0xc4a) return false\n if (cp < 0xc4e) return true\n if (cp < 0xc55) return false\n if (cp < 0xc57) return true\n return false\n }\n if (cp < 0xc64) return true\n if (cp < 0xc66) return false\n if (cp < 0xc70) return true\n if (cp === 0xc81) return true\n if (cp < 0xc82) return false\n if (cp < 0xc84) return true\n if (cp === 0xcbc) return true\n if (cp === 0xcbe) return true\n if (cp === 0xcbf) return true\n if (cp < 0xcc0) return false\n if (cp < 0xcc5) return true\n if (cp === 0xcc6) return true\n return false\n }\n if (cp < 0xd3b) {\n if (cp < 0xcc7) return false\n if (cp < 0xcc9) return true\n if (cp < 0xcca) return false\n if (cp < 0xccc) return true\n if (cp < 0xccc) return false\n if (cp < 0xcce) return true\n if (cp < 0xcd5) return false\n if (cp < 0xcd7) return true\n if (cp < 0xce2) return false\n if (cp < 0xce4) return true\n if (cp < 0xce6) return false\n if (cp < 0xcf0) return true\n if (cp < 0xd00) return false\n if (cp < 0xd02) return true\n if (cp < 0xd02) return false\n if (cp < 0xd04) return true\n return false\n }\n if (cp < 0xd3d) return true\n if (cp < 0xd3e) return false\n if (cp < 0xd41) return true\n if (cp < 0xd41) return false\n if (cp < 0xd45) return true\n if (cp < 0xd46) return false\n if (cp < 0xd49) return true\n if (cp < 0xd4a) return false\n if (cp < 0xd4d) return true\n if (cp === 0xd4d) return true\n if (cp === 0xd57) return true\n if (cp < 0xd62) return false\n if (cp < 0xd64) return true\n if (cp < 0xd66) return false\n if (cp < 0xd70) return true\n return false\n }\n if (cp < 0x17e0) {\n if (cp < 0x1038) {\n if (cp < 0xf18) {\n if (cp < 0xe31) {\n if (cp < 0xd82) return false\n if (cp < 0xd84) return true\n if (cp === 0xdca) return true\n if (cp < 0xdcf) return false\n if (cp < 0xdd2) return true\n if (cp < 0xdd2) return false\n if (cp < 0xdd5) return true\n if (cp === 0xdd6) return true\n if (cp < 0xdd8) return false\n if (cp < 0xde0) return true\n if (cp < 0xde6) return false\n if (cp < 0xdf0) return true\n if (cp < 0xdf2) return false\n if (cp < 0xdf4) return true\n return false\n }\n if (cp === 0xe31) return true\n if (cp < 0xe34) return false\n if (cp < 0xe3b) return true\n if (cp < 0xe47) return false\n if (cp < 0xe4f) return true\n if (cp < 0xe50) return false\n if (cp < 0xe5a) return true\n if (cp === 0xeb1) return true\n if (cp < 0xeb4) return false\n if (cp < 0xeba) return true\n if (cp < 0xebb) return false\n if (cp < 0xebd) return true\n if (cp < 0xec8) return false\n if (cp < 0xece) return true\n if (cp < 0xed0) return false\n if (cp < 0xeda) return true\n return false\n }\n if (cp < 0xf80) {\n if (cp < 0xf18) return false\n if (cp < 0xf1a) return true\n if (cp < 0xf20) return false\n if (cp < 0xf2a) return true\n if (cp === 0xf35) return true\n if (cp === 0xf37) return true\n if (cp === 0xf39) return true\n if (cp < 0xf3e) return false\n if (cp < 0xf40) return true\n if (cp < 0xf71) return false\n if (cp < 0xf7f) return true\n if (cp === 0xf7f) return true\n return false\n }\n if (cp < 0xf85) return true\n if (cp < 0xf86) return false\n if (cp < 0xf88) return true\n if (cp < 0xf8d) return false\n if (cp < 0xf98) return true\n if (cp < 0xf99) return false\n if (cp < 0xfbd) return true\n if (cp === 0xfc6) return true\n if (cp < 0x102b) return false\n if (cp < 0x102d) return true\n if (cp < 0x102d) return false\n if (cp < 0x1031) return true\n if (cp === 0x1031) return true\n if (cp < 0x1032) return false\n if (cp < 0x1038) return true\n return false\n }\n if (cp < 0x1090) {\n if (cp < 0x1062) {\n if (cp === 0x1038) return true\n if (cp < 0x1039) return false\n if (cp < 0x103b) return true\n if (cp < 0x103b) return false\n if (cp < 0x103d) return true\n if (cp < 0x103d) return false\n if (cp < 0x103f) return true\n if (cp < 0x1040) return false\n if (cp < 0x104a) return true\n if (cp < 0x1056) return false\n if (cp < 0x1058) return true\n if (cp < 0x1058) return false\n if (cp < 0x105a) return true\n if (cp < 0x105e) return false\n if (cp < 0x1061) return true\n return false\n }\n if (cp < 0x1065) return true\n if (cp < 0x1067) return false\n if (cp < 0x106e) return true\n if (cp < 0x1071) return false\n if (cp < 0x1075) return true\n if (cp === 0x1082) return true\n if (cp < 0x1083) return false\n if (cp < 0x1085) return true\n if (cp < 0x1085) return false\n if (cp < 0x1087) return true\n if (cp < 0x1087) return false\n if (cp < 0x108d) return true\n if (cp === 0x108d) return true\n if (cp === 0x108f) return true\n return false\n }\n if (cp < 0x1772) {\n if (cp < 0x1090) return false\n if (cp < 0x109a) return true\n if (cp < 0x109a) return false\n if (cp < 0x109d) return true\n if (cp === 0x109d) return true\n if (cp < 0x135d) return false\n if (cp < 0x1360) return true\n if (cp < 0x1369) return false\n if (cp < 0x1372) return true\n if (cp < 0x1712) return false\n if (cp < 0x1715) return true\n if (cp < 0x1732) return false\n if (cp < 0x1735) return true\n if (cp < 0x1752) return false\n if (cp < 0x1754) return true\n return false\n }\n if (cp < 0x1774) return true\n if (cp < 0x17b4) return false\n if (cp < 0x17b6) return true\n if (cp === 0x17b6) return true\n if (cp < 0x17b7) return false\n if (cp < 0x17be) return true\n if (cp < 0x17be) return false\n if (cp < 0x17c6) return true\n if (cp === 0x17c6) return true\n if (cp < 0x17c7) return false\n if (cp < 0x17c9) return true\n if (cp < 0x17c9) return false\n if (cp < 0x17d4) return true\n if (cp === 0x17dd) return true\n return false\n }\n if (cp < 0x1b04) {\n if (cp < 0x1a1b) {\n if (cp < 0x1930) {\n if (cp < 0x17e0) return false\n if (cp < 0x17ea) return true\n if (cp < 0x180b) return false\n if (cp < 0x180e) return true\n if (cp < 0x1810) return false\n if (cp < 0x181a) return true\n if (cp === 0x18a9) return true\n if (cp < 0x1920) return false\n if (cp < 0x1923) return true\n if (cp < 0x1923) return false\n if (cp < 0x1927) return true\n if (cp < 0x1927) return false\n if (cp < 0x1929) return true\n if (cp < 0x1929) return false\n if (cp < 0x192c) return true\n return false\n }\n if (cp < 0x1932) return true\n if (cp === 0x1932) return true\n if (cp < 0x1933) return false\n if (cp < 0x1939) return true\n if (cp < 0x1939) return false\n if (cp < 0x193c) return true\n if (cp < 0x1946) return false\n if (cp < 0x1950) return true\n if (cp < 0x19d0) return false\n if (cp < 0x19da) return true\n if (cp === 0x19da) return true\n if (cp < 0x1a17) return false\n if (cp < 0x1a19) return true\n if (cp < 0x1a19) return false\n if (cp < 0x1a1b) return true\n return false\n }\n if (cp < 0x1a63) {\n if (cp === 0x1a1b) return true\n if (cp === 0x1a55) return true\n if (cp === 0x1a56) return true\n if (cp === 0x1a57) return true\n if (cp < 0x1a58) return false\n if (cp < 0x1a5f) return true\n if (cp === 0x1a60) return true\n if (cp === 0x1a61) return true\n if (cp === 0x1a62) return true\n return false\n }\n if (cp < 0x1a65) return true\n if (cp < 0x1a65) return false\n if (cp < 0x1a6d) return true\n if (cp < 0x1a6d) return false\n if (cp < 0x1a73) return true\n if (cp < 0x1a73) return false\n if (cp < 0x1a7d) return true\n if (cp === 0x1a7f) return true\n if (cp < 0x1a80) return false\n if (cp < 0x1a8a) return true\n if (cp < 0x1a90) return false\n if (cp < 0x1a9a) return true\n if (cp < 0x1ab0) return false\n if (cp < 0x1abe) return true\n if (cp < 0x1b00) return false\n if (cp < 0x1b04) return true\n return false\n }\n if (cp < 0x1baa) {\n if (cp < 0x1b43) {\n if (cp === 0x1b04) return true\n if (cp === 0x1b34) return true\n if (cp === 0x1b35) return true\n if (cp < 0x1b36) return false\n if (cp < 0x1b3b) return true\n if (cp === 0x1b3b) return true\n if (cp === 0x1b3c) return true\n if (cp < 0x1b3d) return false\n if (cp < 0x1b42) return true\n if (cp === 0x1b42) return true\n return false\n }\n if (cp < 0x1b45) return true\n if (cp < 0x1b50) return false\n if (cp < 0x1b5a) return true\n if (cp < 0x1b6b) return false\n if (cp < 0x1b74) return true\n if (cp < 0x1b80) return false\n if (cp < 0x1b82) return true\n if (cp === 0x1b82) return true\n if (cp === 0x1ba1) return true\n if (cp < 0x1ba2) return false\n if (cp < 0x1ba6) return true\n if (cp < 0x1ba6) return false\n if (cp < 0x1ba8) return true\n if (cp < 0x1ba8) return false\n if (cp < 0x1baa) return true\n return false\n }\n if (cp < 0x1bee) {\n if (cp === 0x1baa) return true\n if (cp < 0x1bab) return false\n if (cp < 0x1bae) return true\n if (cp < 0x1bb0) return false\n if (cp < 0x1bba) return true\n if (cp === 0x1be6) return true\n if (cp === 0x1be7) return true\n if (cp < 0x1be8) return false\n if (cp < 0x1bea) return true\n if (cp < 0x1bea) return false\n if (cp < 0x1bed) return true\n if (cp === 0x1bed) return true\n return false\n }\n if (cp === 0x1bee) return true\n if (cp < 0x1bef) return false\n if (cp < 0x1bf2) return true\n if (cp < 0x1bf2) return false\n if (cp < 0x1bf4) return true\n if (cp < 0x1c24) return false\n if (cp < 0x1c2c) return true\n if (cp < 0x1c2c) return false\n if (cp < 0x1c34) return true\n if (cp < 0x1c34) return false\n if (cp < 0x1c36) return true\n if (cp < 0x1c36) return false\n if (cp < 0x1c38) return true\n if (cp < 0x1c40) return false\n if (cp < 0x1c4a) return true\n if (cp < 0x1c50) return false\n if (cp < 0x1c5a) return true\n return false\n }\n if (cp < 0x1123e) {\n if (cp < 0xaab7) {\n if (cp < 0xa8b4) {\n if (cp < 0x2d7f) {\n if (cp < 0x1cf8) {\n if (cp < 0x1cd0) return false\n if (cp < 0x1cd3) return true\n if (cp < 0x1cd4) return false\n if (cp < 0x1ce1) return true\n if (cp === 0x1ce1) return true\n if (cp < 0x1ce2) return false\n if (cp < 0x1ce9) return true\n if (cp === 0x1ced) return true\n if (cp < 0x1cf2) return false\n if (cp < 0x1cf4) return true\n if (cp === 0x1cf4) return true\n if (cp === 0x1cf7) return true\n return false\n }\n if (cp < 0x1cfa) return true\n if (cp < 0x1dc0) return false\n if (cp < 0x1dfa) return true\n if (cp < 0x1dfb) return false\n if (cp < 0x1e00) return true\n if (cp < 0x203f) return false\n if (cp < 0x2041) return true\n if (cp === 0x2054) return true\n if (cp < 0x20d0) return false\n if (cp < 0x20dd) return true\n if (cp === 0x20e1) return true\n if (cp < 0x20e5) return false\n if (cp < 0x20f1) return true\n if (cp < 0x2cef) return false\n if (cp < 0x2cf2) return true\n return false\n }\n if (cp < 0xa69e) {\n if (cp === 0x2d7f) return true\n if (cp < 0x2de0) return false\n if (cp < 0x2e00) return true\n if (cp < 0x302a) return false\n if (cp < 0x302e) return true\n if (cp < 0x302e) return false\n if (cp < 0x3030) return true\n if (cp < 0x3099) return false\n if (cp < 0x309b) return true\n if (cp < 0xa620) return false\n if (cp < 0xa62a) return true\n if (cp === 0xa66f) return true\n if (cp < 0xa674) return false\n if (cp < 0xa67e) return true\n return false\n }\n if (cp < 0xa6a0) return true\n if (cp < 0xa6f0) return false\n if (cp < 0xa6f2) return true\n if (cp === 0xa802) return true\n if (cp === 0xa806) return true\n if (cp === 0xa80b) return true\n if (cp < 0xa823) return false\n if (cp < 0xa825) return true\n if (cp < 0xa825) return false\n if (cp < 0xa827) return true\n if (cp === 0xa827) return true\n if (cp < 0xa880) return false\n if (cp < 0xa882) return true\n return false\n }\n if (cp < 0xa9d0) {\n if (cp < 0xa952) {\n if (cp < 0xa8b4) return false\n if (cp < 0xa8c4) return true\n if (cp < 0xa8c4) return false\n if (cp < 0xa8c6) return true\n if (cp < 0xa8d0) return false\n if (cp < 0xa8da) return true\n if (cp < 0xa8e0) return false\n if (cp < 0xa8f2) return true\n if (cp === 0xa8ff) return true\n if (cp < 0xa900) return false\n if (cp < 0xa90a) return true\n if (cp < 0xa926) return false\n if (cp < 0xa92e) return true\n if (cp < 0xa947) return false\n if (cp < 0xa952) return true\n return false\n }\n if (cp < 0xa954) return true\n if (cp < 0xa980) return false\n if (cp < 0xa983) return true\n if (cp === 0xa983) return true\n if (cp === 0xa9b3) return true\n if (cp < 0xa9b4) return false\n if (cp < 0xa9b6) return true\n if (cp < 0xa9b6) return false\n if (cp < 0xa9ba) return true\n if (cp < 0xa9ba) return false\n if (cp < 0xa9bc) return true\n if (cp === 0xa9bc) return true\n if (cp < 0xa9bd) return false\n if (cp < 0xa9c1) return true\n return false\n }\n if (cp < 0xaa43) {\n if (cp < 0xa9d0) return false\n if (cp < 0xa9da) return true\n if (cp === 0xa9e5) return true\n if (cp < 0xa9f0) return false\n if (cp < 0xa9fa) return true\n if (cp < 0xaa29) return false\n if (cp < 0xaa2f) return true\n if (cp < 0xaa2f) return false\n if (cp < 0xaa31) return true\n if (cp < 0xaa31) return false\n if (cp < 0xaa33) return true\n if (cp < 0xaa33) return false\n if (cp < 0xaa35) return true\n if (cp < 0xaa35) return false\n if (cp < 0xaa37) return true\n return false\n }\n if (cp === 0xaa43) return true\n if (cp === 0xaa4c) return true\n if (cp === 0xaa4d) return true\n if (cp < 0xaa50) return false\n if (cp < 0xaa5a) return true\n if (cp === 0xaa7b) return true\n if (cp === 0xaa7c) return true\n if (cp === 0xaa7d) return true\n if (cp === 0xaab0) return true\n if (cp < 0xaab2) return false\n if (cp < 0xaab5) return true\n return false\n }\n if (cp < 0x10d30) {\n if (cp < 0xfe00) {\n if (cp < 0xabe3) {\n if (cp < 0xaab7) return false\n if (cp < 0xaab9) return true\n if (cp < 0xaabe) return false\n if (cp < 0xaac0) return true\n if (cp === 0xaac1) return true\n if (cp === 0xaaeb) return true\n if (cp < 0xaaec) return false\n if (cp < 0xaaee) return true\n if (cp < 0xaaee) return false\n if (cp < 0xaaf0) return true\n if (cp === 0xaaf5) return true\n if (cp === 0xaaf6) return true\n return false\n }\n if (cp < 0xabe5) return true\n if (cp === 0xabe5) return true\n if (cp < 0xabe6) return false\n if (cp < 0xabe8) return true\n if (cp === 0xabe8) return true\n if (cp < 0xabe9) return false\n if (cp < 0xabeb) return true\n if (cp === 0xabec) return true\n if (cp === 0xabed) return true\n if (cp < 0xabf0) return false\n if (cp < 0xabfa) return true\n if (cp === 0xfb1e) return true\n return false\n }\n if (cp < 0x10376) {\n if (cp < 0xfe00) return false\n if (cp < 0xfe10) return true\n if (cp < 0xfe20) return false\n if (cp < 0xfe30) return true\n if (cp < 0xfe33) return false\n if (cp < 0xfe35) return true\n if (cp < 0xfe4d) return false\n if (cp < 0xfe50) return true\n if (cp < 0xff10) return false\n if (cp < 0xff1a) return true\n if (cp === 0xff3f) return true\n if (cp === 0x101fd) return true\n if (cp === 0x102e0) return true\n return false\n }\n if (cp < 0x1037b) return true\n if (cp < 0x104a0) return false\n if (cp < 0x104aa) return true\n if (cp < 0x10a01) return false\n if (cp < 0x10a04) return true\n if (cp < 0x10a05) return false\n if (cp < 0x10a07) return true\n if (cp < 0x10a0c) return false\n if (cp < 0x10a10) return true\n if (cp < 0x10a38) return false\n if (cp < 0x10a3b) return true\n if (cp === 0x10a3f) return true\n if (cp < 0x10ae5) return false\n if (cp < 0x10ae7) return true\n if (cp < 0x10d24) return false\n if (cp < 0x10d28) return true\n return false\n }\n if (cp < 0x1112d) {\n if (cp < 0x11082) {\n if (cp < 0x10d30) return false\n if (cp < 0x10d3a) return true\n if (cp < 0x10f46) return false\n if (cp < 0x10f51) return true\n if (cp === 0x11000) return true\n if (cp === 0x11001) return true\n if (cp === 0x11002) return true\n if (cp < 0x11038) return false\n if (cp < 0x11047) return true\n if (cp < 0x11066) return false\n if (cp < 0x11070) return true\n if (cp < 0x1107f) return false\n if (cp < 0x11082) return true\n return false\n }\n if (cp === 0x11082) return true\n if (cp < 0x110b0) return false\n if (cp < 0x110b3) return true\n if (cp < 0x110b3) return false\n if (cp < 0x110b7) return true\n if (cp < 0x110b7) return false\n if (cp < 0x110b9) return true\n if (cp < 0x110b9) return false\n if (cp < 0x110bb) return true\n if (cp < 0x110f0) return false\n if (cp < 0x110fa) return true\n if (cp < 0x11100) return false\n if (cp < 0x11103) return true\n if (cp < 0x11127) return false\n if (cp < 0x1112c) return true\n if (cp === 0x1112c) return true\n return false\n }\n if (cp < 0x111bf) {\n if (cp < 0x1112d) return false\n if (cp < 0x11135) return true\n if (cp < 0x11136) return false\n if (cp < 0x11140) return true\n if (cp < 0x11145) return false\n if (cp < 0x11147) return true\n if (cp === 0x11173) return true\n if (cp < 0x11180) return false\n if (cp < 0x11182) return true\n if (cp === 0x11182) return true\n if (cp < 0x111b3) return false\n if (cp < 0x111b6) return true\n if (cp < 0x111b6) return false\n if (cp < 0x111bf) return true\n return false\n }\n if (cp < 0x111c1) return true\n if (cp < 0x111c9) return false\n if (cp < 0x111cd) return true\n if (cp < 0x111d0) return false\n if (cp < 0x111da) return true\n if (cp < 0x1122c) return false\n if (cp < 0x1122f) return true\n if (cp < 0x1122f) return false\n if (cp < 0x11232) return true\n if (cp < 0x11232) return false\n if (cp < 0x11234) return true\n if (cp === 0x11234) return true\n if (cp === 0x11235) return true\n if (cp < 0x11236) return false\n if (cp < 0x11238) return true\n return false\n }\n if (cp < 0x11a33) {\n if (cp < 0x115af) {\n if (cp < 0x11435) {\n if (cp < 0x1133e) {\n if (cp === 0x1123e) return true\n if (cp === 0x112df) return true\n if (cp < 0x112e0) return false\n if (cp < 0x112e3) return true\n if (cp < 0x112e3) return false\n if (cp < 0x112eb) return true\n if (cp < 0x112f0) return false\n if (cp < 0x112fa) return true\n if (cp < 0x11300) return false\n if (cp < 0x11302) return true\n if (cp < 0x11302) return false\n if (cp < 0x11304) return true\n if (cp < 0x1133b) return false\n if (cp < 0x1133d) return true\n return false\n }\n if (cp < 0x11340) return true\n if (cp === 0x11340) return true\n if (cp < 0x11341) return false\n if (cp < 0x11345) return true\n if (cp < 0x11347) return false\n if (cp < 0x11349) return true\n if (cp < 0x1134b) return false\n if (cp < 0x1134e) return true\n if (cp === 0x11357) return true\n if (cp < 0x11362) return false\n if (cp < 0x11364) return true\n if (cp < 0x11366) return false\n if (cp < 0x1136d) return true\n if (cp < 0x11370) return false\n if (cp < 0x11375) return true\n return false\n }\n if (cp < 0x114b0) {\n if (cp < 0x11435) return false\n if (cp < 0x11438) return true\n if (cp < 0x11438) return false\n if (cp < 0x11440) return true\n if (cp < 0x11440) return false\n if (cp < 0x11442) return true\n if (cp < 0x11442) return false\n if (cp < 0x11445) return true\n if (cp === 0x11445) return true\n if (cp === 0x11446) return true\n if (cp < 0x11450) return false\n if (cp < 0x1145a) return true\n if (cp === 0x1145e) return true\n return false\n }\n if (cp < 0x114b3) return true\n if (cp < 0x114b3) return false\n if (cp < 0x114b9) return true\n if (cp === 0x114b9) return true\n if (cp === 0x114ba) return true\n if (cp < 0x114bb) return false\n if (cp < 0x114bf) return true\n if (cp < 0x114bf) return false\n if (cp < 0x114c1) return true\n if (cp === 0x114c1) return true\n if (cp < 0x114c2) return false\n if (cp < 0x114c4) return true\n if (cp < 0x114d0) return false\n if (cp < 0x114da) return true\n return false\n }\n if (cp < 0x116ae) {\n if (cp < 0x11633) {\n if (cp < 0x115af) return false\n if (cp < 0x115b2) return true\n if (cp < 0x115b2) return false\n if (cp < 0x115b6) return true\n if (cp < 0x115b8) return false\n if (cp < 0x115bc) return true\n if (cp < 0x115bc) return false\n if (cp < 0x115be) return true\n if (cp === 0x115be) return true\n if (cp < 0x115bf) return false\n if (cp < 0x115c1) return true\n if (cp < 0x115dc) return false\n if (cp < 0x115de) return true\n if (cp < 0x11630) return false\n if (cp < 0x11633) return true\n return false\n }\n if (cp < 0x1163b) return true\n if (cp < 0x1163b) return false\n if (cp < 0x1163d) return true\n if (cp === 0x1163d) return true\n if (cp === 0x1163e) return true\n if (cp < 0x1163f) return false\n if (cp < 0x11641) return true\n if (cp < 0x11650) return false\n if (cp < 0x1165a) return true\n if (cp === 0x116ab) return true\n if (cp === 0x116ac) return true\n if (cp === 0x116ad) return true\n return false\n }\n if (cp < 0x11726) {\n if (cp < 0x116ae) return false\n if (cp < 0x116b0) return true\n if (cp < 0x116b0) return false\n if (cp < 0x116b6) return true\n if (cp === 0x116b6) return true\n if (cp === 0x116b7) return true\n if (cp < 0x116c0) return false\n if (cp < 0x116ca) return true\n if (cp < 0x1171d) return false\n if (cp < 0x11720) return true\n if (cp < 0x11720) return false\n if (cp < 0x11722) return true\n if (cp < 0x11722) return false\n if (cp < 0x11726) return true\n return false\n }\n if (cp === 0x11726) return true\n if (cp < 0x11727) return false\n if (cp < 0x1172c) return true\n if (cp < 0x11730) return false\n if (cp < 0x1173a) return true\n if (cp < 0x1182c) return false\n if (cp < 0x1182f) return true\n if (cp < 0x1182f) return false\n if (cp < 0x11838) return true\n if (cp === 0x11838) return true\n if (cp < 0x11839) return false\n if (cp < 0x1183b) return true\n if (cp < 0x118e0) return false\n if (cp < 0x118ea) return true\n if (cp < 0x11a01) return false\n if (cp < 0x11a0b) return true\n return false\n }\n if (cp < 0x11d97) {\n if (cp < 0x11ca9) {\n if (cp < 0x11a97) {\n if (cp < 0x11a33) return false\n if (cp < 0x11a39) return true\n if (cp === 0x11a39) return true\n if (cp < 0x11a3b) return false\n if (cp < 0x11a3f) return true\n if (cp === 0x11a47) return true\n if (cp < 0x11a51) return false\n if (cp < 0x11a57) return true\n if (cp < 0x11a57) return false\n if (cp < 0x11a59) return true\n if (cp < 0x11a59) return false\n if (cp < 0x11a5c) return true\n if (cp < 0x11a8a) return false\n if (cp < 0x11a97) return true\n return false\n }\n if (cp === 0x11a97) return true\n if (cp < 0x11a98) return false\n if (cp < 0x11a9a) return true\n if (cp === 0x11c2f) return true\n if (cp < 0x11c30) return false\n if (cp < 0x11c37) return true\n if (cp < 0x11c38) return false\n if (cp < 0x11c3e) return true\n if (cp === 0x11c3e) return true\n if (cp === 0x11c3f) return true\n if (cp < 0x11c50) return false\n if (cp < 0x11c5a) return true\n if (cp < 0x11c92) return false\n if (cp < 0x11ca8) return true\n return false\n }\n if (cp < 0x11d3c) {\n if (cp === 0x11ca9) return true\n if (cp < 0x11caa) return false\n if (cp < 0x11cb1) return true\n if (cp === 0x11cb1) return true\n if (cp < 0x11cb2) return false\n if (cp < 0x11cb4) return true\n if (cp === 0x11cb4) return true\n if (cp < 0x11cb5) return false\n if (cp < 0x11cb7) return true\n if (cp < 0x11d31) return false\n if (cp < 0x11d37) return true\n if (cp === 0x11d3a) return true\n return false\n }\n if (cp < 0x11d3e) return true\n if (cp < 0x11d3f) return false\n if (cp < 0x11d46) return true\n if (cp === 0x11d47) return true\n if (cp < 0x11d50) return false\n if (cp < 0x11d5a) return true\n if (cp < 0x11d8a) return false\n if (cp < 0x11d8f) return true\n if (cp < 0x11d90) return false\n if (cp < 0x11d92) return true\n if (cp < 0x11d93) return false\n if (cp < 0x11d95) return true\n if (cp === 0x11d95) return true\n if (cp === 0x11d96) return true\n return false\n }\n if (cp < 0x1d242) {\n if (cp < 0x16f51) {\n if (cp === 0x11d97) return true\n if (cp < 0x11da0) return false\n if (cp < 0x11daa) return true\n if (cp < 0x11ef3) return false\n if (cp < 0x11ef5) return true\n if (cp < 0x11ef5) return false\n if (cp < 0x11ef7) return true\n if (cp < 0x16a60) return false\n if (cp < 0x16a6a) return true\n if (cp < 0x16af0) return false\n if (cp < 0x16af5) return true\n if (cp < 0x16b30) return false\n if (cp < 0x16b37) return true\n if (cp < 0x16b50) return false\n if (cp < 0x16b5a) return true\n return false\n }\n if (cp < 0x16f7f) return true\n if (cp < 0x16f8f) return false\n if (cp < 0x16f93) return true\n if (cp < 0x1bc9d) return false\n if (cp < 0x1bc9f) return true\n if (cp < 0x1d165) return false\n if (cp < 0x1d167) return true\n if (cp < 0x1d167) return false\n if (cp < 0x1d16a) return true\n if (cp < 0x1d16d) return false\n if (cp < 0x1d173) return true\n if (cp < 0x1d17b) return false\n if (cp < 0x1d183) return true\n if (cp < 0x1d185) return false\n if (cp < 0x1d18c) return true\n if (cp < 0x1d1aa) return false\n if (cp < 0x1d1ae) return true\n return false\n }\n if (cp < 0x1e000) {\n if (cp < 0x1d242) return false\n if (cp < 0x1d245) return true\n if (cp < 0x1d7ce) return false\n if (cp < 0x1d800) return true\n if (cp < 0x1da00) return false\n if (cp < 0x1da37) return true\n if (cp < 0x1da3b) return false\n if (cp < 0x1da6d) return true\n if (cp === 0x1da75) return true\n if (cp === 0x1da84) return true\n if (cp < 0x1da9b) return false\n if (cp < 0x1daa0) return true\n if (cp < 0x1daa1) return false\n if (cp < 0x1dab0) return true\n return false\n }\n if (cp < 0x1e007) return true\n if (cp < 0x1e008) return false\n if (cp < 0x1e019) return true\n if (cp < 0x1e01b) return false\n if (cp < 0x1e022) return true\n if (cp < 0x1e023) return false\n if (cp < 0x1e025) return true\n if (cp < 0x1e026) return false\n if (cp < 0x1e02b) return true\n if (cp < 0x1e8d0) return false\n if (cp < 0x1e8d7) return true\n if (cp < 0x1e944) return false\n if (cp < 0x1e94b) return true\n if (cp < 0x1e950) return false\n if (cp < 0x1e95a) return true\n if (cp < 0xe0100) return false\n if (cp < 0xe01f0) return true\n return false\n}\n","const PropertyData: Object & { [key: string]: Set } = {\n $LONE: new Set([\n \"ASCII\",\n \"ASCII_Hex_Digit\",\n \"AHex\",\n \"Alphabetic\",\n \"Alpha\",\n \"Any\",\n \"Assigned\",\n \"Bidi_Control\",\n \"Bidi_C\",\n \"Bidi_Mirrored\",\n \"Bidi_M\",\n \"Case_Ignorable\",\n \"CI\",\n \"Cased\",\n \"Changes_When_Casefolded\",\n \"CWCF\",\n \"Changes_When_Casemapped\",\n \"CWCM\",\n \"Changes_When_Lowercased\",\n \"CWL\",\n \"Changes_When_NFKC_Casefolded\",\n \"CWKCF\",\n \"Changes_When_Titlecased\",\n \"CWT\",\n \"Changes_When_Uppercased\",\n \"CWU\",\n \"Dash\",\n \"Default_Ignorable_Code_Point\",\n \"DI\",\n \"Deprecated\",\n \"Dep\",\n \"Diacritic\",\n \"Dia\",\n \"Emoji\",\n \"Emoji_Component\",\n \"Emoji_Modifier\",\n \"Emoji_Modifier_Base\",\n \"Emoji_Presentation\",\n \"Extender\",\n \"Ext\",\n \"Grapheme_Base\",\n \"Gr_Base\",\n \"Grapheme_Extend\",\n \"Gr_Ext\",\n \"Hex_Digit\",\n \"Hex\",\n \"IDS_Binary_Operator\",\n \"IDSB\",\n \"IDS_Trinary_Operator\",\n \"IDST\",\n \"ID_Continue\",\n \"IDC\",\n \"ID_Start\",\n \"IDS\",\n \"Ideographic\",\n \"Ideo\",\n \"Join_Control\",\n \"Join_C\",\n \"Logical_Order_Exception\",\n \"LOE\",\n \"Lowercase\",\n \"Lower\",\n \"Math\",\n \"Noncharacter_Code_Point\",\n \"NChar\",\n \"Pattern_Syntax\",\n \"Pat_Syn\",\n \"Pattern_White_Space\",\n \"Pat_WS\",\n \"Quotation_Mark\",\n \"QMark\",\n \"Radical\",\n \"Regional_Indicator\",\n \"RI\",\n \"Sentence_Terminal\",\n \"STerm\",\n \"Soft_Dotted\",\n \"SD\",\n \"Terminal_Punctuation\",\n \"Term\",\n \"Unified_Ideograph\",\n \"UIdeo\",\n \"Uppercase\",\n \"Upper\",\n \"Variation_Selector\",\n \"VS\",\n \"White_Space\",\n \"space\",\n \"XID_Continue\",\n \"XIDC\",\n \"XID_Start\",\n \"XIDS\",\n ]),\n General_Category: new Set([\n \"Cased_Letter\",\n \"LC\",\n \"Close_Punctuation\",\n \"Pe\",\n \"Connector_Punctuation\",\n \"Pc\",\n \"Control\",\n \"Cc\",\n \"cntrl\",\n \"Currency_Symbol\",\n \"Sc\",\n \"Dash_Punctuation\",\n \"Pd\",\n \"Decimal_Number\",\n \"Nd\",\n \"digit\",\n \"Enclosing_Mark\",\n \"Me\",\n \"Final_Punctuation\",\n \"Pf\",\n \"Format\",\n \"Cf\",\n \"Initial_Punctuation\",\n \"Pi\",\n \"Letter\",\n \"L\",\n \"Letter_Number\",\n \"Nl\",\n \"Line_Separator\",\n \"Zl\",\n \"Lowercase_Letter\",\n \"Ll\",\n \"Mark\",\n \"M\",\n \"Combining_Mark\",\n \"Math_Symbol\",\n \"Sm\",\n \"Modifier_Letter\",\n \"Lm\",\n \"Modifier_Symbol\",\n \"Sk\",\n \"Nonspacing_Mark\",\n \"Mn\",\n \"Number\",\n \"N\",\n \"Open_Punctuation\",\n \"Ps\",\n \"Other\",\n \"C\",\n \"Other_Letter\",\n \"Lo\",\n \"Other_Number\",\n \"No\",\n \"Other_Punctuation\",\n \"Po\",\n \"Other_Symbol\",\n \"So\",\n \"Paragraph_Separator\",\n \"Zp\",\n \"Private_Use\",\n \"Co\",\n \"Punctuation\",\n \"P\",\n \"punct\",\n \"Separator\",\n \"Z\",\n \"Space_Separator\",\n \"Zs\",\n \"Spacing_Mark\",\n \"Mc\",\n \"Surrogate\",\n \"Cs\",\n \"Symbol\",\n \"S\",\n \"Titlecase_Letter\",\n \"Lt\",\n \"Unassigned\",\n \"Cn\",\n \"Uppercase_Letter\",\n \"Lu\",\n ]),\n Script: new Set([\n \"Adlam\",\n \"Adlm\",\n \"Ahom\",\n \"Anatolian_Hieroglyphs\",\n \"Hluw\",\n \"Arabic\",\n \"Arab\",\n \"Armenian\",\n \"Armn\",\n \"Avestan\",\n \"Avst\",\n \"Balinese\",\n \"Bali\",\n \"Bamum\",\n \"Bamu\",\n \"Bassa_Vah\",\n \"Bass\",\n \"Batak\",\n \"Batk\",\n \"Bengali\",\n \"Beng\",\n \"Bhaiksuki\",\n \"Bhks\",\n \"Bopomofo\",\n \"Bopo\",\n \"Brahmi\",\n \"Brah\",\n \"Braille\",\n \"Brai\",\n \"Buginese\",\n \"Bugi\",\n \"Buhid\",\n \"Buhd\",\n \"Canadian_Aboriginal\",\n \"Cans\",\n \"Carian\",\n \"Cari\",\n \"Caucasian_Albanian\",\n \"Aghb\",\n \"Chakma\",\n \"Cakm\",\n \"Cham\",\n \"Cherokee\",\n \"Cher\",\n \"Common\",\n \"Zyyy\",\n \"Coptic\",\n \"Copt\",\n \"Qaac\",\n \"Cuneiform\",\n \"Xsux\",\n \"Cypriot\",\n \"Cprt\",\n \"Cyrillic\",\n \"Cyrl\",\n \"Deseret\",\n \"Dsrt\",\n \"Devanagari\",\n \"Deva\",\n \"Duployan\",\n \"Dupl\",\n \"Egyptian_Hieroglyphs\",\n \"Egyp\",\n \"Elbasan\",\n \"Elba\",\n \"Ethiopic\",\n \"Ethi\",\n \"Georgian\",\n \"Geor\",\n \"Glagolitic\",\n \"Glag\",\n \"Gothic\",\n \"Goth\",\n \"Grantha\",\n \"Gran\",\n \"Greek\",\n \"Grek\",\n \"Gujarati\",\n \"Gujr\",\n \"Gurmukhi\",\n \"Guru\",\n \"Han\",\n \"Hani\",\n \"Hangul\",\n \"Hang\",\n \"Hanunoo\",\n \"Hano\",\n \"Hatran\",\n \"Hatr\",\n \"Hebrew\",\n \"Hebr\",\n \"Hiragana\",\n \"Hira\",\n \"Imperial_Aramaic\",\n \"Armi\",\n \"Inherited\",\n \"Zinh\",\n \"Qaai\",\n \"Inscriptional_Pahlavi\",\n \"Phli\",\n \"Inscriptional_Parthian\",\n \"Prti\",\n \"Javanese\",\n \"Java\",\n \"Kaithi\",\n \"Kthi\",\n \"Kannada\",\n \"Knda\",\n \"Katakana\",\n \"Kana\",\n \"Kayah_Li\",\n \"Kali\",\n \"Kharoshthi\",\n \"Khar\",\n \"Khmer\",\n \"Khmr\",\n \"Khojki\",\n \"Khoj\",\n \"Khudawadi\",\n \"Sind\",\n \"Lao\",\n \"Laoo\",\n \"Latin\",\n \"Latn\",\n \"Lepcha\",\n \"Lepc\",\n \"Limbu\",\n \"Limb\",\n \"Linear_A\",\n \"Lina\",\n \"Linear_B\",\n \"Linb\",\n \"Lisu\",\n \"Lycian\",\n \"Lyci\",\n \"Lydian\",\n \"Lydi\",\n \"Mahajani\",\n \"Mahj\",\n \"Malayalam\",\n \"Mlym\",\n \"Mandaic\",\n \"Mand\",\n \"Manichaean\",\n \"Mani\",\n \"Marchen\",\n \"Marc\",\n \"Masaram_Gondi\",\n \"Gonm\",\n \"Meetei_Mayek\",\n \"Mtei\",\n \"Mende_Kikakui\",\n \"Mend\",\n \"Meroitic_Cursive\",\n \"Merc\",\n \"Meroitic_Hieroglyphs\",\n \"Mero\",\n \"Miao\",\n \"Plrd\",\n \"Modi\",\n \"Mongolian\",\n \"Mong\",\n \"Mro\",\n \"Mroo\",\n \"Multani\",\n \"Mult\",\n \"Myanmar\",\n \"Mymr\",\n \"Nabataean\",\n \"Nbat\",\n \"New_Tai_Lue\",\n \"Talu\",\n \"Newa\",\n \"Nko\",\n \"Nkoo\",\n \"Nushu\",\n \"Nshu\",\n \"Ogham\",\n \"Ogam\",\n \"Ol_Chiki\",\n \"Olck\",\n \"Old_Hungarian\",\n \"Hung\",\n \"Old_Italic\",\n \"Ital\",\n \"Old_North_Arabian\",\n \"Narb\",\n \"Old_Permic\",\n \"Perm\",\n \"Old_Persian\",\n \"Xpeo\",\n \"Old_South_Arabian\",\n \"Sarb\",\n \"Old_Turkic\",\n \"Orkh\",\n \"Oriya\",\n \"Orya\",\n \"Osage\",\n \"Osge\",\n \"Osmanya\",\n \"Osma\",\n \"Pahawh_Hmong\",\n \"Hmng\",\n \"Palmyrene\",\n \"Palm\",\n \"Pau_Cin_Hau\",\n \"Pauc\",\n \"Phags_Pa\",\n \"Phag\",\n \"Phoenician\",\n \"Phnx\",\n \"Psalter_Pahlavi\",\n \"Phlp\",\n \"Rejang\",\n \"Rjng\",\n \"Runic\",\n \"Runr\",\n \"Samaritan\",\n \"Samr\",\n \"Saurashtra\",\n \"Saur\",\n \"Sharada\",\n \"Shrd\",\n \"Shavian\",\n \"Shaw\",\n \"Siddham\",\n \"Sidd\",\n \"SignWriting\",\n \"Sgnw\",\n \"Sinhala\",\n \"Sinh\",\n \"Sora_Sompeng\",\n \"Sora\",\n \"Soyombo\",\n \"Soyo\",\n \"Sundanese\",\n \"Sund\",\n \"Syloti_Nagri\",\n \"Sylo\",\n \"Syriac\",\n \"Syrc\",\n \"Tagalog\",\n \"Tglg\",\n \"Tagbanwa\",\n \"Tagb\",\n \"Tai_Le\",\n \"Tale\",\n \"Tai_Tham\",\n \"Lana\",\n \"Tai_Viet\",\n \"Tavt\",\n \"Takri\",\n \"Takr\",\n \"Tamil\",\n \"Taml\",\n \"Tangut\",\n \"Tang\",\n \"Telugu\",\n \"Telu\",\n \"Thaana\",\n \"Thaa\",\n \"Thai\",\n \"Tibetan\",\n \"Tibt\",\n \"Tifinagh\",\n \"Tfng\",\n \"Tirhuta\",\n \"Tirh\",\n \"Ugaritic\",\n \"Ugar\",\n \"Vai\",\n \"Vaii\",\n \"Warang_Citi\",\n \"Wara\",\n \"Yi\",\n \"Yiii\",\n \"Zanabazar_Square\",\n \"Zanb\",\n ]),\n}\n\nPropertyData.gc = PropertyData.General_Category\nPropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =\n PropertyData.Script\n\nexport { PropertyData }\n","export { isIdContinue, isIdStart } from \"./ids\"\nexport { PropertyData } from \"./property-data\"\n\nexport const Null = 0x00\nexport const Backspace = 0x08\nexport const CharacterTabulation = 0x09\nexport const LineFeed = 0x0a\nexport const LineTabulation = 0x0b\nexport const FormFeed = 0x0c\nexport const CarriageReturn = 0x0d\nexport const ExclamationMark = 0x21\nexport const DollarSign = 0x24\nexport const LeftParenthesis = 0x28\nexport const RightParenthesis = 0x29\nexport const Asterisk = 0x2a\nexport const PlusSign = 0x2b\nexport const Comma = 0x2c\nexport const HyphenMinus = 0x2d\nexport const FullStop = 0x2e\nexport const Solidus = 0x2f\nexport const DigitZero = 0x30\nexport const DigitOne = 0x31\nexport const DigitSeven = 0x37\nexport const DigitNine = 0x39\nexport const Colon = 0x3a\nexport const LessThanSign = 0x3c\nexport const EqualsSign = 0x3d\nexport const GreaterThanSign = 0x3e\nexport const QuestionMark = 0x3f\nexport const LatinCapitalLetterA = 0x41\nexport const LatinCapitalLetterB = 0x42\nexport const LatinCapitalLetterD = 0x44\nexport const LatinCapitalLetterF = 0x46\nexport const LatinCapitalLetterP = 0x50\nexport const LatinCapitalLetterS = 0x53\nexport const LatinCapitalLetterW = 0x57\nexport const LatinCapitalLetterZ = 0x5a\nexport const LowLine = 0x5f\nexport const LatinSmallLetterA = 0x61\nexport const LatinSmallLetterB = 0x62\nexport const LatinSmallLetterC = 0x63\nexport const LatinSmallLetterD = 0x64\nexport const LatinSmallLetterF = 0x66\nexport const LatinSmallLetterG = 0x67\nexport const LatinSmallLetterI = 0x69\nexport const LatinSmallLetterK = 0x6b\nexport const LatinSmallLetterM = 0x6d\nexport const LatinSmallLetterN = 0x6e\nexport const LatinSmallLetterP = 0x70\nexport const LatinSmallLetterR = 0x72\nexport const LatinSmallLetterS = 0x73\nexport const LatinSmallLetterT = 0x74\nexport const LatinSmallLetterU = 0x75\nexport const LatinSmallLetterV = 0x76\nexport const LatinSmallLetterW = 0x77\nexport const LatinSmallLetterX = 0x78\nexport const LatinSmallLetterY = 0x79\nexport const LatinSmallLetterZ = 0x7a\nexport const LeftSquareBracket = 0x5b\nexport const ReverseSolidus = 0x5c\nexport const RightSquareBracket = 0x5d\nexport const CircumflexAccent = 0x5e\nexport const LeftCurlyBracket = 0x7b\nexport const VerticalLine = 0x7c\nexport const RightCurlyBracket = 0x7d\nexport const ZeroWidthNonJoiner = 0x200c\nexport const ZeroWidthJoiner = 0x200d\nexport const LineSeparator = 0x2028\nexport const ParagraphSeparator = 0x2029\n\nexport const MinCodePoint = 0x00\nexport const MaxCodePoint = 0x10ffff\n\nexport function isLatinLetter(code: number): boolean {\n return (\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)\n )\n}\n\nexport function isDecimalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitNine\n}\n\nexport function isOctalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitSeven\n}\n\nexport function isHexDigit(code: number): boolean {\n return (\n (code >= DigitZero && code <= DigitNine) ||\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterF)\n )\n}\n\nexport function isLineTerminator(code: number): boolean {\n return (\n code === LineFeed ||\n code === CarriageReturn ||\n code === LineSeparator ||\n code === ParagraphSeparator\n )\n}\n\nexport function isValidUnicode(code: number): boolean {\n return code >= MinCodePoint && code <= MaxCodePoint\n}\n\nexport function digitToInt(code: number): number {\n if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n return code - LatinSmallLetterA + 10\n }\n if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n return code - LatinCapitalLetterA + 10\n }\n return code - DigitZero\n}\n","const legacyImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.charCodeAt(i) : -1\n },\n width(c: number): number {\n return 1\n },\n}\nconst unicodeImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.codePointAt(i)! : -1\n },\n width(c: number): number {\n return c > 0xffff ? 2 : 1\n },\n}\n\nexport class Reader {\n private _impl = legacyImpl\n private _s = \"\"\n private _i = 0\n private _end = 0\n private _cp1: number = -1\n private _w1 = 1\n private _cp2: number = -1\n private _w2 = 1\n private _cp3: number = -1\n private _w3 = 1\n private _cp4: number = -1\n\n public get source(): string {\n return this._s\n }\n\n public get index(): number {\n return this._i\n }\n\n public get currentCodePoint(): number {\n return this._cp1\n }\n\n public get nextCodePoint(): number {\n return this._cp2\n }\n\n public get nextCodePoint2(): number {\n return this._cp3\n }\n\n public get nextCodePoint3(): number {\n return this._cp4\n }\n\n public reset(\n source: string,\n start: number,\n end: number,\n uFlag: boolean,\n ): void {\n this._impl = uFlag ? unicodeImpl : legacyImpl\n this._s = source\n this._end = end\n this.rewind(start)\n }\n\n public rewind(index: number): void {\n const impl = this._impl\n this._i = index\n this._cp1 = impl.at(this._s, this._end, index)\n this._w1 = impl.width(this._cp1)\n this._cp2 = impl.at(this._s, this._end, index + this._w1)\n this._w2 = impl.width(this._cp2)\n this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2)\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n index + this._w1 + this._w2 + this._w3,\n )\n }\n\n public advance(): void {\n if (this._cp1 !== -1) {\n const impl = this._impl\n this._i += this._w1\n this._cp1 = this._cp2\n this._w1 = this._w2\n this._cp2 = this._cp3\n this._w2 = impl.width(this._cp2)\n this._cp3 = this._cp4\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n this._i + this._w1 + this._w2 + this._w3,\n )\n }\n }\n\n public eat(cp: number): boolean {\n if (this._cp1 === cp) {\n this.advance()\n return true\n }\n return false\n }\n\n public eat2(cp1: number, cp2: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2) {\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n\n public eat3(cp1: number, cp2: number, cp3: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n this.advance()\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n}\n","export class RegExpSyntaxError extends SyntaxError {\n public index: number\n public constructor(\n source: string,\n uFlag: boolean,\n index: number,\n message: string,\n ) {\n /*eslint-disable no-param-reassign */\n if (source) {\n if (source[0] !== \"/\") {\n source = `/${source}/${uFlag ? \"u\" : \"\"}`\n }\n source = `: ${source}`\n }\n /*eslint-enable no-param-reassign */\n\n super(`Invalid regular expression${source}: ${message}`)\n this.index = index\n }\n}\n","import { Reader } from \"./reader\"\nimport { RegExpSyntaxError } from \"./regexp-syntax-error\"\nimport {\n Asterisk,\n Backspace,\n CarriageReturn,\n CharacterTabulation,\n CircumflexAccent,\n Colon,\n Comma,\n DigitNine,\n DigitOne,\n digitToInt,\n DigitZero,\n DollarSign,\n EqualsSign,\n ExclamationMark,\n FormFeed,\n FullStop,\n GreaterThanSign,\n HyphenMinus,\n isDecimalDigit,\n isHexDigit,\n isIdContinue,\n isIdStart,\n isLatinLetter,\n isLineTerminator,\n isOctalDigit,\n isValidUnicode,\n LatinCapitalLetterB,\n LatinCapitalLetterD,\n LatinCapitalLetterP,\n LatinCapitalLetterS,\n LatinCapitalLetterW,\n LatinSmallLetterB,\n LatinSmallLetterC,\n LatinSmallLetterD,\n LatinSmallLetterF,\n LatinSmallLetterG,\n LatinSmallLetterI,\n LatinSmallLetterK,\n LatinSmallLetterM,\n LatinSmallLetterN,\n LatinSmallLetterP,\n LatinSmallLetterR,\n LatinSmallLetterS,\n LatinSmallLetterT,\n LatinSmallLetterU,\n LatinSmallLetterV,\n LatinSmallLetterW,\n LatinSmallLetterX,\n LatinSmallLetterY,\n LeftCurlyBracket,\n LeftParenthesis,\n LeftSquareBracket,\n LessThanSign,\n LineFeed,\n LineTabulation,\n LowLine,\n PlusSign,\n PropertyData,\n QuestionMark,\n ReverseSolidus,\n RightCurlyBracket,\n RightParenthesis,\n RightSquareBracket,\n Solidus,\n VerticalLine,\n ZeroWidthJoiner,\n ZeroWidthNonJoiner,\n} from \"./unicode\"\n\nfunction isSyntaxCharacter(cp: number): boolean {\n return (\n cp === CircumflexAccent ||\n cp === DollarSign ||\n cp === ReverseSolidus ||\n cp === FullStop ||\n cp === Asterisk ||\n cp === PlusSign ||\n cp === QuestionMark ||\n cp === LeftParenthesis ||\n cp === RightParenthesis ||\n cp === LeftSquareBracket ||\n cp === RightSquareBracket ||\n cp === LeftCurlyBracket ||\n cp === RightCurlyBracket ||\n cp === VerticalLine\n )\n}\n\nfunction isRegExpIdentifierStart(cp: number): boolean {\n return isIdStart(cp) || cp === DollarSign || cp === LowLine\n}\n\nfunction isRegExpIdentifierPart(cp: number): boolean {\n return (\n isIdContinue(cp) ||\n cp === DollarSign ||\n cp === LowLine ||\n cp === ZeroWidthNonJoiner ||\n cp === ZeroWidthJoiner\n )\n}\n\nfunction isUnicodePropertyNameCharacter(cp: number): boolean {\n return isLatinLetter(cp) || cp === LowLine\n}\n\nfunction isUnicodePropertyValueCharacter(cp: number): boolean {\n return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp)\n}\n\nfunction isValidUnicodeProperty(name: string, value: string): boolean {\n //eslint-disable-next-line no-prototype-builtins\n return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value)\n}\n\nfunction isValidUnicodePropertyName(name: string): boolean {\n return PropertyData.$LONE.has(name)\n}\n\nexport namespace RegExpValidator {\n /**\n * The options for RegExpValidator construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n\n /**\n * A function that is called when the validator entered a RegExp literal.\n * @param start The 0-based index of the first character.\n */\n onLiteralEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a RegExp literal.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onLiteralLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator found flags.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param global `g` flag.\n * @param ignoreCase `i` flag.\n * @param multiline `m` flag.\n * @param unicode `u` flag.\n * @param sticky `y` flag.\n * @param dotAll `s` flag.\n */\n onFlags?(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a pattern.\n * @param start The 0-based index of the first character.\n */\n onPatternEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a pattern.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onPatternLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a disjunction.\n * @param start The 0-based index of the first character.\n */\n onDisjunctionEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a disjunction.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onDisjunctionLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered an alternative.\n * @param start The 0-based index of the first character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeEnter?(start: number, index: number): void\n\n /**\n * A function that is called when the validator left an alternative.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeLeave?(start: number, end: number, index: number): void\n\n /**\n * A function that is called when the validator entered an uncapturing group.\n * @param start The 0-based index of the first character.\n */\n onGroupEnter?(start: number): void\n\n /**\n * A function that is called when the validator left an uncapturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onGroupLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a capturing group.\n * @param start The 0-based index of the first character.\n * @param name The group name.\n */\n onCapturingGroupEnter?(start: number, name: string | null): void\n\n /**\n * A function that is called when the validator left a capturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param name The group name.\n */\n onCapturingGroupLeave?(\n start: number,\n end: number,\n name: string | null,\n ): void\n\n /**\n * A function that is called when the validator found a quantifier.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum number of repeating.\n * @param max The maximum number of repeating.\n * @param greedy The flag to choose the longest matching.\n */\n onQuantifier?(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionEnter?(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator left a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionLeave?(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found an edge boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n */\n onEdgeAssertion?(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void\n\n /**\n * A function that is called when the validator found a word boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onWordBoundaryAssertion?(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a dot.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n */\n onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void\n\n /**\n * A function that is called when the validator found a character set escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param negate The flag which represents that the character set is negative.\n */\n onEscapeCharacterSet?(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a Unicode proerty escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param key The property name.\n * @param value The property value.\n * @param negate The flag which represents that the character set is negative.\n */\n onUnicodePropertyCharacterSet?(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param value The code point of the character.\n */\n onCharacter?(start: number, end: number, value: number): void\n\n /**\n * A function that is called when the validator found a backreference.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param ref The key of the referred capturing group.\n */\n onBackreference?(start: number, end: number, ref: number | string): void\n\n /**\n * A function that is called when the validator entered a character class.\n * @param start The 0-based index of the first character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassEnter?(start: number, negate: boolean): void\n\n /**\n * A function that is called when the validator left a character class.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassLeave?(\n start: number,\n end: number,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character class range.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum code point of the range.\n * @param max The maximum code point of the range.\n */\n onCharacterClassRange?(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void\n }\n}\n\n/**\n * The regular expression validator.\n */\nexport class RegExpValidator {\n private readonly _options: RegExpValidator.Options\n private readonly _reader = new Reader()\n private _uFlag = false\n private _nFlag = false\n private _lastIntValue = 0\n private _lastMinValue = 0\n private _lastMaxValue = 0\n private _lastStrValue = \"\"\n private _lastKeyValue = \"\"\n private _lastValValue = \"\"\n private _lastAssertionIsQuantifiable = false\n private _numCapturingParens = 0\n private _groupNames = new Set()\n private _backreferenceNames = new Set()\n\n /**\n * Initialize this validator.\n * @param options The options of validator.\n */\n public constructor(options?: RegExpValidator.Options) {\n this._options = options || {}\n }\n\n /**\n * Validate a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n this._uFlag = this._nFlag = false\n this.reset(source, start, end)\n\n this.onLiteralEnter(start)\n if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n const flagStart = this.index\n const uFlag = source.indexOf(\"u\", flagStart) !== -1\n this.validateFlags(source, flagStart, end)\n this.validatePattern(source, start + 1, flagStart - 1, uFlag)\n } else if (start >= end) {\n this.raise(\"Empty\")\n } else {\n const c = String.fromCodePoint(this.currentCodePoint)\n this.raise(`Unexpected character '${c}'`)\n }\n this.onLiteralLeave(start, end)\n }\n\n /**\n * Validate a regular expression flags. E.g. \"gim\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n const existingFlags = new Set()\n let global = false\n let ignoreCase = false\n let multiline = false\n let sticky = false\n let unicode = false\n let dotAll = false\n for (let i = start; i < end; ++i) {\n const flag = source.charCodeAt(i)\n\n if (existingFlags.has(flag)) {\n this.raise(`Duplicated flag '${source[i]}'`)\n }\n existingFlags.add(flag)\n\n if (flag === LatinSmallLetterG) {\n global = true\n } else if (flag === LatinSmallLetterI) {\n ignoreCase = true\n } else if (flag === LatinSmallLetterM) {\n multiline = true\n } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n unicode = true\n } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n sticky = true\n } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n dotAll = true\n } else {\n this.raise(`Invalid flag '${source[i]}'`)\n }\n }\n this.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n\n /**\n * Validate a regular expression pattern. E.g. \"abc\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n */\n public validatePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): void {\n this._uFlag = uFlag && this.ecmaVersion >= 2015\n this._nFlag = uFlag && this.ecmaVersion >= 2018\n this.reset(source, start, end)\n this.pattern()\n\n if (\n !this._nFlag &&\n this.ecmaVersion >= 2018 &&\n this._groupNames.size > 0\n ) {\n this._nFlag = true\n this.rewind(start)\n this.pattern()\n }\n }\n\n // #region Delegate for Options\n\n private get strict() {\n return Boolean(this._options.strict || this._uFlag)\n }\n\n private get ecmaVersion() {\n return this._options.ecmaVersion || 2018\n }\n\n private onLiteralEnter(start: number): void {\n if (this._options.onLiteralEnter) {\n this._options.onLiteralEnter(start)\n }\n }\n\n private onLiteralLeave(start: number, end: number): void {\n if (this._options.onLiteralLeave) {\n this._options.onLiteralLeave(start, end)\n }\n }\n\n private onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n if (this._options.onFlags) {\n this._options.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n }\n\n private onPatternEnter(start: number): void {\n if (this._options.onPatternEnter) {\n this._options.onPatternEnter(start)\n }\n }\n\n private onPatternLeave(start: number, end: number): void {\n if (this._options.onPatternLeave) {\n this._options.onPatternLeave(start, end)\n }\n }\n\n private onDisjunctionEnter(start: number): void {\n if (this._options.onDisjunctionEnter) {\n this._options.onDisjunctionEnter(start)\n }\n }\n\n private onDisjunctionLeave(start: number, end: number): void {\n if (this._options.onDisjunctionLeave) {\n this._options.onDisjunctionLeave(start, end)\n }\n }\n\n private onAlternativeEnter(start: number, index: number): void {\n if (this._options.onAlternativeEnter) {\n this._options.onAlternativeEnter(start, index)\n }\n }\n\n private onAlternativeLeave(\n start: number,\n end: number,\n index: number,\n ): void {\n if (this._options.onAlternativeLeave) {\n this._options.onAlternativeLeave(start, end, index)\n }\n }\n\n private onGroupEnter(start: number): void {\n if (this._options.onGroupEnter) {\n this._options.onGroupEnter(start)\n }\n }\n\n private onGroupLeave(start: number, end: number): void {\n if (this._options.onGroupLeave) {\n this._options.onGroupLeave(start, end)\n }\n }\n\n private onCapturingGroupEnter(start: number, name: string | null): void {\n if (this._options.onCapturingGroupEnter) {\n this._options.onCapturingGroupEnter(start, name)\n }\n }\n\n private onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n if (this._options.onCapturingGroupLeave) {\n this._options.onCapturingGroupLeave(start, end, name)\n }\n }\n\n private onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n if (this._options.onQuantifier) {\n this._options.onQuantifier(start, end, min, max, greedy)\n }\n }\n\n private onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionEnter) {\n this._options.onLookaroundAssertionEnter(start, kind, negate)\n }\n }\n\n private onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionLeave) {\n this._options.onLookaroundAssertionLeave(start, end, kind, negate)\n }\n }\n\n private onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n if (this._options.onEdgeAssertion) {\n this._options.onEdgeAssertion(start, end, kind)\n }\n }\n\n private onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n if (this._options.onWordBoundaryAssertion) {\n this._options.onWordBoundaryAssertion(start, end, kind, negate)\n }\n }\n\n private onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n if (this._options.onAnyCharacterSet) {\n this._options.onAnyCharacterSet(start, end, kind)\n }\n }\n\n private onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n if (this._options.onEscapeCharacterSet) {\n this._options.onEscapeCharacterSet(start, end, kind, negate)\n }\n }\n\n private onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n if (this._options.onUnicodePropertyCharacterSet) {\n this._options.onUnicodePropertyCharacterSet(\n start,\n end,\n kind,\n key,\n value,\n negate,\n )\n }\n }\n\n private onCharacter(start: number, end: number, value: number): void {\n if (this._options.onCharacter) {\n this._options.onCharacter(start, end, value)\n }\n }\n\n private onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n if (this._options.onBackreference) {\n this._options.onBackreference(start, end, ref)\n }\n }\n\n private onCharacterClassEnter(start: number, negate: boolean): void {\n if (this._options.onCharacterClassEnter) {\n this._options.onCharacterClassEnter(start, negate)\n }\n }\n\n private onCharacterClassLeave(\n start: number,\n end: number,\n negate: boolean,\n ): void {\n if (this._options.onCharacterClassLeave) {\n this._options.onCharacterClassLeave(start, end, negate)\n }\n }\n\n private onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n if (this._options.onCharacterClassRange) {\n this._options.onCharacterClassRange(start, end, min, max)\n }\n }\n\n // #endregion\n\n // #region Delegate for Reader\n\n private get source(): string {\n return this._reader.source\n }\n\n private get index(): number {\n return this._reader.index\n }\n\n private get currentCodePoint(): number {\n return this._reader.currentCodePoint\n }\n\n private get nextCodePoint(): number {\n return this._reader.nextCodePoint\n }\n\n private get nextCodePoint2(): number {\n return this._reader.nextCodePoint2\n }\n\n private get nextCodePoint3(): number {\n return this._reader.nextCodePoint3\n }\n\n private reset(source: string, start: number, end: number): void {\n this._reader.reset(source, start, end, this._uFlag)\n }\n\n private rewind(index: number): void {\n this._reader.rewind(index)\n }\n\n private advance(): void {\n this._reader.advance()\n }\n\n private eat(cp: number): boolean {\n return this._reader.eat(cp)\n }\n\n private eat2(cp1: number, cp2: number): boolean {\n return this._reader.eat2(cp1, cp2)\n }\n\n private eat3(cp1: number, cp2: number, cp3: number): boolean {\n return this._reader.eat3(cp1, cp2, cp3)\n }\n\n // #endregion\n\n private raise(message: string): never {\n throw new RegExpSyntaxError(\n this.source,\n this._uFlag,\n this.index,\n message,\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegularExpressionBody\n private eatRegExpBody(): boolean {\n const start = this.index\n let inClass = false\n let escaped = false\n\n for (;;) {\n const cp = this.currentCodePoint\n if (cp === -1 || isLineTerminator(cp)) {\n const kind = inClass ? \"character class\" : \"regular expression\"\n this.raise(`Unterminated ${kind}`)\n }\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n (cp === Solidus && !inClass) ||\n (cp === Asterisk && this.index === start)\n ) {\n break\n }\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n private pattern(): void {\n const start = this.index\n this._numCapturingParens = this.countCapturingParens()\n this._groupNames.clear()\n this._backreferenceNames.clear()\n\n this.onPatternEnter(start)\n this.disjunction()\n\n const cp = this.currentCodePoint\n if (this.currentCodePoint !== -1) {\n if (cp === RightParenthesis) {\n this.raise(\"Unmatched ')'\")\n }\n if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n this.raise(\"Lone quantifier brackets\")\n }\n const c = String.fromCodePoint(cp)\n this.raise(`Unexpected character '${c}'`)\n }\n for (const name of this._backreferenceNames) {\n if (!this._groupNames.has(name)) {\n this.raise(\"Invalid named capture referenced\")\n }\n }\n this.onPatternLeave(start, this.index)\n }\n\n private countCapturingParens(): number {\n const start = this.index\n let inClass = false\n let escaped = false\n let count = 0\n let cp = 0\n\n while ((cp = this.currentCodePoint) !== -1) {\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n cp === LeftParenthesis &&\n !inClass &&\n (this.nextCodePoint !== QuestionMark ||\n (this.nextCodePoint2 === LessThanSign &&\n this.nextCodePoint3 !== EqualsSign &&\n this.nextCodePoint3 !== ExclamationMark))\n ) {\n count += 1\n }\n this.advance()\n }\n\n this.rewind(start)\n return count\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n private disjunction(): void {\n const start = this.index\n let i = 0\n\n this.onDisjunctionEnter(start)\n this.alternative(i++)\n while (this.eat(VerticalLine)) {\n this.alternative(i++)\n }\n\n if (this.eatQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n if (this.eat(LeftCurlyBracket)) {\n this.raise(\"Lone quantifier brackets\")\n }\n this.onDisjunctionLeave(start, this.index)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n private alternative(i: number): void {\n const start = this.index\n\n this.onAlternativeEnter(start, i)\n while (this.currentCodePoint !== -1 && this.eatTerm()) {\n // do nothing.\n }\n this.onAlternativeLeave(start, this.index, i)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Term\n private eatTerm(): boolean {\n if (this.eatAssertion()) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `this.lastAssertionIsQuantifiable` is true if the last eaten\n // Assertion is a QuantifiableAssertion.\n if (this._lastAssertionIsQuantifiable) {\n this.eatQuantifier()\n }\n return true\n }\n\n if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {\n this.eatQuantifier()\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Assertion\n private eatAssertion(): boolean {\n const start = this.index\n this._lastAssertionIsQuantifiable = false\n\n // ^, $, \\B \\b\n if (this.eat(CircumflexAccent)) {\n this.onEdgeAssertion(start, this.index, \"start\")\n return true\n }\n if (this.eat(DollarSign)) {\n this.onEdgeAssertion(start, this.index, \"end\")\n return true\n }\n if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", true)\n return true\n }\n if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", false)\n return true\n }\n\n // Lookahead / Lookbehind\n if (this.eat2(LeftParenthesis, QuestionMark)) {\n const lookbehind =\n this.ecmaVersion >= 2018 && this.eat(LessThanSign)\n let negate = false\n if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n const kind = lookbehind ? \"lookbehind\" : \"lookahead\"\n this.onLookaroundAssertionEnter(start, kind, negate)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this._lastAssertionIsQuantifiable = !lookbehind && !this.strict\n this.onLookaroundAssertionLeave(start, this.index, kind, negate)\n return true\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n private eatQuantifier(noError = false): boolean {\n const start = this.index\n let min = 0\n let max = 0\n let greedy = false\n\n if (this.eat(Asterisk)) {\n min = 0\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(PlusSign)) {\n min = 1\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(QuestionMark)) {\n min = 0\n max = 1\n } else if (this.eatBracedQuantifier(noError)) {\n min = this._lastMinValue\n max = this._lastMaxValue\n } else {\n return false\n }\n greedy = !this.eat(QuestionMark)\n\n if (!noError) {\n this.onQuantifier(start, this.index, min, max, greedy)\n }\n return true\n }\n\n private eatBracedQuantifier(noError: boolean): boolean {\n const start = this.index\n if (this.eat(LeftCurlyBracket)) {\n this._lastMinValue = 0\n this._lastMaxValue = Number.POSITIVE_INFINITY\n if (this.eatDecimalDigits()) {\n this._lastMinValue = this._lastMaxValue = this._lastIntValue\n if (this.eat(Comma)) {\n this._lastMaxValue = this.eatDecimalDigits()\n ? this._lastIntValue\n : Number.POSITIVE_INFINITY\n }\n if (this.eat(RightCurlyBracket)) {\n if (!noError && this._lastMaxValue < this._lastMinValue) {\n this.raise(\"numbers out of order in {} quantifier\")\n }\n return true\n }\n }\n if (!noError && this.strict) {\n this.raise(\"Incomplete quantifier\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n private eatAtom(): boolean {\n return (\n this.eatPatternCharacter() ||\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup()\n )\n }\n\n private eatDot(): boolean {\n if (this.eat(FullStop)) {\n this.onAnyCharacterSet(this.index - 1, this.index, \"any\")\n return true\n }\n return false\n }\n\n private eatReverseSolidusAtomEscape(): boolean {\n const start = this.index\n if (this.eat(ReverseSolidus)) {\n if (this.eatAtomEscape()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatUncapturingGroup(): boolean {\n const start = this.index\n if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n this.onGroupEnter(start)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onGroupLeave(start, this.index)\n return true\n }\n return false\n }\n\n private eatCapturingGroup(): boolean {\n const start = this.index\n if (this.eat(LeftParenthesis)) {\n this._lastStrValue = \"\"\n if (this.ecmaVersion >= 2018) {\n this.groupSpecifier()\n } else if (this.currentCodePoint === QuestionMark) {\n this.raise(\"Invalid group\")\n }\n const name = this._lastStrValue || null\n\n this.onCapturingGroupEnter(start, name)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onCapturingGroupLeave(start, this.index, name)\n\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedAtom\n private eatExtendedAtom(): boolean {\n return (\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup() ||\n this.eatInvalidBracedQuantifier() ||\n this.eatExtendedPatternCharacter()\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-InvalidBracedQuantifier\n private eatInvalidBracedQuantifier(): boolean {\n if (this.eatBracedQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n private eatSyntaxCharacter(): boolean {\n if (isSyntaxCharacter(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n private eatPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (cp !== -1 && !isSyntaxCharacter(cp)) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedPatternCharacter\n private eatExtendedPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (\n cp !== -1 &&\n cp !== CircumflexAccent &&\n cp !== DollarSign &&\n cp !== FullStop &&\n cp !== Asterisk &&\n cp !== PlusSign &&\n cp !== QuestionMark &&\n cp !== LeftParenthesis &&\n cp !== RightParenthesis &&\n cp !== LeftSquareBracket &&\n cp !== VerticalLine\n ) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // GroupSpecifier[U] ::\n // [empty]\n // `?` GroupName[?U]\n private groupSpecifier(): void {\n this._lastStrValue = \"\"\n if (this.eat(QuestionMark)) {\n if (this.eatGroupName()) {\n if (!this._groupNames.has(this._lastStrValue)) {\n this._groupNames.add(this._lastStrValue)\n return\n }\n this.raise(\"Duplicate capture group name\")\n }\n this.raise(\"Invalid group\")\n }\n }\n\n // GroupName[U] ::\n // `<` RegExpIdentifierName[?U] `>`\n private eatGroupName(): boolean {\n this._lastStrValue = \"\"\n if (this.eat(LessThanSign)) {\n if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n return true\n }\n this.raise(\"Invalid capture group name\")\n }\n return false\n }\n\n // RegExpIdentifierName[U] ::\n // RegExpIdentifierStart[?U]\n // RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n private eatRegExpIdentifierName(): boolean {\n this._lastStrValue = \"\"\n if (this.eatRegExpIdentifierStart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n while (this.eatRegExpIdentifierPart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n }\n return true\n }\n return false\n }\n\n // RegExpIdentifierStart[U] ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n private eatRegExpIdentifierStart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierStart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // RegExpIdentifierPart[U] ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n // \n // \n private eatRegExpIdentifierPart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierPart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-AtomEscape\n private eatAtomEscape(): boolean {\n if (\n this.eatBackreference() ||\n this.eatCharacterClassEscape() ||\n this.eatCharacterEscape() ||\n (this._nFlag && this.eatKGroupName())\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n return false\n }\n\n private eatBackreference(): boolean {\n const start = this.index\n if (this.eatDecimalEscape()) {\n const n = this._lastIntValue\n if (n <= this._numCapturingParens) {\n this.onBackreference(start - 1, this.index, n)\n return true\n }\n if (this.strict) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatKGroupName(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterK)) {\n if (this.eatGroupName()) {\n const groupName = this._lastStrValue\n this._backreferenceNames.add(groupName)\n this.onBackreference(start - 1, this.index, groupName)\n return true\n }\n this.raise(\"Invalid named reference\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-CharacterEscape\n private eatCharacterEscape(): boolean {\n const start = this.index\n if (\n this.eatControlEscape() ||\n this.eatCControlLetter() ||\n this.eatZero() ||\n this.eatHexEscapeSequence() ||\n this.eatRegExpUnicodeEscapeSequence() ||\n (!this.strict && this.eatLegacyOctalEscapeSequence()) ||\n this.eatIdentityEscape()\n ) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n return false\n }\n\n private eatCControlLetter(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterC)) {\n if (this.eatControlLetter()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatZero(): boolean {\n if (\n this.currentCodePoint === DigitZero &&\n !isDecimalDigit(this.nextCodePoint)\n ) {\n this._lastIntValue = 0\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n private eatControlEscape(): boolean {\n if (this.eat(LatinSmallLetterT)) {\n this._lastIntValue = CharacterTabulation\n return true\n }\n if (this.eat(LatinSmallLetterN)) {\n this._lastIntValue = LineFeed\n return true\n }\n if (this.eat(LatinSmallLetterV)) {\n this._lastIntValue = LineTabulation\n return true\n }\n if (this.eat(LatinSmallLetterF)) {\n this._lastIntValue = FormFeed\n return true\n }\n if (this.eat(LatinSmallLetterR)) {\n this._lastIntValue = CarriageReturn\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n private eatControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isLatinLetter(cp)) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n private eatRegExpUnicodeEscapeSequence(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterU)) {\n if (this.eatFixedHexDigits(4)) {\n const lead = this._lastIntValue\n if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {\n const leadSurrogateEnd = this.index\n if (\n this.eat(ReverseSolidus) &&\n this.eat(LatinSmallLetterU) &&\n this.eatFixedHexDigits(4)\n ) {\n const trail = this._lastIntValue\n if (trail >= 0xdc00 && trail <= 0xdfff) {\n this._lastIntValue =\n (lead - 0xd800) * 0x400 +\n (trail - 0xdc00) +\n 0x10000\n return true\n }\n }\n this.rewind(leadSurrogateEnd)\n this._lastIntValue = lead\n }\n return true\n }\n if (\n this._uFlag &&\n this.eat(LeftCurlyBracket) &&\n this.eatHexDigits() &&\n this.eat(RightCurlyBracket) &&\n isValidUnicode(this._lastIntValue)\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid unicode escape\")\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-IdentityEscape\n private eatIdentityEscape(): boolean {\n if (this._uFlag) {\n if (this.eatSyntaxCharacter()) {\n return true\n }\n if (this.eat(Solidus)) {\n this._lastIntValue = Solidus\n return true\n }\n return false\n }\n\n if (this.isValidIdentityEscape(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n\n return false\n }\n private isValidIdentityEscape(cp: number): boolean {\n if (cp === -1) {\n return false\n }\n if (this.strict) {\n return !isIdContinue(cp)\n }\n return (\n cp !== LatinSmallLetterC &&\n (!this._nFlag || cp !== LatinSmallLetterK)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n private eatDecimalEscape(): boolean {\n this._lastIntValue = 0\n let cp = this.currentCodePoint\n if (cp >= DigitOne && cp <= DigitNine) {\n do {\n this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero)\n this.advance()\n } while (\n (cp = this.currentCodePoint) >= DigitZero &&\n cp <= DigitNine\n )\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n private eatCharacterClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true)\n return true\n }\n if (this.eat(LatinSmallLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", true)\n return true\n }\n if (this.eat(LatinSmallLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", true)\n return true\n }\n\n let negate = false\n if (\n this._uFlag &&\n this.ecmaVersion >= 2018 &&\n (this.eat(LatinSmallLetterP) ||\n (negate = this.eat(LatinCapitalLetterP)))\n ) {\n this._lastIntValue = -1\n if (\n this.eat(LeftCurlyBracket) &&\n this.eatUnicodePropertyValueExpression() &&\n this.eat(RightCurlyBracket)\n ) {\n this.onUnicodePropertyCharacterSet(\n start - 1,\n this.index,\n \"property\",\n this._lastKeyValue,\n this._lastValValue || null,\n negate,\n )\n return true\n }\n this.raise(\"Invalid property name\")\n }\n\n return false\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n private eatUnicodePropertyValueExpression(): boolean {\n const start = this.index\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n this._lastKeyValue = this._lastStrValue\n if (this.eatUnicodePropertyValue()) {\n this._lastValValue = this._lastStrValue\n if (\n isValidUnicodeProperty(\n this._lastKeyValue,\n this._lastValValue,\n )\n ) {\n return true\n }\n this.raise(\"Invalid property name\")\n }\n }\n this.rewind(start)\n\n // LoneUnicodePropertyNameOrValue\n if (this.eatLoneUnicodePropertyNameOrValue()) {\n const nameOrValue = this._lastStrValue\n if (isValidUnicodeProperty(\"General_Category\", nameOrValue)) {\n this._lastKeyValue = \"General_Category\"\n this._lastValValue = nameOrValue\n return true\n }\n if (isValidUnicodePropertyName(nameOrValue)) {\n this._lastKeyValue = nameOrValue\n this._lastValValue = \"\"\n return true\n }\n this.raise(\"Invalid property name\")\n }\n return false\n }\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n private eatUnicodePropertyName(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n private eatUnicodePropertyValue(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n private eatLoneUnicodePropertyNameOrValue(): boolean {\n return this.eatUnicodePropertyValue()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n private eatCharacterClass(): boolean {\n const start = this.index\n if (this.eat(LeftSquareBracket)) {\n const negate = this.eat(CircumflexAccent)\n this.onCharacterClassEnter(start, negate)\n this.classRanges()\n if (!this.eat(RightSquareBracket)) {\n this.raise(\"Unterminated character class\")\n }\n this.onCharacterClassLeave(start, this.index, negate)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n private classRanges(): void {\n let start = this.index\n while (this.eatClassAtom()) {\n const left = this._lastIntValue\n const hyphenStart = this.index\n if (this.eat(HyphenMinus)) {\n this.onCharacter(hyphenStart, this.index, HyphenMinus)\n\n if (this.eatClassAtom()) {\n const right = this._lastIntValue\n\n if (left === -1 || right === -1) {\n if (this.strict) {\n this.raise(\"Invalid character class\")\n }\n } else if (left > right) {\n this.raise(\"Range out of order in character class\")\n } else {\n this.onCharacterClassRange(\n start,\n this.index,\n left,\n right,\n )\n }\n }\n }\n\n start = this.index\n }\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n private eatClassAtom(): boolean {\n const start = this.index\n\n if (this.eat(ReverseSolidus)) {\n if (this.eatClassEscape()) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n\n const cp = this.currentCodePoint\n if (cp !== -1 && cp !== RightSquareBracket) {\n this.advance()\n this._lastIntValue = cp\n this.onCharacter(start, this.index, cp)\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassEscape\n private eatClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterB)) {\n this._lastIntValue = Backspace\n this.onCharacter(start - 1, this.index, Backspace)\n return true\n }\n\n if (this._uFlag && this.eat(HyphenMinus)) {\n this._lastIntValue = HyphenMinus\n this.onCharacter(start - 1, this.index, HyphenMinus)\n return true\n }\n\n if (!this._uFlag && this.eat(LatinSmallLetterC)) {\n if (this.eatClassControlLetter()) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n this.rewind(start)\n }\n\n return this.eatCharacterClassEscape() || this.eatCharacterEscape()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassControlLetter\n private eatClassControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isDecimalDigit(cp) || cp === LowLine) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatHexEscapeSequence(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterX)) {\n if (this.eatFixedHexDigits(2)) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n private eatDecimalDigits(): boolean {\n const start = this.index\n\n this._lastIntValue = 0\n while (isDecimalDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 10 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n private eatHexDigits(): boolean {\n const start = this.index\n this._lastIntValue = 0\n while (isHexDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 16 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n private eatLegacyOctalEscapeSequence(): boolean {\n if (this.eatOctalDigit()) {\n const n1 = this._lastIntValue\n if (this.eatOctalDigit()) {\n const n2 = this._lastIntValue\n if (n1 <= 3 && this.eatOctalDigit()) {\n this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue\n } else {\n this._lastIntValue = n1 * 8 + n2\n }\n } else {\n this._lastIntValue = n1\n }\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n private eatOctalDigit(): boolean {\n const cp = this.currentCodePoint\n if (isOctalDigit(cp)) {\n this.advance()\n this._lastIntValue = cp - DigitZero\n return true\n }\n this._lastIntValue = 0\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatFixedHexDigits(length: number): boolean {\n const start = this.index\n this._lastIntValue = 0\n for (let i = 0; i < length; ++i) {\n const cp = this.currentCodePoint\n if (!isHexDigit(cp)) {\n this.rewind(start)\n return false\n }\n this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp)\n this.advance()\n }\n return true\n }\n}\n","import {\n Alternative,\n Backreference,\n CapturingGroup,\n CharacterClass,\n CharacterClassElement,\n CharacterClassRange,\n Flags,\n Group,\n RegExpLiteral,\n LookaroundAssertion,\n Pattern,\n Quantifier,\n} from \"./ast\"\nimport { HyphenMinus } from \"./unicode\"\nimport { RegExpValidator } from \"./validator\"\n\ntype AppendableNode =\n | Pattern\n | Alternative\n | Group\n | CapturingGroup\n | CharacterClass\n | LookaroundAssertion\n\nconst DummyPattern = {} as Pattern\nconst DummyFlags = {} as Flags\nconst DummyCapturingGroup = {} as CapturingGroup\n\nclass RegExpParserState {\n public readonly strict: boolean\n public readonly ecmaVersion: 5 | 2015 | 2016 | 2017 | 2018\n private _node: AppendableNode = DummyPattern\n private _flags: Flags = DummyFlags\n private _backreferences: Backreference[] = []\n private _capturingGroups: CapturingGroup[] = []\n\n public source = \"\"\n\n public constructor(options?: RegExpParser.Options) {\n this.strict = Boolean(options && options.strict)\n this.ecmaVersion = (options && options.ecmaVersion) || 2018\n }\n\n public get pattern(): Pattern {\n if (this._node.type !== \"Pattern\") {\n throw new Error(\"UnknownError\")\n }\n return this._node\n }\n\n public get flags(): Flags {\n if (this._flags.type !== \"Flags\") {\n throw new Error(\"UnknownError\")\n }\n return this._flags\n }\n\n public onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n this._flags = {\n type: \"Flags\",\n parent: null,\n start,\n end,\n raw: this.source.slice(start, end),\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n }\n }\n\n public onPatternEnter(start: number): void {\n this._node = {\n type: \"Pattern\",\n parent: null,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n this._backreferences.length = 0\n this._capturingGroups.length = 0\n }\n\n public onPatternLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n\n for (const reference of this._backreferences) {\n const ref = reference.ref\n const group =\n typeof ref === \"number\"\n ? this._capturingGroups[ref - 1]\n : this._capturingGroups.find(g => g.name === ref)!\n reference.resolved = group\n group.references.push(reference)\n }\n }\n\n public onAlternativeEnter(start: number): void {\n const parent = this._node\n if (\n parent.type !== \"Assertion\" &&\n parent.type !== \"CapturingGroup\" &&\n parent.type !== \"Group\" &&\n parent.type !== \"Pattern\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Alternative\",\n parent,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n parent.alternatives.push(this._node)\n }\n\n public onAlternativeLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onGroupEnter(start: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Group\",\n parent,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n parent.elements.push(this._node)\n }\n\n public onGroupLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Group\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCapturingGroupEnter(start: number, name: string | null): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CapturingGroup\",\n parent,\n start,\n end: start,\n raw: \"\",\n name,\n alternatives: [],\n references: [],\n }\n parent.elements.push(this._node)\n this._capturingGroups.push(this._node)\n }\n\n public onCapturingGroupLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CapturingGroup\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last element.\n const element = parent.elements.pop()\n if (\n element == null ||\n element.type === \"Quantifier\" ||\n (element.type === \"Assertion\" && element.kind !== \"lookahead\")\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: Quantifier = {\n type: \"Quantifier\",\n parent,\n start: element.start,\n end,\n raw: this.source.slice(element.start, end),\n min,\n max,\n greedy,\n element,\n }\n parent.elements.push(node)\n element.parent = node\n }\n\n public onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Assertion\",\n parent,\n start,\n end: start,\n raw: \"\",\n kind,\n negate,\n alternatives: [],\n } as LookaroundAssertion\n parent.elements.push(this._node)\n }\n\n public onLookaroundAssertionLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Assertion\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n key,\n value,\n negate,\n })\n }\n\n public onCharacter(start: number, end: number, value: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"Character\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n value,\n })\n }\n\n public onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n const node: Backreference = {\n type: \"Backreference\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n ref,\n resolved: DummyCapturingGroup,\n }\n parent.elements.push(node)\n this._backreferences.push(node)\n }\n\n public onCharacterClassEnter(start: number, negate: boolean): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CharacterClass\",\n parent,\n start,\n end: start,\n raw: \"\",\n negate,\n elements: [],\n }\n parent.elements.push(this._node)\n }\n\n public onCharacterClassLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CharacterClass\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCharacterClassRange(start: number, end: number): void {\n const parent = this._node\n if (parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last three elements.\n const elements = parent.elements\n const max = elements.pop()\n const hyphen = elements.pop()\n const min = elements.pop()\n if (\n !min ||\n !max ||\n !hyphen ||\n min.type !== \"Character\" ||\n max.type !== \"Character\" ||\n hyphen.type !== \"Character\" ||\n hyphen.value !== HyphenMinus\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: CharacterClassRange = {\n type: \"CharacterClassRange\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n min,\n max,\n }\n min.parent = node\n max.parent = node\n elements.push(node)\n }\n}\n\nexport namespace RegExpParser {\n /**\n * The options for RegExpParser construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n }\n}\n\nexport class RegExpParser {\n private _state: RegExpParserState\n private _validator: RegExpValidator\n\n /**\n * Initialize this parser.\n * @param options The options of parser.\n */\n public constructor(options?: RegExpParser.Options) {\n this._state = new RegExpParserState(options)\n this._validator = new RegExpValidator(this._state)\n }\n\n /**\n * Parse a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given regular expression.\n */\n public parseLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): RegExpLiteral {\n this._state.source = source\n this._validator.validateLiteral(source, start, end)\n const pattern = this._state.pattern\n const flags = this._state.flags\n const literal: RegExpLiteral = {\n type: \"RegExpLiteral\",\n parent: null,\n start,\n end,\n raw: source,\n pattern,\n flags,\n }\n pattern.parent = literal\n flags.parent = literal\n return literal\n }\n\n /**\n * Parse a regular expression flags. E.g. \"gim\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given flags.\n */\n public parseFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): Flags {\n this._state.source = source\n this._validator.validateFlags(source, start, end)\n return this._state.flags\n }\n\n /**\n * Parse a regular expression pattern. E.g. \"abc\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n * @returns The AST of the given pattern.\n */\n public parsePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): Pattern {\n this._state.source = source\n this._validator.validatePattern(source, start, end, uFlag)\n return this._state.pattern\n }\n}\n","import {\n Alternative,\n Assertion,\n Backreference,\n CapturingGroup,\n Character,\n CharacterClass,\n CharacterClassRange,\n CharacterSet,\n Flags,\n Group,\n Node,\n Pattern,\n Quantifier,\n RegExpLiteral,\n} from \"./ast\"\n\n/**\n * The visitor to walk on AST.\n */\nexport class RegExpVisitor {\n private readonly _handlers: RegExpVisitor.Handlers\n\n /**\n * Initialize this visitor.\n * @param handlers Callbacks for each node.\n */\n public constructor(handlers: RegExpVisitor.Handlers) {\n this._handlers = handlers\n }\n\n /**\n * Visit a given node and descendant nodes.\n * @param node The root node to visit tree.\n */\n public visit(node: Node): void {\n switch (node.type) {\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"Assertion\":\n this.visitAssertion(node)\n break\n case \"Backreference\":\n this.visitBackreference(node)\n break\n case \"CapturingGroup\":\n this.visitCapturingGroup(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"CharacterClass\":\n this.visitCharacterClass(node)\n break\n case \"CharacterClassRange\":\n this.visitCharacterClassRange(node)\n break\n case \"CharacterSet\":\n this.visitCharacterSet(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n case \"RegExpLiteral\":\n this.visitRegExpLiteral(node)\n break\n default:\n throw new Error(`Unknown type: ${(node as any).type}`)\n }\n }\n\n private visitAlternative(node: Alternative): void {\n if (this._handlers.onAlternativeEnter) {\n this._handlers.onAlternativeEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onAlternativeLeave) {\n this._handlers.onAlternativeLeave(node)\n }\n }\n private visitAssertion(node: Assertion): void {\n if (this._handlers.onAssertionEnter) {\n this._handlers.onAssertionEnter(node)\n }\n if (node.kind === \"lookahead\" || node.kind === \"lookbehind\") {\n node.alternatives.forEach(this.visit, this)\n }\n if (this._handlers.onAssertionLeave) {\n this._handlers.onAssertionLeave(node)\n }\n }\n private visitBackreference(node: Backreference): void {\n if (this._handlers.onBackreferenceEnter) {\n this._handlers.onBackreferenceEnter(node)\n }\n if (this._handlers.onBackreferenceLeave) {\n this._handlers.onBackreferenceLeave(node)\n }\n }\n private visitCapturingGroup(node: CapturingGroup): void {\n if (this._handlers.onCapturingGroupEnter) {\n this._handlers.onCapturingGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onCapturingGroupLeave) {\n this._handlers.onCapturingGroupLeave(node)\n }\n }\n private visitCharacter(node: Character): void {\n if (this._handlers.onCharacterEnter) {\n this._handlers.onCharacterEnter(node)\n }\n if (this._handlers.onCharacterLeave) {\n this._handlers.onCharacterLeave(node)\n }\n }\n private visitCharacterClass(node: CharacterClass): void {\n if (this._handlers.onCharacterClassEnter) {\n this._handlers.onCharacterClassEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onCharacterClassLeave) {\n this._handlers.onCharacterClassLeave(node)\n }\n }\n private visitCharacterClassRange(node: CharacterClassRange): void {\n if (this._handlers.onCharacterClassRangeEnter) {\n this._handlers.onCharacterClassRangeEnter(node)\n }\n this.visitCharacter(node.min)\n this.visitCharacter(node.max)\n if (this._handlers.onCharacterClassRangeLeave) {\n this._handlers.onCharacterClassRangeLeave(node)\n }\n }\n private visitCharacterSet(node: CharacterSet): void {\n if (this._handlers.onCharacterSetEnter) {\n this._handlers.onCharacterSetEnter(node)\n }\n if (this._handlers.onCharacterSetLeave) {\n this._handlers.onCharacterSetLeave(node)\n }\n }\n private visitFlags(node: Flags): void {\n if (this._handlers.onFlagsEnter) {\n this._handlers.onFlagsEnter(node)\n }\n if (this._handlers.onFlagsLeave) {\n this._handlers.onFlagsLeave(node)\n }\n }\n private visitGroup(node: Group): void {\n if (this._handlers.onGroupEnter) {\n this._handlers.onGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onGroupLeave) {\n this._handlers.onGroupLeave(node)\n }\n }\n private visitPattern(node: Pattern): void {\n if (this._handlers.onPatternEnter) {\n this._handlers.onPatternEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onPatternLeave) {\n this._handlers.onPatternLeave(node)\n }\n }\n private visitQuantifier(node: Quantifier): void {\n if (this._handlers.onQuantifierEnter) {\n this._handlers.onQuantifierEnter(node)\n }\n this.visit(node.element)\n if (this._handlers.onQuantifierLeave) {\n this._handlers.onQuantifierLeave(node)\n }\n }\n private visitRegExpLiteral(node: RegExpLiteral): void {\n if (this._handlers.onRegExpLiteralEnter) {\n this._handlers.onRegExpLiteralEnter(node)\n }\n this.visitPattern(node.pattern)\n this.visitFlags(node.flags)\n if (this._handlers.onRegExpLiteralLeave) {\n this._handlers.onRegExpLiteralLeave(node)\n }\n }\n}\n\nexport namespace RegExpVisitor {\n export interface Handlers {\n onAlternativeEnter?(node: Alternative): void\n onAlternativeLeave?(node: Alternative): void\n onAssertionEnter?(node: Assertion): void\n onAssertionLeave?(node: Assertion): void\n onBackreferenceEnter?(node: Backreference): void\n onBackreferenceLeave?(node: Backreference): void\n onCapturingGroupEnter?(node: CapturingGroup): void\n onCapturingGroupLeave?(node: CapturingGroup): void\n onCharacterEnter?(node: Character): void\n onCharacterLeave?(node: Character): void\n onCharacterClassEnter?(node: CharacterClass): void\n onCharacterClassLeave?(node: CharacterClass): void\n onCharacterClassRangeEnter?(node: CharacterClassRange): void\n onCharacterClassRangeLeave?(node: CharacterClassRange): void\n onCharacterSetEnter?(node: CharacterSet): void\n onCharacterSetLeave?(node: CharacterSet): void\n onFlagsEnter?(node: Flags): void\n onFlagsLeave?(node: Flags): void\n onGroupEnter?(node: Group): void\n onGroupLeave?(node: Group): void\n onPatternEnter?(node: Pattern): void\n onPatternLeave?(node: Pattern): void\n onQuantifierEnter?(node: Quantifier): void\n onQuantifierLeave?(node: Quantifier): void\n onRegExpLiteralEnter?(node: RegExpLiteral): void\n onRegExpLiteralLeave?(node: RegExpLiteral): void\n }\n}\n","import * as AST from \"./ast\"\nimport { RegExpParser } from \"./parser\"\nimport { RegExpValidator } from \"./validator\"\nimport { RegExpVisitor } from \"./visitor\"\n\nexport { AST, RegExpParser, RegExpValidator }\n\n/**\n * Parse a given regular expression literal then make AST object.\n * @param source The source code to parse.\n * @param options The options to parse.\n * @returns The AST of the regular expression.\n */\nexport function parseRegExpLiteral(\n source: string | RegExp,\n options?: RegExpParser.Options,\n): AST.RegExpLiteral {\n return new RegExpParser(options).parseLiteral(String(source))\n}\n\n/**\n * Validate a given regular expression literal.\n * @param source The source code to validate.\n * @param options The options to validate.\n */\nexport function validateRegExpLiteral(\n source: string,\n options?: RegExpValidator.Options,\n): void {\n return new RegExpValidator(options).validateLiteral(source)\n}\n\nexport function visitRegExpAST(\n node: AST.Node,\n handlers: RegExpVisitor.Handlers,\n): void {\n new RegExpVisitor(handlers).visit(node)\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.mjs.map","sources":["src/unicode/ids.ts","src/unicode/property-data.ts","src/unicode/index.ts","src/reader.ts","src/regexp-syntax-error.ts","src/validator.ts","src/parser.ts","src/visitor.ts","src/index.ts"],"sourcesContent":["/* Generated from DerivedCoreProperties-11.0.0.txt */\nexport function isIdStart(cp: number): boolean {\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp)\n}\nexport function isIdContinue(cp: number): boolean {\n if (cp < 0x30) return false\n if (cp < 0x3a) return true\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp === 0x5f) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp) || isLargeIdContinue(cp)\n}\n\nfunction isLargeIdStart(cp: number): boolean {\n if (cp < 0x30a1) {\n if (cp < 0xec0) {\n if (cp < 0xa35) {\n if (cp < 0x6e5) {\n if (cp < 0x37a) {\n if (cp < 0x294) {\n if (cp < 0xf8) {\n if (cp === 0xaa) return true\n if (cp === 0xb5) return true\n if (cp === 0xba) return true\n if (cp < 0xc0) return false\n if (cp < 0xd7) return true\n if (cp < 0xd8) return false\n if (cp < 0xf7) return true\n return false\n }\n if (cp < 0x1bb) return true\n if (cp === 0x1bb) return true\n if (cp < 0x1bc) return false\n if (cp < 0x1c0) return true\n if (cp < 0x1c0) return false\n if (cp < 0x1c4) return true\n if (cp < 0x1c4) return false\n if (cp < 0x294) return true\n return false\n }\n if (cp < 0x2ec) {\n if (cp === 0x294) return true\n if (cp < 0x295) return false\n if (cp < 0x2b0) return true\n if (cp < 0x2b0) return false\n if (cp < 0x2c2) return true\n if (cp < 0x2c6) return false\n if (cp < 0x2d2) return true\n if (cp < 0x2e0) return false\n if (cp < 0x2e5) return true\n return false\n }\n if (cp === 0x2ec) return true\n if (cp === 0x2ee) return true\n if (cp < 0x370) return false\n if (cp < 0x374) return true\n if (cp === 0x374) return true\n if (cp < 0x376) return false\n if (cp < 0x378) return true\n return false\n }\n if (cp < 0x531) {\n if (cp < 0x38c) {\n if (cp === 0x37a) return true\n if (cp < 0x37b) return false\n if (cp < 0x37e) return true\n if (cp === 0x37f) return true\n if (cp === 0x386) return true\n if (cp < 0x388) return false\n if (cp < 0x38b) return true\n return false\n }\n if (cp === 0x38c) return true\n if (cp < 0x38e) return false\n if (cp < 0x3a2) return true\n if (cp < 0x3a3) return false\n if (cp < 0x3f6) return true\n if (cp < 0x3f7) return false\n if (cp < 0x482) return true\n if (cp < 0x48a) return false\n if (cp < 0x530) return true\n return false\n }\n if (cp < 0x620) {\n if (cp < 0x531) return false\n if (cp < 0x557) return true\n if (cp === 0x559) return true\n if (cp < 0x560) return false\n if (cp < 0x589) return true\n if (cp < 0x5d0) return false\n if (cp < 0x5eb) return true\n if (cp < 0x5ef) return false\n if (cp < 0x5f3) return true\n return false\n }\n if (cp < 0x640) return true\n if (cp === 0x640) return true\n if (cp < 0x641) return false\n if (cp < 0x64b) return true\n if (cp < 0x66e) return false\n if (cp < 0x670) return true\n if (cp < 0x671) return false\n if (cp < 0x6d4) return true\n if (cp === 0x6d5) return true\n return false\n }\n if (cp < 0x950) {\n if (cp < 0x7fa) {\n if (cp < 0x712) {\n if (cp < 0x6e5) return false\n if (cp < 0x6e7) return true\n if (cp < 0x6ee) return false\n if (cp < 0x6f0) return true\n if (cp < 0x6fa) return false\n if (cp < 0x6fd) return true\n if (cp === 0x6ff) return true\n if (cp === 0x710) return true\n return false\n }\n if (cp < 0x730) return true\n if (cp < 0x74d) return false\n if (cp < 0x7a6) return true\n if (cp === 0x7b1) return true\n if (cp < 0x7ca) return false\n if (cp < 0x7eb) return true\n if (cp < 0x7f4) return false\n if (cp < 0x7f6) return true\n return false\n }\n if (cp < 0x840) {\n if (cp === 0x7fa) return true\n if (cp < 0x800) return false\n if (cp < 0x816) return true\n if (cp === 0x81a) return true\n if (cp === 0x824) return true\n if (cp === 0x828) return true\n return false\n }\n if (cp < 0x859) return true\n if (cp < 0x860) return false\n if (cp < 0x86b) return true\n if (cp < 0x8a0) return false\n if (cp < 0x8b5) return true\n if (cp < 0x8b6) return false\n if (cp < 0x8be) return true\n if (cp < 0x904) return false\n if (cp < 0x93a) return true\n if (cp === 0x93d) return true\n return false\n }\n if (cp < 0x9bd) {\n if (cp < 0x98f) {\n if (cp === 0x950) return true\n if (cp < 0x958) return false\n if (cp < 0x962) return true\n if (cp === 0x971) return true\n if (cp < 0x972) return false\n if (cp < 0x981) return true\n if (cp < 0x985) return false\n if (cp < 0x98d) return true\n return false\n }\n if (cp < 0x991) return true\n if (cp < 0x993) return false\n if (cp < 0x9a9) return true\n if (cp < 0x9aa) return false\n if (cp < 0x9b1) return true\n if (cp === 0x9b2) return true\n if (cp < 0x9b6) return false\n if (cp < 0x9ba) return true\n return false\n }\n if (cp < 0x9fc) {\n if (cp === 0x9bd) return true\n if (cp === 0x9ce) return true\n if (cp < 0x9dc) return false\n if (cp < 0x9de) return true\n if (cp < 0x9df) return false\n if (cp < 0x9e2) return true\n if (cp < 0x9f0) return false\n if (cp < 0x9f2) return true\n return false\n }\n if (cp === 0x9fc) return true\n if (cp < 0xa05) return false\n if (cp < 0xa0b) return true\n if (cp < 0xa0f) return false\n if (cp < 0xa11) return true\n if (cp < 0xa13) return false\n if (cp < 0xa29) return true\n if (cp < 0xa2a) return false\n if (cp < 0xa31) return true\n if (cp < 0xa32) return false\n if (cp < 0xa34) return true\n return false\n }\n if (cp < 0xc60) {\n if (cp < 0xb3d) {\n if (cp < 0xab5) {\n if (cp < 0xa85) {\n if (cp < 0xa35) return false\n if (cp < 0xa37) return true\n if (cp < 0xa38) return false\n if (cp < 0xa3a) return true\n if (cp < 0xa59) return false\n if (cp < 0xa5d) return true\n if (cp === 0xa5e) return true\n if (cp < 0xa72) return false\n if (cp < 0xa75) return true\n return false\n }\n if (cp < 0xa8e) return true\n if (cp < 0xa8f) return false\n if (cp < 0xa92) return true\n if (cp < 0xa93) return false\n if (cp < 0xaa9) return true\n if (cp < 0xaaa) return false\n if (cp < 0xab1) return true\n if (cp < 0xab2) return false\n if (cp < 0xab4) return true\n return false\n }\n if (cp < 0xb05) {\n if (cp < 0xab5) return false\n if (cp < 0xaba) return true\n if (cp === 0xabd) return true\n if (cp === 0xad0) return true\n if (cp < 0xae0) return false\n if (cp < 0xae2) return true\n if (cp === 0xaf9) return true\n return false\n }\n if (cp < 0xb0d) return true\n if (cp < 0xb0f) return false\n if (cp < 0xb11) return true\n if (cp < 0xb13) return false\n if (cp < 0xb29) return true\n if (cp < 0xb2a) return false\n if (cp < 0xb31) return true\n if (cp < 0xb32) return false\n if (cp < 0xb34) return true\n if (cp < 0xb35) return false\n if (cp < 0xb3a) return true\n return false\n }\n if (cp < 0xb9e) {\n if (cp < 0xb85) {\n if (cp === 0xb3d) return true\n if (cp < 0xb5c) return false\n if (cp < 0xb5e) return true\n if (cp < 0xb5f) return false\n if (cp < 0xb62) return true\n if (cp === 0xb71) return true\n if (cp === 0xb83) return true\n return false\n }\n if (cp < 0xb8b) return true\n if (cp < 0xb8e) return false\n if (cp < 0xb91) return true\n if (cp < 0xb92) return false\n if (cp < 0xb96) return true\n if (cp < 0xb99) return false\n if (cp < 0xb9b) return true\n if (cp === 0xb9c) return true\n return false\n }\n if (cp < 0xc05) {\n if (cp < 0xb9e) return false\n if (cp < 0xba0) return true\n if (cp < 0xba3) return false\n if (cp < 0xba5) return true\n if (cp < 0xba8) return false\n if (cp < 0xbab) return true\n if (cp < 0xbae) return false\n if (cp < 0xbba) return true\n if (cp === 0xbd0) return true\n return false\n }\n if (cp < 0xc0d) return true\n if (cp < 0xc0e) return false\n if (cp < 0xc11) return true\n if (cp < 0xc12) return false\n if (cp < 0xc29) return true\n if (cp < 0xc2a) return false\n if (cp < 0xc3a) return true\n if (cp === 0xc3d) return true\n if (cp < 0xc58) return false\n if (cp < 0xc5b) return true\n return false\n }\n if (cp < 0xdb3) {\n if (cp < 0xcf1) {\n if (cp < 0xcaa) {\n if (cp < 0xc60) return false\n if (cp < 0xc62) return true\n if (cp === 0xc80) return true\n if (cp < 0xc85) return false\n if (cp < 0xc8d) return true\n if (cp < 0xc8e) return false\n if (cp < 0xc91) return true\n if (cp < 0xc92) return false\n if (cp < 0xca9) return true\n return false\n }\n if (cp < 0xcb4) return true\n if (cp < 0xcb5) return false\n if (cp < 0xcba) return true\n if (cp === 0xcbd) return true\n if (cp === 0xcde) return true\n if (cp < 0xce0) return false\n if (cp < 0xce2) return true\n return false\n }\n if (cp < 0xd4e) {\n if (cp < 0xcf1) return false\n if (cp < 0xcf3) return true\n if (cp < 0xd05) return false\n if (cp < 0xd0d) return true\n if (cp < 0xd0e) return false\n if (cp < 0xd11) return true\n if (cp < 0xd12) return false\n if (cp < 0xd3b) return true\n if (cp === 0xd3d) return true\n return false\n }\n if (cp === 0xd4e) return true\n if (cp < 0xd54) return false\n if (cp < 0xd57) return true\n if (cp < 0xd5f) return false\n if (cp < 0xd62) return true\n if (cp < 0xd7a) return false\n if (cp < 0xd80) return true\n if (cp < 0xd85) return false\n if (cp < 0xd97) return true\n if (cp < 0xd9a) return false\n if (cp < 0xdb2) return true\n return false\n }\n if (cp < 0xe8a) {\n if (cp < 0xe40) {\n if (cp < 0xdb3) return false\n if (cp < 0xdbc) return true\n if (cp === 0xdbd) return true\n if (cp < 0xdc0) return false\n if (cp < 0xdc7) return true\n if (cp < 0xe01) return false\n if (cp < 0xe31) return true\n if (cp < 0xe32) return false\n if (cp < 0xe34) return true\n return false\n }\n if (cp < 0xe46) return true\n if (cp === 0xe46) return true\n if (cp < 0xe81) return false\n if (cp < 0xe83) return true\n if (cp === 0xe84) return true\n if (cp < 0xe87) return false\n if (cp < 0xe89) return true\n return false\n }\n if (cp < 0xea5) {\n if (cp === 0xe8a) return true\n if (cp === 0xe8d) return true\n if (cp < 0xe94) return false\n if (cp < 0xe98) return true\n if (cp < 0xe99) return false\n if (cp < 0xea0) return true\n if (cp < 0xea1) return false\n if (cp < 0xea4) return true\n return false\n }\n if (cp === 0xea5) return true\n if (cp === 0xea7) return true\n if (cp < 0xeaa) return false\n if (cp < 0xeac) return true\n if (cp < 0xead) return false\n if (cp < 0xeb1) return true\n if (cp < 0xeb2) return false\n if (cp < 0xeb4) return true\n if (cp === 0xebd) return true\n return false\n }\n if (cp < 0x1ce9) {\n if (cp < 0x166f) {\n if (cp < 0x10fd) {\n if (cp < 0x105a) {\n if (cp < 0xf49) {\n if (cp < 0xec0) return false\n if (cp < 0xec5) return true\n if (cp === 0xec6) return true\n if (cp < 0xedc) return false\n if (cp < 0xee0) return true\n if (cp === 0xf00) return true\n if (cp < 0xf40) return false\n if (cp < 0xf48) return true\n return false\n }\n if (cp < 0xf6d) return true\n if (cp < 0xf88) return false\n if (cp < 0xf8d) return true\n if (cp < 0x1000) return false\n if (cp < 0x102b) return true\n if (cp === 0x103f) return true\n if (cp < 0x1050) return false\n if (cp < 0x1056) return true\n return false\n }\n if (cp < 0x108e) {\n if (cp < 0x105a) return false\n if (cp < 0x105e) return true\n if (cp === 0x1061) return true\n if (cp < 0x1065) return false\n if (cp < 0x1067) return true\n if (cp < 0x106e) return false\n if (cp < 0x1071) return true\n if (cp < 0x1075) return false\n if (cp < 0x1082) return true\n return false\n }\n if (cp === 0x108e) return true\n if (cp < 0x10a0) return false\n if (cp < 0x10c6) return true\n if (cp === 0x10c7) return true\n if (cp === 0x10cd) return true\n if (cp < 0x10d0) return false\n if (cp < 0x10fb) return true\n if (cp === 0x10fc) return true\n return false\n }\n if (cp < 0x12b8) {\n if (cp < 0x125a) {\n if (cp < 0x10fd) return false\n if (cp < 0x1100) return true\n if (cp < 0x1100) return false\n if (cp < 0x1249) return true\n if (cp < 0x124a) return false\n if (cp < 0x124e) return true\n if (cp < 0x1250) return false\n if (cp < 0x1257) return true\n if (cp === 0x1258) return true\n return false\n }\n if (cp < 0x125e) return true\n if (cp < 0x1260) return false\n if (cp < 0x1289) return true\n if (cp < 0x128a) return false\n if (cp < 0x128e) return true\n if (cp < 0x1290) return false\n if (cp < 0x12b1) return true\n if (cp < 0x12b2) return false\n if (cp < 0x12b6) return true\n return false\n }\n if (cp < 0x1312) {\n if (cp < 0x12b8) return false\n if (cp < 0x12bf) return true\n if (cp === 0x12c0) return true\n if (cp < 0x12c2) return false\n if (cp < 0x12c6) return true\n if (cp < 0x12c8) return false\n if (cp < 0x12d7) return true\n if (cp < 0x12d8) return false\n if (cp < 0x1311) return true\n return false\n }\n if (cp < 0x1316) return true\n if (cp < 0x1318) return false\n if (cp < 0x135b) return true\n if (cp < 0x1380) return false\n if (cp < 0x1390) return true\n if (cp < 0x13a0) return false\n if (cp < 0x13f6) return true\n if (cp < 0x13f8) return false\n if (cp < 0x13fe) return true\n if (cp < 0x1401) return false\n if (cp < 0x166d) return true\n return false\n }\n if (cp < 0x18b0) {\n if (cp < 0x176e) {\n if (cp < 0x1700) {\n if (cp < 0x166f) return false\n if (cp < 0x1680) return true\n if (cp < 0x1681) return false\n if (cp < 0x169b) return true\n if (cp < 0x16a0) return false\n if (cp < 0x16eb) return true\n if (cp < 0x16ee) return false\n if (cp < 0x16f1) return true\n if (cp < 0x16f1) return false\n if (cp < 0x16f9) return true\n return false\n }\n if (cp < 0x170d) return true\n if (cp < 0x170e) return false\n if (cp < 0x1712) return true\n if (cp < 0x1720) return false\n if (cp < 0x1732) return true\n if (cp < 0x1740) return false\n if (cp < 0x1752) return true\n if (cp < 0x1760) return false\n if (cp < 0x176d) return true\n return false\n }\n if (cp < 0x1843) {\n if (cp < 0x176e) return false\n if (cp < 0x1771) return true\n if (cp < 0x1780) return false\n if (cp < 0x17b4) return true\n if (cp === 0x17d7) return true\n if (cp === 0x17dc) return true\n if (cp < 0x1820) return false\n if (cp < 0x1843) return true\n return false\n }\n if (cp === 0x1843) return true\n if (cp < 0x1844) return false\n if (cp < 0x1879) return true\n if (cp < 0x1880) return false\n if (cp < 0x1885) return true\n if (cp < 0x1885) return false\n if (cp < 0x1887) return true\n if (cp < 0x1887) return false\n if (cp < 0x18a9) return true\n if (cp === 0x18aa) return true\n return false\n }\n if (cp < 0x1b45) {\n if (cp < 0x19b0) {\n if (cp < 0x18b0) return false\n if (cp < 0x18f6) return true\n if (cp < 0x1900) return false\n if (cp < 0x191f) return true\n if (cp < 0x1950) return false\n if (cp < 0x196e) return true\n if (cp < 0x1970) return false\n if (cp < 0x1975) return true\n if (cp < 0x1980) return false\n if (cp < 0x19ac) return true\n return false\n }\n if (cp < 0x19ca) return true\n if (cp < 0x1a00) return false\n if (cp < 0x1a17) return true\n if (cp < 0x1a20) return false\n if (cp < 0x1a55) return true\n if (cp === 0x1aa7) return true\n if (cp < 0x1b05) return false\n if (cp < 0x1b34) return true\n return false\n }\n if (cp < 0x1c4d) {\n if (cp < 0x1b45) return false\n if (cp < 0x1b4c) return true\n if (cp < 0x1b83) return false\n if (cp < 0x1ba1) return true\n if (cp < 0x1bae) return false\n if (cp < 0x1bb0) return true\n if (cp < 0x1bba) return false\n if (cp < 0x1be6) return true\n if (cp < 0x1c00) return false\n if (cp < 0x1c24) return true\n return false\n }\n if (cp < 0x1c50) return true\n if (cp < 0x1c5a) return false\n if (cp < 0x1c78) return true\n if (cp < 0x1c78) return false\n if (cp < 0x1c7e) return true\n if (cp < 0x1c80) return false\n if (cp < 0x1c89) return true\n if (cp < 0x1c90) return false\n if (cp < 0x1cbb) return true\n if (cp < 0x1cbd) return false\n if (cp < 0x1cc0) return true\n return false\n }\n if (cp < 0x212f) {\n if (cp < 0x1fc2) {\n if (cp < 0x1f18) {\n if (cp < 0x1d6b) {\n if (cp < 0x1ce9) return false\n if (cp < 0x1ced) return true\n if (cp < 0x1cee) return false\n if (cp < 0x1cf2) return true\n if (cp < 0x1cf5) return false\n if (cp < 0x1cf7) return true\n if (cp < 0x1d00) return false\n if (cp < 0x1d2c) return true\n if (cp < 0x1d2c) return false\n if (cp < 0x1d6b) return true\n return false\n }\n if (cp < 0x1d78) return true\n if (cp === 0x1d78) return true\n if (cp < 0x1d79) return false\n if (cp < 0x1d9b) return true\n if (cp < 0x1d9b) return false\n if (cp < 0x1dc0) return true\n if (cp < 0x1e00) return false\n if (cp < 0x1f16) return true\n return false\n }\n if (cp < 0x1f5b) {\n if (cp < 0x1f18) return false\n if (cp < 0x1f1e) return true\n if (cp < 0x1f20) return false\n if (cp < 0x1f46) return true\n if (cp < 0x1f48) return false\n if (cp < 0x1f4e) return true\n if (cp < 0x1f50) return false\n if (cp < 0x1f58) return true\n if (cp === 0x1f59) return true\n return false\n }\n if (cp === 0x1f5b) return true\n if (cp === 0x1f5d) return true\n if (cp < 0x1f5f) return false\n if (cp < 0x1f7e) return true\n if (cp < 0x1f80) return false\n if (cp < 0x1fb5) return true\n if (cp < 0x1fb6) return false\n if (cp < 0x1fbd) return true\n if (cp === 0x1fbe) return true\n return false\n }\n if (cp < 0x2102) {\n if (cp < 0x1ff2) {\n if (cp < 0x1fc2) return false\n if (cp < 0x1fc5) return true\n if (cp < 0x1fc6) return false\n if (cp < 0x1fcd) return true\n if (cp < 0x1fd0) return false\n if (cp < 0x1fd4) return true\n if (cp < 0x1fd6) return false\n if (cp < 0x1fdc) return true\n if (cp < 0x1fe0) return false\n if (cp < 0x1fed) return true\n return false\n }\n if (cp < 0x1ff5) return true\n if (cp < 0x1ff6) return false\n if (cp < 0x1ffd) return true\n if (cp === 0x2071) return true\n if (cp === 0x207f) return true\n if (cp < 0x2090) return false\n if (cp < 0x209d) return true\n return false\n }\n if (cp < 0x2119) {\n if (cp === 0x2102) return true\n if (cp === 0x2107) return true\n if (cp < 0x210a) return false\n if (cp < 0x2114) return true\n if (cp === 0x2115) return true\n if (cp === 0x2118) return true\n return false\n }\n if (cp < 0x211e) return true\n if (cp === 0x2124) return true\n if (cp === 0x2126) return true\n if (cp === 0x2128) return true\n if (cp < 0x212a) return false\n if (cp < 0x212e) return true\n if (cp === 0x212e) return true\n return false\n }\n if (cp < 0x2d80) {\n if (cp < 0x2c30) {\n if (cp < 0x214e) {\n if (cp < 0x212f) return false\n if (cp < 0x2135) return true\n if (cp < 0x2135) return false\n if (cp < 0x2139) return true\n if (cp === 0x2139) return true\n if (cp < 0x213c) return false\n if (cp < 0x2140) return true\n if (cp < 0x2145) return false\n if (cp < 0x214a) return true\n return false\n }\n if (cp === 0x214e) return true\n if (cp < 0x2160) return false\n if (cp < 0x2183) return true\n if (cp < 0x2183) return false\n if (cp < 0x2185) return true\n if (cp < 0x2185) return false\n if (cp < 0x2189) return true\n if (cp < 0x2c00) return false\n if (cp < 0x2c2f) return true\n return false\n }\n if (cp < 0x2cf2) {\n if (cp < 0x2c30) return false\n if (cp < 0x2c5f) return true\n if (cp < 0x2c60) return false\n if (cp < 0x2c7c) return true\n if (cp < 0x2c7c) return false\n if (cp < 0x2c7e) return true\n if (cp < 0x2c7e) return false\n if (cp < 0x2ce5) return true\n if (cp < 0x2ceb) return false\n if (cp < 0x2cef) return true\n return false\n }\n if (cp < 0x2cf4) return true\n if (cp < 0x2d00) return false\n if (cp < 0x2d26) return true\n if (cp === 0x2d27) return true\n if (cp === 0x2d2d) return true\n if (cp < 0x2d30) return false\n if (cp < 0x2d68) return true\n if (cp === 0x2d6f) return true\n return false\n }\n if (cp < 0x3006) {\n if (cp < 0x2dc0) {\n if (cp < 0x2d80) return false\n if (cp < 0x2d97) return true\n if (cp < 0x2da0) return false\n if (cp < 0x2da7) return true\n if (cp < 0x2da8) return false\n if (cp < 0x2daf) return true\n if (cp < 0x2db0) return false\n if (cp < 0x2db7) return true\n if (cp < 0x2db8) return false\n if (cp < 0x2dbf) return true\n return false\n }\n if (cp < 0x2dc7) return true\n if (cp < 0x2dc8) return false\n if (cp < 0x2dcf) return true\n if (cp < 0x2dd0) return false\n if (cp < 0x2dd7) return true\n if (cp < 0x2dd8) return false\n if (cp < 0x2ddf) return true\n if (cp === 0x3005) return true\n return false\n }\n if (cp < 0x303b) {\n if (cp === 0x3006) return true\n if (cp === 0x3007) return true\n if (cp < 0x3021) return false\n if (cp < 0x302a) return true\n if (cp < 0x3031) return false\n if (cp < 0x3036) return true\n if (cp < 0x3038) return false\n if (cp < 0x303b) return true\n return false\n }\n if (cp === 0x303b) return true\n if (cp === 0x303c) return true\n if (cp < 0x3041) return false\n if (cp < 0x3097) return true\n if (cp < 0x309b) return false\n if (cp < 0x309d) return true\n if (cp < 0x309d) return false\n if (cp < 0x309f) return true\n if (cp === 0x309f) return true\n return false\n }\n if (cp < 0x10b60) {\n if (cp < 0xd7b0) {\n if (cp < 0xa882) {\n if (cp < 0xa67f) {\n if (cp < 0xa015) {\n if (cp < 0x31a0) {\n if (cp < 0x30a1) return false\n if (cp < 0x30fb) return true\n if (cp < 0x30fc) return false\n if (cp < 0x30ff) return true\n if (cp === 0x30ff) return true\n if (cp < 0x3105) return false\n if (cp < 0x3130) return true\n if (cp < 0x3131) return false\n if (cp < 0x318f) return true\n return false\n }\n if (cp < 0x31bb) return true\n if (cp < 0x31f0) return false\n if (cp < 0x3200) return true\n if (cp < 0x3400) return false\n if (cp < 0x4db6) return true\n if (cp < 0x4e00) return false\n if (cp < 0x9ff0) return true\n if (cp < 0xa000) return false\n if (cp < 0xa015) return true\n return false\n }\n if (cp < 0xa60c) {\n if (cp === 0xa015) return true\n if (cp < 0xa016) return false\n if (cp < 0xa48d) return true\n if (cp < 0xa4d0) return false\n if (cp < 0xa4f8) return true\n if (cp < 0xa4f8) return false\n if (cp < 0xa4fe) return true\n if (cp < 0xa500) return false\n if (cp < 0xa60c) return true\n return false\n }\n if (cp === 0xa60c) return true\n if (cp < 0xa610) return false\n if (cp < 0xa620) return true\n if (cp < 0xa62a) return false\n if (cp < 0xa62c) return true\n if (cp < 0xa640) return false\n if (cp < 0xa66e) return true\n if (cp === 0xa66e) return true\n return false\n }\n if (cp < 0xa78b) {\n if (cp < 0xa717) {\n if (cp === 0xa67f) return true\n if (cp < 0xa680) return false\n if (cp < 0xa69c) return true\n if (cp < 0xa69c) return false\n if (cp < 0xa69e) return true\n if (cp < 0xa6a0) return false\n if (cp < 0xa6e6) return true\n if (cp < 0xa6e6) return false\n if (cp < 0xa6f0) return true\n return false\n }\n if (cp < 0xa720) return true\n if (cp < 0xa722) return false\n if (cp < 0xa770) return true\n if (cp === 0xa770) return true\n if (cp < 0xa771) return false\n if (cp < 0xa788) return true\n if (cp === 0xa788) return true\n return false\n }\n if (cp < 0xa7fa) {\n if (cp < 0xa78b) return false\n if (cp < 0xa78f) return true\n if (cp === 0xa78f) return true\n if (cp < 0xa790) return false\n if (cp < 0xa7ba) return true\n if (cp === 0xa7f7) return true\n if (cp < 0xa7f8) return false\n if (cp < 0xa7fa) return true\n return false\n }\n if (cp === 0xa7fa) return true\n if (cp < 0xa7fb) return false\n if (cp < 0xa802) return true\n if (cp < 0xa803) return false\n if (cp < 0xa806) return true\n if (cp < 0xa807) return false\n if (cp < 0xa80b) return true\n if (cp < 0xa80c) return false\n if (cp < 0xa823) return true\n if (cp < 0xa840) return false\n if (cp < 0xa874) return true\n return false\n }\n if (cp < 0xaab1) {\n if (cp < 0xa9e6) {\n if (cp < 0xa930) {\n if (cp < 0xa882) return false\n if (cp < 0xa8b4) return true\n if (cp < 0xa8f2) return false\n if (cp < 0xa8f8) return true\n if (cp === 0xa8fb) return true\n if (cp < 0xa8fd) return false\n if (cp < 0xa8ff) return true\n if (cp < 0xa90a) return false\n if (cp < 0xa926) return true\n return false\n }\n if (cp < 0xa947) return true\n if (cp < 0xa960) return false\n if (cp < 0xa97d) return true\n if (cp < 0xa984) return false\n if (cp < 0xa9b3) return true\n if (cp === 0xa9cf) return true\n if (cp < 0xa9e0) return false\n if (cp < 0xa9e5) return true\n return false\n }\n if (cp < 0xaa44) {\n if (cp === 0xa9e6) return true\n if (cp < 0xa9e7) return false\n if (cp < 0xa9f0) return true\n if (cp < 0xa9fa) return false\n if (cp < 0xa9ff) return true\n if (cp < 0xaa00) return false\n if (cp < 0xaa29) return true\n if (cp < 0xaa40) return false\n if (cp < 0xaa43) return true\n return false\n }\n if (cp < 0xaa4c) return true\n if (cp < 0xaa60) return false\n if (cp < 0xaa70) return true\n if (cp === 0xaa70) return true\n if (cp < 0xaa71) return false\n if (cp < 0xaa77) return true\n if (cp === 0xaa7a) return true\n if (cp < 0xaa7e) return false\n if (cp < 0xaab0) return true\n return false\n }\n if (cp < 0xab01) {\n if (cp < 0xaadb) {\n if (cp === 0xaab1) return true\n if (cp < 0xaab5) return false\n if (cp < 0xaab7) return true\n if (cp < 0xaab9) return false\n if (cp < 0xaabe) return true\n if (cp === 0xaac0) return true\n if (cp === 0xaac2) return true\n return false\n }\n if (cp < 0xaadd) return true\n if (cp === 0xaadd) return true\n if (cp < 0xaae0) return false\n if (cp < 0xaaeb) return true\n if (cp === 0xaaf2) return true\n if (cp < 0xaaf3) return false\n if (cp < 0xaaf5) return true\n return false\n }\n if (cp < 0xab30) {\n if (cp < 0xab01) return false\n if (cp < 0xab07) return true\n if (cp < 0xab09) return false\n if (cp < 0xab0f) return true\n if (cp < 0xab11) return false\n if (cp < 0xab17) return true\n if (cp < 0xab20) return false\n if (cp < 0xab27) return true\n if (cp < 0xab28) return false\n if (cp < 0xab2f) return true\n return false\n }\n if (cp < 0xab5b) return true\n if (cp < 0xab5c) return false\n if (cp < 0xab60) return true\n if (cp < 0xab60) return false\n if (cp < 0xab66) return true\n if (cp < 0xab70) return false\n if (cp < 0xabc0) return true\n if (cp < 0xabc0) return false\n if (cp < 0xabe3) return true\n if (cp < 0xac00) return false\n if (cp < 0xd7a4) return true\n return false\n }\n if (cp < 0x1032d) {\n if (cp < 0xff41) {\n if (cp < 0xfb3e) {\n if (cp < 0xfb13) {\n if (cp < 0xd7b0) return false\n if (cp < 0xd7c7) return true\n if (cp < 0xd7cb) return false\n if (cp < 0xd7fc) return true\n if (cp < 0xf900) return false\n if (cp < 0xfa6e) return true\n if (cp < 0xfa70) return false\n if (cp < 0xfada) return true\n if (cp < 0xfb00) return false\n if (cp < 0xfb07) return true\n return false\n }\n if (cp < 0xfb18) return true\n if (cp === 0xfb1d) return true\n if (cp < 0xfb1f) return false\n if (cp < 0xfb29) return true\n if (cp < 0xfb2a) return false\n if (cp < 0xfb37) return true\n if (cp < 0xfb38) return false\n if (cp < 0xfb3d) return true\n return false\n }\n if (cp < 0xfd50) {\n if (cp === 0xfb3e) return true\n if (cp < 0xfb40) return false\n if (cp < 0xfb42) return true\n if (cp < 0xfb43) return false\n if (cp < 0xfb45) return true\n if (cp < 0xfb46) return false\n if (cp < 0xfbb2) return true\n if (cp < 0xfbd3) return false\n if (cp < 0xfd3e) return true\n return false\n }\n if (cp < 0xfd90) return true\n if (cp < 0xfd92) return false\n if (cp < 0xfdc8) return true\n if (cp < 0xfdf0) return false\n if (cp < 0xfdfc) return true\n if (cp < 0xfe70) return false\n if (cp < 0xfe75) return true\n if (cp < 0xfe76) return false\n if (cp < 0xfefd) return true\n if (cp < 0xff21) return false\n if (cp < 0xff3b) return true\n return false\n }\n if (cp < 0x10000) {\n if (cp < 0xffa0) {\n if (cp < 0xff41) return false\n if (cp < 0xff5b) return true\n if (cp < 0xff66) return false\n if (cp < 0xff70) return true\n if (cp === 0xff70) return true\n if (cp < 0xff71) return false\n if (cp < 0xff9e) return true\n if (cp < 0xff9e) return false\n if (cp < 0xffa0) return true\n return false\n }\n if (cp < 0xffbf) return true\n if (cp < 0xffc2) return false\n if (cp < 0xffc8) return true\n if (cp < 0xffca) return false\n if (cp < 0xffd0) return true\n if (cp < 0xffd2) return false\n if (cp < 0xffd8) return true\n if (cp < 0xffda) return false\n if (cp < 0xffdd) return true\n return false\n }\n if (cp < 0x10050) {\n if (cp < 0x10000) return false\n if (cp < 0x1000c) return true\n if (cp < 0x1000d) return false\n if (cp < 0x10027) return true\n if (cp < 0x10028) return false\n if (cp < 0x1003b) return true\n if (cp < 0x1003c) return false\n if (cp < 0x1003e) return true\n if (cp < 0x1003f) return false\n if (cp < 0x1004e) return true\n return false\n }\n if (cp < 0x1005e) return true\n if (cp < 0x10080) return false\n if (cp < 0x100fb) return true\n if (cp < 0x10140) return false\n if (cp < 0x10175) return true\n if (cp < 0x10280) return false\n if (cp < 0x1029d) return true\n if (cp < 0x102a0) return false\n if (cp < 0x102d1) return true\n if (cp < 0x10300) return false\n if (cp < 0x10320) return true\n return false\n }\n if (cp < 0x10837) {\n if (cp < 0x10450) {\n if (cp < 0x10380) {\n if (cp < 0x1032d) return false\n if (cp < 0x10341) return true\n if (cp === 0x10341) return true\n if (cp < 0x10342) return false\n if (cp < 0x1034a) return true\n if (cp === 0x1034a) return true\n if (cp < 0x10350) return false\n if (cp < 0x10376) return true\n return false\n }\n if (cp < 0x1039e) return true\n if (cp < 0x103a0) return false\n if (cp < 0x103c4) return true\n if (cp < 0x103c8) return false\n if (cp < 0x103d0) return true\n if (cp < 0x103d1) return false\n if (cp < 0x103d6) return true\n if (cp < 0x10400) return false\n if (cp < 0x10450) return true\n return false\n }\n if (cp < 0x10600) {\n if (cp < 0x10450) return false\n if (cp < 0x1049e) return true\n if (cp < 0x104b0) return false\n if (cp < 0x104d4) return true\n if (cp < 0x104d8) return false\n if (cp < 0x104fc) return true\n if (cp < 0x10500) return false\n if (cp < 0x10528) return true\n if (cp < 0x10530) return false\n if (cp < 0x10564) return true\n return false\n }\n if (cp < 0x10737) return true\n if (cp < 0x10740) return false\n if (cp < 0x10756) return true\n if (cp < 0x10760) return false\n if (cp < 0x10768) return true\n if (cp < 0x10800) return false\n if (cp < 0x10806) return true\n if (cp === 0x10808) return true\n if (cp < 0x1080a) return false\n if (cp < 0x10836) return true\n return false\n }\n if (cp < 0x109be) {\n if (cp < 0x108e0) {\n if (cp < 0x10837) return false\n if (cp < 0x10839) return true\n if (cp === 0x1083c) return true\n if (cp < 0x1083f) return false\n if (cp < 0x10856) return true\n if (cp < 0x10860) return false\n if (cp < 0x10877) return true\n if (cp < 0x10880) return false\n if (cp < 0x1089f) return true\n return false\n }\n if (cp < 0x108f3) return true\n if (cp < 0x108f4) return false\n if (cp < 0x108f6) return true\n if (cp < 0x10900) return false\n if (cp < 0x10916) return true\n if (cp < 0x10920) return false\n if (cp < 0x1093a) return true\n if (cp < 0x10980) return false\n if (cp < 0x109b8) return true\n return false\n }\n if (cp < 0x10a60) {\n if (cp < 0x109be) return false\n if (cp < 0x109c0) return true\n if (cp === 0x10a00) return true\n if (cp < 0x10a10) return false\n if (cp < 0x10a14) return true\n if (cp < 0x10a15) return false\n if (cp < 0x10a18) return true\n if (cp < 0x10a19) return false\n if (cp < 0x10a36) return true\n return false\n }\n if (cp < 0x10a7d) return true\n if (cp < 0x10a80) return false\n if (cp < 0x10a9d) return true\n if (cp < 0x10ac0) return false\n if (cp < 0x10ac8) return true\n if (cp < 0x10ac9) return false\n if (cp < 0x10ae5) return true\n if (cp < 0x10b00) return false\n if (cp < 0x10b36) return true\n if (cp < 0x10b40) return false\n if (cp < 0x10b56) return true\n return false\n }\n if (cp < 0x16e40) {\n if (cp < 0x11580) {\n if (cp < 0x11213) {\n if (cp < 0x11083) {\n if (cp < 0x10d00) {\n if (cp < 0x10b60) return false\n if (cp < 0x10b73) return true\n if (cp < 0x10b80) return false\n if (cp < 0x10b92) return true\n if (cp < 0x10c00) return false\n if (cp < 0x10c49) return true\n if (cp < 0x10c80) return false\n if (cp < 0x10cb3) return true\n if (cp < 0x10cc0) return false\n if (cp < 0x10cf3) return true\n return false\n }\n if (cp < 0x10d24) return true\n if (cp < 0x10f00) return false\n if (cp < 0x10f1d) return true\n if (cp === 0x10f27) return true\n if (cp < 0x10f30) return false\n if (cp < 0x10f46) return true\n if (cp < 0x11003) return false\n if (cp < 0x11038) return true\n return false\n }\n if (cp < 0x11176) {\n if (cp < 0x11083) return false\n if (cp < 0x110b0) return true\n if (cp < 0x110d0) return false\n if (cp < 0x110e9) return true\n if (cp < 0x11103) return false\n if (cp < 0x11127) return true\n if (cp === 0x11144) return true\n if (cp < 0x11150) return false\n if (cp < 0x11173) return true\n return false\n }\n if (cp === 0x11176) return true\n if (cp < 0x11183) return false\n if (cp < 0x111b3) return true\n if (cp < 0x111c1) return false\n if (cp < 0x111c5) return true\n if (cp === 0x111da) return true\n if (cp === 0x111dc) return true\n if (cp < 0x11200) return false\n if (cp < 0x11212) return true\n return false\n }\n if (cp < 0x1132a) {\n if (cp < 0x1129f) {\n if (cp < 0x11213) return false\n if (cp < 0x1122c) return true\n if (cp < 0x11280) return false\n if (cp < 0x11287) return true\n if (cp === 0x11288) return true\n if (cp < 0x1128a) return false\n if (cp < 0x1128e) return true\n if (cp < 0x1128f) return false\n if (cp < 0x1129e) return true\n return false\n }\n if (cp < 0x112a9) return true\n if (cp < 0x112b0) return false\n if (cp < 0x112df) return true\n if (cp < 0x11305) return false\n if (cp < 0x1130d) return true\n if (cp < 0x1130f) return false\n if (cp < 0x11311) return true\n if (cp < 0x11313) return false\n if (cp < 0x11329) return true\n return false\n }\n if (cp < 0x1135d) {\n if (cp < 0x1132a) return false\n if (cp < 0x11331) return true\n if (cp < 0x11332) return false\n if (cp < 0x11334) return true\n if (cp < 0x11335) return false\n if (cp < 0x1133a) return true\n if (cp === 0x1133d) return true\n if (cp === 0x11350) return true\n return false\n }\n if (cp < 0x11362) return true\n if (cp < 0x11400) return false\n if (cp < 0x11435) return true\n if (cp < 0x11447) return false\n if (cp < 0x1144b) return true\n if (cp < 0x11480) return false\n if (cp < 0x114b0) return true\n if (cp < 0x114c4) return false\n if (cp < 0x114c6) return true\n if (cp === 0x114c7) return true\n return false\n }\n if (cp < 0x11d00) {\n if (cp < 0x11a0b) {\n if (cp < 0x11700) {\n if (cp < 0x11580) return false\n if (cp < 0x115af) return true\n if (cp < 0x115d8) return false\n if (cp < 0x115dc) return true\n if (cp < 0x11600) return false\n if (cp < 0x11630) return true\n if (cp === 0x11644) return true\n if (cp < 0x11680) return false\n if (cp < 0x116ab) return true\n return false\n }\n if (cp < 0x1171b) return true\n if (cp < 0x11800) return false\n if (cp < 0x1182c) return true\n if (cp < 0x118a0) return false\n if (cp < 0x118e0) return true\n if (cp === 0x118ff) return true\n if (cp === 0x11a00) return true\n return false\n }\n if (cp < 0x11a9d) {\n if (cp < 0x11a0b) return false\n if (cp < 0x11a33) return true\n if (cp === 0x11a3a) return true\n if (cp === 0x11a50) return true\n if (cp < 0x11a5c) return false\n if (cp < 0x11a84) return true\n if (cp < 0x11a86) return false\n if (cp < 0x11a8a) return true\n return false\n }\n if (cp === 0x11a9d) return true\n if (cp < 0x11ac0) return false\n if (cp < 0x11af9) return true\n if (cp < 0x11c00) return false\n if (cp < 0x11c09) return true\n if (cp < 0x11c0a) return false\n if (cp < 0x11c2f) return true\n if (cp === 0x11c40) return true\n if (cp < 0x11c72) return false\n if (cp < 0x11c90) return true\n return false\n }\n if (cp < 0x12400) {\n if (cp < 0x11d67) {\n if (cp < 0x11d00) return false\n if (cp < 0x11d07) return true\n if (cp < 0x11d08) return false\n if (cp < 0x11d0a) return true\n if (cp < 0x11d0b) return false\n if (cp < 0x11d31) return true\n if (cp === 0x11d46) return true\n if (cp < 0x11d60) return false\n if (cp < 0x11d66) return true\n return false\n }\n if (cp < 0x11d69) return true\n if (cp < 0x11d6a) return false\n if (cp < 0x11d8a) return true\n if (cp === 0x11d98) return true\n if (cp < 0x11ee0) return false\n if (cp < 0x11ef3) return true\n if (cp < 0x12000) return false\n if (cp < 0x1239a) return true\n return false\n }\n if (cp < 0x16a40) {\n if (cp < 0x12400) return false\n if (cp < 0x1246f) return true\n if (cp < 0x12480) return false\n if (cp < 0x12544) return true\n if (cp < 0x13000) return false\n if (cp < 0x1342f) return true\n if (cp < 0x14400) return false\n if (cp < 0x14647) return true\n if (cp < 0x16800) return false\n if (cp < 0x16a39) return true\n return false\n }\n if (cp < 0x16a5f) return true\n if (cp < 0x16ad0) return false\n if (cp < 0x16aee) return true\n if (cp < 0x16b00) return false\n if (cp < 0x16b30) return true\n if (cp < 0x16b40) return false\n if (cp < 0x16b44) return true\n if (cp < 0x16b63) return false\n if (cp < 0x16b78) return true\n if (cp < 0x16b7d) return false\n if (cp < 0x16b90) return true\n return false\n }\n if (cp < 0x1d7c4) {\n if (cp < 0x1d4bd) {\n if (cp < 0x1bc70) {\n if (cp < 0x17000) {\n if (cp < 0x16e40) return false\n if (cp < 0x16e80) return true\n if (cp < 0x16f00) return false\n if (cp < 0x16f45) return true\n if (cp === 0x16f50) return true\n if (cp < 0x16f93) return false\n if (cp < 0x16fa0) return true\n if (cp < 0x16fe0) return false\n if (cp < 0x16fe2) return true\n return false\n }\n if (cp < 0x187f2) return true\n if (cp < 0x18800) return false\n if (cp < 0x18af3) return true\n if (cp < 0x1b000) return false\n if (cp < 0x1b11f) return true\n if (cp < 0x1b170) return false\n if (cp < 0x1b2fc) return true\n if (cp < 0x1bc00) return false\n if (cp < 0x1bc6b) return true\n return false\n }\n if (cp < 0x1d49e) {\n if (cp < 0x1bc70) return false\n if (cp < 0x1bc7d) return true\n if (cp < 0x1bc80) return false\n if (cp < 0x1bc89) return true\n if (cp < 0x1bc90) return false\n if (cp < 0x1bc9a) return true\n if (cp < 0x1d400) return false\n if (cp < 0x1d455) return true\n if (cp < 0x1d456) return false\n if (cp < 0x1d49d) return true\n return false\n }\n if (cp < 0x1d4a0) return true\n if (cp === 0x1d4a2) return true\n if (cp < 0x1d4a5) return false\n if (cp < 0x1d4a7) return true\n if (cp < 0x1d4a9) return false\n if (cp < 0x1d4ad) return true\n if (cp < 0x1d4ae) return false\n if (cp < 0x1d4ba) return true\n if (cp === 0x1d4bb) return true\n return false\n }\n if (cp < 0x1d552) {\n if (cp < 0x1d51e) {\n if (cp < 0x1d4bd) return false\n if (cp < 0x1d4c4) return true\n if (cp < 0x1d4c5) return false\n if (cp < 0x1d506) return true\n if (cp < 0x1d507) return false\n if (cp < 0x1d50b) return true\n if (cp < 0x1d50d) return false\n if (cp < 0x1d515) return true\n if (cp < 0x1d516) return false\n if (cp < 0x1d51d) return true\n return false\n }\n if (cp < 0x1d53a) return true\n if (cp < 0x1d53b) return false\n if (cp < 0x1d53f) return true\n if (cp < 0x1d540) return false\n if (cp < 0x1d545) return true\n if (cp === 0x1d546) return true\n if (cp < 0x1d54a) return false\n if (cp < 0x1d551) return true\n return false\n }\n if (cp < 0x1d716) {\n if (cp < 0x1d552) return false\n if (cp < 0x1d6a6) return true\n if (cp < 0x1d6a8) return false\n if (cp < 0x1d6c1) return true\n if (cp < 0x1d6c2) return false\n if (cp < 0x1d6db) return true\n if (cp < 0x1d6dc) return false\n if (cp < 0x1d6fb) return true\n if (cp < 0x1d6fc) return false\n if (cp < 0x1d715) return true\n return false\n }\n if (cp < 0x1d735) return true\n if (cp < 0x1d736) return false\n if (cp < 0x1d74f) return true\n if (cp < 0x1d750) return false\n if (cp < 0x1d76f) return true\n if (cp < 0x1d770) return false\n if (cp < 0x1d789) return true\n if (cp < 0x1d78a) return false\n if (cp < 0x1d7a9) return true\n if (cp < 0x1d7aa) return false\n if (cp < 0x1d7c3) return true\n return false\n }\n if (cp < 0x1ee5b) {\n if (cp < 0x1ee39) {\n if (cp < 0x1ee21) {\n if (cp < 0x1d7c4) return false\n if (cp < 0x1d7cc) return true\n if (cp < 0x1e800) return false\n if (cp < 0x1e8c5) return true\n if (cp < 0x1e900) return false\n if (cp < 0x1e944) return true\n if (cp < 0x1ee00) return false\n if (cp < 0x1ee04) return true\n if (cp < 0x1ee05) return false\n if (cp < 0x1ee20) return true\n return false\n }\n if (cp < 0x1ee23) return true\n if (cp === 0x1ee24) return true\n if (cp === 0x1ee27) return true\n if (cp < 0x1ee29) return false\n if (cp < 0x1ee33) return true\n if (cp < 0x1ee34) return false\n if (cp < 0x1ee38) return true\n return false\n }\n if (cp < 0x1ee4b) {\n if (cp === 0x1ee39) return true\n if (cp === 0x1ee3b) return true\n if (cp === 0x1ee42) return true\n if (cp === 0x1ee47) return true\n if (cp === 0x1ee49) return true\n return false\n }\n if (cp === 0x1ee4b) return true\n if (cp < 0x1ee4d) return false\n if (cp < 0x1ee50) return true\n if (cp < 0x1ee51) return false\n if (cp < 0x1ee53) return true\n if (cp === 0x1ee54) return true\n if (cp === 0x1ee57) return true\n if (cp === 0x1ee59) return true\n return false\n }\n if (cp < 0x1ee80) {\n if (cp < 0x1ee67) {\n if (cp === 0x1ee5b) return true\n if (cp === 0x1ee5d) return true\n if (cp === 0x1ee5f) return true\n if (cp < 0x1ee61) return false\n if (cp < 0x1ee63) return true\n if (cp === 0x1ee64) return true\n return false\n }\n if (cp < 0x1ee6b) return true\n if (cp < 0x1ee6c) return false\n if (cp < 0x1ee73) return true\n if (cp < 0x1ee74) return false\n if (cp < 0x1ee78) return true\n if (cp < 0x1ee79) return false\n if (cp < 0x1ee7d) return true\n if (cp === 0x1ee7e) return true\n return false\n }\n if (cp < 0x20000) {\n if (cp < 0x1ee80) return false\n if (cp < 0x1ee8a) return true\n if (cp < 0x1ee8b) return false\n if (cp < 0x1ee9c) return true\n if (cp < 0x1eea1) return false\n if (cp < 0x1eea4) return true\n if (cp < 0x1eea5) return false\n if (cp < 0x1eeaa) return true\n if (cp < 0x1eeab) return false\n if (cp < 0x1eebc) return true\n return false\n }\n if (cp < 0x2a6d7) return true\n if (cp < 0x2a700) return false\n if (cp < 0x2b735) return true\n if (cp < 0x2b740) return false\n if (cp < 0x2b81e) return true\n if (cp < 0x2b820) return false\n if (cp < 0x2cea2) return true\n if (cp < 0x2ceb0) return false\n if (cp < 0x2ebe1) return true\n if (cp < 0x2f800) return false\n if (cp < 0x2fa1e) return true\n return false\n}\n\nfunction isLargeIdContinue(cp: number): boolean {\n if (cp < 0x1cd0) {\n if (cp < 0xd82) {\n if (cp < 0xa83) {\n if (cp < 0x93b) {\n if (cp < 0x6ea) {\n if (cp < 0x5c7) {\n if (cp === 0xb7) return true\n if (cp < 0x300) return false\n if (cp < 0x370) return true\n if (cp === 0x387) return true\n if (cp < 0x483) return false\n if (cp < 0x488) return true\n if (cp < 0x591) return false\n if (cp < 0x5be) return true\n if (cp === 0x5bf) return true\n if (cp < 0x5c1) return false\n if (cp < 0x5c3) return true\n if (cp < 0x5c4) return false\n if (cp < 0x5c6) return true\n return false\n }\n if (cp === 0x5c7) return true\n if (cp < 0x610) return false\n if (cp < 0x61b) return true\n if (cp < 0x64b) return false\n if (cp < 0x660) return true\n if (cp < 0x660) return false\n if (cp < 0x66a) return true\n if (cp === 0x670) return true\n if (cp < 0x6d6) return false\n if (cp < 0x6dd) return true\n if (cp < 0x6df) return false\n if (cp < 0x6e5) return true\n if (cp < 0x6e7) return false\n if (cp < 0x6e9) return true\n return false\n }\n if (cp < 0x816) {\n if (cp < 0x6ea) return false\n if (cp < 0x6ee) return true\n if (cp < 0x6f0) return false\n if (cp < 0x6fa) return true\n if (cp === 0x711) return true\n if (cp < 0x730) return false\n if (cp < 0x74b) return true\n if (cp < 0x7a6) return false\n if (cp < 0x7b1) return true\n if (cp < 0x7c0) return false\n if (cp < 0x7ca) return true\n if (cp < 0x7eb) return false\n if (cp < 0x7f4) return true\n if (cp === 0x7fd) return true\n return false\n }\n if (cp < 0x81a) return true\n if (cp < 0x81b) return false\n if (cp < 0x824) return true\n if (cp < 0x825) return false\n if (cp < 0x828) return true\n if (cp < 0x829) return false\n if (cp < 0x82e) return true\n if (cp < 0x859) return false\n if (cp < 0x85c) return true\n if (cp < 0x8d3) return false\n if (cp < 0x8e2) return true\n if (cp < 0x8e3) return false\n if (cp < 0x903) return true\n if (cp === 0x903) return true\n if (cp === 0x93a) return true\n return false\n }\n if (cp < 0x9cd) {\n if (cp < 0x962) {\n if (cp === 0x93b) return true\n if (cp === 0x93c) return true\n if (cp < 0x93e) return false\n if (cp < 0x941) return true\n if (cp < 0x941) return false\n if (cp < 0x949) return true\n if (cp < 0x949) return false\n if (cp < 0x94d) return true\n if (cp === 0x94d) return true\n if (cp < 0x94e) return false\n if (cp < 0x950) return true\n if (cp < 0x951) return false\n if (cp < 0x958) return true\n return false\n }\n if (cp < 0x964) return true\n if (cp < 0x966) return false\n if (cp < 0x970) return true\n if (cp === 0x981) return true\n if (cp < 0x982) return false\n if (cp < 0x984) return true\n if (cp === 0x9bc) return true\n if (cp < 0x9be) return false\n if (cp < 0x9c1) return true\n if (cp < 0x9c1) return false\n if (cp < 0x9c5) return true\n if (cp < 0x9c7) return false\n if (cp < 0x9c9) return true\n if (cp < 0x9cb) return false\n if (cp < 0x9cd) return true\n return false\n }\n if (cp < 0xa3e) {\n if (cp === 0x9cd) return true\n if (cp === 0x9d7) return true\n if (cp < 0x9e2) return false\n if (cp < 0x9e4) return true\n if (cp < 0x9e6) return false\n if (cp < 0x9f0) return true\n if (cp === 0x9fe) return true\n if (cp < 0xa01) return false\n if (cp < 0xa03) return true\n if (cp === 0xa03) return true\n if (cp === 0xa3c) return true\n return false\n }\n if (cp < 0xa41) return true\n if (cp < 0xa41) return false\n if (cp < 0xa43) return true\n if (cp < 0xa47) return false\n if (cp < 0xa49) return true\n if (cp < 0xa4b) return false\n if (cp < 0xa4e) return true\n if (cp === 0xa51) return true\n if (cp < 0xa66) return false\n if (cp < 0xa70) return true\n if (cp < 0xa70) return false\n if (cp < 0xa72) return true\n if (cp === 0xa75) return true\n if (cp < 0xa81) return false\n if (cp < 0xa83) return true\n return false\n }\n if (cp < 0xc00) {\n if (cp < 0xb41) {\n if (cp < 0xae2) {\n if (cp === 0xa83) return true\n if (cp === 0xabc) return true\n if (cp < 0xabe) return false\n if (cp < 0xac1) return true\n if (cp < 0xac1) return false\n if (cp < 0xac6) return true\n if (cp < 0xac7) return false\n if (cp < 0xac9) return true\n if (cp === 0xac9) return true\n if (cp < 0xacb) return false\n if (cp < 0xacd) return true\n if (cp === 0xacd) return true\n return false\n }\n if (cp < 0xae4) return true\n if (cp < 0xae6) return false\n if (cp < 0xaf0) return true\n if (cp < 0xafa) return false\n if (cp < 0xb00) return true\n if (cp === 0xb01) return true\n if (cp < 0xb02) return false\n if (cp < 0xb04) return true\n if (cp === 0xb3c) return true\n if (cp === 0xb3e) return true\n if (cp === 0xb3f) return true\n if (cp === 0xb40) return true\n return false\n }\n if (cp < 0xb82) {\n if (cp < 0xb41) return false\n if (cp < 0xb45) return true\n if (cp < 0xb47) return false\n if (cp < 0xb49) return true\n if (cp < 0xb4b) return false\n if (cp < 0xb4d) return true\n if (cp === 0xb4d) return true\n if (cp === 0xb56) return true\n if (cp === 0xb57) return true\n if (cp < 0xb62) return false\n if (cp < 0xb64) return true\n if (cp < 0xb66) return false\n if (cp < 0xb70) return true\n return false\n }\n if (cp === 0xb82) return true\n if (cp < 0xbbe) return false\n if (cp < 0xbc0) return true\n if (cp === 0xbc0) return true\n if (cp < 0xbc1) return false\n if (cp < 0xbc3) return true\n if (cp < 0xbc6) return false\n if (cp < 0xbc9) return true\n if (cp < 0xbca) return false\n if (cp < 0xbcd) return true\n if (cp === 0xbcd) return true\n if (cp === 0xbd7) return true\n if (cp < 0xbe6) return false\n if (cp < 0xbf0) return true\n return false\n }\n if (cp < 0xcc7) {\n if (cp < 0xc62) {\n if (cp === 0xc00) return true\n if (cp < 0xc01) return false\n if (cp < 0xc04) return true\n if (cp === 0xc04) return true\n if (cp < 0xc3e) return false\n if (cp < 0xc41) return true\n if (cp < 0xc41) return false\n if (cp < 0xc45) return true\n if (cp < 0xc46) return false\n if (cp < 0xc49) return true\n if (cp < 0xc4a) return false\n if (cp < 0xc4e) return true\n if (cp < 0xc55) return false\n if (cp < 0xc57) return true\n return false\n }\n if (cp < 0xc64) return true\n if (cp < 0xc66) return false\n if (cp < 0xc70) return true\n if (cp === 0xc81) return true\n if (cp < 0xc82) return false\n if (cp < 0xc84) return true\n if (cp === 0xcbc) return true\n if (cp === 0xcbe) return true\n if (cp === 0xcbf) return true\n if (cp < 0xcc0) return false\n if (cp < 0xcc5) return true\n if (cp === 0xcc6) return true\n return false\n }\n if (cp < 0xd3b) {\n if (cp < 0xcc7) return false\n if (cp < 0xcc9) return true\n if (cp < 0xcca) return false\n if (cp < 0xccc) return true\n if (cp < 0xccc) return false\n if (cp < 0xcce) return true\n if (cp < 0xcd5) return false\n if (cp < 0xcd7) return true\n if (cp < 0xce2) return false\n if (cp < 0xce4) return true\n if (cp < 0xce6) return false\n if (cp < 0xcf0) return true\n if (cp < 0xd00) return false\n if (cp < 0xd02) return true\n if (cp < 0xd02) return false\n if (cp < 0xd04) return true\n return false\n }\n if (cp < 0xd3d) return true\n if (cp < 0xd3e) return false\n if (cp < 0xd41) return true\n if (cp < 0xd41) return false\n if (cp < 0xd45) return true\n if (cp < 0xd46) return false\n if (cp < 0xd49) return true\n if (cp < 0xd4a) return false\n if (cp < 0xd4d) return true\n if (cp === 0xd4d) return true\n if (cp === 0xd57) return true\n if (cp < 0xd62) return false\n if (cp < 0xd64) return true\n if (cp < 0xd66) return false\n if (cp < 0xd70) return true\n return false\n }\n if (cp < 0x17e0) {\n if (cp < 0x1038) {\n if (cp < 0xf18) {\n if (cp < 0xe31) {\n if (cp < 0xd82) return false\n if (cp < 0xd84) return true\n if (cp === 0xdca) return true\n if (cp < 0xdcf) return false\n if (cp < 0xdd2) return true\n if (cp < 0xdd2) return false\n if (cp < 0xdd5) return true\n if (cp === 0xdd6) return true\n if (cp < 0xdd8) return false\n if (cp < 0xde0) return true\n if (cp < 0xde6) return false\n if (cp < 0xdf0) return true\n if (cp < 0xdf2) return false\n if (cp < 0xdf4) return true\n return false\n }\n if (cp === 0xe31) return true\n if (cp < 0xe34) return false\n if (cp < 0xe3b) return true\n if (cp < 0xe47) return false\n if (cp < 0xe4f) return true\n if (cp < 0xe50) return false\n if (cp < 0xe5a) return true\n if (cp === 0xeb1) return true\n if (cp < 0xeb4) return false\n if (cp < 0xeba) return true\n if (cp < 0xebb) return false\n if (cp < 0xebd) return true\n if (cp < 0xec8) return false\n if (cp < 0xece) return true\n if (cp < 0xed0) return false\n if (cp < 0xeda) return true\n return false\n }\n if (cp < 0xf80) {\n if (cp < 0xf18) return false\n if (cp < 0xf1a) return true\n if (cp < 0xf20) return false\n if (cp < 0xf2a) return true\n if (cp === 0xf35) return true\n if (cp === 0xf37) return true\n if (cp === 0xf39) return true\n if (cp < 0xf3e) return false\n if (cp < 0xf40) return true\n if (cp < 0xf71) return false\n if (cp < 0xf7f) return true\n if (cp === 0xf7f) return true\n return false\n }\n if (cp < 0xf85) return true\n if (cp < 0xf86) return false\n if (cp < 0xf88) return true\n if (cp < 0xf8d) return false\n if (cp < 0xf98) return true\n if (cp < 0xf99) return false\n if (cp < 0xfbd) return true\n if (cp === 0xfc6) return true\n if (cp < 0x102b) return false\n if (cp < 0x102d) return true\n if (cp < 0x102d) return false\n if (cp < 0x1031) return true\n if (cp === 0x1031) return true\n if (cp < 0x1032) return false\n if (cp < 0x1038) return true\n return false\n }\n if (cp < 0x1090) {\n if (cp < 0x1062) {\n if (cp === 0x1038) return true\n if (cp < 0x1039) return false\n if (cp < 0x103b) return true\n if (cp < 0x103b) return false\n if (cp < 0x103d) return true\n if (cp < 0x103d) return false\n if (cp < 0x103f) return true\n if (cp < 0x1040) return false\n if (cp < 0x104a) return true\n if (cp < 0x1056) return false\n if (cp < 0x1058) return true\n if (cp < 0x1058) return false\n if (cp < 0x105a) return true\n if (cp < 0x105e) return false\n if (cp < 0x1061) return true\n return false\n }\n if (cp < 0x1065) return true\n if (cp < 0x1067) return false\n if (cp < 0x106e) return true\n if (cp < 0x1071) return false\n if (cp < 0x1075) return true\n if (cp === 0x1082) return true\n if (cp < 0x1083) return false\n if (cp < 0x1085) return true\n if (cp < 0x1085) return false\n if (cp < 0x1087) return true\n if (cp < 0x1087) return false\n if (cp < 0x108d) return true\n if (cp === 0x108d) return true\n if (cp === 0x108f) return true\n return false\n }\n if (cp < 0x1772) {\n if (cp < 0x1090) return false\n if (cp < 0x109a) return true\n if (cp < 0x109a) return false\n if (cp < 0x109d) return true\n if (cp === 0x109d) return true\n if (cp < 0x135d) return false\n if (cp < 0x1360) return true\n if (cp < 0x1369) return false\n if (cp < 0x1372) return true\n if (cp < 0x1712) return false\n if (cp < 0x1715) return true\n if (cp < 0x1732) return false\n if (cp < 0x1735) return true\n if (cp < 0x1752) return false\n if (cp < 0x1754) return true\n return false\n }\n if (cp < 0x1774) return true\n if (cp < 0x17b4) return false\n if (cp < 0x17b6) return true\n if (cp === 0x17b6) return true\n if (cp < 0x17b7) return false\n if (cp < 0x17be) return true\n if (cp < 0x17be) return false\n if (cp < 0x17c6) return true\n if (cp === 0x17c6) return true\n if (cp < 0x17c7) return false\n if (cp < 0x17c9) return true\n if (cp < 0x17c9) return false\n if (cp < 0x17d4) return true\n if (cp === 0x17dd) return true\n return false\n }\n if (cp < 0x1b04) {\n if (cp < 0x1a1b) {\n if (cp < 0x1930) {\n if (cp < 0x17e0) return false\n if (cp < 0x17ea) return true\n if (cp < 0x180b) return false\n if (cp < 0x180e) return true\n if (cp < 0x1810) return false\n if (cp < 0x181a) return true\n if (cp === 0x18a9) return true\n if (cp < 0x1920) return false\n if (cp < 0x1923) return true\n if (cp < 0x1923) return false\n if (cp < 0x1927) return true\n if (cp < 0x1927) return false\n if (cp < 0x1929) return true\n if (cp < 0x1929) return false\n if (cp < 0x192c) return true\n return false\n }\n if (cp < 0x1932) return true\n if (cp === 0x1932) return true\n if (cp < 0x1933) return false\n if (cp < 0x1939) return true\n if (cp < 0x1939) return false\n if (cp < 0x193c) return true\n if (cp < 0x1946) return false\n if (cp < 0x1950) return true\n if (cp < 0x19d0) return false\n if (cp < 0x19da) return true\n if (cp === 0x19da) return true\n if (cp < 0x1a17) return false\n if (cp < 0x1a19) return true\n if (cp < 0x1a19) return false\n if (cp < 0x1a1b) return true\n return false\n }\n if (cp < 0x1a63) {\n if (cp === 0x1a1b) return true\n if (cp === 0x1a55) return true\n if (cp === 0x1a56) return true\n if (cp === 0x1a57) return true\n if (cp < 0x1a58) return false\n if (cp < 0x1a5f) return true\n if (cp === 0x1a60) return true\n if (cp === 0x1a61) return true\n if (cp === 0x1a62) return true\n return false\n }\n if (cp < 0x1a65) return true\n if (cp < 0x1a65) return false\n if (cp < 0x1a6d) return true\n if (cp < 0x1a6d) return false\n if (cp < 0x1a73) return true\n if (cp < 0x1a73) return false\n if (cp < 0x1a7d) return true\n if (cp === 0x1a7f) return true\n if (cp < 0x1a80) return false\n if (cp < 0x1a8a) return true\n if (cp < 0x1a90) return false\n if (cp < 0x1a9a) return true\n if (cp < 0x1ab0) return false\n if (cp < 0x1abe) return true\n if (cp < 0x1b00) return false\n if (cp < 0x1b04) return true\n return false\n }\n if (cp < 0x1baa) {\n if (cp < 0x1b43) {\n if (cp === 0x1b04) return true\n if (cp === 0x1b34) return true\n if (cp === 0x1b35) return true\n if (cp < 0x1b36) return false\n if (cp < 0x1b3b) return true\n if (cp === 0x1b3b) return true\n if (cp === 0x1b3c) return true\n if (cp < 0x1b3d) return false\n if (cp < 0x1b42) return true\n if (cp === 0x1b42) return true\n return false\n }\n if (cp < 0x1b45) return true\n if (cp < 0x1b50) return false\n if (cp < 0x1b5a) return true\n if (cp < 0x1b6b) return false\n if (cp < 0x1b74) return true\n if (cp < 0x1b80) return false\n if (cp < 0x1b82) return true\n if (cp === 0x1b82) return true\n if (cp === 0x1ba1) return true\n if (cp < 0x1ba2) return false\n if (cp < 0x1ba6) return true\n if (cp < 0x1ba6) return false\n if (cp < 0x1ba8) return true\n if (cp < 0x1ba8) return false\n if (cp < 0x1baa) return true\n return false\n }\n if (cp < 0x1bee) {\n if (cp === 0x1baa) return true\n if (cp < 0x1bab) return false\n if (cp < 0x1bae) return true\n if (cp < 0x1bb0) return false\n if (cp < 0x1bba) return true\n if (cp === 0x1be6) return true\n if (cp === 0x1be7) return true\n if (cp < 0x1be8) return false\n if (cp < 0x1bea) return true\n if (cp < 0x1bea) return false\n if (cp < 0x1bed) return true\n if (cp === 0x1bed) return true\n return false\n }\n if (cp === 0x1bee) return true\n if (cp < 0x1bef) return false\n if (cp < 0x1bf2) return true\n if (cp < 0x1bf2) return false\n if (cp < 0x1bf4) return true\n if (cp < 0x1c24) return false\n if (cp < 0x1c2c) return true\n if (cp < 0x1c2c) return false\n if (cp < 0x1c34) return true\n if (cp < 0x1c34) return false\n if (cp < 0x1c36) return true\n if (cp < 0x1c36) return false\n if (cp < 0x1c38) return true\n if (cp < 0x1c40) return false\n if (cp < 0x1c4a) return true\n if (cp < 0x1c50) return false\n if (cp < 0x1c5a) return true\n return false\n }\n if (cp < 0x1123e) {\n if (cp < 0xaab7) {\n if (cp < 0xa8b4) {\n if (cp < 0x2d7f) {\n if (cp < 0x1cf8) {\n if (cp < 0x1cd0) return false\n if (cp < 0x1cd3) return true\n if (cp < 0x1cd4) return false\n if (cp < 0x1ce1) return true\n if (cp === 0x1ce1) return true\n if (cp < 0x1ce2) return false\n if (cp < 0x1ce9) return true\n if (cp === 0x1ced) return true\n if (cp < 0x1cf2) return false\n if (cp < 0x1cf4) return true\n if (cp === 0x1cf4) return true\n if (cp === 0x1cf7) return true\n return false\n }\n if (cp < 0x1cfa) return true\n if (cp < 0x1dc0) return false\n if (cp < 0x1dfa) return true\n if (cp < 0x1dfb) return false\n if (cp < 0x1e00) return true\n if (cp < 0x203f) return false\n if (cp < 0x2041) return true\n if (cp === 0x2054) return true\n if (cp < 0x20d0) return false\n if (cp < 0x20dd) return true\n if (cp === 0x20e1) return true\n if (cp < 0x20e5) return false\n if (cp < 0x20f1) return true\n if (cp < 0x2cef) return false\n if (cp < 0x2cf2) return true\n return false\n }\n if (cp < 0xa69e) {\n if (cp === 0x2d7f) return true\n if (cp < 0x2de0) return false\n if (cp < 0x2e00) return true\n if (cp < 0x302a) return false\n if (cp < 0x302e) return true\n if (cp < 0x302e) return false\n if (cp < 0x3030) return true\n if (cp < 0x3099) return false\n if (cp < 0x309b) return true\n if (cp < 0xa620) return false\n if (cp < 0xa62a) return true\n if (cp === 0xa66f) return true\n if (cp < 0xa674) return false\n if (cp < 0xa67e) return true\n return false\n }\n if (cp < 0xa6a0) return true\n if (cp < 0xa6f0) return false\n if (cp < 0xa6f2) return true\n if (cp === 0xa802) return true\n if (cp === 0xa806) return true\n if (cp === 0xa80b) return true\n if (cp < 0xa823) return false\n if (cp < 0xa825) return true\n if (cp < 0xa825) return false\n if (cp < 0xa827) return true\n if (cp === 0xa827) return true\n if (cp < 0xa880) return false\n if (cp < 0xa882) return true\n return false\n }\n if (cp < 0xa9d0) {\n if (cp < 0xa952) {\n if (cp < 0xa8b4) return false\n if (cp < 0xa8c4) return true\n if (cp < 0xa8c4) return false\n if (cp < 0xa8c6) return true\n if (cp < 0xa8d0) return false\n if (cp < 0xa8da) return true\n if (cp < 0xa8e0) return false\n if (cp < 0xa8f2) return true\n if (cp === 0xa8ff) return true\n if (cp < 0xa900) return false\n if (cp < 0xa90a) return true\n if (cp < 0xa926) return false\n if (cp < 0xa92e) return true\n if (cp < 0xa947) return false\n if (cp < 0xa952) return true\n return false\n }\n if (cp < 0xa954) return true\n if (cp < 0xa980) return false\n if (cp < 0xa983) return true\n if (cp === 0xa983) return true\n if (cp === 0xa9b3) return true\n if (cp < 0xa9b4) return false\n if (cp < 0xa9b6) return true\n if (cp < 0xa9b6) return false\n if (cp < 0xa9ba) return true\n if (cp < 0xa9ba) return false\n if (cp < 0xa9bc) return true\n if (cp === 0xa9bc) return true\n if (cp < 0xa9bd) return false\n if (cp < 0xa9c1) return true\n return false\n }\n if (cp < 0xaa43) {\n if (cp < 0xa9d0) return false\n if (cp < 0xa9da) return true\n if (cp === 0xa9e5) return true\n if (cp < 0xa9f0) return false\n if (cp < 0xa9fa) return true\n if (cp < 0xaa29) return false\n if (cp < 0xaa2f) return true\n if (cp < 0xaa2f) return false\n if (cp < 0xaa31) return true\n if (cp < 0xaa31) return false\n if (cp < 0xaa33) return true\n if (cp < 0xaa33) return false\n if (cp < 0xaa35) return true\n if (cp < 0xaa35) return false\n if (cp < 0xaa37) return true\n return false\n }\n if (cp === 0xaa43) return true\n if (cp === 0xaa4c) return true\n if (cp === 0xaa4d) return true\n if (cp < 0xaa50) return false\n if (cp < 0xaa5a) return true\n if (cp === 0xaa7b) return true\n if (cp === 0xaa7c) return true\n if (cp === 0xaa7d) return true\n if (cp === 0xaab0) return true\n if (cp < 0xaab2) return false\n if (cp < 0xaab5) return true\n return false\n }\n if (cp < 0x10d30) {\n if (cp < 0xfe00) {\n if (cp < 0xabe3) {\n if (cp < 0xaab7) return false\n if (cp < 0xaab9) return true\n if (cp < 0xaabe) return false\n if (cp < 0xaac0) return true\n if (cp === 0xaac1) return true\n if (cp === 0xaaeb) return true\n if (cp < 0xaaec) return false\n if (cp < 0xaaee) return true\n if (cp < 0xaaee) return false\n if (cp < 0xaaf0) return true\n if (cp === 0xaaf5) return true\n if (cp === 0xaaf6) return true\n return false\n }\n if (cp < 0xabe5) return true\n if (cp === 0xabe5) return true\n if (cp < 0xabe6) return false\n if (cp < 0xabe8) return true\n if (cp === 0xabe8) return true\n if (cp < 0xabe9) return false\n if (cp < 0xabeb) return true\n if (cp === 0xabec) return true\n if (cp === 0xabed) return true\n if (cp < 0xabf0) return false\n if (cp < 0xabfa) return true\n if (cp === 0xfb1e) return true\n return false\n }\n if (cp < 0x10376) {\n if (cp < 0xfe00) return false\n if (cp < 0xfe10) return true\n if (cp < 0xfe20) return false\n if (cp < 0xfe30) return true\n if (cp < 0xfe33) return false\n if (cp < 0xfe35) return true\n if (cp < 0xfe4d) return false\n if (cp < 0xfe50) return true\n if (cp < 0xff10) return false\n if (cp < 0xff1a) return true\n if (cp === 0xff3f) return true\n if (cp === 0x101fd) return true\n if (cp === 0x102e0) return true\n return false\n }\n if (cp < 0x1037b) return true\n if (cp < 0x104a0) return false\n if (cp < 0x104aa) return true\n if (cp < 0x10a01) return false\n if (cp < 0x10a04) return true\n if (cp < 0x10a05) return false\n if (cp < 0x10a07) return true\n if (cp < 0x10a0c) return false\n if (cp < 0x10a10) return true\n if (cp < 0x10a38) return false\n if (cp < 0x10a3b) return true\n if (cp === 0x10a3f) return true\n if (cp < 0x10ae5) return false\n if (cp < 0x10ae7) return true\n if (cp < 0x10d24) return false\n if (cp < 0x10d28) return true\n return false\n }\n if (cp < 0x1112d) {\n if (cp < 0x11082) {\n if (cp < 0x10d30) return false\n if (cp < 0x10d3a) return true\n if (cp < 0x10f46) return false\n if (cp < 0x10f51) return true\n if (cp === 0x11000) return true\n if (cp === 0x11001) return true\n if (cp === 0x11002) return true\n if (cp < 0x11038) return false\n if (cp < 0x11047) return true\n if (cp < 0x11066) return false\n if (cp < 0x11070) return true\n if (cp < 0x1107f) return false\n if (cp < 0x11082) return true\n return false\n }\n if (cp === 0x11082) return true\n if (cp < 0x110b0) return false\n if (cp < 0x110b3) return true\n if (cp < 0x110b3) return false\n if (cp < 0x110b7) return true\n if (cp < 0x110b7) return false\n if (cp < 0x110b9) return true\n if (cp < 0x110b9) return false\n if (cp < 0x110bb) return true\n if (cp < 0x110f0) return false\n if (cp < 0x110fa) return true\n if (cp < 0x11100) return false\n if (cp < 0x11103) return true\n if (cp < 0x11127) return false\n if (cp < 0x1112c) return true\n if (cp === 0x1112c) return true\n return false\n }\n if (cp < 0x111bf) {\n if (cp < 0x1112d) return false\n if (cp < 0x11135) return true\n if (cp < 0x11136) return false\n if (cp < 0x11140) return true\n if (cp < 0x11145) return false\n if (cp < 0x11147) return true\n if (cp === 0x11173) return true\n if (cp < 0x11180) return false\n if (cp < 0x11182) return true\n if (cp === 0x11182) return true\n if (cp < 0x111b3) return false\n if (cp < 0x111b6) return true\n if (cp < 0x111b6) return false\n if (cp < 0x111bf) return true\n return false\n }\n if (cp < 0x111c1) return true\n if (cp < 0x111c9) return false\n if (cp < 0x111cd) return true\n if (cp < 0x111d0) return false\n if (cp < 0x111da) return true\n if (cp < 0x1122c) return false\n if (cp < 0x1122f) return true\n if (cp < 0x1122f) return false\n if (cp < 0x11232) return true\n if (cp < 0x11232) return false\n if (cp < 0x11234) return true\n if (cp === 0x11234) return true\n if (cp === 0x11235) return true\n if (cp < 0x11236) return false\n if (cp < 0x11238) return true\n return false\n }\n if (cp < 0x11a33) {\n if (cp < 0x115af) {\n if (cp < 0x11435) {\n if (cp < 0x1133e) {\n if (cp === 0x1123e) return true\n if (cp === 0x112df) return true\n if (cp < 0x112e0) return false\n if (cp < 0x112e3) return true\n if (cp < 0x112e3) return false\n if (cp < 0x112eb) return true\n if (cp < 0x112f0) return false\n if (cp < 0x112fa) return true\n if (cp < 0x11300) return false\n if (cp < 0x11302) return true\n if (cp < 0x11302) return false\n if (cp < 0x11304) return true\n if (cp < 0x1133b) return false\n if (cp < 0x1133d) return true\n return false\n }\n if (cp < 0x11340) return true\n if (cp === 0x11340) return true\n if (cp < 0x11341) return false\n if (cp < 0x11345) return true\n if (cp < 0x11347) return false\n if (cp < 0x11349) return true\n if (cp < 0x1134b) return false\n if (cp < 0x1134e) return true\n if (cp === 0x11357) return true\n if (cp < 0x11362) return false\n if (cp < 0x11364) return true\n if (cp < 0x11366) return false\n if (cp < 0x1136d) return true\n if (cp < 0x11370) return false\n if (cp < 0x11375) return true\n return false\n }\n if (cp < 0x114b0) {\n if (cp < 0x11435) return false\n if (cp < 0x11438) return true\n if (cp < 0x11438) return false\n if (cp < 0x11440) return true\n if (cp < 0x11440) return false\n if (cp < 0x11442) return true\n if (cp < 0x11442) return false\n if (cp < 0x11445) return true\n if (cp === 0x11445) return true\n if (cp === 0x11446) return true\n if (cp < 0x11450) return false\n if (cp < 0x1145a) return true\n if (cp === 0x1145e) return true\n return false\n }\n if (cp < 0x114b3) return true\n if (cp < 0x114b3) return false\n if (cp < 0x114b9) return true\n if (cp === 0x114b9) return true\n if (cp === 0x114ba) return true\n if (cp < 0x114bb) return false\n if (cp < 0x114bf) return true\n if (cp < 0x114bf) return false\n if (cp < 0x114c1) return true\n if (cp === 0x114c1) return true\n if (cp < 0x114c2) return false\n if (cp < 0x114c4) return true\n if (cp < 0x114d0) return false\n if (cp < 0x114da) return true\n return false\n }\n if (cp < 0x116ae) {\n if (cp < 0x11633) {\n if (cp < 0x115af) return false\n if (cp < 0x115b2) return true\n if (cp < 0x115b2) return false\n if (cp < 0x115b6) return true\n if (cp < 0x115b8) return false\n if (cp < 0x115bc) return true\n if (cp < 0x115bc) return false\n if (cp < 0x115be) return true\n if (cp === 0x115be) return true\n if (cp < 0x115bf) return false\n if (cp < 0x115c1) return true\n if (cp < 0x115dc) return false\n if (cp < 0x115de) return true\n if (cp < 0x11630) return false\n if (cp < 0x11633) return true\n return false\n }\n if (cp < 0x1163b) return true\n if (cp < 0x1163b) return false\n if (cp < 0x1163d) return true\n if (cp === 0x1163d) return true\n if (cp === 0x1163e) return true\n if (cp < 0x1163f) return false\n if (cp < 0x11641) return true\n if (cp < 0x11650) return false\n if (cp < 0x1165a) return true\n if (cp === 0x116ab) return true\n if (cp === 0x116ac) return true\n if (cp === 0x116ad) return true\n return false\n }\n if (cp < 0x11726) {\n if (cp < 0x116ae) return false\n if (cp < 0x116b0) return true\n if (cp < 0x116b0) return false\n if (cp < 0x116b6) return true\n if (cp === 0x116b6) return true\n if (cp === 0x116b7) return true\n if (cp < 0x116c0) return false\n if (cp < 0x116ca) return true\n if (cp < 0x1171d) return false\n if (cp < 0x11720) return true\n if (cp < 0x11720) return false\n if (cp < 0x11722) return true\n if (cp < 0x11722) return false\n if (cp < 0x11726) return true\n return false\n }\n if (cp === 0x11726) return true\n if (cp < 0x11727) return false\n if (cp < 0x1172c) return true\n if (cp < 0x11730) return false\n if (cp < 0x1173a) return true\n if (cp < 0x1182c) return false\n if (cp < 0x1182f) return true\n if (cp < 0x1182f) return false\n if (cp < 0x11838) return true\n if (cp === 0x11838) return true\n if (cp < 0x11839) return false\n if (cp < 0x1183b) return true\n if (cp < 0x118e0) return false\n if (cp < 0x118ea) return true\n if (cp < 0x11a01) return false\n if (cp < 0x11a0b) return true\n return false\n }\n if (cp < 0x11d97) {\n if (cp < 0x11ca9) {\n if (cp < 0x11a97) {\n if (cp < 0x11a33) return false\n if (cp < 0x11a39) return true\n if (cp === 0x11a39) return true\n if (cp < 0x11a3b) return false\n if (cp < 0x11a3f) return true\n if (cp === 0x11a47) return true\n if (cp < 0x11a51) return false\n if (cp < 0x11a57) return true\n if (cp < 0x11a57) return false\n if (cp < 0x11a59) return true\n if (cp < 0x11a59) return false\n if (cp < 0x11a5c) return true\n if (cp < 0x11a8a) return false\n if (cp < 0x11a97) return true\n return false\n }\n if (cp === 0x11a97) return true\n if (cp < 0x11a98) return false\n if (cp < 0x11a9a) return true\n if (cp === 0x11c2f) return true\n if (cp < 0x11c30) return false\n if (cp < 0x11c37) return true\n if (cp < 0x11c38) return false\n if (cp < 0x11c3e) return true\n if (cp === 0x11c3e) return true\n if (cp === 0x11c3f) return true\n if (cp < 0x11c50) return false\n if (cp < 0x11c5a) return true\n if (cp < 0x11c92) return false\n if (cp < 0x11ca8) return true\n return false\n }\n if (cp < 0x11d3c) {\n if (cp === 0x11ca9) return true\n if (cp < 0x11caa) return false\n if (cp < 0x11cb1) return true\n if (cp === 0x11cb1) return true\n if (cp < 0x11cb2) return false\n if (cp < 0x11cb4) return true\n if (cp === 0x11cb4) return true\n if (cp < 0x11cb5) return false\n if (cp < 0x11cb7) return true\n if (cp < 0x11d31) return false\n if (cp < 0x11d37) return true\n if (cp === 0x11d3a) return true\n return false\n }\n if (cp < 0x11d3e) return true\n if (cp < 0x11d3f) return false\n if (cp < 0x11d46) return true\n if (cp === 0x11d47) return true\n if (cp < 0x11d50) return false\n if (cp < 0x11d5a) return true\n if (cp < 0x11d8a) return false\n if (cp < 0x11d8f) return true\n if (cp < 0x11d90) return false\n if (cp < 0x11d92) return true\n if (cp < 0x11d93) return false\n if (cp < 0x11d95) return true\n if (cp === 0x11d95) return true\n if (cp === 0x11d96) return true\n return false\n }\n if (cp < 0x1d242) {\n if (cp < 0x16f51) {\n if (cp === 0x11d97) return true\n if (cp < 0x11da0) return false\n if (cp < 0x11daa) return true\n if (cp < 0x11ef3) return false\n if (cp < 0x11ef5) return true\n if (cp < 0x11ef5) return false\n if (cp < 0x11ef7) return true\n if (cp < 0x16a60) return false\n if (cp < 0x16a6a) return true\n if (cp < 0x16af0) return false\n if (cp < 0x16af5) return true\n if (cp < 0x16b30) return false\n if (cp < 0x16b37) return true\n if (cp < 0x16b50) return false\n if (cp < 0x16b5a) return true\n return false\n }\n if (cp < 0x16f7f) return true\n if (cp < 0x16f8f) return false\n if (cp < 0x16f93) return true\n if (cp < 0x1bc9d) return false\n if (cp < 0x1bc9f) return true\n if (cp < 0x1d165) return false\n if (cp < 0x1d167) return true\n if (cp < 0x1d167) return false\n if (cp < 0x1d16a) return true\n if (cp < 0x1d16d) return false\n if (cp < 0x1d173) return true\n if (cp < 0x1d17b) return false\n if (cp < 0x1d183) return true\n if (cp < 0x1d185) return false\n if (cp < 0x1d18c) return true\n if (cp < 0x1d1aa) return false\n if (cp < 0x1d1ae) return true\n return false\n }\n if (cp < 0x1e000) {\n if (cp < 0x1d242) return false\n if (cp < 0x1d245) return true\n if (cp < 0x1d7ce) return false\n if (cp < 0x1d800) return true\n if (cp < 0x1da00) return false\n if (cp < 0x1da37) return true\n if (cp < 0x1da3b) return false\n if (cp < 0x1da6d) return true\n if (cp === 0x1da75) return true\n if (cp === 0x1da84) return true\n if (cp < 0x1da9b) return false\n if (cp < 0x1daa0) return true\n if (cp < 0x1daa1) return false\n if (cp < 0x1dab0) return true\n return false\n }\n if (cp < 0x1e007) return true\n if (cp < 0x1e008) return false\n if (cp < 0x1e019) return true\n if (cp < 0x1e01b) return false\n if (cp < 0x1e022) return true\n if (cp < 0x1e023) return false\n if (cp < 0x1e025) return true\n if (cp < 0x1e026) return false\n if (cp < 0x1e02b) return true\n if (cp < 0x1e8d0) return false\n if (cp < 0x1e8d7) return true\n if (cp < 0x1e944) return false\n if (cp < 0x1e94b) return true\n if (cp < 0x1e950) return false\n if (cp < 0x1e95a) return true\n if (cp < 0xe0100) return false\n if (cp < 0xe01f0) return true\n return false\n}\n","const PropertyData: Object & { [key: string]: Set } = {\n $LONE: new Set([\n \"ASCII\",\n \"ASCII_Hex_Digit\",\n \"AHex\",\n \"Alphabetic\",\n \"Alpha\",\n \"Any\",\n \"Assigned\",\n \"Bidi_Control\",\n \"Bidi_C\",\n \"Bidi_Mirrored\",\n \"Bidi_M\",\n \"Case_Ignorable\",\n \"CI\",\n \"Cased\",\n \"Changes_When_Casefolded\",\n \"CWCF\",\n \"Changes_When_Casemapped\",\n \"CWCM\",\n \"Changes_When_Lowercased\",\n \"CWL\",\n \"Changes_When_NFKC_Casefolded\",\n \"CWKCF\",\n \"Changes_When_Titlecased\",\n \"CWT\",\n \"Changes_When_Uppercased\",\n \"CWU\",\n \"Dash\",\n \"Default_Ignorable_Code_Point\",\n \"DI\",\n \"Deprecated\",\n \"Dep\",\n \"Diacritic\",\n \"Dia\",\n \"Emoji\",\n \"Emoji_Component\",\n \"Emoji_Modifier\",\n \"Emoji_Modifier_Base\",\n \"Emoji_Presentation\",\n \"Extender\",\n \"Ext\",\n \"Grapheme_Base\",\n \"Gr_Base\",\n \"Grapheme_Extend\",\n \"Gr_Ext\",\n \"Hex_Digit\",\n \"Hex\",\n \"IDS_Binary_Operator\",\n \"IDSB\",\n \"IDS_Trinary_Operator\",\n \"IDST\",\n \"ID_Continue\",\n \"IDC\",\n \"ID_Start\",\n \"IDS\",\n \"Ideographic\",\n \"Ideo\",\n \"Join_Control\",\n \"Join_C\",\n \"Logical_Order_Exception\",\n \"LOE\",\n \"Lowercase\",\n \"Lower\",\n \"Math\",\n \"Noncharacter_Code_Point\",\n \"NChar\",\n \"Pattern_Syntax\",\n \"Pat_Syn\",\n \"Pattern_White_Space\",\n \"Pat_WS\",\n \"Quotation_Mark\",\n \"QMark\",\n \"Radical\",\n \"Regional_Indicator\",\n \"RI\",\n \"Sentence_Terminal\",\n \"STerm\",\n \"Soft_Dotted\",\n \"SD\",\n \"Terminal_Punctuation\",\n \"Term\",\n \"Unified_Ideograph\",\n \"UIdeo\",\n \"Uppercase\",\n \"Upper\",\n \"Variation_Selector\",\n \"VS\",\n \"White_Space\",\n \"space\",\n \"XID_Continue\",\n \"XIDC\",\n \"XID_Start\",\n \"XIDS\",\n ]),\n General_Category: new Set([\n \"Cased_Letter\",\n \"LC\",\n \"Close_Punctuation\",\n \"Pe\",\n \"Connector_Punctuation\",\n \"Pc\",\n \"Control\",\n \"Cc\",\n \"cntrl\",\n \"Currency_Symbol\",\n \"Sc\",\n \"Dash_Punctuation\",\n \"Pd\",\n \"Decimal_Number\",\n \"Nd\",\n \"digit\",\n \"Enclosing_Mark\",\n \"Me\",\n \"Final_Punctuation\",\n \"Pf\",\n \"Format\",\n \"Cf\",\n \"Initial_Punctuation\",\n \"Pi\",\n \"Letter\",\n \"L\",\n \"Letter_Number\",\n \"Nl\",\n \"Line_Separator\",\n \"Zl\",\n \"Lowercase_Letter\",\n \"Ll\",\n \"Mark\",\n \"M\",\n \"Combining_Mark\",\n \"Math_Symbol\",\n \"Sm\",\n \"Modifier_Letter\",\n \"Lm\",\n \"Modifier_Symbol\",\n \"Sk\",\n \"Nonspacing_Mark\",\n \"Mn\",\n \"Number\",\n \"N\",\n \"Open_Punctuation\",\n \"Ps\",\n \"Other\",\n \"C\",\n \"Other_Letter\",\n \"Lo\",\n \"Other_Number\",\n \"No\",\n \"Other_Punctuation\",\n \"Po\",\n \"Other_Symbol\",\n \"So\",\n \"Paragraph_Separator\",\n \"Zp\",\n \"Private_Use\",\n \"Co\",\n \"Punctuation\",\n \"P\",\n \"punct\",\n \"Separator\",\n \"Z\",\n \"Space_Separator\",\n \"Zs\",\n \"Spacing_Mark\",\n \"Mc\",\n \"Surrogate\",\n \"Cs\",\n \"Symbol\",\n \"S\",\n \"Titlecase_Letter\",\n \"Lt\",\n \"Unassigned\",\n \"Cn\",\n \"Uppercase_Letter\",\n \"Lu\",\n ]),\n Script: new Set([\n \"Adlam\",\n \"Adlm\",\n \"Ahom\",\n \"Anatolian_Hieroglyphs\",\n \"Hluw\",\n \"Arabic\",\n \"Arab\",\n \"Armenian\",\n \"Armn\",\n \"Avestan\",\n \"Avst\",\n \"Balinese\",\n \"Bali\",\n \"Bamum\",\n \"Bamu\",\n \"Bassa_Vah\",\n \"Bass\",\n \"Batak\",\n \"Batk\",\n \"Bengali\",\n \"Beng\",\n \"Bhaiksuki\",\n \"Bhks\",\n \"Bopomofo\",\n \"Bopo\",\n \"Brahmi\",\n \"Brah\",\n \"Braille\",\n \"Brai\",\n \"Buginese\",\n \"Bugi\",\n \"Buhid\",\n \"Buhd\",\n \"Canadian_Aboriginal\",\n \"Cans\",\n \"Carian\",\n \"Cari\",\n \"Caucasian_Albanian\",\n \"Aghb\",\n \"Chakma\",\n \"Cakm\",\n \"Cham\",\n \"Cherokee\",\n \"Cher\",\n \"Common\",\n \"Zyyy\",\n \"Coptic\",\n \"Copt\",\n \"Qaac\",\n \"Cuneiform\",\n \"Xsux\",\n \"Cypriot\",\n \"Cprt\",\n \"Cyrillic\",\n \"Cyrl\",\n \"Deseret\",\n \"Dsrt\",\n \"Devanagari\",\n \"Deva\",\n \"Duployan\",\n \"Dupl\",\n \"Egyptian_Hieroglyphs\",\n \"Egyp\",\n \"Elbasan\",\n \"Elba\",\n \"Ethiopic\",\n \"Ethi\",\n \"Georgian\",\n \"Geor\",\n \"Glagolitic\",\n \"Glag\",\n \"Gothic\",\n \"Goth\",\n \"Grantha\",\n \"Gran\",\n \"Greek\",\n \"Grek\",\n \"Gujarati\",\n \"Gujr\",\n \"Gurmukhi\",\n \"Guru\",\n \"Han\",\n \"Hani\",\n \"Hangul\",\n \"Hang\",\n \"Hanunoo\",\n \"Hano\",\n \"Hatran\",\n \"Hatr\",\n \"Hebrew\",\n \"Hebr\",\n \"Hiragana\",\n \"Hira\",\n \"Imperial_Aramaic\",\n \"Armi\",\n \"Inherited\",\n \"Zinh\",\n \"Qaai\",\n \"Inscriptional_Pahlavi\",\n \"Phli\",\n \"Inscriptional_Parthian\",\n \"Prti\",\n \"Javanese\",\n \"Java\",\n \"Kaithi\",\n \"Kthi\",\n \"Kannada\",\n \"Knda\",\n \"Katakana\",\n \"Kana\",\n \"Kayah_Li\",\n \"Kali\",\n \"Kharoshthi\",\n \"Khar\",\n \"Khmer\",\n \"Khmr\",\n \"Khojki\",\n \"Khoj\",\n \"Khudawadi\",\n \"Sind\",\n \"Lao\",\n \"Laoo\",\n \"Latin\",\n \"Latn\",\n \"Lepcha\",\n \"Lepc\",\n \"Limbu\",\n \"Limb\",\n \"Linear_A\",\n \"Lina\",\n \"Linear_B\",\n \"Linb\",\n \"Lisu\",\n \"Lycian\",\n \"Lyci\",\n \"Lydian\",\n \"Lydi\",\n \"Mahajani\",\n \"Mahj\",\n \"Malayalam\",\n \"Mlym\",\n \"Mandaic\",\n \"Mand\",\n \"Manichaean\",\n \"Mani\",\n \"Marchen\",\n \"Marc\",\n \"Masaram_Gondi\",\n \"Gonm\",\n \"Meetei_Mayek\",\n \"Mtei\",\n \"Mende_Kikakui\",\n \"Mend\",\n \"Meroitic_Cursive\",\n \"Merc\",\n \"Meroitic_Hieroglyphs\",\n \"Mero\",\n \"Miao\",\n \"Plrd\",\n \"Modi\",\n \"Mongolian\",\n \"Mong\",\n \"Mro\",\n \"Mroo\",\n \"Multani\",\n \"Mult\",\n \"Myanmar\",\n \"Mymr\",\n \"Nabataean\",\n \"Nbat\",\n \"New_Tai_Lue\",\n \"Talu\",\n \"Newa\",\n \"Nko\",\n \"Nkoo\",\n \"Nushu\",\n \"Nshu\",\n \"Ogham\",\n \"Ogam\",\n \"Ol_Chiki\",\n \"Olck\",\n \"Old_Hungarian\",\n \"Hung\",\n \"Old_Italic\",\n \"Ital\",\n \"Old_North_Arabian\",\n \"Narb\",\n \"Old_Permic\",\n \"Perm\",\n \"Old_Persian\",\n \"Xpeo\",\n \"Old_South_Arabian\",\n \"Sarb\",\n \"Old_Turkic\",\n \"Orkh\",\n \"Oriya\",\n \"Orya\",\n \"Osage\",\n \"Osge\",\n \"Osmanya\",\n \"Osma\",\n \"Pahawh_Hmong\",\n \"Hmng\",\n \"Palmyrene\",\n \"Palm\",\n \"Pau_Cin_Hau\",\n \"Pauc\",\n \"Phags_Pa\",\n \"Phag\",\n \"Phoenician\",\n \"Phnx\",\n \"Psalter_Pahlavi\",\n \"Phlp\",\n \"Rejang\",\n \"Rjng\",\n \"Runic\",\n \"Runr\",\n \"Samaritan\",\n \"Samr\",\n \"Saurashtra\",\n \"Saur\",\n \"Sharada\",\n \"Shrd\",\n \"Shavian\",\n \"Shaw\",\n \"Siddham\",\n \"Sidd\",\n \"SignWriting\",\n \"Sgnw\",\n \"Sinhala\",\n \"Sinh\",\n \"Sora_Sompeng\",\n \"Sora\",\n \"Soyombo\",\n \"Soyo\",\n \"Sundanese\",\n \"Sund\",\n \"Syloti_Nagri\",\n \"Sylo\",\n \"Syriac\",\n \"Syrc\",\n \"Tagalog\",\n \"Tglg\",\n \"Tagbanwa\",\n \"Tagb\",\n \"Tai_Le\",\n \"Tale\",\n \"Tai_Tham\",\n \"Lana\",\n \"Tai_Viet\",\n \"Tavt\",\n \"Takri\",\n \"Takr\",\n \"Tamil\",\n \"Taml\",\n \"Tangut\",\n \"Tang\",\n \"Telugu\",\n \"Telu\",\n \"Thaana\",\n \"Thaa\",\n \"Thai\",\n \"Tibetan\",\n \"Tibt\",\n \"Tifinagh\",\n \"Tfng\",\n \"Tirhuta\",\n \"Tirh\",\n \"Ugaritic\",\n \"Ugar\",\n \"Vai\",\n \"Vaii\",\n \"Warang_Citi\",\n \"Wara\",\n \"Yi\",\n \"Yiii\",\n \"Zanabazar_Square\",\n \"Zanb\",\n ]),\n}\n\nPropertyData.gc = PropertyData.General_Category\nPropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =\n PropertyData.Script\n\nexport { PropertyData }\n","export { isIdContinue, isIdStart } from \"./ids\"\nexport { PropertyData } from \"./property-data\"\n\nexport const Null = 0x00\nexport const Backspace = 0x08\nexport const CharacterTabulation = 0x09\nexport const LineFeed = 0x0a\nexport const LineTabulation = 0x0b\nexport const FormFeed = 0x0c\nexport const CarriageReturn = 0x0d\nexport const ExclamationMark = 0x21\nexport const DollarSign = 0x24\nexport const LeftParenthesis = 0x28\nexport const RightParenthesis = 0x29\nexport const Asterisk = 0x2a\nexport const PlusSign = 0x2b\nexport const Comma = 0x2c\nexport const HyphenMinus = 0x2d\nexport const FullStop = 0x2e\nexport const Solidus = 0x2f\nexport const DigitZero = 0x30\nexport const DigitOne = 0x31\nexport const DigitSeven = 0x37\nexport const DigitNine = 0x39\nexport const Colon = 0x3a\nexport const LessThanSign = 0x3c\nexport const EqualsSign = 0x3d\nexport const GreaterThanSign = 0x3e\nexport const QuestionMark = 0x3f\nexport const LatinCapitalLetterA = 0x41\nexport const LatinCapitalLetterB = 0x42\nexport const LatinCapitalLetterD = 0x44\nexport const LatinCapitalLetterF = 0x46\nexport const LatinCapitalLetterP = 0x50\nexport const LatinCapitalLetterS = 0x53\nexport const LatinCapitalLetterW = 0x57\nexport const LatinCapitalLetterZ = 0x5a\nexport const LowLine = 0x5f\nexport const LatinSmallLetterA = 0x61\nexport const LatinSmallLetterB = 0x62\nexport const LatinSmallLetterC = 0x63\nexport const LatinSmallLetterD = 0x64\nexport const LatinSmallLetterF = 0x66\nexport const LatinSmallLetterG = 0x67\nexport const LatinSmallLetterI = 0x69\nexport const LatinSmallLetterK = 0x6b\nexport const LatinSmallLetterM = 0x6d\nexport const LatinSmallLetterN = 0x6e\nexport const LatinSmallLetterP = 0x70\nexport const LatinSmallLetterR = 0x72\nexport const LatinSmallLetterS = 0x73\nexport const LatinSmallLetterT = 0x74\nexport const LatinSmallLetterU = 0x75\nexport const LatinSmallLetterV = 0x76\nexport const LatinSmallLetterW = 0x77\nexport const LatinSmallLetterX = 0x78\nexport const LatinSmallLetterY = 0x79\nexport const LatinSmallLetterZ = 0x7a\nexport const LeftSquareBracket = 0x5b\nexport const ReverseSolidus = 0x5c\nexport const RightSquareBracket = 0x5d\nexport const CircumflexAccent = 0x5e\nexport const LeftCurlyBracket = 0x7b\nexport const VerticalLine = 0x7c\nexport const RightCurlyBracket = 0x7d\nexport const ZeroWidthNonJoiner = 0x200c\nexport const ZeroWidthJoiner = 0x200d\nexport const LineSeparator = 0x2028\nexport const ParagraphSeparator = 0x2029\n\nexport const MinCodePoint = 0x00\nexport const MaxCodePoint = 0x10ffff\n\nexport function isLatinLetter(code: number): boolean {\n return (\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)\n )\n}\n\nexport function isDecimalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitNine\n}\n\nexport function isOctalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitSeven\n}\n\nexport function isHexDigit(code: number): boolean {\n return (\n (code >= DigitZero && code <= DigitNine) ||\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterF)\n )\n}\n\nexport function isLineTerminator(code: number): boolean {\n return (\n code === LineFeed ||\n code === CarriageReturn ||\n code === LineSeparator ||\n code === ParagraphSeparator\n )\n}\n\nexport function isValidUnicode(code: number): boolean {\n return code >= MinCodePoint && code <= MaxCodePoint\n}\n\nexport function digitToInt(code: number): number {\n if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n return code - LatinSmallLetterA + 10\n }\n if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n return code - LatinCapitalLetterA + 10\n }\n return code - DigitZero\n}\n","const legacyImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.charCodeAt(i) : -1\n },\n width(c: number): number {\n return 1\n },\n}\nconst unicodeImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.codePointAt(i)! : -1\n },\n width(c: number): number {\n return c > 0xffff ? 2 : 1\n },\n}\n\nexport class Reader {\n private _impl = legacyImpl\n private _s = \"\"\n private _i = 0\n private _end = 0\n private _cp1: number = -1\n private _w1 = 1\n private _cp2: number = -1\n private _w2 = 1\n private _cp3: number = -1\n private _w3 = 1\n private _cp4: number = -1\n\n public get source(): string {\n return this._s\n }\n\n public get index(): number {\n return this._i\n }\n\n public get currentCodePoint(): number {\n return this._cp1\n }\n\n public get nextCodePoint(): number {\n return this._cp2\n }\n\n public get nextCodePoint2(): number {\n return this._cp3\n }\n\n public get nextCodePoint3(): number {\n return this._cp4\n }\n\n public reset(\n source: string,\n start: number,\n end: number,\n uFlag: boolean,\n ): void {\n this._impl = uFlag ? unicodeImpl : legacyImpl\n this._s = source\n this._end = end\n this.rewind(start)\n }\n\n public rewind(index: number): void {\n const impl = this._impl\n this._i = index\n this._cp1 = impl.at(this._s, this._end, index)\n this._w1 = impl.width(this._cp1)\n this._cp2 = impl.at(this._s, this._end, index + this._w1)\n this._w2 = impl.width(this._cp2)\n this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2)\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n index + this._w1 + this._w2 + this._w3,\n )\n }\n\n public advance(): void {\n if (this._cp1 !== -1) {\n const impl = this._impl\n this._i += this._w1\n this._cp1 = this._cp2\n this._w1 = this._w2\n this._cp2 = this._cp3\n this._w2 = impl.width(this._cp2)\n this._cp3 = this._cp4\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n this._i + this._w1 + this._w2 + this._w3,\n )\n }\n }\n\n public eat(cp: number): boolean {\n if (this._cp1 === cp) {\n this.advance()\n return true\n }\n return false\n }\n\n public eat2(cp1: number, cp2: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2) {\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n\n public eat3(cp1: number, cp2: number, cp3: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n this.advance()\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n}\n","export class RegExpSyntaxError extends SyntaxError {\n public index: number\n public constructor(\n source: string,\n uFlag: boolean,\n index: number,\n message: string,\n ) {\n /*eslint-disable no-param-reassign */\n if (source) {\n if (source[0] !== \"/\") {\n source = `/${source}/${uFlag ? \"u\" : \"\"}`\n }\n source = `: ${source}`\n }\n /*eslint-enable no-param-reassign */\n\n super(`Invalid regular expression${source}: ${message}`)\n this.index = index\n }\n}\n","import { Reader } from \"./reader\"\nimport { RegExpSyntaxError } from \"./regexp-syntax-error\"\nimport {\n Asterisk,\n Backspace,\n CarriageReturn,\n CharacterTabulation,\n CircumflexAccent,\n Colon,\n Comma,\n DigitNine,\n DigitOne,\n digitToInt,\n DigitZero,\n DollarSign,\n EqualsSign,\n ExclamationMark,\n FormFeed,\n FullStop,\n GreaterThanSign,\n HyphenMinus,\n isDecimalDigit,\n isHexDigit,\n isIdContinue,\n isIdStart,\n isLatinLetter,\n isLineTerminator,\n isOctalDigit,\n isValidUnicode,\n LatinCapitalLetterB,\n LatinCapitalLetterD,\n LatinCapitalLetterP,\n LatinCapitalLetterS,\n LatinCapitalLetterW,\n LatinSmallLetterB,\n LatinSmallLetterC,\n LatinSmallLetterD,\n LatinSmallLetterF,\n LatinSmallLetterG,\n LatinSmallLetterI,\n LatinSmallLetterK,\n LatinSmallLetterM,\n LatinSmallLetterN,\n LatinSmallLetterP,\n LatinSmallLetterR,\n LatinSmallLetterS,\n LatinSmallLetterT,\n LatinSmallLetterU,\n LatinSmallLetterV,\n LatinSmallLetterW,\n LatinSmallLetterX,\n LatinSmallLetterY,\n LeftCurlyBracket,\n LeftParenthesis,\n LeftSquareBracket,\n LessThanSign,\n LineFeed,\n LineTabulation,\n LowLine,\n PlusSign,\n PropertyData,\n QuestionMark,\n ReverseSolidus,\n RightCurlyBracket,\n RightParenthesis,\n RightSquareBracket,\n Solidus,\n VerticalLine,\n ZeroWidthJoiner,\n ZeroWidthNonJoiner,\n} from \"./unicode\"\n\nfunction isSyntaxCharacter(cp: number): boolean {\n return (\n cp === CircumflexAccent ||\n cp === DollarSign ||\n cp === ReverseSolidus ||\n cp === FullStop ||\n cp === Asterisk ||\n cp === PlusSign ||\n cp === QuestionMark ||\n cp === LeftParenthesis ||\n cp === RightParenthesis ||\n cp === LeftSquareBracket ||\n cp === RightSquareBracket ||\n cp === LeftCurlyBracket ||\n cp === RightCurlyBracket ||\n cp === VerticalLine\n )\n}\n\nfunction isRegExpIdentifierStart(cp: number): boolean {\n return isIdStart(cp) || cp === DollarSign || cp === LowLine\n}\n\nfunction isRegExpIdentifierPart(cp: number): boolean {\n return (\n isIdContinue(cp) ||\n cp === DollarSign ||\n cp === LowLine ||\n cp === ZeroWidthNonJoiner ||\n cp === ZeroWidthJoiner\n )\n}\n\nfunction isUnicodePropertyNameCharacter(cp: number): boolean {\n return isLatinLetter(cp) || cp === LowLine\n}\n\nfunction isUnicodePropertyValueCharacter(cp: number): boolean {\n return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp)\n}\n\nfunction isValidUnicodeProperty(name: string, value: string): boolean {\n //eslint-disable-next-line no-prototype-builtins\n return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value)\n}\n\nfunction isValidUnicodePropertyName(name: string): boolean {\n return PropertyData.$LONE.has(name)\n}\n\nexport namespace RegExpValidator {\n /**\n * The options for RegExpValidator construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n\n /**\n * A function that is called when the validator entered a RegExp literal.\n * @param start The 0-based index of the first character.\n */\n onLiteralEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a RegExp literal.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onLiteralLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator found flags.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param global `g` flag.\n * @param ignoreCase `i` flag.\n * @param multiline `m` flag.\n * @param unicode `u` flag.\n * @param sticky `y` flag.\n * @param dotAll `s` flag.\n */\n onFlags?(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a pattern.\n * @param start The 0-based index of the first character.\n */\n onPatternEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a pattern.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onPatternLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a disjunction.\n * @param start The 0-based index of the first character.\n */\n onDisjunctionEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a disjunction.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onDisjunctionLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered an alternative.\n * @param start The 0-based index of the first character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeEnter?(start: number, index: number): void\n\n /**\n * A function that is called when the validator left an alternative.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeLeave?(start: number, end: number, index: number): void\n\n /**\n * A function that is called when the validator entered an uncapturing group.\n * @param start The 0-based index of the first character.\n */\n onGroupEnter?(start: number): void\n\n /**\n * A function that is called when the validator left an uncapturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onGroupLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a capturing group.\n * @param start The 0-based index of the first character.\n * @param name The group name.\n */\n onCapturingGroupEnter?(start: number, name: string | null): void\n\n /**\n * A function that is called when the validator left a capturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param name The group name.\n */\n onCapturingGroupLeave?(\n start: number,\n end: number,\n name: string | null,\n ): void\n\n /**\n * A function that is called when the validator found a quantifier.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum number of repeating.\n * @param max The maximum number of repeating.\n * @param greedy The flag to choose the longest matching.\n */\n onQuantifier?(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionEnter?(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator left a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionLeave?(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found an edge boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n */\n onEdgeAssertion?(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void\n\n /**\n * A function that is called when the validator found a word boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onWordBoundaryAssertion?(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a dot.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n */\n onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void\n\n /**\n * A function that is called when the validator found a character set escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param negate The flag which represents that the character set is negative.\n */\n onEscapeCharacterSet?(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a Unicode proerty escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param key The property name.\n * @param value The property value.\n * @param negate The flag which represents that the character set is negative.\n */\n onUnicodePropertyCharacterSet?(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param value The code point of the character.\n */\n onCharacter?(start: number, end: number, value: number): void\n\n /**\n * A function that is called when the validator found a backreference.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param ref The key of the referred capturing group.\n */\n onBackreference?(start: number, end: number, ref: number | string): void\n\n /**\n * A function that is called when the validator entered a character class.\n * @param start The 0-based index of the first character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassEnter?(start: number, negate: boolean): void\n\n /**\n * A function that is called when the validator left a character class.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassLeave?(\n start: number,\n end: number,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character class range.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum code point of the range.\n * @param max The maximum code point of the range.\n */\n onCharacterClassRange?(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void\n }\n}\n\n/**\n * The regular expression validator.\n */\nexport class RegExpValidator {\n private readonly _options: RegExpValidator.Options\n private readonly _reader = new Reader()\n private _uFlag = false\n private _nFlag = false\n private _lastIntValue = 0\n private _lastMinValue = 0\n private _lastMaxValue = 0\n private _lastStrValue = \"\"\n private _lastKeyValue = \"\"\n private _lastValValue = \"\"\n private _lastAssertionIsQuantifiable = false\n private _numCapturingParens = 0\n private _groupNames = new Set()\n private _backreferenceNames = new Set()\n\n /**\n * Initialize this validator.\n * @param options The options of validator.\n */\n public constructor(options?: RegExpValidator.Options) {\n this._options = options || {}\n }\n\n /**\n * Validate a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n this._uFlag = this._nFlag = false\n this.reset(source, start, end)\n\n this.onLiteralEnter(start)\n if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n const flagStart = this.index\n const uFlag = source.indexOf(\"u\", flagStart) !== -1\n this.validateFlags(source, flagStart, end)\n this.validatePattern(source, start + 1, flagStart - 1, uFlag)\n } else if (start >= end) {\n this.raise(\"Empty\")\n } else {\n const c = String.fromCodePoint(this.currentCodePoint)\n this.raise(`Unexpected character '${c}'`)\n }\n this.onLiteralLeave(start, end)\n }\n\n /**\n * Validate a regular expression flags. E.g. \"gim\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n public validateFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): void {\n const existingFlags = new Set()\n let global = false\n let ignoreCase = false\n let multiline = false\n let sticky = false\n let unicode = false\n let dotAll = false\n for (let i = start; i < end; ++i) {\n const flag = source.charCodeAt(i)\n\n if (existingFlags.has(flag)) {\n this.raise(`Duplicated flag '${source[i]}'`)\n }\n existingFlags.add(flag)\n\n if (flag === LatinSmallLetterG) {\n global = true\n } else if (flag === LatinSmallLetterI) {\n ignoreCase = true\n } else if (flag === LatinSmallLetterM) {\n multiline = true\n } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n unicode = true\n } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n sticky = true\n } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n dotAll = true\n } else {\n this.raise(`Invalid flag '${source[i]}'`)\n }\n }\n this.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n\n /**\n * Validate a regular expression pattern. E.g. \"abc\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n */\n public validatePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): void {\n this._uFlag = uFlag && this.ecmaVersion >= 2015\n this._nFlag = uFlag && this.ecmaVersion >= 2018\n this.reset(source, start, end)\n this.pattern()\n\n if (\n !this._nFlag &&\n this.ecmaVersion >= 2018 &&\n this._groupNames.size > 0\n ) {\n this._nFlag = true\n this.rewind(start)\n this.pattern()\n }\n }\n\n // #region Delegate for Options\n\n private get strict() {\n return Boolean(this._options.strict || this._uFlag)\n }\n\n private get ecmaVersion() {\n return this._options.ecmaVersion || 2018\n }\n\n private onLiteralEnter(start: number): void {\n if (this._options.onLiteralEnter) {\n this._options.onLiteralEnter(start)\n }\n }\n\n private onLiteralLeave(start: number, end: number): void {\n if (this._options.onLiteralLeave) {\n this._options.onLiteralLeave(start, end)\n }\n }\n\n private onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n if (this._options.onFlags) {\n this._options.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n }\n\n private onPatternEnter(start: number): void {\n if (this._options.onPatternEnter) {\n this._options.onPatternEnter(start)\n }\n }\n\n private onPatternLeave(start: number, end: number): void {\n if (this._options.onPatternLeave) {\n this._options.onPatternLeave(start, end)\n }\n }\n\n private onDisjunctionEnter(start: number): void {\n if (this._options.onDisjunctionEnter) {\n this._options.onDisjunctionEnter(start)\n }\n }\n\n private onDisjunctionLeave(start: number, end: number): void {\n if (this._options.onDisjunctionLeave) {\n this._options.onDisjunctionLeave(start, end)\n }\n }\n\n private onAlternativeEnter(start: number, index: number): void {\n if (this._options.onAlternativeEnter) {\n this._options.onAlternativeEnter(start, index)\n }\n }\n\n private onAlternativeLeave(\n start: number,\n end: number,\n index: number,\n ): void {\n if (this._options.onAlternativeLeave) {\n this._options.onAlternativeLeave(start, end, index)\n }\n }\n\n private onGroupEnter(start: number): void {\n if (this._options.onGroupEnter) {\n this._options.onGroupEnter(start)\n }\n }\n\n private onGroupLeave(start: number, end: number): void {\n if (this._options.onGroupLeave) {\n this._options.onGroupLeave(start, end)\n }\n }\n\n private onCapturingGroupEnter(start: number, name: string | null): void {\n if (this._options.onCapturingGroupEnter) {\n this._options.onCapturingGroupEnter(start, name)\n }\n }\n\n private onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n if (this._options.onCapturingGroupLeave) {\n this._options.onCapturingGroupLeave(start, end, name)\n }\n }\n\n private onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n if (this._options.onQuantifier) {\n this._options.onQuantifier(start, end, min, max, greedy)\n }\n }\n\n private onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionEnter) {\n this._options.onLookaroundAssertionEnter(start, kind, negate)\n }\n }\n\n private onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionLeave) {\n this._options.onLookaroundAssertionLeave(start, end, kind, negate)\n }\n }\n\n private onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n if (this._options.onEdgeAssertion) {\n this._options.onEdgeAssertion(start, end, kind)\n }\n }\n\n private onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n if (this._options.onWordBoundaryAssertion) {\n this._options.onWordBoundaryAssertion(start, end, kind, negate)\n }\n }\n\n private onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n if (this._options.onAnyCharacterSet) {\n this._options.onAnyCharacterSet(start, end, kind)\n }\n }\n\n private onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n if (this._options.onEscapeCharacterSet) {\n this._options.onEscapeCharacterSet(start, end, kind, negate)\n }\n }\n\n private onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n if (this._options.onUnicodePropertyCharacterSet) {\n this._options.onUnicodePropertyCharacterSet(\n start,\n end,\n kind,\n key,\n value,\n negate,\n )\n }\n }\n\n private onCharacter(start: number, end: number, value: number): void {\n if (this._options.onCharacter) {\n this._options.onCharacter(start, end, value)\n }\n }\n\n private onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n if (this._options.onBackreference) {\n this._options.onBackreference(start, end, ref)\n }\n }\n\n private onCharacterClassEnter(start: number, negate: boolean): void {\n if (this._options.onCharacterClassEnter) {\n this._options.onCharacterClassEnter(start, negate)\n }\n }\n\n private onCharacterClassLeave(\n start: number,\n end: number,\n negate: boolean,\n ): void {\n if (this._options.onCharacterClassLeave) {\n this._options.onCharacterClassLeave(start, end, negate)\n }\n }\n\n private onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n if (this._options.onCharacterClassRange) {\n this._options.onCharacterClassRange(start, end, min, max)\n }\n }\n\n // #endregion\n\n // #region Delegate for Reader\n\n private get source(): string {\n return this._reader.source\n }\n\n private get index(): number {\n return this._reader.index\n }\n\n private get currentCodePoint(): number {\n return this._reader.currentCodePoint\n }\n\n private get nextCodePoint(): number {\n return this._reader.nextCodePoint\n }\n\n private get nextCodePoint2(): number {\n return this._reader.nextCodePoint2\n }\n\n private get nextCodePoint3(): number {\n return this._reader.nextCodePoint3\n }\n\n private reset(source: string, start: number, end: number): void {\n this._reader.reset(source, start, end, this._uFlag)\n }\n\n private rewind(index: number): void {\n this._reader.rewind(index)\n }\n\n private advance(): void {\n this._reader.advance()\n }\n\n private eat(cp: number): boolean {\n return this._reader.eat(cp)\n }\n\n private eat2(cp1: number, cp2: number): boolean {\n return this._reader.eat2(cp1, cp2)\n }\n\n private eat3(cp1: number, cp2: number, cp3: number): boolean {\n return this._reader.eat3(cp1, cp2, cp3)\n }\n\n // #endregion\n\n private raise(message: string): never {\n throw new RegExpSyntaxError(\n this.source,\n this._uFlag,\n this.index,\n message,\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegularExpressionBody\n private eatRegExpBody(): boolean {\n const start = this.index\n let inClass = false\n let escaped = false\n\n for (;;) {\n const cp = this.currentCodePoint\n if (cp === -1 || isLineTerminator(cp)) {\n const kind = inClass ? \"character class\" : \"regular expression\"\n this.raise(`Unterminated ${kind}`)\n }\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n (cp === Solidus && !inClass) ||\n (cp === Asterisk && this.index === start)\n ) {\n break\n }\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n private pattern(): void {\n const start = this.index\n this._numCapturingParens = this.countCapturingParens()\n this._groupNames.clear()\n this._backreferenceNames.clear()\n\n this.onPatternEnter(start)\n this.disjunction()\n\n const cp = this.currentCodePoint\n if (this.currentCodePoint !== -1) {\n if (cp === RightParenthesis) {\n this.raise(\"Unmatched ')'\")\n }\n if (cp === ReverseSolidus) {\n this.raise(\"\\\\ at end of pattern\")\n }\n if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n this.raise(\"Lone quantifier brackets\")\n }\n const c = String.fromCodePoint(cp)\n this.raise(`Unexpected character '${c}'`)\n }\n for (const name of this._backreferenceNames) {\n if (!this._groupNames.has(name)) {\n this.raise(\"Invalid named capture referenced\")\n }\n }\n this.onPatternLeave(start, this.index)\n }\n\n private countCapturingParens(): number {\n const start = this.index\n let inClass = false\n let escaped = false\n let count = 0\n let cp = 0\n\n while ((cp = this.currentCodePoint) !== -1) {\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n cp === LeftParenthesis &&\n !inClass &&\n (this.nextCodePoint !== QuestionMark ||\n (this.nextCodePoint2 === LessThanSign &&\n this.nextCodePoint3 !== EqualsSign &&\n this.nextCodePoint3 !== ExclamationMark))\n ) {\n count += 1\n }\n this.advance()\n }\n\n this.rewind(start)\n return count\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n private disjunction(): void {\n const start = this.index\n let i = 0\n\n this.onDisjunctionEnter(start)\n this.alternative(i++)\n while (this.eat(VerticalLine)) {\n this.alternative(i++)\n }\n\n if (this.eatQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n if (this.eat(LeftCurlyBracket)) {\n this.raise(\"Lone quantifier brackets\")\n }\n this.onDisjunctionLeave(start, this.index)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n private alternative(i: number): void {\n const start = this.index\n\n this.onAlternativeEnter(start, i)\n while (this.currentCodePoint !== -1 && this.eatTerm()) {\n // do nothing.\n }\n this.onAlternativeLeave(start, this.index, i)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Term\n private eatTerm(): boolean {\n if (this.eatAssertion()) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `this.lastAssertionIsQuantifiable` is true if the last eaten\n // Assertion is a QuantifiableAssertion.\n if (this._lastAssertionIsQuantifiable) {\n this.eatQuantifier()\n }\n return true\n }\n\n if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {\n this.eatQuantifier()\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Assertion\n private eatAssertion(): boolean {\n const start = this.index\n this._lastAssertionIsQuantifiable = false\n\n // ^, $, \\B \\b\n if (this.eat(CircumflexAccent)) {\n this.onEdgeAssertion(start, this.index, \"start\")\n return true\n }\n if (this.eat(DollarSign)) {\n this.onEdgeAssertion(start, this.index, \"end\")\n return true\n }\n if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", true)\n return true\n }\n if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", false)\n return true\n }\n\n // Lookahead / Lookbehind\n if (this.eat2(LeftParenthesis, QuestionMark)) {\n const lookbehind =\n this.ecmaVersion >= 2018 && this.eat(LessThanSign)\n let negate = false\n if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n const kind = lookbehind ? \"lookbehind\" : \"lookahead\"\n this.onLookaroundAssertionEnter(start, kind, negate)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this._lastAssertionIsQuantifiable = !lookbehind && !this.strict\n this.onLookaroundAssertionLeave(start, this.index, kind, negate)\n return true\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n private eatQuantifier(noError = false): boolean {\n const start = this.index\n let min = 0\n let max = 0\n let greedy = false\n\n if (this.eat(Asterisk)) {\n min = 0\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(PlusSign)) {\n min = 1\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(QuestionMark)) {\n min = 0\n max = 1\n } else if (this.eatBracedQuantifier(noError)) {\n min = this._lastMinValue\n max = this._lastMaxValue\n } else {\n return false\n }\n greedy = !this.eat(QuestionMark)\n\n if (!noError) {\n this.onQuantifier(start, this.index, min, max, greedy)\n }\n return true\n }\n\n private eatBracedQuantifier(noError: boolean): boolean {\n const start = this.index\n if (this.eat(LeftCurlyBracket)) {\n this._lastMinValue = 0\n this._lastMaxValue = Number.POSITIVE_INFINITY\n if (this.eatDecimalDigits()) {\n this._lastMinValue = this._lastMaxValue = this._lastIntValue\n if (this.eat(Comma)) {\n this._lastMaxValue = this.eatDecimalDigits()\n ? this._lastIntValue\n : Number.POSITIVE_INFINITY\n }\n if (this.eat(RightCurlyBracket)) {\n if (!noError && this._lastMaxValue < this._lastMinValue) {\n this.raise(\"numbers out of order in {} quantifier\")\n }\n return true\n }\n }\n if (!noError && this.strict) {\n this.raise(\"Incomplete quantifier\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n private eatAtom(): boolean {\n return (\n this.eatPatternCharacter() ||\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup()\n )\n }\n\n private eatDot(): boolean {\n if (this.eat(FullStop)) {\n this.onAnyCharacterSet(this.index - 1, this.index, \"any\")\n return true\n }\n return false\n }\n\n private eatReverseSolidusAtomEscape(): boolean {\n const start = this.index\n if (this.eat(ReverseSolidus)) {\n if (this.eatAtomEscape()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatUncapturingGroup(): boolean {\n const start = this.index\n if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n this.onGroupEnter(start)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onGroupLeave(start, this.index)\n return true\n }\n return false\n }\n\n private eatCapturingGroup(): boolean {\n const start = this.index\n if (this.eat(LeftParenthesis)) {\n this._lastStrValue = \"\"\n if (this.ecmaVersion >= 2018) {\n this.groupSpecifier()\n } else if (this.currentCodePoint === QuestionMark) {\n this.raise(\"Invalid group\")\n }\n const name = this._lastStrValue || null\n\n this.onCapturingGroupEnter(start, name)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onCapturingGroupLeave(start, this.index, name)\n\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedAtom\n private eatExtendedAtom(): boolean {\n return (\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatReverseSolidusFollowedByC() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup() ||\n this.eatInvalidBracedQuantifier() ||\n this.eatExtendedPatternCharacter()\n )\n }\n\n // \\ [lookahead = c]\n private eatReverseSolidusFollowedByC(): boolean {\n if (\n this.currentCodePoint === ReverseSolidus &&\n this.nextCodePoint === LatinSmallLetterC\n ) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n this.onCharacter(this.index - 1, this.index, ReverseSolidus)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-InvalidBracedQuantifier\n private eatInvalidBracedQuantifier(): boolean {\n if (this.eatBracedQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n private eatSyntaxCharacter(): boolean {\n if (isSyntaxCharacter(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n private eatPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (cp !== -1 && !isSyntaxCharacter(cp)) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedPatternCharacter\n private eatExtendedPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (\n cp !== -1 &&\n cp !== CircumflexAccent &&\n cp !== DollarSign &&\n cp !== ReverseSolidus &&\n cp !== FullStop &&\n cp !== Asterisk &&\n cp !== PlusSign &&\n cp !== QuestionMark &&\n cp !== LeftParenthesis &&\n cp !== RightParenthesis &&\n cp !== LeftSquareBracket &&\n cp !== VerticalLine\n ) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // GroupSpecifier[U] ::\n // [empty]\n // `?` GroupName[?U]\n private groupSpecifier(): void {\n this._lastStrValue = \"\"\n if (this.eat(QuestionMark)) {\n if (this.eatGroupName()) {\n if (!this._groupNames.has(this._lastStrValue)) {\n this._groupNames.add(this._lastStrValue)\n return\n }\n this.raise(\"Duplicate capture group name\")\n }\n this.raise(\"Invalid group\")\n }\n }\n\n // GroupName[U] ::\n // `<` RegExpIdentifierName[?U] `>`\n private eatGroupName(): boolean {\n this._lastStrValue = \"\"\n if (this.eat(LessThanSign)) {\n if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n return true\n }\n this.raise(\"Invalid capture group name\")\n }\n return false\n }\n\n // RegExpIdentifierName[U] ::\n // RegExpIdentifierStart[?U]\n // RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n private eatRegExpIdentifierName(): boolean {\n this._lastStrValue = \"\"\n if (this.eatRegExpIdentifierStart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n while (this.eatRegExpIdentifierPart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n }\n return true\n }\n return false\n }\n\n // RegExpIdentifierStart[U] ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n private eatRegExpIdentifierStart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierStart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // RegExpIdentifierPart[U] ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n // \n // \n private eatRegExpIdentifierPart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierPart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-AtomEscape\n private eatAtomEscape(): boolean {\n if (\n this.eatBackreference() ||\n this.eatCharacterClassEscape() ||\n this.eatCharacterEscape() ||\n (this._nFlag && this.eatKGroupName())\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n return false\n }\n\n private eatBackreference(): boolean {\n const start = this.index\n if (this.eatDecimalEscape()) {\n const n = this._lastIntValue\n if (n <= this._numCapturingParens) {\n this.onBackreference(start - 1, this.index, n)\n return true\n }\n if (this.strict) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatKGroupName(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterK)) {\n if (this.eatGroupName()) {\n const groupName = this._lastStrValue\n this._backreferenceNames.add(groupName)\n this.onBackreference(start - 1, this.index, groupName)\n return true\n }\n this.raise(\"Invalid named reference\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-CharacterEscape\n private eatCharacterEscape(): boolean {\n const start = this.index\n if (\n this.eatControlEscape() ||\n this.eatCControlLetter() ||\n this.eatZero() ||\n this.eatHexEscapeSequence() ||\n this.eatRegExpUnicodeEscapeSequence() ||\n (!this.strict && this.eatLegacyOctalEscapeSequence()) ||\n this.eatIdentityEscape()\n ) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n return false\n }\n\n private eatCControlLetter(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterC)) {\n if (this.eatControlLetter()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatZero(): boolean {\n if (\n this.currentCodePoint === DigitZero &&\n !isDecimalDigit(this.nextCodePoint)\n ) {\n this._lastIntValue = 0\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n private eatControlEscape(): boolean {\n if (this.eat(LatinSmallLetterT)) {\n this._lastIntValue = CharacterTabulation\n return true\n }\n if (this.eat(LatinSmallLetterN)) {\n this._lastIntValue = LineFeed\n return true\n }\n if (this.eat(LatinSmallLetterV)) {\n this._lastIntValue = LineTabulation\n return true\n }\n if (this.eat(LatinSmallLetterF)) {\n this._lastIntValue = FormFeed\n return true\n }\n if (this.eat(LatinSmallLetterR)) {\n this._lastIntValue = CarriageReturn\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n private eatControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isLatinLetter(cp)) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n //eslint-disable-next-line complexity\n private eatRegExpUnicodeEscapeSequence(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterU)) {\n if (this.eatFixedHexDigits(4)) {\n const lead = this._lastIntValue\n if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {\n const leadSurrogateEnd = this.index\n if (\n this.eat(ReverseSolidus) &&\n this.eat(LatinSmallLetterU) &&\n this.eatFixedHexDigits(4)\n ) {\n const trail = this._lastIntValue\n if (trail >= 0xdc00 && trail <= 0xdfff) {\n this._lastIntValue =\n (lead - 0xd800) * 0x400 +\n (trail - 0xdc00) +\n 0x10000\n return true\n }\n }\n this.rewind(leadSurrogateEnd)\n this._lastIntValue = lead\n }\n return true\n }\n if (\n this._uFlag &&\n this.eat(LeftCurlyBracket) &&\n this.eatHexDigits() &&\n this.eat(RightCurlyBracket) &&\n isValidUnicode(this._lastIntValue)\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid unicode escape\")\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-IdentityEscape\n private eatIdentityEscape(): boolean {\n if (this._uFlag) {\n if (this.eatSyntaxCharacter()) {\n return true\n }\n if (this.eat(Solidus)) {\n this._lastIntValue = Solidus\n return true\n }\n return false\n }\n\n if (this.isValidIdentityEscape(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n\n return false\n }\n private isValidIdentityEscape(cp: number): boolean {\n if (cp === -1) {\n return false\n }\n if (this.strict) {\n return !isIdContinue(cp)\n }\n return (\n cp !== LatinSmallLetterC &&\n (!this._nFlag || cp !== LatinSmallLetterK)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n private eatDecimalEscape(): boolean {\n this._lastIntValue = 0\n let cp = this.currentCodePoint\n if (cp >= DigitOne && cp <= DigitNine) {\n do {\n this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero)\n this.advance()\n } while (\n (cp = this.currentCodePoint) >= DigitZero &&\n cp <= DigitNine\n )\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n private eatCharacterClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true)\n return true\n }\n if (this.eat(LatinSmallLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", true)\n return true\n }\n if (this.eat(LatinSmallLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", true)\n return true\n }\n\n let negate = false\n if (\n this._uFlag &&\n this.ecmaVersion >= 2018 &&\n (this.eat(LatinSmallLetterP) ||\n (negate = this.eat(LatinCapitalLetterP)))\n ) {\n this._lastIntValue = -1\n if (\n this.eat(LeftCurlyBracket) &&\n this.eatUnicodePropertyValueExpression() &&\n this.eat(RightCurlyBracket)\n ) {\n this.onUnicodePropertyCharacterSet(\n start - 1,\n this.index,\n \"property\",\n this._lastKeyValue,\n this._lastValValue || null,\n negate,\n )\n return true\n }\n this.raise(\"Invalid property name\")\n }\n\n return false\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n private eatUnicodePropertyValueExpression(): boolean {\n const start = this.index\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n this._lastKeyValue = this._lastStrValue\n if (this.eatUnicodePropertyValue()) {\n this._lastValValue = this._lastStrValue\n if (\n isValidUnicodeProperty(\n this._lastKeyValue,\n this._lastValValue,\n )\n ) {\n return true\n }\n this.raise(\"Invalid property name\")\n }\n }\n this.rewind(start)\n\n // LoneUnicodePropertyNameOrValue\n if (this.eatLoneUnicodePropertyNameOrValue()) {\n const nameOrValue = this._lastStrValue\n if (isValidUnicodeProperty(\"General_Category\", nameOrValue)) {\n this._lastKeyValue = \"General_Category\"\n this._lastValValue = nameOrValue\n return true\n }\n if (isValidUnicodePropertyName(nameOrValue)) {\n this._lastKeyValue = nameOrValue\n this._lastValValue = \"\"\n return true\n }\n this.raise(\"Invalid property name\")\n }\n return false\n }\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n private eatUnicodePropertyName(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n private eatUnicodePropertyValue(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n private eatLoneUnicodePropertyNameOrValue(): boolean {\n return this.eatUnicodePropertyValue()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n private eatCharacterClass(): boolean {\n const start = this.index\n if (this.eat(LeftSquareBracket)) {\n const negate = this.eat(CircumflexAccent)\n this.onCharacterClassEnter(start, negate)\n this.classRanges()\n if (!this.eat(RightSquareBracket)) {\n this.raise(\"Unterminated character class\")\n }\n this.onCharacterClassLeave(start, this.index, negate)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n private classRanges(): void {\n let start = this.index\n while (this.eatClassAtom()) {\n const left = this._lastIntValue\n const hyphenStart = this.index\n if (this.eat(HyphenMinus)) {\n this.onCharacter(hyphenStart, this.index, HyphenMinus)\n\n if (this.eatClassAtom()) {\n const right = this._lastIntValue\n\n if (left === -1 || right === -1) {\n if (this.strict) {\n this.raise(\"Invalid character class\")\n }\n } else if (left > right) {\n this.raise(\"Range out of order in character class\")\n } else {\n this.onCharacterClassRange(\n start,\n this.index,\n left,\n right,\n )\n }\n }\n }\n\n start = this.index\n }\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n private eatClassAtom(): boolean {\n const start = this.index\n\n if (this.eat(ReverseSolidus)) {\n if (this.eatClassEscape()) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n\n const cp = this.currentCodePoint\n if (cp !== -1 && cp !== RightSquareBracket) {\n this.advance()\n this._lastIntValue = cp\n this.onCharacter(start, this.index, cp)\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassEscape\n private eatClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterB)) {\n this._lastIntValue = Backspace\n this.onCharacter(start - 1, this.index, Backspace)\n return true\n }\n\n if (this._uFlag && this.eat(HyphenMinus)) {\n this._lastIntValue = HyphenMinus\n this.onCharacter(start - 1, this.index, HyphenMinus)\n return true\n }\n\n if (!this._uFlag && this.eat(LatinSmallLetterC)) {\n if (this.eatClassControlLetter()) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n this.rewind(start)\n }\n\n return this.eatCharacterClassEscape() || this.eatCharacterEscape()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassControlLetter\n private eatClassControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isDecimalDigit(cp) || cp === LowLine) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatHexEscapeSequence(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterX)) {\n if (this.eatFixedHexDigits(2)) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n private eatDecimalDigits(): boolean {\n const start = this.index\n\n this._lastIntValue = 0\n while (isDecimalDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 10 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n private eatHexDigits(): boolean {\n const start = this.index\n this._lastIntValue = 0\n while (isHexDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 16 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n private eatLegacyOctalEscapeSequence(): boolean {\n if (this.eatOctalDigit()) {\n const n1 = this._lastIntValue\n if (this.eatOctalDigit()) {\n const n2 = this._lastIntValue\n if (n1 <= 3 && this.eatOctalDigit()) {\n this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue\n } else {\n this._lastIntValue = n1 * 8 + n2\n }\n } else {\n this._lastIntValue = n1\n }\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n private eatOctalDigit(): boolean {\n const cp = this.currentCodePoint\n if (isOctalDigit(cp)) {\n this.advance()\n this._lastIntValue = cp - DigitZero\n return true\n }\n this._lastIntValue = 0\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatFixedHexDigits(length: number): boolean {\n const start = this.index\n this._lastIntValue = 0\n for (let i = 0; i < length; ++i) {\n const cp = this.currentCodePoint\n if (!isHexDigit(cp)) {\n this.rewind(start)\n return false\n }\n this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp)\n this.advance()\n }\n return true\n }\n}\n","import {\n Alternative,\n Backreference,\n CapturingGroup,\n CharacterClass,\n CharacterClassElement,\n CharacterClassRange,\n Flags,\n Group,\n RegExpLiteral,\n LookaroundAssertion,\n Pattern,\n Quantifier,\n} from \"./ast\"\nimport { HyphenMinus } from \"./unicode\"\nimport { RegExpValidator } from \"./validator\"\n\ntype AppendableNode =\n | Pattern\n | Alternative\n | Group\n | CapturingGroup\n | CharacterClass\n | LookaroundAssertion\n\nconst DummyPattern = {} as Pattern\nconst DummyFlags = {} as Flags\nconst DummyCapturingGroup = {} as CapturingGroup\n\nclass RegExpParserState {\n public readonly strict: boolean\n public readonly ecmaVersion: 5 | 2015 | 2016 | 2017 | 2018\n private _node: AppendableNode = DummyPattern\n private _flags: Flags = DummyFlags\n private _backreferences: Backreference[] = []\n private _capturingGroups: CapturingGroup[] = []\n\n public source = \"\"\n\n public constructor(options?: RegExpParser.Options) {\n this.strict = Boolean(options && options.strict)\n this.ecmaVersion = (options && options.ecmaVersion) || 2018\n }\n\n public get pattern(): Pattern {\n if (this._node.type !== \"Pattern\") {\n throw new Error(\"UnknownError\")\n }\n return this._node\n }\n\n public get flags(): Flags {\n if (this._flags.type !== \"Flags\") {\n throw new Error(\"UnknownError\")\n }\n return this._flags\n }\n\n public onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n this._flags = {\n type: \"Flags\",\n parent: null,\n start,\n end,\n raw: this.source.slice(start, end),\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n }\n }\n\n public onPatternEnter(start: number): void {\n this._node = {\n type: \"Pattern\",\n parent: null,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n this._backreferences.length = 0\n this._capturingGroups.length = 0\n }\n\n public onPatternLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n\n for (const reference of this._backreferences) {\n const ref = reference.ref\n const group =\n typeof ref === \"number\"\n ? this._capturingGroups[ref - 1]\n : this._capturingGroups.find(g => g.name === ref)!\n reference.resolved = group\n group.references.push(reference)\n }\n }\n\n public onAlternativeEnter(start: number): void {\n const parent = this._node\n if (\n parent.type !== \"Assertion\" &&\n parent.type !== \"CapturingGroup\" &&\n parent.type !== \"Group\" &&\n parent.type !== \"Pattern\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Alternative\",\n parent,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n parent.alternatives.push(this._node)\n }\n\n public onAlternativeLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onGroupEnter(start: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Group\",\n parent,\n start,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n parent.elements.push(this._node)\n }\n\n public onGroupLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Group\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCapturingGroupEnter(start: number, name: string | null): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CapturingGroup\",\n parent,\n start,\n end: start,\n raw: \"\",\n name,\n alternatives: [],\n references: [],\n }\n parent.elements.push(this._node)\n this._capturingGroups.push(this._node)\n }\n\n public onCapturingGroupLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CapturingGroup\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last element.\n const element = parent.elements.pop()\n if (\n element == null ||\n element.type === \"Quantifier\" ||\n (element.type === \"Assertion\" && element.kind !== \"lookahead\")\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: Quantifier = {\n type: \"Quantifier\",\n parent,\n start: element.start,\n end,\n raw: this.source.slice(element.start, end),\n min,\n max,\n greedy,\n element,\n }\n parent.elements.push(node)\n element.parent = node\n }\n\n public onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Assertion\",\n parent,\n start,\n end: start,\n raw: \"\",\n kind,\n negate,\n alternatives: [],\n } as LookaroundAssertion\n parent.elements.push(this._node)\n }\n\n public onLookaroundAssertionLeave(start: number, end: number): void {\n const node = this._node\n if (node.type !== \"Assertion\" || node.parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"Assertion\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n parent.elements.push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n public onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n public onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"CharacterSet\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n key,\n value,\n negate,\n })\n }\n\n public onCharacter(start: number, end: number, value: number): void {\n const parent = this._node\n if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n ;(parent.elements as CharacterClassElement[]).push({\n type: \"Character\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n value,\n })\n }\n\n public onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n const node: Backreference = {\n type: \"Backreference\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n ref,\n resolved: DummyCapturingGroup,\n }\n parent.elements.push(node)\n this._backreferences.push(node)\n }\n\n public onCharacterClassEnter(start: number, negate: boolean): void {\n const parent = this._node\n if (parent.type !== \"Alternative\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CharacterClass\",\n parent,\n start,\n end: start,\n raw: \"\",\n negate,\n elements: [],\n }\n parent.elements.push(this._node)\n }\n\n public onCharacterClassLeave(start: number, end: number): void {\n const node = this._node\n if (\n node.type !== \"CharacterClass\" ||\n node.parent.type !== \"Alternative\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n node.end = end\n node.raw = this.source.slice(start, end)\n this._node = node.parent\n }\n\n public onCharacterClassRange(start: number, end: number): void {\n const parent = this._node\n if (parent.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last three elements.\n const elements = parent.elements\n const max = elements.pop()\n const hyphen = elements.pop()\n const min = elements.pop()\n if (\n !min ||\n !max ||\n !hyphen ||\n min.type !== \"Character\" ||\n max.type !== \"Character\" ||\n hyphen.type !== \"Character\" ||\n hyphen.value !== HyphenMinus\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const node: CharacterClassRange = {\n type: \"CharacterClassRange\",\n parent,\n start,\n end,\n raw: this.source.slice(start, end),\n min,\n max,\n }\n min.parent = node\n max.parent = node\n elements.push(node)\n }\n}\n\nexport namespace RegExpParser {\n /**\n * The options for RegExpParser construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n }\n}\n\nexport class RegExpParser {\n private _state: RegExpParserState\n private _validator: RegExpValidator\n\n /**\n * Initialize this parser.\n * @param options The options of parser.\n */\n public constructor(options?: RegExpParser.Options) {\n this._state = new RegExpParserState(options)\n this._validator = new RegExpValidator(this._state)\n }\n\n /**\n * Parse a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given regular expression.\n */\n public parseLiteral(\n source: string,\n start = 0,\n end: number = source.length,\n ): RegExpLiteral {\n this._state.source = source\n this._validator.validateLiteral(source, start, end)\n const pattern = this._state.pattern\n const flags = this._state.flags\n const literal: RegExpLiteral = {\n type: \"RegExpLiteral\",\n parent: null,\n start,\n end,\n raw: source,\n pattern,\n flags,\n }\n pattern.parent = literal\n flags.parent = literal\n return literal\n }\n\n /**\n * Parse a regular expression flags. E.g. \"gim\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given flags.\n */\n public parseFlags(\n source: string,\n start = 0,\n end: number = source.length,\n ): Flags {\n this._state.source = source\n this._validator.validateFlags(source, start, end)\n return this._state.flags\n }\n\n /**\n * Parse a regular expression pattern. E.g. \"abc\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n * @returns The AST of the given pattern.\n */\n public parsePattern(\n source: string,\n start = 0,\n end: number = source.length,\n uFlag = false,\n ): Pattern {\n this._state.source = source\n this._validator.validatePattern(source, start, end, uFlag)\n return this._state.pattern\n }\n}\n","import {\n Alternative,\n Assertion,\n Backreference,\n CapturingGroup,\n Character,\n CharacterClass,\n CharacterClassRange,\n CharacterSet,\n Flags,\n Group,\n Node,\n Pattern,\n Quantifier,\n RegExpLiteral,\n} from \"./ast\"\n\n/**\n * The visitor to walk on AST.\n */\nexport class RegExpVisitor {\n private readonly _handlers: RegExpVisitor.Handlers\n\n /**\n * Initialize this visitor.\n * @param handlers Callbacks for each node.\n */\n public constructor(handlers: RegExpVisitor.Handlers) {\n this._handlers = handlers\n }\n\n /**\n * Visit a given node and descendant nodes.\n * @param node The root node to visit tree.\n */\n public visit(node: Node): void {\n switch (node.type) {\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"Assertion\":\n this.visitAssertion(node)\n break\n case \"Backreference\":\n this.visitBackreference(node)\n break\n case \"CapturingGroup\":\n this.visitCapturingGroup(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"CharacterClass\":\n this.visitCharacterClass(node)\n break\n case \"CharacterClassRange\":\n this.visitCharacterClassRange(node)\n break\n case \"CharacterSet\":\n this.visitCharacterSet(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n case \"RegExpLiteral\":\n this.visitRegExpLiteral(node)\n break\n default:\n throw new Error(`Unknown type: ${(node as any).type}`)\n }\n }\n\n private visitAlternative(node: Alternative): void {\n if (this._handlers.onAlternativeEnter) {\n this._handlers.onAlternativeEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onAlternativeLeave) {\n this._handlers.onAlternativeLeave(node)\n }\n }\n private visitAssertion(node: Assertion): void {\n if (this._handlers.onAssertionEnter) {\n this._handlers.onAssertionEnter(node)\n }\n if (node.kind === \"lookahead\" || node.kind === \"lookbehind\") {\n node.alternatives.forEach(this.visit, this)\n }\n if (this._handlers.onAssertionLeave) {\n this._handlers.onAssertionLeave(node)\n }\n }\n private visitBackreference(node: Backreference): void {\n if (this._handlers.onBackreferenceEnter) {\n this._handlers.onBackreferenceEnter(node)\n }\n if (this._handlers.onBackreferenceLeave) {\n this._handlers.onBackreferenceLeave(node)\n }\n }\n private visitCapturingGroup(node: CapturingGroup): void {\n if (this._handlers.onCapturingGroupEnter) {\n this._handlers.onCapturingGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onCapturingGroupLeave) {\n this._handlers.onCapturingGroupLeave(node)\n }\n }\n private visitCharacter(node: Character): void {\n if (this._handlers.onCharacterEnter) {\n this._handlers.onCharacterEnter(node)\n }\n if (this._handlers.onCharacterLeave) {\n this._handlers.onCharacterLeave(node)\n }\n }\n private visitCharacterClass(node: CharacterClass): void {\n if (this._handlers.onCharacterClassEnter) {\n this._handlers.onCharacterClassEnter(node)\n }\n node.elements.forEach(this.visit, this)\n if (this._handlers.onCharacterClassLeave) {\n this._handlers.onCharacterClassLeave(node)\n }\n }\n private visitCharacterClassRange(node: CharacterClassRange): void {\n if (this._handlers.onCharacterClassRangeEnter) {\n this._handlers.onCharacterClassRangeEnter(node)\n }\n this.visitCharacter(node.min)\n this.visitCharacter(node.max)\n if (this._handlers.onCharacterClassRangeLeave) {\n this._handlers.onCharacterClassRangeLeave(node)\n }\n }\n private visitCharacterSet(node: CharacterSet): void {\n if (this._handlers.onCharacterSetEnter) {\n this._handlers.onCharacterSetEnter(node)\n }\n if (this._handlers.onCharacterSetLeave) {\n this._handlers.onCharacterSetLeave(node)\n }\n }\n private visitFlags(node: Flags): void {\n if (this._handlers.onFlagsEnter) {\n this._handlers.onFlagsEnter(node)\n }\n if (this._handlers.onFlagsLeave) {\n this._handlers.onFlagsLeave(node)\n }\n }\n private visitGroup(node: Group): void {\n if (this._handlers.onGroupEnter) {\n this._handlers.onGroupEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onGroupLeave) {\n this._handlers.onGroupLeave(node)\n }\n }\n private visitPattern(node: Pattern): void {\n if (this._handlers.onPatternEnter) {\n this._handlers.onPatternEnter(node)\n }\n node.alternatives.forEach(this.visit, this)\n if (this._handlers.onPatternLeave) {\n this._handlers.onPatternLeave(node)\n }\n }\n private visitQuantifier(node: Quantifier): void {\n if (this._handlers.onQuantifierEnter) {\n this._handlers.onQuantifierEnter(node)\n }\n this.visit(node.element)\n if (this._handlers.onQuantifierLeave) {\n this._handlers.onQuantifierLeave(node)\n }\n }\n private visitRegExpLiteral(node: RegExpLiteral): void {\n if (this._handlers.onRegExpLiteralEnter) {\n this._handlers.onRegExpLiteralEnter(node)\n }\n this.visitPattern(node.pattern)\n this.visitFlags(node.flags)\n if (this._handlers.onRegExpLiteralLeave) {\n this._handlers.onRegExpLiteralLeave(node)\n }\n }\n}\n\nexport namespace RegExpVisitor {\n export interface Handlers {\n onAlternativeEnter?(node: Alternative): void\n onAlternativeLeave?(node: Alternative): void\n onAssertionEnter?(node: Assertion): void\n onAssertionLeave?(node: Assertion): void\n onBackreferenceEnter?(node: Backreference): void\n onBackreferenceLeave?(node: Backreference): void\n onCapturingGroupEnter?(node: CapturingGroup): void\n onCapturingGroupLeave?(node: CapturingGroup): void\n onCharacterEnter?(node: Character): void\n onCharacterLeave?(node: Character): void\n onCharacterClassEnter?(node: CharacterClass): void\n onCharacterClassLeave?(node: CharacterClass): void\n onCharacterClassRangeEnter?(node: CharacterClassRange): void\n onCharacterClassRangeLeave?(node: CharacterClassRange): void\n onCharacterSetEnter?(node: CharacterSet): void\n onCharacterSetLeave?(node: CharacterSet): void\n onFlagsEnter?(node: Flags): void\n onFlagsLeave?(node: Flags): void\n onGroupEnter?(node: Group): void\n onGroupLeave?(node: Group): void\n onPatternEnter?(node: Pattern): void\n onPatternLeave?(node: Pattern): void\n onQuantifierEnter?(node: Quantifier): void\n onQuantifierLeave?(node: Quantifier): void\n onRegExpLiteralEnter?(node: RegExpLiteral): void\n onRegExpLiteralLeave?(node: RegExpLiteral): void\n }\n}\n","import * as AST from \"./ast\"\nimport { RegExpParser } from \"./parser\"\nimport { RegExpValidator } from \"./validator\"\nimport { RegExpVisitor } from \"./visitor\"\n\nexport { AST, RegExpParser, RegExpValidator }\n\n/**\n * Parse a given regular expression literal then make AST object.\n * @param source The source code to parse.\n * @param options The options to parse.\n * @returns The AST of the regular expression.\n */\nexport function parseRegExpLiteral(\n source: string | RegExp,\n options?: RegExpParser.Options,\n): AST.RegExpLiteral {\n return new RegExpParser(options).parseLiteral(String(source))\n}\n\n/**\n * Validate a given regular expression literal.\n * @param source The source code to validate.\n * @param options The options to validate.\n */\nexport function validateRegExpLiteral(\n source: string,\n options?: RegExpValidator.Options,\n): void {\n return new RegExpValidator(options).validateLiteral(source)\n}\n\nexport function visitRegExpAST(\n node: AST.Node,\n handlers: RegExpVisitor.Handlers,\n): void {\n new RegExpVisitor(handlers).visit(node)\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/regexpp/package.json b/tools/node_modules/eslint/node_modules/regexpp/package.json index 6da5456718cd14..a5a807b0882e15 100644 --- a/tools/node_modules/eslint/node_modules/regexpp/package.json +++ b/tools/node_modules/eslint/node_modules/regexpp/package.json @@ -80,5 +80,5 @@ "version": "npm run -s build", "watch": "_mocha \"test/*.ts\" --require ts-node/register --reporter dot --timeout 10000 --watch-extensions .ts --watch --growl" }, - "version": "2.0.0" + "version": "2.0.1" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.js b/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.js index 31262c4121d94c..aed39b0d0875a0 100644 --- a/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.js +++ b/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.js @@ -201,7 +201,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + **/ /** @@ -407,7 +407,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + **/ (function (global, factory) { @@ -416,86 +416,86 @@ (factory((global.rxjs = global.rxjs || {}))); }(this, (function (exports) { 'use strict'; -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - -function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; -}; - - - - - - - - - - - - - - - -function __values(o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - - - -function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; +}; + + + + + + + + + + + + + + + +function __values(o) { + var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; + if (m) return m.call(o); + return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; +} + +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + + + +function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); } function isFunction(x) { @@ -9217,3 +9217,5 @@ exports.config = config; Object.defineProperty(exports, '__esModule', { value: true }); }))); + + diff --git a/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.min.js b/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.min.js index ad956739957ade..7af9eafaafdd6b 100644 --- a/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.min.js +++ b/tools/node_modules/eslint/node_modules/rxjs/bundles/rxjs.umd.min.js @@ -288,3 +288,4 @@ arguments.length?(g=c.initialState,a=c.condition,b=c.iterate,f=c.resultSelector| a&&(a=R);void 0===b&&(b=R);return Da(function(){return c()?a:b})};e.interval=function(c,a){void 0===c&&(c=0);void 0===a&&(a=C);if(!ca(c)||0>c)c=0;a&&"function"===typeof a.schedule||(a=C);return new r(function(b){b.add(a.schedule(ec,c,{subscriber:b,counter:0,period:c}));return b})};e.merge=fb;e.never=function(){return Gb};e.of=ya;e.onErrorResumeNext=Ea;e.pairs=function(c,a){return a?new r(function(b){var d=Object.keys(c),e=new w;e.add(a.schedule(fc,0,{keys:d,index:0,subscriber:b,subscription:e,obj:c})); return e}):new r(function(a){for(var b=Object.keys(c),d=0;d=a){d.complete();break}d.next(f++);if(d.closed)break}while(1)})};e.throwError=za;e.timer=hb;e.using=function(c,a){return new r(function(b){var d;try{d=c()}catch(E){b.error(E); return}var e;try{e=a(d)}catch(E){b.error(E);return}var h=(e?N(e):R).subscribe(b);return function(){h.unsubscribe();d&&d.unsubscribe()}})};e.zip=ib;e.EMPTY=R;e.NEVER=Gb;e.config=H;Object.defineProperty(e,"__esModule",{value:!0})}); + diff --git a/tools/node_modules/eslint/node_modules/rxjs/src/internal/util/TimeoutError.ts b/tools/node_modules/eslint/node_modules/rxjs/src/internal/util/TimeoutError.ts index 42610384e7511f..a36162d9beaded 100644 --- a/tools/node_modules/eslint/node_modules/rxjs/src/internal/util/TimeoutError.ts +++ b/tools/node_modules/eslint/node_modules/rxjs/src/internal/util/TimeoutError.ts @@ -1,24 +1,24 @@ -export interface TimeoutError extends Error { -} - -export interface TimeoutErrorCtor { - new(): TimeoutError; -} - -function TimeoutErrorImpl(this: any) { - Error.call(this); - this.message = 'Timeout has occurred'; - this.name = 'TimeoutError'; - return this; -} - -TimeoutErrorImpl.prototype = Object.create(Error.prototype); - -/** - * An error thrown when duetime elapses. - * - * @see {@link timeout} - * - * @class TimeoutError - */ -export const TimeoutError: TimeoutErrorCtor = TimeoutErrorImpl as any; +export interface TimeoutError extends Error { +} + +export interface TimeoutErrorCtor { + new(): TimeoutError; +} + +function TimeoutErrorImpl(this: any) { + Error.call(this); + this.message = 'Timeout has occurred'; + this.name = 'TimeoutError'; + return this; +} + +TimeoutErrorImpl.prototype = Object.create(Error.prototype); + +/** + * An error thrown when duetime elapses. + * + * @see {@link timeout} + * + * @class TimeoutError + */ +export const TimeoutError: TimeoutErrorCtor = TimeoutErrorImpl as any; diff --git a/tools/node_modules/eslint/node_modules/semver/README.md b/tools/node_modules/eslint/node_modules/semver/README.md index 9f7161e2cef594..e0edbb7333112c 100644 --- a/tools/node_modules/eslint/node_modules/semver/README.md +++ b/tools/node_modules/eslint/node_modules/semver/README.md @@ -29,8 +29,6 @@ As a command-line utility: ``` $ semver -h -SemVer 5.3.0 - A JavaScript implementation of the http://semver.org/ specification Copyright Isaac Z. Schlueter @@ -54,6 +52,9 @@ Options: -l --loose Interpret versions and ranges loosely +-p --include-prerelease + Always include prerelease versions in range matching + -c --coerce Coerce a string into SemVer if possible (does not imply --loose) @@ -289,9 +290,19 @@ part ::= nr | [-0-9A-Za-z]+ ## Functions -All methods and classes take a final `loose` boolean argument that, if -true, will be more forgiving about not-quite-valid semver strings. -The resulting output will always be 100% strict, of course. +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. Strict-mode Comparators and Ranges will be strict about the SemVer strings that they parse. diff --git a/tools/node_modules/eslint/node_modules/semver/bin/semver b/tools/node_modules/eslint/node_modules/semver/bin/semver index dddbcdf1180614..9100ed42b8821d 100755 --- a/tools/node_modules/eslint/node_modules/semver/bin/semver +++ b/tools/node_modules/eslint/node_modules/semver/bin/semver @@ -12,10 +12,12 @@ var argv = process.argv.slice(2) , inc = null , version = require("../package.json").version , loose = false + , includePrerelease = false , coerce = false , identifier = undefined , semver = require("../semver") , reverse = false + , options = {} main() @@ -35,6 +37,9 @@ function main () { case "-l": case "--loose": loose = true break + case "-p": case "--include-prerelease": + includePrerelease = true + break case "-v": case "--version": versions.push(argv.shift()) break @@ -66,6 +71,8 @@ function main () { } } + var options = { loose: loose, includePrerelease: includePrerelease } + versions = versions.map(function (v) { return coerce ? (semver.coerce(v) || {version: v}).version : v }).filter(function (v) { @@ -77,7 +84,7 @@ function main () { for (var i = 0, l = range.length; i < l ; i ++) { versions = versions.filter(function (v) { - return semver.satisfies(v, range[i], loose) + return semver.satisfies(v, range[i], options) }) if (!versions.length) return fail() } @@ -94,11 +101,11 @@ function fail () { process.exit(1) } function success () { var compare = reverse ? "rcompare" : "compare" versions.sort(function (a, b) { - return semver[compare](a, b, loose) + return semver[compare](a, b, options) }).map(function (v) { - return semver.clean(v, loose) + return semver.clean(v, options) }).map(function (v) { - return inc ? semver.inc(v, inc, loose, identifier) : v + return inc ? semver.inc(v, inc, options, identifier) : v }).forEach(function (v,i,_) { console.log(v) }) } @@ -128,6 +135,9 @@ function help () { ,"-l --loose" ," Interpret versions and ranges loosely" ,"" + ,"-p --include-prerelease" + ," Always include prerelease versions in range matching" + ,"" ,"-c --coerce" ," Coerce a string into SemVer if possible" ," (does not imply --loose)" diff --git a/tools/node_modules/eslint/node_modules/semver/package.json b/tools/node_modules/eslint/node_modules/semver/package.json index 20ac52f855755b..08c8e8dbc01c9f 100644 --- a/tools/node_modules/eslint/node_modules/semver/package.json +++ b/tools/node_modules/eslint/node_modules/semver/package.json @@ -27,5 +27,5 @@ "scripts": { "test": "tap test/*.js --cov -J" }, - "version": "5.5.1" + "version": "5.6.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/semver/semver.js b/tools/node_modules/eslint/node_modules/semver/semver.js index 9cf9f6e57ce308..0cc57350c2c8e8 100644 --- a/tools/node_modules/eslint/node_modules/semver/semver.js +++ b/tools/node_modules/eslint/node_modules/semver/semver.js @@ -245,7 +245,10 @@ for (var i = 0; i < R; i++) { } exports.parse = parse; -function parse(version, loose) { +function parse(version, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + if (version instanceof SemVer) return version; @@ -255,35 +258,37 @@ function parse(version, loose) { if (version.length > MAX_LENGTH) return null; - var r = loose ? re[LOOSE] : re[FULL]; + var r = options.loose ? re[LOOSE] : re[FULL]; if (!r.test(version)) return null; try { - return new SemVer(version, loose); + return new SemVer(version, options); } catch (er) { return null; } } exports.valid = valid; -function valid(version, loose) { - var v = parse(version, loose); +function valid(version, options) { + var v = parse(version, options); return v ? v.version : null; } exports.clean = clean; -function clean(version, loose) { - var s = parse(version.trim().replace(/^[=v]+/, ''), loose); +function clean(version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options); return s ? s.version : null; } exports.SemVer = SemVer; -function SemVer(version, loose) { +function SemVer(version, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } if (version instanceof SemVer) { - if (version.loose === loose) + if (version.loose === options.loose) return version; else version = version.version; @@ -295,11 +300,13 @@ function SemVer(version, loose) { throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') if (!(this instanceof SemVer)) - return new SemVer(version, loose); + return new SemVer(version, options); + + debug('SemVer', version, options); + this.options = options; + this.loose = !!options.loose; - debug('SemVer', version, loose); - this.loose = loose; - var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]); if (!m) throw new TypeError('Invalid Version: ' + version); @@ -349,16 +356,16 @@ SemVer.prototype.toString = function() { }; SemVer.prototype.compare = function(other) { - debug('SemVer.compare', this.version, this.loose, other); + debug('SemVer.compare', this.version, this.options, other); if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); + other = new SemVer(other, this.options); return this.compareMain(other) || this.comparePre(other); }; SemVer.prototype.compareMain = function(other) { if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); + other = new SemVer(other, this.options); return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || @@ -367,7 +374,7 @@ SemVer.prototype.compareMain = function(other) { SemVer.prototype.comparePre = function(other) { if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); + other = new SemVer(other, this.options); // NOT having a prerelease is > having one if (this.prerelease.length && !other.prerelease.length) @@ -658,19 +665,23 @@ function cmp(a, op, b, loose) { } exports.Comparator = Comparator; -function Comparator(comp, loose) { +function Comparator(comp, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + if (comp instanceof Comparator) { - if (comp.loose === loose) + if (comp.loose === !!options.loose) return comp; else comp = comp.value; } if (!(this instanceof Comparator)) - return new Comparator(comp, loose); + return new Comparator(comp, options); - debug('comparator', comp, loose); - this.loose = loose; + debug('comparator', comp, options); + this.options = options; + this.loose = !!options.loose; this.parse(comp); if (this.semver === ANY) @@ -683,7 +694,7 @@ function Comparator(comp, loose) { var ANY = {}; Comparator.prototype.parse = function(comp) { - var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; var m = comp.match(r); if (!m) @@ -697,7 +708,7 @@ Comparator.prototype.parse = function(comp) { if (!m[2]) this.semver = ANY; else - this.semver = new SemVer(m[2], this.loose); + this.semver = new SemVer(m[2], this.options.loose); }; Comparator.prototype.toString = function() { @@ -705,30 +716,33 @@ Comparator.prototype.toString = function() { }; Comparator.prototype.test = function(version) { - debug('Comparator.test', version, this.loose); + debug('Comparator.test', version, this.options.loose); if (this.semver === ANY) return true; if (typeof version === 'string') - version = new SemVer(version, this.loose); + version = new SemVer(version, this.options); - return cmp(version, this.operator, this.semver, this.loose); + return cmp(version, this.operator, this.semver, this.options); }; -Comparator.prototype.intersects = function(comp, loose) { +Comparator.prototype.intersects = function(comp, options) { if (!(comp instanceof Comparator)) { throw new TypeError('a Comparator is required'); } + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var rangeTmp; if (this.operator === '') { - rangeTmp = new Range(comp.value, loose); - return satisfies(this.value, rangeTmp, loose); + rangeTmp = new Range(comp.value, options); + return satisfies(this.value, rangeTmp, options); } else if (comp.operator === '') { - rangeTmp = new Range(this.value, loose); - return satisfies(comp.semver, rangeTmp, loose); + rangeTmp = new Range(this.value, options); + return satisfies(comp.semver, rangeTmp, options); } var sameDirectionIncreasing = @@ -742,11 +756,11 @@ Comparator.prototype.intersects = function(comp, loose) { (this.operator === '>=' || this.operator === '<=') && (comp.operator === '>=' || comp.operator === '<='); var oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, loose) && + cmp(this.semver, '<', comp.semver, options) && ((this.operator === '>=' || this.operator === '>') && (comp.operator === '<=' || comp.operator === '<')); var oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, loose) && + cmp(this.semver, '>', comp.semver, options) && ((this.operator === '<=' || this.operator === '<') && (comp.operator === '>=' || comp.operator === '>')); @@ -757,23 +771,29 @@ Comparator.prototype.intersects = function(comp, loose) { exports.Range = Range; -function Range(range, loose) { +function Range(range, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + if (range instanceof Range) { - if (range.loose === loose) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { return range; } else { - return new Range(range.raw, loose); + return new Range(range.raw, options); } } if (range instanceof Comparator) { - return new Range(range.value, loose); + return new Range(range.value, options); } if (!(this instanceof Range)) - return new Range(range, loose); + return new Range(range, options); - this.loose = loose; + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease // First, split based on boolean or || this.raw = range; @@ -803,9 +823,8 @@ Range.prototype.toString = function() { }; Range.prototype.parseRange = function(range) { - var loose = this.loose; + var loose = this.options.loose; range = range.trim(); - debug('range', range, loose); // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; range = range.replace(hr, hyphenReplace); @@ -828,22 +847,22 @@ Range.prototype.parseRange = function(range) { var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; var set = range.split(' ').map(function(comp) { - return parseComparator(comp, loose); - }).join(' ').split(/\s+/); - if (this.loose) { + return parseComparator(comp, this.options); + }, this).join(' ').split(/\s+/); + if (this.options.loose) { // in loose mode, throw out any that are not valid comparators set = set.filter(function(comp) { return !!comp.match(compRe); }); } set = set.map(function(comp) { - return new Comparator(comp, loose); - }); + return new Comparator(comp, this.options); + }, this); return set; }; -Range.prototype.intersects = function(range, loose) { +Range.prototype.intersects = function(range, options) { if (!(range instanceof Range)) { throw new TypeError('a Range is required'); } @@ -852,7 +871,7 @@ Range.prototype.intersects = function(range, loose) { return thisComparators.every(function(thisComparator) { return range.set.some(function(rangeComparators) { return rangeComparators.every(function(rangeComparator) { - return thisComparator.intersects(rangeComparator, loose); + return thisComparator.intersects(rangeComparator, options); }); }); }); @@ -861,8 +880,8 @@ Range.prototype.intersects = function(range, loose) { // Mostly just for testing and legacy API reasons exports.toComparators = toComparators; -function toComparators(range, loose) { - return new Range(range, loose).set.map(function(comp) { +function toComparators(range, options) { + return new Range(range, options).set.map(function(comp) { return comp.map(function(c) { return c.value; }).join(' ').trim().split(' '); @@ -872,15 +891,15 @@ function toComparators(range, loose) { // comprised of xranges, tildes, stars, and gtlt's at this point. // already replaced the hyphen ranges // turn into a set of JUST comparators. -function parseComparator(comp, loose) { - debug('comp', comp); - comp = replaceCarets(comp, loose); +function parseComparator(comp, options) { + debug('comp', comp, options); + comp = replaceCarets(comp, options); debug('caret', comp); - comp = replaceTildes(comp, loose); + comp = replaceTildes(comp, options); debug('tildes', comp); - comp = replaceXRanges(comp, loose); + comp = replaceXRanges(comp, options); debug('xrange', comp); - comp = replaceStars(comp, loose); + comp = replaceStars(comp, options); debug('stars', comp); return comp; } @@ -895,14 +914,16 @@ function isX(id) { // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes(comp, loose) { +function replaceTildes(comp, options) { return comp.trim().split(/\s+/).map(function(comp) { - return replaceTilde(comp, loose); + return replaceTilde(comp, options); }).join(' '); } -function replaceTilde(comp, loose) { - var r = loose ? re[TILDELOOSE] : re[TILDE]; +function replaceTilde(comp, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var r = options.loose ? re[TILDELOOSE] : re[TILDE]; return comp.replace(r, function(_, M, m, p, pr) { debug('tilde', comp, _, M, m, p, pr); var ret; @@ -936,15 +957,17 @@ function replaceTilde(comp, loose) { // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 // ^1.2.3 --> >=1.2.3 <2.0.0 // ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets(comp, loose) { +function replaceCarets(comp, options) { return comp.trim().split(/\s+/).map(function(comp) { - return replaceCaret(comp, loose); + return replaceCaret(comp, options); }).join(' '); } -function replaceCaret(comp, loose) { - debug('caret', comp, loose); - var r = loose ? re[CARETLOOSE] : re[CARET]; +function replaceCaret(comp, options) { + debug('caret', comp, options); + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var r = options.loose ? re[CARETLOOSE] : re[CARET]; return comp.replace(r, function(_, M, m, p, pr) { debug('caret', comp, _, M, m, p, pr); var ret; @@ -991,16 +1014,18 @@ function replaceCaret(comp, loose) { }); } -function replaceXRanges(comp, loose) { - debug('replaceXRanges', comp, loose); +function replaceXRanges(comp, options) { + debug('replaceXRanges', comp, options); return comp.split(/\s+/).map(function(comp) { - return replaceXRange(comp, loose); + return replaceXRange(comp, options); }).join(' '); } -function replaceXRange(comp, loose) { +function replaceXRange(comp, options) { comp = comp.trim(); - var r = loose ? re[XRANGELOOSE] : re[XRANGE]; + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]; return comp.replace(r, function(ret, gtlt, M, m, p, pr) { debug('xRange', comp, ret, gtlt, M, m, p, pr); var xM = isX(M); @@ -1064,8 +1089,8 @@ function replaceXRange(comp, loose) { // Because * is AND-ed with everything else in the comparator, // and '' means "any version", just remove the *s entirely. -function replaceStars(comp, loose) { - debug('replaceStars', comp, loose); +function replaceStars(comp, options) { + debug('replaceStars', comp, options); // Looseness is ignored here. star is always as loose as it gets! return comp.trim().replace(re[STAR], ''); } @@ -1109,22 +1134,25 @@ Range.prototype.test = function(version) { return false; if (typeof version === 'string') - version = new SemVer(version, this.loose); + version = new SemVer(version, this.options); for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version)) + if (testSet(this.set[i], version, this.options)) return true; } return false; }; -function testSet(set, version) { +function testSet(set, version, options) { for (var i = 0; i < set.length; i++) { if (!set[i].test(version)) return false; } - if (version.prerelease.length) { + if (!options) + options = {} + + if (version.prerelease.length && !options.includePrerelease) { // Find the set of versions that are allowed to have prereleases // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 // That should allow `1.2.3-pr.2` to pass. @@ -1152,9 +1180,9 @@ function testSet(set, version) { } exports.satisfies = satisfies; -function satisfies(version, range, loose) { +function satisfies(version, range, options) { try { - range = new Range(range, loose); + range = new Range(range, options); } catch (er) { return false; } @@ -1162,19 +1190,19 @@ function satisfies(version, range, loose) { } exports.maxSatisfying = maxSatisfying; -function maxSatisfying(versions, range, loose) { +function maxSatisfying(versions, range, options) { var max = null; var maxSV = null; try { - var rangeObj = new Range(range, loose); + var rangeObj = new Range(range, options); } catch (er) { return null; } versions.forEach(function (v) { - if (rangeObj.test(v)) { // satisfies(v, range, loose) + if (rangeObj.test(v)) { // satisfies(v, range, options) if (!max || maxSV.compare(v) === -1) { // compare(max, v, true) max = v; - maxSV = new SemVer(max, loose); + maxSV = new SemVer(max, options); } } }) @@ -1182,19 +1210,19 @@ function maxSatisfying(versions, range, loose) { } exports.minSatisfying = minSatisfying; -function minSatisfying(versions, range, loose) { +function minSatisfying(versions, range, options) { var min = null; var minSV = null; try { - var rangeObj = new Range(range, loose); + var rangeObj = new Range(range, options); } catch (er) { return null; } versions.forEach(function (v) { - if (rangeObj.test(v)) { // satisfies(v, range, loose) + if (rangeObj.test(v)) { // satisfies(v, range, options) if (!min || minSV.compare(v) === 1) { // compare(min, v, true) min = v; - minSV = new SemVer(min, loose); + minSV = new SemVer(min, options); } } }) @@ -1202,11 +1230,11 @@ function minSatisfying(versions, range, loose) { } exports.validRange = validRange; -function validRange(range, loose) { +function validRange(range, options) { try { // Return '*' instead of '' so that truthiness works. // This will throw if it's invalid anyway - return new Range(range, loose).range || '*'; + return new Range(range, options).range || '*'; } catch (er) { return null; } @@ -1214,20 +1242,20 @@ function validRange(range, loose) { // Determine if version is less than all the versions possible in the range exports.ltr = ltr; -function ltr(version, range, loose) { - return outside(version, range, '<', loose); +function ltr(version, range, options) { + return outside(version, range, '<', options); } // Determine if version is greater than all the versions possible in the range. exports.gtr = gtr; -function gtr(version, range, loose) { - return outside(version, range, '>', loose); +function gtr(version, range, options) { + return outside(version, range, '>', options); } exports.outside = outside; -function outside(version, range, hilo, loose) { - version = new SemVer(version, loose); - range = new Range(range, loose); +function outside(version, range, hilo, options) { + version = new SemVer(version, options); + range = new Range(range, options); var gtfn, ltefn, ltfn, comp, ecomp; switch (hilo) { @@ -1250,7 +1278,7 @@ function outside(version, range, hilo, loose) { } // If it satisifes the range it is not outside - if (satisfies(version, range, loose)) { + if (satisfies(version, range, options)) { return false; } @@ -1269,9 +1297,9 @@ function outside(version, range, hilo, loose) { } high = high || comparator; low = low || comparator; - if (gtfn(comparator.semver, high.semver, loose)) { + if (gtfn(comparator.semver, high.semver, options)) { high = comparator; - } else if (ltfn(comparator.semver, low.semver, loose)) { + } else if (ltfn(comparator.semver, low.semver, options)) { low = comparator; } }); @@ -1295,15 +1323,15 @@ function outside(version, range, hilo, loose) { } exports.prerelease = prerelease; -function prerelease(version, loose) { - var parsed = parse(version, loose); +function prerelease(version, options) { + var parsed = parse(version, options); return (parsed && parsed.prerelease.length) ? parsed.prerelease : null; } exports.intersects = intersects; -function intersects(r1, r2, loose) { - r1 = new Range(r1, loose) - r2 = new Range(r2, loose) +function intersects(r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) return r1.intersects(r2) } diff --git a/tools/node_modules/eslint/node_modules/table/LICENSE b/tools/node_modules/eslint/node_modules/table/LICENSE index 7e84ea3afc0677..6c41d45cd765c2 100644 --- a/tools/node_modules/eslint/node_modules/table/LICENSE +++ b/tools/node_modules/eslint/node_modules/table/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2016, Gajus Kuizinas (http://gajus.com/) +Copyright (c) 2018, Gajus Kuizinas (http://gajus.com/) All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/tools/node_modules/eslint/node_modules/table/README.md b/tools/node_modules/eslint/node_modules/table/README.md index 14e3934ea52efe..1e47185c170563 100644 --- a/tools/node_modules/eslint/node_modules/table/README.md +++ b/tools/node_modules/eslint/node_modules/table/README.md @@ -1,9 +1,11 @@ # Table -[![Travis build status](http://img.shields.io/travis/gajus/table/master.svg?style=flat)](https://travis-ci.org/gajus/table) -[![NPM version](http://img.shields.io/npm/v/table.svg?style=flat)](https://www.npmjs.com/package/table) -[![js-canonical-style](https://img.shields.io/badge/code%20style-canonical-brightgreen.svg?style=flat)](https://github.com/gajus/canonical) +[![Travis build status](http://img.shields.io/travis/gajus/table/master.svg?style=flat-square)](https://travis-ci.org/gajus/table) +[![Coveralls](https://img.shields.io/coveralls/gajus/table.svg?style=flat-square)](https://coveralls.io/github/gajus/table) +[![NPM version](http://img.shields.io/npm/v/table.svg?style=flat-square)](https://www.npmjs.org/package/table) +[![Canonical Code Style](https://img.shields.io/badge/code%20style-canonical-blue.svg?style=flat-square)](https://github.com/gajus/canonical) +[![Twitter Follow](https://img.shields.io/twitter/follow/kuizinas.svg?style=social&label=Follow)](https://twitter.com/kuizinas) * [Table](#table) * [Features](#table-features) @@ -96,7 +98,7 @@ data = [ * Used to dynamically tell table whether to draw a line separating rows or not. * The default behavior is to always return true. * - * @typedef {function} drawJoin + * @typedef {function} drawHorizontalLine * @param {number} index * @param {number} size * @return {boolean} @@ -107,7 +109,7 @@ data = [ * @property {table~border} border * @property {table~columns[]} columns Column specific configuration. * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values. - * @property {table~drawJoin} drawHorizontalLine + * @property {table~drawHorizontalLine} drawHorizontalLine */ /** @@ -296,7 +298,7 @@ data = [ options = { /** - * @typedef {function} drawJoin + * @typedef {function} drawHorizontalLine * @param {number} index * @param {number} size * @return {boolean} @@ -309,6 +311,7 @@ options = { output = table(data, options); console.log(output); + ``` ``` @@ -321,6 +324,7 @@ console.log(output); ╟────┼────┼────╢ ║ 4A │ 4B │ 4C ║ ╚════╧════╧════╝ + ``` diff --git a/tools/node_modules/eslint/node_modules/table/dist/alignString.js b/tools/node_modules/eslint/node_modules/table/dist/alignString.js index 3a948d3afd69c7..a599ce8f9b5e1a 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/alignString.js +++ b/tools/node_modules/eslint/node_modules/table/dist/alignString.js @@ -1,58 +1,54 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); +var _stringWidth = _interopRequireDefault(require("string-width")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const alignments = ['left', 'right', 'center']; - /** * @param {string} subject * @param {number} width * @returns {string} */ + const alignLeft = (subject, width) => { return subject + ' '.repeat(width); }; - /** * @param {string} subject * @param {number} width * @returns {string} */ + + const alignRight = (subject, width) => { return ' '.repeat(width) + subject; }; - /** * @param {string} subject * @param {number} width * @returns {string} */ + + const alignCenter = (subject, width) => { let halfWidth; - halfWidth = width / 2; if (halfWidth % 2 === 0) { return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth); } else { halfWidth = Math.floor(halfWidth); - return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth + 1); } }; - /** * Pads a string to the left and/or right to position the subject * text in a desired alignment within a container. @@ -63,24 +59,24 @@ const alignCenter = (subject, width) => { * @returns {string} */ -exports.default = (subject, containerWidth, alignment) => { - if (!_lodash2.default.isString(subject)) { + +const alignString = (subject, containerWidth, alignment) => { + if (!_lodash.default.isString(subject)) { throw new TypeError('Subject parameter value must be a string.'); } - if (!_lodash2.default.isNumber(containerWidth)) { + if (!_lodash.default.isNumber(containerWidth)) { throw new TypeError('Container width parameter value must be a number.'); } - const subjectWidth = (0, _stringWidth2.default)(subject); + const subjectWidth = (0, _stringWidth.default)(subject); if (subjectWidth > containerWidth) { // console.log('subjectWidth', subjectWidth, 'containerWidth', containerWidth, 'subject', subject); - throw new Error('Subject parameter value width cannot be greater than the container width.'); } - if (!_lodash2.default.isString(alignment)) { + if (!_lodash.default.isString(alignment)) { throw new TypeError('Alignment parameter value must be a string.'); } @@ -103,4 +99,8 @@ exports.default = (subject, containerWidth, alignment) => { } return alignCenter(subject, availableWidth); -}; \ No newline at end of file +}; + +var _default = alignString; +exports.default = _default; +//# sourceMappingURL=alignString.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/alignString.js.flow b/tools/node_modules/eslint/node_modules/table/dist/alignString.js.flow new file mode 100644 index 00000000000000..16936a44c14dcf --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/alignString.js.flow @@ -0,0 +1,96 @@ +import _ from 'lodash'; +import stringWidth from 'string-width'; + +const alignments = [ + 'left', + 'right', + 'center' +]; + +/** + * @param {string} subject + * @param {number} width + * @returns {string} + */ +const alignLeft = (subject, width) => { + return subject + ' '.repeat(width); +}; + +/** + * @param {string} subject + * @param {number} width + * @returns {string} + */ +const alignRight = (subject, width) => { + return ' '.repeat(width) + subject; +}; + +/** + * @param {string} subject + * @param {number} width + * @returns {string} + */ +const alignCenter = (subject, width) => { + let halfWidth; + + halfWidth = width / 2; + + if (halfWidth % 2 === 0) { + return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth); + } else { + halfWidth = Math.floor(halfWidth); + + return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth + 1); + } +}; + +/** + * Pads a string to the left and/or right to position the subject + * text in a desired alignment within a container. + * + * @param {string} subject + * @param {number} containerWidth + * @param {string} alignment One of the valid options (left, right, center). + * @returns {string} + */ +export default (subject, containerWidth, alignment) => { + if (!_.isString(subject)) { + throw new TypeError('Subject parameter value must be a string.'); + } + + if (!_.isNumber(containerWidth)) { + throw new TypeError('Container width parameter value must be a number.'); + } + + const subjectWidth = stringWidth(subject); + + if (subjectWidth > containerWidth) { + // console.log('subjectWidth', subjectWidth, 'containerWidth', containerWidth, 'subject', subject); + + throw new Error('Subject parameter value width cannot be greater than the container width.'); + } + + if (!_.isString(alignment)) { + throw new TypeError('Alignment parameter value must be a string.'); + } + + if (alignments.indexOf(alignment) === -1) { + throw new Error('Alignment parameter value must be a known alignment parameter value (left, right, center).'); + } + + if (subjectWidth === 0) { + return ' '.repeat(containerWidth); + } + + const availableWidth = containerWidth - subjectWidth; + + if (alignment === 'left') { + return alignLeft(subject, availableWidth); + } + + if (alignment === 'right') { + return alignRight(subject, availableWidth); + } + + return alignCenter(subject, availableWidth); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/alignString.js.map b/tools/node_modules/eslint/node_modules/table/dist/alignString.js.map new file mode 100644 index 00000000000000..8420a3b3f31543 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/alignString.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/alignString.js"],"names":["alignments","alignLeft","subject","width","repeat","alignRight","alignCenter","halfWidth","Math","floor","containerWidth","alignment","_","isString","TypeError","isNumber","subjectWidth","Error","indexOf","availableWidth"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,MAAMA,UAAU,GAAG,CACjB,MADiB,EAEjB,OAFiB,EAGjB,QAHiB,CAAnB;AAMA;;;;;;AAKA,MAAMC,SAAS,GAAG,CAACC,OAAD,EAAUC,KAAV,KAAoB;AACpC,SAAOD,OAAO,GAAG,IAAIE,MAAJ,CAAWD,KAAX,CAAjB;AACD,CAFD;AAIA;;;;;;;AAKA,MAAME,UAAU,GAAG,CAACH,OAAD,EAAUC,KAAV,KAAoB;AACrC,SAAO,IAAIC,MAAJ,CAAWD,KAAX,IAAoBD,OAA3B;AACD,CAFD;AAIA;;;;;;;AAKA,MAAMI,WAAW,GAAG,CAACJ,OAAD,EAAUC,KAAV,KAAoB;AACtC,MAAII,SAAJ;AAEAA,EAAAA,SAAS,GAAGJ,KAAK,GAAG,CAApB;;AAEA,MAAII,SAAS,GAAG,CAAZ,KAAkB,CAAtB,EAAyB;AACvB,WAAO,IAAIH,MAAJ,CAAWG,SAAX,IAAwBL,OAAxB,GAAkC,IAAIE,MAAJ,CAAWG,SAAX,CAAzC;AACD,GAFD,MAEO;AACLA,IAAAA,SAAS,GAAGC,IAAI,CAACC,KAAL,CAAWF,SAAX,CAAZ;AAEA,WAAO,IAAIH,MAAJ,CAAWG,SAAX,IAAwBL,OAAxB,GAAkC,IAAIE,MAAJ,CAAWG,SAAS,GAAG,CAAvB,CAAzC;AACD;AACF,CAZD;AAcA;;;;;;;;;;;qBASgBL,O,EAASQ,c,EAAgBC,S,KAAc;AACrD,MAAI,CAACC,gBAAEC,QAAF,CAAWX,OAAX,CAAL,EAA0B;AACxB,UAAM,IAAIY,SAAJ,CAAc,2CAAd,CAAN;AACD;;AAED,MAAI,CAACF,gBAAEG,QAAF,CAAWL,cAAX,CAAL,EAAiC;AAC/B,UAAM,IAAII,SAAJ,CAAc,mDAAd,CAAN;AACD;;AAED,QAAME,YAAY,GAAG,0BAAYd,OAAZ,CAArB;;AAEA,MAAIc,YAAY,GAAGN,cAAnB,EAAmC;AACjC;AAEA,UAAM,IAAIO,KAAJ,CAAU,2EAAV,CAAN;AACD;;AAED,MAAI,CAACL,gBAAEC,QAAF,CAAWF,SAAX,CAAL,EAA4B;AAC1B,UAAM,IAAIG,SAAJ,CAAc,6CAAd,CAAN;AACD;;AAED,MAAId,UAAU,CAACkB,OAAX,CAAmBP,SAAnB,MAAkC,CAAC,CAAvC,EAA0C;AACxC,UAAM,IAAIM,KAAJ,CAAU,4FAAV,CAAN;AACD;;AAED,MAAID,YAAY,KAAK,CAArB,EAAwB;AACtB,WAAO,IAAIZ,MAAJ,CAAWM,cAAX,CAAP;AACD;;AAED,QAAMS,cAAc,GAAGT,cAAc,GAAGM,YAAxC;;AAEA,MAAIL,SAAS,KAAK,MAAlB,EAA0B;AACxB,WAAOV,SAAS,CAACC,OAAD,EAAUiB,cAAV,CAAhB;AACD;;AAED,MAAIR,SAAS,KAAK,OAAlB,EAA2B;AACzB,WAAON,UAAU,CAACH,OAAD,EAAUiB,cAAV,CAAjB;AACD;;AAED,SAAOb,WAAW,CAACJ,OAAD,EAAUiB,cAAV,CAAlB;AACD,C","sourcesContent":["import _ from 'lodash';\nimport stringWidth from 'string-width';\n\nconst alignments = [\n 'left',\n 'right',\n 'center'\n];\n\n/**\n * @param {string} subject\n * @param {number} width\n * @returns {string}\n */\nconst alignLeft = (subject, width) => {\n return subject + ' '.repeat(width);\n};\n\n/**\n * @param {string} subject\n * @param {number} width\n * @returns {string}\n */\nconst alignRight = (subject, width) => {\n return ' '.repeat(width) + subject;\n};\n\n/**\n * @param {string} subject\n * @param {number} width\n * @returns {string}\n */\nconst alignCenter = (subject, width) => {\n let halfWidth;\n\n halfWidth = width / 2;\n\n if (halfWidth % 2 === 0) {\n return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth);\n } else {\n halfWidth = Math.floor(halfWidth);\n\n return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth + 1);\n }\n};\n\n/**\n * Pads a string to the left and/or right to position the subject\n * text in a desired alignment within a container.\n *\n * @param {string} subject\n * @param {number} containerWidth\n * @param {string} alignment One of the valid options (left, right, center).\n * @returns {string}\n */\nexport default (subject, containerWidth, alignment) => {\n if (!_.isString(subject)) {\n throw new TypeError('Subject parameter value must be a string.');\n }\n\n if (!_.isNumber(containerWidth)) {\n throw new TypeError('Container width parameter value must be a number.');\n }\n\n const subjectWidth = stringWidth(subject);\n\n if (subjectWidth > containerWidth) {\n // console.log('subjectWidth', subjectWidth, 'containerWidth', containerWidth, 'subject', subject);\n\n throw new Error('Subject parameter value width cannot be greater than the container width.');\n }\n\n if (!_.isString(alignment)) {\n throw new TypeError('Alignment parameter value must be a string.');\n }\n\n if (alignments.indexOf(alignment) === -1) {\n throw new Error('Alignment parameter value must be a known alignment parameter value (left, right, center).');\n }\n\n if (subjectWidth === 0) {\n return ' '.repeat(containerWidth);\n }\n\n const availableWidth = containerWidth - subjectWidth;\n\n if (alignment === 'left') {\n return alignLeft(subject, availableWidth);\n }\n\n if (alignment === 'right') {\n return alignRight(subject, availableWidth);\n }\n\n return alignCenter(subject, availableWidth);\n};\n"],"file":"alignString.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js b/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js index eb4078455355d6..e01bd552610836 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js +++ b/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js @@ -1,16 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _stringWidth = require('string-width'); +var _stringWidth = _interopRequireDefault(require("string-width")); -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -var _alignString = require('./alignString'); - -var _alignString2 = _interopRequireDefault(_alignString); +var _alignString = _interopRequireDefault(require("./alignString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -19,16 +16,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Object} config * @returns {table~row[]} */ -exports.default = (rows, config) => { +const alignTableData = (rows, config) => { return rows.map(cells => { return cells.map((value, index1) => { const column = config.columns[index1]; - if ((0, _stringWidth2.default)(value) === column.width) { + if ((0, _stringWidth.default)(value) === column.width) { return value; } else { - return (0, _alignString2.default)(value, column.width, column.alignment); + return (0, _alignString.default)(value, column.width, column.alignment); } }); }); -}; \ No newline at end of file +}; + +var _default = alignTableData; +exports.default = _default; +//# sourceMappingURL=alignTableData.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.flow b/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.flow new file mode 100644 index 00000000000000..8a7be7a7e7cf5c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.flow @@ -0,0 +1,21 @@ +import stringWidth from 'string-width'; +import alignString from './alignString'; + +/** + * @param {table~row[]} rows + * @param {Object} config + * @returns {table~row[]} + */ +export default (rows, config) => { + return rows.map((cells) => { + return cells.map((value, index1) => { + const column = config.columns[index1]; + + if (stringWidth(value) === column.width) { + return value; + } else { + return alignString(value, column.width, column.alignment); + } + }); + }); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.map b/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.map new file mode 100644 index 00000000000000..183240f8a43d24 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/alignTableData.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/alignTableData.js"],"names":["rows","config","map","cells","value","index1","column","columns","width","alignment"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA;;;;;wBAKgBA,I,EAAMC,M,KAAW;AAC/B,SAAOD,IAAI,CAACE,GAAL,CAAUC,KAAD,IAAW;AACzB,WAAOA,KAAK,CAACD,GAAN,CAAU,CAACE,KAAD,EAAQC,MAAR,KAAmB;AAClC,YAAMC,MAAM,GAAGL,MAAM,CAACM,OAAP,CAAeF,MAAf,CAAf;;AAEA,UAAI,0BAAYD,KAAZ,MAAuBE,MAAM,CAACE,KAAlC,EAAyC;AACvC,eAAOJ,KAAP;AACD,OAFD,MAEO;AACL,eAAO,0BAAYA,KAAZ,EAAmBE,MAAM,CAACE,KAA1B,EAAiCF,MAAM,CAACG,SAAxC,CAAP;AACD;AACF,KARM,CAAP;AASD,GAVM,CAAP;AAWD,C","sourcesContent":["import stringWidth from 'string-width';\nimport alignString from './alignString';\n\n/**\n * @param {table~row[]} rows\n * @param {Object} config\n * @returns {table~row[]}\n */\nexport default (rows, config) => {\n return rows.map((cells) => {\n return cells.map((value, index1) => {\n const column = config.columns[index1];\n\n if (stringWidth(value) === column.width) {\n return value;\n } else {\n return alignString(value, column.width, column.alignment);\n }\n });\n });\n};\n"],"file":"alignTableData.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js b/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js index 7a8973808149b1..2725ee009ea43d 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js @@ -1,20 +1,15 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); +var _stringWidth = _interopRequireDefault(require("string-width")); -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -var _wrapWord = require('./wrapWord'); - -var _wrapWord2 = _interopRequireDefault(_wrapWord); +var _wrapWord = _interopRequireDefault(require("./wrapWord")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24,10 +19,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {boolean} useWrapWord * @returns {number} */ -exports.default = function (value, columnWidth) { - let useWrapWord = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (!_lodash2.default.isString(value)) { +const calculateCellHeight = (value, columnWidth, useWrapWord = false) => { + if (!_lodash.default.isString(value)) { throw new TypeError('Value must be a string.'); } @@ -40,8 +33,12 @@ exports.default = function (value, columnWidth) { } if (useWrapWord) { - return (0, _wrapWord2.default)(value, columnWidth).length; + return (0, _wrapWord.default)(value, columnWidth).length; } - return Math.ceil((0, _stringWidth2.default)(value) / columnWidth); -}; \ No newline at end of file + return Math.ceil((0, _stringWidth.default)(value) / columnWidth); +}; + +var _default = calculateCellHeight; +exports.default = _default; +//# sourceMappingURL=calculateCellHeight.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.flow b/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.flow new file mode 100644 index 00000000000000..94afd3742140e1 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.flow @@ -0,0 +1,29 @@ +import _ from 'lodash'; +import stringWidth from 'string-width'; +import wrapWord from './wrapWord'; + +/** + * @param {string} value + * @param {number} columnWidth + * @param {boolean} useWrapWord + * @returns {number} + */ +export default (value, columnWidth, useWrapWord = false) => { + if (!_.isString(value)) { + throw new TypeError('Value must be a string.'); + } + + if (!Number.isInteger(columnWidth)) { + throw new TypeError('Column width must be an integer.'); + } + + if (columnWidth < 1) { + throw new Error('Column width must be greater than 0.'); + } + + if (useWrapWord) { + return wrapWord(value, columnWidth).length; + } + + return Math.ceil(stringWidth(value) / columnWidth); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.map b/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.map new file mode 100644 index 00000000000000..43ec44038f1408 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateCellHeight.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/calculateCellHeight.js"],"names":["value","columnWidth","useWrapWord","_","isString","TypeError","Number","isInteger","Error","length","Math","ceil"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAEA;;;;;;6BAMgBA,K,EAAOC,W,EAAaC,WAAW,GAAG,K,KAAU;AAC1D,MAAI,CAACC,gBAAEC,QAAF,CAAWJ,KAAX,CAAL,EAAwB;AACtB,UAAM,IAAIK,SAAJ,CAAc,yBAAd,CAAN;AACD;;AAED,MAAI,CAACC,MAAM,CAACC,SAAP,CAAiBN,WAAjB,CAAL,EAAoC;AAClC,UAAM,IAAII,SAAJ,CAAc,kCAAd,CAAN;AACD;;AAED,MAAIJ,WAAW,GAAG,CAAlB,EAAqB;AACnB,UAAM,IAAIO,KAAJ,CAAU,sCAAV,CAAN;AACD;;AAED,MAAIN,WAAJ,EAAiB;AACf,WAAO,uBAASF,KAAT,EAAgBC,WAAhB,EAA6BQ,MAApC;AACD;;AAED,SAAOC,IAAI,CAACC,IAAL,CAAU,0BAAYX,KAAZ,IAAqBC,WAA/B,CAAP;AACD,C","sourcesContent":["import _ from 'lodash';\nimport stringWidth from 'string-width';\nimport wrapWord from './wrapWord';\n\n/**\n * @param {string} value\n * @param {number} columnWidth\n * @param {boolean} useWrapWord\n * @returns {number}\n */\nexport default (value, columnWidth, useWrapWord = false) => {\n if (!_.isString(value)) {\n throw new TypeError('Value must be a string.');\n }\n\n if (!Number.isInteger(columnWidth)) {\n throw new TypeError('Column width must be an integer.');\n }\n\n if (columnWidth < 1) {\n throw new Error('Column width must be greater than 0.');\n }\n\n if (useWrapWord) {\n return wrapWord(value, columnWidth).length;\n }\n\n return Math.ceil(stringWidth(value) / columnWidth);\n};\n"],"file":"calculateCellHeight.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js b/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js index e6bf927edb7975..82b406015b8288 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js @@ -1,12 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); +var _stringWidth = _interopRequireDefault(require("string-width")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,8 +15,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {string[]} cells * @returns {number[]} */ -exports.default = cells => { +const calculateCellWidthIndex = cells => { return cells.map(value => { - return (0, _stringWidth2.default)(value); + return (0, _stringWidth.default)(value); }); -}; \ No newline at end of file +}; + +var _default = calculateCellWidthIndex; +exports.default = _default; +//# sourceMappingURL=calculateCellWidthIndex.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.flow b/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.flow new file mode 100644 index 00000000000000..f6b90dd8c09b89 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.flow @@ -0,0 +1,13 @@ +import stringWidth from 'string-width'; + +/** + * Calculates width of each cell contents. + * + * @param {string[]} cells + * @returns {number[]} + */ +export default (cells) => { + return cells.map((value) => { + return stringWidth(value); + }); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.map b/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.map new file mode 100644 index 00000000000000..99d1f7798da891 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateCellWidthIndex.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/calculateCellWidthIndex.js"],"names":["cells","map","value"],"mappings":";;;;;;;AAAA;;;;AAEA;;;;;;gCAMgBA,K,IAAU;AACxB,SAAOA,KAAK,CAACC,GAAN,CAAWC,KAAD,IAAW;AAC1B,WAAO,0BAAYA,KAAZ,CAAP;AACD,GAFM,CAAP;AAGD,C","sourcesContent":["import stringWidth from 'string-width';\n\n/**\n * Calculates width of each cell contents.\n *\n * @param {string[]} cells\n * @returns {number[]}\n */\nexport default (cells) => {\n return cells.map((value) => {\n return stringWidth(value);\n });\n};\n"],"file":"calculateCellWidthIndex.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js b/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js index da366c1423c79a..ea5d4b9a4bab4d 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js @@ -1,12 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _calculateCellWidthIndex = require('./calculateCellWidthIndex'); - -var _calculateCellWidthIndex2 = _interopRequireDefault(_calculateCellWidthIndex); +var _calculateCellWidthIndex = _interopRequireDefault(require("./calculateCellWidthIndex")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,22 +15,23 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Array[]} rows * @returns {number[]} */ -exports.default = rows => { +const calculateMaximumColumnWidthIndex = rows => { if (!rows[0]) { throw new Error('Dataset must have at least one row.'); } - const columns = Array(rows[0].length).fill(0); - + const columns = new Array(rows[0].length).fill(0); rows.forEach(row => { - const columnWidthIndex = (0, _calculateCellWidthIndex2.default)(row); - + const columnWidthIndex = (0, _calculateCellWidthIndex.default)(row); columnWidthIndex.forEach((valueWidth, index0) => { if (columns[index0] < valueWidth) { columns[index0] = valueWidth; } }); }); - return columns; -}; \ No newline at end of file +}; + +var _default = calculateMaximumColumnWidthIndex; +exports.default = _default; +//# sourceMappingURL=calculateMaximumColumnWidthIndex.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.flow b/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.flow new file mode 100644 index 00000000000000..5c8c10981cc63b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.flow @@ -0,0 +1,27 @@ +import calculateCellWidthIndex from './calculateCellWidthIndex'; + +/** + * Produces an array of values that describe the largest value length (width) in every column. + * + * @param {Array[]} rows + * @returns {number[]} + */ +export default (rows) => { + if (!rows[0]) { + throw new Error('Dataset must have at least one row.'); + } + + const columns = new Array(rows[0].length).fill(0); + + rows.forEach((row) => { + const columnWidthIndex = calculateCellWidthIndex(row); + + columnWidthIndex.forEach((valueWidth, index0) => { + if (columns[index0] < valueWidth) { + columns[index0] = valueWidth; + } + }); + }); + + return columns; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.map b/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.map new file mode 100644 index 00000000000000..c30f4ceecd2782 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateMaximumColumnWidthIndex.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/calculateMaximumColumnWidthIndex.js"],"names":["rows","Error","columns","Array","length","fill","forEach","row","columnWidthIndex","valueWidth","index0"],"mappings":";;;;;;;AAAA;;;;AAEA;;;;;;yCAMgBA,I,IAAS;AACvB,MAAI,CAACA,IAAI,CAAC,CAAD,CAAT,EAAc;AACZ,UAAM,IAAIC,KAAJ,CAAU,qCAAV,CAAN;AACD;;AAED,QAAMC,OAAO,GAAG,IAAIC,KAAJ,CAAUH,IAAI,CAAC,CAAD,CAAJ,CAAQI,MAAlB,EAA0BC,IAA1B,CAA+B,CAA/B,CAAhB;AAEAL,EAAAA,IAAI,CAACM,OAAL,CAAcC,GAAD,IAAS;AACpB,UAAMC,gBAAgB,GAAG,sCAAwBD,GAAxB,CAAzB;AAEAC,IAAAA,gBAAgB,CAACF,OAAjB,CAAyB,CAACG,UAAD,EAAaC,MAAb,KAAwB;AAC/C,UAAIR,OAAO,CAACQ,MAAD,CAAP,GAAkBD,UAAtB,EAAkC;AAChCP,QAAAA,OAAO,CAACQ,MAAD,CAAP,GAAkBD,UAAlB;AACD;AACF,KAJD;AAKD,GARD;AAUA,SAAOP,OAAP;AACD,C","sourcesContent":["import calculateCellWidthIndex from './calculateCellWidthIndex';\n\n/**\n * Produces an array of values that describe the largest value length (width) in every column.\n *\n * @param {Array[]} rows\n * @returns {number[]}\n */\nexport default (rows) => {\n if (!rows[0]) {\n throw new Error('Dataset must have at least one row.');\n }\n\n const columns = new Array(rows[0].length).fill(0);\n\n rows.forEach((row) => {\n const columnWidthIndex = calculateCellWidthIndex(row);\n\n columnWidthIndex.forEach((valueWidth, index0) => {\n if (columns[index0] < valueWidth) {\n columns[index0] = valueWidth;\n }\n });\n });\n\n return columns;\n};\n"],"file":"calculateMaximumColumnWidthIndex.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js b/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js index 2976ec43344c67..ad98db4040048c 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js @@ -1,16 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); - -var _calculateCellHeight = require('./calculateCellHeight'); - -var _calculateCellHeight2 = _interopRequireDefault(_calculateCellHeight); +var _calculateCellHeight = _interopRequireDefault(require("./calculateCellHeight")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -21,28 +18,27 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Object} config * @returns {number[]} */ -exports.default = (rows, config) => { +const calculateRowHeightIndex = (rows, config) => { const tableWidth = rows[0].length; - const rowSpanIndex = []; - rows.forEach(cells => { - const cellHeightIndex = Array(tableWidth).fill(1); - + const cellHeightIndex = new Array(tableWidth).fill(1); cells.forEach((value, index1) => { - if (!_lodash2.default.isNumber(config.columns[index1].width)) { + if (!_lodash.default.isNumber(config.columns[index1].width)) { throw new TypeError('column[index].width must be a number.'); } - if (!_lodash2.default.isBoolean(config.columns[index1].wrapWord)) { + if (!_lodash.default.isBoolean(config.columns[index1].wrapWord)) { throw new TypeError('column[index].wrapWord must be a boolean.'); } - cellHeightIndex[index1] = (0, _calculateCellHeight2.default)(value, config.columns[index1].width, config.columns[index1].wrapWord); + cellHeightIndex[index1] = (0, _calculateCellHeight.default)(value, config.columns[index1].width, config.columns[index1].wrapWord); }); - - rowSpanIndex.push(_lodash2.default.max(cellHeightIndex)); + rowSpanIndex.push(_lodash.default.max(cellHeightIndex)); }); - return rowSpanIndex; -}; \ No newline at end of file +}; + +var _default = calculateRowHeightIndex; +exports.default = _default; +//# sourceMappingURL=calculateRowHeightIndex.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.flow b/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.flow new file mode 100644 index 00000000000000..268790264860e6 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.flow @@ -0,0 +1,35 @@ +import _ from 'lodash'; +import calculateCellHeight from './calculateCellHeight'; + +/** + * Calculates the vertical row span index. + * + * @param {Array[]} rows + * @param {Object} config + * @returns {number[]} + */ +export default (rows, config) => { + const tableWidth = rows[0].length; + + const rowSpanIndex = []; + + rows.forEach((cells) => { + const cellHeightIndex = new Array(tableWidth).fill(1); + + cells.forEach((value, index1) => { + if (!_.isNumber(config.columns[index1].width)) { + throw new TypeError('column[index].width must be a number.'); + } + + if (!_.isBoolean(config.columns[index1].wrapWord)) { + throw new TypeError('column[index].wrapWord must be a boolean.'); + } + + cellHeightIndex[index1] = calculateCellHeight(value, config.columns[index1].width, config.columns[index1].wrapWord); + }); + + rowSpanIndex.push(_.max(cellHeightIndex)); + }); + + return rowSpanIndex; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.map b/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.map new file mode 100644 index 00000000000000..bcd21c8e5e4354 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/calculateRowHeightIndex.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/calculateRowHeightIndex.js"],"names":["rows","config","tableWidth","length","rowSpanIndex","forEach","cells","cellHeightIndex","Array","fill","value","index1","_","isNumber","columns","width","TypeError","isBoolean","wrapWord","push","max"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA;;;;;;;iCAOgBA,I,EAAMC,M,KAAW;AAC/B,QAAMC,UAAU,GAAGF,IAAI,CAAC,CAAD,CAAJ,CAAQG,MAA3B;AAEA,QAAMC,YAAY,GAAG,EAArB;AAEAJ,EAAAA,IAAI,CAACK,OAAL,CAAcC,KAAD,IAAW;AACtB,UAAMC,eAAe,GAAG,IAAIC,KAAJ,CAAUN,UAAV,EAAsBO,IAAtB,CAA2B,CAA3B,CAAxB;AAEAH,IAAAA,KAAK,CAACD,OAAN,CAAc,CAACK,KAAD,EAAQC,MAAR,KAAmB;AAC/B,UAAI,CAACC,gBAAEC,QAAF,CAAWZ,MAAM,CAACa,OAAP,CAAeH,MAAf,EAAuBI,KAAlC,CAAL,EAA+C;AAC7C,cAAM,IAAIC,SAAJ,CAAc,uCAAd,CAAN;AACD;;AAED,UAAI,CAACJ,gBAAEK,SAAF,CAAYhB,MAAM,CAACa,OAAP,CAAeH,MAAf,EAAuBO,QAAnC,CAAL,EAAmD;AACjD,cAAM,IAAIF,SAAJ,CAAc,2CAAd,CAAN;AACD;;AAEDT,MAAAA,eAAe,CAACI,MAAD,CAAf,GAA0B,kCAAoBD,KAApB,EAA2BT,MAAM,CAACa,OAAP,CAAeH,MAAf,EAAuBI,KAAlD,EAAyDd,MAAM,CAACa,OAAP,CAAeH,MAAf,EAAuBO,QAAhF,CAA1B;AACD,KAVD;AAYAd,IAAAA,YAAY,CAACe,IAAb,CAAkBP,gBAAEQ,GAAF,CAAMb,eAAN,CAAlB;AACD,GAhBD;AAkBA,SAAOH,YAAP;AACD,C","sourcesContent":["import _ from 'lodash';\nimport calculateCellHeight from './calculateCellHeight';\n\n/**\n * Calculates the vertical row span index.\n *\n * @param {Array[]} rows\n * @param {Object} config\n * @returns {number[]}\n */\nexport default (rows, config) => {\n const tableWidth = rows[0].length;\n\n const rowSpanIndex = [];\n\n rows.forEach((cells) => {\n const cellHeightIndex = new Array(tableWidth).fill(1);\n\n cells.forEach((value, index1) => {\n if (!_.isNumber(config.columns[index1].width)) {\n throw new TypeError('column[index].width must be a number.');\n }\n\n if (!_.isBoolean(config.columns[index1].wrapWord)) {\n throw new TypeError('column[index].wrapWord must be a boolean.');\n }\n\n cellHeightIndex[index1] = calculateCellHeight(value, config.columns[index1].width, config.columns[index1].wrapWord);\n });\n\n rowSpanIndex.push(_.max(cellHeightIndex));\n });\n\n return rowSpanIndex;\n};\n"],"file":"calculateRowHeightIndex.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/createStream.js b/tools/node_modules/eslint/node_modules/table/dist/createStream.js index 83698f0e036e27..f1eb06106e4ca1 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/createStream.js +++ b/tools/node_modules/eslint/node_modules/table/dist/createStream.js @@ -1,46 +1,29 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); +var _makeStreamConfig = _interopRequireDefault(require("./makeStreamConfig")); -var _makeStreamConfig = require('./makeStreamConfig'); +var _drawRow = _interopRequireDefault(require("./drawRow")); -var _makeStreamConfig2 = _interopRequireDefault(_makeStreamConfig); +var _drawBorder = require("./drawBorder"); -var _drawRow = require('./drawRow'); +var _stringifyTableData = _interopRequireDefault(require("./stringifyTableData")); -var _drawRow2 = _interopRequireDefault(_drawRow); +var _truncateTableData = _interopRequireDefault(require("./truncateTableData")); -var _drawBorder = require('./drawBorder'); +var _mapDataUsingRowHeightIndex = _interopRequireDefault(require("./mapDataUsingRowHeightIndex")); -var _stringifyTableData = require('./stringifyTableData'); +var _alignTableData = _interopRequireDefault(require("./alignTableData")); -var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData); +var _padTableData = _interopRequireDefault(require("./padTableData")); -var _truncateTableData = require('./truncateTableData'); - -var _truncateTableData2 = _interopRequireDefault(_truncateTableData); - -var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex'); - -var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex); - -var _alignTableData = require('./alignTableData'); - -var _alignTableData2 = _interopRequireDefault(_alignTableData); - -var _padTableData = require('./padTableData'); - -var _padTableData2 = _interopRequireDefault(_padTableData); - -var _calculateRowHeightIndex = require('./calculateRowHeightIndex'); - -var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex); +var _calculateRowHeightIndex = _interopRequireDefault(require("./calculateRowHeightIndex")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -51,90 +34,71 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de */ const prepareData = (data, config) => { let rows; - - rows = (0, _stringifyTableData2.default)(data); - - rows = (0, _truncateTableData2.default)(data, config); - - const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config); - - rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config); - rows = (0, _alignTableData2.default)(rows, config); - rows = (0, _padTableData2.default)(rows, config); - + rows = (0, _stringifyTableData.default)(data); + rows = (0, _truncateTableData.default)(data, config); + const rowHeightIndex = (0, _calculateRowHeightIndex.default)(rows, config); + rows = (0, _mapDataUsingRowHeightIndex.default)(rows, rowHeightIndex, config); + rows = (0, _alignTableData.default)(rows, config); + rows = (0, _padTableData.default)(rows, config); return rows; }; - /** * @param {string[]} row * @param {number[]} columnWidthIndex * @param {Object} config * @returns {undefined} */ + + const create = (row, columnWidthIndex, config) => { const rows = prepareData([row], config); - const body = rows.map(literalRow => { - return (0, _drawRow2.default)(literalRow, config.border); + return (0, _drawRow.default)(literalRow, config.border); }).join(''); - let output; - output = ''; - output += (0, _drawBorder.drawBorderTop)(columnWidthIndex, config.border); output += body; output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border); - - output = _lodash2.default.trimEnd(output); - + output = _lodash.default.trimEnd(output); process.stdout.write(output); }; - /** * @param {string[]} row * @param {number[]} columnWidthIndex * @param {Object} config * @returns {undefined} */ + + const append = (row, columnWidthIndex, config) => { const rows = prepareData([row], config); - const body = rows.map(literalRow => { - return (0, _drawRow2.default)(literalRow, config.border); + return (0, _drawRow.default)(literalRow, config.border); }).join(''); - let output; - output = '\r\u001B[K'; - output += (0, _drawBorder.drawBorderJoin)(columnWidthIndex, config.border); output += body; output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border); - - output = _lodash2.default.trimEnd(output); - + output = _lodash.default.trimEnd(output); process.stdout.write(output); }; - /** * @param {Object} userConfig * @returns {Object} */ -exports.default = function () { - let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - const config = (0, _makeStreamConfig2.default)(userConfig); +const createStream = (userConfig = {}) => { + const config = (0, _makeStreamConfig.default)(userConfig); // @todo Use 'Object.values' when Node.js v6 support is dropped. - const columnWidthIndex = _lodash2.default.mapValues(config.columns, column => { + const columnWidthIndex = _lodash.default.values(_lodash.default.mapValues(config.columns, column => { return column.width + column.paddingLeft + column.paddingRight; - }); + })); let empty; - empty = true; - return { /** * @param {string[]} row @@ -147,11 +111,14 @@ exports.default = function () { if (empty) { empty = false; - return create(row, columnWidthIndex, config); } else { return append(row, columnWidthIndex, config); } } }; -}; \ No newline at end of file +}; + +var _default = createStream; +exports.default = _default; +//# sourceMappingURL=createStream.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/createStream.js.flow b/tools/node_modules/eslint/node_modules/table/dist/createStream.js.flow new file mode 100644 index 00000000000000..1d7d00e399c4a3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/createStream.js.flow @@ -0,0 +1,124 @@ +import _ from 'lodash'; +import makeStreamConfig from './makeStreamConfig'; +import drawRow from './drawRow'; +import { + drawBorderBottom, + drawBorderJoin, + drawBorderTop +} from './drawBorder'; +import stringifyTableData from './stringifyTableData'; +import truncateTableData from './truncateTableData'; +import mapDataUsingRowHeightIndex from './mapDataUsingRowHeightIndex'; +import alignTableData from './alignTableData'; +import padTableData from './padTableData'; +import calculateRowHeightIndex from './calculateRowHeightIndex'; + +/** + * @param {Array} data + * @param {Object} config + * @returns {Array} + */ +const prepareData = (data, config) => { + let rows; + + rows = stringifyTableData(data); + + rows = truncateTableData(data, config); + + const rowHeightIndex = calculateRowHeightIndex(rows, config); + + rows = mapDataUsingRowHeightIndex(rows, rowHeightIndex, config); + rows = alignTableData(rows, config); + rows = padTableData(rows, config); + + return rows; +}; + +/** + * @param {string[]} row + * @param {number[]} columnWidthIndex + * @param {Object} config + * @returns {undefined} + */ +const create = (row, columnWidthIndex, config) => { + const rows = prepareData([row], config); + + const body = rows.map((literalRow) => { + return drawRow(literalRow, config.border); + }).join(''); + + let output; + + output = ''; + + output += drawBorderTop(columnWidthIndex, config.border); + output += body; + output += drawBorderBottom(columnWidthIndex, config.border); + + output = _.trimEnd(output); + + process.stdout.write(output); +}; + +/** + * @param {string[]} row + * @param {number[]} columnWidthIndex + * @param {Object} config + * @returns {undefined} + */ +const append = (row, columnWidthIndex, config) => { + const rows = prepareData([row], config); + + const body = rows.map((literalRow) => { + return drawRow(literalRow, config.border); + }).join(''); + + let output; + + output = '\r\u001B[K'; + + output += drawBorderJoin(columnWidthIndex, config.border); + output += body; + output += drawBorderBottom(columnWidthIndex, config.border); + + output = _.trimEnd(output); + + process.stdout.write(output); +}; + +/** + * @param {Object} userConfig + * @returns {Object} + */ +export default (userConfig = {}) => { + const config = makeStreamConfig(userConfig); + + // @todo Use 'Object.values' when Node.js v6 support is dropped. + const columnWidthIndex = _.values(_.mapValues(config.columns, (column) => { + return column.width + column.paddingLeft + column.paddingRight; + })); + + let empty; + + empty = true; + + return { + /** + * @param {string[]} row + * @returns {undefined} + */ + write: (row) => { + if (row.length !== config.columnCount) { + throw new Error('Row cell count does not match the config.columnCount.'); + } + + if (empty) { + empty = false; + + return create(row, columnWidthIndex, config); + } else { + return append(row, columnWidthIndex, config); + } + } + }; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/createStream.js.map b/tools/node_modules/eslint/node_modules/table/dist/createStream.js.map new file mode 100644 index 00000000000000..92cf88794cefc2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/createStream.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/createStream.js"],"names":["prepareData","data","config","rows","rowHeightIndex","create","row","columnWidthIndex","body","map","literalRow","border","join","output","_","trimEnd","process","stdout","write","append","userConfig","values","mapValues","columns","column","width","paddingLeft","paddingRight","empty","length","columnCount","Error"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport makeStreamConfig from './makeStreamConfig';\nimport drawRow from './drawRow';\nimport {\n drawBorderBottom,\n drawBorderJoin,\n drawBorderTop\n} from './drawBorder';\nimport stringifyTableData from './stringifyTableData';\nimport truncateTableData from './truncateTableData';\nimport mapDataUsingRowHeightIndex from './mapDataUsingRowHeightIndex';\nimport alignTableData from './alignTableData';\nimport padTableData from './padTableData';\nimport calculateRowHeightIndex from './calculateRowHeightIndex';\n\n/**\n * @param {Array} data\n * @param {Object} config\n * @returns {Array}\n */\nconst prepareData = (data, config) => {\n let rows;\n\n rows = stringifyTableData(data);\n\n rows = truncateTableData(data, config);\n\n const rowHeightIndex = calculateRowHeightIndex(rows, config);\n\n rows = mapDataUsingRowHeightIndex(rows, rowHeightIndex, config);\n rows = alignTableData(rows, config);\n rows = padTableData(rows, config);\n\n return rows;\n};\n\n/**\n * @param {string[]} row\n * @param {number[]} columnWidthIndex\n * @param {Object} config\n * @returns {undefined}\n */\nconst create = (row, columnWidthIndex, config) => {\n const rows = prepareData([row], config);\n\n const body = rows.map((literalRow) => {\n return drawRow(literalRow, config.border);\n }).join('');\n\n let output;\n\n output = '';\n\n output += drawBorderTop(columnWidthIndex, config.border);\n output += body;\n output += drawBorderBottom(columnWidthIndex, config.border);\n\n output = _.trimEnd(output);\n\n process.stdout.write(output);\n};\n\n/**\n * @param {string[]} row\n * @param {number[]} columnWidthIndex\n * @param {Object} config\n * @returns {undefined}\n */\nconst append = (row, columnWidthIndex, config) => {\n const rows = prepareData([row], config);\n\n const body = rows.map((literalRow) => {\n return drawRow(literalRow, config.border);\n }).join('');\n\n let output;\n\n output = '\\r\\u001B[K';\n\n output += drawBorderJoin(columnWidthIndex, config.border);\n output += body;\n output += drawBorderBottom(columnWidthIndex, config.border);\n\n output = _.trimEnd(output);\n\n process.stdout.write(output);\n};\n\n/**\n * @param {Object} userConfig\n * @returns {Object}\n */\nexport default (userConfig = {}) => {\n const config = makeStreamConfig(userConfig);\n\n // @todo Use 'Object.values' when Node.js v6 support is dropped.\n const columnWidthIndex = _.values(_.mapValues(config.columns, (column) => {\n return column.width + column.paddingLeft + column.paddingRight;\n }));\n\n let empty;\n\n empty = true;\n\n return {\n /**\n * @param {string[]} row\n * @returns {undefined}\n */\n write: (row) => {\n if (row.length !== config.columnCount) {\n throw new Error('Row cell count does not match the config.columnCount.');\n }\n\n if (empty) {\n empty = false;\n\n return create(row, columnWidthIndex, config);\n } else {\n return append(row, columnWidthIndex, config);\n }\n }\n };\n};\n"],"file":"createStream.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js b/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js index beae57f1a2885f..cb7c54077a3fd1 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js +++ b/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js @@ -1,8 +1,10 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.drawBorderTop = exports.drawBorderJoin = exports.drawBorderBottom = exports.drawBorder = void 0; + /** * @typedef drawBorder~parts * @property {string} left @@ -20,10 +22,8 @@ const drawBorder = (columnSizeIndex, parts) => { const columns = columnSizeIndex.map(size => { return parts.body.repeat(size); }).join(parts.join); - return parts.left + columns + parts.right + '\n'; }; - /** * @typedef drawBorderTop~parts * @property {string} topLeft @@ -37,6 +37,10 @@ const drawBorder = (columnSizeIndex, parts) => { * @param {drawBorderTop~parts} parts * @returns {string} */ + + +exports.drawBorder = drawBorder; + const drawBorderTop = (columnSizeIndex, parts) => { return drawBorder(columnSizeIndex, { body: parts.topBody, @@ -45,7 +49,6 @@ const drawBorderTop = (columnSizeIndex, parts) => { right: parts.topRight }); }; - /** * @typedef drawBorderJoin~parts * @property {string} joinLeft @@ -59,6 +62,10 @@ const drawBorderTop = (columnSizeIndex, parts) => { * @param {drawBorderJoin~parts} parts * @returns {string} */ + + +exports.drawBorderTop = drawBorderTop; + const drawBorderJoin = (columnSizeIndex, parts) => { return drawBorder(columnSizeIndex, { body: parts.joinBody, @@ -67,7 +74,6 @@ const drawBorderJoin = (columnSizeIndex, parts) => { right: parts.joinRight }); }; - /** * @typedef drawBorderBottom~parts * @property {string} topLeft @@ -81,6 +87,10 @@ const drawBorderJoin = (columnSizeIndex, parts) => { * @param {drawBorderBottom~parts} parts * @returns {string} */ + + +exports.drawBorderJoin = drawBorderJoin; + const drawBorderBottom = (columnSizeIndex, parts) => { return drawBorder(columnSizeIndex, { body: parts.bottomBody, @@ -90,7 +100,5 @@ const drawBorderBottom = (columnSizeIndex, parts) => { }); }; -exports.drawBorder = drawBorder; exports.drawBorderBottom = drawBorderBottom; -exports.drawBorderJoin = drawBorderJoin; -exports.drawBorderTop = drawBorderTop; \ No newline at end of file +//# sourceMappingURL=drawBorder.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.flow b/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.flow new file mode 100644 index 00000000000000..5d5f5d9ac2e90f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.flow @@ -0,0 +1,95 @@ +/** + * @typedef drawBorder~parts + * @property {string} left + * @property {string} right + * @property {string} body + * @property {string} join + */ + +/** + * @param {number[]} columnSizeIndex + * @param {drawBorder~parts} parts + * @returns {string} + */ +const drawBorder = (columnSizeIndex, parts) => { + const columns = columnSizeIndex + .map((size) => { + return parts.body.repeat(size); + }) + .join(parts.join); + + return parts.left + columns + parts.right + '\n'; +}; + +/** + * @typedef drawBorderTop~parts + * @property {string} topLeft + * @property {string} topRight + * @property {string} topBody + * @property {string} topJoin + */ + +/** + * @param {number[]} columnSizeIndex + * @param {drawBorderTop~parts} parts + * @returns {string} + */ +const drawBorderTop = (columnSizeIndex, parts) => { + return drawBorder(columnSizeIndex, { + body: parts.topBody, + join: parts.topJoin, + left: parts.topLeft, + right: parts.topRight + }); +}; + +/** + * @typedef drawBorderJoin~parts + * @property {string} joinLeft + * @property {string} joinRight + * @property {string} joinBody + * @property {string} joinJoin + */ + +/** + * @param {number[]} columnSizeIndex + * @param {drawBorderJoin~parts} parts + * @returns {string} + */ +const drawBorderJoin = (columnSizeIndex, parts) => { + return drawBorder(columnSizeIndex, { + body: parts.joinBody, + join: parts.joinJoin, + left: parts.joinLeft, + right: parts.joinRight + }); +}; + +/** + * @typedef drawBorderBottom~parts + * @property {string} topLeft + * @property {string} topRight + * @property {string} topBody + * @property {string} topJoin + */ + +/** + * @param {number[]} columnSizeIndex + * @param {drawBorderBottom~parts} parts + * @returns {string} + */ +const drawBorderBottom = (columnSizeIndex, parts) => { + return drawBorder(columnSizeIndex, { + body: parts.bottomBody, + join: parts.bottomJoin, + left: parts.bottomLeft, + right: parts.bottomRight + }); +}; + +export { + drawBorder, + drawBorderBottom, + drawBorderJoin, + drawBorderTop +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.map b/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.map new file mode 100644 index 00000000000000..dfdfccd0f4ee3d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/drawBorder.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/drawBorder.js"],"names":["drawBorder","columnSizeIndex","parts","columns","map","size","body","repeat","join","left","right","drawBorderTop","topBody","topJoin","topLeft","topRight","drawBorderJoin","joinBody","joinJoin","joinLeft","joinRight","drawBorderBottom","bottomBody","bottomJoin","bottomLeft","bottomRight"],"mappings":";;;;;;;AAAA;;;;;;;;AAQA;;;;;AAKA,MAAMA,UAAU,GAAG,CAACC,eAAD,EAAkBC,KAAlB,KAA4B;AAC7C,QAAMC,OAAO,GAAGF,eAAe,CAC5BG,GADa,CACRC,IAAD,IAAU;AACb,WAAOH,KAAK,CAACI,IAAN,CAAWC,MAAX,CAAkBF,IAAlB,CAAP;AACD,GAHa,EAIbG,IAJa,CAIRN,KAAK,CAACM,IAJE,CAAhB;AAMA,SAAON,KAAK,CAACO,IAAN,GAAaN,OAAb,GAAuBD,KAAK,CAACQ,KAA7B,GAAqC,IAA5C;AACD,CARD;AAUA;;;;;;;;AAQA;;;;;;;;;AAKA,MAAMC,aAAa,GAAG,CAACV,eAAD,EAAkBC,KAAlB,KAA4B;AAChD,SAAOF,UAAU,CAACC,eAAD,EAAkB;AACjCK,IAAAA,IAAI,EAAEJ,KAAK,CAACU,OADqB;AAEjCJ,IAAAA,IAAI,EAAEN,KAAK,CAACW,OAFqB;AAGjCJ,IAAAA,IAAI,EAAEP,KAAK,CAACY,OAHqB;AAIjCJ,IAAAA,KAAK,EAAER,KAAK,CAACa;AAJoB,GAAlB,CAAjB;AAMD,CAPD;AASA;;;;;;;;AAQA;;;;;;;;;AAKA,MAAMC,cAAc,GAAG,CAACf,eAAD,EAAkBC,KAAlB,KAA4B;AACjD,SAAOF,UAAU,CAACC,eAAD,EAAkB;AACjCK,IAAAA,IAAI,EAAEJ,KAAK,CAACe,QADqB;AAEjCT,IAAAA,IAAI,EAAEN,KAAK,CAACgB,QAFqB;AAGjCT,IAAAA,IAAI,EAAEP,KAAK,CAACiB,QAHqB;AAIjCT,IAAAA,KAAK,EAAER,KAAK,CAACkB;AAJoB,GAAlB,CAAjB;AAMD,CAPD;AASA;;;;;;;;AAQA;;;;;;;;;AAKA,MAAMC,gBAAgB,GAAG,CAACpB,eAAD,EAAkBC,KAAlB,KAA4B;AACnD,SAAOF,UAAU,CAACC,eAAD,EAAkB;AACjCK,IAAAA,IAAI,EAAEJ,KAAK,CAACoB,UADqB;AAEjCd,IAAAA,IAAI,EAAEN,KAAK,CAACqB,UAFqB;AAGjCd,IAAAA,IAAI,EAAEP,KAAK,CAACsB,UAHqB;AAIjCd,IAAAA,KAAK,EAAER,KAAK,CAACuB;AAJoB,GAAlB,CAAjB;AAMD,CAPD","sourcesContent":["/**\n * @typedef drawBorder~parts\n * @property {string} left\n * @property {string} right\n * @property {string} body\n * @property {string} join\n */\n\n/**\n * @param {number[]} columnSizeIndex\n * @param {drawBorder~parts} parts\n * @returns {string}\n */\nconst drawBorder = (columnSizeIndex, parts) => {\n const columns = columnSizeIndex\n .map((size) => {\n return parts.body.repeat(size);\n })\n .join(parts.join);\n\n return parts.left + columns + parts.right + '\\n';\n};\n\n/**\n * @typedef drawBorderTop~parts\n * @property {string} topLeft\n * @property {string} topRight\n * @property {string} topBody\n * @property {string} topJoin\n */\n\n/**\n * @param {number[]} columnSizeIndex\n * @param {drawBorderTop~parts} parts\n * @returns {string}\n */\nconst drawBorderTop = (columnSizeIndex, parts) => {\n return drawBorder(columnSizeIndex, {\n body: parts.topBody,\n join: parts.topJoin,\n left: parts.topLeft,\n right: parts.topRight\n });\n};\n\n/**\n * @typedef drawBorderJoin~parts\n * @property {string} joinLeft\n * @property {string} joinRight\n * @property {string} joinBody\n * @property {string} joinJoin\n */\n\n/**\n * @param {number[]} columnSizeIndex\n * @param {drawBorderJoin~parts} parts\n * @returns {string}\n */\nconst drawBorderJoin = (columnSizeIndex, parts) => {\n return drawBorder(columnSizeIndex, {\n body: parts.joinBody,\n join: parts.joinJoin,\n left: parts.joinLeft,\n right: parts.joinRight\n });\n};\n\n/**\n * @typedef drawBorderBottom~parts\n * @property {string} topLeft\n * @property {string} topRight\n * @property {string} topBody\n * @property {string} topJoin\n */\n\n/**\n * @param {number[]} columnSizeIndex\n * @param {drawBorderBottom~parts} parts\n * @returns {string}\n */\nconst drawBorderBottom = (columnSizeIndex, parts) => {\n return drawBorder(columnSizeIndex, {\n body: parts.bottomBody,\n join: parts.bottomJoin,\n left: parts.bottomLeft,\n right: parts.bottomRight\n });\n};\n\nexport {\n drawBorder,\n drawBorderBottom,\n drawBorderJoin,\n drawBorderTop\n};\n"],"file":"drawBorder.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawRow.js b/tools/node_modules/eslint/node_modules/table/dist/drawRow.js index 65547fba058caf..800ca25bc3df7e 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/drawRow.js +++ b/tools/node_modules/eslint/node_modules/table/dist/drawRow.js @@ -1,8 +1,9 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; /** * @typedef {Object} drawRow~border @@ -16,6 +17,10 @@ Object.defineProperty(exports, "__esModule", { * @param {drawRow~border} border * @returns {string} */ -exports.default = (columns, border) => { +const drawRow = (columns, border) => { return border.bodyLeft + columns.join(border.bodyJoin) + border.bodyRight + '\n'; -}; \ No newline at end of file +}; + +var _default = drawRow; +exports.default = _default; +//# sourceMappingURL=drawRow.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawRow.js.flow b/tools/node_modules/eslint/node_modules/table/dist/drawRow.js.flow new file mode 100644 index 00000000000000..fdeceefa31880a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/drawRow.js.flow @@ -0,0 +1,15 @@ +/** + * @typedef {Object} drawRow~border + * @property {string} bodyLeft + * @property {string} bodyRight + * @property {string} bodyJoin + */ + +/** + * @param {number[]} columns + * @param {drawRow~border} border + * @returns {string} + */ +export default (columns, border) => { + return border.bodyLeft + columns.join(border.bodyJoin) + border.bodyRight + '\n'; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawRow.js.map b/tools/node_modules/eslint/node_modules/table/dist/drawRow.js.map new file mode 100644 index 00000000000000..4541d1961520d6 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/drawRow.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/drawRow.js"],"names":["columns","border","bodyLeft","join","bodyJoin","bodyRight"],"mappings":";;;;;;;AAAA;;;;;;;AAOA;;;;;iBAKgBA,O,EAASC,M,KAAW;AAClC,SAAOA,MAAM,CAACC,QAAP,GAAkBF,OAAO,CAACG,IAAR,CAAaF,MAAM,CAACG,QAApB,CAAlB,GAAkDH,MAAM,CAACI,SAAzD,GAAqE,IAA5E;AACD,C","sourcesContent":["/**\n * @typedef {Object} drawRow~border\n * @property {string} bodyLeft\n * @property {string} bodyRight\n * @property {string} bodyJoin\n */\n\n/**\n * @param {number[]} columns\n * @param {drawRow~border} border\n * @returns {string}\n */\nexport default (columns, border) => {\n return border.bodyLeft + columns.join(border.bodyJoin) + border.bodyRight + '\\n';\n};\n"],"file":"drawRow.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawTable.js b/tools/node_modules/eslint/node_modules/table/dist/drawTable.js index 01e8c3e14d4af6..5585af888f6612 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/drawTable.js +++ b/tools/node_modules/eslint/node_modules/table/dist/drawTable.js @@ -1,14 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _drawBorder = require('./drawBorder'); +var _drawBorder = require("./drawBorder"); -var _drawRow = require('./drawRow'); - -var _drawRow2 = _interopRequireDefault(_drawRow); +var _drawRow = _interopRequireDefault(require("./drawRow")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -20,15 +19,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Function} drawHorizontalLine * @returns {string} */ -exports.default = (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine) => { +const drawTable = (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine) => { let output; let realRowIndex; let rowHeight; - const rowCount = rows.length; - realRowIndex = 0; - output = ''; if (drawHorizontalLine(realRowIndex, rowCount)) { @@ -36,11 +32,10 @@ exports.default = (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLi } rows.forEach((row, index0) => { - output += (0, _drawRow2.default)(row, border); + output += (0, _drawRow.default)(row, border); if (!rowHeight) { rowHeight = rowSpanIndex[realRowIndex]; - realRowIndex++; } @@ -56,4 +51,8 @@ exports.default = (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLi } return output; -}; \ No newline at end of file +}; + +var _default = drawTable; +exports.default = _default; +//# sourceMappingURL=drawTable.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawTable.js.flow b/tools/node_modules/eslint/node_modules/table/dist/drawTable.js.flow new file mode 100644 index 00000000000000..15ad14cfa2ba12 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/drawTable.js.flow @@ -0,0 +1,52 @@ +import { + drawBorderTop, + drawBorderJoin, + drawBorderBottom +} from './drawBorder'; +import drawRow from './drawRow'; + +/** + * @param {Array} rows + * @param {Object} border + * @param {Array} columnSizeIndex + * @param {Array} rowSpanIndex + * @param {Function} drawHorizontalLine + * @returns {string} + */ +export default (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine) => { + let output; + let realRowIndex; + let rowHeight; + + const rowCount = rows.length; + + realRowIndex = 0; + + output = ''; + + if (drawHorizontalLine(realRowIndex, rowCount)) { + output += drawBorderTop(columnSizeIndex, border); + } + + rows.forEach((row, index0) => { + output += drawRow(row, border); + + if (!rowHeight) { + rowHeight = rowSpanIndex[realRowIndex]; + + realRowIndex++; + } + + rowHeight--; + + if (rowHeight === 0 && index0 !== rowCount - 1 && drawHorizontalLine(realRowIndex, rowCount)) { + output += drawBorderJoin(columnSizeIndex, border); + } + }); + + if (drawHorizontalLine(realRowIndex, rowCount)) { + output += drawBorderBottom(columnSizeIndex, border); + } + + return output; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/drawTable.js.map b/tools/node_modules/eslint/node_modules/table/dist/drawTable.js.map new file mode 100644 index 00000000000000..526336ab999159 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/drawTable.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/drawTable.js"],"names":["rows","border","columnSizeIndex","rowSpanIndex","drawHorizontalLine","output","realRowIndex","rowHeight","rowCount","length","forEach","row","index0"],"mappings":";;;;;;;AAAA;;AAKA;;;;AAEA;;;;;;;;mBAQgBA,I,EAAMC,M,EAAQC,e,EAAiBC,Y,EAAcC,kB,KAAuB;AAClF,MAAIC,MAAJ;AACA,MAAIC,YAAJ;AACA,MAAIC,SAAJ;AAEA,QAAMC,QAAQ,GAAGR,IAAI,CAACS,MAAtB;AAEAH,EAAAA,YAAY,GAAG,CAAf;AAEAD,EAAAA,MAAM,GAAG,EAAT;;AAEA,MAAID,kBAAkB,CAACE,YAAD,EAAeE,QAAf,CAAtB,EAAgD;AAC9CH,IAAAA,MAAM,IAAI,+BAAcH,eAAd,EAA+BD,MAA/B,CAAV;AACD;;AAEDD,EAAAA,IAAI,CAACU,OAAL,CAAa,CAACC,GAAD,EAAMC,MAAN,KAAiB;AAC5BP,IAAAA,MAAM,IAAI,sBAAQM,GAAR,EAAaV,MAAb,CAAV;;AAEA,QAAI,CAACM,SAAL,EAAgB;AACdA,MAAAA,SAAS,GAAGJ,YAAY,CAACG,YAAD,CAAxB;AAEAA,MAAAA,YAAY;AACb;;AAEDC,IAAAA,SAAS;;AAET,QAAIA,SAAS,KAAK,CAAd,IAAmBK,MAAM,KAAKJ,QAAQ,GAAG,CAAzC,IAA8CJ,kBAAkB,CAACE,YAAD,EAAeE,QAAf,CAApE,EAA8F;AAC5FH,MAAAA,MAAM,IAAI,gCAAeH,eAAf,EAAgCD,MAAhC,CAAV;AACD;AACF,GAdD;;AAgBA,MAAIG,kBAAkB,CAACE,YAAD,EAAeE,QAAf,CAAtB,EAAgD;AAC9CH,IAAAA,MAAM,IAAI,kCAAiBH,eAAjB,EAAkCD,MAAlC,CAAV;AACD;;AAED,SAAOI,MAAP;AACD,C","sourcesContent":["import {\n drawBorderTop,\n drawBorderJoin,\n drawBorderBottom\n} from './drawBorder';\nimport drawRow from './drawRow';\n\n/**\n * @param {Array} rows\n * @param {Object} border\n * @param {Array} columnSizeIndex\n * @param {Array} rowSpanIndex\n * @param {Function} drawHorizontalLine\n * @returns {string}\n */\nexport default (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine) => {\n let output;\n let realRowIndex;\n let rowHeight;\n\n const rowCount = rows.length;\n\n realRowIndex = 0;\n\n output = '';\n\n if (drawHorizontalLine(realRowIndex, rowCount)) {\n output += drawBorderTop(columnSizeIndex, border);\n }\n\n rows.forEach((row, index0) => {\n output += drawRow(row, border);\n\n if (!rowHeight) {\n rowHeight = rowSpanIndex[realRowIndex];\n\n realRowIndex++;\n }\n\n rowHeight--;\n\n if (rowHeight === 0 && index0 !== rowCount - 1 && drawHorizontalLine(realRowIndex, rowCount)) {\n output += drawBorderJoin(columnSizeIndex, border);\n }\n });\n\n if (drawHorizontalLine(realRowIndex, rowCount)) {\n output += drawBorderBottom(columnSizeIndex, border);\n }\n\n return output;\n};\n"],"file":"drawTable.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js b/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js index 0a0f599ca39242..0b9b5b00e10212 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js +++ b/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js @@ -1,8 +1,9 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; /* eslint-disable sort-keys */ @@ -29,23 +30,20 @@ Object.defineProperty(exports, "__esModule", { * @param {string} name * @returns {border} */ -exports.default = name => { +const getBorderCharacters = name => { if (name === 'honeywell') { return { topBody: '═', topJoin: '╤', topLeft: '╔', topRight: '╗', - bottomBody: '═', bottomJoin: '╧', bottomLeft: '╚', bottomRight: '╝', - bodyLeft: '║', bodyRight: '║', bodyJoin: '│', - joinBody: '─', joinLeft: '╟', joinRight: '╢', @@ -59,16 +57,13 @@ exports.default = name => { topJoin: '┬', topLeft: '┌', topRight: '┐', - bottomBody: '─', bottomJoin: '┴', bottomLeft: '└', bottomRight: '┘', - bodyLeft: '│', bodyRight: '│', bodyJoin: '│', - joinBody: '─', joinLeft: '├', joinRight: '┤', @@ -82,16 +77,13 @@ exports.default = name => { topJoin: '+', topLeft: '+', topRight: '+', - bottomBody: '-', bottomJoin: '+', bottomLeft: '+', bottomRight: '+', - bodyLeft: '|', bodyRight: '|', bodyJoin: '|', - joinBody: '-', joinLeft: '|', joinRight: '|', @@ -105,16 +97,13 @@ exports.default = name => { topJoin: '', topLeft: '', topRight: '', - bottomBody: '', bottomJoin: '', bottomLeft: '', bottomRight: '', - bodyLeft: '', bodyRight: '', bodyJoin: '', - joinBody: '', joinLeft: '', joinRight: '', @@ -123,4 +112,8 @@ exports.default = name => { } throw new Error('Unknown border template "' + name + '".'); -}; \ No newline at end of file +}; + +var _default = getBorderCharacters; +exports.default = _default; +//# sourceMappingURL=getBorderCharacters.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.flow b/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.flow new file mode 100644 index 00000000000000..916b3518f9408e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.flow @@ -0,0 +1,120 @@ +/* eslint-disable sort-keys */ + +/** + * @typedef border + * @property {string} topBody + * @property {string} topJoin + * @property {string} topLeft + * @property {string} topRight + * @property {string} bottomBody + * @property {string} bottomJoin + * @property {string} bottomLeft + * @property {string} bottomRight + * @property {string} bodyLeft + * @property {string} bodyRight + * @property {string} bodyJoin + * @property {string} joinBody + * @property {string} joinLeft + * @property {string} joinRight + * @property {string} joinJoin + */ + +/** + * @param {string} name + * @returns {border} + */ +export default (name) => { + if (name === 'honeywell') { + return { + topBody: '═', + topJoin: '╤', + topLeft: '╔', + topRight: '╗', + + bottomBody: '═', + bottomJoin: '╧', + bottomLeft: '╚', + bottomRight: '╝', + + bodyLeft: '║', + bodyRight: '║', + bodyJoin: '│', + + joinBody: '─', + joinLeft: '╟', + joinRight: '╢', + joinJoin: '┼' + }; + } + + if (name === 'norc') { + return { + topBody: '─', + topJoin: '┬', + topLeft: '┌', + topRight: '┐', + + bottomBody: '─', + bottomJoin: '┴', + bottomLeft: '└', + bottomRight: '┘', + + bodyLeft: '│', + bodyRight: '│', + bodyJoin: '│', + + joinBody: '─', + joinLeft: '├', + joinRight: '┤', + joinJoin: '┼' + }; + } + + if (name === 'ramac') { + return { + topBody: '-', + topJoin: '+', + topLeft: '+', + topRight: '+', + + bottomBody: '-', + bottomJoin: '+', + bottomLeft: '+', + bottomRight: '+', + + bodyLeft: '|', + bodyRight: '|', + bodyJoin: '|', + + joinBody: '-', + joinLeft: '|', + joinRight: '|', + joinJoin: '|' + }; + } + + if (name === 'void') { + return { + topBody: '', + topJoin: '', + topLeft: '', + topRight: '', + + bottomBody: '', + bottomJoin: '', + bottomLeft: '', + bottomRight: '', + + bodyLeft: '', + bodyRight: '', + bodyJoin: '', + + joinBody: '', + joinLeft: '', + joinRight: '', + joinJoin: '' + }; + } + + throw new Error('Unknown border template "' + name + '".'); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.map b/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.map new file mode 100644 index 00000000000000..543426cacf0160 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/getBorderCharacters.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/getBorderCharacters.js"],"names":["name","topBody","topJoin","topLeft","topRight","bottomBody","bottomJoin","bottomLeft","bottomRight","bodyLeft","bodyRight","bodyJoin","joinBody","joinLeft","joinRight","joinJoin","Error"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;;;;;;;;;;;;AAmBA;;;;4BAIgBA,I,IAAS;AACvB,MAAIA,IAAI,KAAK,WAAb,EAA0B;AACxB,WAAO;AACLC,MAAAA,OAAO,EAAE,GADJ;AAELC,MAAAA,OAAO,EAAE,GAFJ;AAGLC,MAAAA,OAAO,EAAE,GAHJ;AAILC,MAAAA,QAAQ,EAAE,GAJL;AAMLC,MAAAA,UAAU,EAAE,GANP;AAOLC,MAAAA,UAAU,EAAE,GAPP;AAQLC,MAAAA,UAAU,EAAE,GARP;AASLC,MAAAA,WAAW,EAAE,GATR;AAWLC,MAAAA,QAAQ,EAAE,GAXL;AAYLC,MAAAA,SAAS,EAAE,GAZN;AAaLC,MAAAA,QAAQ,EAAE,GAbL;AAeLC,MAAAA,QAAQ,EAAE,GAfL;AAgBLC,MAAAA,QAAQ,EAAE,GAhBL;AAiBLC,MAAAA,SAAS,EAAE,GAjBN;AAkBLC,MAAAA,QAAQ,EAAE;AAlBL,KAAP;AAoBD;;AAED,MAAIf,IAAI,KAAK,MAAb,EAAqB;AACnB,WAAO;AACLC,MAAAA,OAAO,EAAE,GADJ;AAELC,MAAAA,OAAO,EAAE,GAFJ;AAGLC,MAAAA,OAAO,EAAE,GAHJ;AAILC,MAAAA,QAAQ,EAAE,GAJL;AAMLC,MAAAA,UAAU,EAAE,GANP;AAOLC,MAAAA,UAAU,EAAE,GAPP;AAQLC,MAAAA,UAAU,EAAE,GARP;AASLC,MAAAA,WAAW,EAAE,GATR;AAWLC,MAAAA,QAAQ,EAAE,GAXL;AAYLC,MAAAA,SAAS,EAAE,GAZN;AAaLC,MAAAA,QAAQ,EAAE,GAbL;AAeLC,MAAAA,QAAQ,EAAE,GAfL;AAgBLC,MAAAA,QAAQ,EAAE,GAhBL;AAiBLC,MAAAA,SAAS,EAAE,GAjBN;AAkBLC,MAAAA,QAAQ,EAAE;AAlBL,KAAP;AAoBD;;AAED,MAAIf,IAAI,KAAK,OAAb,EAAsB;AACpB,WAAO;AACLC,MAAAA,OAAO,EAAE,GADJ;AAELC,MAAAA,OAAO,EAAE,GAFJ;AAGLC,MAAAA,OAAO,EAAE,GAHJ;AAILC,MAAAA,QAAQ,EAAE,GAJL;AAMLC,MAAAA,UAAU,EAAE,GANP;AAOLC,MAAAA,UAAU,EAAE,GAPP;AAQLC,MAAAA,UAAU,EAAE,GARP;AASLC,MAAAA,WAAW,EAAE,GATR;AAWLC,MAAAA,QAAQ,EAAE,GAXL;AAYLC,MAAAA,SAAS,EAAE,GAZN;AAaLC,MAAAA,QAAQ,EAAE,GAbL;AAeLC,MAAAA,QAAQ,EAAE,GAfL;AAgBLC,MAAAA,QAAQ,EAAE,GAhBL;AAiBLC,MAAAA,SAAS,EAAE,GAjBN;AAkBLC,MAAAA,QAAQ,EAAE;AAlBL,KAAP;AAoBD;;AAED,MAAIf,IAAI,KAAK,MAAb,EAAqB;AACnB,WAAO;AACLC,MAAAA,OAAO,EAAE,EADJ;AAELC,MAAAA,OAAO,EAAE,EAFJ;AAGLC,MAAAA,OAAO,EAAE,EAHJ;AAILC,MAAAA,QAAQ,EAAE,EAJL;AAMLC,MAAAA,UAAU,EAAE,EANP;AAOLC,MAAAA,UAAU,EAAE,EAPP;AAQLC,MAAAA,UAAU,EAAE,EARP;AASLC,MAAAA,WAAW,EAAE,EATR;AAWLC,MAAAA,QAAQ,EAAE,EAXL;AAYLC,MAAAA,SAAS,EAAE,EAZN;AAaLC,MAAAA,QAAQ,EAAE,EAbL;AAeLC,MAAAA,QAAQ,EAAE,EAfL;AAgBLC,MAAAA,QAAQ,EAAE,EAhBL;AAiBLC,MAAAA,SAAS,EAAE,EAjBN;AAkBLC,MAAAA,QAAQ,EAAE;AAlBL,KAAP;AAoBD;;AAED,QAAM,IAAIC,KAAJ,CAAU,8BAA8BhB,IAA9B,GAAqC,IAA/C,CAAN;AACD,C","sourcesContent":["/* eslint-disable sort-keys */\n\n/**\n * @typedef border\n * @property {string} topBody\n * @property {string} topJoin\n * @property {string} topLeft\n * @property {string} topRight\n * @property {string} bottomBody\n * @property {string} bottomJoin\n * @property {string} bottomLeft\n * @property {string} bottomRight\n * @property {string} bodyLeft\n * @property {string} bodyRight\n * @property {string} bodyJoin\n * @property {string} joinBody\n * @property {string} joinLeft\n * @property {string} joinRight\n * @property {string} joinJoin\n */\n\n/**\n * @param {string} name\n * @returns {border}\n */\nexport default (name) => {\n if (name === 'honeywell') {\n return {\n topBody: '═',\n topJoin: '╤',\n topLeft: '╔',\n topRight: '╗',\n\n bottomBody: '═',\n bottomJoin: '╧',\n bottomLeft: '╚',\n bottomRight: '╝',\n\n bodyLeft: '║',\n bodyRight: '║',\n bodyJoin: '│',\n\n joinBody: '─',\n joinLeft: '╟',\n joinRight: '╢',\n joinJoin: '┼'\n };\n }\n\n if (name === 'norc') {\n return {\n topBody: '─',\n topJoin: '┬',\n topLeft: '┌',\n topRight: '┐',\n\n bottomBody: '─',\n bottomJoin: '┴',\n bottomLeft: '└',\n bottomRight: '┘',\n\n bodyLeft: '│',\n bodyRight: '│',\n bodyJoin: '│',\n\n joinBody: '─',\n joinLeft: '├',\n joinRight: '┤',\n joinJoin: '┼'\n };\n }\n\n if (name === 'ramac') {\n return {\n topBody: '-',\n topJoin: '+',\n topLeft: '+',\n topRight: '+',\n\n bottomBody: '-',\n bottomJoin: '+',\n bottomLeft: '+',\n bottomRight: '+',\n\n bodyLeft: '|',\n bodyRight: '|',\n bodyJoin: '|',\n\n joinBody: '-',\n joinLeft: '|',\n joinRight: '|',\n joinJoin: '|'\n };\n }\n\n if (name === 'void') {\n return {\n topBody: '',\n topJoin: '',\n topLeft: '',\n topRight: '',\n\n bottomBody: '',\n bottomJoin: '',\n bottomLeft: '',\n bottomRight: '',\n\n bodyLeft: '',\n bodyRight: '',\n bodyJoin: '',\n\n joinBody: '',\n joinLeft: '',\n joinRight: '',\n joinJoin: ''\n };\n }\n\n throw new Error('Unknown border template \"' + name + '\".');\n};\n"],"file":"getBorderCharacters.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/index.js b/tools/node_modules/eslint/node_modules/table/dist/index.js index 169eddf080bfb2..1f40e6628d67af 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/index.js +++ b/tools/node_modules/eslint/node_modules/table/dist/index.js @@ -1,24 +1,32 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.getBorderCharacters = exports.createStream = exports.table = undefined; - -var _table = require('./table'); - -var _table2 = _interopRequireDefault(_table); - -var _createStream = require('./createStream'); +Object.defineProperty(exports, "table", { + enumerable: true, + get: function get() { + return _table.default; + } +}); +Object.defineProperty(exports, "createStream", { + enumerable: true, + get: function get() { + return _createStream.default; + } +}); +Object.defineProperty(exports, "getBorderCharacters", { + enumerable: true, + get: function get() { + return _getBorderCharacters.default; + } +}); -var _createStream2 = _interopRequireDefault(_createStream); +var _table = _interopRequireDefault(require("./table")); -var _getBorderCharacters = require('./getBorderCharacters'); +var _createStream = _interopRequireDefault(require("./createStream")); -var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters); +var _getBorderCharacters = _interopRequireDefault(require("./getBorderCharacters")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.table = _table2.default; -exports.createStream = _createStream2.default; -exports.getBorderCharacters = _getBorderCharacters2.default; \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/index.js.flow b/tools/node_modules/eslint/node_modules/table/dist/index.js.flow new file mode 100644 index 00000000000000..76cd8301a0eac3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/index.js.flow @@ -0,0 +1,9 @@ +import table from './table'; +import createStream from './createStream'; +import getBorderCharacters from './getBorderCharacters'; + +export { + table, + createStream, + getBorderCharacters +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/index.js.map b/tools/node_modules/eslint/node_modules/table/dist/index.js.map new file mode 100644 index 00000000000000..2f59e09a1521bf --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA","sourcesContent":["import table from './table';\nimport createStream from './createStream';\nimport getBorderCharacters from './getBorderCharacters';\n\nexport {\n table,\n createStream,\n getBorderCharacters\n};\n"],"file":"index.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js b/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js index 9444ffe0e2bfa6..0ec93b8628161b 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js +++ b/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js @@ -1,24 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); +var _getBorderCharacters = _interopRequireDefault(require("./getBorderCharacters")); -var _getBorderCharacters = require('./getBorderCharacters'); +var _validateConfig = _interopRequireDefault(require("./validateConfig")); -var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters); - -var _validateConfig = require('./validateConfig'); - -var _validateConfig2 = _interopRequireDefault(_validateConfig); - -var _calculateMaximumColumnWidthIndex = require('./calculateMaximumColumnWidthIndex'); - -var _calculateMaximumColumnWidthIndex2 = _interopRequireDefault(_calculateMaximumColumnWidthIndex); +var _calculateMaximumColumnWidthIndex = _interopRequireDefault(require("./calculateMaximumColumnWidthIndex")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -28,12 +21,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Object} border * @returns {Object} */ -const makeBorder = function makeBorder() { - let border = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - return Object.assign({}, (0, _getBorderCharacters2.default)('honeywell'), border); +const makeBorder = (border = {}) => { + return Object.assign({}, (0, _getBorderCharacters.default)('honeywell'), border); }; - /** * Creates a configuration for every column using default * values for the missing configuration properties. @@ -43,14 +33,13 @@ const makeBorder = function makeBorder() { * @param {Object} columnDefault * @returns {Object} */ -const makeColumns = function makeColumns(rows) { - let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let columnDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - const maximumColumnWidthIndex = (0, _calculateMaximumColumnWidthIndex2.default)(rows); - _lodash2.default.times(rows[0].length, index => { - if (_lodash2.default.isUndefined(columns[index])) { +const makeColumns = (rows, columns = {}, columnDefault = {}) => { + const maximumColumnWidthIndex = (0, _calculateMaximumColumnWidthIndex.default)(rows); + + _lodash.default.times(rows[0].length, index => { + if (_lodash.default.isUndefined(columns[index])) { columns[index] = {}; } @@ -66,7 +55,6 @@ const makeColumns = function makeColumns(rows) { return columns; }; - /** * Makes a new configuration object out of the userConfig object * using default values for the missing configuration properties. @@ -76,12 +64,11 @@ const makeColumns = function makeColumns(rows) { * @returns {Object} */ -exports.default = function (rows) { - let userConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - (0, _validateConfig2.default)('config.json', userConfig); +const makeConfig = (rows, userConfig = {}) => { + (0, _validateConfig.default)('config.json', userConfig); - const config = _lodash2.default.cloneDeep(userConfig); + const config = _lodash.default.cloneDeep(userConfig); config.border = makeBorder(config.border); config.columns = makeColumns(rows, config.columns, config.columnDefault); @@ -96,4 +83,8 @@ exports.default = function (rows) { } return config; -}; \ No newline at end of file +}; + +var _default = makeConfig; +exports.default = _default; +//# sourceMappingURL=makeConfig.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.flow b/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.flow new file mode 100644 index 00000000000000..9a0ee0afade046 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.flow @@ -0,0 +1,72 @@ +import _ from 'lodash'; +import getBorderCharacters from './getBorderCharacters'; +import validateConfig from './validateConfig'; +import calculateMaximumColumnWidthIndex from './calculateMaximumColumnWidthIndex'; + +/** + * Merges user provided border characters with the default border ("honeywell") characters. + * + * @param {Object} border + * @returns {Object} + */ +const makeBorder = (border = {}) => { + return Object.assign({}, getBorderCharacters('honeywell'), border); +}; + +/** + * Creates a configuration for every column using default + * values for the missing configuration properties. + * + * @param {Array[]} rows + * @param {Object} columns + * @param {Object} columnDefault + * @returns {Object} + */ +const makeColumns = (rows, columns = {}, columnDefault = {}) => { + const maximumColumnWidthIndex = calculateMaximumColumnWidthIndex(rows); + + _.times(rows[0].length, (index) => { + if (_.isUndefined(columns[index])) { + columns[index] = {}; + } + + columns[index] = Object.assign({ + alignment: 'left', + paddingLeft: 1, + paddingRight: 1, + truncate: Infinity, + width: maximumColumnWidthIndex[index], + wrapWord: false + }, columnDefault, columns[index]); + }); + + return columns; +}; + +/** + * Makes a new configuration object out of the userConfig object + * using default values for the missing configuration properties. + * + * @param {Array[]} rows + * @param {Object} userConfig + * @returns {Object} + */ +export default (rows, userConfig = {}) => { + validateConfig('config.json', userConfig); + + const config = _.cloneDeep(userConfig); + + config.border = makeBorder(config.border); + config.columns = makeColumns(rows, config.columns, config.columnDefault); + + if (!config.drawHorizontalLine) { + /** + * @returns {boolean} + */ + config.drawHorizontalLine = () => { + return true; + }; + } + + return config; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.map b/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.map new file mode 100644 index 00000000000000..91b0bdeb9a826e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/makeConfig.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/makeConfig.js"],"names":["makeBorder","border","Object","assign","makeColumns","rows","columns","columnDefault","maximumColumnWidthIndex","_","times","length","index","isUndefined","alignment","paddingLeft","paddingRight","truncate","Infinity","width","wrapWord","userConfig","config","cloneDeep","drawHorizontalLine"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;AAEA;;;;;;AAMA,MAAMA,UAAU,GAAG,CAACC,MAAM,GAAG,EAAV,KAAiB;AAClC,SAAOC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,kCAAoB,WAApB,CAAlB,EAAoDF,MAApD,CAAP;AACD,CAFD;AAIA;;;;;;;;;;;AASA,MAAMG,WAAW,GAAG,CAACC,IAAD,EAAOC,OAAO,GAAG,EAAjB,EAAqBC,aAAa,GAAG,EAArC,KAA4C;AAC9D,QAAMC,uBAAuB,GAAG,+CAAiCH,IAAjC,CAAhC;;AAEAI,kBAAEC,KAAF,CAAQL,IAAI,CAAC,CAAD,CAAJ,CAAQM,MAAhB,EAAyBC,KAAD,IAAW;AACjC,QAAIH,gBAAEI,WAAF,CAAcP,OAAO,CAACM,KAAD,CAArB,CAAJ,EAAmC;AACjCN,MAAAA,OAAO,CAACM,KAAD,CAAP,GAAiB,EAAjB;AACD;;AAEDN,IAAAA,OAAO,CAACM,KAAD,CAAP,GAAiBV,MAAM,CAACC,MAAP,CAAc;AAC7BW,MAAAA,SAAS,EAAE,MADkB;AAE7BC,MAAAA,WAAW,EAAE,CAFgB;AAG7BC,MAAAA,YAAY,EAAE,CAHe;AAI7BC,MAAAA,QAAQ,EAAEC,QAJmB;AAK7BC,MAAAA,KAAK,EAAEX,uBAAuB,CAACI,KAAD,CALD;AAM7BQ,MAAAA,QAAQ,EAAE;AANmB,KAAd,EAOdb,aAPc,EAOCD,OAAO,CAACM,KAAD,CAPR,CAAjB;AAQD,GAbD;;AAeA,SAAON,OAAP;AACD,CAnBD;AAqBA;;;;;;;;;;oBAQgBD,I,EAAMgB,UAAU,GAAG,E,KAAO;AACxC,+BAAe,aAAf,EAA8BA,UAA9B;;AAEA,QAAMC,MAAM,GAAGb,gBAAEc,SAAF,CAAYF,UAAZ,CAAf;;AAEAC,EAAAA,MAAM,CAACrB,MAAP,GAAgBD,UAAU,CAACsB,MAAM,CAACrB,MAAR,CAA1B;AACAqB,EAAAA,MAAM,CAAChB,OAAP,GAAiBF,WAAW,CAACC,IAAD,EAAOiB,MAAM,CAAChB,OAAd,EAAuBgB,MAAM,CAACf,aAA9B,CAA5B;;AAEA,MAAI,CAACe,MAAM,CAACE,kBAAZ,EAAgC;AAC9B;;;AAGAF,IAAAA,MAAM,CAACE,kBAAP,GAA4B,MAAM;AAChC,aAAO,IAAP;AACD,KAFD;AAGD;;AAED,SAAOF,MAAP;AACD,C","sourcesContent":["import _ from 'lodash';\nimport getBorderCharacters from './getBorderCharacters';\nimport validateConfig from './validateConfig';\nimport calculateMaximumColumnWidthIndex from './calculateMaximumColumnWidthIndex';\n\n/**\n * Merges user provided border characters with the default border (\"honeywell\") characters.\n *\n * @param {Object} border\n * @returns {Object}\n */\nconst makeBorder = (border = {}) => {\n return Object.assign({}, getBorderCharacters('honeywell'), border);\n};\n\n/**\n * Creates a configuration for every column using default\n * values for the missing configuration properties.\n *\n * @param {Array[]} rows\n * @param {Object} columns\n * @param {Object} columnDefault\n * @returns {Object}\n */\nconst makeColumns = (rows, columns = {}, columnDefault = {}) => {\n const maximumColumnWidthIndex = calculateMaximumColumnWidthIndex(rows);\n\n _.times(rows[0].length, (index) => {\n if (_.isUndefined(columns[index])) {\n columns[index] = {};\n }\n\n columns[index] = Object.assign({\n alignment: 'left',\n paddingLeft: 1,\n paddingRight: 1,\n truncate: Infinity,\n width: maximumColumnWidthIndex[index],\n wrapWord: false\n }, columnDefault, columns[index]);\n });\n\n return columns;\n};\n\n/**\n * Makes a new configuration object out of the userConfig object\n * using default values for the missing configuration properties.\n *\n * @param {Array[]} rows\n * @param {Object} userConfig\n * @returns {Object}\n */\nexport default (rows, userConfig = {}) => {\n validateConfig('config.json', userConfig);\n\n const config = _.cloneDeep(userConfig);\n\n config.border = makeBorder(config.border);\n config.columns = makeColumns(rows, config.columns, config.columnDefault);\n\n if (!config.drawHorizontalLine) {\n /**\n * @returns {boolean}\n */\n config.drawHorizontalLine = () => {\n return true;\n };\n }\n\n return config;\n};\n"],"file":"makeConfig.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js b/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js index 479de35a7c9777..131c200c01e712 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js +++ b/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js @@ -1,20 +1,15 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); +var _getBorderCharacters = _interopRequireDefault(require("./getBorderCharacters")); -var _getBorderCharacters = require('./getBorderCharacters'); - -var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters); - -var _validateConfig = require('./validateConfig'); - -var _validateConfig2 = _interopRequireDefault(_validateConfig); +var _validateConfig = _interopRequireDefault(require("./validateConfig")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24,12 +19,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Object} border * @returns {Object} */ -const makeBorder = function makeBorder() { - let border = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - return Object.assign({}, (0, _getBorderCharacters2.default)('honeywell'), border); +const makeBorder = (border = {}) => { + return Object.assign({}, (0, _getBorderCharacters.default)('honeywell'), border); }; - /** * Creates a configuration for every column using default * values for the missing configuration properties. @@ -39,12 +31,11 @@ const makeBorder = function makeBorder() { * @param {Object} columnDefault * @returns {Object} */ -const makeColumns = function makeColumns(columnCount) { - let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let columnDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - _lodash2.default.times(columnCount, index => { - if (_lodash2.default.isUndefined(columns[index])) { + +const makeColumns = (columnCount, columns = {}, columnDefault = {}) => { + _lodash.default.times(columnCount, index => { + if (_lodash.default.isUndefined(columns[index])) { columns[index] = {}; } @@ -59,7 +50,6 @@ const makeColumns = function makeColumns(columnCount) { return columns; }; - /** * @typedef {Object} columnConfig * @property {string} alignment @@ -85,12 +75,11 @@ const makeColumns = function makeColumns(columnCount) { * @returns {Object} */ -exports.default = function () { - let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - (0, _validateConfig2.default)('streamConfig.json', userConfig); +const makeStreamConfig = (userConfig = {}) => { + (0, _validateConfig.default)('streamConfig.json', userConfig); - const config = _lodash2.default.cloneDeep(userConfig); + const config = _lodash.default.cloneDeep(userConfig); if (!config.columnDefault || !config.columnDefault.width) { throw new Error('Must provide config.columnDefault.width when creating a stream.'); @@ -102,6 +91,9 @@ exports.default = function () { config.border = makeBorder(config.border); config.columns = makeColumns(config.columnCount, config.columns, config.columnDefault); - return config; -}; \ No newline at end of file +}; + +var _default = makeStreamConfig; +exports.default = _default; +//# sourceMappingURL=makeStreamConfig.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.flow b/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.flow new file mode 100644 index 00000000000000..884625a53bb3a0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.flow @@ -0,0 +1,83 @@ +import _ from 'lodash'; +import getBorderCharacters from './getBorderCharacters'; +import validateConfig from './validateConfig'; + +/** + * Merges user provided border characters with the default border ("honeywell") characters. + * + * @param {Object} border + * @returns {Object} + */ +const makeBorder = (border = {}) => { + return Object.assign({}, getBorderCharacters('honeywell'), border); +}; + +/** + * Creates a configuration for every column using default + * values for the missing configuration properties. + * + * @param {number} columnCount + * @param {Object} columns + * @param {Object} columnDefault + * @returns {Object} + */ +const makeColumns = (columnCount, columns = {}, columnDefault = {}) => { + _.times(columnCount, (index) => { + if (_.isUndefined(columns[index])) { + columns[index] = {}; + } + + columns[index] = Object.assign({ + alignment: 'left', + paddingLeft: 1, + paddingRight: 1, + truncate: Infinity, + wrapWord: false + }, columnDefault, columns[index]); + }); + + return columns; +}; + +/** + * @typedef {Object} columnConfig + * @property {string} alignment + * @property {number} width + * @property {number} truncate + * @property {number} paddingLeft + * @property {number} paddingRight + */ + +/** + * @typedef {Object} streamConfig + * @property {columnConfig} columnDefault + * @property {Object} border + * @property {columnConfig[]} + * @property {number} columnCount Number of columns in the table (required). + */ + +/** + * Makes a new configuration object out of the userConfig object + * using default values for the missing configuration properties. + * + * @param {streamConfig} userConfig + * @returns {Object} + */ +export default (userConfig = {}) => { + validateConfig('streamConfig.json', userConfig); + + const config = _.cloneDeep(userConfig); + + if (!config.columnDefault || !config.columnDefault.width) { + throw new Error('Must provide config.columnDefault.width when creating a stream.'); + } + + if (!config.columnCount) { + throw new Error('Must provide config.columnCount.'); + } + + config.border = makeBorder(config.border); + config.columns = makeColumns(config.columnCount, config.columns, config.columnDefault); + + return config; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.map b/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.map new file mode 100644 index 00000000000000..a0a52ddae04ae7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/makeStreamConfig.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/makeStreamConfig.js"],"names":["makeBorder","border","Object","assign","makeColumns","columnCount","columns","columnDefault","_","times","index","isUndefined","alignment","paddingLeft","paddingRight","truncate","Infinity","wrapWord","userConfig","config","cloneDeep","width","Error"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAEA;;;;;;AAMA,MAAMA,UAAU,GAAG,CAACC,MAAM,GAAG,EAAV,KAAiB;AAClC,SAAOC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,kCAAoB,WAApB,CAAlB,EAAoDF,MAApD,CAAP;AACD,CAFD;AAIA;;;;;;;;;;;AASA,MAAMG,WAAW,GAAG,CAACC,WAAD,EAAcC,OAAO,GAAG,EAAxB,EAA4BC,aAAa,GAAG,EAA5C,KAAmD;AACrEC,kBAAEC,KAAF,CAAQJ,WAAR,EAAsBK,KAAD,IAAW;AAC9B,QAAIF,gBAAEG,WAAF,CAAcL,OAAO,CAACI,KAAD,CAArB,CAAJ,EAAmC;AACjCJ,MAAAA,OAAO,CAACI,KAAD,CAAP,GAAiB,EAAjB;AACD;;AAEDJ,IAAAA,OAAO,CAACI,KAAD,CAAP,GAAiBR,MAAM,CAACC,MAAP,CAAc;AAC7BS,MAAAA,SAAS,EAAE,MADkB;AAE7BC,MAAAA,WAAW,EAAE,CAFgB;AAG7BC,MAAAA,YAAY,EAAE,CAHe;AAI7BC,MAAAA,QAAQ,EAAEC,QAJmB;AAK7BC,MAAAA,QAAQ,EAAE;AALmB,KAAd,EAMdV,aANc,EAMCD,OAAO,CAACI,KAAD,CANR,CAAjB;AAOD,GAZD;;AAcA,SAAOJ,OAAP;AACD,CAhBD;AAkBA;;;;;;;;;AASA;;;;;;;;AAQA;;;;;;;;;0BAOgBY,UAAU,GAAG,E,KAAO;AAClC,+BAAe,mBAAf,EAAoCA,UAApC;;AAEA,QAAMC,MAAM,GAAGX,gBAAEY,SAAF,CAAYF,UAAZ,CAAf;;AAEA,MAAI,CAACC,MAAM,CAACZ,aAAR,IAAyB,CAACY,MAAM,CAACZ,aAAP,CAAqBc,KAAnD,EAA0D;AACxD,UAAM,IAAIC,KAAJ,CAAU,iEAAV,CAAN;AACD;;AAED,MAAI,CAACH,MAAM,CAACd,WAAZ,EAAyB;AACvB,UAAM,IAAIiB,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAEDH,EAAAA,MAAM,CAAClB,MAAP,GAAgBD,UAAU,CAACmB,MAAM,CAAClB,MAAR,CAA1B;AACAkB,EAAAA,MAAM,CAACb,OAAP,GAAiBF,WAAW,CAACe,MAAM,CAACd,WAAR,EAAqBc,MAAM,CAACb,OAA5B,EAAqCa,MAAM,CAACZ,aAA5C,CAA5B;AAEA,SAAOY,MAAP;AACD,C","sourcesContent":["import _ from 'lodash';\nimport getBorderCharacters from './getBorderCharacters';\nimport validateConfig from './validateConfig';\n\n/**\n * Merges user provided border characters with the default border (\"honeywell\") characters.\n *\n * @param {Object} border\n * @returns {Object}\n */\nconst makeBorder = (border = {}) => {\n return Object.assign({}, getBorderCharacters('honeywell'), border);\n};\n\n/**\n * Creates a configuration for every column using default\n * values for the missing configuration properties.\n *\n * @param {number} columnCount\n * @param {Object} columns\n * @param {Object} columnDefault\n * @returns {Object}\n */\nconst makeColumns = (columnCount, columns = {}, columnDefault = {}) => {\n _.times(columnCount, (index) => {\n if (_.isUndefined(columns[index])) {\n columns[index] = {};\n }\n\n columns[index] = Object.assign({\n alignment: 'left',\n paddingLeft: 1,\n paddingRight: 1,\n truncate: Infinity,\n wrapWord: false\n }, columnDefault, columns[index]);\n });\n\n return columns;\n};\n\n/**\n * @typedef {Object} columnConfig\n * @property {string} alignment\n * @property {number} width\n * @property {number} truncate\n * @property {number} paddingLeft\n * @property {number} paddingRight\n */\n\n/**\n * @typedef {Object} streamConfig\n * @property {columnConfig} columnDefault\n * @property {Object} border\n * @property {columnConfig[]}\n * @property {number} columnCount Number of columns in the table (required).\n */\n\n/**\n * Makes a new configuration object out of the userConfig object\n * using default values for the missing configuration properties.\n *\n * @param {streamConfig} userConfig\n * @returns {Object}\n */\nexport default (userConfig = {}) => {\n validateConfig('streamConfig.json', userConfig);\n\n const config = _.cloneDeep(userConfig);\n\n if (!config.columnDefault || !config.columnDefault.width) {\n throw new Error('Must provide config.columnDefault.width when creating a stream.');\n }\n\n if (!config.columnCount) {\n throw new Error('Must provide config.columnCount.');\n }\n\n config.border = makeBorder(config.border);\n config.columns = makeColumns(config.columnCount, config.columns, config.columnDefault);\n\n return config;\n};\n"],"file":"makeStreamConfig.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js b/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js index be0aae4e98ad42..8a7a16e2ce2f22 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js +++ b/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js @@ -1,20 +1,15 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); +var _lodash = _interopRequireDefault(require("lodash")); -var _lodash2 = _interopRequireDefault(_lodash); +var _wrapString = _interopRequireDefault(require("./wrapString")); -var _wrapString = require('./wrapString'); - -var _wrapString2 = _interopRequireDefault(_wrapString); - -var _wrapWord = require('./wrapWord'); - -var _wrapWord2 = _interopRequireDefault(_wrapWord); +var _wrapWord = _interopRequireDefault(require("./wrapWord")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24,34 +19,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Object} config * @returns {Array} */ -exports.default = (unmappedRows, rowHeightIndex, config) => { +const mapDataUsingRowHeightIndex = (unmappedRows, rowHeightIndex, config) => { const tableWidth = unmappedRows[0].length; - const mappedRows = unmappedRows.map((cells, index0) => { - const rowHeight = _lodash2.default.times(rowHeightIndex[index0], () => { - return Array(tableWidth).fill(''); - }); - - // rowHeight + const rowHeight = _lodash.default.times(rowHeightIndex[index0], () => { + return new Array(tableWidth).fill(''); + }); // rowHeight // [{row index within rowSaw; index2}] // [{cell index within a virtual row; index1}] + cells.forEach((value, index1) => { let chunkedValue; if (config.columns[index1].wrapWord) { - chunkedValue = (0, _wrapWord2.default)(value, config.columns[index1].width); + chunkedValue = (0, _wrapWord.default)(value, config.columns[index1].width); } else { - chunkedValue = (0, _wrapString2.default)(value, config.columns[index1].width); + chunkedValue = (0, _wrapString.default)(value, config.columns[index1].width); } chunkedValue.forEach((part, index2) => { rowHeight[index2][index1] = part; }); }); - return rowHeight; }); + return _lodash.default.flatten(mappedRows); +}; - return _lodash2.default.flatten(mappedRows); -}; \ No newline at end of file +var _default = mapDataUsingRowHeightIndex; +exports.default = _default; +//# sourceMappingURL=mapDataUsingRowHeightIndex.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.flow b/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.flow new file mode 100644 index 00000000000000..89f1869b5daa8a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.flow @@ -0,0 +1,41 @@ +import _ from 'lodash'; +import wrapString from './wrapString'; +import wrapWord from './wrapWord'; + +/** + * @param {Array} unmappedRows + * @param {number[]} rowHeightIndex + * @param {Object} config + * @returns {Array} + */ +export default (unmappedRows, rowHeightIndex, config) => { + const tableWidth = unmappedRows[0].length; + + const mappedRows = unmappedRows.map((cells, index0) => { + const rowHeight = _.times(rowHeightIndex[index0], () => { + return new Array(tableWidth).fill(''); + }); + + // rowHeight + // [{row index within rowSaw; index2}] + // [{cell index within a virtual row; index1}] + + cells.forEach((value, index1) => { + let chunkedValue; + + if (config.columns[index1].wrapWord) { + chunkedValue = wrapWord(value, config.columns[index1].width); + } else { + chunkedValue = wrapString(value, config.columns[index1].width); + } + + chunkedValue.forEach((part, index2) => { + rowHeight[index2][index1] = part; + }); + }); + + return rowHeight; + }); + + return _.flatten(mappedRows); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.map b/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.map new file mode 100644 index 00000000000000..3c1cd9844899ed --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/mapDataUsingRowHeightIndex.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/mapDataUsingRowHeightIndex.js"],"names":["unmappedRows","rowHeightIndex","config","tableWidth","length","mappedRows","map","cells","index0","rowHeight","_","times","Array","fill","forEach","value","index1","chunkedValue","columns","wrapWord","width","part","index2","flatten"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAEA;;;;;;oCAMgBA,Y,EAAcC,c,EAAgBC,M,KAAW;AACvD,QAAMC,UAAU,GAAGH,YAAY,CAAC,CAAD,CAAZ,CAAgBI,MAAnC;AAEA,QAAMC,UAAU,GAAGL,YAAY,CAACM,GAAb,CAAiB,CAACC,KAAD,EAAQC,MAAR,KAAmB;AACrD,UAAMC,SAAS,GAAGC,gBAAEC,KAAF,CAAQV,cAAc,CAACO,MAAD,CAAtB,EAAgC,MAAM;AACtD,aAAO,IAAII,KAAJ,CAAUT,UAAV,EAAsBU,IAAtB,CAA2B,EAA3B,CAAP;AACD,KAFiB,CAAlB,CADqD,CAKrD;AACA;AACA;;;AAEAN,IAAAA,KAAK,CAACO,OAAN,CAAc,CAACC,KAAD,EAAQC,MAAR,KAAmB;AAC/B,UAAIC,YAAJ;;AAEA,UAAIf,MAAM,CAACgB,OAAP,CAAeF,MAAf,EAAuBG,QAA3B,EAAqC;AACnCF,QAAAA,YAAY,GAAG,uBAASF,KAAT,EAAgBb,MAAM,CAACgB,OAAP,CAAeF,MAAf,EAAuBI,KAAvC,CAAf;AACD,OAFD,MAEO;AACLH,QAAAA,YAAY,GAAG,yBAAWF,KAAX,EAAkBb,MAAM,CAACgB,OAAP,CAAeF,MAAf,EAAuBI,KAAzC,CAAf;AACD;;AAEDH,MAAAA,YAAY,CAACH,OAAb,CAAqB,CAACO,IAAD,EAAOC,MAAP,KAAkB;AACrCb,QAAAA,SAAS,CAACa,MAAD,CAAT,CAAkBN,MAAlB,IAA4BK,IAA5B;AACD,OAFD;AAGD,KAZD;AAcA,WAAOZ,SAAP;AACD,GAxBkB,CAAnB;AA0BA,SAAOC,gBAAEa,OAAF,CAAUlB,UAAV,CAAP;AACD,C","sourcesContent":["import _ from 'lodash';\nimport wrapString from './wrapString';\nimport wrapWord from './wrapWord';\n\n/**\n * @param {Array} unmappedRows\n * @param {number[]} rowHeightIndex\n * @param {Object} config\n * @returns {Array}\n */\nexport default (unmappedRows, rowHeightIndex, config) => {\n const tableWidth = unmappedRows[0].length;\n\n const mappedRows = unmappedRows.map((cells, index0) => {\n const rowHeight = _.times(rowHeightIndex[index0], () => {\n return new Array(tableWidth).fill('');\n });\n\n // rowHeight\n // [{row index within rowSaw; index2}]\n // [{cell index within a virtual row; index1}]\n\n cells.forEach((value, index1) => {\n let chunkedValue;\n\n if (config.columns[index1].wrapWord) {\n chunkedValue = wrapWord(value, config.columns[index1].width);\n } else {\n chunkedValue = wrapString(value, config.columns[index1].width);\n }\n\n chunkedValue.forEach((part, index2) => {\n rowHeight[index2][index1] = part;\n });\n });\n\n return rowHeight;\n });\n\n return _.flatten(mappedRows);\n};\n"],"file":"mapDataUsingRowHeightIndex.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/padTableData.js b/tools/node_modules/eslint/node_modules/table/dist/padTableData.js index a78ce49bb1b624..81bd5f5d4ea03c 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/padTableData.js +++ b/tools/node_modules/eslint/node_modules/table/dist/padTableData.js @@ -1,20 +1,24 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; /** * @param {table~row[]} rows * @param {Object} config * @returns {table~row[]} */ -exports.default = (rows, config) => { +const padTableData = (rows, config) => { return rows.map(cells => { return cells.map((value, index1) => { const column = config.columns[index1]; - return ' '.repeat(column.paddingLeft) + value + ' '.repeat(column.paddingRight); }); }); -}; \ No newline at end of file +}; + +var _default = padTableData; +exports.default = _default; +//# sourceMappingURL=padTableData.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/padTableData.js.flow b/tools/node_modules/eslint/node_modules/table/dist/padTableData.js.flow new file mode 100644 index 00000000000000..f23dc021076099 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/padTableData.js.flow @@ -0,0 +1,14 @@ +/** + * @param {table~row[]} rows + * @param {Object} config + * @returns {table~row[]} + */ +export default (rows, config) => { + return rows.map((cells) => { + return cells.map((value, index1) => { + const column = config.columns[index1]; + + return ' '.repeat(column.paddingLeft) + value + ' '.repeat(column.paddingRight); + }); + }); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/padTableData.js.map b/tools/node_modules/eslint/node_modules/table/dist/padTableData.js.map new file mode 100644 index 00000000000000..783f9cc2fb96da --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/padTableData.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/padTableData.js"],"names":["rows","config","map","cells","value","index1","column","columns","repeat","paddingLeft","paddingRight"],"mappings":";;;;;;;AAAA;;;;;sBAKgBA,I,EAAMC,M,KAAW;AAC/B,SAAOD,IAAI,CAACE,GAAL,CAAUC,KAAD,IAAW;AACzB,WAAOA,KAAK,CAACD,GAAN,CAAU,CAACE,KAAD,EAAQC,MAAR,KAAmB;AAClC,YAAMC,MAAM,GAAGL,MAAM,CAACM,OAAP,CAAeF,MAAf,CAAf;AAEA,aAAO,IAAIG,MAAJ,CAAWF,MAAM,CAACG,WAAlB,IAAiCL,KAAjC,GAAyC,IAAII,MAAJ,CAAWF,MAAM,CAACI,YAAlB,CAAhD;AACD,KAJM,CAAP;AAKD,GANM,CAAP;AAOD,C","sourcesContent":["/**\n * @param {table~row[]} rows\n * @param {Object} config\n * @returns {table~row[]}\n */\nexport default (rows, config) => {\n return rows.map((cells) => {\n return cells.map((value, index1) => {\n const column = config.columns[index1];\n\n return ' '.repeat(column.paddingLeft) + value + ' '.repeat(column.paddingRight);\n });\n });\n};\n"],"file":"padTableData.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/schemas/config.json b/tools/node_modules/eslint/node_modules/table/dist/schemas/config.json index 36074181494ce1..1a4a9981833029 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/schemas/config.json +++ b/tools/node_modules/eslint/node_modules/table/dist/schemas/config.json @@ -1,6 +1,6 @@ { "$id": "config.json", - "$schema": "http://json-schema.org/draft-06/schema#", + "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "border": { diff --git a/tools/node_modules/eslint/node_modules/table/dist/schemas/streamConfig.json b/tools/node_modules/eslint/node_modules/table/dist/schemas/streamConfig.json index d8402a6248e2bd..35199844fd433e 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/schemas/streamConfig.json +++ b/tools/node_modules/eslint/node_modules/table/dist/schemas/streamConfig.json @@ -1,6 +1,6 @@ { "$id": "streamConfig.json", - "$schema": "http://json-schema.org/draft-06/schema#", + "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "border": { diff --git a/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js b/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js index 46a8b94a397633..0217e3b7b1f376 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js +++ b/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js @@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; /** * Casts all cell values to a string. @@ -10,8 +11,12 @@ Object.defineProperty(exports, "__esModule", { * @param {table~row[]} rows * @returns {table~row[]} */ -exports.default = rows => { +const stringifyTableData = rows => { return rows.map(cells => { return cells.map(String); }); -}; \ No newline at end of file +}; + +var _default = stringifyTableData; +exports.default = _default; +//# sourceMappingURL=stringifyTableData.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.flow b/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.flow new file mode 100644 index 00000000000000..a4dffac13d9be6 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.flow @@ -0,0 +1,11 @@ +/** + * Casts all cell values to a string. + * + * @param {table~row[]} rows + * @returns {table~row[]} + */ +export default (rows) => { + return rows.map((cells) => { + return cells.map(String); + }); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.map b/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.map new file mode 100644 index 00000000000000..6cbe5a71f3c427 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/stringifyTableData.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/stringifyTableData.js"],"names":["rows","map","cells","String"],"mappings":";;;;;;;AAAA;;;;;;2BAMgBA,I,IAAS;AACvB,SAAOA,IAAI,CAACC,GAAL,CAAUC,KAAD,IAAW;AACzB,WAAOA,KAAK,CAACD,GAAN,CAAUE,MAAV,CAAP;AACD,GAFM,CAAP;AAGD,C","sourcesContent":["/**\n * Casts all cell values to a string.\n *\n * @param {table~row[]} rows\n * @returns {table~row[]}\n */\nexport default (rows) => {\n return rows.map((cells) => {\n return cells.map(String);\n });\n};\n"],"file":"stringifyTableData.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/table.js b/tools/node_modules/eslint/node_modules/table/dist/table.js index fe8c3cfeb1b750..b4aac0167e3deb 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/table.js +++ b/tools/node_modules/eslint/node_modules/table/dist/table.js @@ -1,48 +1,29 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _drawTable = require('./drawTable'); +var _drawTable = _interopRequireDefault(require("./drawTable")); -var _drawTable2 = _interopRequireDefault(_drawTable); +var _calculateCellWidthIndex = _interopRequireDefault(require("./calculateCellWidthIndex")); -var _calculateCellWidthIndex = require('./calculateCellWidthIndex'); +var _makeConfig = _interopRequireDefault(require("./makeConfig")); -var _calculateCellWidthIndex2 = _interopRequireDefault(_calculateCellWidthIndex); +var _calculateRowHeightIndex = _interopRequireDefault(require("./calculateRowHeightIndex")); -var _makeConfig = require('./makeConfig'); +var _mapDataUsingRowHeightIndex = _interopRequireDefault(require("./mapDataUsingRowHeightIndex")); -var _makeConfig2 = _interopRequireDefault(_makeConfig); +var _alignTableData = _interopRequireDefault(require("./alignTableData")); -var _calculateRowHeightIndex = require('./calculateRowHeightIndex'); +var _padTableData = _interopRequireDefault(require("./padTableData")); -var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex); +var _validateTableData = _interopRequireDefault(require("./validateTableData")); -var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex'); +var _stringifyTableData = _interopRequireDefault(require("./stringifyTableData")); -var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex); - -var _alignTableData = require('./alignTableData'); - -var _alignTableData2 = _interopRequireDefault(_alignTableData); - -var _padTableData = require('./padTableData'); - -var _padTableData2 = _interopRequireDefault(_padTableData); - -var _validateTableData = require('./validateTableData'); - -var _validateTableData2 = _interopRequireDefault(_validateTableData); - -var _stringifyTableData = require('./stringifyTableData'); - -var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData); - -var _truncateTableData = require('./truncateTableData'); - -var _truncateTableData2 = _interopRequireDefault(_truncateTableData); +var _truncateTableData = _interopRequireDefault(require("./truncateTableData")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -59,6 +40,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left). * @property {number} width Column width (default: auto). * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity). + * @property {boolean} wrapWord When true the text is broken at the nearest space or one of the special characters * @property {number} paddingLeft Cell content padding width left (default: 1). * @property {number} paddingRight Cell content padding width right (default: 1). */ @@ -108,26 +90,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {table~config} userConfig * @returns {string} */ -exports.default = function (data) { - let userConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - +const table = (data, userConfig = {}) => { let rows; - - (0, _validateTableData2.default)(data); - - rows = (0, _stringifyTableData2.default)(data); - - const config = (0, _makeConfig2.default)(rows, userConfig); - - rows = (0, _truncateTableData2.default)(data, config); - - const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config); - - rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config); - rows = (0, _alignTableData2.default)(rows, config); - rows = (0, _padTableData2.default)(rows, config); - - const cellWidthIndex = (0, _calculateCellWidthIndex2.default)(rows[0]); - - return (0, _drawTable2.default)(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine); -}; \ No newline at end of file + (0, _validateTableData.default)(data); + rows = (0, _stringifyTableData.default)(data); + const config = (0, _makeConfig.default)(rows, userConfig); + rows = (0, _truncateTableData.default)(data, config); + const rowHeightIndex = (0, _calculateRowHeightIndex.default)(rows, config); + rows = (0, _mapDataUsingRowHeightIndex.default)(rows, rowHeightIndex, config); + rows = (0, _alignTableData.default)(rows, config); + rows = (0, _padTableData.default)(rows, config); + const cellWidthIndex = (0, _calculateCellWidthIndex.default)(rows[0]); + return (0, _drawTable.default)(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine); +}; + +var _default = table; +exports.default = _default; +//# sourceMappingURL=table.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/table.js.flow b/tools/node_modules/eslint/node_modules/table/dist/table.js.flow new file mode 100644 index 00000000000000..1b68a51a29488e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/table.js.flow @@ -0,0 +1,95 @@ +import drawTable from './drawTable'; +import calculateCellWidthIndex from './calculateCellWidthIndex'; +import makeConfig from './makeConfig'; +import calculateRowHeightIndex from './calculateRowHeightIndex'; +import mapDataUsingRowHeightIndex from './mapDataUsingRowHeightIndex'; +import alignTableData from './alignTableData'; +import padTableData from './padTableData'; +import validateTableData from './validateTableData'; +import stringifyTableData from './stringifyTableData'; +import truncateTableData from './truncateTableData'; + +/** + * @typedef {string} table~cell + */ + +/** + * @typedef {table~cell[]} table~row + */ + +/** + * @typedef {Object} table~columns + * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left). + * @property {number} width Column width (default: auto). + * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity). + * @property {boolean} wrapWord When true the text is broken at the nearest space or one of the special characters + * @property {number} paddingLeft Cell content padding width left (default: 1). + * @property {number} paddingRight Cell content padding width right (default: 1). + */ + +/** + * @typedef {Object} table~border + * @property {string} topBody + * @property {string} topJoin + * @property {string} topLeft + * @property {string} topRight + * @property {string} bottomBody + * @property {string} bottomJoin + * @property {string} bottomLeft + * @property {string} bottomRight + * @property {string} bodyLeft + * @property {string} bodyRight + * @property {string} bodyJoin + * @property {string} joinBody + * @property {string} joinLeft + * @property {string} joinRight + * @property {string} joinJoin + */ + +/** + * Used to tell whether to draw a horizontal line. + * This callback is called for each non-content line of the table. + * The default behavior is to always return true. + * + * @typedef {Function} drawHorizontalLine + * @param {number} index + * @param {number} size + * @returns {boolean} + */ + +/** + * @typedef {Object} table~config + * @property {table~border} border + * @property {table~columns[]} columns Column specific configuration. + * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values. + * @property {table~drawHorizontalLine} drawHorizontalLine + */ + +/** + * Generates a text table. + * + * @param {table~row[]} data + * @param {table~config} userConfig + * @returns {string} + */ +export default (data, userConfig = {}) => { + let rows; + + validateTableData(data); + + rows = stringifyTableData(data); + + const config = makeConfig(rows, userConfig); + + rows = truncateTableData(data, config); + + const rowHeightIndex = calculateRowHeightIndex(rows, config); + + rows = mapDataUsingRowHeightIndex(rows, rowHeightIndex, config); + rows = alignTableData(rows, config); + rows = padTableData(rows, config); + + const cellWidthIndex = calculateCellWidthIndex(rows[0]); + + return drawTable(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/table.js.map b/tools/node_modules/eslint/node_modules/table/dist/table.js.map new file mode 100644 index 00000000000000..5268d98da504b3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/table.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/table.js"],"names":["data","userConfig","rows","config","rowHeightIndex","cellWidthIndex","border","drawHorizontalLine"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA;;;;AAIA;;;;AAIA;;;;;;;;;;AAUA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;AAWA;;;;;;;;AAQA;;;;;;;eAOgBA,I,EAAMC,UAAU,GAAG,E,KAAO;AACxC,MAAIC,IAAJ;AAEA,kCAAkBF,IAAlB;AAEAE,EAAAA,IAAI,GAAG,iCAAmBF,IAAnB,CAAP;AAEA,QAAMG,MAAM,GAAG,yBAAWD,IAAX,EAAiBD,UAAjB,CAAf;AAEAC,EAAAA,IAAI,GAAG,gCAAkBF,IAAlB,EAAwBG,MAAxB,CAAP;AAEA,QAAMC,cAAc,GAAG,sCAAwBF,IAAxB,EAA8BC,MAA9B,CAAvB;AAEAD,EAAAA,IAAI,GAAG,yCAA2BA,IAA3B,EAAiCE,cAAjC,EAAiDD,MAAjD,CAAP;AACAD,EAAAA,IAAI,GAAG,6BAAeA,IAAf,EAAqBC,MAArB,CAAP;AACAD,EAAAA,IAAI,GAAG,2BAAaA,IAAb,EAAmBC,MAAnB,CAAP;AAEA,QAAME,cAAc,GAAG,sCAAwBH,IAAI,CAAC,CAAD,CAA5B,CAAvB;AAEA,SAAO,wBAAUA,IAAV,EAAgBC,MAAM,CAACG,MAAvB,EAA+BD,cAA/B,EAA+CD,cAA/C,EAA+DD,MAAM,CAACI,kBAAtE,CAAP;AACD,C","sourcesContent":["import drawTable from './drawTable';\nimport calculateCellWidthIndex from './calculateCellWidthIndex';\nimport makeConfig from './makeConfig';\nimport calculateRowHeightIndex from './calculateRowHeightIndex';\nimport mapDataUsingRowHeightIndex from './mapDataUsingRowHeightIndex';\nimport alignTableData from './alignTableData';\nimport padTableData from './padTableData';\nimport validateTableData from './validateTableData';\nimport stringifyTableData from './stringifyTableData';\nimport truncateTableData from './truncateTableData';\n\n/**\n * @typedef {string} table~cell\n */\n\n/**\n * @typedef {table~cell[]} table~row\n */\n\n/**\n * @typedef {Object} table~columns\n * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left).\n * @property {number} width Column width (default: auto).\n * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity).\n * @property {boolean} wrapWord When true the text is broken at the nearest space or one of the special characters\n * @property {number} paddingLeft Cell content padding width left (default: 1).\n * @property {number} paddingRight Cell content padding width right (default: 1).\n */\n\n/**\n * @typedef {Object} table~border\n * @property {string} topBody\n * @property {string} topJoin\n * @property {string} topLeft\n * @property {string} topRight\n * @property {string} bottomBody\n * @property {string} bottomJoin\n * @property {string} bottomLeft\n * @property {string} bottomRight\n * @property {string} bodyLeft\n * @property {string} bodyRight\n * @property {string} bodyJoin\n * @property {string} joinBody\n * @property {string} joinLeft\n * @property {string} joinRight\n * @property {string} joinJoin\n */\n\n/**\n * Used to tell whether to draw a horizontal line.\n * This callback is called for each non-content line of the table.\n * The default behavior is to always return true.\n *\n * @typedef {Function} drawHorizontalLine\n * @param {number} index\n * @param {number} size\n * @returns {boolean}\n */\n\n/**\n * @typedef {Object} table~config\n * @property {table~border} border\n * @property {table~columns[]} columns Column specific configuration.\n * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values.\n * @property {table~drawHorizontalLine} drawHorizontalLine\n */\n\n/**\n * Generates a text table.\n *\n * @param {table~row[]} data\n * @param {table~config} userConfig\n * @returns {string}\n */\nexport default (data, userConfig = {}) => {\n let rows;\n\n validateTableData(data);\n\n rows = stringifyTableData(data);\n\n const config = makeConfig(rows, userConfig);\n\n rows = truncateTableData(data, config);\n\n const rowHeightIndex = calculateRowHeightIndex(rows, config);\n\n rows = mapDataUsingRowHeightIndex(rows, rowHeightIndex, config);\n rows = alignTableData(rows, config);\n rows = padTableData(rows, config);\n\n const cellWidthIndex = calculateCellWidthIndex(rows[0]);\n\n return drawTable(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine);\n};\n"],"file":"table.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js b/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js index 748b41cca7be17..210a124bcbffe2 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js +++ b/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js @@ -1,12 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); +var _lodash = _interopRequireDefault(require("lodash")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,12 +15,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {Object} config * @returns {table~row[]} */ -exports.default = (rows, config) => { +const truncateTableData = (rows, config) => { return rows.map(cells => { return cells.map((content, index) => { - return _lodash2.default.truncate(content, { + return _lodash.default.truncate(content, { length: config.columns[index].truncate }); }); }); -}; \ No newline at end of file +}; + +var _default = truncateTableData; +exports.default = _default; +//# sourceMappingURL=truncateTableData.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.flow b/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.flow new file mode 100644 index 00000000000000..1052c92333033b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.flow @@ -0,0 +1,17 @@ +import _ from 'lodash'; + +/** + * @todo Make it work with ASCII content. + * @param {table~row[]} rows + * @param {Object} config + * @returns {table~row[]} + */ +export default (rows, config) => { + return rows.map((cells) => { + return cells.map((content, index) => { + return _.truncate(content, { + length: config.columns[index].truncate + }); + }); + }); +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.map b/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.map new file mode 100644 index 00000000000000..fbab35ea49bd14 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/truncateTableData.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/truncateTableData.js"],"names":["rows","config","map","cells","content","index","_","truncate","length","columns"],"mappings":";;;;;;;AAAA;;;;AAEA;;;;;;2BAMgBA,I,EAAMC,M,KAAW;AAC/B,SAAOD,IAAI,CAACE,GAAL,CAAUC,KAAD,IAAW;AACzB,WAAOA,KAAK,CAACD,GAAN,CAAU,CAACE,OAAD,EAAUC,KAAV,KAAoB;AACnC,aAAOC,gBAAEC,QAAF,CAAWH,OAAX,EAAoB;AACzBI,QAAAA,MAAM,EAAEP,MAAM,CAACQ,OAAP,CAAeJ,KAAf,EAAsBE;AADL,OAApB,CAAP;AAGD,KAJM,CAAP;AAKD,GANM,CAAP;AAOD,C","sourcesContent":["import _ from 'lodash';\n\n/**\n * @todo Make it work with ASCII content.\n * @param {table~row[]} rows\n * @param {Object} config\n * @returns {table~row[]}\n */\nexport default (rows, config) => {\n return rows.map((cells) => {\n return cells.map((content, index) => {\n return _.truncate(content, {\n length: config.columns[index].truncate\n });\n });\n });\n};\n"],"file":"truncateTableData.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js b/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js index 3ea3ddea8ff36d..40d812777b5017 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js +++ b/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js @@ -14,7 +14,7 @@ var validate = (function() { var errs__0 = errors; var valid1 = true; for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); + var isAdditional0 = !(false || validate.schema.properties.hasOwnProperty(key0)); if (isAdditional0) { valid1 = false; var err = { @@ -344,7 +344,7 @@ var validate = (function() { var errs__0 = errors; var valid1 = true; for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); + var isAdditional0 = !(false || key0 == 'alignment' || key0 == 'width' || key0 == 'wrapWord' || key0 == 'truncate' || key0 == 'paddingLeft' || key0 == 'paddingRight'); if (isAdditional0) { valid1 = false; var err = { @@ -385,8 +385,7 @@ var validate = (function() { if (equal(data1, schema1[i1])) { valid1 = true; break; - } - if (!valid1) { + } if (!valid1) { var err = { keyword: 'enum', dataPath: (dataPath || '') + '.alignment', @@ -641,7 +640,7 @@ var validate = (function() { })(); validate.schema = { "$id": "config.json", - "$schema": "http://json-schema.org/draft-06/schema#", + "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "border": { diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.flow b/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.flow new file mode 100644 index 00000000000000..14b9710135a17a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.flow @@ -0,0 +1,34 @@ +// eslint-disable-next-line import/default +import validateConfig from '../dist/validateConfig'; +// eslint-disable-next-line import/default +import validateStreamConfig from '../dist/validateStreamConfig'; + +const validate = { + 'config.json': validateConfig, + 'streamConfig.json': validateStreamConfig +}; + +/** + * @param {string} schemaId + * @param {formatData~config} config + * @returns {undefined} + */ +export default (schemaId, config = {}) => { + if (!validate[schemaId](config)) { + const errors = validate[schemaId].errors.map((error) => { + return { + dataPath: error.dataPath, + message: error.message, + params: error.params, + schemaPath: error.schemaPath + }; + }); + + /* eslint-disable no-console */ + console.log('config', config); + console.log('errors', errors); + /* eslint-enable no-console */ + + throw new Error('Invalid config.'); + } +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.map b/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.map new file mode 100644 index 00000000000000..43bebf7a69b1d1 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/validateConfig.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/validateConfig.js"],"names":["validate","validateConfig","validateStreamConfig","schemaId","config","errors","map","error","dataPath","message","params","schemaPath","console","log","Error"],"mappings":";;;;;;;AACA;;AAEA;;;;AAHA;AAEA;AAGA,MAAMA,QAAQ,GAAG;AACf,iBAAeC,uBADA;AAEf,uBAAqBC;AAFN,CAAjB;AAKA;;;;;;yBAKgBC,Q,EAAUC,MAAM,GAAG,E,KAAO;AACxC,MAAI,CAACJ,QAAQ,CAACG,QAAD,CAAR,CAAmBC,MAAnB,CAAL,EAAiC;AAC/B,UAAMC,MAAM,GAAGL,QAAQ,CAACG,QAAD,CAAR,CAAmBE,MAAnB,CAA0BC,GAA1B,CAA+BC,KAAD,IAAW;AACtD,aAAO;AACLC,QAAAA,QAAQ,EAAED,KAAK,CAACC,QADX;AAELC,QAAAA,OAAO,EAAEF,KAAK,CAACE,OAFV;AAGLC,QAAAA,MAAM,EAAEH,KAAK,CAACG,MAHT;AAILC,QAAAA,UAAU,EAAEJ,KAAK,CAACI;AAJb,OAAP;AAMD,KAPc,CAAf;AASA;;AACAC,IAAAA,OAAO,CAACC,GAAR,CAAY,QAAZ,EAAsBT,MAAtB;AACAQ,IAAAA,OAAO,CAACC,GAAR,CAAY,QAAZ,EAAsBR,MAAtB;AACA;;AAEA,UAAM,IAAIS,KAAJ,CAAU,iBAAV,CAAN;AACD;AACF,C","sourcesContent":["// eslint-disable-next-line import/default\nimport validateConfig from '../dist/validateConfig';\n// eslint-disable-next-line import/default\nimport validateStreamConfig from '../dist/validateStreamConfig';\n\nconst validate = {\n 'config.json': validateConfig,\n 'streamConfig.json': validateStreamConfig\n};\n\n/**\n * @param {string} schemaId\n * @param {formatData~config} config\n * @returns {undefined}\n */\nexport default (schemaId, config = {}) => {\n if (!validate[schemaId](config)) {\n const errors = validate[schemaId].errors.map((error) => {\n return {\n dataPath: error.dataPath,\n message: error.message,\n params: error.params,\n schemaPath: error.schemaPath\n };\n });\n\n /* eslint-disable no-console */\n console.log('config', config);\n console.log('errors', errors);\n /* eslint-enable no-console */\n\n throw new Error('Invalid config.');\n }\n};\n"],"file":"validateConfig.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateStreamConfig.js b/tools/node_modules/eslint/node_modules/table/dist/validateStreamConfig.js index 05c4b04c6bf835..ff10e5909ff4cd 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/validateStreamConfig.js +++ b/tools/node_modules/eslint/node_modules/table/dist/validateStreamConfig.js @@ -14,7 +14,7 @@ var validate = (function() { var errs__0 = errors; var valid1 = true; for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); + var isAdditional0 = !(false || validate.schema.properties.hasOwnProperty(key0)); if (isAdditional0) { valid1 = false; var err = { @@ -344,7 +344,7 @@ var validate = (function() { var errs__0 = errors; var valid1 = true; for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); + var isAdditional0 = !(false || key0 == 'alignment' || key0 == 'width' || key0 == 'wrapWord' || key0 == 'truncate' || key0 == 'paddingLeft' || key0 == 'paddingRight'); if (isAdditional0) { valid1 = false; var err = { @@ -385,8 +385,7 @@ var validate = (function() { if (equal(data1, schema1[i1])) { valid1 = true; break; - } - if (!valid1) { + } if (!valid1) { var err = { keyword: 'enum', dataPath: (dataPath || '') + '.alignment', @@ -628,7 +627,7 @@ var validate = (function() { })(); validate.schema = { "$id": "streamConfig.json", - "$schema": "http://json-schema.org/draft-06/schema#", + "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "border": { diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js b/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js index b5e103ce409c4d..124335cbfe794c 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js +++ b/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js @@ -1,8 +1,9 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; /** * @typedef {string} cell @@ -16,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { * @param {column[]} rows * @returns {undefined} */ -exports.default = rows => { +const validateTableData = rows => { if (!Array.isArray(rows)) { throw new TypeError('Table data must be an array.'); } @@ -30,22 +31,68 @@ exports.default = rows => { } const columnNumber = rows[0].length; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (const cells of rows) { - if (!Array.isArray(cells)) { - throw new TypeError('Table row data must be an array.'); - } + try { + for (var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + const cells = _step.value; - if (cells.length !== columnNumber) { - throw new Error('Table must have a consistent number of cells.'); - } + if (!Array.isArray(cells)) { + throw new TypeError('Table row data must be an array.'); + } + + if (cells.length !== columnNumber) { + throw new Error('Table must have a consistent number of cells.'); + } // @todo Make an exception for newline characters. + // @see https://github.com/gajus/table/issues/9 + + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; - // @todo Make an exception for newline characters. - // @see https://github.com/gajus/table/issues/9 - for (const cell of cells) { - if (/[\u0001-\u001A]/.test(cell)) { - throw new Error('Table data must not contain control characters.'); + try { + for (var _iterator2 = cells[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + const cell = _step2.value; + + // eslint-disable-next-line no-control-regex + if (/[\u0001-\u001A]/.test(cell)) { + throw new Error('Table data must not contain control characters.'); + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; } } } -}; \ No newline at end of file +}; + +var _default = validateTableData; +exports.default = _default; +//# sourceMappingURL=validateTableData.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.flow b/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.flow new file mode 100644 index 00000000000000..075eaf09249a45 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.flow @@ -0,0 +1,46 @@ +/** + * @typedef {string} cell + */ + +/** + * @typedef {cell[]} validateData~column + */ + +/** + * @param {column[]} rows + * @returns {undefined} + */ +export default (rows) => { + if (!Array.isArray(rows)) { + throw new TypeError('Table data must be an array.'); + } + + if (rows.length === 0) { + throw new Error('Table must define at least one row.'); + } + + if (rows[0].length === 0) { + throw new Error('Table must define at least one column.'); + } + + const columnNumber = rows[0].length; + + for (const cells of rows) { + if (!Array.isArray(cells)) { + throw new TypeError('Table row data must be an array.'); + } + + if (cells.length !== columnNumber) { + throw new Error('Table must have a consistent number of cells.'); + } + + // @todo Make an exception for newline characters. + // @see https://github.com/gajus/table/issues/9 + for (const cell of cells) { + // eslint-disable-next-line no-control-regex + if (/[\u0001-\u001A]/.test(cell)) { + throw new Error('Table data must not contain control characters.'); + } + } + } +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.map b/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.map new file mode 100644 index 00000000000000..bd892651ceb068 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/validateTableData.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/validateTableData.js"],"names":["rows","Array","isArray","TypeError","length","Error","columnNumber","cells","cell","test"],"mappings":";;;;;;;AAAA;;;;AAIA;;;;AAIA;;;;0BAIgBA,I,IAAS;AACvB,MAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,IAAd,CAAL,EAA0B;AACxB,UAAM,IAAIG,SAAJ,CAAc,8BAAd,CAAN;AACD;;AAED,MAAIH,IAAI,CAACI,MAAL,KAAgB,CAApB,EAAuB;AACrB,UAAM,IAAIC,KAAJ,CAAU,qCAAV,CAAN;AACD;;AAED,MAAIL,IAAI,CAAC,CAAD,CAAJ,CAAQI,MAAR,KAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;AACD;;AAED,QAAMC,YAAY,GAAGN,IAAI,CAAC,CAAD,CAAJ,CAAQI,MAA7B;AAbuB;AAAA;AAAA;;AAAA;AAevB,yBAAoBJ,IAApB,8HAA0B;AAAA,YAAfO,KAAe;;AACxB,UAAI,CAACN,KAAK,CAACC,OAAN,CAAcK,KAAd,CAAL,EAA2B;AACzB,cAAM,IAAIJ,SAAJ,CAAc,kCAAd,CAAN;AACD;;AAED,UAAII,KAAK,CAACH,MAAN,KAAiBE,YAArB,EAAmC;AACjC,cAAM,IAAID,KAAJ,CAAU,+CAAV,CAAN;AACD,OAPuB,CASxB;AACA;;;AAVwB;AAAA;AAAA;;AAAA;AAWxB,8BAAmBE,KAAnB,mIAA0B;AAAA,gBAAfC,IAAe;;AACxB;AACA,cAAI,kBAAkBC,IAAlB,CAAuBD,IAAvB,CAAJ,EAAkC;AAChC,kBAAM,IAAIH,KAAJ,CAAU,iDAAV,CAAN;AACD;AACF;AAhBuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBzB;AAhCsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCxB,C","sourcesContent":["/**\n * @typedef {string} cell\n */\n\n/**\n * @typedef {cell[]} validateData~column\n */\n\n/**\n * @param {column[]} rows\n * @returns {undefined}\n */\nexport default (rows) => {\n if (!Array.isArray(rows)) {\n throw new TypeError('Table data must be an array.');\n }\n\n if (rows.length === 0) {\n throw new Error('Table must define at least one row.');\n }\n\n if (rows[0].length === 0) {\n throw new Error('Table must define at least one column.');\n }\n\n const columnNumber = rows[0].length;\n\n for (const cells of rows) {\n if (!Array.isArray(cells)) {\n throw new TypeError('Table row data must be an array.');\n }\n\n if (cells.length !== columnNumber) {\n throw new Error('Table must have a consistent number of cells.');\n }\n\n // @todo Make an exception for newline characters.\n // @see https://github.com/gajus/table/issues/9\n for (const cell of cells) {\n // eslint-disable-next-line no-control-regex\n if (/[\\u0001-\\u001A]/.test(cell)) {\n throw new Error('Table data must not contain control characters.');\n }\n }\n }\n};\n"],"file":"validateTableData.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/wrapString.js b/tools/node_modules/eslint/node_modules/table/dist/wrapString.js index eae8ea051d95fc..c0dd8c8d6f7e12 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/wrapString.js +++ b/tools/node_modules/eslint/node_modules/table/dist/wrapString.js @@ -1,16 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _sliceAnsi = require('slice-ansi'); +var _sliceAnsi = _interopRequireDefault(require("slice-ansi")); -var _sliceAnsi2 = _interopRequireDefault(_sliceAnsi); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); +var _stringWidth = _interopRequireDefault(require("string-width")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -25,18 +22,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {number} size * @returns {Array} */ -exports.default = (subject, size) => { +const wrapString = (subject, size) => { let subjectSlice; - subjectSlice = subject; - const chunks = []; do { - chunks.push((0, _sliceAnsi2.default)(subjectSlice, 0, size)); - - subjectSlice = (0, _sliceAnsi2.default)(subjectSlice, size).trim(); - } while ((0, _stringWidth2.default)(subjectSlice)); + chunks.push((0, _sliceAnsi.default)(subjectSlice, 0, size)); + subjectSlice = (0, _sliceAnsi.default)(subjectSlice, size).trim(); + } while ((0, _stringWidth.default)(subjectSlice)); return chunks; -}; \ No newline at end of file +}; + +var _default = wrapString; +exports.default = _default; +//# sourceMappingURL=wrapString.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/wrapString.js.flow b/tools/node_modules/eslint/node_modules/table/dist/wrapString.js.flow new file mode 100644 index 00000000000000..bbb40721e34f99 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/wrapString.js.flow @@ -0,0 +1,29 @@ +import slice from 'slice-ansi'; +import stringWidth from 'string-width'; + +/** + * Creates an array of strings split into groups the length of size. + * This function works with strings that contain ASCII characters. + * + * wrapText is different from would-be "chunk" implementation + * in that whitespace characters that occur on a chunk size limit are trimmed. + * + * @param {string} subject + * @param {number} size + * @returns {Array} + */ +export default (subject, size) => { + let subjectSlice; + + subjectSlice = subject; + + const chunks = []; + + do { + chunks.push(slice(subjectSlice, 0, size)); + + subjectSlice = slice(subjectSlice, size).trim(); + } while (stringWidth(subjectSlice)); + + return chunks; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/wrapString.js.map b/tools/node_modules/eslint/node_modules/table/dist/wrapString.js.map new file mode 100644 index 00000000000000..3d1d7b3c0825a7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/wrapString.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/wrapString.js"],"names":["subject","size","subjectSlice","chunks","push","trim"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA;;;;;;;;;;;oBAWgBA,O,EAASC,I,KAAS;AAChC,MAAIC,YAAJ;AAEAA,EAAAA,YAAY,GAAGF,OAAf;AAEA,QAAMG,MAAM,GAAG,EAAf;;AAEA,KAAG;AACDA,IAAAA,MAAM,CAACC,IAAP,CAAY,wBAAMF,YAAN,EAAoB,CAApB,EAAuBD,IAAvB,CAAZ;AAEAC,IAAAA,YAAY,GAAG,wBAAMA,YAAN,EAAoBD,IAApB,EAA0BI,IAA1B,EAAf;AACD,GAJD,QAIS,0BAAYH,YAAZ,CAJT;;AAMA,SAAOC,MAAP;AACD,C","sourcesContent":["import slice from 'slice-ansi';\nimport stringWidth from 'string-width';\n\n/**\n * Creates an array of strings split into groups the length of size.\n * This function works with strings that contain ASCII characters.\n *\n * wrapText is different from would-be \"chunk\" implementation\n * in that whitespace characters that occur on a chunk size limit are trimmed.\n *\n * @param {string} subject\n * @param {number} size\n * @returns {Array}\n */\nexport default (subject, size) => {\n let subjectSlice;\n\n subjectSlice = subject;\n\n const chunks = [];\n\n do {\n chunks.push(slice(subjectSlice, 0, size));\n\n subjectSlice = slice(subjectSlice, size).trim();\n } while (stringWidth(subjectSlice));\n\n return chunks;\n};\n"],"file":"wrapString.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js b/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js index c0dd9df4b05d76..790b20bc00414a 100644 --- a/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js +++ b/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js @@ -1,16 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _sliceAnsi = require('slice-ansi'); +var _sliceAnsi = _interopRequireDefault(require("slice-ansi")); -var _sliceAnsi2 = _interopRequireDefault(_sliceAnsi); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); +var _stringWidth = _interopRequireDefault(require("string-width")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -19,34 +16,32 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {number} size * @returns {Array} */ -exports.default = (input, size) => { +const wrapWord = (input, size) => { let subject; - subject = input; + const chunks = []; // https://regex101.com/r/gY5kZ1/1 - const chunks = []; - - // https://regex101.com/r/gY5kZ1/1 const re = new RegExp('(^.{1,' + size + '}(\\s+|$))|(^.{1,' + (size - 1) + '}(\\\\|/|_|\\.|,|;|-))'); do { let chunk; - chunk = subject.match(re); if (chunk) { chunk = chunk[0]; - - subject = (0, _sliceAnsi2.default)(subject, (0, _stringWidth2.default)(chunk)); - + subject = (0, _sliceAnsi.default)(subject, (0, _stringWidth.default)(chunk)); chunk = chunk.trim(); } else { - chunk = (0, _sliceAnsi2.default)(subject, 0, size); - subject = (0, _sliceAnsi2.default)(subject, size); + chunk = (0, _sliceAnsi.default)(subject, 0, size); + subject = (0, _sliceAnsi.default)(subject, size); } chunks.push(chunk); - } while ((0, _stringWidth2.default)(subject)); + } while ((0, _stringWidth.default)(subject)); return chunks; -}; \ No newline at end of file +}; + +var _default = wrapWord; +exports.default = _default; +//# sourceMappingURL=wrapWord.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.flow b/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.flow new file mode 100644 index 00000000000000..02a8d45ea4c9bd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.flow @@ -0,0 +1,39 @@ +import slice from 'slice-ansi'; +import stringWidth from 'string-width'; + +/** + * @param {string} input + * @param {number} size + * @returns {Array} + */ +export default (input, size) => { + let subject; + + subject = input; + + const chunks = []; + + // https://regex101.com/r/gY5kZ1/1 + const re = new RegExp('(^.{1,' + size + '}(\\s+|$))|(^.{1,' + (size - 1) + '}(\\\\|/|_|\\.|,|;|-))'); + + do { + let chunk; + + chunk = subject.match(re); + + if (chunk) { + chunk = chunk[0]; + + subject = slice(subject, stringWidth(chunk)); + + chunk = chunk.trim(); + } else { + chunk = slice(subject, 0, size); + subject = slice(subject, size); + } + + chunks.push(chunk); + } while (stringWidth(subject)); + + return chunks; +}; diff --git a/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.map b/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.map new file mode 100644 index 00000000000000..5e7aa9ccb73948 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/table/dist/wrapWord.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/wrapWord.js"],"names":["input","size","subject","chunks","re","RegExp","chunk","match","trim","push"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA;;;;;kBAKgBA,K,EAAOC,I,KAAS;AAC9B,MAAIC,OAAJ;AAEAA,EAAAA,OAAO,GAAGF,KAAV;AAEA,QAAMG,MAAM,GAAG,EAAf,CAL8B,CAO9B;;AACA,QAAMC,EAAE,GAAG,IAAIC,MAAJ,CAAW,WAAWJ,IAAX,GAAkB,mBAAlB,IAAyCA,IAAI,GAAG,CAAhD,IAAqD,wBAAhE,CAAX;;AAEA,KAAG;AACD,QAAIK,KAAJ;AAEAA,IAAAA,KAAK,GAAGJ,OAAO,CAACK,KAAR,CAAcH,EAAd,CAAR;;AAEA,QAAIE,KAAJ,EAAW;AACTA,MAAAA,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAb;AAEAJ,MAAAA,OAAO,GAAG,wBAAMA,OAAN,EAAe,0BAAYI,KAAZ,CAAf,CAAV;AAEAA,MAAAA,KAAK,GAAGA,KAAK,CAACE,IAAN,EAAR;AACD,KAND,MAMO;AACLF,MAAAA,KAAK,GAAG,wBAAMJ,OAAN,EAAe,CAAf,EAAkBD,IAAlB,CAAR;AACAC,MAAAA,OAAO,GAAG,wBAAMA,OAAN,EAAeD,IAAf,CAAV;AACD;;AAEDE,IAAAA,MAAM,CAACM,IAAP,CAAYH,KAAZ;AACD,GAjBD,QAiBS,0BAAYJ,OAAZ,CAjBT;;AAmBA,SAAOC,MAAP;AACD,C","sourcesContent":["import slice from 'slice-ansi';\nimport stringWidth from 'string-width';\n\n/**\n * @param {string} input\n * @param {number} size\n * @returns {Array}\n */\nexport default (input, size) => {\n let subject;\n\n subject = input;\n\n const chunks = [];\n\n // https://regex101.com/r/gY5kZ1/1\n const re = new RegExp('(^.{1,' + size + '}(\\\\s+|$))|(^.{1,' + (size - 1) + '}(\\\\\\\\|/|_|\\\\.|,|;|-))');\n\n do {\n let chunk;\n\n chunk = subject.match(re);\n\n if (chunk) {\n chunk = chunk[0];\n\n subject = slice(subject, stringWidth(chunk));\n\n chunk = chunk.trim();\n } else {\n chunk = slice(subject, 0, size);\n subject = slice(subject, size);\n }\n\n chunks.push(chunk);\n } while (stringWidth(subject));\n\n return chunks;\n};\n"],"file":"wrapWord.js"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/package.json b/tools/node_modules/eslint/node_modules/table/package.json index a84ae5396b0236..3e6fcb12d1985a 100644 --- a/tools/node_modules/eslint/node_modules/table/package.json +++ b/tools/node_modules/eslint/node_modules/table/package.json @@ -9,36 +9,48 @@ }, "bundleDependencies": false, "dependencies": { - "ajv": "^6.0.1", - "ajv-keywords": "^3.0.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", + "ajv": "^6.5.3", + "lodash": "^4.17.10", "slice-ansi": "1.0.0", "string-width": "^2.1.1" }, "deprecated": false, "description": "Formats data into a string table.", "devDependencies": { + "@babel/cli": "^7.1.2", + "@babel/core": "^7.1.2", + "@babel/node": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/preset-env": "^7.1.0", + "@babel/register": "^7.0.0", "ajv-cli": "^3.0.0", - "babel": "^6.23.0", - "babel-cli": "^6.26.0", - "babel-core": "^6.26.0", - "babel-plugin-istanbul": "^4.1.5", - "babel-preset-es2015-node4": "^2.1.1", - "babel-register": "^6.26.0", - "chai": "^4.1.2", - "eslint": "^4.7.2", - "eslint-config-canonical": "^9.3.1", - "gitdown": "^2.5.1", - "husky": "^0.14.3", - "mocha": "^5.0.0", - "nyc": "^11.2.1", - "sinon": "^4.0.0" + "ajv-keywords": "^3.2.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-plugin-transform-export-default-name": "^2.0.4", + "chai": "^4.2.0", + "chalk": "^2.4.1", + "coveralls": "^3.0.2", + "eslint": "^5.6.1", + "eslint-config-canonical": "^13.0.0", + "flow-bin": "^0.81.0", + "flow-copy-source": "^2.0.2", + "gitdown": "^2.5.4", + "husky": "^1.0.1", + "mocha": "^5.2.0", + "nyc": "^13.1.0", + "semantic-release": "^15.9.16", + "sinon": "^6.3.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=6.0.0" }, "homepage": "https://github.com/gajus/table#readme", + "husky": { + "hooks": { + "post-commit": "npm run create-readme && git add README.md && git commit -m 'docs: generate docs' --no-verify", + "pre-commit": "npm run lint && npm run test && npm run build" + } + }, "keywords": [ "ascii", "text", @@ -51,12 +63,14 @@ "name": "table", "nyc": { "include": [ - "src/*.js" + "src/**/*.js" ], "instrument": false, - "lines": 70, + "reporter": [ + "text-lcov" + ], "require": [ - "babel-register" + "@babel/register" ], "sourceMap": false }, @@ -65,13 +79,11 @@ "url": "git+https://github.com/gajus/table.git" }, "scripts": { - "build": "rm -fr ./dist && NODE_ENV=production babel --copy-files ./src --out-dir ./dist && npm run make-validators", - "lint": "npm run build && eslint ./src ./tests", - "make-readme": "gitdown ./.README/README.md --output-file ./README.md", - "make-validators": "ajv compile --all-errors --inline-refs=false -s src/schemas/config -c ajv-keywords/keywords/typeof -o dist/validateConfig.js && ajv compile --all-errors --inline-refs=false -s src/schemas/streamConfig -c ajv-keywords/keywords/typeof -o dist/validateStreamConfig.js", - "precommit": "npm run lint && npm run test", - "prepublish": "NODE_ENV=production npm run build", - "test": "npm run build && nyc --check-coverage mocha" + "build": "rm -fr ./dist && NODE_ENV=production babel ./src --out-dir ./dist --copy-files --source-maps && npm run create-validators && flow-copy-source src dist", + "create-readme": "gitdown ./.README/README.md --output-file ./README.md", + "create-validators": "ajv compile --all-errors --inline-refs=false -s src/schemas/config -c ajv-keywords/keywords/typeof -o dist/validateConfig.js && ajv compile --all-errors --inline-refs=false -s src/schemas/streamConfig -c ajv-keywords/keywords/typeof -o dist/validateStreamConfig.js", + "lint": "npm run build && eslint ./src ./test && flow", + "test": "mocha --require @babel/register" }, - "version": "4.0.3" + "version": "5.1.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/tslib/CopyrightNotice.txt b/tools/node_modules/eslint/node_modules/tslib/CopyrightNotice.txt index 4d8bc99e360ea5..0f6db1f75f714e 100644 --- a/tools/node_modules/eslint/node_modules/tslib/CopyrightNotice.txt +++ b/tools/node_modules/eslint/node_modules/tslib/CopyrightNotice.txt @@ -1,14 +1,15 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + diff --git a/tools/node_modules/eslint/node_modules/tslib/LICENSE.txt b/tools/node_modules/eslint/node_modules/tslib/LICENSE.txt index 2df8c87fda4e00..8746124b277914 100644 --- a/tools/node_modules/eslint/node_modules/tslib/LICENSE.txt +++ b/tools/node_modules/eslint/node_modules/tslib/LICENSE.txt @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/tools/node_modules/eslint/node_modules/tslib/README.md b/tools/node_modules/eslint/node_modules/tslib/README.md index c9819aa2cccd26..ae595fe2342253 100644 --- a/tools/node_modules/eslint/node_modules/tslib/README.md +++ b/tools/node_modules/eslint/node_modules/tslib/README.md @@ -1,134 +1,134 @@ -# tslib - -This is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions. - -This library is primarily used by the `--importHelpers` flag in TypeScript. -When using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file: - -```ts -var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; -}; -exports.x = {}; -exports.y = __assign({}, exports.x); - -``` - -will instead be emitted as something like the following: - -```ts -var tslib_1 = require("tslib"); -exports.x = {}; -exports.y = tslib_1.__assign({}, exports.x); -``` - -Because this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead. -For optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`. - -# Installing - -For the latest stable version, run: - -## npm - -```sh -# TypeScript 2.3.3 or later -npm install --save tslib - -# TypeScript 2.3.2 or earlier -npm install --save tslib@1.6.1 -``` - -## bower - -```sh -# TypeScript 2.3.3 or later -bower install tslib - -# TypeScript 2.3.2 or earlier -bower install tslib@1.6.1 -``` - -## JSPM - -```sh -# TypeScript 2.3.3 or later -jspm install tslib - -# TypeScript 2.3.2 or earlier -jspm install tslib@1.6.1 -``` - -# Usage - -Set the `importHelpers` compiler option on the command line: - -``` -tsc --importHelpers file.ts -``` - -or in your tsconfig.json: - -```json -{ - "compilerOptions": { - "importHelpers": true - } -} -``` - -#### For bower and JSPM users - -You will need to add a `paths` mapping for `tslib`, e.g. For Bower users: - -```json -{ - "compilerOptions": { - "module": "amd", - "importHelpers": true, - "baseUrl": "./", - "paths": { - "tslib" : ["bower_components/tslib/tslib.d.ts"] - } - } -} -``` - -For JSPM users: - -```json -{ - "compilerOptions": { - "module": "system", - "importHelpers": true, - "baseUrl": "./", - "paths": { - "tslib" : ["jspm_packages/npm/tslib@1.9.3/tslib.d.ts"] - } - } -} -``` - - -# Contribute - -There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript. - -* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in. -* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls). -* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript). -* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter. -* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). -* Read the language specification ([docx](http://go.microsoft.com/fwlink/?LinkId=267121), [pdf](http://go.microsoft.com/fwlink/?LinkId=267238)). - -# Documentation - -* [Quick tutorial](http://www.typescriptlang.org/Tutorial) -* [Programming handbook](http://www.typescriptlang.org/Handbook) -* [Language specification](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md) -* [Homepage](http://www.typescriptlang.org/) +# tslib + +This is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions. + +This library is primarily used by the `--importHelpers` flag in TypeScript. +When using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file: + +```ts +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +exports.x = {}; +exports.y = __assign({}, exports.x); + +``` + +will instead be emitted as something like the following: + +```ts +var tslib_1 = require("tslib"); +exports.x = {}; +exports.y = tslib_1.__assign({}, exports.x); +``` + +Because this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead. +For optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`. + +# Installing + +For the latest stable version, run: + +## npm + +```sh +# TypeScript 2.3.3 or later +npm install --save tslib + +# TypeScript 2.3.2 or earlier +npm install --save tslib@1.6.1 +``` + +## bower + +```sh +# TypeScript 2.3.3 or later +bower install tslib + +# TypeScript 2.3.2 or earlier +bower install tslib@1.6.1 +``` + +## JSPM + +```sh +# TypeScript 2.3.3 or later +jspm install tslib + +# TypeScript 2.3.2 or earlier +jspm install tslib@1.6.1 +``` + +# Usage + +Set the `importHelpers` compiler option on the command line: + +``` +tsc --importHelpers file.ts +``` + +or in your tsconfig.json: + +```json +{ + "compilerOptions": { + "importHelpers": true + } +} +``` + +#### For bower and JSPM users + +You will need to add a `paths` mapping for `tslib`, e.g. For Bower users: + +```json +{ + "compilerOptions": { + "module": "amd", + "importHelpers": true, + "baseUrl": "./", + "paths": { + "tslib" : ["bower_components/tslib/tslib.d.ts"] + } + } +} +``` + +For JSPM users: + +```json +{ + "compilerOptions": { + "module": "system", + "importHelpers": true, + "baseUrl": "./", + "paths": { + "tslib" : ["jspm_packages/npm/tslib@1.9.3/tslib.d.ts"] + } + } +} +``` + + +# Contribute + +There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript. + +* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in. +* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls). +* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript). +* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter. +* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). +* Read the language specification ([docx](http://go.microsoft.com/fwlink/?LinkId=267121), [pdf](http://go.microsoft.com/fwlink/?LinkId=267238)). + +# Documentation + +* [Quick tutorial](http://www.typescriptlang.org/Tutorial) +* [Programming handbook](http://www.typescriptlang.org/Handbook) +* [Language specification](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md) +* [Homepage](http://www.typescriptlang.org/) diff --git a/tools/node_modules/eslint/node_modules/tslib/tslib.d.ts b/tools/node_modules/eslint/node_modules/tslib/tslib.d.ts index 16be0f542deba9..c4a0e11584cd60 100644 --- a/tools/node_modules/eslint/node_modules/tslib/tslib.d.ts +++ b/tools/node_modules/eslint/node_modules/tslib/tslib.d.ts @@ -1,33 +1,33 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -export declare function __extends(d: Function, b: Function): void; -export declare function __assign(t: any, ...sources: any[]): any; -export declare function __rest(t: any, propertyNames: (string | symbol)[]): any; -export declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any; -export declare function __param(paramIndex: number, decorator: Function): Function; -export declare function __metadata(metadataKey: any, metadataValue: any): Function; -export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any; -export declare function __generator(thisArg: any, body: Function): any; -export declare function __exportStar(m: any, exports: any): void; -export declare function __values(o: any): any; -export declare function __read(o: any, n?: number): any[]; -export declare function __spread(...args: any[]): any[]; -export declare function __await(v: any): any; -export declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any; -export declare function __asyncDelegator(o: any): any; -export declare function __asyncValues(o: any): any; -export declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray; -export declare function __importStar(mod: T): T; -export declare function __importDefault(mod: T): T | { default: T }; +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +export declare function __extends(d: Function, b: Function): void; +export declare function __assign(t: any, ...sources: any[]): any; +export declare function __rest(t: any, propertyNames: (string | symbol)[]): any; +export declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any; +export declare function __param(paramIndex: number, decorator: Function): Function; +export declare function __metadata(metadataKey: any, metadataValue: any): Function; +export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any; +export declare function __generator(thisArg: any, body: Function): any; +export declare function __exportStar(m: any, exports: any): void; +export declare function __values(o: any): any; +export declare function __read(o: any, n?: number): any[]; +export declare function __spread(...args: any[]): any[]; +export declare function __await(v: any): any; +export declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any; +export declare function __asyncDelegator(o: any): any; +export declare function __asyncValues(o: any): any; +export declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray; +export declare function __importStar(mod: T): T; +export declare function __importDefault(mod: T): T | { default: T }; diff --git a/tools/node_modules/eslint/node_modules/tslib/tslib.es6.js b/tools/node_modules/eslint/node_modules/tslib/tslib.es6.js index 45b35893ca4ca1..6da273e26024f1 100644 --- a/tools/node_modules/eslint/node_modules/tslib/tslib.es6.js +++ b/tools/node_modules/eslint/node_modules/tslib/tslib.es6.js @@ -1,186 +1,186 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -export function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -export var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - } - return __assign.apply(this, arguments); -} - -export function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) - t[p[i]] = s[p[i]]; - return t; -} - -export function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -export function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -} - -export function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); -} - -export function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -export function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -export function __exportStar(m, exports) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} - -export function __values(o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; -} - -export function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -export function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; -} - -export function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); -} - -export function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } -} - -export function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } -} - -export function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } -} - -export function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; -}; - -export function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result.default = mod; - return result; -} - -export function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; -} +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +export function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +export var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + } + return __assign.apply(this, arguments); +} + +export function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +} + +export function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} + +export function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +} + +export function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); +} + +export function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +export function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +export function __exportStar(m, exports) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} + +export function __values(o) { + var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; + if (m) return m.call(o); + return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; +} + +export function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +export function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; +} + +export function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} + +export function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +} + +export function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } +} + +export function __asyncValues(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +} + +export function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; + +export function __importStar(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result.default = mod; + return result; +} + +export function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; +} diff --git a/tools/node_modules/eslint/node_modules/tslib/tslib.js b/tools/node_modules/eslint/node_modules/tslib/tslib.js index a74e93b05181c3..b0b1ff3ab8e776 100644 --- a/tools/node_modules/eslint/node_modules/tslib/tslib.js +++ b/tools/node_modules/eslint/node_modules/tslib/tslib.js @@ -1,243 +1,243 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -/* global global, define, System, Reflect, Promise */ -var __extends; -var __assign; -var __rest; -var __decorate; -var __param; -var __metadata; -var __awaiter; -var __generator; -var __exportStar; -var __values; -var __read; -var __spread; -var __await; -var __asyncGenerator; -var __asyncDelegator; -var __asyncValues; -var __makeTemplateObject; -var __importStar; -var __importDefault; -(function (factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); - } - else if (typeof module === "object" && typeof module.exports === "object") { - factory(createExporter(root, createExporter(module.exports))); - } - else { - factory(createExporter(root)); - } - function createExporter(exports, previous) { - if (exports !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports, "__esModule", { value: true }); - } - else { - exports.__esModule = true; - } - } - return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; - } -}) -(function (exporter) { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - - __extends = function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - - __assign = Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - - __rest = function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) - t[p[i]] = s[p[i]]; - return t; - }; - - __decorate = function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - }; - - __param = function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } - }; - - __metadata = function (metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); - }; - - __awaiter = function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - - __generator = function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - - __exportStar = function (m, exports) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; - }; - - __values = function (o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - }; - - __read = function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - - __spread = function () { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - }; - - __await = function (v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - }; - - __asyncGenerator = function (thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } - }; - - __asyncDelegator = function (o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } - }; - - __asyncValues = function (o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } - }; - - __makeTemplateObject = function (cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; - }; - - __importStar = function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; - }; - - __importDefault = function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; - }; - - exporter("__extends", __extends); - exporter("__assign", __assign); - exporter("__rest", __rest); - exporter("__decorate", __decorate); - exporter("__param", __param); - exporter("__metadata", __metadata); - exporter("__awaiter", __awaiter); - exporter("__generator", __generator); - exporter("__exportStar", __exportStar); - exporter("__values", __values); - exporter("__read", __read); - exporter("__spread", __spread); - exporter("__await", __await); - exporter("__asyncGenerator", __asyncGenerator); - exporter("__asyncDelegator", __asyncDelegator); - exporter("__asyncValues", __asyncValues); - exporter("__makeTemplateObject", __makeTemplateObject); - exporter("__importStar", __importStar); - exporter("__importDefault", __importDefault); -}); +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global global, define, System, Reflect, Promise */ +var __extends; +var __assign; +var __rest; +var __decorate; +var __param; +var __metadata; +var __awaiter; +var __generator; +var __exportStar; +var __values; +var __read; +var __spread; +var __await; +var __asyncGenerator; +var __asyncDelegator; +var __asyncValues; +var __makeTemplateObject; +var __importStar; +var __importDefault; +(function (factory) { + var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; + if (typeof define === "function" && define.amd) { + define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); + } + else if (typeof module === "object" && typeof module.exports === "object") { + factory(createExporter(root, createExporter(module.exports))); + } + else { + factory(createExporter(root)); + } + function createExporter(exports, previous) { + if (exports !== root) { + if (typeof Object.create === "function") { + Object.defineProperty(exports, "__esModule", { value: true }); + } + else { + exports.__esModule = true; + } + } + return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; + } +}) +(function (exporter) { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + + __extends = function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + + __rest = function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; + }; + + __decorate = function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + + __param = function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } + }; + + __metadata = function (metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); + }; + + __awaiter = function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + + __generator = function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + + __exportStar = function (m, exports) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; + }; + + __values = function (o) { + var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; + if (m) return m.call(o); + return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + }; + + __read = function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + + __spread = function () { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; + }; + + __await = function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + }; + + __asyncGenerator = function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } + }; + + __asyncDelegator = function (o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } + }; + + __asyncValues = function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } + }; + + __makeTemplateObject = function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; + }; + + __importStar = function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; + }; + + __importDefault = function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + + exporter("__extends", __extends); + exporter("__assign", __assign); + exporter("__rest", __rest); + exporter("__decorate", __decorate); + exporter("__param", __param); + exporter("__metadata", __metadata); + exporter("__awaiter", __awaiter); + exporter("__generator", __generator); + exporter("__exportStar", __exportStar); + exporter("__values", __values); + exporter("__read", __read); + exporter("__spread", __spread); + exporter("__await", __await); + exporter("__asyncGenerator", __asyncGenerator); + exporter("__asyncDelegator", __asyncDelegator); + exporter("__asyncValues", __asyncValues); + exporter("__makeTemplateObject", __makeTemplateObject); + exporter("__importStar", __importStar); + exporter("__importDefault", __importDefault); +}); diff --git a/tools/node_modules/eslint/package.json b/tools/node_modules/eslint/package.json index 09880a0388c598..12e5ab3d761bf5 100644 --- a/tools/node_modules/eslint/package.json +++ b/tools/node_modules/eslint/package.json @@ -43,12 +43,12 @@ "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^2.0.0", + "regexpp": "^2.0.1", "require-uncached": "^1.0.3", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^4.0.3", + "table": "^5.0.2", "text-table": "^0.2.0" }, "deprecated": false, @@ -135,5 +135,5 @@ "release": "node Makefile.js release", "test": "node Makefile.js test" }, - "version": "5.6.1" + "version": "5.7.0" } \ No newline at end of file From 98afca92a9d035a6191fd05e8013a6fc36a78539 Mon Sep 17 00:00:00 2001 From: Diana Holland Date: Fri, 12 Oct 2018 11:36:17 -0700 Subject: [PATCH 055/178] crypto: move field initialization to class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23610 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Refael Ackermann Reviewed-By: Colin Ihrig Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Ujjwal Sharma --- src/node_crypto_clienthello-inl.h | 9 +-------- src/node_crypto_clienthello.h | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/node_crypto_clienthello-inl.h b/src/node_crypto_clienthello-inl.h index c5c595c7606cf9..9de8f2e5fcf731 100644 --- a/src/node_crypto_clienthello-inl.h +++ b/src/node_crypto_clienthello-inl.h @@ -34,14 +34,7 @@ inline ClientHelloParser::ClientHelloParser() : state_(kEnded), onhello_cb_(nullptr), onend_cb_(nullptr), - cb_arg_(nullptr), - session_size_(0), - session_id_(nullptr), - servername_size_(0), - servername_(nullptr), - ocsp_request_(0), - tls_ticket_size_(0), - tls_ticket_(nullptr) { + cb_arg_(nullptr) { Reset(); } diff --git a/src/node_crypto_clienthello.h b/src/node_crypto_clienthello.h index fd8756254ffc24..687e9589b6d932 100644 --- a/src/node_crypto_clienthello.h +++ b/src/node_crypto_clienthello.h @@ -108,16 +108,16 @@ class ClientHelloParser { OnHelloCb onhello_cb_; OnEndCb onend_cb_; void* cb_arg_; - size_t frame_len_; - size_t body_offset_; - size_t extension_offset_; - uint8_t session_size_; - const uint8_t* session_id_; - uint16_t servername_size_; - const uint8_t* servername_; - uint8_t ocsp_request_; - uint16_t tls_ticket_size_; - const uint8_t* tls_ticket_; + size_t frame_len_ = 0; + size_t body_offset_ = 0; + size_t extension_offset_ = 0; + uint8_t session_size_ = 0; + const uint8_t* session_id_ = nullptr; + uint16_t servername_size_ = 0; + const uint8_t* servername_ = nullptr; + uint8_t ocsp_request_ = 0; + uint16_t tls_ticket_size_ = -1; + const uint8_t* tls_ticket_ = nullptr; }; } // namespace crypto From 8d29569368629bf6dfd549a69b80b678ab714e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D0=B2=D0=BE=D1=80=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=90=D0=BD=D0=B4=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Sun, 2 Sep 2018 13:49:02 +0300 Subject: [PATCH 056/178] doc: wrap links in <> This fixes links that were broken due to inclusion of the trailing dot. Also simplifies a pair of occurances of [](). PR-URL: https://github.com/nodejs/node/pull/23359 Reviewed-By: Rich Trott Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Colin Ihrig Reviewed-By: Vse Mozhet Byt Reviewed-By: Tiancheng "Timothy" Gu Reviewed-By: James M Snell --- doc/api/deprecations.md | 10 +++++----- doc/api/repl.md | 4 ++-- doc/api/tls.md | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index 19f96099f363cf..0172cd78383dfb 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -334,7 +334,7 @@ changes: Type: End-of-Life Calling an asynchronous function without a callback throws a `TypeError` -in Node.js 10.0.0 onwards. (See https://github.com/nodejs/node/pull/12562.) +in Node.js 10.0.0 onwards. (See .) ### DEP0014: fs.read legacy String interface @@ -1717,7 +1717,7 @@ changes: Type: End-of-Life The AsyncHooks Sensitive API was never documented and had various minor issues. -(See https://github.com/nodejs/node/issues/15572.) Use the `AsyncResource` +(See .) Use the `AsyncResource` API instead. @@ -1737,8 +1737,8 @@ changes: Type: End-of-Life `runInAsyncIdScope` doesn't emit the `'before'` or `'after'` event and can thus -cause a lot of issues. See https://github.com/nodejs/node/issues/14328 for more -details. +cause a lot of issues. See for +more details. ### DEP0089: require('assert') @@ -1897,7 +1897,7 @@ to unrecoverable errors. Use [`asyncResource.runInAsyncScope()`][] API instead which provides a much safer, and more convenient, alternative. See -https://github.com/nodejs/node/pull/18513 for more details. + for more details. ### DEP0099: async context-unaware node::MakeCallback C++ APIs diff --git a/doc/api/repl.md b/doc/api/repl.md index 98c3f66839da83..787e28a4a947b9 100644 --- a/doc/api/repl.md +++ b/doc/api/repl.md @@ -619,10 +619,10 @@ possible to connect to a long-running Node.js process without restarting it. For an example of running a "full-featured" (`terminal`) REPL over a `net.Server` and `net.Socket` instance, see: -[https://gist.github.com/TooTallNate/2209310](https://gist.github.com/TooTallNate/2209310). +. For an example of running a REPL instance over [curl(1)][], see: -[https://gist.github.com/TooTallNate/2053342](https://gist.github.com/TooTallNate/2053342). +. [`'uncaughtException'`]: process.html#process_event_uncaughtexception [`--experimental-repl-await`]: cli.html#cli_experimental_repl_await diff --git a/doc/api/tls.md b/doc/api/tls.md index 41d863df2f9b81..4f3430854e1e41 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -566,7 +566,7 @@ field which always contains the value `'TLSv1/SSLv3'`. For example: `{ name: 'AES256-SHA', version: 'TLSv1/SSLv3' }`. See `SSL_CIPHER_get_name()` in -https://www.openssl.org/docs/man1.1.0/ssl/SSL_CIPHER_get_name.html for more + for more information. ### tlsSocket.getEphemeralKeyInfo() @@ -683,7 +683,7 @@ Example responses include: * `TLSv1.2` * `unknown` -See https://www.openssl.org/docs/man1.1.0/ssl/SSL_get_version.html for more +See for more information. ### tlsSocket.getSession() From 4ba1ddb046ed79118f357a9d47458bdf158dfa06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D0=B2=D0=BE=D1=80=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=90=D0=BD=D0=B4=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Sun, 2 Sep 2018 14:37:12 +0300 Subject: [PATCH 057/178] doc: fix pr-url in repl.md Now it points to the actual pr, not to /compare/. PR-URL: https://github.com/nodejs/node/pull/23359 Reviewed-By: Rich Trott Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Colin Ihrig Reviewed-By: Vse Mozhet Byt Reviewed-By: Tiancheng "Timothy" Gu Reviewed-By: James M Snell --- doc/api/repl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/repl.md b/doc/api/repl.md index 787e28a4a947b9..d010265327e5fa 100644 --- a/doc/api/repl.md +++ b/doc/api/repl.md @@ -453,7 +453,7 @@ Returns `true` if `keyword` is a valid keyword, otherwise `false`. added: v0.1.91 changes: - version: v10.0.0 - pr-url: https://github.com/nodejs/node/pull/v10.0.0 + pr-url: https://github.com/nodejs/node/pull/19187 description: The `REPL_MAGIC_MODE` `replMode` was removed. - version: v5.8.0 pr-url: https://github.com/nodejs/node/pull/5388 From 0311fcc546e792c813f1c6644ff7e60e7a7b5158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D0=B2=D0=BE=D1=80=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=90=D0=BD=D0=B4=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Sun, 2 Sep 2018 15:45:53 +0300 Subject: [PATCH 058/178] doc: use reserved domains for examples in url.md Changes non-reserved domains to reserved ones in url.md. PR-URL: https://github.com/nodejs/node/pull/23359 Refs: https://www.iana.org/domains/reserved Reviewed-By: Rich Trott Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Colin Ihrig Reviewed-By: Vse Mozhet Byt Reviewed-By: Tiancheng "Timothy" Gu Reviewed-By: James M Snell --- doc/api/url.md | 96 +++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/doc/api/url.md b/doc/api/url.md index 33b99398eeeb28..eaa146a8211942 100644 --- a/doc/api/url.md +++ b/doc/api/url.md @@ -26,31 +26,31 @@ backwards compatibility with existing applications. New application code should use the WHATWG API. A comparison between the WHATWG and Legacy APIs is provided below. Above the URL -`'http://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash'`, properties of -an object returned by the legacy `url.parse()` are shown. Below it are +`'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'`, properties +of an object returned by the legacy `url.parse()` are shown. Below it are properties of a WHATWG `URL` object. WHATWG URL's `origin` property includes `protocol` and `host`, but not `username` or `password`. ```txt -┌─────────────────────────────────────────────────────────────────────────────────────────────┐ -│ href │ -├──────────┬──┬─────────────────────┬─────────────────────┬───────────────────────────┬───────┤ -│ protocol │ │ auth │ host │ path │ hash │ -│ │ │ ├──────────────┬──────┼──────────┬────────────────┤ │ -│ │ │ │ hostname │ port │ pathname │ search │ │ -│ │ │ │ │ │ ├─┬──────────────┤ │ -│ │ │ │ │ │ │ │ query │ │ -" https: // user : pass @ sub.host.com : 8080 /p/a/t/h ? query=string #hash " -│ │ │ │ │ hostname │ port │ │ │ │ -│ │ │ │ ├──────────────┴──────┤ │ │ │ -│ protocol │ │ username │ password │ host │ │ │ │ -├──────────┴──┼──────────┴──────────┼─────────────────────┤ │ │ │ -│ origin │ │ origin │ pathname │ search │ hash │ -├─────────────┴─────────────────────┴─────────────────────┴──────────┴────────────────┴───────┤ -│ href │ -└─────────────────────────────────────────────────────────────────────────────────────────────┘ +┌────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ href │ +├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤ +│ protocol │ │ auth │ host │ path │ hash │ +│ │ │ ├─────────────────┬──────┼──────────┬────────────────┤ │ +│ │ │ │ hostname │ port │ pathname │ search │ │ +│ │ │ │ │ │ ├─┬──────────────┤ │ +│ │ │ │ │ │ │ │ query │ │ +" https: // user : pass @ sub.example.com : 8080 /p/a/t/h ? query=string #hash " +│ │ │ │ │ hostname │ port │ │ │ │ +│ │ │ │ ├─────────────────┴──────┤ │ │ │ +│ protocol │ │ username │ password │ host │ │ │ │ +├──────────┴──┼──────────┴──────────┼────────────────────────┤ │ │ │ +│ origin │ │ origin │ pathname │ search │ hash │ +├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤ +│ href │ +└────────────────────────────────────────────────────────────────────────────────────────────────┘ (all spaces in the "" line should be ignored — they are purely for formatting) ``` @@ -58,7 +58,7 @@ Parsing the URL string using the WHATWG API: ```js const myURL = - new URL('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash'); + new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'); ``` Parsing the URL string using the Legacy API: @@ -66,7 +66,7 @@ Parsing the URL string using the Legacy API: ```js const url = require('url'); const myURL = - url.parse('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash'); + url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'); ``` ## The WHATWG URL API @@ -120,8 +120,8 @@ Unicode characters appearing within the hostname of `input` will be automatically converted to ASCII using the [Punycode][] algorithm. ```js -const myURL = new URL('https://你好你好'); -// https://xn--6qqa088eba/ +const myURL = new URL('https://測試'); +// https://xn--g6w251d/ ``` This feature is only available if the `node` executable was compiled with @@ -132,23 +132,23 @@ and a `base` is provided, it is advised to validate that the `origin` of the `URL` object is what is expected. ```js -let myURL = new URL('http://anotherExample.org/', 'https://example.org/'); -// http://anotherexample.org/ +let myURL = new URL('http://Example.com/', 'https://example.org/'); +// http://example.com/ -myURL = new URL('https://anotherExample.org/', 'https://example.org/'); -// https://anotherexample.org/ +myURL = new URL('https://Example.com/', 'https://example.org/'); +// https://example.com/ -myURL = new URL('foo://anotherExample.org/', 'https://example.org/'); -// foo://anotherExample.org/ +myURL = new URL('foo://Example.com/', 'https://example.org/'); +// foo://Example.com/ -myURL = new URL('http:anotherExample.org/', 'https://example.org/'); -// http://anotherexample.org/ +myURL = new URL('http:Example.com/', 'https://example.org/'); +// http://example.com/ -myURL = new URL('https:anotherExample.org/', 'https://example.org/'); -// https://example.org/anotherExample.org/ +myURL = new URL('https:Example.com/', 'https://example.org/'); +// https://example.org/Example.com/ -myURL = new URL('foo:anotherExample.org/', 'https://example.org/'); -// foo:anotherExample.org/ +myURL = new URL('foo:Example.com/', 'https://example.org/'); +// foo:Example.com/ ``` #### url.hash @@ -249,12 +249,12 @@ console.log(myURL.origin); ``` ```js -const idnURL = new URL('https://你好你好'); +const idnURL = new URL('https://測試'); console.log(idnURL.origin); -// Prints https://xn--6qqa088eba +// Prints https://xn--g6w251d console.log(idnURL.hostname); -// Prints xn--6qqa088eba +// Prints xn--g6w251d ``` #### url.password @@ -929,16 +929,16 @@ any way. The `url.format(URL[, options])` method allows for basic customization of the output. ```js -const myURL = new URL('https://a:b@你好你好?abc#foo'); +const myURL = new URL('https://a:b@測試?abc#foo'); console.log(myURL.href); -// Prints https://a:b@xn--6qqa088eba/?abc#foo +// Prints https://a:b@xn--g6w251d/?abc#foo console.log(myURL.toString()); -// Prints https://a:b@xn--6qqa088eba/?abc#foo +// Prints https://a:b@xn--g6w251d/?abc#foo console.log(url.format(myURL, { fragment: false, unicode: true, auth: false })); -// Prints 'https://你好你好/?abc' +// Prints 'https://測試/?abc' ``` ### url.pathToFileURL(path) @@ -999,21 +999,21 @@ For example: `'#hash'`. The `host` property is the full lower-cased host portion of the URL, including the `port` if specified. -For example: `'sub.host.com:8080'`. +For example: `'sub.example.com:8080'`. #### urlObject.hostname The `hostname` property is the lower-cased host name portion of the `host` component *without* the `port` included. -For example: `'sub.host.com'`. +For example: `'sub.example.com'`. #### urlObject.href The `href` property is the full URL string that was parsed with both the `protocol` and `host` components converted to lower-case. -For example: `'http://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash'`. +For example: `'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'`. #### urlObject.path @@ -1282,11 +1282,11 @@ using the [Punycode][] algorithm. Note, however, that a hostname *may* contain *both* Punycode encoded and percent-encoded characters: ```js -const myURL = new URL('https://%CF%80.com/foo'); +const myURL = new URL('https://%CF%80.example.com/foo'); console.log(myURL.href); -// Prints https://xn--1xa.com/foo +// Prints https://xn--1xa.example.com/foo console.log(myURL.origin); -// Prints https://π.com +// Prints https://π.example.com ``` [`Error`]: errors.html#errors_class_error From 3b1baf63722b34c75e75d2e9f0f21e867e113332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D0=B2=D0=BE=D1=80=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=90=D0=BD=D0=B4=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 10 Oct 2018 03:05:16 +0300 Subject: [PATCH 059/178] doc: fix url example to match behavior Fixes one WHATWG URL example to match the actual behavior. PR-URL: https://github.com/nodejs/node/pull/23359 Fixes: https://github.com/nodejs/node/issues/22653 Reviewed-By: Rich Trott Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Colin Ihrig Reviewed-By: Vse Mozhet Byt Reviewed-By: Tiancheng "Timothy" Gu Reviewed-By: James M Snell --- doc/api/url.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/url.md b/doc/api/url.md index eaa146a8211942..d6f41a33f503cf 100644 --- a/doc/api/url.md +++ b/doc/api/url.md @@ -1286,7 +1286,7 @@ const myURL = new URL('https://%CF%80.example.com/foo'); console.log(myURL.href); // Prints https://xn--1xa.example.com/foo console.log(myURL.origin); -// Prints https://π.example.com +// Prints https://xn--1xa.example.com ``` [`Error`]: errors.html#errors_class_error From 98d1d53b2009b72ef85792977d3cf68e2118b381 Mon Sep 17 00:00:00 2001 From: Chris Nguyen Date: Fri, 12 Oct 2018 09:53:48 -0700 Subject: [PATCH 060/178] test: fix assertion order PR-URL: https://github.com/nodejs/node/pull/23533 Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/parallel/test-utf8-scripts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-utf8-scripts.js b/test/parallel/test-utf8-scripts.js index a67f291f8931aa..24ee6455973ed1 100644 --- a/test/parallel/test-utf8-scripts.js +++ b/test/parallel/test-utf8-scripts.js @@ -27,4 +27,4 @@ const assert = require('assert'); console.log('Σὲ γνωρίζω ἀπὸ τὴν κόψη'); -assert.strictEqual(true, /Hellö Wörld/.test('Hellö Wörld')); +assert.strictEqual(/Hellö Wörld/.test('Hellö Wörld'), true); From 2a1492a00dc07516e1446c9504a60c03dc4cef12 Mon Sep 17 00:00:00 2001 From: Artur Hayrapetyan Date: Fri, 12 Oct 2018 10:35:08 -0700 Subject: [PATCH 061/178] test: move tick.js from test/async-hooks to test/common MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23551 Reviewed-By: Tobias Nießen Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Matteo Collina Reviewed-By: Denys Otrishko Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Trivikram Kamat --- test/async-hooks/test-crypto-pbkdf2.js | 2 +- test/async-hooks/test-crypto-randomBytes.js | 2 +- test/async-hooks/test-embedder.api.async-resource.js | 2 +- test/async-hooks/test-enable-disable.js | 2 +- test/async-hooks/test-fseventwrap.js | 2 +- test/async-hooks/test-fsreqcallback-access.js | 2 +- test/async-hooks/test-fsreqcallback-readFile.js | 2 +- test/async-hooks/test-getaddrinforeqwrap.js | 2 +- test/async-hooks/test-getnameinforeqwrap.js | 2 +- test/async-hooks/test-httpparser.request.js | 2 +- test/async-hooks/test-httpparser.response.js | 2 +- test/async-hooks/test-immediate.js | 2 +- test/async-hooks/test-pipeconnectwrap.js | 2 +- test/async-hooks/test-pipewrap.js | 2 +- test/async-hooks/test-querywrap.js | 2 +- test/async-hooks/test-tcpwrap.js | 2 +- test/async-hooks/test-timers.setTimeout.js | 2 +- test/async-hooks/test-tlswrap.js | 2 +- test/async-hooks/test-ttywrap.readstream.js | 2 +- test/async-hooks/test-ttywrap.writestream.js | 2 +- test/async-hooks/test-udpwrap.js | 2 +- test/common/README.md | 6 ++++++ test/{async-hooks => common}/tick.js | 0 .../test-http2-session-gc-while-write-scheduled.js | 6 +----- test/parallel/test-worker-message-port-transfer-self.js | 8 +------- 25 files changed, 29 insertions(+), 33 deletions(-) rename test/{async-hooks => common}/tick.js (100%) diff --git a/test/async-hooks/test-crypto-pbkdf2.js b/test/async-hooks/test-crypto-pbkdf2.js index ed7270d191e903..4788ce4a580656 100644 --- a/test/async-hooks/test-crypto-pbkdf2.js +++ b/test/async-hooks/test-crypto-pbkdf2.js @@ -7,7 +7,7 @@ if (!common.isMainThread) common.skip('Worker bootstrapping works differently -> different async IDs'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const crypto = require('crypto'); diff --git a/test/async-hooks/test-crypto-randomBytes.js b/test/async-hooks/test-crypto-randomBytes.js index 67f5221a5e0b30..88cd4643ab6638 100644 --- a/test/async-hooks/test-crypto-randomBytes.js +++ b/test/async-hooks/test-crypto-randomBytes.js @@ -7,7 +7,7 @@ if (!common.isMainThread) common.skip('Worker bootstrapping works differently -> different async IDs'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const crypto = require('crypto'); diff --git a/test/async-hooks/test-embedder.api.async-resource.js b/test/async-hooks/test-embedder.api.async-resource.js index 89a889b20192e3..6f71a3e98cbf0f 100644 --- a/test/async-hooks/test-embedder.api.async-resource.js +++ b/test/async-hooks/test-embedder.api.async-resource.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const async_hooks = require('async_hooks'); const { AsyncResource } = async_hooks; diff --git a/test/async-hooks/test-enable-disable.js b/test/async-hooks/test-enable-disable.js index df093da608c29c..c14a125688d0f4 100644 --- a/test/async-hooks/test-enable-disable.js +++ b/test/async-hooks/test-enable-disable.js @@ -85,7 +85,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-fseventwrap.js b/test/async-hooks/test-fseventwrap.js index 56ada05b760eb6..8608075c822ded 100644 --- a/test/async-hooks/test-fseventwrap.js +++ b/test/async-hooks/test-fseventwrap.js @@ -3,7 +3,7 @@ const common = require('../common'); const assert = require('assert'); const initHooks = require('./init-hooks'); -const tick = require('./tick'); +const tick = require('../common/tick'); const { checkInvocations } = require('./hook-checks'); const fs = require('fs'); diff --git a/test/async-hooks/test-fsreqcallback-access.js b/test/async-hooks/test-fsreqcallback-access.js index 8983a3dcdf243f..b1b75f5693050d 100644 --- a/test/async-hooks/test-fsreqcallback-access.js +++ b/test/async-hooks/test-fsreqcallback-access.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const fs = require('fs'); diff --git a/test/async-hooks/test-fsreqcallback-readFile.js b/test/async-hooks/test-fsreqcallback-readFile.js index 8301835ec8153f..3ae31378cd3199 100644 --- a/test/async-hooks/test-fsreqcallback-readFile.js +++ b/test/async-hooks/test-fsreqcallback-readFile.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const fs = require('fs'); diff --git a/test/async-hooks/test-getaddrinforeqwrap.js b/test/async-hooks/test-getaddrinforeqwrap.js index 298c4931cce74e..0cd6ff39676424 100644 --- a/test/async-hooks/test-getaddrinforeqwrap.js +++ b/test/async-hooks/test-getaddrinforeqwrap.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const dns = require('dns'); diff --git a/test/async-hooks/test-getnameinforeqwrap.js b/test/async-hooks/test-getnameinforeqwrap.js index a32814e5b5df4a..50aa623458f41c 100644 --- a/test/async-hooks/test-getnameinforeqwrap.js +++ b/test/async-hooks/test-getnameinforeqwrap.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const dns = require('dns'); diff --git a/test/async-hooks/test-httpparser.request.js b/test/async-hooks/test-httpparser.request.js index 71fccc0a858921..cb56419137163a 100644 --- a/test/async-hooks/test-httpparser.request.js +++ b/test/async-hooks/test-httpparser.request.js @@ -3,7 +3,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-httpparser.response.js b/test/async-hooks/test-httpparser.response.js index eea40b14d16b68..b1f804ef7d42a9 100644 --- a/test/async-hooks/test-httpparser.response.js +++ b/test/async-hooks/test-httpparser.response.js @@ -3,7 +3,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-immediate.js b/test/async-hooks/test-immediate.js index 3ef782eb5fa66c..7b51902f77cbeb 100644 --- a/test/async-hooks/test-immediate.js +++ b/test/async-hooks/test-immediate.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-pipeconnectwrap.js b/test/async-hooks/test-pipeconnectwrap.js index df4b8110e67ec4..6c68186e2f239f 100644 --- a/test/async-hooks/test-pipeconnectwrap.js +++ b/test/async-hooks/test-pipeconnectwrap.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-pipewrap.js b/test/async-hooks/test-pipewrap.js index f2b5bf985225b9..f04f900606a3de 100644 --- a/test/async-hooks/test-pipewrap.js +++ b/test/async-hooks/test-pipewrap.js @@ -5,7 +5,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const spawn = require('child_process').spawn; diff --git a/test/async-hooks/test-querywrap.js b/test/async-hooks/test-querywrap.js index 7d71a183130881..f6e7e12e81e9c0 100644 --- a/test/async-hooks/test-querywrap.js +++ b/test/async-hooks/test-querywrap.js @@ -3,7 +3,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const dns = require('dns'); diff --git a/test/async-hooks/test-tcpwrap.js b/test/async-hooks/test-tcpwrap.js index f3100aba0f0aaa..a01a1fc4fe21d4 100644 --- a/test/async-hooks/test-tcpwrap.js +++ b/test/async-hooks/test-tcpwrap.js @@ -6,7 +6,7 @@ if (!common.hasIPv6) common.skip('IPv6 support required'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const net = require('net'); diff --git a/test/async-hooks/test-timers.setTimeout.js b/test/async-hooks/test-timers.setTimeout.js index 8f1d3222ddf662..748fa5565eee64 100644 --- a/test/async-hooks/test-timers.setTimeout.js +++ b/test/async-hooks/test-timers.setTimeout.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const TIMEOUT = common.platformTimeout(100); diff --git a/test/async-hooks/test-tlswrap.js b/test/async-hooks/test-tlswrap.js index 79cf1ab689e997..354cd7ad0cd91d 100644 --- a/test/async-hooks/test-tlswrap.js +++ b/test/async-hooks/test-tlswrap.js @@ -8,7 +8,7 @@ const assert = require('assert'); const fixtures = require('../common/fixtures'); const tls = require('tls'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-ttywrap.readstream.js b/test/async-hooks/test-ttywrap.readstream.js index 65853da1f7ab17..bf81a3266c1fb6 100644 --- a/test/async-hooks/test-ttywrap.readstream.js +++ b/test/async-hooks/test-ttywrap.readstream.js @@ -4,7 +4,7 @@ const common = require('../common'); const assert = require('assert'); // general hook test setup -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-ttywrap.writestream.js b/test/async-hooks/test-ttywrap.writestream.js index d8a453e7be2700..44f32e80f015c2 100644 --- a/test/async-hooks/test-ttywrap.writestream.js +++ b/test/async-hooks/test-ttywrap.writestream.js @@ -4,7 +4,7 @@ const common = require('../common'); const assert = require('assert'); // general hook test setup -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); diff --git a/test/async-hooks/test-udpwrap.js b/test/async-hooks/test-udpwrap.js index 5770ac060edce8..0a0e03c5d5148d 100644 --- a/test/async-hooks/test-udpwrap.js +++ b/test/async-hooks/test-udpwrap.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const tick = require('./tick'); +const tick = require('../common/tick'); const initHooks = require('./init-hooks'); const { checkInvocations } = require('./hook-checks'); const dgram = require('dgram'); diff --git a/test/common/README.md b/test/common/README.md index 63b7905113f577..6d86e51d5eb0e8 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -13,6 +13,7 @@ This directory contains modules used to test the Node.js implementation. * [Heap dump checker module](#heap-dump-checker-module) * [HTTP2 module](#http2-module) * [Internet module](#internet-module) +* [tick module](#tick-module) * [tmpdir module](#tmpdir-module) * [WPT module](#wpt-module) @@ -744,6 +745,11 @@ a full `setImmediate()` invocation passes. should not be in scope when `listener.ongc()` is created. +## tick Module + +The `tick` module provides a helper function that can be used to call a callback +after a given number of event loop "ticks". + ## tmpdir Module The `tmpdir` module supports the use of a temporary directory for testing. diff --git a/test/async-hooks/tick.js b/test/common/tick.js similarity index 100% rename from test/async-hooks/tick.js rename to test/common/tick.js diff --git a/test/parallel/test-http2-session-gc-while-write-scheduled.js b/test/parallel/test-http2-session-gc-while-write-scheduled.js index bb23760cebf967..aef9d9571d5559 100644 --- a/test/parallel/test-http2-session-gc-while-write-scheduled.js +++ b/test/parallel/test-http2-session-gc-while-write-scheduled.js @@ -6,6 +6,7 @@ if (!common.hasCrypto) common.skip('missing crypto'); const http2 = require('http2'); const makeDuplexPair = require('../common/duplexpair'); +const tick = require('../common/tick'); // This tests that running garbage collection while an Http2Session has // a write *scheduled*, it will survive that garbage collection. @@ -25,8 +26,3 @@ const makeDuplexPair = require('../common/duplexpair'); global.gc(); }); } - -function tick(n, cb) { - if (n--) setImmediate(tick, n, cb); - else cb(); -} diff --git a/test/parallel/test-worker-message-port-transfer-self.js b/test/parallel/test-worker-message-port-transfer-self.js index c6f29163dfc643..6b8addf0229eac 100644 --- a/test/parallel/test-worker-message-port-transfer-self.js +++ b/test/parallel/test-worker-message-port-transfer-self.js @@ -5,6 +5,7 @@ const common = require('../common'); const assert = require('assert'); const util = require('util'); const { MessageChannel } = require('worker_threads'); +const tick = require('../common/tick'); const { port1, port2 } = new MessageChannel(); @@ -42,10 +43,3 @@ port2.onmessage = common.mustCall((message) => { }); }); port1.postMessage(2); - -function tick(n, cb) { - if (n > 0) - setImmediate(() => tick(n - 1, cb)); - else - cb(); -} From e096df374305c41195541d641eae745370c0aa1f Mon Sep 17 00:00:00 2001 From: Artur Hayrapetyan Date: Fri, 12 Oct 2018 23:08:58 -0700 Subject: [PATCH 062/178] doc: add "tick" function name and argument description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23551 Reviewed-By: Tobias Nießen Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Matteo Collina Reviewed-By: Denys Otrishko Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Trivikram Kamat --- test/common/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/common/README.md b/test/common/README.md index 6d86e51d5eb0e8..afc267ba7cb16c 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -750,6 +750,11 @@ should not be in scope when `listener.ongc()` is created. The `tick` module provides a helper function that can be used to call a callback after a given number of event loop "ticks". +### tick(x, cb) + +* `x` [<number>] Number of event loop "ticks". +* `cb` [<Function>] A callback function. + ## tmpdir Module The `tmpdir` module supports the use of a temporary directory for testing. From b2e133aeb7913bfbad15651f86d716425765f280 Mon Sep 17 00:00:00 2001 From: Carolina Pinzon Date: Fri, 12 Oct 2018 10:41:15 -0700 Subject: [PATCH 063/178] test: fix assertion order test-tls-server-verify PR-URL: https://github.com/nodejs/node/pull/23549 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-tls-server-verify.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-tls-server-verify.js b/test/parallel/test-tls-server-verify.js index 6039d13e8216c5..2fd815d627fdf7 100644 --- a/test/parallel/test-tls-server-verify.js +++ b/test/parallel/test-tls-server-verify.js @@ -226,14 +226,14 @@ function runClient(prefix, port, options, cb) { client.on('exit', function(code) { if (options.shouldReject) { assert.strictEqual( - true, rejected, + rejected, true, `${prefix}${options.name} NOT rejected, but should have been`); } else { assert.strictEqual( - false, rejected, + rejected, false, `${prefix}${options.name} rejected, but should NOT have been`); assert.strictEqual( - options.shouldAuth, authed, + authed, options.shouldAuth, `${prefix}${options.name} authed is ${authed} but should have been ${ options.shouldAuth}`); } From 039965085dc24c4c47fb6816d4cf23ed915558f9 Mon Sep 17 00:00:00 2001 From: Steven Scott Date: Fri, 12 Oct 2018 10:00:21 -0700 Subject: [PATCH 064/178] lib: switch to internalBinding for cjs loader Switch the cjs loader to use internalBinding instead of process.binding for reading command line options. PR-URL: https://github.com/nodejs/node/pull/23492 Reviewed-By: James M Snell Reviewed-By: Gus Caplan Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- lib/internal/modules/cjs/loader.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 2d5ed2189d467c..975c688edab3d7 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -41,9 +41,10 @@ const { stripBOM, stripShebang } = require('internal/modules/cjs/helpers'); -const preserveSymlinks = !!process.binding('config').preserveSymlinks; -const preserveSymlinksMain = !!process.binding('config').preserveSymlinksMain; -const experimentalModules = !!process.binding('config').experimentalModules; +const options = internalBinding('options'); +const preserveSymlinks = options.getOptions('--preserve-symlinks'); +const preserveSymlinksMain = options.getOptions('--preserve-symlinks-main'); +const experimentalModules = options.getOptions('--experimental-modules'); const { ERR_INVALID_ARG_TYPE, From d5824f8552f1327f94f57a62111dff3098bab343 Mon Sep 17 00:00:00 2001 From: Carl Richmond Date: Fri, 12 Oct 2018 10:03:58 -0700 Subject: [PATCH 065/178] test: fix assertion argument order PR-URL: https://github.com/nodejs/node/pull/23489 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-http-set-cookies.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-http-set-cookies.js b/test/parallel/test-http-set-cookies.js index c307bda73a3515..7a57523b04af9c 100644 --- a/test/parallel/test-http-set-cookies.js +++ b/test/parallel/test-http-set-cookies.js @@ -47,8 +47,8 @@ server.on('listening', function() { http.get({ port: this.address().port, path: '/one' }, function(res) { // set-cookie headers are always return in an array. // even if there is only one. - assert.deepStrictEqual(['A'], res.headers['set-cookie']); - assert.strictEqual('text/plain', res.headers['content-type']); + assert.deepStrictEqual(res.headers['set-cookie'], ['A']); + assert.strictEqual(res.headers['content-type'], 'text/plain'); res.on('data', function(chunk) { console.log(chunk.toString()); @@ -62,8 +62,8 @@ server.on('listening', function() { // two set-cookie headers http.get({ port: this.address().port, path: '/two' }, function(res) { - assert.deepStrictEqual(['A', 'B'], res.headers['set-cookie']); - assert.strictEqual('text/plain', res.headers['content-type']); + assert.deepStrictEqual(res.headers['set-cookie'], ['A', 'B']); + assert.strictEqual(res.headers['content-type'], 'text/plain'); res.on('data', function(chunk) { console.log(chunk.toString()); From 61f5543e5ba202437ff9913e8141a0509cab14de Mon Sep 17 00:00:00 2001 From: Kayla Altepeter Date: Fri, 12 Oct 2018 09:49:09 -0700 Subject: [PATCH 066/178] test: rename process.argv[0] to process.execPath, rename ex to err PR-URL: https://github.com/nodejs/node/pull/23488 Reviewed-By: Colin Ihrig Reviewed-By: Bryan English Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-common.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-common.js b/test/parallel/test-common.js index 51e0302868cbe6..a133204437facb 100644 --- a/test/parallel/test-common.js +++ b/test/parallel/test-common.js @@ -29,8 +29,8 @@ const { execFile } = require('child_process'); // test for leaked global detection { const p = fixtures.path('leakedGlobal.js'); - execFile(process.argv[0], [p], common.mustCall((ex, stdout, stderr) => { - assert.notStrictEqual(ex.code, 0); + execFile(process.execPath, [p], common.mustCall((err, stdout, stderr) => { + assert.notStrictEqual(err.code, 0); assert.ok(/\bAssertionError\b.*\bUnexpected global\b.*\bgc\b/.test(stderr)); })); } @@ -85,8 +85,8 @@ const failFixtures = [ ]; for (const p of failFixtures) { const [file, expected] = p; - execFile(process.argv[0], [file], common.mustCall((ex, stdout, stderr) => { - assert.ok(ex); + execFile(process.execPath, [file], common.mustCall((err, stdout, stderr) => { + assert.ok(err); assert.strictEqual(stderr, ''); const firstLine = stdout.split('\n').shift(); assert.strictEqual(firstLine, expected); From fd289959c8307e33da043cad3fc6b72aac802e82 Mon Sep 17 00:00:00 2001 From: Felix Schlenkrich Date: Fri, 12 Oct 2018 09:33:41 -0700 Subject: [PATCH 067/178] test: fix strictEqual argument order PR-URL: https://github.com/nodejs/node/pull/23490 Reviewed-By: Anatoli Papirovski Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater --- test/parallel/test-http-status-message.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-http-status-message.js b/test/parallel/test-http-status-message.js index 10d17295814e84..29b31a35a5708a 100644 --- a/test/parallel/test-http-status-message.js +++ b/test/parallel/test-http-status-message.js @@ -33,18 +33,22 @@ const s = http.createServer(function(req, res) { s.listen(0, test); - function test() { const bufs = []; - const client = net.connect(this.address().port, function() { - client.write('GET / HTTP/1.1\r\nConnection: close\r\n\r\n'); - }); + const client = net.connect( + this.address().port, + function() { + client.write('GET / HTTP/1.1\r\nConnection: close\r\n\r\n'); + } + ); client.on('data', function(chunk) { bufs.push(chunk); }); client.on('end', function() { - const head = Buffer.concat(bufs).toString('latin1').split('\r\n')[0]; - assert.strictEqual('HTTP/1.1 200 Custom Message', head); + const head = Buffer.concat(bufs) + .toString('latin1') + .split('\r\n')[0]; + assert.strictEqual(head, 'HTTP/1.1 200 Custom Message'); console.log('ok'); s.close(); }); From 5a30621d1620b2ef06e3c611b69ce6ad1fa58269 Mon Sep 17 00:00:00 2001 From: Felix Schlenkrich Date: Fri, 12 Oct 2018 11:06:32 -0700 Subject: [PATCH 068/178] doc: add info how to run single tests to BUILDING.md The information on how to run single tests was missing in BUILDING.md. PR-URL: https://github.com/nodejs/node/pull/23490 Fixes: https://github.com/nodejs/node/issues/23491 Reviewed-By: Anatoli Papirovski Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater --- BUILDING.md | 122 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 47 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index d532394532a5c2..c34d210e25a470 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -10,40 +10,42 @@ file a new issue. ## Table of Contents -* [Supported platforms](#supported-platforms) - * [Input](#input) - * [Strategy](#strategy) - * [Supported platforms](#supported-platforms-1) - * [Supported toolchains](#supported-toolchains) - * [Unix](#unix) - * [AIX](#aix) - * [Windows](#windows) - * [OpenSSL asm support](#openssl-asm-support) -* [Building Node.js on supported platforms](#building-nodejs-on-supported-platforms) - * [Unix/macOS](#unixmacos) - * [Prerequisites](#prerequisites) - * [Building Node.js](#building-nodejs-1) - * [Running Tests](#running-tests) - * [Building the documentation](#building-the-documentation) - * [Building a debug build](#building-a-debug-build) - * [Windows](#windows-1) - * [Android/Android-based devices (e.g. Firefox OS)](#androidandroid-based-devices-eg-firefox-os) - * [`Intl` (ECMA-402) support](#intl-ecma-402-support) - * [Default: `small-icu` (English only) support](#default-small-icu-english-only-support) - * [Build with full ICU support (all locales supported by ICU)](#build-with-full-icu-support-all-locales-supported-by-icu) - * [Unix/macOS](#unixmacos-1) - * [Windows](#windows-2) - * [Building without Intl support](#building-without-intl-support) - * [Unix/macOS](#unixmacos-2) - * [Windows](#windows-3) - * [Use existing installed ICU (Unix/macOS only)](#use-existing-installed-icu-unixmacos-only) - * [Build with a specific ICU](#build-with-a-specific-icu) - * [Unix/macOS](#unixmacos-3) - * [Windows](#windows-4) -* [Building Node.js with FIPS-compliant OpenSSL](#building-nodejs-with-fips-compliant-openssl) -* [Building Node.js with external core modules](#building-nodejs-with-external-core-modules) - * [Unix/macOS](#unixmacos-4) - * [Windows](#windows-5) +- [Building Node.js](#building-nodejs) + - [Table of Contents](#table-of-contents) + - [Supported platforms](#supported-platforms) + - [Input](#input) + - [Strategy](#strategy) + - [Supported platforms](#supported-platforms) + - [Supported toolchains](#supported-toolchains) + - [Unix](#unix) + - [AIX](#aix) + - [Windows](#windows) + - [OpenSSL asm support](#openssl-asm-support) + - [Building Node.js on supported platforms](#building-nodejs-on-supported-platforms) + - [Unix/macOS](#unixmacos) + - [Prerequisites](#prerequisites) + - [Building Node.js](#building-nodejs) + - [Running Tests](#running-tests) + - [Building the documentation](#building-the-documentation) + - [Building a debug build](#building-a-debug-build) + - [Windows](#windows) + - [Android/Android-based devices (e.g. Firefox OS)](#androidandroid-based-devices-eg-firefox-os) + - [`Intl` (ECMA-402) support:](#intl-ecma-402-support) + - [Default: `small-icu` (English only) support](#default-small-icu-english-only-support) + - [Build with full ICU support (all locales supported by ICU):](#build-with-full-icu-support-all-locales-supported-by-icu) + - [Unix/macOS:](#unixmacos) + - [Windows:](#windows) + - [Building without Intl support](#building-without-intl-support) + - [Unix/macOS:](#unixmacos) + - [Windows:](#windows) + - [Use existing installed ICU (Unix/macOS only):](#use-existing-installed-icu-unixmacos-only) + - [Build with a specific ICU:](#build-with-a-specific-icu) + - [Unix/macOS](#unixmacos) + - [Windows](#windows) + - [Building Node.js with FIPS-compliant OpenSSL](#building-nodejs-with-fips-compliant-openssl) + - [Building Node.js with external core modules](#building-nodejs-with-external-core-modules) + - [Unix/macOS](#unixmacos) + - [Windows](#windows) ## Supported platforms @@ -73,19 +75,19 @@ The community does not build or test against end-of-life distributions (EoL). Thus, we do not recommend that you use Node on end-of-life or unsupported platforms in production. -| System | Support type | Version | Architectures | Notes | -|--------------|--------------|----------------------------------|----------------------|------------------| -| GNU/Linux | Tier 1 | kernel >= 2.6.32, glibc >= 2.12 | x64, arm | | -| GNU/Linux | Tier 1 | kernel >= 3.10, glibc >= 2.17 | arm64 | | -| macOS/OS X | Tier 1 | >= 10.11 | x64 | | -| Windows | Tier 1 | >= Windows 7/2008 R2/2012 R2 | x86, x64 | [2](#fn2),[3](#fn3),[4](#fn4) | -| SmartOS | Tier 2 | >= 15 < 16.4 | x86, x64 | [1](#fn1) | -| FreeBSD | Tier 2 | >= 11 | x64 | | -| GNU/Linux | Tier 2 | kernel >= 3.13.0, glibc >= 2.19 | ppc64le >=power8 | | -| AIX | Tier 2 | >= 7.1 TL04 | ppc64be >=power7 | | -| GNU/Linux | Tier 2 | kernel >= 3.10, glibc >= 2.17 | s390x | | -| GNU/Linux | Experimental | kernel >= 2.6.32, glibc >= 2.12 | x86 | limited CI | -| Linux (musl) | Experimental | musl >= 1.0 | x64 | | +| System | Support type | Version | Architectures | Notes | +| ------------ | ------------ | ------------------------------- | ---------------- | ----------------------------- | +| GNU/Linux | Tier 1 | kernel >= 2.6.32, glibc >= 2.12 | x64, arm | | +| GNU/Linux | Tier 1 | kernel >= 3.10, glibc >= 2.17 | arm64 | | +| macOS/OS X | Tier 1 | >= 10.11 | x64 | | +| Windows | Tier 1 | >= Windows 7/2008 R2/2012 R2 | x86, x64 | [2](#fn2),[3](#fn3),[4](#fn4) | +| SmartOS | Tier 2 | >= 15 < 16.4 | x86, x64 | [1](#fn1) | +| FreeBSD | Tier 2 | >= 11 | x64 | | +| GNU/Linux | Tier 2 | kernel >= 3.13.0, glibc >= 2.19 | ppc64le >=power8 | | +| AIX | Tier 2 | >= 7.1 TL04 | ppc64be >=power7 | | +| GNU/Linux | Tier 2 | kernel >= 3.10, glibc >= 2.17 | s390x | | +| GNU/Linux | Experimental | kernel >= 2.6.32, glibc >= 2.12 | x86 | limited CI | +| Linux (musl) | Experimental | musl >= 1.0 | x64 | | 1: The gcc4.8-libs package needs to be installed, because node binaries have been built with GCC 4.8, for which runtime libraries are not @@ -223,6 +225,32 @@ $ make -j4 test `make -j4 test` does a full check on the codebase, including running linters and documentation tests. +If you are updating tests and just want to run a single test to check it: + +```text +$ python tools/test.py -J --mode=release parallel/test-stream2-transform +``` + +You can execute the entire suite of tests for a given subsystem +by providing the name of a subsystem: + +```text +$ python tools/test.py -J --mode=release child-process +``` + +If you want to check the other options, please refer to the help by using +the `--help` option + +```text +$ python tools/test.py --help +``` + +You can usually run tests directly with node: + +```text +$ ./node ./test/parallel/test-stream2-transform.js +``` + Optionally, continue below. To run the tests and generate code coverage reports: From 661e7323ee7b53bc85688e397b06042b2f143671 Mon Sep 17 00:00:00 2001 From: chrisforrette Date: Fri, 12 Oct 2018 10:08:45 -0700 Subject: [PATCH 069/178] test: modernizing test-dgram-listen-after-bind with arrow functions PR-URL: https://github.com/nodejs/node/pull/23500 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-dgram-listen-after-bind.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-dgram-listen-after-bind.js b/test/parallel/test-dgram-listen-after-bind.js index 70a828f32cabe9..6a7e156e008a77 100644 --- a/test/parallel/test-dgram-listen-after-bind.js +++ b/test/parallel/test-dgram-listen-after-bind.js @@ -29,16 +29,16 @@ const socket = dgram.createSocket('udp4'); socket.bind(); let fired = false; -const timer = setTimeout(function() { +const timer = setTimeout(() => { socket.close(); }, 100); -socket.on('listening', function() { +socket.on('listening', () => { clearTimeout(timer); fired = true; socket.close(); }); -socket.on('close', function() { +socket.on('close', () => { assert(fired, 'listening should fire after bind'); }); From af68c554a5fd3b3595dedf64ed038fea2b761e66 Mon Sep 17 00:00:00 2001 From: "@CAYdenberg" <@CAYdenberg> Date: Fri, 12 Oct 2018 10:11:12 -0700 Subject: [PATCH 070/178] test: fix argument order in asserts PR-URL: https://github.com/nodejs/node/pull/23499 Reviewed-By: Guy Bedford Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- .../test-inspector-async-stack-traces-promise-then.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sequential/test-inspector-async-stack-traces-promise-then.js b/test/sequential/test-inspector-async-stack-traces-promise-then.js index 165db81c83d7fe..11905431d5e524 100644 --- a/test/sequential/test-inspector-async-stack-traces-promise-then.js +++ b/test/sequential/test-inspector-async-stack-traces-promise-then.js @@ -45,7 +45,7 @@ async function runTests() { 'break2', 'runTest:8'); await session.runToCompletion(); - assert.strictEqual(0, (await instance.expectShutdown()).exitCode); + assert.strictEqual((await instance.expectShutdown()).exitCode, 0); } function debuggerPausedAt(msg, functionName, previousTickLocation) { From f8af209f428bd1233d5de5f399f74daaf359cb6e Mon Sep 17 00:00:00 2001 From: Jenna Zeigen Date: Fri, 12 Oct 2018 09:55:19 -0700 Subject: [PATCH 071/178] test: use arrow functions in test-exception-handler PR-URL: https://github.com/nodejs/node/pull/23498 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-exception-handler.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-exception-handler.js b/test/parallel/test-exception-handler.js index 3ce9ad511ace4e..ca25ccd6effcaa 100644 --- a/test/parallel/test-exception-handler.js +++ b/test/parallel/test-exception-handler.js @@ -25,16 +25,16 @@ const assert = require('assert'); const MESSAGE = 'catch me if you can'; -process.on('uncaughtException', common.mustCall(function(e) { +process.on('uncaughtException', common.mustCall((e) => { console.log('uncaught exception! 1'); assert.strictEqual(MESSAGE, e.message); })); -process.on('uncaughtException', common.mustCall(function(e) { +process.on('uncaughtException', common.mustCall((e) => { console.log('uncaught exception! 2'); assert.strictEqual(MESSAGE, e.message); })); -setTimeout(function() { +setTimeout(() => { throw new Error(MESSAGE); }, 10); From 656a0acafd014db2844af0df27f98b0d74cf2a2f Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Fri, 12 Oct 2018 09:40:51 -0700 Subject: [PATCH 072/178] lib: removed unused variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change removes a variable that is not being used in the file. PR-URL: https://github.com/nodejs/node/pull/23497 Reviewed-By: Anna Henningsen Reviewed-By: Tobias Nießen Reviewed-By: Colin Ihrig Reviewed-By: Guy Bedford Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- lib/internal/url.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/url.js b/lib/internal/url.js index f6cf35323389ba..518c745b41e760 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -458,7 +458,7 @@ Object.defineProperties(URL.prototype, { if (ctx.path.length > 0) { try { return (new URL(ctx.path[0])).origin; - } catch (err) { + } catch { // fall through... do nothing } } From 65e225383e467233f532d7e2afbeb53723d4cfbf Mon Sep 17 00:00:00 2001 From: Greg Goforth Date: Fri, 12 Oct 2018 10:12:42 -0700 Subject: [PATCH 073/178] test: modernized test to use arrow functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23496 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Tobias Nießen Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat --- test/parallel/test-dgram-send-callback-multi-buffer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-dgram-send-callback-multi-buffer.js b/test/parallel/test-dgram-send-callback-multi-buffer.js index f77b5618450095..09f01f6e8adccc 100644 --- a/test/parallel/test-dgram-send-callback-multi-buffer.js +++ b/test/parallel/test-dgram-send-callback-multi-buffer.js @@ -6,19 +6,19 @@ const dgram = require('dgram'); const client = dgram.createSocket('udp4'); -const messageSent = common.mustCall(function messageSent(err, bytes) { +const messageSent = common.mustCall((err, bytes) => { assert.strictEqual(bytes, buf1.length + buf2.length); }); const buf1 = Buffer.alloc(256, 'x'); const buf2 = Buffer.alloc(256, 'y'); -client.on('listening', function() { - const port = this.address().port; +client.on('listening', () => { + const port = client.address().port; client.send([buf1, buf2], port, common.localhostIPv4, messageSent); }); -client.on('message', common.mustCall(function onMessage(buf, info) { +client.on('message', common.mustCall((buf, info) => { const expected = Buffer.concat([buf1, buf2]); assert.ok(buf.equals(expected), 'message was received correctly'); client.close(); From 3fda9860ec9c18ace9d0e78f0bc911cdc4b722dd Mon Sep 17 00:00:00 2001 From: scabhi Date: Fri, 12 Oct 2018 09:55:49 -0700 Subject: [PATCH 074/178] test: reversed arguments in strictqual to reflect documentation PR-URL: https://github.com/nodejs/node/pull/23494 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/known_issues/test-inspector-cluster-port-clash.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/known_issues/test-inspector-cluster-port-clash.js b/test/known_issues/test-inspector-cluster-port-clash.js index 9fa2b483568c93..0333ffcb98751c 100644 --- a/test/known_issues/test-inspector-cluster-port-clash.js +++ b/test/known_issues/test-inspector-cluster-port-clash.js @@ -41,7 +41,7 @@ function serialFork() { if (code === 12) { return assert.fail(`worker ${worker.id} failed to bind port`); } - assert.strictEqual(0, code); + assert.strictEqual(code, 0); })); worker.on('disconnect', common.mustCall(res)); }); From 98f170fb8665aa9a94c47cabb4a7107440f4dbfe Mon Sep 17 00:00:00 2001 From: Robert Monks Date: Fri, 12 Oct 2018 12:11:25 -0500 Subject: [PATCH 075/178] test: update function keywords to fat arrows Updated all the function keywords to fat arrow implementations in test/parallel/test-event-emitter-no-error-provided-to-error-event.js PR-URL: https://github.com/nodejs/node/pull/23493 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- .../test-event-emitter-no-error-provided-to-error-event.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-event-emitter-no-error-provided-to-error-event.js b/test/parallel/test-event-emitter-no-error-provided-to-error-event.js index 1c56c7bc759215..5c30b54533133d 100644 --- a/test/parallel/test-event-emitter-no-error-provided-to-error-event.js +++ b/test/parallel/test-event-emitter-no-error-provided-to-error-event.js @@ -29,7 +29,7 @@ const domain = require('domain'); const e = new events.EventEmitter(); const d = domain.create(); d.add(e); - d.on('error', common.mustCall(function(er) { + d.on('error', common.mustCall((er) => { assert(er instanceof Error, 'error created'); })); e.emit('error'); @@ -39,7 +39,7 @@ for (const arg of [false, null, undefined]) { const e = new events.EventEmitter(); const d = domain.create(); d.add(e); - d.on('error', common.mustCall(function(er) { + d.on('error', common.mustCall((er) => { assert(er instanceof Error, 'error created'); })); e.emit('error', arg); @@ -49,7 +49,7 @@ for (const arg of [42, 'fortytwo', true]) { const e = new events.EventEmitter(); const d = domain.create(); d.add(e); - d.on('error', common.mustCall(function(er) { + d.on('error', common.mustCall((er) => { assert.strictEqual(er, arg); })); e.emit('error', arg); From ecd9bc03f9c989ff6952a7f797b704b20e5cdcd3 Mon Sep 17 00:00:00 2001 From: Andrew MacCuaig Date: Fri, 12 Oct 2018 10:02:17 -0700 Subject: [PATCH 076/178] test: fix ordering of assertion values --- test/addons-napi/test_general/testInstanceOf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/addons-napi/test_general/testInstanceOf.js b/test/addons-napi/test_general/testInstanceOf.js index 3b37188ab4d20c..53455a0025a0e2 100644 --- a/test/addons-napi/test_general/testInstanceOf.js +++ b/test/addons-napi/test_general/testInstanceOf.js @@ -18,12 +18,12 @@ const v8TestsDirExists = fs.existsSync(v8TestsDir); // See for instance deps/v8/test/mjsunit/instanceof.js // eslint-disable-next-line no-unused-vars function assertTrue(assertion) { - return assert.strictEqual(true, assertion); + return assert.strictEqual(assertion, true); } // eslint-disable-next-line no-unused-vars function assertFalse(assertion) { - assert.strictEqual(false, assertion); + assert.strictEqual(assertion, false); } // eslint-disable-next-line no-unused-vars From 90e72daad5b9020e90b11c9f125cbe996354d679 Mon Sep 17 00:00:00 2001 From: Alejandro Oviedo Garcia Date: Fri, 12 Oct 2018 14:17:01 -0300 Subject: [PATCH 077/178] test: fix strictEqual assertion arguments PR-URL: https://github.com/nodejs/node/pull/23508 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-buffer-alloc.js | 104 ++++++++++++++--------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index 6039a17eedb5fd..ca790c933d2242 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -7,7 +7,7 @@ const SlowBuffer = require('buffer').SlowBuffer; const b = Buffer.allocUnsafe(1024); -assert.strictEqual(1024, b.length); +assert.strictEqual(b.length, 1024); b[0] = -1; assert.strictEqual(b[0], 255); @@ -21,17 +21,17 @@ for (let i = 0; i < 1024; i++) { } const c = Buffer.allocUnsafe(512); -assert.strictEqual(512, c.length); +assert.strictEqual(c.length, 512); const d = Buffer.from([]); -assert.strictEqual(0, d.length); +assert.strictEqual(d.length, 0); // Test offset properties { const b = Buffer.alloc(128); - assert.strictEqual(128, b.length); - assert.strictEqual(0, b.byteOffset); - assert.strictEqual(0, b.offset); + assert.strictEqual(b.length, 128); + assert.strictEqual(b.byteOffset, 0); + assert.strictEqual(b.offset, 0); } // Test creating a Buffer from a Uint32Array @@ -176,7 +176,7 @@ Buffer.alloc(1).write('', 1, 0); { const slice = b.slice(100, 150); - assert.strictEqual(50, slice.length); + assert.strictEqual(slice.length, 50); for (let i = 0; i < 50; i++) { assert.strictEqual(b[100 + i], slice[i]); } @@ -213,13 +213,13 @@ Buffer.alloc(1).write('', 1, 0); const a = Buffer.allocUnsafe(8); for (let i = 0; i < 8; i++) a[i] = i; const b = a.slice(4, 8); - assert.strictEqual(4, b[0]); - assert.strictEqual(5, b[1]); - assert.strictEqual(6, b[2]); - assert.strictEqual(7, b[3]); + assert.strictEqual(b[0], 4); + assert.strictEqual(b[1], 5); + assert.strictEqual(b[2], 6); + assert.strictEqual(b[3], 7); const c = b.slice(2, 4); - assert.strictEqual(6, c[0]); - assert.strictEqual(7, c[1]); + assert.strictEqual(c[0], 6); + assert.strictEqual(c[1], 7); } { @@ -287,7 +287,7 @@ Buffer.alloc(1).write('', 1, 0); // // Test toString('base64') // -assert.strictEqual('TWFu', (Buffer.from('Man')).toString('base64')); +assert.strictEqual((Buffer.from('Man')).toString('base64'), 'TWFu'); { // test that regular and URL-safe base64 both work @@ -487,7 +487,7 @@ assert.deepStrictEqual(Buffer.from(' YWJvcnVtLg', 'base64'), const b = Buffer.from(s); for (let i = 0; i < l; i++) { - assert.strictEqual('h'.charCodeAt(0), b[i]); + assert.strictEqual(b[i], 'h'.charCodeAt(0)); } const sb = b.toString(); @@ -557,16 +557,16 @@ function buildBuffer(data) { const x = buildBuffer([0x81, 0xa3, 0x66, 0x6f, 0x6f, 0xa3, 0x62, 0x61, 0x72]); -assert.strictEqual('', x.inspect()); +assert.strictEqual(x.inspect(), ''); { const z = x.slice(4); - assert.strictEqual(5, z.length); - assert.strictEqual(0x6f, z[0]); - assert.strictEqual(0xa3, z[1]); - assert.strictEqual(0x62, z[2]); - assert.strictEqual(0x61, z[3]); - assert.strictEqual(0x72, z[4]); + assert.strictEqual(z.length, 5); + assert.strictEqual(z[0], 0x6f); + assert.strictEqual(z[1], 0xa3); + assert.strictEqual(z[2], 0x62); + assert.strictEqual(z[3], 0x61); + assert.strictEqual(z[4], 0x72); } { @@ -576,27 +576,27 @@ assert.strictEqual('', x.inspect()); { const z = x.slice(0, 4); - assert.strictEqual(4, z.length); - assert.strictEqual(0x81, z[0]); - assert.strictEqual(0xa3, z[1]); + assert.strictEqual(z.length, 4); + assert.strictEqual(z[0], 0x81); + assert.strictEqual(z[1], 0xa3); } { const z = x.slice(0, 9); - assert.strictEqual(9, z.length); + assert.strictEqual(z.length, 9); } { const z = x.slice(1, 4); - assert.strictEqual(3, z.length); - assert.strictEqual(0xa3, z[0]); + assert.strictEqual(z.length, 3); + assert.strictEqual(z[0], 0xa3); } { const z = x.slice(2, 4); - assert.strictEqual(2, z.length); - assert.strictEqual(0x66, z[0]); - assert.strictEqual(0x6f, z[1]); + assert.strictEqual(z.length, 2); + assert.strictEqual(z[0], 0x66); + assert.strictEqual(z[1], 0x6f); } ['ucs2', 'ucs-2', 'utf16le', 'utf-16le'].forEach((encoding) => { @@ -616,16 +616,16 @@ assert.strictEqual('', x.inspect()); const b = Buffer.from([0xde, 0xad, 0xbe, 0xef]); let s = String.fromCharCode(0xffff); b.write(s, 0, 'latin1'); - assert.strictEqual(0xff, b[0]); - assert.strictEqual(0xad, b[1]); - assert.strictEqual(0xbe, b[2]); - assert.strictEqual(0xef, b[3]); + assert.strictEqual(b[0], 0xff); + assert.strictEqual(b[1], 0xad); + assert.strictEqual(b[2], 0xbe); + assert.strictEqual(b[3], 0xef); s = String.fromCharCode(0xaaee); b.write(s, 0, 'latin1'); - assert.strictEqual(0xee, b[0]); - assert.strictEqual(0xad, b[1]); - assert.strictEqual(0xbe, b[2]); - assert.strictEqual(0xef, b[3]); + assert.strictEqual(b[0], 0xee); + assert.strictEqual(b[1], 0xad); + assert.strictEqual(b[2], 0xbe); + assert.strictEqual(b[3], 0xef); } { @@ -633,16 +633,16 @@ assert.strictEqual('', x.inspect()); const b = Buffer.from([0xde, 0xad, 0xbe, 0xef]); let s = String.fromCharCode(0xffff); b.write(s, 0, 'latin1'); - assert.strictEqual(0xff, b[0]); - assert.strictEqual(0xad, b[1]); - assert.strictEqual(0xbe, b[2]); - assert.strictEqual(0xef, b[3]); + assert.strictEqual(b[0], 0xff); + assert.strictEqual(b[1], 0xad); + assert.strictEqual(b[2], 0xbe); + assert.strictEqual(b[3], 0xef); s = String.fromCharCode(0xaaee); b.write(s, 0, 'latin1'); - assert.strictEqual(0xee, b[0]); - assert.strictEqual(0xad, b[1]); - assert.strictEqual(0xbe, b[2]); - assert.strictEqual(0xef, b[3]); + assert.strictEqual(b[0], 0xee); + assert.strictEqual(b[1], 0xad); + assert.strictEqual(b[2], 0xbe); + assert.strictEqual(b[3], 0xef); } { @@ -715,11 +715,11 @@ assert.strictEqual('', x.inspect()); { // test offset returns are correct const b = Buffer.allocUnsafe(16); - assert.strictEqual(4, b.writeUInt32LE(0, 0)); - assert.strictEqual(6, b.writeUInt16LE(0, 4)); - assert.strictEqual(7, b.writeUInt8(0, 6)); - assert.strictEqual(8, b.writeInt8(0, 7)); - assert.strictEqual(16, b.writeDoubleLE(0, 8)); + assert.strictEqual(b.writeUInt32LE(0, 0), 4); + assert.strictEqual(b.writeUInt16LE(0, 4), 6); + assert.strictEqual(b.writeUInt8(0, 6), 7); + assert.strictEqual(b.writeInt8(0, 7), 8); + assert.strictEqual(b.writeDoubleLE(0, 8), 16); } { From 008b97a2db25ee66984727bb848cd52a1bdf215c Mon Sep 17 00:00:00 2001 From: Milton Sosa Date: Fri, 12 Oct 2018 10:21:31 -0700 Subject: [PATCH 078/178] test: fix assertions args order in test/parallel/test-fs-chmod.js PR-URL: https://github.com/nodejs/node/pull/23507 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-fs-chmod.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/parallel/test-fs-chmod.js b/test/parallel/test-fs-chmod.js index ed5919ce887bc8..c3b3dc2fc9c151 100644 --- a/test/parallel/test-fs-chmod.js +++ b/test/parallel/test-fs-chmod.js @@ -86,14 +86,14 @@ fs.chmod(file1, mode_async.toString(8), common.mustCall((err) => { if (common.isWindows) { assert.ok((fs.statSync(file1).mode & 0o777) & mode_async); } else { - assert.strictEqual(mode_async, fs.statSync(file1).mode & 0o777); + assert.strictEqual(fs.statSync(file1).mode & 0o777, mode_async); } fs.chmodSync(file1, mode_sync); if (common.isWindows) { assert.ok((fs.statSync(file1).mode & 0o777) & mode_sync); } else { - assert.strictEqual(mode_sync, fs.statSync(file1).mode & 0o777); + assert.strictEqual(fs.statSync(file1).mode & 0o777, mode_sync); } })); @@ -106,7 +106,7 @@ fs.open(file2, 'w', common.mustCall((err, fd) => { if (common.isWindows) { assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_async); } else { - assert.strictEqual(mode_async, fs.fstatSync(fd).mode & 0o777); + assert.strictEqual(fs.fstatSync(fd).mode & 0o777, mode_async); } common.expectsError( @@ -123,7 +123,7 @@ fs.open(file2, 'w', common.mustCall((err, fd) => { if (common.isWindows) { assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_sync); } else { - assert.strictEqual(mode_sync, fs.fstatSync(fd).mode & 0o777); + assert.strictEqual(fs.fstatSync(fd).mode & 0o777, mode_sync); } fs.close(fd, assert.ifError); @@ -139,10 +139,10 @@ if (fs.lchmod) { fs.lchmod(link, mode_async, common.mustCall((err) => { assert.ifError(err); - assert.strictEqual(mode_async, fs.lstatSync(link).mode & 0o777); + assert.strictEqual(fs.lstatSync(link).mode & 0o777, mode_async); fs.lchmodSync(link, mode_sync); - assert.strictEqual(mode_sync, fs.lstatSync(link).mode & 0o777); + assert.strictEqual(fs.lstatSync(link).mode & 0o777, mode_sync); })); } @@ -170,5 +170,5 @@ if (fs.lchmod) { }); process.on('exit', function() { - assert.strictEqual(0, openCount); + assert.strictEqual(openCount, 0); }); From 6b3b64fa73ea31aa68ffc88f3d61ce4b8317809d Mon Sep 17 00:00:00 2001 From: "Illescas, Ricardo" Date: Fri, 12 Oct 2018 11:19:56 -0600 Subject: [PATCH 079/178] test: fix argument order in assertions PR-URL: https://github.com/nodejs/node/pull/23506 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater --- test/pummel/test-net-timeout.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pummel/test-net-timeout.js b/test/pummel/test-net-timeout.js index 89190f8d282d50..e87cdc0b8edf51 100644 --- a/test/pummel/test-net-timeout.js +++ b/test/pummel/test-net-timeout.js @@ -66,7 +66,7 @@ echo_server.listen(common.PORT, function() { }); client.on('data', function(chunk) { - assert.strictEqual('hello\r\n', chunk); + assert.strictEqual(chunk, 'hello\r\n'); if (exchanges++ < 5) { setTimeout(function() { console.log('client write "hello"'); From 50572c0a732aae0ca9bacda64210e6cf10172044 Mon Sep 17 00:00:00 2001 From: Jean-Francois Arseneau Date: Fri, 12 Oct 2018 09:53:32 -0700 Subject: [PATCH 080/178] test: put expected assert value in correct place The order of arguments in test-fs-readdir-ucs2 was the opposite of what is recommended in the documentation, which is that the first value should be the value being tested, and the second value is the expected value. This fixes the test to make it conform to the documentation. PR-URL: https://github.com/nodejs/node/pull/23505 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-fs-readdir-ucs2.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-fs-readdir-ucs2.js b/test/parallel/test-fs-readdir-ucs2.js index b17dc8d7292664..e5b85665932a7c 100644 --- a/test/parallel/test-fs-readdir-ucs2.js +++ b/test/parallel/test-fs-readdir-ucs2.js @@ -25,8 +25,8 @@ try { fs.readdir(tmpdir.path, 'ucs2', common.mustCall((err, list) => { assert.ifError(err); - assert.strictEqual(1, list.length); + assert.strictEqual(list.length, 1); const fn = list[0]; - assert.deepStrictEqual(filebuff, Buffer.from(fn, 'ucs2')); + assert.deepStrictEqual(Buffer.from(fn, 'ucs2'), filebuff); assert.strictEqual(fn, filename); })); From 0b1be75f2756db342a89fdd616a0e255ab017438 Mon Sep 17 00:00:00 2001 From: Viacheslav Liakhov Date: Fri, 12 Oct 2018 10:20:32 -0700 Subject: [PATCH 081/178] test: modernize test-child-process-flush-stdio PR-URL: https://github.com/nodejs/node/pull/23504 Reviewed-By: Anatoli Papirovski Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-child-process-flush-stdio.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-child-process-flush-stdio.js b/test/parallel/test-child-process-flush-stdio.js index a2f0bb9f71f341..a7c1ea21be22a4 100644 --- a/test/parallel/test-child-process-flush-stdio.js +++ b/test/parallel/test-child-process-flush-stdio.js @@ -9,7 +9,7 @@ const opts = { shell: common.isWindows }; const p = cp.spawn('echo', [], opts); -p.on('close', common.mustCall(function(code, signal) { +p.on('close', common.mustCall((code, signal) => { assert.strictEqual(code, 0); assert.strictEqual(signal, null); spawnWithReadable(); @@ -17,17 +17,17 @@ p.on('close', common.mustCall(function(code, signal) { p.stdout.read(); -function spawnWithReadable() { +const spawnWithReadable = () => { const buffer = []; const p = cp.spawn('echo', ['123'], opts); - p.on('close', common.mustCall(function(code, signal) { + p.on('close', common.mustCall((code, signal) => { assert.strictEqual(code, 0); assert.strictEqual(signal, null); assert.strictEqual(Buffer.concat(buffer).toString().trim(), '123'); })); - p.stdout.on('readable', function() { + p.stdout.on('readable', () => { let buf; - while (buf = this.read()) + while (buf = p.stdout.read()) buffer.push(buf); }); -} +}; From d362004010f4a8fbf7549d34c601e3768bee5ba2 Mon Sep 17 00:00:00 2001 From: David Scott Date: Fri, 12 Oct 2018 09:43:36 -0700 Subject: [PATCH 082/178] test: properly order test assertion variables PR-URL: https://github.com/nodejs/node/pull/23503 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater --- test/parallel/test-child-process-set-blocking.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-child-process-set-blocking.js b/test/parallel/test-child-process-set-blocking.js index bca886ed55cb16..51a079ef5fac73 100644 --- a/test/parallel/test-child-process-set-blocking.js +++ b/test/parallel/test-child-process-set-blocking.js @@ -31,5 +31,5 @@ const cp = ch.spawn('python', ['-c', `print ${SIZE} * "C"`], { }); cp.on('exit', common.mustCall(function(code) { - assert.strictEqual(0, code); + assert.strictEqual(code, 0); })); From 179c3a8f04553e6d28769a45b2e8bca5b23e56f7 Mon Sep 17 00:00:00 2001 From: Daniyal Mokhammad Date: Fri, 12 Oct 2018 10:16:34 -0700 Subject: [PATCH 083/178] test: fixed incorrect variable order in assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/23502 Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-tracing-no-crash.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-tracing-no-crash.js b/test/parallel/test-tracing-no-crash.js index 816bd95df02e29..5b11522911e75d 100644 --- a/test/parallel/test-tracing-no-crash.js +++ b/test/parallel/test-tracing-no-crash.js @@ -4,8 +4,8 @@ const assert = require('assert'); const { spawn } = require('child_process'); function CheckNoSignalAndErrorCodeOne(code, signal) { - assert.strictEqual(null, signal); - assert.strictEqual(1, code); + assert.strictEqual(signal, null); + assert.strictEqual(code, 1); } const child = spawn(process.execPath, From c95707f56edd57a2b840bcb1c3abd08a9e925818 Mon Sep 17 00:00:00 2001 From: Joshua Belcher Date: Fri, 12 Oct 2018 10:10:15 -0700 Subject: [PATCH 084/178] test: fix order of assert.strictEqual() args to actual, expected PR-URL: https://github.com/nodejs/node/pull/23501 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater --- test/addons-napi/test_make_callback/test.js | 25 ++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/test/addons-napi/test_make_callback/test.js b/test/addons-napi/test_make_callback/test.js index 56e2b3f4e2b6c6..3f51acb6c07ac6 100644 --- a/test/addons-napi/test_make_callback/test.js +++ b/test/addons-napi/test_make_callback/test.js @@ -13,22 +13,21 @@ function myMultiArgFunc(arg1, arg2, arg3) { return 42; } -assert.strictEqual(42, makeCallback(process, common.mustCall(function() { +assert.strictEqual(makeCallback(process, common.mustCall(function() { assert.strictEqual(0, arguments.length); assert.strictEqual(this, process); return 42; -}))); +})), 42); -assert.strictEqual(42, makeCallback(process, common.mustCall(function(x) { - assert.strictEqual(1, arguments.length); +assert.strictEqual(makeCallback(process, common.mustCall(function(x) { + assert.strictEqual(arguments.length, 1); assert.strictEqual(this, process); assert.strictEqual(x, 1337); return 42; -}), 1337)); +}), 1337), 42); -assert.strictEqual(42, - makeCallback(this, - common.mustCall(myMultiArgFunc), 1, 2, 3)); +assert.strictEqual(makeCallback(this, + common.mustCall(myMultiArgFunc), 1, 2, 3), 42); // TODO(node-api): napi_make_callback needs to support // strings passed for the func argument @@ -47,12 +46,12 @@ const recv = { }), }; -assert.strictEqual(42, makeCallback(recv, 'one')); -assert.strictEqual(42, makeCallback(recv, 'two', 1337)); +assert.strictEqual(makeCallback(recv, 'one'), 42); +assert.strictEqual(makeCallback(recv, 'two', 1337), 42); // Check that callbacks on a receiver from a different context works. const foreignObject = vm.runInNewContext('({ fortytwo() { return 42; } })'); -assert.strictEqual(42, makeCallback(foreignObject, 'fortytwo')); +assert.strictEqual(makeCallback(foreignObject, 'fortytwo'), 42); */ // Check that the callback is made in the context of the receiver. @@ -63,7 +62,7 @@ const target = vm.runInNewContext(` return Object; }) `); -assert.notStrictEqual(Object, makeCallback(process, target, Object)); +assert.notStrictEqual(makeCallback(process, target, Object), Object); // Runs in inner context. const forward = vm.runInNewContext(` @@ -79,4 +78,4 @@ function endpoint($Object) { return Object; } -assert.strictEqual(Object, makeCallback(process, forward, endpoint)); +assert.strictEqual(makeCallback(process, forward, endpoint), Object); From 7e4cc761d08640aba34b8126aebb94ce287eeb3e Mon Sep 17 00:00:00 2001 From: Jonny Kalambay Date: Fri, 12 Oct 2018 10:11:51 -0700 Subject: [PATCH 085/178] lib: migrate process.binding('config') to getOptions() PR-URL: https://github.com/nodejs/node/pull/23526 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- lib/internal/modules/esm/default_resolve.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js index 8f8efcb5360d63..7707262566c88a 100644 --- a/lib/internal/modules/esm/default_resolve.js +++ b/lib/internal/modules/esm/default_resolve.js @@ -6,8 +6,9 @@ const internalFS = require('internal/fs/utils'); const { NativeModule } = require('internal/bootstrap/loaders'); const { extname } = require('path'); const { realpathSync } = require('fs'); -const preserveSymlinks = !!process.binding('config').preserveSymlinks; -const preserveSymlinksMain = !!process.binding('config').preserveSymlinksMain; +const { getOptions } = internalBinding('options'); +const preserveSymlinks = getOptions('--preserve-symlinks'); +const preserveSymlinksMain = getOptions('--preserve-symlinks-main'); const { ERR_MISSING_MODULE, ERR_MODULE_RESOLUTION_LEGACY, From 32cef50c99f9131915820c2795b8c5bcad7d1675 Mon Sep 17 00:00:00 2001 From: Pascal Lambert Date: Fri, 12 Oct 2018 11:27:46 -0600 Subject: [PATCH 086/178] test: swap assert argument order in test-vm-create-and-run-in-context.js PR-URL: https://github.com/nodejs/node/pull/23525 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-vm-create-and-run-in-context.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-vm-create-and-run-in-context.js b/test/parallel/test-vm-create-and-run-in-context.js index 09f643aa90df46..8f4ce72c50f246 100644 --- a/test/parallel/test-vm-create-and-run-in-context.js +++ b/test/parallel/test-vm-create-and-run-in-context.js @@ -33,13 +33,13 @@ assert.strictEqual('passed', result); // Create a new pre-populated context context = vm.createContext({ 'foo': 'bar', 'thing': 'lala' }); -assert.strictEqual('bar', context.foo); -assert.strictEqual('lala', context.thing); +assert.strictEqual(context.foo, 'bar'); +assert.strictEqual(context.thing, 'lala'); // Test updating context result = vm.runInContext('var foo = 3;', context); -assert.strictEqual(3, context.foo); -assert.strictEqual('lala', context.thing); +assert.strictEqual(context.foo, 3); +assert.strictEqual(context.thing, 'lala'); // https://github.com/nodejs/node/issues/5768 // Run in contextified sandbox without referencing the context From d5abbabc4f1db2d4e4ce8c1c98afd4981808074b Mon Sep 17 00:00:00 2001 From: Arne Schramm Date: Fri, 12 Oct 2018 10:23:40 -0700 Subject: [PATCH 087/178] test: switch arguments of assert() The arguments of the assert were passed in the wrong order (expected, actual). This would have been confusing in case of an error. Changed it to be (actual, expected) PR-URL: https://github.com/nodejs/node/pull/23524 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/sequential/test-inspector-break-when-eval.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sequential/test-inspector-break-when-eval.js b/test/sequential/test-inspector-break-when-eval.js index e7529f786a9859..9952650252310e 100644 --- a/test/sequential/test-inspector-break-when-eval.js +++ b/test/sequential/test-inspector-break-when-eval.js @@ -63,7 +63,7 @@ async function runTests() { await breakOnLine(session); await stepOverConsoleStatement(session); await session.runToCompletion(); - assert.strictEqual(0, (await child.expectShutdown()).exitCode); + assert.strictEqual((await child.expectShutdown()).exitCode, 0); } runTests(); From 495ced01fddf4693377cd3aa509032d2de4bc2ec Mon Sep 17 00:00:00 2001 From: Lee Gray Date: Fri, 12 Oct 2018 10:23:09 -0700 Subject: [PATCH 088/178] test: fix assert order in test-vm-context PR-URL: https://github.com/nodejs/node/pull/23523 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-vm-context.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-vm-context.js b/test/parallel/test-vm-context.js index 31ed69da93fabc..e1cfd145f226ad 100644 --- a/test/parallel/test-vm-context.js +++ b/test/parallel/test-vm-context.js @@ -30,18 +30,18 @@ let script = new Script('"passed";'); // Run in a new empty context let context = vm.createContext(); let result = script.runInContext(context); -assert.strictEqual('passed', result); +assert.strictEqual(result, 'passed'); // Create a new pre-populated context context = vm.createContext({ 'foo': 'bar', 'thing': 'lala' }); -assert.strictEqual('bar', context.foo); -assert.strictEqual('lala', context.thing); +assert.strictEqual(context.foo, 'bar'); +assert.strictEqual(context.thing, 'lala'); // Test updating context script = new Script('foo = 3;'); result = script.runInContext(context); -assert.strictEqual(3, context.foo); -assert.strictEqual('lala', context.thing); +assert.strictEqual(context.foo, 3); +assert.strictEqual(context.thing, 'lala'); // Issue GH-227: common.expectsError(() => { From 101812e0a93ba26b84500dc58220f947dd8ff94c Mon Sep 17 00:00:00 2001 From: Randy Wressell Date: Fri, 12 Oct 2018 10:07:49 -0700 Subject: [PATCH 089/178] lib: migrate process.binding to getOptions PR-URL: https://github.com/nodejs/node/pull/23522 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- lib/internal/modules/cjs/helpers.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/internal/modules/cjs/helpers.js b/lib/internal/modules/cjs/helpers.js index 5b5199c262ae3b..cda94987fad210 100644 --- a/lib/internal/modules/cjs/helpers.js +++ b/lib/internal/modules/cjs/helpers.js @@ -9,6 +9,8 @@ const { CHAR_HASH, } = require('internal/constants'); +const { getOptions } = internalBinding('options'); + // Invoke with makeRequireFunction(module) where |module| is the Module object // to use as the context for the require() function. function makeRequireFunction(mod) { @@ -105,7 +107,7 @@ const builtinLibs = [ 'v8', 'vm', 'zlib' ]; -if (process.binding('config').experimentalWorker) { +if (getOptions('--experimental-worker')) { builtinLibs.push('worker_threads'); builtinLibs.sort(); } From ad6b09f7099846f7db49c88e2aacffe6a789c73f Mon Sep 17 00:00:00 2001 From: Tyler Vann-Campbell Date: Fri, 12 Oct 2018 10:03:45 -0700 Subject: [PATCH 090/178] test: use the correct parameter order on assert.strictEqual() The parameter order for assert.strictEqual() should be actual, expected rather than expected, actual which can make test failure messages confusing. This change reverses the order of the assertion to match the documented parameter order. PR-URL: https://github.com/nodejs/node/pull/23520 Reviewed-By: Guy Bedford Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater --- test/pummel/test-net-many-clients.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/pummel/test-net-many-clients.js b/test/pummel/test-net-many-clients.js index 657b03abdec205..db7da1ae041341 100644 --- a/test/pummel/test-net-many-clients.js +++ b/test/pummel/test-net-many-clients.js @@ -70,8 +70,8 @@ function runClient(callback) { client.on('close', function(had_error) { console.log('.'); - assert.strictEqual(false, had_error); - assert.strictEqual(bytes, client.recved.length); + assert.strictEqual(had_error, false); + assert.strictEqual(client.recved.length, bytes); if (client.fd) { console.log(client.fd); @@ -96,6 +96,6 @@ server.listen(common.PORT, function() { }); process.on('exit', function() { - assert.strictEqual(connections_per_client * concurrency, total_connections); + assert.strictEqual(total_connections, connections_per_client * concurrency); console.log('\nokay!'); }); From 544d4976b97dde111bd48dbd3a7a1a2ae4a198b8 Mon Sep 17 00:00:00 2001 From: surreal8 Date: Fri, 12 Oct 2018 12:17:34 -0500 Subject: [PATCH 091/178] lib: migrate process.binding to internalBinding PR-URL: https://github.com/nodejs/node/pull/23517 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Jeremiah Senkpiel Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- lib/internal/process/esm_loader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/process/esm_loader.js b/lib/internal/process/esm_loader.js index b2415ec171f985..72d39a69600d88 100644 --- a/lib/internal/process/esm_loader.js +++ b/lib/internal/process/esm_loader.js @@ -48,7 +48,7 @@ exports.ESMLoader = undefined; exports.setup = function() { let ESMLoader = new Loader(); const loaderPromise = (async () => { - const userLoader = process.binding('config').userLoader; + const userLoader = internalBinding('options').getOptions('--loader'); if (userLoader) { const hooks = await ESMLoader.import( userLoader, pathToFileURL(`${process.cwd()}/`).href); From 8f68ed92fc262f374f7a37cfe99ab4404e0c6d33 Mon Sep 17 00:00:00 2001 From: Takdeer Sodhan Date: Fri, 12 Oct 2018 10:27:36 -0700 Subject: [PATCH 092/178] test: fix assert.strictEqual arg order in test-tls-ecdh-multiple.js PR-URL: https://github.com/nodejs/node/pull/23516 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-tls-ecdh-multiple.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-tls-ecdh-multiple.js b/test/parallel/test-tls-ecdh-multiple.js index 5dea61e20fbad4..d5f27a5e464437 100644 --- a/test/parallel/test-tls-ecdh-multiple.js +++ b/test/parallel/test-tls-ecdh-multiple.js @@ -48,7 +48,7 @@ server.listen(0, function() { }); client.on('exit', function(code) { - assert.strictEqual(0, code); + assert.strictEqual(code, 0); server.close(); }); From 8c86463d9ffbde3fadb2d462657a210b0b37d1f9 Mon Sep 17 00:00:00 2001 From: Ben Schaaf Date: Fri, 12 Oct 2018 10:24:33 -0700 Subject: [PATCH 093/178] test: fix assert.strictEqual() argument order PR-URL: https://github.com/nodejs/node/pull/23515 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- .../test-inspector-async-hook-setup-at-inspect-brk.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sequential/test-inspector-async-hook-setup-at-inspect-brk.js b/test/sequential/test-inspector-async-hook-setup-at-inspect-brk.js index f39746a172bf0d..a1b8f301e07d55 100644 --- a/test/sequential/test-inspector-async-hook-setup-at-inspect-brk.js +++ b/test/sequential/test-inspector-async-hook-setup-at-inspect-brk.js @@ -44,7 +44,7 @@ async function runTests() { await checkAsyncStackTrace(session); await session.runToCompletion(); - assert.strictEqual(55, (await instance.expectShutdown()).exitCode); + assert.strictEqual((await instance.expectShutdown()).exitCode, 55); } runTests(); From 3a62c06067d43553609535cd074d4f10b6bfd21e Mon Sep 17 00:00:00 2001 From: David Ward Date: Fri, 12 Oct 2018 10:09:09 -0700 Subject: [PATCH 094/178] test: fix test-dgram-pingpong assertion arg order PR-URL: https://github.com/nodejs/node/pull/23514 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/sequential/test-dgram-pingpong.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/sequential/test-dgram-pingpong.js b/test/sequential/test-dgram-pingpong.js index c97b7872dedf2c..33b01fbe22a9b9 100644 --- a/test/sequential/test-dgram-pingpong.js +++ b/test/sequential/test-dgram-pingpong.js @@ -6,7 +6,7 @@ const dgram = require('dgram'); function pingPongTest(port, host) { const server = dgram.createSocket('udp4', common.mustCall((msg, rinfo) => { - assert.strictEqual('PING', msg.toString('ascii')); + assert.strictEqual(msg.toString('ascii'), 'PING'); server.send('PONG', 0, 4, rinfo.port, rinfo.address); })); @@ -20,7 +20,7 @@ function pingPongTest(port, host) { const client = dgram.createSocket('udp4'); client.on('message', function(msg) { - assert.strictEqual('PONG', msg.toString('ascii')); + assert.strictEqual(msg.toString('ascii'), 'PONG'); client.close(); server.close(); From 183838d30b4bd00254fde7f0592ab35679c1b5bd Mon Sep 17 00:00:00 2001 From: Elvis-Philip N Date: Fri, 12 Oct 2018 13:11:14 -0400 Subject: [PATCH 095/178] test: corret assertion arg order in test-regress-GH-892.js PR-URL: https://github.com/nodejs/node/pull/23513 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater --- test/pummel/test-regress-GH-892.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pummel/test-regress-GH-892.js b/test/pummel/test-regress-GH-892.js index 4021a53736421b..48201807e39e56 100644 --- a/test/pummel/test-regress-GH-892.js +++ b/test/pummel/test-regress-GH-892.js @@ -59,7 +59,7 @@ function makeRequest() { child.on('exit', function(code) { assert.ok(/DONE/.test(stderrBuffer)); - assert.strictEqual(0, code); + assert.strictEqual(code, 0); }); // The following two lines forward the stdio from the child @@ -95,7 +95,7 @@ const server = https.Server(serverOptions, function(req, res) { }); req.on('end', function() { - assert.strictEqual(bytesExpected, uploadCount); + assert.strictEqual(uploadCount, bytesExpected); res.writeHead(200, { 'content-type': 'text/plain' }); res.end('successful upload\n'); }); From 3b477224a4647a6fe417cf63406e3773189b2a04 Mon Sep 17 00:00:00 2001 From: edgarzapeka Date: Fri, 12 Oct 2018 10:01:27 -0700 Subject: [PATCH 096/178] test: replaced functions with arrow functions PR-URL: https://github.com/nodejs/node/pull/23511 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-domain-from-timer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-domain-from-timer.js b/test/parallel/test-domain-from-timer.js index ead0e1b8382fc5..3f8252543c9d2f 100644 --- a/test/parallel/test-domain-from-timer.js +++ b/test/parallel/test-domain-from-timer.js @@ -27,11 +27,11 @@ const assert = require('assert'); // timeouts call the callback directly from cc, so need to make sure the // domain will be used regardless -setTimeout(function() { +setTimeout(() => { const domain = require('domain'); const d = domain.create(); - d.run(function() { - process.nextTick(function() { + d.run(() => { + process.nextTick(() => { console.trace('in nexttick', process.domain === d); assert.strictEqual(process.domain, d); }); From 3d8c512b67c209cdaca23cabbf5668730cf44a9e Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Fri, 12 Oct 2018 10:22:52 -0700 Subject: [PATCH 097/178] test: refactor functions to es6 PR-URL: https://github.com/nodejs/node/pull/23510 Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat --- .../parallel/test-cluster-setup-master-multiple.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/parallel/test-cluster-setup-master-multiple.js b/test/parallel/test-cluster-setup-master-multiple.js index 2a6341ea56c3c5..b33acccd411a0a 100644 --- a/test/parallel/test-cluster-setup-master-multiple.js +++ b/test/parallel/test-cluster-setup-master-multiple.js @@ -30,14 +30,12 @@ assert(cluster.isMaster); // makes that unnecessary. This is to make the test less fragile if the // implementation ever changes such that cluster.settings is mutated instead of // replaced. -function cheapClone(obj) { - return JSON.parse(JSON.stringify(obj)); -} +const cheapClone = (obj) => JSON.parse(JSON.stringify(obj)); const configs = []; // Capture changes -cluster.on('setup', function() { +cluster.on('setup', () => { console.log('"setup" emitted', cluster.settings); configs.push(cheapClone(cluster.settings)); }); @@ -48,7 +46,7 @@ const execs = [ 'node-next-3', ]; -process.on('exit', function assertTests() { +process.on('exit', () => { // Tests that "setup" is emitted for every call to setupMaster assert.strictEqual(configs.length, execs.length); @@ -58,14 +56,14 @@ process.on('exit', function assertTests() { }); // Make changes to cluster settings -execs.forEach(function(v, i) { - setTimeout(function() { +execs.forEach((v, i) => { + setTimeout(() => { cluster.setupMaster({ exec: v }); }, i * 100); }); // cluster emits 'setup' asynchronously, so we must stay alive long // enough for that to happen -setTimeout(function() { +setTimeout(() => { console.log('cluster setup complete'); }, (execs.length + 1) * 100); From 2d76dec4b47e515238173516ac2667f414315b49 Mon Sep 17 00:00:00 2001 From: "garrik.leonardo@gmail.com" Date: Fri, 12 Oct 2018 12:34:28 -0500 Subject: [PATCH 098/178] test: updating assertion on test so it fits the new method signature One assertion on test-tls-connect-address-family.js was out fo date, here we are fixing it to match the signature of strictEqual method. PR-URL: https://github.com/nodejs/node/pull/23536 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/parallel/test-tls-connect-address-family.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-tls-connect-address-family.js b/test/parallel/test-tls-connect-address-family.js index 75416c397d7c75..569688ca8abd18 100644 --- a/test/parallel/test-tls-connect-address-family.js +++ b/test/parallel/test-tls-connect-address-family.js @@ -26,7 +26,7 @@ function runTest() { }; // Will fail with ECONNREFUSED if the address family is not honored. tls.connect(options).once('secureConnect', common.mustCall(function() { - assert.strictEqual('::1', this.remoteAddress); + assert.strictEqual(this.remoteAddress, '::1'); this.destroy(); })); })); From 0d6f0143901ca95f53f8d9e4bc03649595f4405d Mon Sep 17 00:00:00 2001 From: MarianneDr Date: Fri, 12 Oct 2018 10:37:02 -0700 Subject: [PATCH 099/178] src: remove unused UVHandle methods PR-URL: https://github.com/nodejs/node/pull/23535 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- src/connection_wrap.h | 4 ---- src/tty_wrap.cc | 5 ----- src/tty_wrap.h | 2 -- src/udp_wrap.cc | 7 ------- src/udp_wrap.h | 2 -- 5 files changed, 20 deletions(-) diff --git a/src/connection_wrap.h b/src/connection_wrap.h index 72030a00901daf..5b114088760dad 100644 --- a/src/connection_wrap.h +++ b/src/connection_wrap.h @@ -12,10 +12,6 @@ namespace node { template class ConnectionWrap : public LibuvStreamWrap { public: - UVType* UVHandle() { - return &handle_; - } - static void OnConnection(uv_stream_t* handle, int status); static void AfterConnect(uv_connect_t* req, int status); diff --git a/src/tty_wrap.cc b/src/tty_wrap.cc index 1d0ea90f36b42c..c099b14ec4d7a1 100644 --- a/src/tty_wrap.cc +++ b/src/tty_wrap.cc @@ -64,11 +64,6 @@ void TTYWrap::Initialize(Local target, } -uv_tty_t* TTYWrap::UVHandle() { - return &handle_; -} - - void TTYWrap::GuessHandleType(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); int fd; diff --git a/src/tty_wrap.h b/src/tty_wrap.h index ad5f364134e3e2..f794e2112fa1ee 100644 --- a/src/tty_wrap.h +++ b/src/tty_wrap.h @@ -36,8 +36,6 @@ class TTYWrap : public LibuvStreamWrap { v8::Local unused, v8::Local context); - uv_tty_t* UVHandle(); - SET_NO_MEMORY_INFO() SET_MEMORY_INFO_NAME(TTYWrap) SET_SELF_SIZE(TTYWrap) diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 92fc036778f998..aa29f6973e35e0 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -27,8 +27,6 @@ #include "req_wrap-inl.h" #include "util-inl.h" - - namespace node { using v8::Array; @@ -526,11 +524,6 @@ Local UDPWrap::Instantiate(Environment* env, } -uv_udp_t* UDPWrap::UVHandle() { - return &handle_; -} - - } // namespace node NODE_MODULE_CONTEXT_AWARE_INTERNAL(udp_wrap, node::UDPWrap::Initialize) diff --git a/src/udp_wrap.h b/src/udp_wrap.h index 030abdf74d958d..e6b575f74a0ec9 100644 --- a/src/udp_wrap.h +++ b/src/udp_wrap.h @@ -63,8 +63,6 @@ class UDPWrap: public HandleWrap { static v8::Local Instantiate(Environment* env, AsyncWrap* parent, SocketType type); - uv_udp_t* UVHandle(); - SET_NO_MEMORY_INFO() SET_MEMORY_INFO_NAME(UDPWrap) SET_SELF_SIZE(UDPWrap) From c3ebc028d2ebb2c2ab7ce908f57d37ac93f90c20 Mon Sep 17 00:00:00 2001 From: Marcos Frony Date: Fri, 12 Oct 2018 10:15:11 -0700 Subject: [PATCH 100/178] test: reorder asserts arguments Revert arguments for assert and ensure that the first argument is always the actual value being tested. PR-URL: https://github.com/nodejs/node/pull/23534 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/pummel/test-net-pause.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pummel/test-net-pause.js b/test/pummel/test-net-pause.js index c25f8a0bc1d49b..ea0e61264e32db 100644 --- a/test/pummel/test-net-pause.js +++ b/test/pummel/test-net-pause.js @@ -53,7 +53,7 @@ server.on('listening', function() { setTimeout(function() { chars_recved = recv.length; console.log(`pause at: ${chars_recved}`); - assert.strictEqual(true, chars_recved > 1); + assert.strictEqual(chars_recved > 1, true); client.pause(); setTimeout(function() { console.log(`resume at: ${chars_recved}`); @@ -86,6 +86,6 @@ server.on('listening', function() { server.listen(common.PORT); process.on('exit', function() { - assert.strictEqual(N, recv.length); + assert.strictEqual(recv.length, N); console.error('Exit'); }); From 244180826e401873ed1b27f8694a24cd81b873a9 Mon Sep 17 00:00:00 2001 From: Andrew J D McCann Date: Fri, 12 Oct 2018 10:31:06 -0700 Subject: [PATCH 101/178] src: use default initializers over settings fields on the constructor PR-URL: https://github.com/nodejs/node/pull/23532 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- src/spawn_sync.cc | 4 +--- src/spawn_sync.h | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/spawn_sync.cc b/src/spawn_sync.cc index fbcb1d4f02c905..264b6709ff1260 100644 --- a/src/spawn_sync.cc +++ b/src/spawn_sync.cc @@ -50,9 +50,7 @@ using v8::String; using v8::Value; -SyncProcessOutputBuffer::SyncProcessOutputBuffer() - : used_(0), - next_(nullptr) { +SyncProcessOutputBuffer::SyncProcessOutputBuffer() { } diff --git a/src/spawn_sync.h b/src/spawn_sync.h index adb2618cc5f404..397e62b9d2c0d9 100644 --- a/src/spawn_sync.h +++ b/src/spawn_sync.h @@ -56,9 +56,9 @@ class SyncProcessOutputBuffer { private: // Use unsigned int because that's what `uv_buf_init` takes. mutable char data_[kBufferSize]; - unsigned int used_; + unsigned int used_ = 0; - SyncProcessOutputBuffer* next_; + SyncProcessOutputBuffer* next_ = nullptr; }; From a24027f9eea200ebf2603560feaf54dfcf50085c Mon Sep 17 00:00:00 2001 From: nofwayy Date: Fri, 12 Oct 2018 10:25:33 -0700 Subject: [PATCH 102/178] test: correct labelling of asserts errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23531 Reviewed-By: Сковорода Никита Андреевич Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/parallel/test-tls-over-http-tunnel.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-tls-over-http-tunnel.js b/test/parallel/test-tls-over-http-tunnel.js index f3f2bb3f2726ed..b26cf7872f6582 100644 --- a/test/parallel/test-tls-over-http-tunnel.js +++ b/test/parallel/test-tls-over-http-tunnel.js @@ -57,12 +57,12 @@ const proxy = net.createServer((clientSocket) => { clientSocket.on('data', (chunk) => { if (!serverSocket) { // Verify the CONNECT request - assert.strictEqual(`CONNECT localhost:${server.address().port} ` + + assert.strictEqual(chunk.toString(), + `CONNECT localhost:${server.address().port} ` + 'HTTP/1.1\r\n' + 'Proxy-Connections: keep-alive\r\n' + `Host: localhost:${proxy.address().port}\r\n` + - 'Connection: close\r\n\r\n', - chunk.toString()); + 'Connection: close\r\n\r\n'); console.log('PROXY: got CONNECT request'); console.log('PROXY: creating a tunnel'); @@ -126,7 +126,7 @@ proxy.listen(0, common.mustCall(() => { } function onConnect(res, socket, header) { - assert.strictEqual(200, res.statusCode); + assert.strictEqual(res.statusCode, 200); console.log('CLIENT: got CONNECT response'); // detach the socket @@ -149,10 +149,10 @@ proxy.listen(0, common.mustCall(() => { agent: false, rejectUnauthorized: false }, (res) => { - assert.strictEqual(200, res.statusCode); + assert.strictEqual(res.statusCode, 200); res.on('data', common.mustCall((chunk) => { - assert.strictEqual('hello world\n', chunk.toString()); + assert.strictEqual(chunk.toString(), 'hello world\n'); console.log('CLIENT: got HTTPS response'); gotRequest = true; })); From d51d1ad4c80f5cefda685e66eb5c7655f567258b Mon Sep 17 00:00:00 2001 From: jaxyz Date: Fri, 12 Oct 2018 10:33:15 -0700 Subject: [PATCH 103/178] test: fix strictEqual assertion argument in test-tls-ecdh-auto PR-URL: https://github.com/nodejs/node/pull/23530 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/parallel/test-tls-ecdh-auto.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-tls-ecdh-auto.js b/test/parallel/test-tls-ecdh-auto.js index 21aecad6cdc0d5..840063229a60b7 100644 --- a/test/parallel/test-tls-ecdh-auto.js +++ b/test/parallel/test-tls-ecdh-auto.js @@ -48,7 +48,7 @@ server.listen(0, function() { }); client.on('exit', function(code) { - assert.strictEqual(0, code); + assert.strictEqual(code, 0); server.close(); }); From 5ae0f111dc9d4ec730893c7f214c6616ab7ddb7d Mon Sep 17 00:00:00 2001 From: ssamuels0916 Date: Fri, 12 Oct 2018 10:21:44 -0700 Subject: [PATCH 104/178] test: fix assert.strictEqual() argument order PR-URL: https://github.com/nodejs/node/pull/23529 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/parallel/test-http-buffer-sanity.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-http-buffer-sanity.js b/test/parallel/test-http-buffer-sanity.js index 8dfccf7d5c688d..05c027fd482582 100644 --- a/test/parallel/test-http-buffer-sanity.js +++ b/test/parallel/test-http-buffer-sanity.js @@ -40,13 +40,13 @@ const server = http.Server(function(req, res) { req.on('data', (d) => { measuredSize += d.length; for (let j = 0; j < d.length; j++) { - assert.strictEqual(buffer[i], d[j]); + assert.strictEqual(d[j], buffer[i]); i++; } }); req.on('end', common.mustCall(() => { - assert.strictEqual(bufferSize, measuredSize); + assert.strictEqual(measuredSize, bufferSize); res.writeHead(200); res.write('thanks'); res.end(); @@ -64,7 +64,7 @@ server.listen(0, common.mustCall(() => { let data = ''; res.on('data', (chunk) => data += chunk); res.on('end', common.mustCall(() => { - assert.strictEqual('thanks', data); + assert.strictEqual(data, 'thanks'); })); })); req.end(buffer); From a0aa7ada0e54bba3f79cbb2c4eca91946dffd91f Mon Sep 17 00:00:00 2001 From: Diana Lee Date: Fri, 12 Oct 2018 10:32:20 -0700 Subject: [PATCH 105/178] test: corrected the order of arguments in assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/23528 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/pummel/test-tls-securepair-client.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pummel/test-tls-securepair-client.js b/test/pummel/test-tls-securepair-client.js index 8e56e11fabd5ae..09006228c25564 100644 --- a/test/pummel/test-tls-securepair-client.js +++ b/test/pummel/test-tls-securepair-client.js @@ -171,8 +171,8 @@ function test(keyfn, certfn, check, next) { process.on('exit', function() { - assert.strictEqual(0, serverExitCode); - assert.strictEqual('WAIT-SERVER-CLOSE', state); + assert.strictEqual(serverExitCode, 0); + assert.strictEqual(state, 'WAIT-SERVER-CLOSE'); assert.ok(gotWriteCallback); }); } From 08b1047ef14c375b0b548f391d55d85e033c0934 Mon Sep 17 00:00:00 2001 From: Oktavianus Ludiro Date: Fri, 12 Oct 2018 10:19:49 -0700 Subject: [PATCH 106/178] test: use correct argument order for assert.strictEqual() The previous code did not pass correct argument order to assert.strictEqual(). Before: First argument provided is expected value Second argument provided is actual value After: First argument provided is actual value Second argument provided is expected value PR-URL: https://github.com/nodejs/node/pull/23527 Reviewed-By: Hitesh Kanwathirtha Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/pummel/test-fs-watch-file.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/pummel/test-fs-watch-file.js b/test/pummel/test-fs-watch-file.js index e9d208778faf3f..d8694418e9eea5 100644 --- a/test/pummel/test-fs-watch-file.js +++ b/test/pummel/test-fs-watch-file.js @@ -50,10 +50,10 @@ process.on('exit', function() { fs.unlinkSync(filepathTwoAbs); fs.unlinkSync(filenameThree); fs.unlinkSync(filenameFour); - assert.strictEqual(1, watchSeenOne); - assert.strictEqual(2, watchSeenTwo); - assert.strictEqual(1, watchSeenThree); - assert.strictEqual(1, watchSeenFour); + assert.strictEqual(watchSeenOne, 1); + assert.strictEqual(watchSeenTwo, 2); + assert.strictEqual(watchSeenThree, 1); + assert.strictEqual(watchSeenFour, 1); }); @@ -134,7 +134,7 @@ setTimeout(function() { { // Does not throw. function a() { ++watchSeenFour; - assert.strictEqual(1, watchSeenFour); + assert.strictEqual(watchSeenFour, 1); fs.unwatchFile(`.${path.sep}${filenameFour}`, a); } fs.watchFile(filenameFour, a); From 0f17c1cef0467cb67b233c26922fb533f5d7d900 Mon Sep 17 00:00:00 2001 From: Eli Itah Date: Fri, 12 Oct 2018 10:48:45 -0700 Subject: [PATCH 107/178] test: updating assertion and expect order in test-tls-client-verify.js PR-URL: https://github.com/nodejs/node/pull/23547 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/parallel/test-tls-client-verify.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-tls-client-verify.js b/test/parallel/test-tls-client-verify.js index 3abcd3c16345ef..12d2514eed3a89 100644 --- a/test/parallel/test-tls-client-verify.js +++ b/test/parallel/test-tls-client-verify.js @@ -99,7 +99,7 @@ function testServers(index, servers, clientOptions, cb) { console.error(`expected: ${ok} authed: ${authorized}`); - assert.strictEqual(ok, authorized); + assert.strictEqual(authorized, ok); server.close(); })); @@ -108,7 +108,7 @@ function testServers(index, servers, clientOptions, cb) { }); client.on('end', common.mustCall(function() { - assert.strictEqual('hello world\n', b); + assert.strictEqual(b, 'hello world\n'); })); client.on('close', common.mustCall(function() { From f7a50f76eeb1bc8107cab440ea71328b2c6c6899 Mon Sep 17 00:00:00 2001 From: Sean Healy Date: Fri, 12 Oct 2018 10:43:47 -0700 Subject: [PATCH 108/178] test: refactor callback functions to arrow functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor callback functions to modern arrow functions. Also, added `common.mustCall` to `online` callbacks. PR-URL: https://github.com/nodejs/node/pull/23546 Reviewed-By: James M Snell Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- .../test-cluster-worker-forced-exit.js | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/test/parallel/test-cluster-worker-forced-exit.js b/test/parallel/test-cluster-worker-forced-exit.js index 6a6046f23c4dd1..cc76b4ba3aff3a 100644 --- a/test/parallel/test-cluster-worker-forced-exit.js +++ b/test/parallel/test-cluster-worker-forced-exit.js @@ -37,10 +37,8 @@ const SENTINEL = 42; // 3 disconnect worker with child_process's disconnect, confirm // no sentinel value if (cluster.isWorker) { - process.on('disconnect', function(msg) { - setTimeout(function() { - process.exit(SENTINEL); - }, 10); + process.on('disconnect', (msg) => { + setTimeout(() => process.exit(SENTINEL), 10); }); return; } @@ -49,17 +47,17 @@ checkUnforced(); checkForced(); function checkUnforced() { - cluster.fork() - .on('online', function() { this.disconnect(); }) - .on('exit', common.mustCall(function(status) { + const worker = cluster.fork(); + worker + .on('online', common.mustCall(() => worker.disconnect())) + .on('exit', common.mustCall((status) => { assert.strictEqual(status, SENTINEL); })); } function checkForced() { - cluster.fork() - .on('online', function() { this.process.disconnect(); }) - .on('exit', common.mustCall(function(status) { - assert.strictEqual(status, 0); - })); + const worker = cluster.fork(); + worker + .on('online', common.mustCall(() => worker.process.disconnect())) + .on('exit', common.mustCall((status) => assert.strictEqual(status, 0))); } From 5856a59a42c72974620c2db771c184e840363563 Mon Sep 17 00:00:00 2001 From: Carl Richmond Date: Fri, 12 Oct 2018 10:40:59 -0700 Subject: [PATCH 109/178] test: fix assertion argument order PR-URL: https://github.com/nodejs/node/pull/23545 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/parallel/test-stream-pipe-cleanup.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-stream-pipe-cleanup.js b/test/parallel/test-stream-pipe-cleanup.js index b8ebc036bee24d..ac0a72a1da416b 100644 --- a/test/parallel/test-stream-pipe-cleanup.js +++ b/test/parallel/test-stream-pipe-cleanup.js @@ -65,8 +65,8 @@ for (i = 0; i < limit; i++) { r.pipe(w); r.emit('end'); } -assert.strictEqual(0, r.listeners('end').length); -assert.strictEqual(limit, w.endCalls); +assert.strictEqual(r.listeners('end').length, 0); +assert.strictEqual(w.endCalls, limit); w.endCalls = 0; @@ -75,8 +75,8 @@ for (i = 0; i < limit; i++) { r.pipe(w); r.emit('close'); } -assert.strictEqual(0, r.listeners('close').length); -assert.strictEqual(limit, w.endCalls); +assert.strictEqual(r.listeners('close').length, 0); +assert.strictEqual(w.endCalls, limit); w.endCalls = 0; @@ -87,7 +87,7 @@ for (i = 0; i < limit; i++) { r.pipe(w); w.emit('close'); } -assert.strictEqual(0, w.listeners('close').length); +assert.strictEqual(w.listeners('close').length, 0); r = new Readable(); w = new Writable(); From 37dfdccbb600d0e69dd25eab621a73a49c77a1f8 Mon Sep 17 00:00:00 2001 From: KelvinLawHF1 Date: Fri, 12 Oct 2018 10:26:11 -0700 Subject: [PATCH 110/178] test: fix assertions argument order PR-URL: https://github.com/nodejs/node/pull/23544 Reviewed-By: Anatoli Papirovski Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/parallel/test-vm-static-this.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-vm-static-this.js b/test/parallel/test-vm-static-this.js index d4530604dc06f0..e9382d6c3b4c1a 100644 --- a/test/parallel/test-vm-static-this.js +++ b/test/parallel/test-vm-static-this.js @@ -26,7 +26,7 @@ const vm = require('vm'); // Run a string const result = vm.runInThisContext('\'passed\';'); -assert.strictEqual('passed', result); +assert.strictEqual(result, 'passed'); // thrown error assert.throws(function() { @@ -35,7 +35,7 @@ assert.throws(function() { global.hello = 5; vm.runInThisContext('hello = 2'); -assert.strictEqual(2, global.hello); +assert.strictEqual(global.hello, 2); // pass values @@ -48,14 +48,14 @@ global.obj = { foo: 0, baz: 3 }; /* eslint-disable no-unused-vars */ const baz = vm.runInThisContext(code); /* eslint-enable no-unused-vars */ -assert.strictEqual(0, global.obj.foo); -assert.strictEqual(2, global.bar); -assert.strictEqual(1, global.foo); +assert.strictEqual(global.obj.foo, 0); +assert.strictEqual(global.bar, 2); +assert.strictEqual(global.foo, 1); // call a function global.f = function() { global.foo = 100; }; vm.runInThisContext('f()'); -assert.strictEqual(100, global.foo); +assert.strictEqual(global.foo, 100); common.allowGlobals( global.hello, From 810c0d99d1103c5b7228f161bb9d773fc4859419 Mon Sep 17 00:00:00 2001 From: Cody Hazelwood Date: Fri, 12 Oct 2018 10:40:49 -0700 Subject: [PATCH 111/178] src: use MallocedBuffer abstraction for buffers Drop `Free` and `std::unique_ptr` in favor of Node's `MallocedBuffer` for `char[]` buffer memory mangement. PR-URL: https://github.com/nodejs/node/pull/23543 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Franziska Hinkelmann --- src/stream_base.cc | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/stream_base.cc b/src/stream_base.cc index f44e188b5b818c..c6cce9c2d09ba9 100644 --- a/src/stream_base.cc +++ b/src/stream_base.cc @@ -8,6 +8,7 @@ #include "env-inl.h" #include "js_stream.h" #include "string_bytes.h" +#include "util.h" #include "util-inl.h" #include "v8.h" @@ -37,11 +38,6 @@ template int StreamBase::WriteString( const FunctionCallbackInfo& args); -struct Free { - void operator()(char* ptr) const { free(ptr); } -}; - - int StreamBase::ReadStartJS(const FunctionCallbackInfo& args) { return ReadStart(); } @@ -127,9 +123,9 @@ int StreamBase::Writev(const FunctionCallbackInfo& args) { } } - std::unique_ptr storage; + MallocedBuffer storage; if (storage_size > 0) - storage = std::unique_ptr(Malloc(storage_size)); + storage = MallocedBuffer(storage_size); offset = 0; if (!all_buffers) { @@ -145,7 +141,7 @@ int StreamBase::Writev(const FunctionCallbackInfo& args) { // Write string CHECK_LE(offset, storage_size); - char* str_storage = storage.get() + offset; + char* str_storage = storage.data + offset; size_t str_size = storage_size - offset; Local string = chunk->ToString(env->context()).ToLocalChecked(); @@ -164,7 +160,7 @@ int StreamBase::Writev(const FunctionCallbackInfo& args) { StreamWriteResult res = Write(*bufs, count, nullptr, req_wrap_obj); SetWriteResultPropertiesOnWrapObject(env, req_wrap_obj, res); - if (res.wrap != nullptr && storage) { + if (res.wrap != nullptr && storage_size > 0) { res.wrap->SetAllocatedStorage(storage.release(), storage_size); } return res.err; @@ -263,18 +259,18 @@ int StreamBase::WriteString(const FunctionCallbackInfo& args) { CHECK_EQ(count, 1); } - std::unique_ptr data; + MallocedBuffer data; if (try_write) { // Copy partial data - data = std::unique_ptr(Malloc(buf.len)); - memcpy(data.get(), buf.base, buf.len); + data = MallocedBuffer(buf.len); + memcpy(data.data, buf.base, buf.len); data_size = buf.len; } else { // Write it - data = std::unique_ptr(Malloc(storage_size)); + data = MallocedBuffer(storage_size); data_size = StringBytes::Write(env->isolate(), - data.get(), + data.data, storage_size, string, enc); @@ -282,7 +278,7 @@ int StreamBase::WriteString(const FunctionCallbackInfo& args) { CHECK_LE(data_size, storage_size); - buf = uv_buf_init(data.get(), data_size); + buf = uv_buf_init(data.data, data_size); uv_stream_t* send_handle = nullptr; From d83d3ed2bcbe9532f834408fa8f1c7f66d92db4c Mon Sep 17 00:00:00 2001 From: Erin Bush Date: Fri, 12 Oct 2018 10:38:06 -0700 Subject: [PATCH 112/178] test: swap expected and actual arguments in assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/23542 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/pummel/test-net-pingpong-delay.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/pummel/test-net-pingpong-delay.js b/test/pummel/test-net-pingpong-delay.js index 25d610bf44a58b..392a6e0fed751e 100644 --- a/test/pummel/test-net-pingpong-delay.js +++ b/test/pummel/test-net-pingpong-delay.js @@ -35,11 +35,11 @@ function pingPongTest(port, host, on_complete) { socket.on('data', function(data) { console.log(data); - assert.strictEqual('PING', data); - assert.strictEqual('open', socket.readyState); - assert.strictEqual(true, count <= N); + assert.strictEqual(data, 'PING'); + assert.strictEqual(socket.readyState, 'open'); + assert.strictEqual(count <= N, true); setTimeout(function() { - assert.strictEqual('open', socket.readyState); + assert.strictEqual(socket.readyState, 'open'); socket.write('PONG'); }, DELAY); }); @@ -51,14 +51,14 @@ function pingPongTest(port, host, on_complete) { socket.on('end', function() { console.log('server-side socket EOF'); - assert.strictEqual('writeOnly', socket.readyState); + assert.strictEqual(socket.readyState, 'writeOnly'); socket.end(); }); socket.on('close', function(had_error) { console.log('server-side socket.end'); - assert.strictEqual(false, had_error); - assert.strictEqual('closed', socket.readyState); + assert.strictEqual(had_error, false); + assert.strictEqual(socket.readyState, 'closed'); socket.server.close(); }); }); @@ -69,17 +69,17 @@ function pingPongTest(port, host, on_complete) { client.setEncoding('utf8'); client.on('connect', function() { - assert.strictEqual('open', client.readyState); + assert.strictEqual(client.readyState, 'open'); client.write('PING'); }); client.on('data', function(data) { console.log(data); - assert.strictEqual('PONG', data); - assert.strictEqual('open', client.readyState); + assert.strictEqual(data, 'PONG'); + assert.strictEqual(client.readyState, 'open'); setTimeout(function() { - assert.strictEqual('open', client.readyState); + assert.strictEqual(client.readyState, 'open'); if (count++ < N) { client.write('PING'); } else { @@ -97,7 +97,7 @@ function pingPongTest(port, host, on_complete) { client.on('close', common.mustCall(function() { console.log('client.end'); - assert.strictEqual(N + 1, count); + assert.strictEqual(count, N + 1); assert.ok(client_ended); if (on_complete) on_complete(); })); From 446771eb65889b3e3965dbffc27f4e34a7067042 Mon Sep 17 00:00:00 2001 From: David Xue Date: Fri, 12 Oct 2018 10:42:25 -0700 Subject: [PATCH 113/178] test: added test for generateKeyPair MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23541 Reviewed-By: James M Snell Reviewed-By: Tobias Nießen Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-crypto-keygen.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index af60c662f9340d..e9fe630dd72e84 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -358,6 +358,16 @@ function convertDERToPEM(label, der) { }); } +{ + // Test keygen without options object. + common.expectsError(() => generateKeyPair('rsa', common.mustNotCall()), { + type: TypeError, + code: 'ERR_INVALID_ARG_TYPE', + message: 'The "options" argument must be of ' + + 'type object. Received type undefined' + }); +} + { // Missing / invalid publicKeyEncoding. for (const enc of [undefined, null, 0, 'a', true]) { From 3c2f9ad0a1ef366e76188a01a24042550fa86b5b Mon Sep 17 00:00:00 2001 From: Allan Zheng Date: Fri, 12 Oct 2018 10:27:21 -0700 Subject: [PATCH 114/178] test: reverse the order of assertion statement arguments in pingpong test PR-URL: https://github.com/nodejs/node/pull/23540 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- test/pummel/test-net-pingpong.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/test/pummel/test-net-pingpong.js b/test/pummel/test-net-pingpong.js index 4db843afd3efc8..29ffd0bdf7261b 100644 --- a/test/pummel/test-net-pingpong.js +++ b/test/pummel/test-net-pingpong.js @@ -32,8 +32,8 @@ function pingPongTest(port, host, on_complete) { let sent_final_ping = false; const server = net.createServer({ allowHalfOpen: true }, function(socket) { - assert.strictEqual(true, socket.remoteAddress !== null); - assert.strictEqual(true, socket.remoteAddress !== undefined); + assert.strictEqual(socket.remoteAddress !== null, true); + assert.strictEqual(socket.remoteAddress !== undefined, true); const address = socket.remoteAddress; if (host === '127.0.0.1') { assert.strictEqual(address, '127.0.0.1'); @@ -50,21 +50,21 @@ function pingPongTest(port, host, on_complete) { socket.on('data', function(data) { console.log(`server got: ${JSON.stringify(data)}`); - assert.strictEqual('open', socket.readyState); - assert.strictEqual(true, count <= N); + assert.strictEqual(socket.readyState, 'open'); + assert.strictEqual(count <= N, true); if (/PING/.test(data)) { socket.write('PONG'); } }); socket.on('end', function() { - assert.strictEqual('writeOnly', socket.readyState); + assert.strictEqual(socket.readyState, 'writeOnly'); socket.end(); }); socket.on('close', function(had_error) { - assert.strictEqual(false, had_error); - assert.strictEqual('closed', socket.readyState); + assert.strictEqual(had_error, false); + assert.strictEqual(socket.readyState, 'closed'); socket.server.close(); }); }); @@ -75,21 +75,21 @@ function pingPongTest(port, host, on_complete) { client.setEncoding('utf8'); client.on('connect', function() { - assert.strictEqual('open', client.readyState); + assert.strictEqual(client.readyState, 'open'); client.write('PING'); }); client.on('data', function(data) { console.log(`client got: ${data}`); - assert.strictEqual('PONG', data); + assert.strictEqual(data, 'PONG'); count += 1; if (sent_final_ping) { - assert.strictEqual('readOnly', client.readyState); + assert.strictEqual(client.readyState, 'readOnly'); return; } else { - assert.strictEqual('open', client.readyState); + assert.strictEqual(client.readyState, 'open'); } if (count < N) { @@ -102,8 +102,8 @@ function pingPongTest(port, host, on_complete) { }); client.on('close', function() { - assert.strictEqual(N + 1, count); - assert.strictEqual(true, sent_final_ping); + assert.strictEqual(count, N + 1); + assert.strictEqual(sent_final_ping, true); if (on_complete) on_complete(); tests_run += 1; }); @@ -118,5 +118,5 @@ pingPongTest(common.PORT + 1, null); if (!common.isSunOS) pingPongTest(common.PORT + 2, '::1'); process.on('exit', function() { - assert.strictEqual(common.isSunOS ? 2 : 3, tests_run); + assert.strictEqual(tests_run, common.isSunOS ? 2 : 3); }); From c5d0a48fb3c2a5ba564800447628bbd135369f35 Mon Sep 17 00:00:00 2001 From: Ivan Lukasevych Date: Fri, 12 Oct 2018 10:39:25 -0700 Subject: [PATCH 115/178] test: fix assert.strictEqual() arguments order PR-URL: https://github.com/nodejs/node/pull/23539 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-tls-set-encoding.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-tls-set-encoding.js b/test/parallel/test-tls-set-encoding.js index b3aa52a22a73f3..77cb5763aeecca 100644 --- a/test/parallel/test-tls-set-encoding.js +++ b/test/parallel/test-tls-set-encoding.js @@ -64,15 +64,15 @@ server.listen(0, function() { // readyState is deprecated but we want to make // sure this isn't triggering an assert in lib/net.js // See https://github.com/nodejs/node-v0.x-archive/issues/1069. - assert.strictEqual('closed', client.readyState); + assert.strictEqual(client.readyState, 'closed'); // Confirming the buffer string is encoded in ASCII // and thus does NOT match the UTF8 string - assert.notStrictEqual(buffer, messageUtf8); + assert.notStrictEqual(messageUtf8, buffer); // Confirming the buffer string is encoded in ASCII // and thus does equal the ASCII string representation - assert.strictEqual(buffer, messageAscii); + assert.strictEqual(messageAscii, buffer); server.close(); }); From 0b0aeda2ceec4089da2b53a3372006fea9d85b81 Mon Sep 17 00:00:00 2001 From: Justin denBroeder Date: Fri, 12 Oct 2018 10:30:25 -0700 Subject: [PATCH 116/178] test: assert.strictEqual parameters ordered correctly The assert.strictEqual function should have the actual value first and the expected value second to enable easier debugging of AssertionErrors. PR-URL: https://github.com/nodejs/node/pull/23538 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/parallel/test-tls-securepair-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-tls-securepair-server.js b/test/parallel/test-tls-securepair-server.js index 994e037c05a5e5..92234fb4108fc5 100644 --- a/test/parallel/test-tls-securepair-server.js +++ b/test/parallel/test-tls-securepair-server.js @@ -137,7 +137,7 @@ server.listen(0, common.mustCall(function() { client.stdout.pipe(process.stdout, { end: false }); client.on('exit', common.mustCall(function(code) { - assert.strictEqual(0, code); + assert.strictEqual(code, 0); server.close(); })); })); From 96311903e87eeaabbd3ab0fddab205ee6000cdce Mon Sep 17 00:00:00 2001 From: Chris Bautista Date: Fri, 12 Oct 2018 17:35:46 +0000 Subject: [PATCH 117/178] test: switch strictEqual parameters - actual first before expected PR-URL: https://github.com/nodejs/node/pull/23537 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- test/pummel/test-exec.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/pummel/test-exec.js b/test/pummel/test-exec.js index 92b5cb64ec67e3..7d631f87f2f74a 100644 --- a/test/pummel/test-exec.js +++ b/test/pummel/test-exec.js @@ -47,7 +47,7 @@ exec( console.log(`error!: ${err.code}`); console.log(`stdout: ${JSON.stringify(stdout)}`); console.log(`stderr: ${JSON.stringify(stderr)}`); - assert.strictEqual(false, err.killed); + assert.strictEqual(err.killed, false); } else { success_count++; console.dir(stdout); @@ -59,11 +59,11 @@ exec( exec('thisisnotavalidcommand', function(err, stdout, stderr) { if (err) { error_count++; - assert.strictEqual('', stdout); + assert.strictEqual(stdout, ''); assert.strictEqual(typeof err.code, 'number'); assert.notStrictEqual(err.code, 0); - assert.strictEqual(false, err.killed); - assert.strictEqual(null, err.signal); + assert.strictEqual(err.killed, false); + assert.strictEqual(err.signal, null); console.log(`error code: ${err.code}`); console.log(`stdout: ${JSON.stringify(stdout)}`); console.log(`stderr: ${JSON.stringify(stderr)}`); @@ -97,7 +97,7 @@ process.nextTick(function() { console.log(`kill pid ${killMeTwice.pid}`); // make sure there is no race condition in starting the process // the PID SHOULD exist directly following the exec() call. - assert.strictEqual('number', typeof killMeTwice._handle.pid); + assert.strictEqual(typeof killMeTwice._handle.pid, 'number'); // Kill the process killMeTwice.kill(); }); @@ -128,6 +128,6 @@ exec('python -c "print 200000*\'C\'"', { maxBuffer: 1000 }, process.on('exit', function() { - assert.strictEqual(1, success_count); - assert.strictEqual(1, error_count); + assert.strictEqual(success_count, 1); + assert.strictEqual(error_count, 1); }); From 83fa60b37b775a1ef768b504a3cbae928a0c9c92 Mon Sep 17 00:00:00 2001 From: Joe Grosspietsch Date: Fri, 12 Oct 2018 10:57:10 -0700 Subject: [PATCH 118/178] test: fix strictEqual assertion order on readline tests PR-URL: https://github.com/nodejs/node/pull/23561 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/parallel/test-readline.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-readline.js b/test/parallel/test-readline.js index 82bf74549b2343..d464fdc440c58b 100644 --- a/test/parallel/test-readline.js +++ b/test/parallel/test-readline.js @@ -143,7 +143,7 @@ const assert = require('assert'); '' ].forEach(function(expectedLine) { rl.write.apply(rl, key.xterm.metad); - assert.strictEqual(0, rl.cursor); - assert.strictEqual(expectedLine, rl.line); + assert.strictEqual(rl.cursor, 0); + assert.strictEqual(rl.line, expectedLine); }); } From a5a1e9a2e4197e8b5a4a324420e042e4ee61ed10 Mon Sep 17 00:00:00 2001 From: naris93 Date: Fri, 12 Oct 2018 10:47:42 -0700 Subject: [PATCH 119/178] test: modernize test-crypto-domain PR-URL: https://github.com/nodejs/node/pull/23559 Reviewed-By: Sam Ruby Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/parallel/test-crypto-domain.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-crypto-domain.js b/test/parallel/test-crypto-domain.js index 348b55b09d4e17..62e2be4c0f39c2 100644 --- a/test/parallel/test-crypto-domain.js +++ b/test/parallel/test-crypto-domain.js @@ -28,7 +28,7 @@ const assert = require('assert'); const crypto = require('crypto'); const domain = require('domain'); -function test(fn) { +const test = (fn) => { const ex = new Error('BAM'); const d = domain.create(); d.on('error', common.mustCall(function(err) { @@ -38,7 +38,7 @@ function test(fn) { throw ex; }); d.run(cb); -} +}; test(function(cb) { crypto.pbkdf2('password', 'salt', 1, 8, cb); From c0014d5ff01a3988c8f49b668b6ca24a8ad45cc8 Mon Sep 17 00:00:00 2001 From: Victor Poriazov Date: Fri, 12 Oct 2018 13:55:28 -0400 Subject: [PATCH 120/178] test: fix order of assert arguments in vm-new-script-this-context Fixes the order of assert.strictEqual arguments. PR-URL: https://github.com/nodejs/node/pull/23558 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/parallel/test-vm-new-script-this-context.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-vm-new-script-this-context.js b/test/parallel/test-vm-new-script-this-context.js index 2c0c21690e1821..18f39f9086ae2a 100644 --- a/test/parallel/test-vm-new-script-this-context.js +++ b/test/parallel/test-vm-new-script-this-context.js @@ -27,7 +27,7 @@ const Script = require('vm').Script; // Run a string let script = new Script('\'passed\';'); const result = script.runInThisContext(script); -assert.strictEqual('passed', result); +assert.strictEqual(result, 'passed'); // Thrown error script = new Script('throw new Error(\'test\');'); @@ -38,7 +38,7 @@ assert.throws(() => { global.hello = 5; script = new Script('hello = 2'); script.runInThisContext(script); -assert.strictEqual(2, global.hello); +assert.strictEqual(global.hello, 2); // Pass values @@ -49,15 +49,15 @@ global.foo = 2; global.obj = { foo: 0, baz: 3 }; script = new Script(global.code); script.runInThisContext(script); -assert.strictEqual(0, global.obj.foo); -assert.strictEqual(2, global.bar); -assert.strictEqual(1, global.foo); +assert.strictEqual(global.obj.foo, 0); +assert.strictEqual(global.bar, 2); +assert.strictEqual(global.foo, 1); // Call a function global.f = function() { global.foo = 100; }; script = new Script('f()'); script.runInThisContext(script); -assert.strictEqual(100, global.foo); +assert.strictEqual(global.foo, 100); common.allowGlobals( global.hello, From 7e2edc5f553f999ff1dd3c1ef1e0a21b9687bb94 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 12 Oct 2018 10:44:03 -0700 Subject: [PATCH 121/178] test: added async-hook benchmark Added a minimalist benchmark test for the async-hooks. PR-URL: https://github.com/nodejs/node/pull/23556 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Gabriel Schulhof Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/sequential/test-benchmark-async-hooks.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/sequential/test-benchmark-async-hooks.js diff --git a/test/sequential/test-benchmark-async-hooks.js b/test/sequential/test-benchmark-async-hooks.js new file mode 100644 index 00000000000000..4cb6f89a8c70e3 --- /dev/null +++ b/test/sequential/test-benchmark-async-hooks.js @@ -0,0 +1,18 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +if (!common.enoughTestMem) + common.skip('Insufficient memory for async_hooks benchmark test'); + +const runBenchmark = require('../common/benchmark'); + +runBenchmark('async_hooks', + [ + 'method=trackingDisabled', + 'n=10' + ], + {}); From f77f6939422c5e93c0605addac9d548b02c88dec Mon Sep 17 00:00:00 2001 From: Jackelin Herrera Date: Fri, 12 Oct 2018 10:14:18 -0700 Subject: [PATCH 122/178] test: reverse order of args in reconnect-error assert PR-URL: https://github.com/nodejs/node/pull/23555 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/sequential/test-net-reconnect-error.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/sequential/test-net-reconnect-error.js b/test/sequential/test-net-reconnect-error.js index 128feffc933ae3..e16d567c0ad1bb 100644 --- a/test/sequential/test-net-reconnect-error.js +++ b/test/sequential/test-net-reconnect-error.js @@ -33,7 +33,7 @@ c.on('connect', common.mustNotCall('client should not have connected')); c.on('error', common.mustCall((e) => { client_error_count++; - assert.strictEqual('ECONNREFUSED', e.code); + assert.strictEqual(e.code, 'ECONNREFUSED'); }, N + 1)); c.on('close', common.mustCall(() => { @@ -42,6 +42,6 @@ c.on('close', common.mustCall(() => { }, N + 1)); process.on('exit', function() { - assert.strictEqual(N + 1, disconnect_count); - assert.strictEqual(N + 1, client_error_count); + assert.strictEqual(disconnect_count, N + 1); + assert.strictEqual(client_error_count, N + 1); }); From d9a1776bcdf6198d03f17bac18c03726ae3ccd2f Mon Sep 17 00:00:00 2001 From: Marcos Frony Date: Fri, 12 Oct 2018 10:48:13 -0700 Subject: [PATCH 123/178] build: add .DS_store to .gitgnore The following files were not being ignored: deps/npm/node_modules/node-gyp/gyp/tools/.DS_Store deps/npm/node_modules/node-gyp/gyp/tools/Xcode/.DS_Store PR-URL: https://github.com/nodejs/node/pull/23554 Reviewed-By: Hitesh Kanwathirtha Reviewed-By: Ruben Bridgewater Reviewed-By: Joyee Cheung Reviewed-By: Refael Ackermann --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f652a2c74c37d6..dad5a3efd8bcae 100644 --- a/.gitignore +++ b/.gitignore @@ -133,3 +133,5 @@ deps/uv/docs/src/guide/ deps/v8/gypfiles/Debug/ deps/v8/gypfiles/Release/ deps/v8/third_party/eu-strip/ + +.DS_Store From 620c97716c9c77dcc6fc12d86f486fed729e9f85 Mon Sep 17 00:00:00 2001 From: Murtaza H <1850989+mhussa19@users.noreply.github.com> Date: Fri, 12 Oct 2018 09:55:48 -0700 Subject: [PATCH 124/178] test: removed unused error variable in try catch In test/parallel/test-fs-access.js PR-URL: https://github.com/nodejs/node/pull/23553 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/parallel/test-fs-access.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-fs-access.js b/test/parallel/test-fs-access.js index 02e9356275dbc7..d0f730f25e12dd 100644 --- a/test/parallel/test-fs-access.js +++ b/test/parallel/test-fs-access.js @@ -55,7 +55,7 @@ if (!common.isWindows && process.getuid() === 0) { try { process.setuid('nobody'); hasWriteAccessForReadonlyFile = false; - } catch (err) { + } catch { } } From f0346065a7fad3ed1b22159b92a6e5a9bafb2851 Mon Sep 17 00:00:00 2001 From: Clinton Pahl Date: Fri, 12 Oct 2018 10:31:06 -0700 Subject: [PATCH 125/178] test: update strictEqual arguments order The argument order in the strictEqual check against stderr is in the wrong order. The first argument is now the actual value and the second argument is the expected value. PR-URL: https://github.com/nodejs/node/pull/23552 Reviewed-By: Gabriel Schulhof Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/parallel/test-stdin-from-file.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-stdin-from-file.js b/test/parallel/test-stdin-from-file.js index eda8e068fe37fe..f4fcb32edbfde5 100644 --- a/test/parallel/test-stdin-from-file.js +++ b/test/parallel/test-stdin-from-file.js @@ -36,5 +36,5 @@ childProcess.exec(cmd, common.mustCall(function(err, stdout, stderr) { assert.ifError(err); assert.strictEqual(stdout, `hello world\r\n${string}`); - assert.strictEqual('', stderr); + assert.strictEqual(stderr, ''); })); From ea1565e09fbf668e805a648b3dd2a53b71d54946 Mon Sep 17 00:00:00 2001 From: Maki Toda Date: Fri, 12 Oct 2018 10:35:04 -0700 Subject: [PATCH 126/178] test: removed unused variable in fs-watch-file-slow PR-URL: https://github.com/nodejs/node/pull/23548 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat --- test/pummel/test-fs-watch-file-slow.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pummel/test-fs-watch-file-slow.js b/test/pummel/test-fs-watch-file-slow.js index cf7adc913db28c..94f2a263881427 100644 --- a/test/pummel/test-fs-watch-file-slow.js +++ b/test/pummel/test-fs-watch-file-slow.js @@ -34,7 +34,7 @@ let nevents = 0; try { fs.unlinkSync(FILENAME); -} catch (e) { +} catch { // swallow } From ac23e6557f3a9d4283e0d2f0948f871892669faf Mon Sep 17 00:00:00 2001 From: Weijia Wang <381152119@qq.com> Date: Fri, 17 Aug 2018 16:33:45 +0800 Subject: [PATCH 127/178] buffer: move process.binding('buffer') to internalBinding PR-URL: https://github.com/nodejs/node/pull/22370 Refs: https://github.com/nodejs/node/issues/22160 Reviewed-By: Colin Ihrig Reviewed-By: Denys Otrishko Reviewed-By: Matteo Collina Reviewed-By: Anna Henningsen --- lib/buffer.js | 2 +- lib/internal/bootstrap/node.js | 3 ++- lib/internal/buffer.js | 2 +- lib/internal/encoding.js | 2 +- lib/internal/errors.js | 2 +- lib/internal/util/comparisons.js | 2 +- lib/v8.js | 2 +- src/node_buffer.cc | 2 +- .../test-stringbytes-external-at-max.js | 4 +++- .../test-stringbytes-external-exceed-max-by-1-ascii.js | 4 +++- .../test-stringbytes-external-exceed-max-by-1-base64.js | 4 +++- .../test-stringbytes-external-exceed-max-by-1-binary.js | 5 +++-- .../test-stringbytes-external-exceed-max-by-1-hex.js | 4 +++- .../test-stringbytes-external-exceed-max-by-1-utf8.js | 4 +++- .../test-stringbytes-external-exceed-max-by-2.js | 4 +++- .../test-stringbytes-external-exceed-max.js | 4 +++- test/parallel/test-buffer-fill.js | 5 +++-- test/parallel/test-internal-errors.js | 4 +++- .../test-process-binding-internalbinding-whitelist.js | 1 + test/parallel/test-process-binding.js | 4 +++- test/sequential/test-fs-readfile-tostring-fail.js | 4 +++- 21 files changed, 46 insertions(+), 22 deletions(-) diff --git a/lib/buffer.js b/lib/buffer.js index c7ffa42a5487cb..af69f43735f26f 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -36,7 +36,7 @@ const { swap64: _swap64, kMaxLength, kStringMaxLength -} = process.binding('buffer'); +} = internalBinding('buffer'); const { isAnyArrayBuffer } = internalBinding('types'); const { customInspectSymbol, diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 2f638555ee28ce..f53ed55dcadb4a 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -413,7 +413,8 @@ 'url', 'spawn_sync', 'js_stream', - 'zlib']); + 'zlib', + 'buffer']); process.binding = function binding(name) { return internalBindingWhitelist.has(name) ? internalBinding(name) : diff --git a/lib/internal/buffer.js b/lib/internal/buffer.js index 3ea34af59e2072..61bdced4d63a58 100644 --- a/lib/internal/buffer.js +++ b/lib/internal/buffer.js @@ -1,6 +1,6 @@ 'use strict'; -const binding = process.binding('buffer'); +const binding = internalBinding('buffer'); const { ERR_BUFFER_OUT_OF_BOUNDS, ERR_INVALID_ARG_TYPE, diff --git a/lib/internal/encoding.js b/lib/internal/encoding.js index b2448144b0854a..77eca99202d033 100644 --- a/lib/internal/encoding.js +++ b/lib/internal/encoding.js @@ -29,7 +29,7 @@ const { const { encodeUtf8String -} = process.binding('buffer'); +} = internalBinding('buffer'); var Buffer; function lazyBuffer() { diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 58eba742e08685..e8f1ed1a42ebce 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -20,7 +20,7 @@ const { UV_EAI_NODATA, UV_EAI_NONAME } = internalBinding('uv'); -const { kMaxLength } = process.binding('buffer'); +const { kMaxLength } = internalBinding('buffer'); const { defineProperty } = Object; // Lazily loaded diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js index 3641f0cdc23cc4..9adffea09a14c5 100644 --- a/lib/internal/util/comparisons.js +++ b/lib/internal/util/comparisons.js @@ -1,6 +1,6 @@ 'use strict'; -const { compare } = process.binding('buffer'); +const { compare } = internalBinding('buffer'); const { isArrayBufferView } = require('internal/util/types'); const { isAnyArrayBuffer, diff --git a/lib/v8.js b/lib/v8.js index 1cba0464b1be67..b29304de5c08dc 100644 --- a/lib/v8.js +++ b/lib/v8.js @@ -20,7 +20,7 @@ const { Serializer: _Serializer, Deserializer: _Deserializer } = internalBinding('serdes'); -const { copy } = process.binding('buffer'); +const { copy } = internalBinding('buffer'); const { objectToString } = require('internal/util'); const { FastBuffer } = require('internal/buffer'); diff --git a/src/node_buffer.cc b/src/node_buffer.cc index e3a1515d6a3550..19841336e99a26 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -1104,4 +1104,4 @@ void Initialize(Local target, } // namespace Buffer } // namespace node -NODE_BUILTIN_MODULE_CONTEXT_AWARE(buffer, node::Buffer::Initialize) +NODE_MODULE_CONTEXT_AWARE_INTERNAL(buffer, node::Buffer::Initialize) diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js index 4c074773a21fc2..820f71ec9e7a01 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -10,7 +12,7 @@ const assert = require('assert'); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js index c7cf1319e7c57c..7f5a8347956e43 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js index 920124e897de32..d7fe26814f7b24 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js index e4edd32797c2af..7e75ba1246662c 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js @@ -1,7 +1,8 @@ -// Flags: --expose-gc +// Flags: --expose-gc --expose-internals 'use strict'; const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -11,7 +12,7 @@ const assert = require('assert'); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js index 18fb46e0df95b8..57242399bb02b9 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js index 5f7221b591e8ac..4a0908290c1926 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -10,7 +12,7 @@ const assert = require('assert'); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js index 751c864bace06a..3c613a69fd3fcd 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -10,7 +12,7 @@ const assert = require('assert'); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js index e46b5f24cce028..be571c5059ef8f 100644 --- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js +++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../../common'); +const { internalBinding } = require('internal/test/binding'); const skipMessage = 'intensive toString tests due to memory confinements'; if (!common.enoughTestMem) common.skip(skipMessage); @@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`); // v8 fails silently if string length > v8::String::kMaxLength // v8::String::kMaxLength defined in v8.h -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; let buf; try { diff --git a/test/parallel/test-buffer-fill.js b/test/parallel/test-buffer-fill.js index 3daaa91d8f1bad..6a0a8adb7ae2b9 100644 --- a/test/parallel/test-buffer-fill.js +++ b/test/parallel/test-buffer-fill.js @@ -3,6 +3,7 @@ const common = require('../common'); const assert = require('assert'); const { codes: { ERR_OUT_OF_RANGE } } = require('internal/errors'); +const { internalBinding } = require('internal/test/binding'); const SIZE = 28; const buf1 = Buffer.allocUnsafe(SIZE); @@ -327,7 +328,7 @@ Buffer.alloc(8, ''); // Testing process.binding. Make sure "start" is properly checked for -1 wrap // around. assert.strictEqual( - process.binding('buffer').fill(Buffer.alloc(1), 1, -1, 0, 1), -2); + internalBinding('buffer').fill(Buffer.alloc(1), 1, -1, 0, 1), -2); // Make sure "end" is properly checked, even if it's magically mangled using // Symbol.toPrimitive. @@ -365,7 +366,7 @@ assert.strictEqual( // Testing process.binding. Make sure "end" is properly checked for -1 wrap // around. assert.strictEqual( - process.binding('buffer').fill(Buffer.alloc(1), 1, 1, -2, 1), -2); + internalBinding('buffer').fill(Buffer.alloc(1), 1, 1, -2, 1), -2); // Test that bypassing 'length' won't cause an abort. common.expectsError(() => { diff --git a/test/parallel/test-internal-errors.js b/test/parallel/test-internal-errors.js index 3a311819f9d9cd..7d5dcce0d40c6a 100644 --- a/test/parallel/test-internal-errors.js +++ b/test/parallel/test-internal-errors.js @@ -5,6 +5,8 @@ const { hijackStdout, restoreStdout, } = require('../common/hijackstdio'); + +const { internalBinding } = require('internal/test/binding'); const assert = require('assert'); const errors = require('internal/errors'); @@ -183,7 +185,7 @@ assert.strictEqual( 'Invalid asyncId value: undefined'); { - const { kMaxLength } = process.binding('buffer'); + const { kMaxLength } = internalBinding('buffer'); const error = new errors.codes.ERR_BUFFER_TOO_LARGE(); assert.strictEqual( error.message, diff --git a/test/parallel/test-process-binding-internalbinding-whitelist.js b/test/parallel/test-process-binding-internalbinding-whitelist.js index 56715799f88506..9cd12b54ea0f8a 100644 --- a/test/parallel/test-process-binding-internalbinding-whitelist.js +++ b/test/parallel/test-process-binding-internalbinding-whitelist.js @@ -15,3 +15,4 @@ assert(process.binding('contextify')); assert(process.binding('url')); assert(process.binding('spawn_sync')); assert(process.binding('js_stream')); +assert(process.binding('buffer')); diff --git a/test/parallel/test-process-binding.js b/test/parallel/test-process-binding.js index 3715826bb27615..05bb0e6aa07d41 100644 --- a/test/parallel/test-process-binding.js +++ b/test/parallel/test-process-binding.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals require('../common'); const assert = require('assert'); +const { internalBinding } = require('internal/test/binding'); assert.throws( function() { @@ -9,4 +11,4 @@ assert.throws( /No such module: test/ ); -process.binding('buffer'); +internalBinding('buffer'); diff --git a/test/sequential/test-fs-readfile-tostring-fail.js b/test/sequential/test-fs-readfile-tostring-fail.js index c5ed8559103d77..8dcab75e0fb119 100644 --- a/test/sequential/test-fs-readfile-tostring-fail.js +++ b/test/sequential/test-fs-readfile-tostring-fail.js @@ -1,6 +1,8 @@ 'use strict'; +// Flags: --expose-internals const common = require('../common'); +const { internalBinding } = require('internal/test/binding'); if (!common.enoughTestMem) common.skip('intensive toString tests due to memory confinements'); @@ -9,7 +11,7 @@ const assert = require('assert'); const fs = require('fs'); const path = require('path'); const cp = require('child_process'); -const kStringMaxLength = process.binding('buffer').kStringMaxLength; +const kStringMaxLength = internalBinding('buffer').kStringMaxLength; if (common.isAIX && (Number(cp.execSync('ulimit -f')) * 512) < kStringMaxLength) common.skip('intensive toString tests due to file size confinements'); From 134389142edbe09f8881338ee738b6b93a3ec5e0 Mon Sep 17 00:00:00 2001 From: Jason Nutter Date: Fri, 12 Oct 2018 11:25:42 -0700 Subject: [PATCH 128/178] test: fix order of parameters to assert.strictEqual Usage of assert.strictEqual in test-net-server-listen-remove-callback.js incorrectly passes the expected value as the first argument and actual value as the second argument. PR-URL: https://github.com/nodejs/node/pull/23590 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-net-server-listen-remove-callback.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-net-server-listen-remove-callback.js b/test/parallel/test-net-server-listen-remove-callback.js index 3989b229062304..a874099fb8c782 100644 --- a/test/parallel/test-net-server-listen-remove-callback.js +++ b/test/parallel/test-net-server-listen-remove-callback.js @@ -30,7 +30,7 @@ const server = net.createServer(); server.on('close', function() { const listeners = server.listeners('listening'); console.log('Closed, listeners:', listeners.length); - assert.strictEqual(0, listeners.length); + assert.strictEqual(listeners.length, 0); }); server.listen(0, function() { From c8986bb7a3cccd0df2269cf7d3f84ab9776e980d Mon Sep 17 00:00:00 2001 From: "Illescas, Ricardo" Date: Fri, 12 Oct 2018 11:19:56 -0600 Subject: [PATCH 129/178] test: fix argument order in assertions PR-URL: https://github.com/nodejs/node/pull/23589 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil --- test/parallel/test-child-process-ipc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-child-process-ipc.js b/test/parallel/test-child-process-ipc.js index 36293cb73c1a7d..f1652a91e6968e 100644 --- a/test/parallel/test-child-process-ipc.js +++ b/test/parallel/test-child-process-ipc.js @@ -44,13 +44,13 @@ child.stdout.on('data', function(data) { console.log(`child said: ${JSON.stringify(data)}`); if (!gotHelloWorld) { console.error('testing for hello world'); - assert.strictEqual('hello world\r\n', data); + assert.strictEqual(data, 'hello world\r\n'); gotHelloWorld = true; console.error('writing echo me'); child.stdin.write('echo me\r\n'); } else { console.error('testing for echo me'); - assert.strictEqual('echo me\r\n', data); + assert.strictEqual(data, 'echo me\r\n'); gotEcho = true; child.stdin.end(); } From c30658c11e2c80c97cb716151db55f8e58c129bc Mon Sep 17 00:00:00 2001 From: blakehall Date: Fri, 12 Oct 2018 11:22:53 -0700 Subject: [PATCH 130/178] test: fix assert.strictEqual() parameter order in test-path-maklong.js The argument order in the strictEqual check was in the wrong order. The first argument is now the actual value and the second argument is the expected value. PR-URL: https://github.com/nodejs/node/pull/23587 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-path-makelong.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/test/parallel/test-path-makelong.js b/test/parallel/test-path-makelong.js index f3b145729bd691..01c81b47502f4e 100644 --- a/test/parallel/test-path-makelong.js +++ b/test/parallel/test-path-makelong.js @@ -29,17 +29,18 @@ if (common.isWindows) { const file = fixtures.path('a.js'); const resolvedFile = path.resolve(file); - assert.strictEqual(`\\\\?\\${resolvedFile}`, - path.toNamespacedPath(file)); - assert.strictEqual(`\\\\?\\${resolvedFile}`, - path.toNamespacedPath(`\\\\?\\${file}`)); - assert.strictEqual('\\\\?\\UNC\\someserver\\someshare\\somefile', - path.toNamespacedPath( - '\\\\someserver\\someshare\\somefile')); - assert.strictEqual('\\\\?\\UNC\\someserver\\someshare\\somefile', path - .toNamespacedPath('\\\\?\\UNC\\someserver\\someshare\\somefile')); - assert.strictEqual('\\\\.\\pipe\\somepipe', - path.toNamespacedPath('\\\\.\\pipe\\somepipe')); + assert.strictEqual(path.toNamespacedPath(file), + `\\\\?\\${resolvedFile}`); + assert.strictEqual(path.toNamespacedPath(`\\\\?\\${file}`), + `\\\\?\\${resolvedFile}`); + assert.strictEqual(path.toNamespacedPath( + '\\\\someserver\\someshare\\somefile'), + '\\\\?\\UNC\\someserver\\someshare\\somefile'); + assert.strictEqual(path.toNamespacedPath( + '\\\\?\\UNC\\someserver\\someshare\\somefile'), + '\\\\?\\UNC\\someserver\\someshare\\somefile'); + assert.strictEqual(path.toNamespacedPath('\\\\.\\pipe\\somepipe'), + '\\\\.\\pipe\\somepipe'); } assert.strictEqual(path.toNamespacedPath(null), null); From f87e96665ef8b51c820dae1617c1db2b16f2319d Mon Sep 17 00:00:00 2001 From: seantcoyote Date: Fri, 12 Oct 2018 11:14:50 -0700 Subject: [PATCH 131/178] test: fix assertion arguments order There's no issue for this PR, it's a task at the Node+JS Code-n-Learn. PR-URL: https://github.com/nodejs/node/pull/23584 Reviewed-By: Anatoli Papirovski Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-querystring.js | 65 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/test/parallel/test-querystring.js b/test/parallel/test-querystring.js index 7b77a42a167525..b5a4a599c3b59d 100644 --- a/test/parallel/test-querystring.js +++ b/test/parallel/test-querystring.js @@ -177,9 +177,8 @@ const qsUnescapeTestCases = [ ' !"#$%&\'()*+,-./01234567'] ]; -assert.strictEqual('918854443121279438895193', - qs.parse('id=918854443121279438895193').id); - +assert.strictEqual(qs.parse('id=918854443121279438895193').id, + '918854443121279438895193'); function check(actual, expected, input) { assert(!(actual instanceof Object)); @@ -221,7 +220,7 @@ qsWeirdObjects.forEach((testCase) => { }); qsNoMungeTestCases.forEach((testCase) => { - assert.deepStrictEqual(testCase[0], qs.stringify(testCase[1], '&', '=')); + assert.deepStrictEqual(qs.stringify(testCase[1], '&', '='), testCase[0]); }); // test the nested qs-in-qs case @@ -259,15 +258,15 @@ qsNoMungeTestCases.forEach((testCase) => { // basic qsTestCases.forEach((testCase) => { - assert.strictEqual(testCase[1], qs.stringify(testCase[2])); + assert.strictEqual(qs.stringify(testCase[2]), testCase[1]); }); qsColonTestCases.forEach((testCase) => { - assert.strictEqual(testCase[1], qs.stringify(testCase[2], ';', ':')); + assert.strictEqual(qs.stringify(testCase[2], ';', ':'), testCase[1]); }); qsWeirdObjects.forEach((testCase) => { - assert.strictEqual(testCase[1], qs.stringify(testCase[0])); + assert.strictEqual(qs.stringify(testCase[0]), testCase[1]); }); // invalid surrogate pair throws URIError @@ -281,12 +280,12 @@ common.expectsError( ); // coerce numbers to string -assert.strictEqual('foo=0', qs.stringify({ foo: 0 })); -assert.strictEqual('foo=0', qs.stringify({ foo: -0 })); -assert.strictEqual('foo=3', qs.stringify({ foo: 3 })); -assert.strictEqual('foo=-72.42', qs.stringify({ foo: -72.42 })); -assert.strictEqual('foo=', qs.stringify({ foo: NaN })); -assert.strictEqual('foo=', qs.stringify({ foo: Infinity })); +assert.strictEqual(qs.stringify({ foo: 0 }), 'foo=0'); +assert.strictEqual(qs.stringify({ foo: -0 }), 'foo=0'); +assert.strictEqual(qs.stringify({ foo: 3 }), 'foo=3'); +assert.strictEqual(qs.stringify({ foo: -72.42 }), 'foo=-72.42'); +assert.strictEqual(qs.stringify({ foo: NaN }), 'foo='); +assert.strictEqual(qs.stringify({ foo: Infinity }), 'foo='); // nested { @@ -360,26 +359,26 @@ assert.strictEqual( const b = qs.unescapeBuffer('%d3%f2Ug%1f6v%24%5e%98%cb' + '%0d%ac%a2%2f%9d%eb%d8%a2%e6'); // - assert.strictEqual(0xd3, b[0]); - assert.strictEqual(0xf2, b[1]); - assert.strictEqual(0x55, b[2]); - assert.strictEqual(0x67, b[3]); - assert.strictEqual(0x1f, b[4]); - assert.strictEqual(0x36, b[5]); - assert.strictEqual(0x76, b[6]); - assert.strictEqual(0x24, b[7]); - assert.strictEqual(0x5e, b[8]); - assert.strictEqual(0x98, b[9]); - assert.strictEqual(0xcb, b[10]); - assert.strictEqual(0x0d, b[11]); - assert.strictEqual(0xac, b[12]); - assert.strictEqual(0xa2, b[13]); - assert.strictEqual(0x2f, b[14]); - assert.strictEqual(0x9d, b[15]); - assert.strictEqual(0xeb, b[16]); - assert.strictEqual(0xd8, b[17]); - assert.strictEqual(0xa2, b[18]); - assert.strictEqual(0xe6, b[19]); + assert.strictEqual(b[0], 0xd3); + assert.strictEqual(b[1], 0xf2); + assert.strictEqual(b[2], 0x55); + assert.strictEqual(b[3], 0x67); + assert.strictEqual(b[4], 0x1f); + assert.strictEqual(b[5], 0x36); + assert.strictEqual(b[6], 0x76); + assert.strictEqual(b[7], 0x24); + assert.strictEqual(b[8], 0x5e); + assert.strictEqual(b[9], 0x98); + assert.strictEqual(b[10], 0xcb); + assert.strictEqual(b[11], 0x0d); + assert.strictEqual(b[12], 0xac); + assert.strictEqual(b[13], 0xa2); + assert.strictEqual(b[14], 0x2f); + assert.strictEqual(b[15], 0x9d); + assert.strictEqual(b[16], 0xeb); + assert.strictEqual(b[17], 0xd8); + assert.strictEqual(b[18], 0xa2); + assert.strictEqual(b[19], 0xe6); } assert.strictEqual(qs.unescapeBuffer('a+b', true).toString(), 'a b'); From 93c918ee0cca3ef933f13842f227738eab606da8 Mon Sep 17 00:00:00 2001 From: Justin Lee Date: Fri, 12 Oct 2018 11:19:30 -0700 Subject: [PATCH 132/178] test: increased code coverage for proxySessionHandler PR-URL: https://github.com/nodejs/node/pull/23583 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http2-socket-proxy.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/parallel/test-http2-socket-proxy.js b/test/parallel/test-http2-socket-proxy.js index 17f641835de696..600271fdeffc2e 100644 --- a/test/parallel/test-http2-socket-proxy.js +++ b/test/parallel/test-http2-socket-proxy.js @@ -92,6 +92,17 @@ server.on('stream', common.mustCall(function(stream, headers) { stream.end(); + // Setting socket properties sets the session properties correctly. + const fn = () => {}; + socket.setTimeout = fn; + assert.strictEqual(session.setTimeout, fn); + + socket.ref = fn; + assert.strictEqual(session.ref, fn); + + socket.unref = fn; + assert.strictEqual(session.unref, fn); + stream.session.on('close', common.mustCall(() => { assert.strictEqual(session.socket, undefined); })); From 9bf6e2ee9dab7afc876fae25ea6ea7286e92b43a Mon Sep 17 00:00:00 2001 From: Salman Shakeel Date: Fri, 12 Oct 2018 14:16:51 -0400 Subject: [PATCH 133/178] test: reversed actual and expected values for .strictEqual() Fixed strictEqual() parameters order according to the documentation for the assertion. PR-URL: https://github.com/nodejs/node/pull/23579 Reviewed-By: Anatoli Papirovski Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Gireesh Punathil --- test/parallel/test-next-tick-ordering.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-next-tick-ordering.js b/test/parallel/test-next-tick-ordering.js index 76f43efa932fbf..9ae212cb7f3fbe 100644 --- a/test/parallel/test-next-tick-ordering.js +++ b/test/parallel/test-next-tick-ordering.js @@ -47,7 +47,7 @@ console.log('Running from main.'); process.on('exit', function() { - assert.strictEqual('nextTick', done[0]); + assert.strictEqual(done[0], 'nextTick'); /* Disabling this test. I don't think we can ensure the order for (i = 0; i < N; i += 1) { assert.strictEqual(i, done[i + 1]); From 6df946ce25726292159b2ee0b568f363f83b0ed2 Mon Sep 17 00:00:00 2001 From: Yitong Date: Fri, 12 Oct 2018 11:16:33 -0700 Subject: [PATCH 134/178] test: add crypto.scrypt test case with different encoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23578 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Tobias Nießen Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater --- test/parallel/test-crypto-scrypt.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/parallel/test-crypto-scrypt.js b/test/parallel/test-crypto-scrypt.js index 83ab6edce1b84a..55b5aeaf8ff06b 100644 --- a/test/parallel/test-crypto-scrypt.js +++ b/test/parallel/test-crypto-scrypt.js @@ -189,6 +189,24 @@ for (const options of toobig) { })); } +{ + const defaultEncoding = crypto.DEFAULT_ENCODING; + const defaults = { N: 16384, p: 1, r: 8 }; + const expected = crypto.scryptSync('pass', 'salt', 1, defaults); + + const testEncoding = 'latin1'; + crypto.DEFAULT_ENCODING = testEncoding; + const actual = crypto.scryptSync('pass', 'salt', 1); + assert.deepStrictEqual(actual, expected.toString(testEncoding)); + + crypto.scrypt('pass', 'salt', 1, common.mustCall((err, actual) => { + assert.ifError(err); + assert.deepStrictEqual(actual, expected.toString(testEncoding)); + })); + + crypto.DEFAULT_ENCODING = defaultEncoding; +} + for (const { args, expected } of badargs) { common.expectsError(() => crypto.scrypt(...args), expected); common.expectsError(() => crypto.scryptSync(...args), expected); From bc89f9bbbccaa81583e9295c8d5cfa132c33b11e Mon Sep 17 00:00:00 2001 From: Ruy Adorno Date: Fri, 12 Oct 2018 10:48:12 -0700 Subject: [PATCH 135/178] test: fixed strictEqual arguments order Fixes usage of strictEqual arguments order in test/parallel/test-process-wrap.js Part of Node+JS Interactive 2018 Code & Learn PR-URL: https://github.com/nodejs/node/pull/23576 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-process-wrap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-process-wrap.js b/test/parallel/test-process-wrap.js index ebbb2af5e93ea1..eccdeb5d075575 100644 --- a/test/parallel/test-process-wrap.js +++ b/test/parallel/test-process-wrap.js @@ -38,8 +38,8 @@ p.onexit = function(exitCode, signal) { p.close(); pipe.readStart(); - assert.strictEqual(0, exitCode); - assert.strictEqual('', signal); + assert.strictEqual(exitCode, 0); + assert.strictEqual(signal, ''); processExited = true; }; From c596bcc4ff9108fd357d78011712af18e212e712 Mon Sep 17 00:00:00 2001 From: Liran Tal Date: Fri, 12 Oct 2018 10:46:35 -0700 Subject: [PATCH 136/178] test: fix arguments ordering for assertions to match the docs PR-URL: https://github.com/nodejs/node/pull/23575 Reviewed-By: Hitesh Kanwathirtha Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-require-resolve.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/test/parallel/test-require-resolve.js b/test/parallel/test-require-resolve.js index 2916f3709e3b15..2ffcc711854a87 100644 --- a/test/parallel/test-require-resolve.js +++ b/test/parallel/test-require-resolve.js @@ -25,15 +25,12 @@ const fixtures = require('../common/fixtures'); const assert = require('assert'); assert.strictEqual( - fixtures.path('a.js').toLowerCase(), - require.resolve(fixtures.path('a')).toLowerCase()); + require.resolve(fixtures.path('a')).toLowerCase(), + fixtures.path('a.js').toLowerCase()); assert.strictEqual( - fixtures.path('a.js').toLowerCase(), - require.resolve(fixtures.path('a')).toLowerCase()); -assert.strictEqual( - fixtures.path('nested-index', 'one', 'index.js').toLowerCase(), - require.resolve(fixtures.path('nested-index', 'one')).toLowerCase()); -assert.strictEqual('path', require.resolve('path')); + require.resolve(fixtures.path('nested-index', 'one')).toLowerCase(), + fixtures.path('nested-index', 'one', 'index.js').toLowerCase()); +assert.strictEqual(require.resolve('path'), 'path'); // Test configurable resolve() paths. require(fixtures.path('require-resolve.js')); From cac4909bf31f9eeb1071830cbb5cd6c77748b642 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Fri, 12 Oct 2018 11:10:39 -0700 Subject: [PATCH 137/178] test: augment tests for SourceTextModule Adds tests for a few error conditions. Also, adds tests to make sure the dynamically generated url is correct. PR-URL: https://github.com/nodejs/node/pull/23573 Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig PR-URL: https://github.com/nodejs/node/pull/23572 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen --- test/parallel/test-vm-module-basic.js | 13 +++++++++++++ test/parallel/test-vm-module-errors.js | 14 +++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/test/parallel/test-vm-module-basic.js b/test/parallel/test-vm-module-basic.js index ffe376ccc2b1b1..8cf687c2bb23a8 100644 --- a/test/parallel/test-vm-module-basic.js +++ b/test/parallel/test-vm-module-basic.js @@ -50,3 +50,16 @@ const { SourceTextModule, createContext } = require('vm'); await m.evaluate({ timeout: 500 }) .then(() => assert(false), () => {}); })(); + +// Check the generated url for each module +(async () => { + const context1 = createContext({ }); + const context2 = createContext({ }); + + const m1 = new SourceTextModule('1', { context: context1 }); + assert.strictEqual(m1.url, 'vm:module(0)'); + const m2 = new SourceTextModule('2', { context: context1 }); + assert.strictEqual(m2.url, 'vm:module(1)'); + const m3 = new SourceTextModule('3', { context: context2 }); + assert.strictEqual(m3.url, 'vm:module(0)'); +})(); diff --git a/test/parallel/test-vm-module-errors.js b/test/parallel/test-vm-module-errors.js index a6b2a6e797a1bb..05022160832a53 100644 --- a/test/parallel/test-vm-module-errors.js +++ b/test/parallel/test-vm-module-errors.js @@ -43,7 +43,8 @@ async function checkArgType() { }); for (const invalidOptions of [ - 0, 1, null, true, 'str', () => {}, { url: 0 }, Symbol.iterator + 0, 1, null, true, 'str', () => {}, { url: 0 }, Symbol.iterator, + { context: null }, { context: 'hucairz' }, { context: {} } ]) { common.expectsError(() => { new SourceTextModule('', invalidOptions); @@ -231,6 +232,17 @@ async function checkLinking() { }); } +common.expectsError(() => { + new SourceTextModule('', { + importModuleDynamically: 'hucairz' + }); +}, { + code: 'ERR_INVALID_ARG_TYPE', + type: TypeError, + message: 'The "options.importModuleDynamically"' + + ' property must be of type function. Received type string' +}); + // Check the JavaScript engine deals with exceptions correctly async function checkExecution() { await (async () => { From 2505f05ce8af7c2b928bbe1ab88cd5301c780fc3 Mon Sep 17 00:00:00 2001 From: Joe Shindelar Date: Fri, 12 Oct 2018 11:03:15 -0700 Subject: [PATCH 138/178] test: fix order of arguments passed to strictEqual The argument order in the strictEqual check was in the wrong order. The first argument is now the actual value and the second argument is the expected value. PR-URL: https://github.com/nodejs/node/pull/23571 Reviewed-By: Joyee Cheung Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-net-socket-local-address.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-net-socket-local-address.js b/test/parallel/test-net-socket-local-address.js index 1aa51e0c5c1d87..e80731bc78fb0a 100644 --- a/test/parallel/test-net-socket-local-address.js +++ b/test/parallel/test-net-socket-local-address.js @@ -18,8 +18,8 @@ const server = net.createServer((socket) => { server.on('close', common.mustCall(() => { // client and server should agree on the ports used - assert.deepStrictEqual(clientLocalPorts, serverRemotePorts); - assert.strictEqual(2, conns); + assert.deepStrictEqual(serverRemotePorts, clientLocalPorts); + assert.strictEqual(conns, 2); })); server.listen(0, common.localhostIPv4, connect); From 552fe56b654e6ef4a87d4a9bf935155760a9da25 Mon Sep 17 00:00:00 2001 From: AlixAng Date: Fri, 12 Oct 2018 11:00:55 -0700 Subject: [PATCH 139/178] test: fix strictEqual input parameters order PR-URL: https://github.com/nodejs/node/pull/23570 Reviewed-By: Joyee Cheung Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-pipe-file-to-http.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-pipe-file-to-http.js b/test/parallel/test-pipe-file-to-http.js index 3cadec7a27237e..3d326a77a49bc7 100644 --- a/test/parallel/test-pipe-file-to-http.js +++ b/test/parallel/test-pipe-file-to-http.js @@ -34,7 +34,7 @@ let count = 0; const server = http.createServer(function(req, res) { let timeoutId; - assert.strictEqual('POST', req.method); + assert.strictEqual(req.method, 'POST'); req.pause(); setTimeout(function() { @@ -82,5 +82,5 @@ function makeRequest() { } process.on('exit', function() { - assert.strictEqual(1024 * 10240, count); + assert.strictEqual(count, 1024 * 10240); }); From 01d40473be791c301b596272feef15e7611689cb Mon Sep 17 00:00:00 2001 From: francois Date: Fri, 12 Oct 2018 10:57:07 -0400 Subject: [PATCH 140/178] test: corrected assertion arguments order Fixed the order of expected arguments for assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/23569 Reviewed-By: Joyee Cheung Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/parallel/test-util.js | 139 +++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 66 deletions(-) diff --git a/test/parallel/test-util.js b/test/parallel/test-util.js index 2f91417d106148..f0e2f642ea25d4 100644 --- a/test/parallel/test-util.js +++ b/test/parallel/test-util.js @@ -28,75 +28,75 @@ const errors = require('internal/errors'); const context = require('vm').runInNewContext; // isArray -assert.strictEqual(true, util.isArray([])); -assert.strictEqual(true, util.isArray(Array())); -assert.strictEqual(true, util.isArray(new Array())); -assert.strictEqual(true, util.isArray(new Array(5))); -assert.strictEqual(true, util.isArray(new Array('with', 'some', 'entries'))); -assert.strictEqual(true, util.isArray(context('Array')())); -assert.strictEqual(false, util.isArray({})); -assert.strictEqual(false, util.isArray({ push: function() {} })); -assert.strictEqual(false, util.isArray(/regexp/)); -assert.strictEqual(false, util.isArray(new Error())); -assert.strictEqual(false, util.isArray(Object.create(Array.prototype))); +assert.strictEqual(util.isArray([]), true); +assert.strictEqual(util.isArray(Array()), true); +assert.strictEqual(util.isArray(new Array()), true); +assert.strictEqual(util.isArray(new Array(5)), true); +assert.strictEqual(util.isArray(new Array('with', 'some', 'entries')), true); +assert.strictEqual(util.isArray(context('Array')()), true); +assert.strictEqual(util.isArray({}), false); +assert.strictEqual(util.isArray({ push: function() {} }), false); +assert.strictEqual(util.isArray(/regexp/), false); +assert.strictEqual(util.isArray(new Error()), false); +assert.strictEqual(util.isArray(Object.create(Array.prototype)), false); // isRegExp -assert.strictEqual(true, util.isRegExp(/regexp/)); -assert.strictEqual(true, util.isRegExp(RegExp(), 'foo')); -assert.strictEqual(true, util.isRegExp(new RegExp())); -assert.strictEqual(true, util.isRegExp(context('RegExp')())); -assert.strictEqual(false, util.isRegExp({})); -assert.strictEqual(false, util.isRegExp([])); -assert.strictEqual(false, util.isRegExp(new Date())); -assert.strictEqual(false, util.isRegExp(Object.create(RegExp.prototype))); +assert.strictEqual(util.isRegExp(/regexp/), true); +assert.strictEqual(util.isRegExp(RegExp(), 'foo'), true); +assert.strictEqual(util.isRegExp(new RegExp()), true); +assert.strictEqual(util.isRegExp(context('RegExp')()), true); +assert.strictEqual(util.isRegExp({}), false); +assert.strictEqual(util.isRegExp([]), false); +assert.strictEqual(util.isRegExp(new Date()), false); +assert.strictEqual(util.isRegExp(Object.create(RegExp.prototype)), false); // isDate -assert.strictEqual(true, util.isDate(new Date())); -assert.strictEqual(true, util.isDate(new Date(0), 'foo')); -assert.strictEqual(true, util.isDate(new (context('Date'))())); -assert.strictEqual(false, util.isDate(Date())); -assert.strictEqual(false, util.isDate({})); -assert.strictEqual(false, util.isDate([])); -assert.strictEqual(false, util.isDate(new Error())); -assert.strictEqual(false, util.isDate(Object.create(Date.prototype))); +assert.strictEqual(util.isDate(new Date()), true); +assert.strictEqual(util.isDate(new Date(0), 'foo'), true); +assert.strictEqual(util.isDate(new (context('Date'))()), true); +assert.strictEqual(util.isDate(Date()), false); +assert.strictEqual(util.isDate({}), false); +assert.strictEqual(util.isDate([]), false); +assert.strictEqual(util.isDate(new Error()), false); +assert.strictEqual(util.isDate(Object.create(Date.prototype)), false); // isError -assert.strictEqual(true, util.isError(new Error())); -assert.strictEqual(true, util.isError(new TypeError())); -assert.strictEqual(true, util.isError(new SyntaxError())); -assert.strictEqual(true, util.isError(new (context('Error'))())); -assert.strictEqual(true, util.isError(new (context('TypeError'))())); -assert.strictEqual(true, util.isError(new (context('SyntaxError'))())); -assert.strictEqual(false, util.isError({})); -assert.strictEqual(false, util.isError({ name: 'Error', message: '' })); -assert.strictEqual(false, util.isError([])); -assert.strictEqual(true, util.isError(Object.create(Error.prototype))); +assert.strictEqual(util.isError(new Error()), true); +assert.strictEqual(util.isError(new TypeError()), true); +assert.strictEqual(util.isError(new SyntaxError()), true); +assert.strictEqual(util.isError(new (context('Error'))()), true); +assert.strictEqual(util.isError(new (context('TypeError'))()), true); +assert.strictEqual(util.isError(new (context('SyntaxError'))()), true); +assert.strictEqual(util.isError({}), false); +assert.strictEqual(util.isError({ name: 'Error', message: '' }), false); +assert.strictEqual(util.isError([]), false); +assert.strictEqual(util.isError(Object.create(Error.prototype)), true); // isObject assert.ok(util.isObject({}) === true); // isPrimitive -assert.strictEqual(false, util.isPrimitive({})); -assert.strictEqual(false, util.isPrimitive(new Error())); -assert.strictEqual(false, util.isPrimitive(new Date())); -assert.strictEqual(false, util.isPrimitive([])); -assert.strictEqual(false, util.isPrimitive(/regexp/)); -assert.strictEqual(false, util.isPrimitive(function() {})); -assert.strictEqual(false, util.isPrimitive(new Number(1))); -assert.strictEqual(false, util.isPrimitive(new String('bla'))); -assert.strictEqual(false, util.isPrimitive(new Boolean(true))); -assert.strictEqual(true, util.isPrimitive(1)); -assert.strictEqual(true, util.isPrimitive('bla')); -assert.strictEqual(true, util.isPrimitive(true)); -assert.strictEqual(true, util.isPrimitive(undefined)); -assert.strictEqual(true, util.isPrimitive(null)); -assert.strictEqual(true, util.isPrimitive(Infinity)); -assert.strictEqual(true, util.isPrimitive(NaN)); -assert.strictEqual(true, util.isPrimitive(Symbol('symbol'))); +assert.strictEqual(util.isPrimitive({}), false); +assert.strictEqual(util.isPrimitive(new Error()), false); +assert.strictEqual(util.isPrimitive(new Date()), false); +assert.strictEqual(util.isPrimitive([]), false); +assert.strictEqual(util.isPrimitive(/regexp/), false); +assert.strictEqual(util.isPrimitive(function() {}), false); +assert.strictEqual(util.isPrimitive(new Number(1)), false); +assert.strictEqual(util.isPrimitive(new String('bla')), false); +assert.strictEqual(util.isPrimitive(new Boolean(true)), false); +assert.strictEqual(util.isPrimitive(1), true); +assert.strictEqual(util.isPrimitive('bla'), true); +assert.strictEqual(util.isPrimitive(true), true); +assert.strictEqual(util.isPrimitive(undefined), true); +assert.strictEqual(util.isPrimitive(null), true); +assert.strictEqual(util.isPrimitive(Infinity), true); +assert.strictEqual(util.isPrimitive(NaN), true); +assert.strictEqual(util.isPrimitive(Symbol('symbol')), true); // isBuffer -assert.strictEqual(false, util.isBuffer('foo')); -assert.strictEqual(true, util.isBuffer(Buffer.from('foo'))); +assert.strictEqual(util.isBuffer('foo'), false); +assert.strictEqual(util.isBuffer(Buffer.from('foo')), true); // _extend assert.deepStrictEqual(util._extend({ a: 1 }), { a: 1 }); @@ -160,18 +160,25 @@ util.error('test'); assert.strictEqual(util.types.isNativeError(new Error()), true); assert.strictEqual(util.types.isNativeError(new TypeError()), true); assert.strictEqual(util.types.isNativeError(new SyntaxError()), true); - assert.strictEqual(util.types.isNativeError(new (context('Error'))()), - true); - assert.strictEqual(util.types.isNativeError(new (context('TypeError'))()), - true); - assert.strictEqual(util.types.isNativeError(new (context('SyntaxError'))()), - true); + assert.strictEqual(util.types.isNativeError(new (context('Error'))()), true); + assert.strictEqual( + util.types.isNativeError(new (context('TypeError'))()), + true + ); + assert.strictEqual( + util.types.isNativeError(new (context('SyntaxError'))()), + true + ); assert.strictEqual(util.types.isNativeError({}), false); - assert.strictEqual(util.types.isNativeError({ name: 'Error', message: '' }), - false); + assert.strictEqual( + util.types.isNativeError({ name: 'Error', message: '' }), + false + ); assert.strictEqual(util.types.isNativeError([]), false); - assert.strictEqual(util.types.isNativeError(Object.create(Error.prototype)), - false); + assert.strictEqual( + util.types.isNativeError(Object.create(Error.prototype)), + false + ); assert.strictEqual( util.types.isNativeError(new errors.codes.ERR_IPC_CHANNEL_CLOSED()), true From 093cf6f841a700a52f13ea1a9d4db0d0f6aab695 Mon Sep 17 00:00:00 2001 From: Saleh Abdel Motaal Date: Fri, 12 Oct 2018 11:06:25 -0700 Subject: [PATCH 141/178] test: fix strictEqual order for timers test PR-URL: https://github.com/nodejs/node/pull/23568 Reviewed-By: Joyee Cheung Reviewed-By: James M Snell Reviewed-By: Jeremiah Senkpiel Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-timers-linked-list.js | 32 ++++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-timers-linked-list.js b/test/parallel/test-timers-linked-list.js index 9cdb50e511bdaf..c7601462f65e31 100644 --- a/test/parallel/test-timers-linked-list.js +++ b/test/parallel/test-timers-linked-list.js @@ -41,47 +41,47 @@ L.init(C); L.init(D); assert.ok(L.isEmpty(list)); -assert.strictEqual(null, L.peek(list)); +assert.strictEqual(L.peek(list), null); L.append(list, A); // list -> A -assert.strictEqual(A, L.peek(list)); +assert.strictEqual(L.peek(list), A); L.append(list, B); // list -> A -> B -assert.strictEqual(A, L.peek(list)); +assert.strictEqual(L.peek(list), A); L.append(list, C); // list -> A -> B -> C -assert.strictEqual(A, L.peek(list)); +assert.strictEqual(L.peek(list), A); L.append(list, D); // list -> A -> B -> C -> D -assert.strictEqual(A, L.peek(list)); +assert.strictEqual(L.peek(list), A); L.remove(A); L.remove(B); // B is already removed, so removing it again shouldn't hurt. L.remove(B); // list -> C -> D -assert.strictEqual(C, L.peek(list)); +assert.strictEqual(L.peek(list), C); // Put B back on the list L.append(list, B); // list -> C -> D -> B -assert.strictEqual(C, L.peek(list)); +assert.strictEqual(L.peek(list), C); L.remove(C); // list -> D -> B -assert.strictEqual(D, L.peek(list)); +assert.strictEqual(L.peek(list), D); L.remove(B); // list -> D -assert.strictEqual(D, L.peek(list)); +assert.strictEqual(L.peek(list), D); L.remove(D); // list -assert.strictEqual(null, L.peek(list)); +assert.strictEqual(L.peek(list), null); assert.ok(L.isEmpty(list)); @@ -89,7 +89,7 @@ assert.ok(L.isEmpty(list)); L.append(list, D); // list -> D -assert.strictEqual(D, L.peek(list)); +assert.strictEqual(L.peek(list), D); L.append(list, C); L.append(list, B); @@ -100,8 +100,8 @@ L.append(list, A); L.append(list, C); // list -> D -> B -> A -> C -assert.strictEqual(D, L.peek(list)); -assert.strictEqual(B, L.peek(D)); -assert.strictEqual(A, L.peek(B)); -assert.strictEqual(C, L.peek(A)); -assert.strictEqual(list, L.peek(C)); +assert.strictEqual(L.peek(list), D); +assert.strictEqual(L.peek(D), B); +assert.strictEqual(L.peek(B), A); +assert.strictEqual(L.peek(A), C); +assert.strictEqual(L.peek(C), list); From 45ef905585266504633dc4ba020b9caaea938839 Mon Sep 17 00:00:00 2001 From: Richard Hoehn Date: Fri, 12 Oct 2018 11:07:52 -0700 Subject: [PATCH 142/178] src: add default initializer in tls_wrap PR-URL: https://github.com/nodejs/node/pull/23567 Reviewed-By: Joyee Cheung Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- src/tls_wrap.cc | 8 +------- src/tls_wrap.h | 12 ++++++------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index 3dbeabd891ad20..6bc152b2e24fca 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -58,13 +58,7 @@ TLSWrap::TLSWrap(Environment* env, AsyncWrap::PROVIDER_TLSWRAP), SSLWrap(env, sc, kind), StreamBase(env), - sc_(sc), - write_size_(0), - started_(false), - established_(false), - shutdown_(false), - cycle_depth_(0), - eof_(false) { + sc_(sc) { MakeWeak(); // sc comes from an Unwrap. Make sure it was assigned. diff --git a/src/tls_wrap.h b/src/tls_wrap.h index 0e265764822f29..4c47cd81197189 100644 --- a/src/tls_wrap.h +++ b/src/tls_wrap.h @@ -149,19 +149,19 @@ class TLSWrap : public AsyncWrap, BIO* enc_in_ = nullptr; BIO* enc_out_ = nullptr; std::vector pending_cleartext_input_; - size_t write_size_; + size_t write_size_ = 0; WriteWrap* current_write_ = nullptr; WriteWrap* current_empty_write_ = nullptr; bool write_callback_scheduled_ = false; - bool started_; - bool established_; - bool shutdown_; + bool started_ = false; + bool established_ = false; + bool shutdown_ = false; std::string error_; - int cycle_depth_; + int cycle_depth_ = 0; // If true - delivered EOF to the js-land, either after `close_notify`, or // after the `UV_EOF` on socket. - bool eof_; + bool eof_ = false; private: static void GetWriteQueueSize( From 8a32a5188153d9f67866e159ff06c4ea061a1fce Mon Sep 17 00:00:00 2001 From: Ethan Weber Date: Fri, 12 Oct 2018 10:52:38 -0700 Subject: [PATCH 143/178] test: fix assert value order Switched assertion values to match assert.strictEqual() documentation PR-URL: https://github.com/nodejs/node/pull/23566 Reviewed-By: Joyee Cheung Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/parallel/test-repl-require.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-repl-require.js b/test/parallel/test-repl-require.js index ecab4ba698911b..818fca7431fa94 100644 --- a/test/parallel/test-repl-require.js +++ b/test/parallel/test-repl-require.js @@ -32,7 +32,7 @@ server.listen(options, function() { }); process.on('exit', function() { - assert.strictEqual(false, /Cannot find module/.test(answer)); - assert.strictEqual(false, /Error/.test(answer)); + assert.strictEqual(/Cannot find module/.test(answer), false); + assert.strictEqual(/Error/.test(answer), false); assert.strictEqual(answer, '\'eye catcher\'\n\'perhaps I work\'\n'); }); From 22afe4fafced0cd4b411937e476f9fd939b22b2d Mon Sep 17 00:00:00 2001 From: Pete Lombardo Date: Fri, 12 Oct 2018 14:02:44 -0400 Subject: [PATCH 144/178] test: fix parameter order of assertions PR-URL: https://github.com/nodejs/node/pull/23565 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/pummel/test-net-throttle.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/pummel/test-net-throttle.js b/test/pummel/test-net-throttle.js index a08ed85ccd41bb..fb060c9d76d9d5 100644 --- a/test/pummel/test-net-throttle.js +++ b/test/pummel/test-net-throttle.js @@ -37,7 +37,7 @@ console.log(`start server on port ${common.PORT}`); const server = net.createServer(function(connection) { connection.write(body.slice(0, part_N)); connection.write(body.slice(part_N, 2 * part_N)); - assert.strictEqual(false, connection.write(body.slice(2 * part_N, N))); + assert.strictEqual(connection.write(body.slice(2 * part_N, N)), false); console.log(`bufferSize: ${connection.bufferSize}`, 'expecting', N); assert.ok(connection.bufferSize >= 0 && connection.writableLength <= N); @@ -58,7 +58,7 @@ server.listen(common.PORT, function() { console.log('pause'); const x = chars_recved; setTimeout(function() { - assert.strictEqual(chars_recved, x); + assert.strictEqual(x, chars_recved); client.resume(); console.log('resume'); paused = false; @@ -74,6 +74,6 @@ server.listen(common.PORT, function() { process.on('exit', function() { - assert.strictEqual(N, chars_recved); - assert.strictEqual(true, npauses > 2); + assert.strictEqual(chars_recved, N); + assert.strictEqual(npauses > 2, true); }); From aee771c73c5ae80b1c39d5c8cb92579033ba48b2 Mon Sep 17 00:00:00 2001 From: Savio Resende Date: Fri, 12 Oct 2018 10:47:37 -0700 Subject: [PATCH 145/178] test: fix assert.strictEqual() argument order PR-URL: https://github.com/nodejs/node/pull/23564 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Refael Ackermann Reviewed-By: Ruben Bridgewater Reviewed-By: Gireesh Punathil --- test/parallel/test-tcp-wrap-connect.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-tcp-wrap-connect.js b/test/parallel/test-tcp-wrap-connect.js index 354c9d74edd505..5e3e81f6e11712 100644 --- a/test/parallel/test-tcp-wrap-connect.js +++ b/test/parallel/test-tcp-wrap-connect.js @@ -18,19 +18,19 @@ function makeConnection() { assert.strictEqual(err, 0); req.oncomplete = function(status, client_, req_, readable, writable) { - assert.strictEqual(0, status); - assert.strictEqual(client, client_); - assert.strictEqual(req, req_); - assert.strictEqual(true, readable); - assert.strictEqual(true, writable); + assert.strictEqual(status, 0); + assert.strictEqual(client_, client); + assert.strictEqual(req_, req); + assert.strictEqual(readable, true); + assert.strictEqual(writable, true); const shutdownReq = new ShutdownWrap(); const err = client.shutdown(shutdownReq); assert.strictEqual(err, 0); shutdownReq.oncomplete = function(status, client_, error) { - assert.strictEqual(0, status); - assert.strictEqual(client, client_); + assert.strictEqual(status, 0); + assert.strictEqual(client_, client); assert.strictEqual(error, undefined); shutdownCount++; client.close(); @@ -55,7 +55,7 @@ const server = require('net').Server(function(s) { server.listen(0, makeConnection); process.on('exit', function() { - assert.strictEqual(1, shutdownCount); - assert.strictEqual(1, connectCount); - assert.strictEqual(1, endCount); + assert.strictEqual(shutdownCount, 1); + assert.strictEqual(connectCount, 1); + assert.strictEqual(endCount, 1); }); From 4b7893db94121a255b2b398a3d2bf6f57114d851 Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 12 Oct 2018 10:04:07 -0700 Subject: [PATCH 146/178] test: switch order of assertion arguments this updates the arguments in order to give the actual return value first and the given expected value second. PR-URL: https://github.com/nodejs/node/pull/23563 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil --- test/parallel/test-http-client-get-url.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-http-client-get-url.js b/test/parallel/test-http-client-get-url.js index 7f6bfb8ecaa17b..a72eea56538c4d 100644 --- a/test/parallel/test-http-client-get-url.js +++ b/test/parallel/test-http-client-get-url.js @@ -28,8 +28,8 @@ const URL = url.URL; const testPath = '/foo?bar'; const server = http.createServer(common.mustCall((req, res) => { - assert.strictEqual('GET', req.method); - assert.strictEqual(testPath, req.url); + assert.strictEqual(req.method, 'GET'); + assert.strictEqual(req.url, testPath); res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('hello\n'); res.end(); From c56f38f6f935b6d4d04657fd95c9b93b7d83a05c Mon Sep 17 00:00:00 2001 From: keeysnc Date: Fri, 12 Oct 2018 11:03:37 -0700 Subject: [PATCH 147/178] test: updated assert test values to doc standards PR-URL: https://github.com/nodejs/node/pull/23593 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Trivikram Kamat Reviewed-By: Sakthipriyan Vairamani --- test/sequential/test-inspector-exception.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sequential/test-inspector-exception.js b/test/sequential/test-inspector-exception.js index a35115b9f5f15f..de089ec240f148 100644 --- a/test/sequential/test-inspector-exception.js +++ b/test/sequential/test-inspector-exception.js @@ -39,7 +39,7 @@ async function runTest() { const session = await child.connectInspectorSession(); await testBreakpointOnStart(session); await session.runToCompletion(); - assert.strictEqual(1, (await child.expectShutdown()).exitCode); + assert.strictEqual((await child.expectShutdown()).exitCode, 1); } runTest(); From 3f7755b24c234eeeb592f484c504b4b85a8f9fb8 Mon Sep 17 00:00:00 2001 From: erickwendel Date: Fri, 12 Oct 2018 14:12:00 -0700 Subject: [PATCH 148/178] test: fix assertion order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23626 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Ruben Bridgewater --- test/parallel/test-https-client-get-url.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-https-client-get-url.js b/test/parallel/test-https-client-get-url.js index 56a6fe6d18641a..5d520416fe22da 100644 --- a/test/parallel/test-https-client-get-url.js +++ b/test/parallel/test-https-client-get-url.js @@ -40,8 +40,8 @@ const options = { }; const server = https.createServer(options, common.mustCall((req, res) => { - assert.strictEqual('GET', req.method); - assert.strictEqual('/foo?bar', req.url); + assert.strictEqual(req.method, 'GET'); + assert.strictEqual(req.url, '/foo?bar'); res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('hello\n'); res.end(); From 57261730219589c63c37caad6b34538ef982c610 Mon Sep 17 00:00:00 2001 From: Martin Omander Date: Fri, 12 Oct 2018 11:44:56 -0700 Subject: [PATCH 149/178] module: removed unused variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The variable problemChecking was not used. Removed it. PR-URL: https://github.com/nodejs/node/pull/23624 Reviewed-By: Anna Henningsen Reviewed-By: Сковорода Никита Андреевич Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Ruben Bridgewater --- lib/internal/modules/esm/default_resolve.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js index 7707262566c88a..7654ca91129325 100644 --- a/lib/internal/modules/esm/default_resolve.js +++ b/lib/internal/modules/esm/default_resolve.js @@ -37,7 +37,7 @@ function search(target, base) { new URL('./', questionedBase).pathname); const found = CJSmodule._resolveFilename(target, tmpMod); error = new ERR_MODULE_RESOLUTION_LEGACY(target, base, found); - } catch (problemChecking) { + } catch { // ignore } throw error; From 955148ab00adcf80c3f82ec82ccccdead4acec73 Mon Sep 17 00:00:00 2001 From: Jeff Marvin Date: Fri, 12 Oct 2018 11:47:03 -0700 Subject: [PATCH 150/178] test: correct assertion argument order This conforms assertions to follow the argument order of asserted then actual, and adds more explicit messages to describe assertion failures. PR-URL: https://github.com/nodejs/node/pull/23618 Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil --- test/sequential/test-inspector.js | 36 +++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/test/sequential/test-inspector.js b/test/sequential/test-inspector.js index 2a7a2ef4bf34ba..00fdb000e9e251 100644 --- a/test/sequential/test-inspector.js +++ b/test/sequential/test-inspector.js @@ -8,7 +8,12 @@ const assert = require('assert'); const { NodeInstance } = require('../common/inspector-helper.js'); function checkListResponse(response) { - assert.strictEqual(1, response.length); + const expectedLength = 1; + assert.strictEqual( + response.length, + expectedLength, + `Expected response length ${response.length} to be ${expectedLength}.` + ); assert.ok(response[0].devtoolsFrontendUrl); assert.ok( /ws:\/\/localhost:\d+\/[0-9A-Fa-f]{8}-/ @@ -41,7 +46,11 @@ function assertScopeValues({ result }, expected) { for (const actual of result) { const value = expected[actual.name]; if (value) { - assert.strictEqual(value, actual.value.value); + assert.strictEqual( + actual.value.value, + value, + `Expected scope values to be ${actual.value.value} instead of ${value}.` + ); unmatched.delete(actual.name); } } @@ -117,15 +126,24 @@ async function testBreakpoint(session) { 'generatePreview': true } }); - - assert.strictEqual(1002, result.value); + const expectedEvaluation = 1002; + assert.strictEqual( + result.value, + expectedEvaluation, + `Expected evaluation to be ${expectedEvaluation}, got ${result.value}.` + ); result = (await session.send({ 'method': 'Runtime.evaluate', 'params': { 'expression': '5 * 5' } })).result; - assert.strictEqual(25, result.value); + const expectedResult = 25; + assert.strictEqual( + result.value, + expectedResult, + `Expected Runtime.evaluate to be ${expectedResult}, got ${result.value}.` + ); } async function testI18NCharacters(session) { @@ -288,7 +306,13 @@ async function runTest() { await testI18NCharacters(session); await testCommandLineAPI(session); await session.runToCompletion(); - assert.strictEqual(55, (await child.expectShutdown()).exitCode); + const expectedExitCode = 55; + const { exitCode } = await child.expectShutdown(); + assert.strictEqual( + exitCode, + expectedExitCode, + `Expected exit code to be ${expectedExitCode} but got ${expectedExitCode}.` + ); } runTest(); From 4e8283559652a95f24ddea9be18ec4b1246958f2 Mon Sep 17 00:00:00 2001 From: vchoubey08 Date: Fri, 12 Oct 2018 11:43:02 -0700 Subject: [PATCH 151/178] test: reversed 1st and 2nd arguments for assert.strictEqual() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23617 Reviewed-By: Denys Otrishko Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell Reviewed-By: Hitesh Kanwathirtha Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-memory-usage-emfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-memory-usage-emfile.js b/test/parallel/test-memory-usage-emfile.js index f8d1fc90da7aec..98496e17b099d2 100644 --- a/test/parallel/test-memory-usage-emfile.js +++ b/test/parallel/test-memory-usage-emfile.js @@ -10,4 +10,4 @@ while (files.length < 256) files.push(fs.openSync(__filename, 'r')); const r = process.memoryUsage(); -assert.strictEqual(true, r.rss > 0); +assert.strictEqual(r.rss > 0, true); From 1fcf83a430a4d18c8ab3a741a90f4319f998c2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Vasseur?= Date: Fri, 12 Oct 2018 11:27:05 -0700 Subject: [PATCH 152/178] test: fix backward assertion arguments PR-URL: https://github.com/nodejs/node/pull/23616 Reviewed-By: Ruben Bridgewater Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-net-server-max-connections.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-net-server-max-connections.js b/test/parallel/test-net-server-max-connections.js index a711e5295be8bf..705c99b7b9737a 100644 --- a/test/parallel/test-net-server-max-connections.js +++ b/test/parallel/test-net-server-max-connections.js @@ -75,10 +75,10 @@ function makeConnection(index) { } if (index < server.maxConnections) { - assert.strictEqual(true, gotData, + assert.strictEqual(gotData, true, `${index} didn't get data, but should have`); } else { - assert.strictEqual(false, gotData, + assert.strictEqual(gotData, false, `${index} got data, but shouldn't have`); } }); @@ -103,5 +103,5 @@ function makeConnection(index) { process.on('exit', function() { - assert.strictEqual(N, closes); + assert.strictEqual(closes, N); }); From fca21739627f2daadea51f6ead23730e15d70e79 Mon Sep 17 00:00:00 2001 From: Sean Healy Date: Fri, 12 Oct 2018 11:42:58 -0700 Subject: [PATCH 153/178] test: update assertion parameter order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update assertions to be `value`, `expectedValue`. PR-URL: https://github.com/nodejs/node/pull/23614 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Anna Henningsen Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-proxy.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/parallel/test-http-proxy.js b/test/parallel/test-http-proxy.js index 8781679c0a45b8..6a986024af29be 100644 --- a/test/parallel/test-http-proxy.js +++ b/test/parallel/test-http-proxy.js @@ -50,9 +50,9 @@ const proxy = http.createServer(function(req, res) { console.error(`proxy res headers: ${JSON.stringify(proxy_res.headers)}`); - assert.strictEqual('world', proxy_res.headers.hello); - assert.strictEqual('text/plain', proxy_res.headers['content-type']); - assert.deepStrictEqual(cookies, proxy_res.headers['set-cookie']); + assert.strictEqual(proxy_res.headers.hello, 'world'); + assert.strictEqual(proxy_res.headers['content-type'], 'text/plain'); + assert.deepStrictEqual(proxy_res.headers['set-cookie'], cookies); res.writeHead(proxy_res.statusCode, proxy_res.headers); @@ -79,11 +79,11 @@ function startReq() { path: '/test' }, function(res) { console.error('got res'); - assert.strictEqual(200, res.statusCode); + assert.strictEqual(res.statusCode, 200); - assert.strictEqual('world', res.headers.hello); - assert.strictEqual('text/plain', res.headers['content-type']); - assert.deepStrictEqual(cookies, res.headers['set-cookie']); + assert.strictEqual(res.headers.hello, 'world'); + assert.strictEqual(res.headers['content-type'], 'text/plain'); + assert.deepStrictEqual(res.headers['set-cookie'], cookies); res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); From 99c16900c8eba7baa64dbd4f5f978412871410a2 Mon Sep 17 00:00:00 2001 From: Vsevolod Geraskin Date: Fri, 12 Oct 2018 11:39:59 -0700 Subject: [PATCH 154/178] test: reverse arguments in assert.strictEqual assert.strictEqual() had incorrect order of arguments with expected and actual values reversed. PR-URL: https://github.com/nodejs/node/pull/23613 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-keep-alive-close-on-header.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-http-keep-alive-close-on-header.js b/test/parallel/test-http-keep-alive-close-on-header.js index f5fb9466db1fa7..fd0c52037fa78c 100644 --- a/test/parallel/test-http-keep-alive-close-on-header.js +++ b/test/parallel/test-http-keep-alive-close-on-header.js @@ -46,7 +46,7 @@ server.listen(0, function() { port: this.address().port, agent: agent }, function(res) { - assert.strictEqual(1, agent.sockets[name].length); + assert.strictEqual(agent.sockets[name].length, 1); res.resume(); }); request.on('socket', function(s) { @@ -63,7 +63,7 @@ server.listen(0, function() { port: this.address().port, agent: agent }, function(res) { - assert.strictEqual(1, agent.sockets[name].length); + assert.strictEqual(agent.sockets[name].length, 1); res.resume(); }); request.on('socket', function(s) { @@ -80,7 +80,7 @@ server.listen(0, function() { agent: agent }, function(response) { response.on('end', function() { - assert.strictEqual(1, agent.sockets[name].length); + assert.strictEqual(agent.sockets[name].length, 1); server.close(); }); response.resume(); @@ -94,5 +94,5 @@ server.listen(0, function() { }); process.on('exit', function() { - assert.strictEqual(3, connectCount); + assert.strictEqual(connectCount, 3); }); From a039c863c4ab4210bb7435fe6c13f130c8a44781 Mon Sep 17 00:00:00 2001 From: Israel Ortiz Date: Fri, 12 Oct 2018 11:46:07 -0700 Subject: [PATCH 155/178] test: fix parameters in test-repl.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixed order of parameters in assert.strictEqual() assertion functions, first argument provided was the expected value and the second value was the actual value. this is backwards from the documentation for assertions like assert.strictEqual() where the first value being tested and the second value is the expected value PR-URL: https://github.com/nodejs/node/pull/23609 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-repl.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-repl.js b/test/parallel/test-repl.js index 49e718da0f0683..f8261dedd98974 100644 --- a/test/parallel/test-repl.js +++ b/test/parallel/test-repl.js @@ -784,8 +784,8 @@ function startTCPRepl() { client.setEncoding('utf8'); client.on('connect', common.mustCall(() => { - assert.strictEqual(true, client.readable); - assert.strictEqual(true, client.writable); + assert.strictEqual(client.readable, true); + assert.strictEqual(client.writable, true); resolveSocket(client); })); @@ -827,8 +827,8 @@ function startUnixRepl() { client.setEncoding('utf8'); client.on('connect', common.mustCall(() => { - assert.strictEqual(true, client.readable); - assert.strictEqual(true, client.writable); + assert.strictEqual(client.readable, true); + assert.strictEqual(client.writable, true); resolveSocket(client); })); From 31cb2971f455c515b7825bbb74e6a20e51af1c65 Mon Sep 17 00:00:00 2001 From: Milton Sosa Date: Fri, 12 Oct 2018 11:46:14 -0700 Subject: [PATCH 156/178] test: fix assertions args order PR-URL: https://github.com/nodejs/node/pull/23608 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-chunk-problem.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-http-chunk-problem.js b/test/parallel/test-http-chunk-problem.js index c2502a891d325c..4a2886da3f8e40 100644 --- a/test/parallel/test-http-chunk-problem.js +++ b/test/parallel/test-http-chunk-problem.js @@ -53,8 +53,8 @@ function executeRequest(cb) { 'shasum' ].join(' '), (err, stdout, stderr) => { assert.ifError(err); - assert.strictEqual('8c206a1a87599f532ce68675536f0b1546900d7a', - stdout.slice(0, 40)); + assert.strictEqual(stdout.slice(0, 40), + '8c206a1a87599f532ce68675536f0b1546900d7a'); cb(); } ); From 6151040d08d222e88c314d0f3cba6284d13b85b3 Mon Sep 17 00:00:00 2001 From: Paul Tichonczuk Date: Fri, 12 Oct 2018 11:38:16 -0700 Subject: [PATCH 157/178] test: re-order strictEqual paramater calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23607 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Denys Otrishko Reviewed-By: Anna Henningsen Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-net-reconnect.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-net-reconnect.js b/test/parallel/test-net-reconnect.js index c8b1503cea36e6..eb6b0728478a91 100644 --- a/test/parallel/test-net-reconnect.js +++ b/test/parallel/test-net-reconnect.js @@ -44,7 +44,7 @@ const server = net.createServer(function(socket) { socket.on('close', function(had_error) { console.log(`SERVER had_error: ${JSON.stringify(had_error)}`); - assert.strictEqual(false, had_error); + assert.strictEqual(had_error, false); }); }); @@ -61,7 +61,7 @@ server.listen(0, function() { client.on('data', function(chunk) { client_recv_count += 1; console.log(`client_recv_count ${client_recv_count}`); - assert.strictEqual('hello\r\n', chunk); + assert.strictEqual(chunk, 'hello\r\n'); console.error('CLIENT: calling end', client._writableState); client.end(); }); @@ -73,7 +73,7 @@ server.listen(0, function() { client.on('close', function(had_error) { console.log('CLIENT disconnect'); - assert.strictEqual(false, had_error); + assert.strictEqual(had_error, false); if (disconnect_count++ < N) client.connect(server.address().port); // reconnect else @@ -82,7 +82,7 @@ server.listen(0, function() { }); process.on('exit', function() { - assert.strictEqual(N + 1, disconnect_count); - assert.strictEqual(N + 1, client_recv_count); - assert.strictEqual(N + 1, client_end_count); + assert.strictEqual(disconnect_count, N + 1); + assert.strictEqual(client_recv_count, N + 1); + assert.strictEqual(client_end_count, N + 1); }); From febb7656e3dc336952319f91b02efbc898b9c65a Mon Sep 17 00:00:00 2001 From: Emily Kolar Date: Fri, 12 Oct 2018 11:38:17 -0700 Subject: [PATCH 158/178] test: fix order of assert args in client response domain test PR-URL: https://github.com/nodejs/node/pull/23604 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-http-client-response-domain.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-http-client-response-domain.js b/test/parallel/test-http-client-response-domain.js index 0a32e929141e45..617dc729acb71f 100644 --- a/test/parallel/test-http-client-response-domain.js +++ b/test/parallel/test-http-client-response-domain.js @@ -44,8 +44,8 @@ server.listen(common.PIPE, function() { function test() { - d.on('error', common.mustCall(function(err) { - assert.strictEqual('should be caught by domain', err.message); + d.on('error', common.mustCall((err) => { + assert.strictEqual(err.message, 'should be caught by domain'); })); const req = http.get({ From 17c35a6297e1b8b97bb0cddc1c69cc573fb7aed0 Mon Sep 17 00:00:00 2001 From: Gino Notto Date: Fri, 12 Oct 2018 11:34:32 -0700 Subject: [PATCH 159/178] src: change macro to fn Change base64_encoded_size and unbase64 to inline functions. The base64_encoded_size is a constexpr to be used in function declarations. PR-URL: https://github.com/nodejs/node/pull/23603 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- src/base64.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/base64.h b/src/base64.h index a19d11f71c65f5..aedec375eba550 100644 --- a/src/base64.h +++ b/src/base64.h @@ -10,8 +10,9 @@ namespace node { //// Base 64 //// -#define base64_encoded_size(size) ((size + 2 - ((size + 2) % 3)) / 3 * 4) - +static inline constexpr size_t base64_encoded_size(size_t size) { + return ((size + 2 - ((size + 2) % 3)) / 3 * 4); +} // Doesn't check for padding at the end. Can be 1-2 bytes over. static inline size_t base64_decoded_size_fast(size_t size) { @@ -48,8 +49,9 @@ size_t base64_decoded_size(const TypeName* src, size_t size) { extern const int8_t unbase64_table[256]; -#define unbase64(x) \ - static_cast(unbase64_table[static_cast(x)]) +inline static int8_t unbase64(uint8_t x) { + return unbase64_table[x]; +} template From f781b2cbea8aaf6c6c47bff61499b8f03703db30 Mon Sep 17 00:00:00 2001 From: David Jiang Date: Fri, 12 Oct 2018 11:33:29 -0700 Subject: [PATCH 160/178] test: fix assert equal order of arguments PR-URL: https://github.com/nodejs/node/pull/23602 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-net-connect-handle-econnrefused.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-net-connect-handle-econnrefused.js b/test/parallel/test-net-connect-handle-econnrefused.js index 3c7310b4752d72..c1ccfc23384caf 100644 --- a/test/parallel/test-net-connect-handle-econnrefused.js +++ b/test/parallel/test-net-connect-handle-econnrefused.js @@ -31,6 +31,6 @@ server.close(common.mustCall(() => { const c = net.createConnection(port); c.on('connect', common.mustNotCall()); c.on('error', common.mustCall((e) => { - assert.strictEqual('ECONNREFUSED', e.code); + assert.strictEqual(e.code, 'ECONNREFUSED'); })); })); From f8b1e0e4b9c8395969df859f9de5663cd576cf1c Mon Sep 17 00:00:00 2001 From: Chuck Theobald Date: Fri, 12 Oct 2018 11:06:31 -0700 Subject: [PATCH 161/178] test: change order of assert.strictEquals arguments Fix assert.strictEquals argument order. Arguments were actual first, expected second, contrary to the documentation. Now, actual value is first and expected value is second. PR-URL: https://github.com/nodejs/node/pull/23600 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-tcp-wrap-listen.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-tcp-wrap-listen.js b/test/parallel/test-tcp-wrap-listen.js index a1f38a4b49404f..9ecdf60f8c554c 100644 --- a/test/parallel/test-tcp-wrap-listen.js +++ b/test/parallel/test-tcp-wrap-listen.js @@ -10,7 +10,7 @@ const { WriteWrap } = internalBinding('stream_wrap'); const server = new TCP(TCPConstants.SOCKET); const r = server.bind('0.0.0.0', 0); -assert.strictEqual(0, r); +assert.strictEqual(r, 0); let port = {}; server.getsockname(port); port = port.port; @@ -18,7 +18,7 @@ port = port.port; server.listen(128); server.onconnection = (err, client) => { - assert.strictEqual(0, client.writeQueueSize); + assert.strictEqual(client.writeQueueSize, 0); console.log('got connection'); const maybeCloseClient = () => { @@ -34,7 +34,7 @@ server.onconnection = (err, client) => { if (buffer) { assert.ok(buffer.length > 0); - assert.strictEqual(0, client.writeQueueSize); + assert.strictEqual(client.writeQueueSize, 0); const req = new WriteWrap(); req.async = false; @@ -44,7 +44,7 @@ server.onconnection = (err, client) => { console.log(`client.writeQueueSize: ${client.writeQueueSize}`); // 11 bytes should flush - assert.strictEqual(0, client.writeQueueSize); + assert.strictEqual(client.writeQueueSize, 0); if (req.async) req.oncomplete = common.mustCall(done); @@ -52,15 +52,15 @@ server.onconnection = (err, client) => { process.nextTick(done.bind(null, 0, client, req)); function done(status, client_, req_) { - assert.strictEqual(req, client.pendingWrites.shift()); + assert.strictEqual(client.pendingWrites.shift(), req); // Check parameters. - assert.strictEqual(0, status); - assert.strictEqual(client, client_); - assert.strictEqual(req, req_); + assert.strictEqual(status, 0); + assert.strictEqual(client_, client); + assert.strictEqual(req_, req); console.log(`client.writeQueueSize: ${client.writeQueueSize}`); - assert.strictEqual(0, client.writeQueueSize); + assert.strictEqual(client.writeQueueSize, 0); maybeCloseClient(); } @@ -82,7 +82,7 @@ c.on('connect', common.mustCall(() => { c.end('hello world'); })); c.setEncoding('utf8'); c.on('data', common.mustCall((d) => { - assert.strictEqual('hello world', d); + assert.strictEqual(d, 'hello world'); })); c.on('close', () => { From 697c3da30820c37cdd571e64c467494452b38d4b Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Fri, 12 Oct 2018 11:33:54 -0700 Subject: [PATCH 162/178] test: fix assert parameter order in test-https-localaddress.js PR-URL: https://github.com/nodejs/node/pull/23599 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-https-localaddress.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-https-localaddress.js b/test/parallel/test-https-localaddress.js index 4bf3835dddbc8c..6c6cac37ccca3b 100644 --- a/test/parallel/test-https-localaddress.js +++ b/test/parallel/test-https-localaddress.js @@ -39,7 +39,7 @@ const options = { const server = https.createServer(options, function(req, res) { console.log(`Connect from: ${req.connection.remoteAddress}`); - assert.strictEqual('127.0.0.2', req.connection.remoteAddress); + assert.strictEqual(req.connection.remoteAddress, '127.0.0.2'); req.on('end', function() { res.writeHead(200, { 'Content-Type': 'text/plain' }); From 1237c1414fdb783164c567c10f9fd4aa49b03afa Mon Sep 17 00:00:00 2001 From: Derek Date: Fri, 12 Oct 2018 11:29:32 -0700 Subject: [PATCH 163/178] test: fix assert.strictEqual() argument order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23598 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-https-eof-for-eom.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-https-eof-for-eom.js b/test/parallel/test-https-eof-for-eom.js index 2e42680c7d6d5f..b2f178654f6de9 100644 --- a/test/parallel/test-https-eof-for-eom.js +++ b/test/parallel/test-https-eof-for-eom.js @@ -75,7 +75,7 @@ server.listen(0, common.mustCall(function() { server.close(); console.log('3) Client got response headers.'); - assert.strictEqual('gws', res.headers.server); + assert.strictEqual(res.headers.server, 'gws'); res.setEncoding('utf8'); res.on('data', function(s) { @@ -84,7 +84,7 @@ server.listen(0, common.mustCall(function() { res.on('end', common.mustCall(function() { console.log('5) Client got "end" event.'); - assert.strictEqual('hello world\nhello world\n', bodyBuffer); + assert.strictEqual(bodyBuffer, 'hello world\nhello world\n'); })); })); })); From a97944306f5206294369289ed641707ef54a8294 Mon Sep 17 00:00:00 2001 From: Amanuel Ghebreweldi Date: Fri, 12 Oct 2018 11:19:09 -0700 Subject: [PATCH 164/178] test: assertions arguments match docs PR-URL: https://github.com/nodejs/node/pull/23594 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-pipe-head.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-pipe-head.js b/test/parallel/test-pipe-head.js index 1cfff9888d0d7f..cb3d183fcdff20 100644 --- a/test/parallel/test-pipe-head.js +++ b/test/parallel/test-pipe-head.js @@ -13,5 +13,5 @@ const cmd = `"${nodePath}" "${script}" | head -2`; exec(cmd, common.mustCall(function(err, stdout, stderr) { assert.ifError(err); const lines = stdout.split('\n'); - assert.strictEqual(3, lines.length); + assert.strictEqual(lines.length, 3); })); From b2e4cb7b285e959438c8bdbf8edda3f69d2ffe98 Mon Sep 17 00:00:00 2001 From: Jared Haines Date: Fri, 12 Oct 2018 11:23:14 -0700 Subject: [PATCH 165/178] test: increased code coverage for slowCases Added test coverage for 4 un-covered if statements in slowCases PR-URL: https://github.com/nodejs/node/pull/23592 Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Trivikram Kamat --- test/parallel/test-internal-util-normalizeencoding.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/parallel/test-internal-util-normalizeencoding.js b/test/parallel/test-internal-util-normalizeencoding.js index 1fe97156ee1758..d7a0259ac9c9fd 100644 --- a/test/parallel/test-internal-util-normalizeencoding.js +++ b/test/parallel/test-internal-util-normalizeencoding.js @@ -18,6 +18,7 @@ const tests = [ ['utF-8', 'utf8'], ['ucs2', 'utf16le'], ['UCS2', 'utf16le'], + ['UcS2', 'utf16le'], ['ucs-2', 'utf16le'], ['UCS-2', 'utf16le'], ['UcS-2', 'utf16le'], @@ -31,8 +32,11 @@ const tests = [ ['LaTiN1', 'latin1'], ['base64', 'base64'], ['BASE64', 'base64'], + ['Base64', 'base64'], ['hex', 'hex'], ['HEX', 'hex'], + ['ASCII', 'ascii'], + ['AsCii', 'ascii'], ['foo', undefined], [1, undefined], [false, undefined], From 561e30d9ef581e86b36318fe22ebd1e82ab88754 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Thu, 11 Oct 2018 15:35:24 -0700 Subject: [PATCH 166/178] test: use smaller keys for a faster keygen test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On my machine, this brings test execution time down from about 2 seconds to 0.2 seconds. PR-URL: https://github.com/nodejs/node/pull/23430 Reviewed-By: Refael Ackermann Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Tobias Nießen Reviewed-By: James M Snell Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig --- test/parallel/test-crypto-keygen.js | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index e9fe630dd72e84..896deaf90b1bda 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -87,7 +87,7 @@ function convertDERToPEM(label, der) { // with a relatively small key. const ret = generateKeyPairSync('rsa', { publicExponent: 0x10001, - modulusLength: 1024, + modulusLength: 512, publicKeyEncoding: { type: 'pkcs1', format: 'pem' @@ -103,10 +103,10 @@ function convertDERToPEM(label, der) { assert.strictEqual(typeof publicKey, 'string'); assert(pkcs1PubExp.test(publicKey)); - assertApproximateSize(publicKey, 272); + assertApproximateSize(publicKey, 162); assert.strictEqual(typeof privateKey, 'string'); assert(pkcs8Exp.test(privateKey)); - assertApproximateSize(privateKey, 912); + assertApproximateSize(privateKey, 512); testEncryptDecrypt(publicKey, privateKey); testSignVerify(publicKey, privateKey); @@ -116,7 +116,7 @@ function convertDERToPEM(label, der) { // Test async RSA key generation. generateKeyPair('rsa', { publicExponent: 0x10001, - modulusLength: 4096, + modulusLength: 512, publicKeyEncoding: { type: 'pkcs1', format: 'der' @@ -132,11 +132,11 @@ function convertDERToPEM(label, der) { // will still need to convert it to PEM for testing. assert(Buffer.isBuffer(publicKeyDER)); const publicKey = convertDERToPEM('RSA PUBLIC KEY', publicKeyDER); - assertApproximateSize(publicKey, 720); + assertApproximateSize(publicKey, 180); assert.strictEqual(typeof privateKey, 'string'); assert(pkcs1PrivExp.test(privateKey)); - assertApproximateSize(privateKey, 3272); + assertApproximateSize(privateKey, 512); testEncryptDecrypt(publicKey, privateKey); testSignVerify(publicKey, privateKey); @@ -145,7 +145,7 @@ function convertDERToPEM(label, der) { // Now do the same with an encrypted private key. generateKeyPair('rsa', { publicExponent: 0x10001, - modulusLength: 4096, + modulusLength: 512, publicKeyEncoding: { type: 'pkcs1', format: 'der' @@ -163,7 +163,7 @@ function convertDERToPEM(label, der) { // will still need to convert it to PEM for testing. assert(Buffer.isBuffer(publicKeyDER)); const publicKey = convertDERToPEM('RSA PUBLIC KEY', publicKeyDER); - assertApproximateSize(publicKey, 720); + assertApproximateSize(publicKey, 180); assert.strictEqual(typeof privateKey, 'string'); assert(pkcs1EncExp('AES-256-CBC').test(privateKey)); @@ -182,7 +182,7 @@ function convertDERToPEM(label, der) { { // Test async DSA key generation. generateKeyPair('dsa', { - modulusLength: 2048, + modulusLength: 256, divisorLength: 256, publicKeyEncoding: { type: 'spki', @@ -203,8 +203,8 @@ function convertDERToPEM(label, der) { assert(Buffer.isBuffer(privateKeyDER)); const privateKey = convertDERToPEM('ENCRYPTED PRIVATE KEY', privateKeyDER); - assertApproximateSize(publicKey, 1194); - assertApproximateSize(privateKey, 1054); + assertApproximateSize(publicKey, 440); + assertApproximateSize(privateKey, 512); // Since the private key is encrypted, signing shouldn't work anymore. assert.throws(() => { @@ -279,7 +279,7 @@ function convertDERToPEM(label, der) { // Test async elliptic curve key generation, e.g. for ECDSA, with an encrypted // private key. generateKeyPair('ec', { - namedCurve: 'P-256', + namedCurve: 'P-192', paramEncoding: 'named', publicKeyEncoding: { type: 'spki', @@ -315,7 +315,7 @@ function convertDERToPEM(label, der) { // Test the util.promisified API with async RSA key generation. promisify(generateKeyPair)('rsa', { publicExponent: 0x10001, - modulusLength: 3072, + modulusLength: 512, publicKeyEncoding: { type: 'pkcs1', format: 'pem' @@ -328,15 +328,15 @@ function convertDERToPEM(label, der) { const { publicKey, privateKey } = keys; assert.strictEqual(typeof publicKey, 'string'); assert(pkcs1PubExp.test(publicKey)); - assertApproximateSize(publicKey, 600); + assertApproximateSize(publicKey, 180); assert.strictEqual(typeof privateKey, 'string'); assert(pkcs1PrivExp.test(privateKey)); - assertApproximateSize(privateKey, 2455); + assertApproximateSize(privateKey, 512); testEncryptDecrypt(publicKey, privateKey); testSignVerify(publicKey, privateKey); - })).catch(common.mustNotCall()); + })); } { @@ -545,7 +545,7 @@ function convertDERToPEM(label, der) { // Test invalid callbacks. for (const cb of [undefined, null, 0, {}]) { common.expectsError(() => generateKeyPair('rsa', { - modulusLength: 4096, + modulusLength: 512, publicKeyEncoding: { type: 'pkcs1', format: 'pem' }, privateKeyEncoding: { type: 'pkcs1', format: 'pem' } }, cb), { @@ -627,7 +627,7 @@ function convertDERToPEM(label, der) { // It should recognize both NIST and standard curve names. generateKeyPair('ec', { - namedCurve: 'P-256', + namedCurve: 'P-192', publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }, common.mustCall((err, publicKey, privateKey) => { From 1a2cf6696fa59c9723c423c4ff4c1167ab82155c Mon Sep 17 00:00:00 2001 From: Andreas Madsen Date: Fri, 12 Oct 2018 08:56:26 +0200 Subject: [PATCH 167/178] async_hooks: remove promise object from resource While it doesn't make any difference now. In the future PromiseHooks could be refactored to provide an asyncId instead of the promise object. That would make escape analysis on promises possible. Escape analysis on promises could lead to a more efficient destroy hook, if provide by PromiseHooks as well. But at the very least would allow the destroy hook to be emitted earlier. The destroy hook not being emitted on promises frequent enough is a known and reported issue. See https://github.com/nodejs/node/issues/14446 and https://github.com/Jeff-Lewis/cls-hooked/issues/11. While all this is speculation for now, it all depends on the promise object not being a part of the PromiseWrap resource object. Ref: https://github.com/nodejs/node/issues/14446 Ref: https://github.com/nodejs/diagnostics/issues/188 PR-URL: https://github.com/nodejs/node/pull/23443 Refs: https://github.com/nodejs/node/issues/14446 Refs: https://github.com/nodejs/diagnostics/issues/188 Reviewed-By: Benedikt Meurer Reviewed-By: Gus Caplan Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Matteo Collina Reviewed-By: George Adams --- doc/api/async_hooks.md | 3 +-- lib/domain.js | 7 ------- src/async_wrap.cc | 16 ++-------------- .../test-async-hooks-promise-enable-disable.js | 3 --- test/parallel/test-async-hooks-promise.js | 4 +--- test/parallel/test-domain-promise.js | 6 +----- 6 files changed, 5 insertions(+), 34 deletions(-) diff --git a/doc/api/async_hooks.md b/doc/api/async_hooks.md index ff3e14b96c250e..4fc070c974deec 100644 --- a/doc/api/async_hooks.md +++ b/doc/api/async_hooks.md @@ -301,8 +301,7 @@ currently not considered public, but using the Embedder API, users can provide and document their own resource objects. For example, such a resource object could contain the SQL query being executed. -In the case of Promises, the `resource` object will have `promise` property -that refers to the `Promise` that is being initialized, and an +In the case of Promises, the `resource` object will have an `isChainedPromise` property, set to `true` if the promise has a parent promise, and `false` otherwise. For example, in the case of `b = a.then(handler)`, `a` is considered a parent `Promise` of `b`. Here, `b` is considered a chained promise. diff --git a/lib/domain.js b/lib/domain.js index e8ae3ff1003486..0caeb624b41299 100644 --- a/lib/domain.js +++ b/lib/domain.js @@ -55,13 +55,6 @@ const asyncHook = createHook({ // if this operation is created while in a domain, let's mark it pairing.set(asyncId, process.domain); resource.domain = process.domain; - if (resource.promise !== undefined && - resource.promise instanceof Promise) { - // resource.promise instanceof Promise make sure that the - // promise comes from the same context - // see https://github.com/nodejs/node/issues/15673 - resource.promise.domain = process.domain; - } } }, before(asyncId) { diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 29bd64f2c5e3fe..17636ceb31c27d 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -185,16 +185,13 @@ class PromiseWrap : public AsyncWrap { SET_MEMORY_INFO_NAME(PromiseWrap) SET_SELF_SIZE(PromiseWrap) - static constexpr int kPromiseField = 1; - static constexpr int kIsChainedPromiseField = 2; - static constexpr int kInternalFieldCount = 3; + static constexpr int kIsChainedPromiseField = 1; + static constexpr int kInternalFieldCount = 2; static PromiseWrap* New(Environment* env, Local promise, PromiseWrap* parent_wrap, bool silent); - static void GetPromise(Local property, - const PropertyCallbackInfo& info); static void getIsChainedPromise(Local property, const PropertyCallbackInfo& info); }; @@ -205,7 +202,6 @@ PromiseWrap* PromiseWrap::New(Environment* env, bool silent) { Local object = env->promise_wrap_template() ->NewInstance(env->context()).ToLocalChecked(); - object->SetInternalField(PromiseWrap::kPromiseField, promise); object->SetInternalField(PromiseWrap::kIsChainedPromiseField, parent_wrap != nullptr ? v8::True(env->isolate()) : @@ -215,11 +211,6 @@ PromiseWrap* PromiseWrap::New(Environment* env, return new PromiseWrap(env, object, silent); } -void PromiseWrap::GetPromise(Local property, - const PropertyCallbackInfo& info) { - info.GetReturnValue().Set(info.Holder()->GetInternalField(kPromiseField)); -} - void PromiseWrap::getIsChainedPromise(Local property, const PropertyCallbackInfo& info) { info.GetReturnValue().Set( @@ -315,9 +306,6 @@ static void SetupHooks(const FunctionCallbackInfo& args) { Local promise_wrap_template = ctor->InstanceTemplate(); promise_wrap_template->SetInternalFieldCount( PromiseWrap::kInternalFieldCount); - promise_wrap_template->SetAccessor( - FIXED_ONE_BYTE_STRING(env->isolate(), "promise"), - PromiseWrap::GetPromise); promise_wrap_template->SetAccessor( FIXED_ONE_BYTE_STRING(env->isolate(), "isChainedPromise"), PromiseWrap::getIsChainedPromise); diff --git a/test/parallel/test-async-hooks-promise-enable-disable.js b/test/parallel/test-async-hooks-promise-enable-disable.js index 150ccc88b0dc52..47a259166ee182 100644 --- a/test/parallel/test-async-hooks-promise-enable-disable.js +++ b/test/parallel/test-async-hooks-promise-enable-disable.js @@ -4,7 +4,6 @@ const common = require('../common'); const assert = require('assert'); const async_hooks = require('async_hooks'); const EXPECTED_INITS = 2; -let p_resource = null; let p_er = null; let p_inits = 0; @@ -23,7 +22,6 @@ const mustCallInit = common.mustCall(function init(id, type, tid, resource) { if (type !== 'PROMISE') return; p_inits++; - p_resource = resource.promise; }, EXPECTED_INITS); const hook = async_hooks.createHook({ @@ -36,7 +34,6 @@ new Promise(common.mustCall((res) => { })).then(common.mustCall((val) => { hook.enable().enable(); const p = new Promise((res) => res(val)); - assert.strictEqual(p, p_resource); hook.disable(); return p; })).then(common.mustCall((val2) => { diff --git a/test/parallel/test-async-hooks-promise.js b/test/parallel/test-async-hooks-promise.js index be1509c7fc23f6..637d287b506ba9 100644 --- a/test/parallel/test-async-hooks-promise.js +++ b/test/parallel/test-async-hooks-promise.js @@ -21,11 +21,9 @@ async_hooks.createHook({ }).enable(); const a = Promise.resolve(42); -const b = a.then(common.mustCall()); +a.then(common.mustCall()); assert.strictEqual(initCalls[0].triggerId, 1); assert.strictEqual(initCalls[0].resource.isChainedPromise, false); -assert.strictEqual(initCalls[0].resource.promise, a); assert.strictEqual(initCalls[1].triggerId, initCalls[0].id); assert.strictEqual(initCalls[1].resource.isChainedPromise, true); -assert.strictEqual(initCalls[1].resource.promise, b); diff --git a/test/parallel/test-domain-promise.js b/test/parallel/test-domain-promise.js index 1c6e62956085ce..704092522357fd 100644 --- a/test/parallel/test-domain-promise.js +++ b/test/parallel/test-domain-promise.js @@ -50,7 +50,6 @@ const vm = require('vm'); d2.run(common.mustCall(() => { p.then(common.mustCall((v) => { assert.strictEqual(process.domain, d2); - assert.strictEqual(p.domain, d1); })); })); } @@ -64,9 +63,8 @@ const vm = require('vm'); })); d2.run(common.mustCall(() => { - p.then(p.domain.bind(common.mustCall((v) => { + p.then(d1.bind(common.mustCall((v) => { assert.strictEqual(process.domain, d1); - assert.strictEqual(p.domain, d1); }))); })); } @@ -83,7 +81,6 @@ const vm = require('vm'); d2.run(common.mustCall(() => { p.then(common.mustCall((v) => { assert.strictEqual(process.domain, d2); - assert.strictEqual(p.domain, d1); })); })); })); @@ -100,7 +97,6 @@ const vm = require('vm'); d2.run(common.mustCall(() => { p.catch(common.mustCall((v) => { assert.strictEqual(process.domain, d2); - assert.strictEqual(p.domain, d1); })); })); } From 74f854e769fbb595b007b25d7bd79e7fbdf043b8 Mon Sep 17 00:00:00 2001 From: christian-bromann Date: Fri, 12 Oct 2018 11:54:37 -0700 Subject: [PATCH 168/178] test: add test coverage for fs.truncate Add test to check: - for `null` as len parameter - if error is propagated into callback if file doesn't exist - if an error is actually thrown if len is not a number PR-URL: https://github.com/nodejs/node/pull/23620 Reviewed-By: Refael Ackermann Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Denys Otrishko --- test/parallel/test-fs-truncate.js | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/parallel/test-fs-truncate.js b/test/parallel/test-fs-truncate.js index 8193e05bb7d4b0..d1d743eb57f0fd 100644 --- a/test/parallel/test-fs-truncate.js +++ b/test/parallel/test-fs-truncate.js @@ -239,6 +239,41 @@ function testFtruncate(cb) { })); } +{ + const file7 = path.resolve(tmp, 'truncate-file-7.txt'); + fs.writeFileSync(file7, 'Hi'); + fs.truncate(file7, undefined, common.mustCall(function(err) { + assert.ifError(err); + assert(fs.readFileSync(file7).equals(Buffer.from(''))); + })); +} + +{ + const file8 = path.resolve(tmp, 'non-existent-truncate-file.txt'); + const validateError = (err) => { + assert.strictEqual(file8, err.path); + assert.strictEqual( + err.message, + `ENOENT: no such file or directory, open '${file8}'`); + assert.strictEqual(err.code, 'ENOENT'); + assert.strictEqual(err.syscall, 'open'); + return true; + }; + fs.truncate(file8, 0, common.mustCall(validateError)); +} + +['', false, null, {}, []].forEach((input) => { + assert.throws( + () => fs.truncate('/foo/bar', input), + { + code: 'ERR_INVALID_ARG_TYPE', + name: 'TypeError [ERR_INVALID_ARG_TYPE]', + message: 'The "len" argument must be of type number. ' + + `Received type ${typeof input}` + } + ); +}); + ['', false, null, undefined, {}, []].forEach((input) => { ['ftruncate', 'ftruncateSync'].forEach((fnName) => { assert.throws( From c34eae5f882c8bb4d58b492caf97cdb08b1dbbcb Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 22 Sep 2018 14:09:52 +0200 Subject: [PATCH 169/178] zlib: refactor zlib internals Split out things that are specific to zlib as a specific compression library, vs. the interface that is common to most C compression libraries. This should pave the way for including support for e.g. brotli. PR-URL: https://github.com/nodejs/node/pull/23360 Reviewed-By: James M Snell Reviewed-By: Daniel Bevenius --- src/node_zlib.cc | 928 ++++++++++++++++------------ test/parallel/test-heapdump-zlib.js | 4 +- 2 files changed, 520 insertions(+), 412 deletions(-) diff --git a/src/node_zlib.cc b/src/node_zlib.cc index 0935d3f731ded4..8b257cf0d47934 100644 --- a/src/node_zlib.cc +++ b/src/node_zlib.cc @@ -88,32 +88,75 @@ enum node_zlib_mode { #define GZIP_HEADER_ID1 0x1f #define GZIP_HEADER_ID2 0x8b -/** - * Deflate/Inflate - */ -class ZCtx : public AsyncWrap, public ThreadPoolWork { +struct CompressionError { + CompressionError(const char* message, const char* code, int err) + : message(message), code(code), err(err) {} + CompressionError() = default; + + const char* message = nullptr; + const char* code = nullptr; + int err = 0; + + inline bool IsError() const { return code != nullptr; } +}; + +class ZlibContext : public MemoryRetainer { + public: + ZlibContext() = default; + + // Streaming-related, should be available for all compression libraries: + void Close(); + void DoThreadPoolWork(); + void SetBuffers(char* in, uint32_t in_len, char* out, uint32_t out_len); + void SetFlush(int flush); + void GetAfterWriteOffsets(uint32_t* avail_in, uint32_t* avail_out) const; + CompressionError GetErrorInfo() const; + + // Zlib-specific: + CompressionError Init(int level, int window_bits, int mem_level, int strategy, + std::vector&& dictionary); + inline void SetMode(node_zlib_mode mode) { mode_ = mode; } + void SetAllocationFunctions(alloc_func alloc, free_func free, void* opaque); + CompressionError ResetStream(); + CompressionError SetParams(int level, int strategy); + + SET_MEMORY_INFO_NAME(ZlibContext) + SET_SELF_SIZE(ZlibContext) + + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackField("dictionary", dictionary_); + } + + private: + CompressionError ErrorForMessage(const char* message) const; + CompressionError SetDictionary(); + + int err_ = 0; + int flush_ = 0; + int level_ = 0; + int mem_level_ = 0; + node_zlib_mode mode_ = NONE; + int strategy_ = 0; + int window_bits_ = 0; + unsigned int gzip_id_bytes_read_ = 0; + std::vector dictionary_; + + z_stream strm_; + + DISALLOW_COPY_AND_ASSIGN(ZlibContext); +}; + +template +class CompressionStream : public AsyncWrap, public ThreadPoolWork { public: - ZCtx(Environment* env, Local wrap, node_zlib_mode mode) + CompressionStream(Environment* env, Local wrap) : AsyncWrap(env, wrap, AsyncWrap::PROVIDER_ZLIB), ThreadPoolWork(env), - err_(0), - flush_(0), - init_done_(false), - level_(0), - memLevel_(0), - mode_(mode), - strategy_(0), - windowBits_(0), - write_in_progress_(false), - pending_close_(false), - refs_(0), - gzip_id_bytes_read_(0), write_result_(nullptr) { MakeWeak(); } - - ~ZCtx() override { + ~CompressionStream() override { CHECK_EQ(false, write_in_progress_ && "write in progress"); Close(); CHECK_EQ(zlib_memory_, 0); @@ -127,27 +170,16 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { } pending_close_ = false; + closed_ = true; CHECK(init_done_ && "close before init"); - CHECK_LE(mode_, UNZIP); AllocScope alloc_scope(this); - int status = Z_OK; - if (mode_ == DEFLATE || mode_ == GZIP || mode_ == DEFLATERAW) { - status = deflateEnd(&strm_); - } else if (mode_ == INFLATE || mode_ == GUNZIP || mode_ == INFLATERAW || - mode_ == UNZIP) { - status = inflateEnd(&strm_); - } - - CHECK(status == Z_OK || status == Z_DATA_ERROR); - mode_ = NONE; - - dictionary_.clear(); + ctx_.Close(); } static void Close(const FunctionCallbackInfo& args) { - ZCtx* ctx; + CompressionStream* ctx; ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder()); ctx->Close(); } @@ -198,7 +230,7 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { CHECK(Buffer::IsWithinBounds(out_off, out_len, Buffer::Length(out_buf))); out = Buffer::Data(out_buf) + out_off; - ZCtx* ctx; + CompressionStream* ctx; ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder()); ctx->Write(flush, in, in_len, out, out_len); @@ -211,26 +243,22 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { AllocScope alloc_scope(this); CHECK(init_done_ && "write before init"); - CHECK(mode_ != NONE && "already finalized"); + CHECK(!closed_ && "already finalized"); CHECK_EQ(false, write_in_progress_); CHECK_EQ(false, pending_close_); write_in_progress_ = true; Ref(); - strm_.avail_in = in_len; - strm_.next_in = reinterpret_cast(in); - strm_.avail_out = out_len; - strm_.next_out = reinterpret_cast(out); - flush_ = flush; + ctx_.SetBuffers(in, in_len, out, out_len); + ctx_.SetFlush(flush); if (!async) { // sync version env()->PrintSyncTrace(); DoThreadPoolWork(); if (CheckError()) { - write_result_[0] = strm_.avail_out; - write_result_[1] = strm_.avail_in; + UpdateWriteResult(); write_in_progress_ = false; } Unref(); @@ -241,142 +269,24 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { ScheduleWork(); } + void UpdateWriteResult() { + ctx_.GetAfterWriteOffsets(&write_result_[1], &write_result_[0]); + } + // thread pool! // This function may be called multiple times on the uv_work pool // for a single write() call, until all of the input bytes have // been consumed. void DoThreadPoolWork() override { - const Bytef* next_expected_header_byte = nullptr; - - // If the avail_out is left at 0, then it means that it ran out - // of room. If there was avail_out left over, then it means - // that all of the input was consumed. - switch (mode_) { - case DEFLATE: - case GZIP: - case DEFLATERAW: - err_ = deflate(&strm_, flush_); - break; - case UNZIP: - if (strm_.avail_in > 0) { - next_expected_header_byte = strm_.next_in; - } - - switch (gzip_id_bytes_read_) { - case 0: - if (next_expected_header_byte == nullptr) { - break; - } - - if (*next_expected_header_byte == GZIP_HEADER_ID1) { - gzip_id_bytes_read_ = 1; - next_expected_header_byte++; - - if (strm_.avail_in == 1) { - // The only available byte was already read. - break; - } - } else { - mode_ = INFLATE; - break; - } - - // fallthrough - case 1: - if (next_expected_header_byte == nullptr) { - break; - } - - if (*next_expected_header_byte == GZIP_HEADER_ID2) { - gzip_id_bytes_read_ = 2; - mode_ = GUNZIP; - } else { - // There is no actual difference between INFLATE and INFLATERAW - // (after initialization). - mode_ = INFLATE; - } - - break; - default: - CHECK(0 && "invalid number of gzip magic number bytes read"); - } - - // fallthrough - case INFLATE: - case GUNZIP: - case INFLATERAW: - err_ = inflate(&strm_, flush_); - - // If data was encoded with dictionary (INFLATERAW will have it set in - // SetDictionary, don't repeat that here) - if (mode_ != INFLATERAW && - err_ == Z_NEED_DICT && - !dictionary_.empty()) { - // Load it - err_ = inflateSetDictionary(&strm_, - dictionary_.data(), - dictionary_.size()); - if (err_ == Z_OK) { - // And try to decode again - err_ = inflate(&strm_, flush_); - } else if (err_ == Z_DATA_ERROR) { - // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR. - // Make it possible for After() to tell a bad dictionary from bad - // input. - err_ = Z_NEED_DICT; - } - } - - while (strm_.avail_in > 0 && - mode_ == GUNZIP && - err_ == Z_STREAM_END && - strm_.next_in[0] != 0x00) { - // Bytes remain in input buffer. Perhaps this is another compressed - // member in the same archive, or just trailing garbage. - // Trailing zero bytes are okay, though, since they are frequently - // used for padding. - - Reset(); - err_ = inflate(&strm_, flush_); - } - break; - default: - UNREACHABLE(); - } - - // pass any errors back to the main thread to deal with. - - // now After will emit the output, and - // either schedule another call to Process, - // or shift the queue and call Process. + ctx_.DoThreadPoolWork(); } bool CheckError() { - // Acceptable error states depend on the type of zlib stream. - switch (err_) { - case Z_OK: - case Z_BUF_ERROR: - if (strm_.avail_out != 0 && flush_ == Z_FINISH) { - Error("unexpected end of file"); - return false; - } - case Z_STREAM_END: - // normal statuses, not fatal - break; - case Z_NEED_DICT: - if (dictionary_.empty()) - Error("Missing dictionary"); - else - Error("Bad dictionary"); - return false; - default: - // something else. - Error("Zlib error"); - return false; - } - - return true; + const CompressionError err = ctx_.GetErrorInfo(); + if (!err.IsError()) return true; + EmitError(err); + return false; } @@ -400,8 +310,7 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { if (!CheckError()) return; - write_result_[0] = strm_.avail_out; - write_result_[1] = strm_.avail_in; + UpdateWriteResult(); // call the write() cb Local cb = PersistentToLocal(env()->isolate(), @@ -413,19 +322,15 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { } // TODO(addaleax): Switch to modern error system (node_errors.h). - void Error(const char* message) { + void EmitError(const CompressionError& err) { // If you hit this assertion, you forgot to enter the v8::Context first. CHECK_EQ(env()->context(), env()->isolate()->GetCurrentContext()); - if (strm_.msg != nullptr) { - message = strm_.msg; - } - HandleScope scope(env()->isolate()); Local args[3] = { - OneByteString(env()->isolate(), message), - Integer::New(env()->isolate(), err_), - OneByteString(env()->isolate(), ZlibStrerror(err_)) + OneByteString(env()->isolate(), err.message), + Integer::New(env()->isolate(), err.err), + OneByteString(env()->isolate(), err.code) }; MakeCallback(env()->onerror_string(), arraysize(args), args); @@ -435,12 +340,107 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { Close(); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackField("compression context", ctx_); + tracker->TrackFieldWithSize("zlib_memory", + zlib_memory_ + unreported_allocations_); + } + + protected: + CompressionContext* context() { return &ctx_; } + + void InitStream(uint32_t* write_result, Local write_js_callback) { + write_result_ = write_result; + write_js_callback_.Reset(env()->isolate(), write_js_callback); + init_done_ = true; + } + + // Allocation functions provided to zlib itself. We store the real size of + // the allocated memory chunk just before the "payload" memory we return + // to zlib. + // Because we use zlib off the thread pool, we can not report memory directly + // to V8; rather, we first store it as "unreported" memory in a separate + // field and later report it back from the main thread. + static void* AllocForZlib(void* data, uInt items, uInt size) { + CompressionStream* ctx = static_cast(data); + size_t real_size = + MultiplyWithOverflowCheck(static_cast(items), + static_cast(size)) + sizeof(size_t); + char* memory = UncheckedMalloc(real_size); + if (UNLIKELY(memory == nullptr)) return nullptr; + *reinterpret_cast(memory) = real_size; + ctx->unreported_allocations_.fetch_add(real_size, + std::memory_order_relaxed); + return memory + sizeof(size_t); + } + + static void FreeForZlib(void* data, void* pointer) { + if (UNLIKELY(pointer == nullptr)) return; + CompressionStream* ctx = static_cast(data); + char* real_pointer = static_cast(pointer) - sizeof(size_t); + size_t real_size = *reinterpret_cast(real_pointer); + ctx->unreported_allocations_.fetch_sub(real_size, + std::memory_order_relaxed); + free(real_pointer); + } + + // This is called on the main thread after zlib may have allocated something + // in order to report it back to V8. + void AdjustAmountOfExternalAllocatedMemory() { + ssize_t report = + unreported_allocations_.exchange(0, std::memory_order_relaxed); + if (report == 0) return; + CHECK_IMPLIES(report < 0, zlib_memory_ >= static_cast(-report)); + zlib_memory_ += report; + env()->isolate()->AdjustAmountOfExternalAllocatedMemory(report); + } + + struct AllocScope { + explicit AllocScope(CompressionStream* stream) : stream(stream) {} + ~AllocScope() { stream->AdjustAmountOfExternalAllocatedMemory(); } + CompressionStream* stream; + }; + + private: + void Ref() { + if (++refs_ == 1) { + ClearWeak(); + } + } + + void Unref() { + CHECK_GT(refs_, 0); + if (--refs_ == 0) { + MakeWeak(); + } + } + + bool init_done_ = false; + bool write_in_progress_ = false; + bool pending_close_ = false; + bool closed_ = false; + unsigned int refs_ = 0; + uint32_t* write_result_ = nullptr; + Persistent write_js_callback_; + std::atomic unreported_allocations_{0}; + size_t zlib_memory_ = 0; + + CompressionContext ctx_; +}; + +class ZlibStream : public CompressionStream { + public: + ZlibStream(Environment* env, Local wrap, node_zlib_mode mode) + : CompressionStream(env, wrap) { + context()->SetMode(mode); + } + static void New(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); CHECK(args[0]->IsInt32()); node_zlib_mode mode = static_cast(args[0].As()->Value()); - new ZCtx(env, args.This(), mode); + new ZlibStream(env, args.This(), mode); } // just pull the ints out of the args and call the other Init @@ -459,42 +459,25 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { "init(windowBits, level, memLevel, strategy, writeResult, writeCallback," " dictionary)"); - ZCtx* ctx; - ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder()); + ZlibStream* wrap; + ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder()); Local context = args.GetIsolate()->GetCurrentContext(); // windowBits is special. On the compression side, 0 is an invalid value. // But on the decompression side, a value of 0 for windowBits tells zlib // to use the window size in the zlib header of the compressed stream. - uint32_t windowBits; - if (!args[0]->Uint32Value(context).To(&windowBits)) return; - - if (!((windowBits == 0) && - (ctx->mode_ == INFLATE || - ctx->mode_ == GUNZIP || - ctx->mode_ == UNZIP))) { - CHECK( - (windowBits >= Z_MIN_WINDOWBITS && windowBits <= Z_MAX_WINDOWBITS) && - "invalid windowBits"); - } + uint32_t window_bits; + if (!args[0]->Uint32Value(context).To(&window_bits)) return; - int level; + int32_t level; if (!args[1]->Int32Value(context).To(&level)) return; - CHECK((level >= Z_MIN_LEVEL && level <= Z_MAX_LEVEL) && - "invalid compression level"); - uint32_t memLevel; - if (!args[2]->Uint32Value(context).To(&memLevel)) return; - CHECK((memLevel >= Z_MIN_MEMLEVEL && memLevel <= Z_MAX_MEMLEVEL) && - "invalid memlevel"); + uint32_t mem_level; + if (!args[2]->Uint32Value(context).To(&mem_level)) return; uint32_t strategy; if (!args[3]->Uint32Value(context).To(&strategy)) return; - CHECK((strategy == Z_FILTERED || strategy == Z_HUFFMAN_ONLY || - strategy == Z_RLE || strategy == Z_FIXED || - strategy == Z_DEFAULT_STRATEGY) && - "invalid strategy"); CHECK(args[4]->IsUint32Array()); Local array = args[4].As(); @@ -512,261 +495,385 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { data + Buffer::Length(args[6])); } - bool ret = ctx->Init(level, windowBits, memLevel, strategy, write_result, - write_js_callback, std::move(dictionary)); - if (ret) - ctx->SetDictionary(); + wrap->InitStream(write_result, write_js_callback); + + AllocScope alloc_scope(wrap); + wrap->context()->SetAllocationFunctions( + AllocForZlib, FreeForZlib, static_cast(wrap)); + const CompressionError err = + wrap->context()->Init(level, window_bits, mem_level, strategy, + std::move(dictionary)); + if (err.IsError()) + wrap->EmitError(err); - return args.GetReturnValue().Set(ret); + return args.GetReturnValue().Set(!err.IsError()); } static void Params(const FunctionCallbackInfo& args) { CHECK(args.Length() == 2 && "params(level, strategy)"); - ZCtx* ctx; - ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder()); - Environment* env = ctx->env(); + ZlibStream* wrap; + ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder()); + Local context = args.GetIsolate()->GetCurrentContext(); int level; - if (!args[0]->Int32Value(env->context()).To(&level)) return; + if (!args[0]->Int32Value(context).To(&level)) return; int strategy; - if (!args[1]->Int32Value(env->context()).To(&strategy)) return; - ctx->Params(level, strategy); + if (!args[1]->Int32Value(context).To(&strategy)) return; + + AllocScope alloc_scope(wrap); + const CompressionError err = wrap->context()->SetParams(level, strategy); + if (err.IsError()) + wrap->EmitError(err); } static void Reset(const FunctionCallbackInfo &args) { - ZCtx* ctx; - ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder()); - ctx->Reset(); - ctx->SetDictionary(); + ZlibStream* wrap; + ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder()); + + AllocScope alloc_scope(wrap); + const CompressionError err = wrap->context()->ResetStream(); + if (err.IsError()) + wrap->EmitError(err); } - bool Init(int level, int windowBits, int memLevel, - int strategy, uint32_t* write_result, - Local write_js_callback, - std::vector&& dictionary) { - AllocScope alloc_scope(this); - level_ = level; - windowBits_ = windowBits; - memLevel_ = memLevel; - strategy_ = strategy; + SET_MEMORY_INFO_NAME(ZlibStream) + SET_SELF_SIZE(ZlibStream) +}; - strm_.zalloc = AllocForZlib; - strm_.zfree = FreeForZlib; - strm_.opaque = static_cast(this); - flush_ = Z_NO_FLUSH; +void ZlibContext::Close() { + CHECK_LE(mode_, UNZIP); - err_ = Z_OK; + int status = Z_OK; + if (mode_ == DEFLATE || mode_ == GZIP || mode_ == DEFLATERAW) { + status = deflateEnd(&strm_); + } else if (mode_ == INFLATE || mode_ == GUNZIP || mode_ == INFLATERAW || + mode_ == UNZIP) { + status = inflateEnd(&strm_); + } - if (mode_ == GZIP || mode_ == GUNZIP) { - windowBits_ += 16; - } + CHECK(status == Z_OK || status == Z_DATA_ERROR); + mode_ = NONE; - if (mode_ == UNZIP) { - windowBits_ += 32; - } + dictionary_.clear(); +} - if (mode_ == DEFLATERAW || mode_ == INFLATERAW) { - windowBits_ *= -1; - } - switch (mode_) { - case DEFLATE: - case GZIP: - case DEFLATERAW: - err_ = deflateInit2(&strm_, - level_, - Z_DEFLATED, - windowBits_, - memLevel_, - strategy_); - break; - case INFLATE: - case GUNZIP: - case INFLATERAW: - case UNZIP: - err_ = inflateInit2(&strm_, windowBits_); - break; - default: - UNREACHABLE(); - } +void ZlibContext::DoThreadPoolWork() { + const Bytef* next_expected_header_byte = nullptr; + + // If the avail_out is left at 0, then it means that it ran out + // of room. If there was avail_out left over, then it means + // that all of the input was consumed. + switch (mode_) { + case DEFLATE: + case GZIP: + case DEFLATERAW: + err_ = deflate(&strm_, flush_); + break; + case UNZIP: + if (strm_.avail_in > 0) { + next_expected_header_byte = strm_.next_in; + } - dictionary_ = std::move(dictionary); + switch (gzip_id_bytes_read_) { + case 0: + if (next_expected_header_byte == nullptr) { + break; + } - write_in_progress_ = false; - init_done_ = true; + if (*next_expected_header_byte == GZIP_HEADER_ID1) { + gzip_id_bytes_read_ = 1; + next_expected_header_byte++; - if (err_ != Z_OK) { - dictionary_.clear(); - mode_ = NONE; - return false; - } + if (strm_.avail_in == 1) { + // The only available byte was already read. + break; + } + } else { + mode_ = INFLATE; + break; + } - write_result_ = write_result; - write_js_callback_.Reset(env()->isolate(), write_js_callback); - return true; - } + // fallthrough + case 1: + if (next_expected_header_byte == nullptr) { + break; + } - void SetDictionary() { - if (dictionary_.empty()) - return; + if (*next_expected_header_byte == GZIP_HEADER_ID2) { + gzip_id_bytes_read_ = 2; + mode_ = GUNZIP; + } else { + // There is no actual difference between INFLATE and INFLATERAW + // (after initialization). + mode_ = INFLATE; + } - err_ = Z_OK; + break; + default: + CHECK(0 && "invalid number of gzip magic number bytes read"); + } - switch (mode_) { - case DEFLATE: - case DEFLATERAW: - err_ = deflateSetDictionary(&strm_, - dictionary_.data(), - dictionary_.size()); - break; - case INFLATERAW: - // The other inflate cases will have the dictionary set when inflate() - // returns Z_NEED_DICT in Process() + // fallthrough + case INFLATE: + case GUNZIP: + case INFLATERAW: + err_ = inflate(&strm_, flush_); + + // If data was encoded with dictionary (INFLATERAW will have it set in + // SetDictionary, don't repeat that here) + if (mode_ != INFLATERAW && + err_ == Z_NEED_DICT && + !dictionary_.empty()) { + // Load it err_ = inflateSetDictionary(&strm_, dictionary_.data(), dictionary_.size()); - break; - default: - break; - } + if (err_ == Z_OK) { + // And try to decode again + err_ = inflate(&strm_, flush_); + } else if (err_ == Z_DATA_ERROR) { + // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR. + // Make it possible for After() to tell a bad dictionary from bad + // input. + err_ = Z_NEED_DICT; + } + } - if (err_ != Z_OK) { - Error("Failed to set dictionary"); - } + while (strm_.avail_in > 0 && + mode_ == GUNZIP && + err_ == Z_STREAM_END && + strm_.next_in[0] != 0x00) { + // Bytes remain in input buffer. Perhaps this is another compressed + // member in the same archive, or just trailing garbage. + // Trailing zero bytes are okay, though, since they are frequently + // used for padding. + + ResetStream(); + err_ = inflate(&strm_, flush_); + } + break; + default: + UNREACHABLE(); } +} - void Params(int level, int strategy) { - AllocScope alloc_scope(this); - err_ = Z_OK; +void ZlibContext::SetBuffers(char* in, uint32_t in_len, + char* out, uint32_t out_len) { + strm_.avail_in = in_len; + strm_.next_in = reinterpret_cast(in); + strm_.avail_out = out_len; + strm_.next_out = reinterpret_cast(out); +} + + +void ZlibContext::SetFlush(int flush) { + flush_ = flush; +} - switch (mode_) { - case DEFLATE: - case DEFLATERAW: - err_ = deflateParams(&strm_, level, strategy); - break; - default: - break; - } - if (err_ != Z_OK && err_ != Z_BUF_ERROR) { - Error("Failed to set parameters"); +void ZlibContext::GetAfterWriteOffsets(uint32_t* avail_in, + uint32_t* avail_out) const { + *avail_in = strm_.avail_in; + *avail_out = strm_.avail_out; +} + + +CompressionError ZlibContext::ErrorForMessage(const char* message) const { + if (strm_.msg != nullptr) + message = strm_.msg; + + return CompressionError { message, ZlibStrerror(err_), err_ }; +} + + +CompressionError ZlibContext::GetErrorInfo() const { + // Acceptable error states depend on the type of zlib stream. + switch (err_) { + case Z_OK: + case Z_BUF_ERROR: + if (strm_.avail_out != 0 && flush_ == Z_FINISH) { + return ErrorForMessage("unexpected end of file"); } + case Z_STREAM_END: + // normal statuses, not fatal + break; + case Z_NEED_DICT: + if (dictionary_.empty()) + return ErrorForMessage("Missing dictionary"); + else + return ErrorForMessage("Bad dictionary"); + default: + // something else. + return ErrorForMessage("Zlib error"); } - void Reset() { - AllocScope alloc_scope(this); + return CompressionError {}; +} - err_ = Z_OK; - - switch (mode_) { - case DEFLATE: - case DEFLATERAW: - case GZIP: - err_ = deflateReset(&strm_); - break; - case INFLATE: - case INFLATERAW: - case GUNZIP: - err_ = inflateReset(&strm_); - break; - default: - break; - } - if (err_ != Z_OK) { - Error("Failed to reset stream"); - } +CompressionError ZlibContext::ResetStream() { + err_ = Z_OK; + + switch (mode_) { + case DEFLATE: + case DEFLATERAW: + case GZIP: + err_ = deflateReset(&strm_); + break; + case INFLATE: + case INFLATERAW: + case GUNZIP: + err_ = inflateReset(&strm_); + break; + default: + break; } - void MemoryInfo(MemoryTracker* tracker) const override { - tracker->TrackField("dictionary", dictionary_); - tracker->TrackFieldWithSize("zlib_memory", - zlib_memory_ + unreported_allocations_); + if (err_ != Z_OK) + return ErrorForMessage("Failed to reset stream"); + + return SetDictionary(); +} + + +void ZlibContext::SetAllocationFunctions(alloc_func alloc, + free_func free, + void* opaque) { + strm_.zalloc = alloc; + strm_.zfree = free; + strm_.opaque = opaque; +} + + +CompressionError ZlibContext::Init( + int level, int window_bits, int mem_level, int strategy, + std::vector&& dictionary) { + if (!((window_bits == 0) && + (mode_ == INFLATE || + mode_ == GUNZIP || + mode_ == UNZIP))) { + CHECK( + (window_bits >= Z_MIN_WINDOWBITS && window_bits <= Z_MAX_WINDOWBITS) && + "invalid windowBits"); } - SET_MEMORY_INFO_NAME(ZCtx) - SET_SELF_SIZE(ZCtx) + CHECK((level >= Z_MIN_LEVEL && level <= Z_MAX_LEVEL) && + "invalid compression level"); - private: - void Ref() { - if (++refs_ == 1) { - ClearWeak(); - } + CHECK((mem_level >= Z_MIN_MEMLEVEL && mem_level <= Z_MAX_MEMLEVEL) && + "invalid memlevel"); + + CHECK((strategy == Z_FILTERED || strategy == Z_HUFFMAN_ONLY || + strategy == Z_RLE || strategy == Z_FIXED || + strategy == Z_DEFAULT_STRATEGY) && + "invalid strategy"); + + level_ = level; + window_bits_ = window_bits; + mem_level_ = mem_level; + strategy_ = strategy; + + flush_ = Z_NO_FLUSH; + + err_ = Z_OK; + + if (mode_ == GZIP || mode_ == GUNZIP) { + window_bits_ += 16; } - void Unref() { - CHECK_GT(refs_, 0); - if (--refs_ == 0) { - MakeWeak(); - } + if (mode_ == UNZIP) { + window_bits_ += 32; } - // Allocation functions provided to zlib itself. We store the real size of - // the allocated memory chunk just before the "payload" memory we return - // to zlib. - // Because we use zlib off the thread pool, we can not report memory directly - // to V8; rather, we first store it as "unreported" memory in a separate - // field and later report it back from the main thread. - static void* AllocForZlib(void* data, uInt items, uInt size) { - ZCtx* ctx = static_cast(data); - size_t real_size = - MultiplyWithOverflowCheck(static_cast(items), - static_cast(size)) + sizeof(size_t); - char* memory = UncheckedMalloc(real_size); - if (UNLIKELY(memory == nullptr)) return nullptr; - *reinterpret_cast(memory) = real_size; - ctx->unreported_allocations_.fetch_add(real_size, - std::memory_order_relaxed); - return memory + sizeof(size_t); + if (mode_ == DEFLATERAW || mode_ == INFLATERAW) { + window_bits_ *= -1; } - static void FreeForZlib(void* data, void* pointer) { - if (UNLIKELY(pointer == nullptr)) return; - ZCtx* ctx = static_cast(data); - char* real_pointer = static_cast(pointer) - sizeof(size_t); - size_t real_size = *reinterpret_cast(real_pointer); - ctx->unreported_allocations_.fetch_sub(real_size, - std::memory_order_relaxed); - free(real_pointer); + switch (mode_) { + case DEFLATE: + case GZIP: + case DEFLATERAW: + err_ = deflateInit2(&strm_, + level_, + Z_DEFLATED, + window_bits_, + mem_level_, + strategy_); + break; + case INFLATE: + case GUNZIP: + case INFLATERAW: + case UNZIP: + err_ = inflateInit2(&strm_, window_bits_); + break; + default: + UNREACHABLE(); } - // This is called on the main thread after zlib may have allocated something - // in order to report it back to V8. - void AdjustAmountOfExternalAllocatedMemory() { - ssize_t report = - unreported_allocations_.exchange(0, std::memory_order_relaxed); - if (report == 0) return; - CHECK_IMPLIES(report < 0, zlib_memory_ >= static_cast(-report)); - zlib_memory_ += report; - env()->isolate()->AdjustAmountOfExternalAllocatedMemory(report); + dictionary_ = std::move(dictionary); + + if (err_ != Z_OK) { + dictionary_.clear(); + mode_ = NONE; + return ErrorForMessage(nullptr); } - struct AllocScope { - explicit AllocScope(ZCtx* ctx) : ctx(ctx) {} - ~AllocScope() { ctx->AdjustAmountOfExternalAllocatedMemory(); } - ZCtx* ctx; - }; + return SetDictionary(); +} - std::vector dictionary_; - int err_; - int flush_; - bool init_done_; - int level_; - int memLevel_; - node_zlib_mode mode_; - int strategy_; - z_stream strm_; - int windowBits_; - bool write_in_progress_; - bool pending_close_; - unsigned int refs_; - unsigned int gzip_id_bytes_read_; - uint32_t* write_result_; - Persistent write_js_callback_; - std::atomic unreported_allocations_{0}; - size_t zlib_memory_ = 0; -}; + +CompressionError ZlibContext::SetDictionary() { + if (dictionary_.empty()) + return CompressionError {}; + + err_ = Z_OK; + + switch (mode_) { + case DEFLATE: + case DEFLATERAW: + err_ = deflateSetDictionary(&strm_, + dictionary_.data(), + dictionary_.size()); + break; + case INFLATERAW: + // The other inflate cases will have the dictionary set when inflate() + // returns Z_NEED_DICT in Process() + err_ = inflateSetDictionary(&strm_, + dictionary_.data(), + dictionary_.size()); + break; + default: + break; + } + + if (err_ != Z_OK) { + return ErrorForMessage("Failed to set dictionary"); + } + + return CompressionError {}; +} + + +CompressionError ZlibContext::SetParams(int level, int strategy) { + err_ = Z_OK; + + switch (mode_) { + case DEFLATE: + case DEFLATERAW: + err_ = deflateParams(&strm_, level, strategy); + break; + default: + break; + } + + if (err_ != Z_OK && err_ != Z_BUF_ERROR) { + return ErrorForMessage("Failed to set parameters"); + } + + return CompressionError {}; +} void Initialize(Local target, @@ -774,17 +881,18 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); - Local z = env->NewFunctionTemplate(ZCtx::New); + Local z = env->NewFunctionTemplate(ZlibStream::New); z->InstanceTemplate()->SetInternalFieldCount(1); z->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(z, "write", ZCtx::Write); - env->SetProtoMethod(z, "writeSync", ZCtx::Write); - env->SetProtoMethod(z, "init", ZCtx::Init); - env->SetProtoMethod(z, "close", ZCtx::Close); - env->SetProtoMethod(z, "params", ZCtx::Params); - env->SetProtoMethod(z, "reset", ZCtx::Reset); + env->SetProtoMethod(z, "write", ZlibStream::Write); + env->SetProtoMethod(z, "writeSync", ZlibStream::Write); + env->SetProtoMethod(z, "close", ZlibStream::Close); + + env->SetProtoMethod(z, "init", ZlibStream::Init); + env->SetProtoMethod(z, "params", ZlibStream::Params); + env->SetProtoMethod(z, "reset", ZlibStream::Reset); Local zlibString = FIXED_ONE_BYTE_STRING(env->isolate(), "Zlib"); z->SetClassName(zlibString); diff --git a/test/parallel/test-heapdump-zlib.js b/test/parallel/test-heapdump-zlib.js index f79e345821ea50..0f86576bd1f2fa 100644 --- a/test/parallel/test-heapdump-zlib.js +++ b/test/parallel/test-heapdump-zlib.js @@ -4,10 +4,10 @@ require('../common'); const { validateSnapshotNodes } = require('../common/heap'); const zlib = require('zlib'); -validateSnapshotNodes('Node / ZCtx', []); +validateSnapshotNodes('Node / ZlibStream', []); // eslint-disable-next-line no-unused-vars const gunzip = zlib.createGunzip(); -validateSnapshotNodes('Node / ZCtx', [ +validateSnapshotNodes('Node / ZlibStream', [ { children: [ { node_name: 'Zlib', edge_name: 'wrapped' }, From 91fe7e5ad28a7bc75948f380a051aae156131b37 Mon Sep 17 00:00:00 2001 From: Dolapo Toki Date: Fri, 12 Oct 2018 11:11:44 -0700 Subject: [PATCH 170/178] src: add deprecation warning to errname() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/23597 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Gireesh Punathil Reviewed-By: Sakthipriyan Vairamani --- doc/api/deprecations.md | 16 ++++++++++++++++ src/env.cc | 1 + src/env.h | 7 +++++++ src/uv.cc | 11 +++++++++-- test/parallel/test-err-name-deprecation.js | 13 +++++++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 test/parallel/test-err-name-deprecation.js diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index 0172cd78383dfb..33e98c4cd4404d 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -2233,6 +2233,21 @@ like `dns.lookup(false)` due to backward compatibility. This behavior is undocumented and is thought to be unused in real world apps. It will become an error in future versions of Node.js. + +### DEP0119: process.binding('uv').errname() private API + + +Type: Documentation-only (supports [`--pending-deprecation`][]) + +Directly calling `process.binding('uv').errname()` is deprecated. +Please make sure to use [`util.getSystemErrorName()`][] instead. + + [`--pending-deprecation`]: cli.html#cli_pending_deprecation [`Buffer.allocUnsafeSlow(size)`]: buffer.html#buffer_class_method_buffer_allocunsafeslow_size [`Buffer.from(array)`]: buffer.html#buffer_class_method_buffer_from_array @@ -2300,6 +2315,7 @@ It will become an error in future versions of Node.js. [`util._extend()`]: util.html#util_util_extend_target_source [`util.debug()`]: util.html#util_util_debug_string [`util.error()`]: util.html#util_util_error_strings +[`util.getSystemErrorName()`]: util.html#util_util_getsystemerrorname_err [`util.inspect()`]: util.html#util_util_inspect_object_options [`util.inspect.custom`]: util.html#util_util_inspect_custom [`util.isArray()`]: util.html#util_util_isarray_object diff --git a/src/env.cc b/src/env.cc index 14a8b23a8441e9..4f98b5590cf941 100644 --- a/src/env.cc +++ b/src/env.cc @@ -134,6 +134,7 @@ Environment::Environment(IsolateData* isolate_data, printed_error_(false), abort_on_uncaught_exception_(false), emit_env_nonstring_warning_(true), + emit_err_name_warning_(true), makecallback_cntr_(0), should_abort_on_uncaught_toggle_(isolate_, 1), trace_category_state_(isolate_, kTraceCategoryCount), diff --git a/src/env.h b/src/env.h index 1eb333b0ef31d9..3daa48f9cbb70e 100644 --- a/src/env.h +++ b/src/env.h @@ -843,6 +843,12 @@ class Environment { return current_value; } + inline bool EmitErrNameWarning() { + bool current_value = emit_err_name_warning_; + emit_err_name_warning_ = false; + return current_value; + } + typedef void (*native_immediate_callback)(Environment* env, void* data); // cb will be called as cb(env, data) on the next event loop iteration. // obj will be kept alive between now and after the callback has run. @@ -929,6 +935,7 @@ class Environment { bool printed_error_; bool abort_on_uncaught_exception_; bool emit_env_nonstring_warning_; + bool emit_err_name_warning_; size_t makecallback_cntr_; std::vector destroy_async_id_list_; diff --git a/src/uv.cc b/src/uv.cc index 3d070a32bdb3b4..354acee4c01fc6 100644 --- a/src/uv.cc +++ b/src/uv.cc @@ -39,10 +39,17 @@ using v8::String; using v8::Value; -// TODO(joyeecheung): deprecate this function in favor of -// lib/util.getSystemErrorName() void ErrName(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); + if (env->options()->pending_deprecation && env->EmitErrNameWarning()) { + if (ProcessEmitDeprecationWarning( + env, + "Directly calling process.binding('uv').errname() is being" + " deprecated. " + "Please make sure to use util.getSystemErrorName() instead.", + "DEP0119").IsNothing()) + return; + } int err; if (!args[0]->Int32Value(env->context()).To(&err)) return; CHECK_LT(err, 0); diff --git a/test/parallel/test-err-name-deprecation.js b/test/parallel/test-err-name-deprecation.js new file mode 100644 index 00000000000000..d9af7e3804ec4a --- /dev/null +++ b/test/parallel/test-err-name-deprecation.js @@ -0,0 +1,13 @@ +'use strict'; +const common = require('../common'); + +// Flags: --pending-deprecation + +common.expectWarning( + 'DeprecationWarning', + 'Directly calling process.binding(\'uv\').errname() is being ' + + 'deprecated. Please make sure to use util.getSystemErrorName() instead.', + 'DEP0119' +); + +process.binding('uv').errname(-1); From b4a5ff9d145e7bab17cbf8ad9369e4b2ad390fc8 Mon Sep 17 00:00:00 2001 From: Jonathan Samines Date: Fri, 12 Oct 2018 10:47:28 -0600 Subject: [PATCH 171/178] test: fix strictEqual arguments order Fix strictEqual assertion arguments order to conform to the function signature in buffer tests PR-URL: https://github.com/nodejs/node/pull/23486 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-buffer-readuint.js | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/parallel/test-buffer-readuint.js b/test/parallel/test-buffer-readuint.js index de683f09503eff..f532febd0faf19 100644 --- a/test/parallel/test-buffer-readuint.js +++ b/test/parallel/test-buffer-readuint.js @@ -47,37 +47,37 @@ const assert = require('assert'); // Test 8 bit unsigned integers { const data = Buffer.from([0xff, 0x2a, 0x2a, 0x2a]); - assert.strictEqual(255, data.readUInt8(0)); - assert.strictEqual(42, data.readUInt8(1)); - assert.strictEqual(42, data.readUInt8(2)); - assert.strictEqual(42, data.readUInt8(3)); + assert.strictEqual(data.readUInt8(0), 255); + assert.strictEqual(data.readUInt8(1), 42); + assert.strictEqual(data.readUInt8(2), 42); + assert.strictEqual(data.readUInt8(3), 42); } // Test 16 bit unsigned integers { const data = Buffer.from([0x00, 0x2a, 0x42, 0x3f]); - assert.strictEqual(0x2a, data.readUInt16BE(0)); - assert.strictEqual(0x2a42, data.readUInt16BE(1)); - assert.strictEqual(0x423f, data.readUInt16BE(2)); - assert.strictEqual(0x2a00, data.readUInt16LE(0)); - assert.strictEqual(0x422a, data.readUInt16LE(1)); - assert.strictEqual(0x3f42, data.readUInt16LE(2)); + assert.strictEqual(data.readUInt16BE(0), 0x2a); + assert.strictEqual(data.readUInt16BE(1), 0x2a42); + assert.strictEqual(data.readUInt16BE(2), 0x423f); + assert.strictEqual(data.readUInt16LE(0), 0x2a00); + assert.strictEqual(data.readUInt16LE(1), 0x422a); + assert.strictEqual(data.readUInt16LE(2), 0x3f42); data[0] = 0xfe; data[1] = 0xfe; - assert.strictEqual(0xfefe, data.readUInt16BE(0)); - assert.strictEqual(0xfefe, data.readUInt16LE(0)); + assert.strictEqual(data.readUInt16BE(0), 0xfefe); + assert.strictEqual(data.readUInt16LE(0), 0xfefe); } // Test 32 bit unsigned integers { const data = Buffer.from([0x32, 0x65, 0x42, 0x56, 0x23, 0xff]); - assert.strictEqual(0x32654256, data.readUInt32BE(0)); - assert.strictEqual(0x65425623, data.readUInt32BE(1)); - assert.strictEqual(0x425623ff, data.readUInt32BE(2)); - assert.strictEqual(0x56426532, data.readUInt32LE(0)); - assert.strictEqual(0x23564265, data.readUInt32LE(1)); - assert.strictEqual(0xff235642, data.readUInt32LE(2)); + assert.strictEqual(data.readUInt32BE(0), 0x32654256); + assert.strictEqual(data.readUInt32BE(1), 0x65425623); + assert.strictEqual(data.readUInt32BE(2), 0x425623ff); + assert.strictEqual(data.readUInt32LE(0), 0x56426532); + assert.strictEqual(data.readUInt32LE(1), 0x23564265); + assert.strictEqual(data.readUInt32LE(2), 0xff235642); } // Test UInt From a17077fef96bc8a876b4209de6f2a0f5af7d2b06 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Tue, 16 Oct 2018 13:54:52 +0000 Subject: [PATCH 172/178] test: simplify test case by just writing directly to stream object --- test/sequential/test-fs-watch-system-limit.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index 51e4b1fd92c0b4..bf0b36f608201f 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -38,13 +38,7 @@ spawnProcesses(); setTimeout(() => { if (!finished) { - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); - - finished = true; - processes.forEach((proc) => proc.kill()); + gatherStderr.write('Error: Timeout'); } }, timeout); From 9a320872142806b4f883aa3449a19fe3bb66f432 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Fri, 12 Oct 2018 17:40:15 +0000 Subject: [PATCH 173/178] test: fix timeout when running sequential/test-fs-watch-system-limit.js During run of make test on Linux, it is possible for this test to spawn 200 processes and hang since there is a check to max out at 200 child processes. --- test/sequential/test-fs-watch-system-limit.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index e896cbf83b965a..6643e115027d27 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -11,6 +11,7 @@ if (!common.enoughTestCpu) const processes = []; const gatherStderr = new stream.PassThrough(); +const timeout = 30000; gatherStderr.setEncoding('utf8'); gatherStderr.setMaxListeners(Infinity); @@ -27,7 +28,6 @@ function spawnProcesses() { proc.stderr.pipe(gatherStderr); processes.push(proc); } - setTimeout(() => { if (!finished && processes.length < 200) spawnProcesses(); @@ -36,6 +36,16 @@ function spawnProcesses() { spawnProcesses(); +setTimeout(() => { + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); + + finished = true; + processes.forEach((proc) => proc.kill()); +}, timeout); + let accumulated = ''; gatherStderr.on('data', common.mustCallAtLeast((chunk) => { accumulated += chunk; @@ -43,7 +53,8 @@ gatherStderr.on('data', common.mustCallAtLeast((chunk) => { assert( accumulated.includes('ENOSPC: System limit for number ' + 'of file watchers reached') || - accumulated.includes('EMFILE: '), + accumulated.includes('EMFILE: ') || + accumulated.includes('Timeout'), accumulated); console.log(`done after ${processes.length} processes, cleaning up`); finished = true; From 860e82f682c64965f6595861ce10b289c661ad03 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Sat, 13 Oct 2018 18:37:53 +0000 Subject: [PATCH 174/178] test: don't write to stream if test passed successfully On success case, timeout still tries to fire and write to stream. Only write to stream if we haven't finished --- test/sequential/test-fs-watch-system-limit.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index 6643e115027d27..51e4b1fd92c0b4 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -37,13 +37,15 @@ function spawnProcesses() { spawnProcesses(); setTimeout(() => { - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); + if (!finished) { + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); - finished = true; - processes.forEach((proc) => proc.kill()); + finished = true; + processes.forEach((proc) => proc.kill()); + } }, timeout); let accumulated = ''; From 77f3ae8de9407dd4a340fce7bfd67cee5a318963 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Fri, 12 Oct 2018 17:40:15 +0000 Subject: [PATCH 175/178] test: fix timeout when running sequential/test-fs-watch-system-limit.js During run of make test on Linux, it is possible for this test to spawn 200 processes and hang since there is a check to max out at 200 child processes. --- test/sequential/test-fs-watch-system-limit.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index 51e4b1fd92c0b4..5eea82b88c2871 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -37,6 +37,7 @@ function spawnProcesses() { spawnProcesses(); setTimeout(() => { +<<<<<<< HEAD if (!finished) { const timeoutStream = new stream.PassThrough(); timeoutStream.write('Error: timeout'); @@ -46,6 +47,15 @@ setTimeout(() => { finished = true; processes.forEach((proc) => proc.kill()); } +======= + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); + + finished = true; + processes.forEach((proc) => proc.kill()); +>>>>>>> test: fix timeout when running sequential/test-fs-watch-system-limit.js }, timeout); let accumulated = ''; From 8f9b07d24161daf628f6d2e52fe1fad39069bed2 Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Sat, 13 Oct 2018 18:37:53 +0000 Subject: [PATCH 176/178] test: don't write to stream if test passed successfully On success case, timeout still tries to fire and write to stream. Only write to stream if we haven't finished --- test/sequential/test-fs-watch-system-limit.js | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index 5eea82b88c2871..bf0b36f608201f 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -37,25 +37,9 @@ function spawnProcesses() { spawnProcesses(); setTimeout(() => { -<<<<<<< HEAD if (!finished) { - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); - - finished = true; - processes.forEach((proc) => proc.kill()); + gatherStderr.write('Error: Timeout'); } -======= - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); - - finished = true; - processes.forEach((proc) => proc.kill()); ->>>>>>> test: fix timeout when running sequential/test-fs-watch-system-limit.js }, timeout); let accumulated = ''; From 8024ad9f2fc0d3fb686c8336532353b776239abc Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Sat, 13 Oct 2018 18:37:53 +0000 Subject: [PATCH 177/178] test: don't write to stream if test passed successfully On success case, timeout still tries to fire and write to stream. Only write to stream if we haven't finished --- test/sequential/test-fs-watch-system-limit.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index bf0b36f608201f..ff8c92ee1856b7 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -38,7 +38,17 @@ spawnProcesses(); setTimeout(() => { if (!finished) { +<<<<<<< HEAD gatherStderr.write('Error: Timeout'); +======= + const timeoutStream = new stream.PassThrough(); + timeoutStream.write('Error: timeout'); + timeoutStream.end(); + timeoutStream.pipe(gatherStderr); + + finished = true; + processes.forEach((proc) => proc.kill()); +>>>>>>> test: don't write to stream if test passed successfully } }, timeout); From b4468d94ec5bf1564ced715af816758245261b8a Mon Sep 17 00:00:00 2001 From: Marcus Scott Date: Tue, 16 Oct 2018 13:54:52 +0000 Subject: [PATCH 178/178] test: simplify test case by just writing directly to stream object --- test/sequential/test-fs-watch-system-limit.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/sequential/test-fs-watch-system-limit.js b/test/sequential/test-fs-watch-system-limit.js index ff8c92ee1856b7..bf0b36f608201f 100644 --- a/test/sequential/test-fs-watch-system-limit.js +++ b/test/sequential/test-fs-watch-system-limit.js @@ -38,17 +38,7 @@ spawnProcesses(); setTimeout(() => { if (!finished) { -<<<<<<< HEAD gatherStderr.write('Error: Timeout'); -======= - const timeoutStream = new stream.PassThrough(); - timeoutStream.write('Error: timeout'); - timeoutStream.end(); - timeoutStream.pipe(gatherStderr); - - finished = true; - processes.forEach((proc) => proc.kill()); ->>>>>>> test: don't write to stream if test passed successfully } }, timeout);