@elizaos/plugin-vision 2.0.0-beta.1 → 2.0.3-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +73 -301
- package/dist/action.d.ts +3 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/audio-capture-stream.d.ts +42 -0
- package/dist/audio-capture-stream.d.ts.map +1 -0
- package/dist/audio-capture.d.ts +25 -0
- package/dist/audio-capture.d.ts.map +1 -0
- package/dist/computeruse-ocr-bridge.d.ts +50 -0
- package/dist/computeruse-ocr-bridge.d.ts.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/describe-backpressure.d.ts +90 -0
- package/dist/describe-backpressure.d.ts.map +1 -0
- package/dist/dirty-tile-describer.d.ts +102 -0
- package/dist/dirty-tile-describer.d.ts.map +1 -0
- package/dist/dirty-tile-scene.d.ts +56 -0
- package/dist/dirty-tile-scene.d.ts.map +1 -0
- package/dist/entity-tracker.d.ts +33 -0
- package/dist/entity-tracker.d.ts.map +1 -0
- package/dist/face-detector-ggml.d.ts +60 -0
- package/dist/face-detector-ggml.d.ts.map +1 -0
- package/dist/face-detector-mediapipe.d.ts +25 -0
- package/dist/face-detector-mediapipe.d.ts.map +1 -0
- package/dist/face-recognition-ggml.d.ts +94 -0
- package/dist/face-recognition-ggml.d.ts.map +1 -0
- package/dist/get-screen-elements.d.ts +90 -0
- package/dist/get-screen-elements.d.ts.map +1 -0
- package/dist/get-screen.d.ts +60 -0
- package/dist/get-screen.d.ts.map +1 -0
- package/dist/image/sharp-compat.d.ts +89 -0
- package/dist/image/sharp-compat.d.ts.map +1 -0
- package/dist/image-input.d.ts +15 -0
- package/dist/image-input.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7957 -6238
- package/dist/index.js.map +41 -26
- package/dist/lifecycle.d.ts +94 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/mobile/capacitor-camera.d.ts +85 -0
- package/dist/mobile/capacitor-camera.d.ts.map +1 -0
- package/dist/native/doctr-ffi.d.ts +40 -0
- package/dist/native/doctr-ffi.d.ts.map +1 -0
- package/dist/native/yolo-ffi.d.ts +21 -0
- package/dist/native/yolo-ffi.d.ts.map +1 -0
- package/dist/ocr-host-windows.d.ts +34 -0
- package/dist/ocr-host-windows.d.ts.map +1 -0
- package/dist/ocr-service-apple-vision-macos.d.ts +51 -0
- package/dist/ocr-service-apple-vision-macos.d.ts.map +1 -0
- package/dist/ocr-service-doctr.d.ts +61 -0
- package/dist/ocr-service-doctr.d.ts.map +1 -0
- package/dist/ocr-service-linux-tesseract.d.ts +85 -0
- package/dist/ocr-service-linux-tesseract.d.ts.map +1 -0
- package/dist/ocr-service-paddleocr.d.ts +59 -0
- package/dist/ocr-service-paddleocr.d.ts.map +1 -0
- package/dist/ocr-service-windows.d.ts +41 -0
- package/dist/ocr-service-windows.d.ts.map +1 -0
- package/dist/ocr-service.d.ts +91 -0
- package/dist/ocr-service.d.ts.map +1 -0
- package/dist/ocr-with-coords.d.ts +103 -0
- package/dist/ocr-with-coords.d.ts.map +1 -0
- package/dist/person-detector.d.ts +17 -0
- package/dist/person-detector.d.ts.map +1 -0
- package/dist/provider.d.ts +3 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/routes.d.ts +7 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/screen-capture-bridge.d.ts +51 -0
- package/dist/screen-capture-bridge.d.ts.map +1 -0
- package/dist/screen-capture.d.ts +17 -0
- package/dist/screen-capture.d.ts.map +1 -0
- package/dist/screen-tiler.d.ts +75 -0
- package/dist/screen-tiler.d.ts.map +1 -0
- package/dist/service.d.ts +176 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/set-of-marks-provider.d.ts +64 -0
- package/dist/set-of-marks-provider.d.ts.map +1 -0
- package/dist/som.d.ts +135 -0
- package/dist/som.d.ts.map +1 -0
- package/dist/som.js +184 -0
- package/dist/som.js.map +11 -0
- package/dist/test-input.d.ts +25 -0
- package/dist/test-input.d.ts.map +1 -0
- package/dist/types.d.ts +241 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/vision-context-augmenter.d.ts +93 -0
- package/dist/vision-context-augmenter.d.ts.map +1 -0
- package/dist/vision-worker-manager.d.ts +51 -0
- package/dist/vision-worker-manager.d.ts.map +1 -0
- package/dist/workers/ocr-worker.d.ts +2 -0
- package/dist/workers/ocr-worker.d.ts.map +1 -0
- package/dist/workers/ocr-worker.js +1075 -7821
- package/dist/workers/ocr-worker.js.map +10 -51
- package/dist/workers/screen-capture-worker.d.ts +2 -0
- package/dist/workers/screen-capture-worker.d.ts.map +1 -0
- package/dist/workers/screen-capture-worker.js +364 -6
- package/dist/workers/screen-capture-worker.js.map +5 -4
- package/dist/workers/worker-logger.d.ts +10 -0
- package/dist/workers/worker-logger.d.ts.map +1 -0
- package/dist/yolo-detector.d.ts +37 -0
- package/dist/yolo-detector.d.ts.map +1 -0
- package/native/doctr.cpp/CMakeLists.txt +58 -0
- package/native/doctr.cpp/README.md +62 -0
- package/native/doctr.cpp/include/doctr.h +91 -0
- package/native/doctr.cpp/scripts/convert.py +98 -0
- package/native/doctr.cpp/src/doctr_det.cpp +112 -0
- package/native/doctr.cpp/src/doctr_rec.cpp +103 -0
- package/native/macos-vision-ocr.swift +113 -0
- package/native/mobilefacenet.cpp/README.md +13 -0
- package/native/movenet.cpp/README.md +10 -0
- package/native/retinaface.cpp/README.md +12 -0
- package/native/yolo.cpp/CMakeLists.txt +57 -0
- package/native/yolo.cpp/README.md +64 -0
- package/native/yolo.cpp/build.mjs +76 -0
- package/native/yolo.cpp/include/yolo.h +62 -0
- package/native/yolo.cpp/scripts/convert.py +248 -0
- package/native/yolo.cpp/src/yolo.cpp +425 -0
- package/native/yolo.cpp/verify/compare.py +99 -0
- package/native/yolo.cpp/verify/make_ref.py +75 -0
- package/native/yolo.cpp/verify/run_ggml.mjs +78 -0
- package/native/yolo.cpp/verify/run_ts.mjs +26 -0
- package/package.json +39 -21
- package/registry-entry.json +43 -0
- package/scripts/vendor-tesseract-linux.mjs +177 -0
- package/build.config.ts +0 -89
- package/dist/workers/florence2-worker.js +0 -779
- package/dist/workers/florence2-worker.js.map +0 -13
|
@@ -1,58 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
3
|
+
"sources": ["../../src/ocr-service-apple-vision-macos.ts", "../../src/workers/ocr-worker.ts", "../../src/image/sharp-compat.ts", "../../src/ocr-service.ts", "../../src/image-input.ts", "../../src/ocr-service-doctr.ts", "../../src/native/doctr-ffi.ts", "../../src/workers/worker-logger.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n",
|
|
6
|
-
"
|
|
7
|
-
"'use strict';\n\nconst getId = require('./utils/getId');\n\nlet jobCounter = 0;\n\nmodule.exports = ({\n id: _id,\n action,\n payload = {},\n}) => {\n let id = _id;\n if (typeof id === 'undefined') {\n id = getId('Job', jobCounter);\n jobCounter += 1;\n }\n\n return {\n id,\n action,\n payload,\n };\n};\n",
|
|
8
|
-
"'use strict';\n\nlet logging = false;\n\nexports.logging = logging;\n\nexports.setLogging = (_logging) => {\n logging = _logging;\n};\n\nexports.log = (...args) => (logging ? console.log.apply(this, args) : null);\n",
|
|
9
|
-
"
|
|
10
|
-
"'use strict';\n\nmodule.exports = (key) => {\n const env = {};\n\n if (typeof WorkerGlobalScope !== 'undefined') {\n env.type = 'webworker';\n } else if (typeof document === 'object') {\n env.type = 'browser';\n } else if (typeof process === 'object' && typeof require === 'function') {\n env.type = 'node';\n }\n\n if (typeof key === 'undefined') {\n return env;\n }\n\n return env[key];\n};\n",
|
|
11
|
-
"'use strict';\n\nconst isBrowser = require('./getEnvironment')('type') === 'browser';\n\nconst resolveURL = isBrowser ? s => (new URL(s, window.location.href)).href : s => s; // eslint-disable-line\n\nmodule.exports = (options) => {\n const opts = { ...options };\n ['corePath', 'workerPath', 'langPath'].forEach((key) => {\n if (options[key]) {\n opts[key] = resolveURL(opts[key]);\n }\n });\n return opts;\n};\n",
|
|
12
|
-
"'use strict';\n\n/*\n * OEM = OCR Engine Mode, and there are 4 possible modes.\n *\n * By default tesseract.js uses LSTM_ONLY mode.\n *\n */\nmodule.exports = {\n TESSERACT_ONLY: 0,\n LSTM_ONLY: 1,\n TESSERACT_LSTM_COMBINED: 2,\n DEFAULT: 3,\n};\n",
|
|
13
|
-
"'use strict';\n\nmodule.exports = {\n /*\n * Use BlobURL for worker script by default\n * TODO: remove this option\n *\n */\n workerBlobURL: true,\n logger: () => {},\n};\n",
|
|
14
|
-
"'use strict';\n\nconst path = require('path');\nconst defaultOptions = require('../../constants/defaultOptions');\n\n/*\n * Default options for node worker\n */\nmodule.exports = {\n ...defaultOptions,\n workerPath: path.join(__dirname, '..', '..', 'worker-script', 'node', 'index.js'),\n};\n",
|
|
15
|
-
"'use strict';\n\nconst { Worker } = require('worker_threads');\n\n/**\n * spawnWorker\n *\n * @name spawnWorker\n * @function fork a new process in node\n * @access public\n */\nmodule.exports = ({ workerPath }) => new Worker(workerPath);\n",
|
|
16
|
-
"'use strict';\n\n/**\n * terminateWorker\n *\n * @name terminateWorker\n * @function kill worker\n * @access public\n */\nmodule.exports = (worker) => {\n worker.terminate();\n};\n",
|
|
17
|
-
"'use strict';\n\nmodule.exports = (worker, handler) => {\n worker.on('message', handler);\n};\n",
|
|
18
|
-
"'use strict';\n\n/**\n * send\n *\n * @name send\n * @function send packet to worker and create a job\n * @access public\n */\nmodule.exports = async (worker, packet) => {\n worker.postMessage(packet);\n};\n",
|
|
19
|
-
"\"use strict\";\n\nvar conversions = {};\nmodule.exports = conversions;\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction evenRound(x) {\n // Round x to the nearest integer, choosing the even integer if it lies halfway between two.\n if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)\n return Math.floor(x);\n } else {\n return Math.round(x);\n }\n}\n\nfunction createNumberConversion(bitLength, typeOpts) {\n if (!typeOpts.unsigned) {\n --bitLength;\n }\n const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);\n const upperBound = Math.pow(2, bitLength) - 1;\n\n const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);\n const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);\n\n return function(V, opts) {\n if (!opts) opts = {};\n\n let x = +V;\n\n if (opts.enforceRange) {\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite number\");\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(\"Argument is not in byte range\");\n }\n\n return x;\n }\n\n if (!isNaN(x) && opts.clamp) {\n x = evenRound(x);\n\n if (x < lowerBound) x = lowerBound;\n if (x > upperBound) x = upperBound;\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n x = x % moduloVal;\n\n if (!typeOpts.unsigned && x >= moduloBound) {\n return x - moduloVal;\n } else if (typeOpts.unsigned) {\n if (x < 0) {\n x += moduloVal;\n } else if (x === -0) { // don't return negative zero\n return 0;\n }\n }\n\n return x;\n }\n}\n\nconversions[\"void\"] = function () {\n return undefined;\n};\n\nconversions[\"boolean\"] = function (val) {\n return !!val;\n};\n\nconversions[\"byte\"] = createNumberConversion(8, { unsigned: false });\nconversions[\"octet\"] = createNumberConversion(8, { unsigned: true });\n\nconversions[\"short\"] = createNumberConversion(16, { unsigned: false });\nconversions[\"unsigned short\"] = createNumberConversion(16, { unsigned: true });\n\nconversions[\"long\"] = createNumberConversion(32, { unsigned: false });\nconversions[\"unsigned long\"] = createNumberConversion(32, { unsigned: true });\n\nconversions[\"long long\"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });\nconversions[\"unsigned long long\"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });\n\nconversions[\"double\"] = function (V) {\n const x = +V;\n\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite floating-point value\");\n }\n\n return x;\n};\n\nconversions[\"unrestricted double\"] = function (V) {\n const x = +V;\n\n if (isNaN(x)) {\n throw new TypeError(\"Argument is NaN\");\n }\n\n return x;\n};\n\n// not quite valid, but good enough for JS\nconversions[\"float\"] = conversions[\"double\"];\nconversions[\"unrestricted float\"] = conversions[\"unrestricted double\"];\n\nconversions[\"DOMString\"] = function (V, opts) {\n if (!opts) opts = {};\n\n if (opts.treatNullAsEmptyString && V === null) {\n return \"\";\n }\n\n return String(V);\n};\n\nconversions[\"ByteString\"] = function (V, opts) {\n const x = String(V);\n let c = undefined;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw new TypeError(\"Argument is not a valid bytestring\");\n }\n }\n\n return x;\n};\n\nconversions[\"USVString\"] = function (V) {\n const S = String(V);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n }\n\n return U.join('');\n};\n\nconversions[\"Date\"] = function (V, opts) {\n if (!(V instanceof Date)) {\n throw new TypeError(\"Argument is not a Date object\");\n }\n if (isNaN(V)) {\n return undefined;\n }\n\n return V;\n};\n\nconversions[\"RegExp\"] = function (V, opts) {\n if (!(V instanceof RegExp)) {\n V = new RegExp(V);\n }\n\n return V;\n};\n",
|
|
20
|
-
"\"use strict\";\n\nmodule.exports.mixin = function mixin(target, source) {\n const keys = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keys.length; ++i) {\n Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));\n }\n};\n\nmodule.exports.wrapperSymbol = Symbol(\"wrapper\");\nmodule.exports.implSymbol = Symbol(\"impl\");\n\nmodule.exports.wrapperForImpl = function (impl) {\n return impl[module.exports.wrapperSymbol];\n};\n\nmodule.exports.implForWrapper = function (wrapper) {\n return wrapper[module.exports.implSymbol];\n};\n\n",
|
|
21
|
-
"\"use strict\";\n\nvar punycode = require(\"punycode\");\nvar mappingTable = require(\"./lib/mappingTable.json\");\n\nvar PROCESSING_OPTIONS = {\n TRANSITIONAL: 0,\n NONTRANSITIONAL: 1\n};\n\nfunction normalize(str) { // fix bug in v8\n return str.split('\\u0000').map(function (s) { return s.normalize('NFC'); }).join('\\u0000');\n}\n\nfunction findStatus(val) {\n var start = 0;\n var end = mappingTable.length - 1;\n\n while (start <= end) {\n var mid = Math.floor((start + end) / 2);\n\n var target = mappingTable[mid];\n if (target[0][0] <= val && target[0][1] >= val) {\n return target;\n } else if (target[0][0] > val) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n\n return null;\n}\n\nvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\nfunction countSymbols(string) {\n return string\n // replace every surrogate pair with a BMP symbol\n .replace(regexAstralSymbols, '_')\n // then get the length\n .length;\n}\n\nfunction mapChars(domain_name, useSTD3, processing_option) {\n var hasError = false;\n var processed = \"\";\n\n var len = countSymbols(domain_name);\n for (var i = 0; i < len; ++i) {\n var codePoint = domain_name.codePointAt(i);\n var status = findStatus(codePoint);\n\n switch (status[1]) {\n case \"disallowed\":\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n break;\n case \"ignored\":\n break;\n case \"mapped\":\n processed += String.fromCodePoint.apply(String, status[2]);\n break;\n case \"deviation\":\n if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {\n processed += String.fromCodePoint.apply(String, status[2]);\n } else {\n processed += String.fromCodePoint(codePoint);\n }\n break;\n case \"valid\":\n processed += String.fromCodePoint(codePoint);\n break;\n case \"disallowed_STD3_mapped\":\n if (useSTD3) {\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n } else {\n processed += String.fromCodePoint.apply(String, status[2]);\n }\n break;\n case \"disallowed_STD3_valid\":\n if (useSTD3) {\n hasError = true;\n }\n\n processed += String.fromCodePoint(codePoint);\n break;\n }\n }\n\n return {\n string: processed,\n error: hasError\n };\n}\n\nvar combiningMarksRegex = /[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2D]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF01-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDE30-\\uDE40\\uDEAB-\\uDEB7]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nfunction validateLabel(label, processing_option) {\n if (label.substr(0, 4) === \"xn--\") {\n label = punycode.toUnicode(label);\n processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;\n }\n\n var error = false;\n\n if (normalize(label) !== label ||\n (label[3] === \"-\" && label[4] === \"-\") ||\n label[0] === \"-\" || label[label.length - 1] === \"-\" ||\n label.indexOf(\".\") !== -1 ||\n label.search(combiningMarksRegex) === 0) {\n error = true;\n }\n\n var len = countSymbols(label);\n for (var i = 0; i < len; ++i) {\n var status = findStatus(label.codePointAt(i));\n if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== \"valid\") ||\n (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&\n status[1] !== \"valid\" && status[1] !== \"deviation\")) {\n error = true;\n break;\n }\n }\n\n return {\n label: label,\n error: error\n };\n}\n\nfunction processing(domain_name, useSTD3, processing_option) {\n var result = mapChars(domain_name, useSTD3, processing_option);\n result.string = normalize(result.string);\n\n var labels = result.string.split(\".\");\n for (var i = 0; i < labels.length; ++i) {\n try {\n var validation = validateLabel(labels[i]);\n labels[i] = validation.label;\n result.error = result.error || validation.error;\n } catch(e) {\n result.error = true;\n }\n }\n\n return {\n string: labels.join(\".\"),\n error: result.error\n };\n}\n\nmodule.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {\n var result = processing(domain_name, useSTD3, processing_option);\n var labels = result.string.split(\".\");\n labels = labels.map(function(l) {\n try {\n return punycode.toASCII(l);\n } catch(e) {\n result.error = true;\n return l;\n }\n });\n\n if (verifyDnsLength) {\n var total = labels.slice(0, labels.length - 1).join(\".\").length;\n if (total.length > 253 || total.length === 0) {\n result.error = true;\n }\n\n for (var i=0; i < labels.length; ++i) {\n if (labels.length > 63 || labels.length === 0) {\n result.error = true;\n break;\n }\n }\n }\n\n if (result.error) return null;\n return labels.join(\".\");\n};\n\nmodule.exports.toUnicode = function(domain_name, useSTD3) {\n var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);\n\n return {\n domain: result.string,\n error: result.error\n };\n};\n\nmodule.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;\n",
|
|
22
|
-
"\"use strict\";\r\nconst punycode = require(\"punycode\");\r\nconst tr46 = require(\"tr46\");\r\n\r\nconst specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n gopher: 70,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\n\r\nconst failure = Symbol(\"failure\");\r\n\r\nfunction countSymbols(str) {\r\n return punycode.ucs2.decode(str).length;\r\n}\r\n\r\nfunction at(input, idx) {\r\n const c = input[idx];\r\n return isNaN(c) ? undefined : String.fromCodePoint(c);\r\n}\r\n\r\nfunction isASCIIDigit(c) {\r\n return c >= 0x30 && c <= 0x39;\r\n}\r\n\r\nfunction isASCIIAlpha(c) {\r\n return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);\r\n}\r\n\r\nfunction isASCIIAlphanumeric(c) {\r\n return isASCIIAlpha(c) || isASCIIDigit(c);\r\n}\r\n\r\nfunction isASCIIHex(c) {\r\n return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);\r\n}\r\n\r\nfunction isSingleDot(buffer) {\r\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\r\n}\r\n\r\nfunction isDoubleDot(buffer) {\r\n buffer = buffer.toLowerCase();\r\n return buffer === \"..\" || buffer === \"%2e.\" || buffer === \".%2e\" || buffer === \"%2e%2e\";\r\n}\r\n\r\nfunction isWindowsDriveLetterCodePoints(cp1, cp2) {\r\n return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);\r\n}\r\n\r\nfunction isWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === \":\" || string[1] === \"|\");\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === \":\";\r\n}\r\n\r\nfunction containsForbiddenHostCodePoint(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|%|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction containsForbiddenHostCodePointExcludingPercent(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction isSpecialScheme(scheme) {\r\n return specialSchemes[scheme] !== undefined;\r\n}\r\n\r\nfunction isSpecial(url) {\r\n return isSpecialScheme(url.scheme);\r\n}\r\n\r\nfunction defaultPort(scheme) {\r\n return specialSchemes[scheme];\r\n}\r\n\r\nfunction percentEncode(c) {\r\n let hex = c.toString(16).toUpperCase();\r\n if (hex.length === 1) {\r\n hex = \"0\" + hex;\r\n }\r\n\r\n return \"%\" + hex;\r\n}\r\n\r\nfunction utf8PercentEncode(c) {\r\n const buf = new Buffer(c);\r\n\r\n let str = \"\";\r\n\r\n for (let i = 0; i < buf.length; ++i) {\r\n str += percentEncode(buf[i]);\r\n }\r\n\r\n return str;\r\n}\r\n\r\nfunction utf8PercentDecode(str) {\r\n const input = new Buffer(str);\r\n const output = [];\r\n for (let i = 0; i < input.length; ++i) {\r\n if (input[i] !== 37) {\r\n output.push(input[i]);\r\n } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {\r\n output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));\r\n i += 2;\r\n } else {\r\n output.push(input[i]);\r\n }\r\n }\r\n return new Buffer(output).toString();\r\n}\r\n\r\nfunction isC0ControlPercentEncode(c) {\r\n return c <= 0x1F || c > 0x7E;\r\n}\r\n\r\nconst extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);\r\nfunction isPathPercentEncode(c) {\r\n return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);\r\n}\r\n\r\nconst extraUserinfoPercentEncodeSet =\r\n new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);\r\nfunction isUserinfoPercentEncode(c) {\r\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\r\n}\r\n\r\nfunction percentEncodeChar(c, encodeSetPredicate) {\r\n const cStr = String.fromCodePoint(c);\r\n\r\n if (encodeSetPredicate(c)) {\r\n return utf8PercentEncode(cStr);\r\n }\r\n\r\n return cStr;\r\n}\r\n\r\nfunction parseIPv4Number(input) {\r\n let R = 10;\r\n\r\n if (input.length >= 2 && input.charAt(0) === \"0\" && input.charAt(1).toLowerCase() === \"x\") {\r\n input = input.substring(2);\r\n R = 16;\r\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\r\n input = input.substring(1);\r\n R = 8;\r\n }\r\n\r\n if (input === \"\") {\r\n return 0;\r\n }\r\n\r\n const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);\r\n if (regex.test(input)) {\r\n return failure;\r\n }\r\n\r\n return parseInt(input, R);\r\n}\r\n\r\nfunction parseIPv4(input) {\r\n const parts = input.split(\".\");\r\n if (parts[parts.length - 1] === \"\") {\r\n if (parts.length > 1) {\r\n parts.pop();\r\n }\r\n }\r\n\r\n if (parts.length > 4) {\r\n return input;\r\n }\r\n\r\n const numbers = [];\r\n for (const part of parts) {\r\n if (part === \"\") {\r\n return input;\r\n }\r\n const n = parseIPv4Number(part);\r\n if (n === failure) {\r\n return input;\r\n }\r\n\r\n numbers.push(n);\r\n }\r\n\r\n for (let i = 0; i < numbers.length - 1; ++i) {\r\n if (numbers[i] > 255) {\r\n return failure;\r\n }\r\n }\r\n if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {\r\n return failure;\r\n }\r\n\r\n let ipv4 = numbers.pop();\r\n let counter = 0;\r\n\r\n for (const n of numbers) {\r\n ipv4 += n * Math.pow(256, 3 - counter);\r\n ++counter;\r\n }\r\n\r\n return ipv4;\r\n}\r\n\r\nfunction serializeIPv4(address) {\r\n let output = \"\";\r\n let n = address;\r\n\r\n for (let i = 1; i <= 4; ++i) {\r\n output = String(n % 256) + output;\r\n if (i !== 4) {\r\n output = \".\" + output;\r\n }\r\n n = Math.floor(n / 256);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseIPv6(input) {\r\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\r\n let pieceIndex = 0;\r\n let compress = null;\r\n let pointer = 0;\r\n\r\n input = punycode.ucs2.decode(input);\r\n\r\n if (input[pointer] === 58) {\r\n if (input[pointer + 1] !== 58) {\r\n return failure;\r\n }\r\n\r\n pointer += 2;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n }\r\n\r\n while (pointer < input.length) {\r\n if (pieceIndex === 8) {\r\n return failure;\r\n }\r\n\r\n if (input[pointer] === 58) {\r\n if (compress !== null) {\r\n return failure;\r\n }\r\n ++pointer;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n continue;\r\n }\r\n\r\n let value = 0;\r\n let length = 0;\r\n\r\n while (length < 4 && isASCIIHex(input[pointer])) {\r\n value = value * 0x10 + parseInt(at(input, pointer), 16);\r\n ++pointer;\r\n ++length;\r\n }\r\n\r\n if (input[pointer] === 46) {\r\n if (length === 0) {\r\n return failure;\r\n }\r\n\r\n pointer -= length;\r\n\r\n if (pieceIndex > 6) {\r\n return failure;\r\n }\r\n\r\n let numbersSeen = 0;\r\n\r\n while (input[pointer] !== undefined) {\r\n let ipv4Piece = null;\r\n\r\n if (numbersSeen > 0) {\r\n if (input[pointer] === 46 && numbersSeen < 4) {\r\n ++pointer;\r\n } else {\r\n return failure;\r\n }\r\n }\r\n\r\n if (!isASCIIDigit(input[pointer])) {\r\n return failure;\r\n }\r\n\r\n while (isASCIIDigit(input[pointer])) {\r\n const number = parseInt(at(input, pointer));\r\n if (ipv4Piece === null) {\r\n ipv4Piece = number;\r\n } else if (ipv4Piece === 0) {\r\n return failure;\r\n } else {\r\n ipv4Piece = ipv4Piece * 10 + number;\r\n }\r\n if (ipv4Piece > 255) {\r\n return failure;\r\n }\r\n ++pointer;\r\n }\r\n\r\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;\r\n\r\n ++numbersSeen;\r\n\r\n if (numbersSeen === 2 || numbersSeen === 4) {\r\n ++pieceIndex;\r\n }\r\n }\r\n\r\n if (numbersSeen !== 4) {\r\n return failure;\r\n }\r\n\r\n break;\r\n } else if (input[pointer] === 58) {\r\n ++pointer;\r\n if (input[pointer] === undefined) {\r\n return failure;\r\n }\r\n } else if (input[pointer] !== undefined) {\r\n return failure;\r\n }\r\n\r\n address[pieceIndex] = value;\r\n ++pieceIndex;\r\n }\r\n\r\n if (compress !== null) {\r\n let swaps = pieceIndex - compress;\r\n pieceIndex = 7;\r\n while (pieceIndex !== 0 && swaps > 0) {\r\n const temp = address[compress + swaps - 1];\r\n address[compress + swaps - 1] = address[pieceIndex];\r\n address[pieceIndex] = temp;\r\n --pieceIndex;\r\n --swaps;\r\n }\r\n } else if (compress === null && pieceIndex !== 8) {\r\n return failure;\r\n }\r\n\r\n return address;\r\n}\r\n\r\nfunction serializeIPv6(address) {\r\n let output = \"\";\r\n const seqResult = findLongestZeroSequence(address);\r\n const compress = seqResult.idx;\r\n let ignore0 = false;\r\n\r\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\r\n if (ignore0 && address[pieceIndex] === 0) {\r\n continue;\r\n } else if (ignore0) {\r\n ignore0 = false;\r\n }\r\n\r\n if (compress === pieceIndex) {\r\n const separator = pieceIndex === 0 ? \"::\" : \":\";\r\n output += separator;\r\n ignore0 = true;\r\n continue;\r\n }\r\n\r\n output += address[pieceIndex].toString(16);\r\n\r\n if (pieceIndex !== 7) {\r\n output += \":\";\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseHost(input, isSpecialArg) {\r\n if (input[0] === \"[\") {\r\n if (input[input.length - 1] !== \"]\") {\r\n return failure;\r\n }\r\n\r\n return parseIPv6(input.substring(1, input.length - 1));\r\n }\r\n\r\n if (!isSpecialArg) {\r\n return parseOpaqueHost(input);\r\n }\r\n\r\n const domain = utf8PercentDecode(input);\r\n const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);\r\n if (asciiDomain === null) {\r\n return failure;\r\n }\r\n\r\n if (containsForbiddenHostCodePoint(asciiDomain)) {\r\n return failure;\r\n }\r\n\r\n const ipv4Host = parseIPv4(asciiDomain);\r\n if (typeof ipv4Host === \"number\" || ipv4Host === failure) {\r\n return ipv4Host;\r\n }\r\n\r\n return asciiDomain;\r\n}\r\n\r\nfunction parseOpaqueHost(input) {\r\n if (containsForbiddenHostCodePointExcludingPercent(input)) {\r\n return failure;\r\n }\r\n\r\n let output = \"\";\r\n const decoded = punycode.ucs2.decode(input);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);\r\n }\r\n return output;\r\n}\r\n\r\nfunction findLongestZeroSequence(arr) {\r\n let maxIdx = null;\r\n let maxLen = 1; // only find elements > 1\r\n let currStart = null;\r\n let currLen = 0;\r\n\r\n for (let i = 0; i < arr.length; ++i) {\r\n if (arr[i] !== 0) {\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n currStart = null;\r\n currLen = 0;\r\n } else {\r\n if (currStart === null) {\r\n currStart = i;\r\n }\r\n ++currLen;\r\n }\r\n }\r\n\r\n // if trailing zeros\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n return {\r\n idx: maxIdx,\r\n len: maxLen\r\n };\r\n}\r\n\r\nfunction serializeHost(host) {\r\n if (typeof host === \"number\") {\r\n return serializeIPv4(host);\r\n }\r\n\r\n // IPv6 serializer\r\n if (host instanceof Array) {\r\n return \"[\" + serializeIPv6(host) + \"]\";\r\n }\r\n\r\n return host;\r\n}\r\n\r\nfunction trimControlChars(url) {\r\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/g, \"\");\r\n}\r\n\r\nfunction trimTabAndNewline(url) {\r\n return url.replace(/\\u0009|\\u000A|\\u000D/g, \"\");\r\n}\r\n\r\nfunction shortenPath(url) {\r\n const path = url.path;\r\n if (path.length === 0) {\r\n return;\r\n }\r\n if (url.scheme === \"file\" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {\r\n return;\r\n }\r\n\r\n path.pop();\r\n}\r\n\r\nfunction includesCredentials(url) {\r\n return url.username !== \"\" || url.password !== \"\";\r\n}\r\n\r\nfunction cannotHaveAUsernamePasswordPort(url) {\r\n return url.host === null || url.host === \"\" || url.cannotBeABaseURL || url.scheme === \"file\";\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetter(string) {\r\n return /^[A-Za-z]:$/.test(string);\r\n}\r\n\r\nfunction URLStateMachine(input, base, encodingOverride, url, stateOverride) {\r\n this.pointer = 0;\r\n this.input = input;\r\n this.base = base || null;\r\n this.encodingOverride = encodingOverride || \"utf-8\";\r\n this.stateOverride = stateOverride;\r\n this.url = url;\r\n this.failure = false;\r\n this.parseError = false;\r\n\r\n if (!this.url) {\r\n this.url = {\r\n scheme: \"\",\r\n username: \"\",\r\n password: \"\",\r\n host: null,\r\n port: null,\r\n path: [],\r\n query: null,\r\n fragment: null,\r\n\r\n cannotBeABaseURL: false\r\n };\r\n\r\n const res = trimControlChars(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n }\r\n\r\n const res = trimTabAndNewline(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n\r\n this.state = stateOverride || \"scheme start\";\r\n\r\n this.buffer = \"\";\r\n this.atFlag = false;\r\n this.arrFlag = false;\r\n this.passwordTokenSeenFlag = false;\r\n\r\n this.input = punycode.ucs2.decode(this.input);\r\n\r\n for (; this.pointer <= this.input.length; ++this.pointer) {\r\n const c = this.input[this.pointer];\r\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\r\n\r\n // exec state machine\r\n const ret = this[\"parse \" + this.state](c, cStr);\r\n if (!ret) {\r\n break; // terminate algorithm\r\n } else if (ret === failure) {\r\n this.failure = true;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nURLStateMachine.prototype[\"parse scheme start\"] = function parseSchemeStart(c, cStr) {\r\n if (isASCIIAlpha(c)) {\r\n this.buffer += cStr.toLowerCase();\r\n this.state = \"scheme\";\r\n } else if (!this.stateOverride) {\r\n this.state = \"no scheme\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse scheme\"] = function parseScheme(c, cStr) {\r\n if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {\r\n this.buffer += cStr.toLowerCase();\r\n } else if (c === 58) {\r\n if (this.stateOverride) {\r\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === \"file\") {\r\n return false;\r\n }\r\n\r\n if (this.url.scheme === \"file\" && (this.url.host === \"\" || this.url.host === null)) {\r\n return false;\r\n }\r\n }\r\n this.url.scheme = this.buffer;\r\n this.buffer = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n if (this.url.scheme === \"file\") {\r\n if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file\";\r\n } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {\r\n this.state = \"special relative or authority\";\r\n } else if (isSpecial(this.url)) {\r\n this.state = \"special authority slashes\";\r\n } else if (this.input[this.pointer + 1] === 47) {\r\n this.state = \"path or authority\";\r\n ++this.pointer;\r\n } else {\r\n this.url.cannotBeABaseURL = true;\r\n this.url.path.push(\"\");\r\n this.state = \"cannot-be-a-base-URL path\";\r\n }\r\n } else if (!this.stateOverride) {\r\n this.buffer = \"\";\r\n this.state = \"no scheme\";\r\n this.pointer = -1;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse no scheme\"] = function parseNoScheme(c) {\r\n if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {\r\n return failure;\r\n } else if (this.base.cannotBeABaseURL && c === 35) {\r\n this.url.scheme = this.base.scheme;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.url.cannotBeABaseURL = true;\r\n this.state = \"fragment\";\r\n } else if (this.base.scheme === \"file\") {\r\n this.state = \"file\";\r\n --this.pointer;\r\n } else {\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special relative or authority\"] = function parseSpecialRelativeOrAuthority(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path or authority\"] = function parsePathOrAuthority(c) {\r\n if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative\"] = function parseRelative(c) {\r\n this.url.scheme = this.base.scheme;\r\n if (isNaN(c)) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 47) {\r\n this.state = \"relative slash\";\r\n } else if (c === 63) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n this.state = \"relative slash\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice(0, this.base.path.length - 1);\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative slash\"] = function parseRelativeSlash(c) {\r\n if (isSpecial(this.url) && (c === 47 || c === 92)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"special authority ignore slashes\";\r\n } else if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority slashes\"] = function parseSpecialAuthoritySlashes(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"special authority ignore slashes\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority ignore slashes\"] = function parseSpecialAuthorityIgnoreSlashes(c) {\r\n if (c !== 47 && c !== 92) {\r\n this.state = \"authority\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse authority\"] = function parseAuthority(c, cStr) {\r\n if (c === 64) {\r\n this.parseError = true;\r\n if (this.atFlag) {\r\n this.buffer = \"%40\" + this.buffer;\r\n }\r\n this.atFlag = true;\r\n\r\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\r\n const len = countSymbols(this.buffer);\r\n for (let pointer = 0; pointer < len; ++pointer) {\r\n const codePoint = this.buffer.codePointAt(pointer);\r\n\r\n if (codePoint === 58 && !this.passwordTokenSeenFlag) {\r\n this.passwordTokenSeenFlag = true;\r\n continue;\r\n }\r\n const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);\r\n if (this.passwordTokenSeenFlag) {\r\n this.url.password += encodedCodePoints;\r\n } else {\r\n this.url.username += encodedCodePoints;\r\n }\r\n }\r\n this.buffer = \"\";\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n if (this.atFlag && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.pointer -= countSymbols(this.buffer) + 1;\r\n this.buffer = \"\";\r\n this.state = \"host\";\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse hostname\"] =\r\nURLStateMachine.prototype[\"parse host\"] = function parseHostName(c, cStr) {\r\n if (this.stateOverride && this.url.scheme === \"file\") {\r\n --this.pointer;\r\n this.state = \"file host\";\r\n } else if (c === 58 && !this.arrFlag) {\r\n if (this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"port\";\r\n if (this.stateOverride === \"hostname\") {\r\n return false;\r\n }\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n --this.pointer;\r\n if (isSpecial(this.url) && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n } else if (this.stateOverride && this.buffer === \"\" &&\r\n (includesCredentials(this.url) || this.url.port !== null)) {\r\n this.parseError = true;\r\n return false;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n } else {\r\n if (c === 91) {\r\n this.arrFlag = true;\r\n } else if (c === 93) {\r\n this.arrFlag = false;\r\n }\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse port\"] = function parsePort(c, cStr) {\r\n if (isASCIIDigit(c)) {\r\n this.buffer += cStr;\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92) ||\r\n this.stateOverride) {\r\n if (this.buffer !== \"\") {\r\n const port = parseInt(this.buffer);\r\n if (port > Math.pow(2, 16) - 1) {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\r\n this.buffer = \"\";\r\n }\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);\r\n\r\nURLStateMachine.prototype[\"parse file\"] = function parseFile(c) {\r\n this.url.scheme = \"file\";\r\n\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file slash\";\r\n } else if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNaN(c)) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 63) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points\r\n !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||\r\n (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points\r\n !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n shortenPath(this.url);\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file slash\"] = function parseFileSlash(c) {\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file host\";\r\n } else {\r\n if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {\r\n this.url.path.push(this.base.path[0]);\r\n } else {\r\n this.url.host = this.base.host;\r\n }\r\n }\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file host\"] = function parseFileHost(c, cStr) {\r\n if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {\r\n --this.pointer;\r\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\r\n this.parseError = true;\r\n this.state = \"path\";\r\n } else if (this.buffer === \"\") {\r\n this.url.host = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n } else {\r\n let host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n if (host === \"localhost\") {\r\n host = \"\";\r\n }\r\n this.url.host = host;\r\n\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n }\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path start\"] = function parsePathStart(c) {\r\n if (isSpecial(this.url)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"path\";\r\n\r\n if (c !== 47 && c !== 92) {\r\n --this.pointer;\r\n }\r\n } else if (!this.stateOverride && c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (!this.stateOverride && c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (c !== undefined) {\r\n this.state = \"path\";\r\n if (c !== 47) {\r\n --this.pointer;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path\"] = function parsePath(c) {\r\n if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||\r\n (!this.stateOverride && (c === 63 || c === 35))) {\r\n if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n }\r\n\r\n if (isDoubleDot(this.buffer)) {\r\n shortenPath(this.url);\r\n if (c !== 47 && !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n }\r\n } else if (isSingleDot(this.buffer) && c !== 47 &&\r\n !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n } else if (!isSingleDot(this.buffer)) {\r\n if (this.url.scheme === \"file\" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {\r\n if (this.url.host !== \"\" && this.url.host !== null) {\r\n this.parseError = true;\r\n this.url.host = \"\";\r\n }\r\n this.buffer = this.buffer[0] + \":\";\r\n }\r\n this.url.path.push(this.buffer);\r\n }\r\n this.buffer = \"\";\r\n if (this.url.scheme === \"file\" && (c === undefined || c === 63 || c === 35)) {\r\n while (this.url.path.length > 1 && this.url.path[0] === \"\") {\r\n this.parseError = true;\r\n this.url.path.shift();\r\n }\r\n }\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n }\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += percentEncodeChar(c, isPathPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse cannot-be-a-base-URL path\"] = function parseCannotBeABaseURLPath(c) {\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n // TODO: Add: not a URL code point\r\n if (!isNaN(c) && c !== 37) {\r\n this.parseError = true;\r\n }\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n if (!isNaN(c)) {\r\n this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse query\"] = function parseQuery(c, cStr) {\r\n if (isNaN(c) || (!this.stateOverride && c === 35)) {\r\n if (!isSpecial(this.url) || this.url.scheme === \"ws\" || this.url.scheme === \"wss\") {\r\n this.encodingOverride = \"utf-8\";\r\n }\r\n\r\n const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead\r\n for (let i = 0; i < buffer.length; ++i) {\r\n if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||\r\n buffer[i] === 0x3C || buffer[i] === 0x3E) {\r\n this.url.query += percentEncode(buffer[i]);\r\n } else {\r\n this.url.query += String.fromCodePoint(buffer[i]);\r\n }\r\n }\r\n\r\n this.buffer = \"\";\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse fragment\"] = function parseFragment(c) {\r\n if (isNaN(c)) { // do nothing\r\n } else if (c === 0x0) {\r\n this.parseError = true;\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nfunction serializeURL(url, excludeFragment) {\r\n let output = url.scheme + \":\";\r\n if (url.host !== null) {\r\n output += \"//\";\r\n\r\n if (url.username !== \"\" || url.password !== \"\") {\r\n output += url.username;\r\n if (url.password !== \"\") {\r\n output += \":\" + url.password;\r\n }\r\n output += \"@\";\r\n }\r\n\r\n output += serializeHost(url.host);\r\n\r\n if (url.port !== null) {\r\n output += \":\" + url.port;\r\n }\r\n } else if (url.host === null && url.scheme === \"file\") {\r\n output += \"//\";\r\n }\r\n\r\n if (url.cannotBeABaseURL) {\r\n output += url.path[0];\r\n } else {\r\n for (const string of url.path) {\r\n output += \"/\" + string;\r\n }\r\n }\r\n\r\n if (url.query !== null) {\r\n output += \"?\" + url.query;\r\n }\r\n\r\n if (!excludeFragment && url.fragment !== null) {\r\n output += \"#\" + url.fragment;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction serializeOrigin(tuple) {\r\n let result = tuple.scheme + \"://\";\r\n result += serializeHost(tuple.host);\r\n\r\n if (tuple.port !== null) {\r\n result += \":\" + tuple.port;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nmodule.exports.serializeURL = serializeURL;\r\n\r\nmodule.exports.serializeURLOrigin = function (url) {\r\n // https://url.spec.whatwg.org/#concept-url-origin\r\n switch (url.scheme) {\r\n case \"blob\":\r\n try {\r\n return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));\r\n } catch (e) {\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n case \"ftp\":\r\n case \"gopher\":\r\n case \"http\":\r\n case \"https\":\r\n case \"ws\":\r\n case \"wss\":\r\n return serializeOrigin({\r\n scheme: url.scheme,\r\n host: url.host,\r\n port: url.port\r\n });\r\n case \"file\":\r\n // spec says \"exercise to the reader\", chrome says \"file://\"\r\n return \"file://\";\r\n default:\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n};\r\n\r\nmodule.exports.basicURLParse = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);\r\n if (usm.failure) {\r\n return \"failure\";\r\n }\r\n\r\n return usm.url;\r\n};\r\n\r\nmodule.exports.setTheUsername = function (url, username) {\r\n url.username = \"\";\r\n const decoded = punycode.ucs2.decode(username);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.setThePassword = function (url, password) {\r\n url.password = \"\";\r\n const decoded = punycode.ucs2.decode(password);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.serializeHost = serializeHost;\r\n\r\nmodule.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;\r\n\r\nmodule.exports.serializeInteger = function (integer) {\r\n return String(integer);\r\n};\r\n\r\nmodule.exports.parseURL = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n // We don't handle blobs, so this just delegates:\r\n return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });\r\n};\r\n",
|
|
23
|
-
"\"use strict\";\nconst usm = require(\"./url-state-machine\");\n\nexports.implementation = class URLImpl {\n constructor(constructorArgs) {\n const url = constructorArgs[0];\n const base = constructorArgs[1];\n\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = usm.basicURLParse(base);\n if (parsedBase === \"failure\") {\n throw new TypeError(\"Invalid base URL\");\n }\n }\n\n const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n\n // TODO: query stuff\n }\n\n get href() {\n return usm.serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = usm.basicURLParse(v);\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n }\n\n get origin() {\n return usm.serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return this._url.scheme + \":\";\n }\n\n set protocol(v) {\n usm.basicURLParse(v + \":\", { url: this._url, stateOverride: \"scheme start\" });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return usm.serializeHost(url.host);\n }\n\n return usm.serializeHost(url.host) + \":\" + usm.serializeInteger(url.port);\n }\n\n set host(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return usm.serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return usm.serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n usm.basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n if (this._url.cannotBeABaseURL) {\n return this._url.path[0];\n }\n\n if (this._url.path.length === 0) {\n return \"\";\n }\n\n return \"/\" + this._url.path.join(\"/\");\n }\n\n set pathname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n this._url.path = [];\n usm.basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return \"?\" + this._url.query;\n }\n\n set search(v) {\n // TODO: query stuff\n\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n usm.basicURLParse(input, { url, stateOverride: \"query\" });\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return \"#\" + this._url.fragment;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n usm.basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n};\n",
|
|
24
|
-
"\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\nconst Impl = require(\".//URL-impl.js\");\n\nconst impl = utils.implSymbol;\n\nfunction URL(url) {\n if (!this || this[impl] || !(this instanceof URL)) {\n throw new TypeError(\"Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only \" + arguments.length + \" present.\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 2; ++i) {\n args[i] = arguments[i];\n }\n args[0] = conversions[\"USVString\"](args[0]);\n if (args[1] !== undefined) {\n args[1] = conversions[\"USVString\"](args[1]);\n }\n\n module.exports.setup(this, args);\n}\n\nURL.prototype.toJSON = function toJSON() {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 0; ++i) {\n args[i] = arguments[i];\n }\n return this[impl].toJSON.apply(this[impl], args);\n};\nObject.defineProperty(URL.prototype, \"href\", {\n get() {\n return this[impl].href;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].href = V;\n },\n enumerable: true,\n configurable: true\n});\n\nURL.prototype.toString = function () {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n return this.href;\n};\n\nObject.defineProperty(URL.prototype, \"origin\", {\n get() {\n return this[impl].origin;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"protocol\", {\n get() {\n return this[impl].protocol;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].protocol = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"username\", {\n get() {\n return this[impl].username;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].username = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"password\", {\n get() {\n return this[impl].password;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].password = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"host\", {\n get() {\n return this[impl].host;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].host = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hostname\", {\n get() {\n return this[impl].hostname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hostname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"port\", {\n get() {\n return this[impl].port;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].port = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"pathname\", {\n get() {\n return this[impl].pathname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].pathname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"search\", {\n get() {\n return this[impl].search;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].search = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hash\", {\n get() {\n return this[impl].hash;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hash = V;\n },\n enumerable: true,\n configurable: true\n});\n\n\nmodule.exports = {\n is(obj) {\n return !!obj && obj[impl] instanceof Impl.implementation;\n },\n create(constructorArgs, privateData) {\n let obj = Object.create(URL.prototype);\n this.setup(obj, constructorArgs, privateData);\n return obj;\n },\n setup(obj, constructorArgs, privateData) {\n if (!privateData) privateData = {};\n privateData.wrapper = obj;\n\n obj[impl] = new Impl.implementation(constructorArgs, privateData);\n obj[impl][utils.wrapperSymbol] = obj;\n },\n interface: URL,\n expose: {\n Window: { URL: URL },\n Worker: { URL: URL }\n }\n};\n\n",
|
|
25
|
-
"\"use strict\";\n\nexports.URL = require(\"./URL\").interface;\nexports.serializeURL = require(\"./url-state-machine\").serializeURL;\nexports.serializeURLOrigin = require(\"./url-state-machine\").serializeURLOrigin;\nexports.basicURLParse = require(\"./url-state-machine\").basicURLParse;\nexports.setTheUsername = require(\"./url-state-machine\").setTheUsername;\nexports.setThePassword = require(\"./url-state-machine\").setThePassword;\nexports.serializeHost = require(\"./url-state-machine\").serializeHost;\nexports.serializeInteger = require(\"./url-state-machine\").serializeInteger;\nexports.parseURL = require(\"./url-state-machine\").parseURL;\n",
|
|
26
|
-
"/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n",
|
|
27
|
-
"\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n",
|
|
28
|
-
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n if (!Buffer.isBuffer(buf)) {\n buf = Buffer.from(buf);\n }\n\n return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n",
|
|
29
|
-
"'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n this.iconv = iconv;\n this.bomAware = true;\n this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n this.isLE = codec.isLE;\n this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n var src = Buffer.from(str, 'ucs2');\n var dst = Buffer.alloc(src.length * 2);\n var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n var offset = 0;\n\n for (var i = 0; i < src.length; i += 2) {\n var code = src.readUInt16LE(i);\n var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n if (this.highSurrogate) {\n if (isHighSurrogate || !isLowSurrogate) {\n // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n // (technically wrong, but expected by some applications, like Windows file names).\n write32.call(dst, this.highSurrogate, offset);\n offset += 4;\n }\n else {\n // Create 32-bit value from high and low surrogates;\n var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n write32.call(dst, codepoint, offset);\n offset += 4;\n this.highSurrogate = 0;\n\n continue;\n }\n }\n\n if (isHighSurrogate)\n this.highSurrogate = code;\n else {\n // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n // unpaired high surrogates.\n write32.call(dst, code, offset);\n offset += 4;\n this.highSurrogate = 0;\n }\n }\n\n if (offset < dst.length)\n dst = dst.slice(0, offset);\n\n return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n // Treat any leftover high surrogate as a semi-valid independent character.\n if (!this.highSurrogate)\n return;\n\n var buf = Buffer.alloc(4);\n\n if (this.isLE)\n buf.writeUInt32LE(this.highSurrogate, 0);\n else\n buf.writeUInt32BE(this.highSurrogate, 0);\n\n this.highSurrogate = 0;\n\n return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n this.isLE = codec.isLE;\n this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n if (src.length === 0)\n return '';\n\n var i = 0;\n var codepoint = 0;\n var dst = Buffer.alloc(src.length + 4);\n var offset = 0;\n var isLE = this.isLE;\n var overflow = this.overflow;\n var badChar = this.badChar;\n\n if (overflow.length > 0) {\n for (; i < src.length && overflow.length < 4; i++)\n overflow.push(src[i]);\n \n if (overflow.length === 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n if (isLE) {\n codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n } else {\n codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n }\n overflow.length = 0;\n\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n }\n\n // Main loop. Should be as optimized as possible.\n for (; i < src.length - 3; i += 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n if (isLE) {\n codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n } else {\n codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n }\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n\n // Keep overflowing bytes.\n for (; i < src.length; i++) {\n overflow.push(src[i]);\n }\n\n return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n if (codepoint < 0 || codepoint > 0x10FFFF) {\n // Not a valid Unicode codepoint\n codepoint = badChar;\n } \n\n // Ephemeral Planes: Write high surrogate.\n if (codepoint >= 0x10000) {\n codepoint -= 0x10000;\n\n var high = 0xD800 | (codepoint >> 10);\n dst[offset++] = high & 0xff;\n dst[offset++] = high >> 8;\n\n // Low surrogate is written below.\n var codepoint = 0xDC00 | (codepoint & 0x3FF);\n }\n\n // Write BMP char or low surrogate.\n dst[offset++] = codepoint & 0xff;\n dst[offset++] = codepoint >> 8;\n\n return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n options = options || {};\n\n if (options.addBOM === undefined)\n options.addBOM = true;\n\n this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n if (!this.decoder) { \n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n\n if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE.\n var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 4) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n return 'utf-32le';\n }\n if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n return 'utf-32be';\n }\n }\n\n if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be';\n if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-32le';\n}\n",
|
|
30
|
-
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n \n if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 2) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n }\n\n if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-16le';\n}\n\n\n",
|
|
31
|
-
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n",
|
|
32
|
-
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n",
|
|
33
|
-
"\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n\n \"cp720\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n",
|
|
34
|
-
"\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ħ˘£¤�Ĥ§¨İŞĞĴ�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄĸŖ¤Ĩϧ¨ŠĒĢŦޝ°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
�¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄĒĢĪĨͧĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄąŁ€„Чš©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’±“¾¶§÷„°∙·¹³²■ \"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№ыЫзЗшШэЭщЩчЧ§■ \"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´±�¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄±υφχ§ψ΅°¨ωϋΰώ■ \"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ЁЂҐЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£€¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\uFEFF–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
�և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n }\n}",
|
|
35
|
-
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 common decode nodes.\n var commonThirdByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n var commonFourthByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n // Fill out the tree\n var firstByteNode = this.decodeTables[0];\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n for (var j = 0x30; j <= 0x39; j++) {\n if (secondByteNode[j] === UNASSIGNED) {\n secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n } else if (secondByteNode[j] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 2\");\n }\n\n var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n for (var k = 0x81; k <= 0xFE; k++) {\n if (thirdByteNode[k] === UNASSIGNED) {\n thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n continue;\n } else if (thirdByteNode[k] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 3\");\n }\n\n var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n for (var l = 0x30; l <= 0x39; l++) {\n if (fourthByteNode[l] === UNASSIGNED)\n fourthByteNode[l] = GB18030_CODE;\n }\n }\n }\n }\n }\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n var hasValues = false;\n var subNodeEmpty = {};\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0) {\n this._setEncodeChar(uCode, mbCode);\n hasValues = true;\n } else if (uCode <= NODE_START) {\n var subNodeIdx = NODE_START - uCode;\n if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030).\n var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive.\n if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n hasValues = true;\n else\n subNodeEmpty[subNodeIdx] = true;\n }\n } else if (uCode <= SEQ_START) {\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n hasValues = true;\n }\n }\n return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else if (dbcsCode < 0x1000000) {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n } else {\n newBuf[j++] = dbcsCode >>> 24;\n newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBytes = [];\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n uCode;\n\n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n uCode = this.defaultCharUnicode.charCodeAt(0);\n i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n }\n else if (uCode === GB18030_CODE) {\n if (i >= 3) {\n var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n } else {\n var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n (curByte-0x30);\n }\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode >= 0x10000) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 | (uCode >> 10);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 | (uCode & 0x3FF);\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBytes = (seqStart >= 0)\n ? Array.prototype.slice.call(buf, seqStart)\n : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBytes.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var bytesArr = this.prevBytes.slice(1);\n\n // Parse remaining as usual.\n this.prevBytes = [];\n this.nodeIdx = 0;\n if (bytesArr.length > 0)\n ret += this.write(bytesArr);\n }\n\n this.prevBytes = [];\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + ((r-l+1) >> 1);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n",
|
|
36
|
-
"\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'€': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [\n // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n ],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n",
|
|
37
|
-
"\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf32\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n",
|
|
38
|
-
"\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n var Transform = stream_module.Transform;\n\n // == Encoder stream =======================================================\n\n function IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n }\n\n IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n });\n\n IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n }\n\n\n // == Decoder stream =======================================================\n\n function IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n }\n\n IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n });\n\n IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n }\n\n return {\n IconvLiteEncoderStream: IconvLiteEncoderStream,\n IconvLiteDecoderStream: IconvLiteDecoderStream,\n };\n};\n",
|
|
39
|
-
"\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n if (iconv.supportsStreams)\n return;\n\n // Dependency-inject stream module to create IconvLite stream classes.\n var streams = require(\"./streams\")(stream_module);\n\n // Not public API yet, but expose the stream classes.\n iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n // Streaming API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n iconv.enableStreamingAPI(stream_module);\n\n} else {\n // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n iconv.encodeStream = iconv.decodeStream = function() {\n throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n };\n}\n\nif (\"Ā\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n",
|
|
40
|
-
"'use strict';\n\nvar iconvLite = require('iconv-lite');\n\n// Expose to the world\nmodule.exports.convert = convert;\n\n/**\n * Convert encoding of an UTF-8 string or a buffer\n *\n * @param {String|Buffer} str String to be converted\n * @param {String} to Encoding to be converted to\n * @param {String} [from='UTF-8'] Encoding to be converted from\n * @return {Buffer} Encoded string\n */\nfunction convert(str, to, from) {\n from = checkEncoding(from || 'UTF-8');\n to = checkEncoding(to || 'UTF-8');\n str = str || '';\n\n var result;\n\n if (from !== 'UTF-8' && typeof str === 'string') {\n str = Buffer.from(str, 'binary');\n }\n\n if (from === to) {\n if (typeof str === 'string') {\n result = Buffer.from(str);\n } else {\n result = str;\n }\n } else {\n try {\n result = convertIconvLite(str, to, from);\n } catch (E) {\n console.error(E);\n result = str;\n }\n }\n\n if (typeof result === 'string') {\n result = Buffer.from(result, 'utf-8');\n }\n\n return result;\n}\n\n/**\n * Convert encoding of astring with iconv-lite\n *\n * @param {String|Buffer} str String to be converted\n * @param {String} to Encoding to be converted to\n * @param {String} [from='UTF-8'] Encoding to be converted from\n * @return {Buffer} Encoded string\n */\nfunction convertIconvLite(str, to, from) {\n if (to === 'UTF-8') {\n return iconvLite.decode(str, from);\n } else if (from === 'UTF-8') {\n return iconvLite.encode(str, to);\n } else {\n return iconvLite.encode(iconvLite.decode(str, from), to);\n }\n}\n\n/**\n * Converts charset name if needed\n *\n * @param {String} name Character set\n * @return {String} Character set name\n */\nfunction checkEncoding(name) {\n return (name || '')\n .toString()\n .trim()\n .replace(/^latin[\\-_]?(\\d+)$/i, 'ISO-8859-$1')\n .replace(/^win(?:dows)?[\\-_]?(\\d+)$/i, 'WINDOWS-$1')\n .replace(/^utf[\\-_]?(\\d+)$/i, 'UTF-$1')\n .replace(/^ks_c_5601\\-1987$/i, 'CP949')\n .replace(/^us[\\-_]?ascii$/i, 'ASCII')\n .toUpperCase();\n}\n",
|
|
41
|
-
"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar whatwgUrl = _interopDefault(require('whatwg-url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = /<meta.+?charset=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// html4\n\tif (!res && str) {\n\t\tres = /<meta[\\s]+?http-equiv=(['\"])content-type\\1[\\s]+?content=(['\"])(.+?)\\2/i.exec(str);\n\t\tif (!res) {\n\t\t\tres = /<meta[\\s]+?content=(['\"])(.+?)\\1[\\s]+?http-equiv=(['\"])content-type\\3/i.exec(str);\n\t\t\tif (res) {\n\t\t\t\tres.pop(); // drop last quote\n\t\t\t}\n\t\t}\n\n\t\tif (res) {\n\t\t\tres = /charset=(.*)/i.exec(res.pop());\n\t\t}\n\t}\n\n\t// xml\n\tif (!res && str) {\n\t\tres = /<\\?xml.+?encoding=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// found charset\n\tif (res) {\n\t\tcharset = res.pop();\n\n\t\t// prevent decode issues when sites use incorrect encoding\n\t\t// ref: https://hsivonen.fi/encoding-menu/\n\t\tif (charset === 'gb2312' || charset === 'gbk') {\n\t\t\tcharset = 'gb18030';\n\t\t}\n\t}\n\n\t// turn raw buffers into a single utf-8 buffer\n\treturn convert(buffer, 'UTF-8', charset).toString();\n}\n\n/**\n * Detect a URLSearchParams object\n * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143\n *\n * @param Object obj Object to detect by type or brand\n * @return String\n */\nfunction isURLSearchParams(obj) {\n\t// Duck-typing as a necessary condition.\n\tif (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {\n\t\treturn false;\n\t}\n\n\t// Brand-checking and more duck-typing as optional condition.\n\treturn obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';\n}\n\n/**\n * Check if `obj` is a W3C `Blob` object (which `File` inherits from)\n * @param {*} obj\n * @return {boolean}\n */\nfunction isBlob(obj) {\n\treturn typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param Mixed instance Response or Request instance\n * @return Mixed\n */\nfunction clone(instance) {\n\tlet p1, p2;\n\tlet body = instance.body;\n\n\t// don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif (body instanceof Stream && typeof body.getBoundary !== 'function') {\n\t\t// tee instance body\n\t\tp1 = new PassThrough();\n\t\tp2 = new PassThrough();\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].body = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n}\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param Mixed instance Any options.body input\n */\nfunction extractContentType(body) {\n\tif (body === null) {\n\t\t// body is null\n\t\treturn null;\n\t} else if (typeof body === 'string') {\n\t\t// body is string\n\t\treturn 'text/plain;charset=UTF-8';\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t} else if (isBlob(body)) {\n\t\t// body is blob\n\t\treturn body.type || null;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn null;\n\t} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\treturn null;\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\treturn null;\n\t} else if (typeof body.getBoundary === 'function') {\n\t\t// detect form data input from form-data module\n\t\treturn `multipart/form-data;boundary=${body.getBoundary()}`;\n\t} else if (body instanceof Stream) {\n\t\t// body is stream\n\t\t// can't really do much about this\n\t\treturn null;\n\t} else {\n\t\t// Body constructor defaults other things to string\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n}\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param Body instance Instance of Body\n * @return Number? Number of bytes, or null if not possible\n */\nfunction getTotalBytes(instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\treturn 0;\n\t} else if (isBlob(body)) {\n\t\treturn body.size;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn body.length;\n\t} else if (body && typeof body.getLengthSync === 'function') {\n\t\t// detect form data input from form-data module\n\t\tif (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x\n\t\tbody.hasKnownLength && body.hasKnownLength()) {\n\t\t\t// 2.x\n\t\t\treturn body.getLengthSync();\n\t\t}\n\t\treturn null;\n\t} else {\n\t\t// body is stream\n\t\treturn null;\n\t}\n}\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param Body instance Instance of Body\n * @return Void\n */\nfunction writeToStream(dest, instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\tdest.end();\n\t} else if (isBlob(body)) {\n\t\tbody.stream().pipe(dest);\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\tdest.write(body);\n\t\tdest.end();\n\t} else {\n\t\t// body is stream\n\t\tbody.pipe(dest);\n\t}\n}\n\n// expose Promise\nBody.Promise = global.Promise;\n\n/**\n * headers.js\n *\n * Headers class offers convenient helpers\n */\n\nconst invalidTokenRegex = /[^\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]/;\nconst invalidHeaderCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/;\n\nfunction validateName(name) {\n\tname = `${name}`;\n\tif (invalidTokenRegex.test(name) || name === '') {\n\t\tthrow new TypeError(`${name} is not a legal HTTP header name`);\n\t}\n}\n\nfunction validateValue(value) {\n\tvalue = `${value}`;\n\tif (invalidHeaderCharRegex.test(value)) {\n\t\tthrow new TypeError(`${value} is not a legal HTTP header value`);\n\t}\n}\n\n/**\n * Find the key in the map object given a header name.\n *\n * Returns undefined if not found.\n *\n * @param String name Header name\n * @return String|Undefined\n */\nfunction find(map, name) {\n\tname = name.toLowerCase();\n\tfor (const key in map) {\n\t\tif (key.toLowerCase() === name) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst MAP = Symbol('map');\nclass Headers {\n\t/**\n * Headers class\n *\n * @param Object headers Response headers\n * @return Void\n */\n\tconstructor() {\n\t\tlet init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record<ByteString, ByteString>\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nconst isSameProtocol = function isSameProtocol(destination, original) {\n\tconst orig = new URL$1(original).protocol;\n\tconst dest = new URL$1(destination).protocol;\n\n\treturn orig === dest;\n};\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\tdestroyStream(request.body, error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\n\t\t\tif (signal && signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (parseInt(process.version.substring(1)) < 14) {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\treq.on('socket', function (s) {\n\t\t\t\ts.addListener('close', function (hadError) {\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\n\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\n\t\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.on('end', function () {\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tlet socket;\n\n\trequest.on('socket', function (s) {\n\t\tsocket = s;\n\t});\n\n\trequest.on('response', function (response) {\n\t\tconst headers = response.headers;\n\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\n\t\t\tresponse.once('close', function (hadError) {\n\t\t\t\t// tests for socket presence, as in some situations the\n\t\t\t\t// the 'socket' event is not triggered for the request\n\t\t\t\t// (happens in deno), avoids `TypeError`\n\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\tconst hasDataListener = socket && socket.listenerCount('data') > 0;\n\n\t\t\t\tif (hasDataListener && !hadError) {\n\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\terrorCallback(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction destroyStream(stream, err) {\n\tif (stream.destroy) {\n\t\tstream.destroy(err);\n\t} else {\n\t\t// node < 8\n\t\tstream.emit('error', err);\n\t\tstream.end();\n\t}\n}\n\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\nexports.AbortError = AbortError;\n",
|
|
42
|
-
"\n/**\n * Expose `isUrl`.\n */\n\nmodule.exports = isUrl;\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\n\nvar protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nvar localhostDomainRE = /^localhost[\\:?\\d]*(?:[^\\:?\\d]\\S*)?$/\nvar nonLocalhostDomainRE = /^[^\\s\\.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n *\n * @param {String} string\n * @return {Boolean}\n */\n\nfunction isUrl(string){\n if (typeof string !== 'string') {\n return false;\n }\n\n var match = string.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n var everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)) {\n return true;\n }\n\n return false;\n}\n",
|
|
43
|
-
"'use strict';\n\nconst util = require('util');\nconst fs = require('fs');\n// Use built-in fetch if available, otherwise fallback to node-fetch\nconst fetch = global.fetch || require('node-fetch');\nconst isURL = require('is-url');\n\nconst readFile = util.promisify(fs.readFile);\n\n/**\n * loadImage\n *\n * @name loadImage\n * @function load image from different source\n * @access public\n */\nmodule.exports = async (image) => {\n let data = image;\n if (typeof image === 'undefined') {\n return image;\n }\n\n if (typeof image === 'string') {\n if (isURL(image) || image.startsWith('moz-extension://') || image.startsWith('chrome-extension://') || image.startsWith('file://')) {\n const resp = await fetch(image);\n data = await resp.arrayBuffer();\n } else if (/data:image\\/([a-zA-Z]*);base64,([^\"]*)/.test(image)) {\n data = Buffer.from(image.split(',')[1], 'base64');\n } else {\n data = await readFile(image);\n }\n } else if (Buffer.isBuffer(image)) {\n data = image;\n }\n\n return new Uint8Array(data);\n};\n",
|
|
44
|
-
"'use strict';\n\n/**\n *\n * Tesseract Worker impl. for node (using child_process)\n *\n * @fileoverview Tesseract Worker impl. for node\n * @author Kevin Kwok <antimatter15@gmail.com>\n * @author Guillermo Webster <gui@mit.edu>\n * @author Jerome Wu <jeromewus@gmail.com>\n */\nconst defaultOptions = require('./defaultOptions');\nconst spawnWorker = require('./spawnWorker');\nconst terminateWorker = require('./terminateWorker');\nconst onMessage = require('./onMessage');\nconst send = require('./send');\nconst loadImage = require('./loadImage');\n\nmodule.exports = {\n defaultOptions,\n spawnWorker,\n terminateWorker,\n onMessage,\n send,\n loadImage,\n};\n",
|
|
45
|
-
"'use strict';\n\nconst resolvePaths = require('./utils/resolvePaths');\nconst createJob = require('./createJob');\nconst { log } = require('./utils/log');\nconst getId = require('./utils/getId');\nconst OEM = require('./constants/OEM');\nconst {\n defaultOptions,\n spawnWorker,\n terminateWorker,\n onMessage,\n loadImage,\n send,\n} = require('./worker/node');\n\nlet workerCounter = 0;\n\nmodule.exports = async (langs = 'eng', oem = OEM.LSTM_ONLY, _options = {}, config = {}) => {\n const id = getId('Worker', workerCounter);\n const {\n logger,\n errorHandler,\n ...options\n } = resolvePaths({\n ...defaultOptions,\n ..._options,\n });\n const promises = {};\n\n // Current langs, oem, and config file.\n // Used if the user ever re-initializes the worker using `worker.reinitialize`.\n const currentLangs = typeof langs === 'string' ? langs.split('+') : langs;\n let currentOem = oem;\n let currentConfig = config;\n const lstmOnlyCore = [OEM.DEFAULT, OEM.LSTM_ONLY].includes(oem) && !options.legacyCore;\n\n let workerResReject;\n let workerResResolve;\n const workerRes = new Promise((resolve, reject) => {\n workerResResolve = resolve;\n workerResReject = reject;\n });\n const workerError = (event) => { workerResReject(event.message); };\n\n let worker = spawnWorker(options);\n worker.onerror = workerError;\n\n workerCounter += 1;\n\n const startJob = ({ id: jobId, action, payload }) => (\n new Promise((resolve, reject) => {\n log(`[${id}]: Start ${jobId}, action=${action}`);\n // Using both `action` and `jobId` in case user provides non-unique `jobId`.\n const promiseId = `${action}-${jobId}`;\n promises[promiseId] = { resolve, reject };\n send(worker, {\n workerId: id,\n jobId,\n action,\n payload,\n });\n })\n );\n\n const load = () => (\n console.warn('`load` is depreciated and should be removed from code (workers now come pre-loaded)')\n );\n\n const loadInternal = (jobId) => (\n startJob(createJob({\n id: jobId, action: 'load', payload: { options: { lstmOnly: lstmOnlyCore, corePath: options.corePath, logging: options.logging } },\n }))\n );\n\n const writeText = (path, text, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'writeFile', args: [path, text] },\n }))\n );\n\n const readText = (path, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'readFile', args: [path, { encoding: 'utf8' }] },\n }))\n );\n\n const removeFile = (path, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'unlink', args: [path] },\n }))\n );\n\n const FS = (method, args, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method, args },\n }))\n );\n\n const loadLanguageInternal = (_langs, jobId) => startJob(createJob({\n id: jobId,\n action: 'loadLanguage',\n payload: {\n langs: _langs,\n options: {\n langPath: options.langPath,\n dataPath: options.dataPath,\n cachePath: options.cachePath,\n cacheMethod: options.cacheMethod,\n gzip: options.gzip,\n lstmOnly: [OEM.DEFAULT, OEM.LSTM_ONLY].includes(currentOem)\n && !options.legacyLang,\n },\n },\n }));\n\n const initializeInternal = (_langs, _oem, _config, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'initialize',\n payload: { langs: _langs, oem: _oem, config: _config },\n }))\n );\n\n const reinitialize = (langs = 'eng', oem, config, jobId) => { // eslint-disable-line\n\n if (lstmOnlyCore && [OEM.TESSERACT_ONLY, OEM.TESSERACT_LSTM_COMBINED].includes(oem)) throw Error('Legacy model requested but code missing.');\n\n const _oem = oem || currentOem;\n currentOem = _oem;\n\n const _config = config || currentConfig;\n currentConfig = _config;\n\n // Only load langs that are not already loaded.\n // This logic fails if the user downloaded the LSTM-only English data for a language\n // and then uses `worker.reinitialize` to switch to the Legacy engine.\n // However, the correct data will still be downloaded after initialization fails\n // and this can be avoided entirely if the user loads the correct data ahead of time.\n const langsArr = typeof langs === 'string' ? langs.split('+') : langs;\n const _langs = langsArr.filter((x) => !currentLangs.includes(x));\n currentLangs.push(..._langs);\n\n if (_langs.length > 0) {\n return loadLanguageInternal(_langs, jobId)\n .then(() => initializeInternal(langs, _oem, _config, jobId));\n }\n\n return initializeInternal(langs, _oem, _config, jobId);\n };\n\n const setParameters = (params = {}, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'setParameters',\n payload: { params },\n }))\n );\n\n const recognize = async (image, opts = {}, output = {\n text: true,\n }, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'recognize',\n payload: { image: await loadImage(image), options: opts, output },\n }))\n );\n\n const detect = async (image, jobId) => {\n if (lstmOnlyCore) throw Error('`worker.detect` requires Legacy model, which was not loaded.');\n\n return startJob(createJob({\n id: jobId,\n action: 'detect',\n payload: { image: await loadImage(image) },\n }));\n };\n\n const terminate = async () => {\n if (worker !== null) {\n /*\n await startJob(createJob({\n id: jobId,\n action: 'terminate',\n }));\n */\n terminateWorker(worker);\n worker = null;\n }\n return Promise.resolve();\n };\n\n onMessage(worker, ({\n workerId, jobId, status, action, data,\n }) => {\n const promiseId = `${action}-${jobId}`;\n if (status === 'resolve') {\n log(`[${workerId}]: Complete ${jobId}`);\n promises[promiseId].resolve({ jobId, data });\n delete promises[promiseId];\n } else if (status === 'reject') {\n promises[promiseId].reject(data);\n delete promises[promiseId];\n if (action === 'load') workerResReject(data);\n if (errorHandler) {\n errorHandler(data);\n } else {\n throw Error(data);\n }\n } else if (status === 'progress') {\n logger({ ...data, userJobId: jobId });\n }\n });\n\n const resolveObj = {\n id,\n worker,\n load,\n writeText,\n readText,\n removeFile,\n FS,\n reinitialize,\n setParameters,\n recognize,\n detect,\n terminate,\n };\n\n loadInternal()\n .then(() => loadLanguageInternal(langs))\n .then(() => initializeInternal(langs, oem, config))\n .then(() => workerResResolve(resolveObj))\n .catch(() => {});\n\n return workerRes;\n};\n",
|
|
46
|
-
"'use strict';\n\nconst createWorker = require('./createWorker');\n\nconst recognize = async (image, langs, options) => {\n const worker = await createWorker(langs, 1, options);\n return worker.recognize(image)\n .finally(async () => {\n await worker.terminate();\n });\n};\n\nconst detect = async (image, options) => {\n const worker = await createWorker('osd', 0, options);\n return worker.detect(image)\n .finally(async () => {\n await worker.terminate();\n });\n};\n\nmodule.exports = {\n recognize,\n detect,\n};\n",
|
|
47
|
-
"'use strict';\n\n/*\n * languages with existing tesseract traineddata\n * https://tesseract-ocr.github.io/tessdoc/Data-Files#data-files-for-version-400-november-29-2016\n */\n\n/**\n * @typedef {object} Languages\n * @property {string} AFR Afrikaans\n * @property {string} AMH Amharic\n * @property {string} ARA Arabic\n * @property {string} ASM Assamese\n * @property {string} AZE Azerbaijani\n * @property {string} AZE_CYRL Azerbaijani - Cyrillic\n * @property {string} BEL Belarusian\n * @property {string} BEN Bengali\n * @property {string} BOD Tibetan\n * @property {string} BOS Bosnian\n * @property {string} BUL Bulgarian\n * @property {string} CAT Catalan; Valencian\n * @property {string} CEB Cebuano\n * @property {string} CES Czech\n * @property {string} CHI_SIM Chinese - Simplified\n * @property {string} CHI_TRA Chinese - Traditional\n * @property {string} CHR Cherokee\n * @property {string} CYM Welsh\n * @property {string} DAN Danish\n * @property {string} DEU German\n * @property {string} DZO Dzongkha\n * @property {string} ELL Greek, Modern (1453-)\n * @property {string} ENG English\n * @property {string} ENM English, Middle (1100-1500)\n * @property {string} EPO Esperanto\n * @property {string} EST Estonian\n * @property {string} EUS Basque\n * @property {string} FAS Persian\n * @property {string} FIN Finnish\n * @property {string} FRA French\n * @property {string} FRK German Fraktur\n * @property {string} FRM French, Middle (ca. 1400-1600)\n * @property {string} GLE Irish\n * @property {string} GLG Galician\n * @property {string} GRC Greek, Ancient (-1453)\n * @property {string} GUJ Gujarati\n * @property {string} HAT Haitian; Haitian Creole\n * @property {string} HEB Hebrew\n * @property {string} HIN Hindi\n * @property {string} HRV Croatian\n * @property {string} HUN Hungarian\n * @property {string} IKU Inuktitut\n * @property {string} IND Indonesian\n * @property {string} ISL Icelandic\n * @property {string} ITA Italian\n * @property {string} ITA_OLD Italian - Old\n * @property {string} JAV Javanese\n * @property {string} JPN Japanese\n * @property {string} KAN Kannada\n * @property {string} KAT Georgian\n * @property {string} KAT_OLD Georgian - Old\n * @property {string} KAZ Kazakh\n * @property {string} KHM Central Khmer\n * @property {string} KIR Kirghiz; Kyrgyz\n * @property {string} KOR Korean\n * @property {string} KUR Kurdish\n * @property {string} LAO Lao\n * @property {string} LAT Latin\n * @property {string} LAV Latvian\n * @property {string} LIT Lithuanian\n * @property {string} MAL Malayalam\n * @property {string} MAR Marathi\n * @property {string} MKD Macedonian\n * @property {string} MLT Maltese\n * @property {string} MSA Malay\n * @property {string} MYA Burmese\n * @property {string} NEP Nepali\n * @property {string} NLD Dutch; Flemish\n * @property {string} NOR Norwegian\n * @property {string} ORI Oriya\n * @property {string} PAN Panjabi; Punjabi\n * @property {string} POL Polish\n * @property {string} POR Portuguese\n * @property {string} PUS Pushto; Pashto\n * @property {string} RON Romanian; Moldavian; Moldovan\n * @property {string} RUS Russian\n * @property {string} SAN Sanskrit\n * @property {string} SIN Sinhala; Sinhalese\n * @property {string} SLK Slovak\n * @property {string} SLV Slovenian\n * @property {string} SPA Spanish; Castilian\n * @property {string} SPA_OLD Spanish; Castilian - Old\n * @property {string} SQI Albanian\n * @property {string} SRP Serbian\n * @property {string} SRP_LATN Serbian - Latin\n * @property {string} SWA Swahili\n * @property {string} SWE Swedish\n * @property {string} SYR Syriac\n * @property {string} TAM Tamil\n * @property {string} TEL Telugu\n * @property {string} TGK Tajik\n * @property {string} TGL Tagalog\n * @property {string} THA Thai\n * @property {string} TIR Tigrinya\n * @property {string} TUR Turkish\n * @property {string} UIG Uighur; Uyghur\n * @property {string} UKR Ukrainian\n * @property {string} URD Urdu\n * @property {string} UZB Uzbek\n * @property {string} UZB_CYRL Uzbek - Cyrillic\n * @property {string} VIE Vietnamese\n * @property {string} YID Yiddish\n */\n\n/**\n * @type {Languages}\n */\nmodule.exports = {\n AFR: 'afr',\n AMH: 'amh',\n ARA: 'ara',\n ASM: 'asm',\n AZE: 'aze',\n AZE_CYRL: 'aze_cyrl',\n BEL: 'bel',\n BEN: 'ben',\n BOD: 'bod',\n BOS: 'bos',\n BUL: 'bul',\n CAT: 'cat',\n CEB: 'ceb',\n CES: 'ces',\n CHI_SIM: 'chi_sim',\n CHI_TRA: 'chi_tra',\n CHR: 'chr',\n CYM: 'cym',\n DAN: 'dan',\n DEU: 'deu',\n DZO: 'dzo',\n ELL: 'ell',\n ENG: 'eng',\n ENM: 'enm',\n EPO: 'epo',\n EST: 'est',\n EUS: 'eus',\n FAS: 'fas',\n FIN: 'fin',\n FRA: 'fra',\n FRK: 'frk',\n FRM: 'frm',\n GLE: 'gle',\n GLG: 'glg',\n GRC: 'grc',\n GUJ: 'guj',\n HAT: 'hat',\n HEB: 'heb',\n HIN: 'hin',\n HRV: 'hrv',\n HUN: 'hun',\n IKU: 'iku',\n IND: 'ind',\n ISL: 'isl',\n ITA: 'ita',\n ITA_OLD: 'ita_old',\n JAV: 'jav',\n JPN: 'jpn',\n KAN: 'kan',\n KAT: 'kat',\n KAT_OLD: 'kat_old',\n KAZ: 'kaz',\n KHM: 'khm',\n KIR: 'kir',\n KOR: 'kor',\n KUR: 'kur',\n LAO: 'lao',\n LAT: 'lat',\n LAV: 'lav',\n LIT: 'lit',\n MAL: 'mal',\n MAR: 'mar',\n MKD: 'mkd',\n MLT: 'mlt',\n MSA: 'msa',\n MYA: 'mya',\n NEP: 'nep',\n NLD: 'nld',\n NOR: 'nor',\n ORI: 'ori',\n PAN: 'pan',\n POL: 'pol',\n POR: 'por',\n PUS: 'pus',\n RON: 'ron',\n RUS: 'rus',\n SAN: 'san',\n SIN: 'sin',\n SLK: 'slk',\n SLV: 'slv',\n SPA: 'spa',\n SPA_OLD: 'spa_old',\n SQI: 'sqi',\n SRP: 'srp',\n SRP_LATN: 'srp_latn',\n SWA: 'swa',\n SWE: 'swe',\n SYR: 'syr',\n TAM: 'tam',\n TEL: 'tel',\n TGK: 'tgk',\n TGL: 'tgl',\n THA: 'tha',\n TIR: 'tir',\n TUR: 'tur',\n UIG: 'uig',\n UKR: 'ukr',\n URD: 'urd',\n UZB: 'uzb',\n UZB_CYRL: 'uzb_cyrl',\n VIE: 'vie',\n YID: 'yid',\n};\n",
|
|
48
|
-
"'use strict';\n\n/*\n * PSM = Page Segmentation Mode\n */\nmodule.exports = {\n OSD_ONLY: '0',\n AUTO_OSD: '1',\n AUTO_ONLY: '2',\n AUTO: '3',\n SINGLE_COLUMN: '4',\n SINGLE_BLOCK_VERT_TEXT: '5',\n SINGLE_BLOCK: '6',\n SINGLE_LINE: '7',\n SINGLE_WORD: '8',\n CIRCLE_WORD: '9',\n SINGLE_CHAR: '10',\n SPARSE_TEXT: '11',\n SPARSE_TEXT_OSD: '12',\n RAW_LINE: '13',\n};\n",
|
|
49
|
-
"'use strict';\n\n/**\n *\n * Entry point for tesseract.js, should be the entry when bundling.\n *\n * @fileoverview entry point for tesseract.js\n * @author Kevin Kwok <antimatter15@gmail.com>\n * @author Guillermo Webster <gui@mit.edu>\n * @author Jerome Wu <jeromewus@gmail.com>\n */\nrequire('regenerator-runtime/runtime');\nconst createScheduler = require('./createScheduler');\nconst createWorker = require('./createWorker');\nconst Tesseract = require('./Tesseract');\nconst languages = require('./constants/languages');\nconst OEM = require('./constants/OEM');\nconst PSM = require('./constants/PSM');\nconst { setLogging } = require('./utils/log');\n\nmodule.exports = {\n languages,\n OEM,\n PSM,\n createScheduler,\n createWorker,\n setLogging,\n ...Tesseract,\n};\n",
|
|
50
|
-
"import { parentPort, workerData } from \"node:worker_threads\";\nimport sharp from \"sharp\";\nimport { OCRService } from \"../ocr-service\";\nimport type { OCRResult } from \"../types\";\nimport { logger } from \"./worker-logger\";\n\ninterface WorkerConfig {\n processFullScreen: boolean;\n tileSize: number;\n textRegions?: Array<{ x: number; y: number; width: number; height: number }>;\n}\n\ninterface SharedMetadata {\n frameId: number;\n width: number;\n height: number;\n displayIndex: number;\n timestamp: number;\n}\n\nclass OCRWorker {\n private config: WorkerConfig;\n private dataView: DataView;\n private atomicState: Int32Array;\n private resultsView: DataView;\n private ocrService: OCRService;\n private isRunning = true;\n private frameCount = 0;\n private lastFPSReport = Date.now();\n private lastFrameId = -1;\n\n // Atomic indices for input buffer\n private readonly FRAME_ID_INDEX = 0;\n private readonly WIDTH_INDEX = 2;\n private readonly HEIGHT_INDEX = 3;\n private readonly DISPLAY_INDEX = 4;\n private readonly TIMESTAMP_INDEX = 5;\n private readonly DATA_OFFSET = 24;\n\n // Results buffer structure\n private readonly RESULTS_HEADER_SIZE = 16;\n private readonly MAX_TEXT_LENGTH = 65536; // 64KB for text\n\n constructor(\n config: WorkerConfig,\n sharedBuffer: SharedArrayBuffer,\n resultsBuffer: SharedArrayBuffer,\n ) {\n this.config = config;\n this.dataView = new DataView(sharedBuffer);\n this.atomicState = new Int32Array(sharedBuffer, 0, 6);\n this.resultsView = new DataView(resultsBuffer);\n this.ocrService = new OCRService();\n }\n\n async initialize(): Promise<void> {\n await this.ocrService.initialize();\n logger.info(\"[OCRWorker] Initialized and ready\");\n }\n\n async run(): Promise<void> {\n await this.initialize();\n\n logger.info(\"[OCRWorker] Starting OCR loop...\");\n\n while (this.isRunning) {\n try {\n // Check for new frame\n const currentFrameId = Atomics.load(\n this.atomicState,\n this.FRAME_ID_INDEX,\n );\n\n if (currentFrameId > this.lastFrameId) {\n await this.processFrame();\n this.lastFrameId = currentFrameId;\n this.frameCount++;\n\n // Report FPS\n const now = Date.now();\n if (now - this.lastFPSReport >= 1000) {\n const fps = this.frameCount / ((now - this.lastFPSReport) / 1000);\n logger.info(`[OCRWorker] OCR FPS: ${fps.toFixed(2)}`);\n\n parentPort?.postMessage({\n type: \"fps\",\n fps,\n frameCount: this.frameCount,\n });\n\n this.frameCount = 0;\n this.lastFPSReport = now;\n }\n } else {\n // No new frame, brief yield\n await new Promise((resolve) => setImmediate(resolve));\n }\n } catch (error) {\n logger.error(\"[OCRWorker] Processing error:\", error);\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n }\n\n private async processFrame(): Promise<void> {\n // Read metadata atomically\n const metadata: SharedMetadata = {\n frameId: Atomics.load(this.atomicState, this.FRAME_ID_INDEX),\n width: Atomics.load(this.atomicState, this.WIDTH_INDEX),\n height: Atomics.load(this.atomicState, this.HEIGHT_INDEX),\n displayIndex: Atomics.load(this.atomicState, this.DISPLAY_INDEX),\n timestamp: Atomics.load(this.atomicState, this.TIMESTAMP_INDEX),\n };\n\n const results: OCRResult[] = [];\n\n if (this.config.processFullScreen) {\n // Process entire screen\n try {\n const screenBuffer = await this.extractFullScreenBuffer(metadata);\n const ocrResult = await this.ocrService.extractText(screenBuffer);\n results.push(ocrResult);\n\n logger.debug(\n `[OCRWorker] Full screen OCR: ${ocrResult.fullText.length} chars`,\n );\n } catch (error) {\n logger.error(\"[OCRWorker] Full screen OCR failed:\", error);\n }\n }\n\n // Process specific text regions if defined\n if (this.config.textRegions && this.config.textRegions.length > 0) {\n for (const region of this.config.textRegions) {\n try {\n const regionBuffer = await this.extractRegionBuffer(region, metadata);\n const ocrResult = await this.ocrService.extractText(regionBuffer);\n results.push(ocrResult);\n\n logger.debug(\n `[OCRWorker] Region OCR (${region.x},${region.y}): ${ocrResult.fullText.length} chars`,\n );\n } catch (error) {\n logger.error(\"[OCRWorker] Region OCR failed:\", error);\n }\n }\n }\n\n // Write combined results to buffer\n await this.writeResultsToBuffer(results, metadata.frameId);\n\n // Notify main thread\n const totalText = results.map((r) => r.fullText).join(\"\\n\");\n const totalBlocks = results.reduce((sum, r) => sum + r.blocks.length, 0);\n\n parentPort?.postMessage({\n type: \"ocr_complete\",\n frameId: metadata.frameId,\n displayIndex: metadata.displayIndex,\n textLength: totalText.length,\n blockCount: totalBlocks,\n hasText: totalText.length > 0,\n });\n }\n\n private async extractFullScreenBuffer(\n metadata: SharedMetadata,\n ): Promise<Buffer> {\n const bytesPerPixel = 4; // RGBA\n const totalPixels = metadata.width * metadata.height;\n const totalBytes = totalPixels * bytesPerPixel;\n\n // Create buffer for full screen\n const screenData = Buffer.allocUnsafe(totalBytes);\n\n // Copy all data\n for (let i = 0; i < totalBytes; i++) {\n screenData[i] = this.dataView.getUint8(this.DATA_OFFSET + i);\n }\n\n // Convert to PNG for OCR\n const pngBuffer = await sharp(screenData, {\n raw: {\n width: metadata.width,\n height: metadata.height,\n channels: 4,\n },\n })\n .png()\n .toBuffer();\n\n return pngBuffer;\n }\n\n private async extractRegionBuffer(\n region: { x: number; y: number; width: number; height: number },\n metadata: SharedMetadata,\n ): Promise<Buffer> {\n const bytesPerPixel = 4; // RGBA\n const rowStride = metadata.width * bytesPerPixel;\n\n // Clamp region to screen bounds\n const x = Math.max(0, Math.min(region.x, metadata.width - 1));\n const y = Math.max(0, Math.min(region.y, metadata.height - 1));\n const width = Math.min(region.width, metadata.width - x);\n const height = Math.min(region.height, metadata.height - y);\n\n // Create buffer for region\n const regionData = Buffer.allocUnsafe(width * height * bytesPerPixel);\n\n // Copy region data row by row\n for (let row = 0; row < height; row++) {\n const sourceY = y + row;\n const sourceOffset =\n this.DATA_OFFSET + sourceY * rowStride + x * bytesPerPixel;\n const destOffset = row * width * bytesPerPixel;\n\n for (let i = 0; i < width * bytesPerPixel; i++) {\n regionData[destOffset + i] = this.dataView.getUint8(sourceOffset + i);\n }\n }\n\n // Convert to PNG for OCR\n const pngBuffer = await sharp(regionData, {\n raw: {\n width,\n height,\n channels: 4,\n },\n })\n .png()\n .toBuffer();\n\n return pngBuffer;\n }\n\n private async writeResultsToBuffer(\n results: OCRResult[],\n frameId: number,\n ): Promise<void> {\n // Combine all results\n const combinedResult = {\n frameId,\n timestamp: Date.now(),\n fullText: results.map((r) => r.fullText).join(\"\\n\"),\n blocks: results.flatMap((r) => r.blocks),\n regions: results.length,\n };\n\n const resultJson = JSON.stringify(combinedResult);\n const resultBytes = Buffer.from(resultJson, \"utf-8\");\n\n // Write to results buffer\n const offset = this.RESULTS_HEADER_SIZE;\n\n // Write length\n this.resultsView.setUint32(offset, resultBytes.length, true);\n\n // Write frame ID\n this.resultsView.setUint32(offset + 4, frameId, true);\n\n // Write timestamp\n this.resultsView.setFloat64(offset + 8, Date.now(), true);\n\n // Write text data\n const dataOffset = offset + 16;\n for (\n let i = 0;\n i < Math.min(resultBytes.length, this.MAX_TEXT_LENGTH);\n i++\n ) {\n this.resultsView.setUint8(dataOffset + i, resultBytes[i]);\n }\n }\n\n stop(): void {\n this.isRunning = false;\n }\n\n async dispose(): Promise<void> {\n await this.ocrService.dispose();\n }\n\n updateTextRegions(\n regions: Array<{ x: number; y: number; width: number; height: number }>,\n ): void {\n this.config.textRegions = regions;\n }\n}\n\n// Worker entry point\nif (parentPort) {\n const { config, sharedBuffer, resultsBuffer } = workerData;\n const worker = new OCRWorker(config, sharedBuffer, resultsBuffer);\n\n // Handle messages from main thread\n parentPort.on(\"message\", (msg) => {\n if (msg.type === \"stop\") {\n worker.stop();\n worker.dispose().then(() => {\n parentPort?.postMessage({ type: \"stopped\" });\n });\n } else if (msg.type === \"update_regions\") {\n worker.updateTextRegions(msg.regions);\n }\n });\n\n // Run the worker\n worker.run().catch((error) => {\n logger.error(\"[OCRWorker] Fatal error:\", error);\n parentPort?.postMessage({ type: \"error\", error: error.message });\n process.exit(1);\n });\n}\n",
|
|
51
|
-
"import { logger } from \"@elizaos/core\";\nimport { RealOCRService } from \"./ocr-service-real\";\nimport type { BoundingBox, OCRResult, ScreenTile } from \"./types\";\n\nexport class OCRService {\n private realOCR: RealOCRService | null = null;\n private initialized = false;\n private useFallback = false;\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n try {\n logger.info(\"[OCR] Initializing OCR service...\");\n\n // Try to use real OCR first\n this.realOCR = new RealOCRService();\n await this.realOCR.initialize();\n\n this.initialized = true;\n this.useFallback = false;\n logger.info(\"[OCR] Real OCR service initialized successfully\");\n } catch (error) {\n logger.error(\"[OCR] Failed to initialize real OCR:\", error);\n\n // Fallback to basic OCR simulation\n logger.warn(\"[OCR] Using fallback OCR implementation\");\n this.useFallback = true;\n this.initialized = true;\n }\n }\n\n async extractText(imageBuffer: Buffer): Promise<OCRResult> {\n if (!this.initialized) {\n await this.initialize();\n }\n\n // Use real OCR if available\n if (this.realOCR && !this.useFallback) {\n try {\n return await this.realOCR.extractText(imageBuffer);\n } catch (error) {\n logger.error(\"[OCR] Real OCR failed, falling back:\", error);\n this.useFallback = true;\n }\n }\n\n // Fallback implementation\n return this.fallbackOCR(imageBuffer);\n }\n\n async extractFromTile(tile: ScreenTile): Promise<OCRResult> {\n if (!tile.data) {\n return {\n text: \"\",\n blocks: [],\n fullText: \"\",\n };\n }\n\n return this.extractText(tile.data);\n }\n\n async extractFromImage(imageBuffer: Buffer): Promise<OCRResult> {\n return this.extractText(imageBuffer);\n }\n\n private async fallbackOCR(_imageBuffer: Buffer): Promise<OCRResult> {\n // Fallback implementation for when Tesseract is not available\n logger.debug(\"[OCR] Using fallback OCR implementation\");\n\n const blocks: Array<{\n text: string;\n bbox: BoundingBox;\n confidence: number;\n words?: Array<{\n text: string;\n bbox: BoundingBox;\n confidence: number;\n }>;\n }> = [];\n\n // Simulate finding common UI text\n const mockTexts = [\n {\n text: \"File Edit View Window Help\",\n x: 10,\n y: 5,\n width: 300,\n height: 20,\n },\n {\n text: \"Welcome to the application\",\n x: 100,\n y: 100,\n width: 400,\n height: 40,\n },\n {\n text: \"Click here to continue\",\n x: 200,\n y: 300,\n width: 200,\n height: 30,\n },\n ];\n\n for (const mock of mockTexts) {\n blocks.push({\n text: mock.text,\n bbox: { x: mock.x, y: mock.y, width: mock.width, height: mock.height },\n confidence: 0.85 + Math.random() * 0.1,\n });\n }\n\n const fullText = blocks.map((b) => b.text).join(\"\\n\");\n\n return {\n text: fullText,\n blocks,\n fullText,\n };\n }\n\n async extractStructuredData(imageBuffer: Buffer): Promise<{\n tables?: Array<{ rows: string[][]; bbox: BoundingBox }>;\n forms?: Array<{ label: string; value: string; bbox: BoundingBox }>;\n lists?: Array<{ items: string[]; bbox: BoundingBox }>;\n }> {\n if (this.realOCR && !this.useFallback) {\n try {\n return await this.realOCR.extractStructuredData(imageBuffer);\n } catch (error) {\n logger.error(\"[OCR] Structured data extraction failed:\", error);\n }\n }\n\n // Fallback: return empty structured data\n return {\n tables: [],\n forms: [],\n lists: [],\n };\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async dispose(): Promise<void> {\n if (this.realOCR) {\n await this.realOCR.dispose();\n this.realOCR = null;\n }\n this.initialized = false;\n this.useFallback = false;\n logger.info(\"[OCR] Service disposed\");\n }\n}\n",
|
|
52
|
-
"import { logger } from \"@elizaos/core\";\nimport sharp from \"sharp\";\nimport Tesseract from \"tesseract.js\";\nimport type { BoundingBox, OCRResult, ScreenTile } from \"./types\";\n\nexport class RealOCRService {\n private worker: Tesseract.Worker | null = null;\n private initialized = false;\n private initPromise: Promise<void> | null = null;\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n // Prevent multiple initializations\n if (this.initPromise) {\n return this.initPromise;\n }\n\n this.initPromise = this._initialize();\n return this.initPromise;\n }\n\n private async _initialize(): Promise<void> {\n try {\n logger.info(\"[RealOCR] Initializing Tesseract.js...\");\n\n // Create worker\n this.worker = await Tesseract.createWorker(\"eng\", 1, {\n logger: (m) => {\n if (m.status === \"recognizing text\") {\n logger.debug(\n `[RealOCR] Progress: ${(m.progress * 100).toFixed(1)}%`,\n );\n }\n },\n });\n\n this.initialized = true;\n logger.info(\"[RealOCR] Tesseract.js initialized successfully\");\n } catch (error) {\n logger.error(\"[RealOCR] Failed to initialize:\", error);\n throw error;\n }\n }\n\n async extractText(imageBuffer: Buffer): Promise<OCRResult> {\n if (!this.initialized) {\n await this.initialize();\n }\n\n if (!this.worker) {\n throw new Error(\"OCR worker not initialized\");\n }\n\n try {\n // Preprocess image for better OCR\n const processedBuffer = await this.preprocessImage(imageBuffer);\n\n // Perform OCR\n const result = await this.worker.recognize(processedBuffer);\n\n // Convert Tesseract result to our format\n return this.convertTesseractResult(result);\n } catch (error) {\n logger.error(\"[RealOCR] Text extraction failed:\", error);\n throw error;\n }\n }\n\n async extractFromTile(tile: ScreenTile): Promise<OCRResult> {\n if (!tile.data) {\n return {\n text: \"\",\n blocks: [],\n fullText: \"\",\n };\n }\n\n return this.extractText(tile.data);\n }\n\n private async preprocessImage(imageBuffer: Buffer): Promise<Buffer> {\n try {\n // Enhance image for better OCR results\n const processed = await sharp(imageBuffer)\n .grayscale() // Convert to grayscale\n .normalize() // Normalize contrast\n .sharpen() // Sharpen text\n .toBuffer();\n\n return processed;\n } catch (error) {\n logger.warn(\n \"[RealOCR] Image preprocessing failed, using original:\",\n error,\n );\n return imageBuffer;\n }\n }\n\n private convertTesseractResult(result: Tesseract.RecognizeResult): OCRResult {\n const blocks: OCRResult[\"blocks\"] = [];\n\n // Process lines as blocks - Tesseract result.data has lines property\n interface TesseractLine {\n text: string;\n confidence: number;\n bbox: { x0: number; y0: number; x1: number; y1: number };\n words: Array<{\n text: string;\n confidence: number;\n bbox: { x0: number; y0: number; x1: number; y1: number };\n }>;\n }\n const data = result.data as { lines?: TesseractLine[]; text: string };\n const lines = data.lines || [];\n for (const line of lines) {\n if (line.confidence > 30) {\n // Filter low confidence\n blocks.push({\n text: line.text.trim(),\n bbox: {\n x: line.bbox.x0,\n y: line.bbox.y0,\n width: line.bbox.x1 - line.bbox.x0,\n height: line.bbox.y1 - line.bbox.y0,\n },\n confidence: line.confidence / 100,\n words: line.words.map((word) => ({\n text: word.text,\n bbox: {\n x: word.bbox.x0,\n y: word.bbox.y0,\n width: word.bbox.x1 - word.bbox.x0,\n height: word.bbox.y1 - word.bbox.y0,\n },\n confidence: word.confidence / 100,\n })),\n });\n }\n }\n\n const fullText = result.data.text.trim();\n\n return {\n text: fullText,\n blocks,\n fullText,\n };\n }\n\n async extractStructuredData(imageBuffer: Buffer): Promise<{\n tables?: Array<{ rows: string[][]; bbox: BoundingBox }>;\n forms?: Array<{ label: string; value: string; bbox: BoundingBox }>;\n lists?: Array<{ items: string[]; bbox: BoundingBox }>;\n }> {\n const ocrResult = await this.extractText(imageBuffer);\n\n return {\n tables: this.detectTables(ocrResult),\n forms: this.detectForms(ocrResult),\n lists: this.detectLists(ocrResult),\n };\n }\n\n private detectTables(\n ocrResult: OCRResult,\n ): Array<{ rows: string[][]; bbox: BoundingBox }> {\n const tables: Array<{ rows: string[][]; bbox: BoundingBox }> = [];\n\n // Group blocks by vertical alignment to detect table rows\n const rows: Map<number, typeof ocrResult.blocks> = new Map();\n\n for (const block of ocrResult.blocks) {\n // Round Y position to group nearby blocks\n const rowY = Math.round(block.bbox.y / 20) * 20;\n\n if (!rows.has(rowY)) {\n rows.set(rowY, []);\n }\n rows.get(rowY)?.push(block);\n }\n\n // Find potential tables (multiple aligned rows)\n const sortedRows = Array.from(rows.entries()).sort((a, b) => a[0] - b[0]);\n\n let tableRows: string[][] = [];\n let tableBounds: BoundingBox | null = null;\n\n for (const [y, rowBlocks] of sortedRows) {\n if (rowBlocks.length > 1) {\n // Sort blocks by X position\n rowBlocks.sort((a, b) => a.bbox.x - b.bbox.x);\n\n const rowTexts = rowBlocks.map((b) => b.text);\n tableRows.push(rowTexts);\n\n // Update table bounds\n if (!tableBounds) {\n tableBounds = { ...rowBlocks[0].bbox };\n } else {\n tableBounds.x = Math.min(tableBounds.x, rowBlocks[0].bbox.x);\n tableBounds.width =\n Math.max(...rowBlocks.map((b) => b.bbox.x + b.bbox.width)) -\n tableBounds.x;\n tableBounds.height = y + rowBlocks[0].bbox.height - tableBounds.y;\n }\n } else if (tableRows.length > 1 && tableBounds) {\n // End of table\n tables.push({\n rows: [...tableRows],\n bbox: { ...tableBounds },\n });\n tableRows = [];\n tableBounds = null;\n }\n }\n\n // Add final table if exists\n if (tableRows.length > 1 && tableBounds) {\n tables.push({\n rows: tableRows,\n bbox: tableBounds,\n });\n }\n\n return tables;\n }\n\n private detectForms(\n ocrResult: OCRResult,\n ): Array<{ label: string; value: string; bbox: BoundingBox }> {\n const forms: Array<{ label: string; value: string; bbox: BoundingBox }> =\n [];\n\n // Look for label-value patterns\n const blocks = ocrResult.blocks;\n\n for (let i = 0; i < blocks.length; i++) {\n const current = blocks[i];\n\n // Check if this looks like a label\n if (current.text.match(/[::]\\s*$/)) {\n const label = current.text.replace(/[::]\\s*$/, \"\").trim();\n\n // Look for value in nearby blocks\n for (let j = i + 1; j < blocks.length && j < i + 3; j++) {\n const next = blocks[j];\n\n // Check if horizontally aligned or just below\n const isAligned = Math.abs(current.bbox.y - next.bbox.y) < 10;\n const isBelow =\n next.bbox.y > current.bbox.y &&\n next.bbox.y < current.bbox.y + current.bbox.height + 30;\n\n if (isAligned || isBelow) {\n forms.push({\n label,\n value: next.text.trim(),\n bbox: {\n x: Math.min(current.bbox.x, next.bbox.x),\n y: current.bbox.y,\n width:\n Math.max(\n current.bbox.x + current.bbox.width,\n next.bbox.x + next.bbox.width,\n ) - Math.min(current.bbox.x, next.bbox.x),\n height: next.bbox.y + next.bbox.height - current.bbox.y,\n },\n });\n break;\n }\n }\n }\n }\n\n return forms;\n }\n\n private detectLists(\n ocrResult: OCRResult,\n ): Array<{ items: string[]; bbox: BoundingBox }> {\n const lists: Array<{ items: string[]; bbox: BoundingBox }> = [];\n\n let currentList: string[] = [];\n let listBounds: BoundingBox | null = null;\n\n for (const block of ocrResult.blocks) {\n // Check for list markers\n const listMatch = block.text.match(\n /^[\\u2022\\u2023\\u25E6\\u2043\\u2219•·‣⁃◦▪▫◆◇○●\\-*]\\s+(.+)$/,\n );\n const numberedMatch = block.text.match(\n /^(\\d+\\.|\\d+\\)|\\(\\d+\\)|[a-zA-Z]\\.)\\s+(.+)$/,\n );\n\n if (listMatch || numberedMatch) {\n const itemText = listMatch ? listMatch[1] : numberedMatch?.[2];\n currentList.push(itemText.trim());\n\n if (!listBounds) {\n listBounds = { ...block.bbox };\n } else {\n listBounds.width = Math.max(\n listBounds.width,\n block.bbox.x + block.bbox.width - listBounds.x,\n );\n listBounds.height = block.bbox.y + block.bbox.height - listBounds.y;\n }\n } else if (currentList.length > 0 && listBounds) {\n // End of list\n lists.push({\n items: [...currentList],\n bbox: { ...listBounds },\n });\n currentList = [];\n listBounds = null;\n }\n }\n\n // Add final list if exists\n if (currentList.length > 0 && listBounds) {\n lists.push({\n items: currentList,\n bbox: listBounds,\n });\n }\n\n return lists;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async dispose(): Promise<void> {\n if (this.worker) {\n await this.worker.terminate();\n this.worker = null;\n }\n this.initialized = false;\n this.initPromise = null;\n logger.info(\"[RealOCR] Disposed\");\n }\n}\n",
|
|
5
|
+
"/**\n * macOS Apple Vision OCR provider (issue #9105 — per-OS native OCR fallback).\n *\n * Implements the structural `AppleVisionOcrProvider` seam from `ocr-service.ts`\n * by shelling out to a bundled Swift helper (`native/macos-vision-ocr.swift`)\n * that runs `VNRecognizeTextRequest` (accurate level, language correction on).\n * The helper reads PNG/JPEG bytes from stdin and prints a single JSON object;\n * this module pipes the bytes in and maps the result onto the provider shape.\n *\n * Zero LLM tokens, no model download — Apple Vision ships with macOS. This is\n * the darwin sibling of `WindowsMediaOcrService` (Windows.Media.Ocr) and the\n * iOS `createIosVisionOcrProvider` (Capacitor bridge): same VNRecognizeText\n * engine, reached without Capacitor on a desktop host.\n *\n * Coordinate convention: Vision returns normalized BOTTOM-LEFT bboxes; the\n * Swift helper converts them to TOP-LEFT PIXEL coordinates so the result\n * matches the display-absolute convention used by every other provider.\n *\n * Fails soft: `available()` is false off darwin or when `swift` is missing, and\n * `recognize()` returns an empty result rather than throwing on a helper\n * failure, so the `OCRService` chain falls through to the doCTR backend.\n */\n\nimport { execFile } from \"node:child_process\";\nimport { accessSync, constants, existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { logger } from \"@elizaos/core\";\nimport type { AppleVisionOcrProvider } from \"./ocr-service\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/** Single JSON line emitted by `native/macos-vision-ocr.swift`. */\ninterface MacosVisionRaw {\n lines: Array<{\n text: string;\n confidence: number;\n boundingBox: { x: number; y: number; width: number; height: number };\n }>;\n fullText: string;\n}\n\ninterface MacosVisionAvailabilityOptions {\n platform?: NodeJS.Platform;\n env?: NodeJS.ProcessEnv;\n pathExists?: (candidate: string) => boolean;\n executableExists?: (name: string, env: NodeJS.ProcessEnv) => boolean;\n}\n\n/**\n * Resolve the bundled Swift helper. Works from both the dev tree (`src/`) and\n * the published build (`dist/`) — the `native/` directory sits alongside both,\n * at the package root. `ELIZA_MACOS_VISION_OCR_SCRIPT` overrides for tests.\n */\nfunction resolveScriptPath(\n env: NodeJS.ProcessEnv = process.env,\n pathExists: (candidate: string) => boolean = existsSync,\n): string | null {\n const override = env.ELIZA_MACOS_VISION_OCR_SCRIPT;\n if (override) return pathExists(override) ? override : null;\n const candidates = [\n path.join(__dirname, \"..\", \"native\", \"macos-vision-ocr.swift\"),\n path.join(__dirname, \"..\", \"..\", \"native\", \"macos-vision-ocr.swift\"),\n ];\n return candidates.find((candidate) => pathExists(candidate)) ?? null;\n}\n\nfunction isExecutableFile(candidate: string): boolean {\n try {\n accessSync(candidate, constants.X_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasExecutableOnPath(\n name: string,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n const pathValue = env.PATH ?? \"\";\n return pathValue\n .split(path.delimiter)\n .filter((segment) => segment.length > 0)\n .some((segment) => isExecutableFile(path.join(segment, name)));\n}\n\n/** True when running on macOS with the `swift` toolchain and the helper present. */\nfunction macosVisionAvailable(\n options: MacosVisionAvailabilityOptions = {},\n): boolean {\n const platform = options.platform ?? process.platform;\n const env = options.env ?? process.env;\n if (platform !== \"darwin\") return false;\n if (env.ELIZA_DISABLE_APPLE_VISION === \"1\") return false;\n const scriptPath = resolveScriptPath(env, options.pathExists ?? existsSync);\n if (!scriptPath) return false;\n return (options.executableExists ?? hasExecutableOnPath)(\"swift\", env);\n}\n\nfunction runSwiftOcr(scriptPath: string, png: Uint8Array): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = execFile(\n \"swift\",\n [scriptPath],\n { timeout: 20000, maxBuffer: 32 * 1024 * 1024 },\n (err, stdout, stderr) => {\n if (err) {\n reject(\n new Error(\n `macos-vision-ocr swift failed: ${stderr || err.message}`,\n ),\n );\n return;\n }\n resolve(stdout);\n },\n );\n child.stdin?.on(\"error\", () => {\n /* The helper may have already exited (e.g. empty stdin) — the execFile\n callback owns the real outcome; ignore the broken-pipe write error. */\n });\n child.stdin?.end(Buffer.from(png));\n });\n}\n\nconst EMPTY = { lines: [] as const, fullText: \"\" } as const;\n\n/**\n * Build an `AppleVisionOcrProvider` backed by macOS Apple Vision. Register it\n * via `registerAppleVisionOcrProvider(createMacosVisionOcrProvider())` on\n * darwin so the `OCRService` Apple-Vision backend resolves a real engine.\n */\nexport function createMacosVisionOcrProvider(): AppleVisionOcrProvider {\n return {\n name: \"macos-apple-vision\",\n available(): boolean {\n return macosVisionAvailable();\n },\n async recognize(input) {\n const scriptPath = resolveScriptPath();\n if (process.platform !== \"darwin\" || !scriptPath) {\n return EMPTY;\n }\n if (input.data.length === 0) return EMPTY;\n try {\n const stdout = await runSwiftOcr(scriptPath, input.data);\n const raw = JSON.parse(\n stdout.trim() || '{\"lines\":[],\"fullText\":\"\"}',\n ) as MacosVisionRaw;\n const lines = (raw.lines ?? []).map((line) => ({\n text: line.text,\n confidence: line.confidence,\n boundingBox: {\n x: line.boundingBox.x,\n y: line.boundingBox.y,\n width: line.boundingBox.width,\n height: line.boundingBox.height,\n },\n }));\n return { lines, fullText: raw.fullText ?? \"\" };\n } catch (err) {\n logger.warn(\n `[MacosVisionOcr] OCR failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return EMPTY;\n }\n },\n };\n}\n\n/** Exposed for the runtime wire-up + tests; mirrors `macosVisionAvailable`. */\nexport function isMacosVisionOcrAvailable(): boolean {\n return macosVisionAvailable();\n}\n\nexport const __test__ = {\n macosVisionAvailable,\n resolveScriptPath,\n};\n",
|
|
6
|
+
"import { parentPort, workerData } from \"node:worker_threads\";\nimport { getSharp } from \"../image/sharp-compat\";\nimport { OCRService } from \"../ocr-service\";\nimport type { OCRResult } from \"../types\";\nimport { logger } from \"./worker-logger\";\n\ninterface WorkerConfig {\n processFullScreen: boolean;\n tileSize: number;\n textRegions?: Array<{ x: number; y: number; width: number; height: number }>;\n}\n\ninterface SharedMetadata {\n frameId: number;\n width: number;\n height: number;\n displayIndex: number;\n timestamp: number;\n}\n\nclass OCRWorker {\n private config: WorkerConfig;\n private dataView: DataView;\n private atomicState: Int32Array;\n private resultsView: DataView;\n private ocrService: OCRService;\n private isRunning = true;\n private frameCount = 0;\n private lastFPSReport = Date.now();\n private lastFrameId = -1;\n\n // Atomic indices for input buffer\n private readonly FRAME_ID_INDEX = 0;\n private readonly WIDTH_INDEX = 2;\n private readonly HEIGHT_INDEX = 3;\n private readonly DISPLAY_INDEX = 4;\n private readonly TIMESTAMP_INDEX = 5;\n private readonly DATA_OFFSET = 24;\n\n // Results buffer structure\n private readonly RESULTS_HEADER_SIZE = 16;\n private readonly MAX_TEXT_LENGTH = 65536; // 64KB for text\n\n constructor(\n config: WorkerConfig,\n sharedBuffer: SharedArrayBuffer,\n resultsBuffer: SharedArrayBuffer,\n ) {\n this.config = config;\n this.dataView = new DataView(sharedBuffer);\n this.atomicState = new Int32Array(sharedBuffer, 0, 6);\n this.resultsView = new DataView(resultsBuffer);\n this.ocrService = new OCRService();\n }\n\n async initialize(): Promise<void> {\n await this.ocrService.initialize();\n logger.info(\"[OCRWorker] Initialized and ready\");\n }\n\n async run(): Promise<void> {\n await this.initialize();\n\n logger.info(\"[OCRWorker] Starting OCR loop...\");\n\n while (this.isRunning) {\n try {\n // Check for new frame\n const currentFrameId = Atomics.load(\n this.atomicState,\n this.FRAME_ID_INDEX,\n );\n\n if (currentFrameId > this.lastFrameId) {\n await this.processFrame();\n this.lastFrameId = currentFrameId;\n this.frameCount++;\n\n // Report FPS\n const now = Date.now();\n if (now - this.lastFPSReport >= 1000) {\n const fps = this.frameCount / ((now - this.lastFPSReport) / 1000);\n logger.info(`[OCRWorker] OCR FPS: ${fps.toFixed(2)}`);\n\n parentPort?.postMessage({\n type: \"fps\",\n fps,\n frameCount: this.frameCount,\n });\n\n this.frameCount = 0;\n this.lastFPSReport = now;\n }\n } else {\n // No new frame, brief yield\n await new Promise((resolve) => setImmediate(resolve));\n }\n } catch (error) {\n logger.error(\"[OCRWorker] Processing error:\", error);\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n }\n\n private async processFrame(): Promise<void> {\n // Read metadata atomically\n const metadata: SharedMetadata = {\n frameId: Atomics.load(this.atomicState, this.FRAME_ID_INDEX),\n width: Atomics.load(this.atomicState, this.WIDTH_INDEX),\n height: Atomics.load(this.atomicState, this.HEIGHT_INDEX),\n displayIndex: Atomics.load(this.atomicState, this.DISPLAY_INDEX),\n timestamp: Atomics.load(this.atomicState, this.TIMESTAMP_INDEX),\n };\n\n const results: OCRResult[] = [];\n\n if (this.config.processFullScreen) {\n // Process entire screen\n try {\n const screenBuffer = await this.extractFullScreenBuffer(metadata);\n const ocrResult = await this.ocrService.extractText(screenBuffer);\n results.push(ocrResult);\n\n logger.debug(\n `[OCRWorker] Full screen OCR: ${ocrResult.fullText.length} chars`,\n );\n } catch (error) {\n logger.error(\"[OCRWorker] Full screen OCR failed:\", error);\n }\n }\n\n // Process specific text regions if defined\n if (this.config.textRegions && this.config.textRegions.length > 0) {\n for (const region of this.config.textRegions) {\n try {\n const regionBuffer = await this.extractRegionBuffer(region, metadata);\n const ocrResult = await this.ocrService.extractText(regionBuffer);\n results.push(ocrResult);\n\n logger.debug(\n `[OCRWorker] Region OCR (${region.x},${region.y}): ${ocrResult.fullText.length} chars`,\n );\n } catch (error) {\n logger.error(\"[OCRWorker] Region OCR failed:\", error);\n }\n }\n }\n\n // Write combined results to buffer\n await this.writeResultsToBuffer(results, metadata.frameId);\n\n // Notify main thread\n const totalText = results.map((r) => r.fullText).join(\"\\n\");\n const totalBlocks = results.reduce((sum, r) => sum + r.blocks.length, 0);\n\n parentPort?.postMessage({\n type: \"ocr_complete\",\n frameId: metadata.frameId,\n displayIndex: metadata.displayIndex,\n textLength: totalText.length,\n blockCount: totalBlocks,\n hasText: totalText.length > 0,\n });\n }\n\n private async extractFullScreenBuffer(\n metadata: SharedMetadata,\n ): Promise<Buffer> {\n const bytesPerPixel = 4; // RGBA\n const totalPixels = metadata.width * metadata.height;\n const totalBytes = totalPixels * bytesPerPixel;\n\n // Create buffer for full screen\n const screenData = Buffer.allocUnsafe(totalBytes);\n\n // Copy all data\n for (let i = 0; i < totalBytes; i++) {\n screenData[i] = this.dataView.getUint8(this.DATA_OFFSET + i);\n }\n\n // Convert to PNG for OCR\n const sharp = await getSharp();\n const pngBuffer = await sharp(screenData, {\n raw: {\n width: metadata.width,\n height: metadata.height,\n channels: 4,\n },\n })\n .png()\n .toBuffer();\n\n return pngBuffer;\n }\n\n private async extractRegionBuffer(\n region: { x: number; y: number; width: number; height: number },\n metadata: SharedMetadata,\n ): Promise<Buffer> {\n const bytesPerPixel = 4; // RGBA\n const rowStride = metadata.width * bytesPerPixel;\n\n // Clamp region to screen bounds\n const x = Math.max(0, Math.min(region.x, metadata.width - 1));\n const y = Math.max(0, Math.min(region.y, metadata.height - 1));\n const width = Math.min(region.width, metadata.width - x);\n const height = Math.min(region.height, metadata.height - y);\n\n // Create buffer for region\n const regionData = Buffer.allocUnsafe(width * height * bytesPerPixel);\n\n // Copy region data row by row\n for (let row = 0; row < height; row++) {\n const sourceY = y + row;\n const sourceOffset =\n this.DATA_OFFSET + sourceY * rowStride + x * bytesPerPixel;\n const destOffset = row * width * bytesPerPixel;\n\n for (let i = 0; i < width * bytesPerPixel; i++) {\n regionData[destOffset + i] = this.dataView.getUint8(sourceOffset + i);\n }\n }\n\n // Convert to PNG for OCR\n const sharp = await getSharp();\n const pngBuffer = await sharp(regionData, {\n raw: {\n width,\n height,\n channels: 4,\n },\n })\n .png()\n .toBuffer();\n\n return pngBuffer;\n }\n\n private async writeResultsToBuffer(\n results: OCRResult[],\n frameId: number,\n ): Promise<void> {\n // Combine all results\n const combinedResult = {\n frameId,\n timestamp: Date.now(),\n fullText: results.map((r) => r.fullText).join(\"\\n\"),\n blocks: results.flatMap((r) => r.blocks),\n regions: results.length,\n };\n\n const resultJson = JSON.stringify(combinedResult);\n const resultBytes = Buffer.from(resultJson, \"utf-8\");\n\n // Write to results buffer\n const offset = this.RESULTS_HEADER_SIZE;\n\n // Write length\n this.resultsView.setUint32(offset, resultBytes.length, true);\n\n // Write frame ID\n this.resultsView.setUint32(offset + 4, frameId, true);\n\n // Write timestamp\n this.resultsView.setFloat64(offset + 8, Date.now(), true);\n\n // Write text data\n const dataOffset = offset + 16;\n for (\n let i = 0;\n i < Math.min(resultBytes.length, this.MAX_TEXT_LENGTH);\n i++\n ) {\n this.resultsView.setUint8(dataOffset + i, resultBytes[i]);\n }\n }\n\n stop(): void {\n this.isRunning = false;\n }\n\n async dispose(): Promise<void> {\n await this.ocrService.dispose();\n }\n\n updateTextRegions(\n regions: Array<{ x: number; y: number; width: number; height: number }>,\n ): void {\n this.config.textRegions = regions;\n }\n}\n\n// Worker entry point\nif (parentPort) {\n const { config, sharedBuffer, resultsBuffer } = workerData;\n const worker = new OCRWorker(config, sharedBuffer, resultsBuffer);\n\n // Handle messages from main thread\n parentPort.on(\"message\", (msg) => {\n if (msg.type === \"stop\") {\n worker.stop();\n worker.dispose().then(() => {\n parentPort?.postMessage({ type: \"stopped\" });\n });\n } else if (msg.type === \"update_regions\") {\n worker.updateTextRegions(msg.regions);\n }\n });\n\n // Run the worker\n worker.run().catch((error) => {\n logger.error(\"[OCRWorker] Fatal error:\", error);\n parentPort?.postMessage({ type: \"error\", error: error.message });\n process.exit(1);\n });\n}\n",
|
|
7
|
+
"// sharp-compat.ts — lazy sharp resolver + pure-JS fallback.\n//\n// plugin-vision is loadable on mobile (Android bun-musl) only if its module\n// graph does not pull native code at module-eval. `sharp` loads the libvips\n// native addon the moment it is imported, so every runtime call site goes\n// through `getSharp()` here, which imports `sharp` *dynamically* (inside the\n// function) and caches the resolved factory. On a host where the native\n// binary loads (desktop glibc/musl), that is real `sharp` and performance is\n// unchanged. Where it cannot load, `getSharp()` returns a pure-JS shim backed\n// by `jimp` (no native deps) that is API-compatible for exactly the operations\n// the codebase uses: metadata, resize{fit:\"fill\"}, removeAlpha, ensureAlpha,\n// extract, extend, trim, clone, png, jpeg, raw, toBuffer.\n//\n// The shim is not a general sharp reimplementation — it implements the subset\n// in `sharp-compat.test.ts`, which diffs shim output against native sharp.\n\nimport { deflateSync } from \"node:zlib\";\nimport { Jimp, JimpMime } from \"jimp\";\n\n/** Raw-pixel input descriptor (mirrors `sharp.SharpOptions[\"raw\"]`). */\nexport interface SharpRawInput {\n width: number;\n height: number;\n channels: 1 | 2 | 3 | 4;\n}\n\n/** Constructor options subset used by the codebase. */\nexport interface SharpFactoryOptions {\n raw?: SharpRawInput;\n limitInputPixels?: number | boolean;\n failOnError?: boolean;\n}\n\n/** `resize` options subset used by the codebase. */\nexport interface SharpResizeOptions {\n fit?: \"fill\" | \"contain\" | \"cover\" | \"inside\" | \"outside\";\n}\n\n/** RGBA background for `extend` (alpha is accepted but encoded outputs only). */\nexport interface SharpColor {\n r: number;\n g: number;\n b: number;\n alpha?: number;\n}\n\nexport interface SharpExtendOptions {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n background?: SharpColor;\n}\n\nexport interface SharpExtractRegion {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n/** Subset of `sharp.Metadata` the codebase reads. */\nexport interface SharpMetadata {\n width?: number;\n height?: number;\n channels?: number;\n format?: string;\n}\n\nexport interface SharpRawInfo {\n width: number;\n height: number;\n channels: number;\n}\n\nexport interface SharpResolveWithObject {\n data: Buffer;\n info: SharpRawInfo;\n}\n\n/**\n * The chainable instance surface. This is structurally the subset of\n * `sharp.Sharp` the codebase touches, so a real `sharp` instance satisfies it\n * and call sites need no per-backend typing.\n */\nexport interface SharpInstance {\n metadata(): Promise<SharpMetadata>;\n resize(\n width: number,\n height: number,\n options?: SharpResizeOptions,\n ): SharpInstance;\n removeAlpha(): SharpInstance;\n ensureAlpha(): SharpInstance;\n extract(region: SharpExtractRegion): SharpInstance;\n extend(options: SharpExtendOptions): SharpInstance;\n trim(): SharpInstance;\n clone(): SharpInstance;\n png(): SharpInstance;\n jpeg(): SharpInstance;\n raw(): SharpInstance;\n toBuffer(): Promise<Buffer>;\n toBuffer(options: {\n resolveWithObject: true;\n }): Promise<SharpResolveWithObject>;\n}\n\n/** The callable factory surface (`sharp(input, options?)`). */\nexport type SharpFactory = (\n input?: Buffer | Uint8Array,\n options?: SharpFactoryOptions,\n) => SharpInstance;\n\nlet cached: SharpFactory | null = null;\n\n/**\n * Resolve the image backend. Tries native `sharp` first (dynamic import so the\n * native addon is never touched at module-eval); on any failure falls back to\n * the pure-JS jimp shim. The result is cached for the process lifetime.\n */\nexport async function getSharp(): Promise<SharpFactory> {\n if (cached) return cached;\n try {\n const mod = (await import(\"sharp\")) as { default: SharpFactory };\n cached = mod.default;\n } catch {\n cached = createJimpShim();\n }\n return cached;\n}\n\n// --- pure-JS shim ----------------------------------------------------------\n\ntype JimpImage = Awaited<ReturnType<typeof Jimp.read>>;\n\n/** A jimp bitmap is always row-major RGBA. */\ninterface Bitmap {\n data: Buffer;\n width: number;\n height: number;\n}\n\ntype OutputFormat = \"raw\" | \"png\" | \"jpeg\";\n\n/**\n * Deferred operation chain. jimp decodes everything to RGBA, so the shim holds\n * a thunk that lazily loads the source pixels, then replays the recorded ops on\n * the bitmap. Channel intent (`removeAlpha` → 3, `ensureAlpha` → 4) is applied\n * only at the terminal raw output to match sharp's channel semantics.\n */\nclass JimpSharpInstance implements SharpInstance {\n private load: () => Promise<Bitmap>;\n private outputFormat: OutputFormat = \"png\";\n // null = no explicit alpha op; affects only `.raw()`/`.toBuffer({raw})`.\n private alphaMode: \"remove\" | \"ensure\" | null = null;\n\n constructor(load: () => Promise<Bitmap>) {\n this.load = load;\n }\n\n private chain(next: (bitmap: Bitmap) => Bitmap | Promise<Bitmap>): this {\n const prev = this.load;\n this.load = async () => next(await prev());\n return this;\n }\n\n metadata(): Promise<SharpMetadata> {\n return this.load().then((b) => ({\n width: b.width,\n height: b.height,\n channels: hasAlphaPixels(b) ? 4 : 3,\n format: this.outputFormat === \"raw\" ? \"raw\" : this.outputFormat,\n }));\n }\n\n resize(width: number, height: number, options?: SharpResizeOptions): this {\n const fit = options?.fit ?? \"cover\";\n if (fit !== \"fill\") {\n throw new Error(\n `[sharp-compat] resize fit \"${fit}\" is not supported by the pure-JS fallback (only \"fill\")`,\n );\n }\n return this.chain((b) => {\n const img = bitmapToJimp(b);\n img.resize({ w: width, h: height });\n return jimpToBitmap(img);\n });\n }\n\n removeAlpha(): this {\n this.alphaMode = \"remove\";\n return this;\n }\n\n ensureAlpha(): this {\n this.alphaMode = \"ensure\";\n return this;\n }\n\n extract(region: SharpExtractRegion): this {\n // Direct buffer crop — jimp's crop plugin is unreliable under the Node\n // vitest harness, and a sub-rectangle copy needs no codec.\n return this.chain((b) => cropBitmap(b, region));\n }\n\n extend(options: SharpExtendOptions): this {\n const top = options.top ?? 0;\n const bottom = options.bottom ?? 0;\n const left = options.left ?? 0;\n const right = options.right ?? 0;\n const bg = options.background ?? { r: 0, g: 0, b: 0, alpha: 1 };\n return this.chain((b) => padBitmap(b, top, bottom, left, right, bg));\n }\n\n trim(): this {\n return this.chain((b) => trimBitmap(b));\n }\n\n clone(): this {\n const prev = this.load;\n const clone = new JimpSharpInstance(async () => {\n const b = await prev();\n return { data: Buffer.from(b.data), width: b.width, height: b.height };\n });\n clone.outputFormat = this.outputFormat;\n clone.alphaMode = this.alphaMode;\n return clone as this;\n }\n\n png(): this {\n this.outputFormat = \"png\";\n return this;\n }\n\n jpeg(): this {\n this.outputFormat = \"jpeg\";\n return this;\n }\n\n raw(): this {\n this.outputFormat = \"raw\";\n return this;\n }\n\n toBuffer(): Promise<Buffer>;\n toBuffer(options: {\n resolveWithObject: true;\n }): Promise<SharpResolveWithObject>;\n async toBuffer(options?: {\n resolveWithObject: true;\n }): Promise<Buffer | SharpResolveWithObject> {\n const bitmap = await this.load();\n if (this.outputFormat === \"raw\") {\n const channels = this.rawChannels(bitmap);\n const data = toRawChannels(bitmap, channels);\n if (options?.resolveWithObject) {\n return {\n data,\n info: { width: bitmap.width, height: bitmap.height, channels },\n };\n }\n return data;\n }\n\n const dropAlpha = this.alphaMode === \"remove\";\n let data: Buffer;\n if (this.outputFormat === \"jpeg\") {\n // jimp's JPEG encoder is correct on both Node and bun; JPEG has no alpha.\n const img = bitmapToJimp(bitmap);\n const encoded = await img.getBuffer(JimpMime.jpeg);\n data = Buffer.isBuffer(encoded) ? encoded : Buffer.from(encoded);\n } else {\n // jimp's PNG encoder is broken under Node 24/25 (pngjs deflate), so encode\n // PNG directly via zlib — works identically on Node and bun, and both\n // sharp and jimp decode the result with exact pixel fidelity.\n data = encodePng(bitmap, dropAlpha);\n }\n if (options?.resolveWithObject) {\n return {\n data,\n info: {\n width: bitmap.width,\n height: bitmap.height,\n channels: dropAlpha ? 3 : 4,\n },\n };\n }\n return data;\n }\n\n /** Output channel count for raw output, matching sharp's alpha semantics. */\n private rawChannels(bitmap: Bitmap): 3 | 4 {\n if (this.alphaMode === \"remove\") return 3;\n if (this.alphaMode === \"ensure\") return 4;\n return hasAlphaPixels(bitmap) ? 4 : 3;\n }\n}\n\n/**\n * Construct the pure-JS shim factory directly. Exposed so the compat test can\n * diff the shim against native `sharp` without depending on which backend\n * `getSharp()` happens to resolve on the host.\n */\nexport function createJimpShim(): SharpFactory {\n return (input, options) => {\n if (options?.raw) {\n if (!input) {\n throw new Error(\"[sharp-compat] raw input requires a pixel buffer\");\n }\n const { width, height, channels } = options.raw;\n const rgba = rawToRgba(toBuffer(input), width, height, channels);\n return new JimpSharpInstance(async () => ({\n data: rgba,\n width,\n height,\n }));\n }\n if (!input) {\n throw new Error(\"[sharp-compat] an input buffer is required\");\n }\n const encoded = toBuffer(input);\n return new JimpSharpInstance(async () => {\n const img = await Jimp.read(encoded);\n return jimpToBitmap(img);\n });\n };\n}\n\nfunction toBuffer(input: Buffer | Uint8Array): Buffer {\n return Buffer.isBuffer(input) ? input : Buffer.from(input);\n}\n\nfunction bitmapToJimp(bitmap: Bitmap): JimpImage {\n return Jimp.fromBitmap({\n data: bitmap.data,\n width: bitmap.width,\n height: bitmap.height,\n });\n}\n\nfunction jimpToBitmap(img: JimpImage): Bitmap {\n const { data, width, height } = img.bitmap;\n return { data: Buffer.from(data), width, height };\n}\n\n/** True when any pixel has a non-opaque alpha channel. */\nfunction hasAlphaPixels(bitmap: Bitmap): boolean {\n for (let i = 3; i < bitmap.data.length; i += 4) {\n if (bitmap.data[i] !== 255) return true;\n }\n return false;\n}\n\n/** Expand raw N-channel pixels to the RGBA bitmap jimp works in. */\nfunction rawToRgba(\n data: Buffer,\n width: number,\n height: number,\n channels: number,\n): Buffer {\n const pixels = width * height;\n const out = Buffer.allocUnsafe(pixels * 4);\n for (let p = 0; p < pixels; p++) {\n const src = p * channels;\n const dst = p * 4;\n if (channels >= 3) {\n out[dst] = data[src];\n out[dst + 1] = data[src + 1];\n out[dst + 2] = data[src + 2];\n out[dst + 3] = channels >= 4 ? data[src + 3] : 255;\n } else {\n // 1ch grayscale or 2ch gray+alpha.\n const gray = data[src];\n out[dst] = gray;\n out[dst + 1] = gray;\n out[dst + 2] = gray;\n out[dst + 3] = channels === 2 ? data[src + 1] : 255;\n }\n }\n return out;\n}\n\n/** Collapse the RGBA working bitmap to the requested raw channel count. */\nfunction toRawChannels(bitmap: Bitmap, channels: 3 | 4): Buffer {\n const pixels = bitmap.width * bitmap.height;\n if (channels === 4) {\n return Buffer.from(bitmap.data.subarray(0, pixels * 4));\n }\n const out = Buffer.allocUnsafe(pixels * 3);\n for (let p = 0; p < pixels; p++) {\n out[p * 3] = bitmap.data[p * 4];\n out[p * 3 + 1] = bitmap.data[p * 4 + 1];\n out[p * 3 + 2] = bitmap.data[p * 4 + 2];\n }\n return out;\n}\n\n// --- PNG encoder -----------------------------------------------------------\n//\n// Minimal, dependency-free PNG encoder (filter type 0, single IDAT) backed by\n// node's built-in zlib. Replaces jimp's PNG encoder, which produces corrupt\n// output under Node 24/25. Color type 6 (RGBA) by default, color type 2 (RGB)\n// when alpha was dropped.\n\nconst CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[n] = c >>> 0;\n }\n return table;\n})();\n\nfunction crc32(buf: Buffer): number {\n let crc = 0xffffffff;\n for (let i = 0; i < buf.length; i++) {\n crc = CRC_TABLE[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction pngChunk(type: string, data: Buffer): Buffer {\n const len = Buffer.allocUnsafe(4);\n len.writeUInt32BE(data.length, 0);\n const typeBuf = Buffer.from(type, \"ascii\");\n const crc = Buffer.allocUnsafe(4);\n crc.writeUInt32BE(crc32(Buffer.concat([typeBuf, data])), 0);\n return Buffer.concat([len, typeBuf, data, crc]);\n}\n\nfunction encodePng(bitmap: Bitmap, dropAlpha: boolean): Buffer {\n const { width, height, data } = bitmap;\n const channels = dropAlpha ? 3 : 4;\n const stride = width * channels;\n // One filter byte (type 0 = none) per scanline, then the row pixels.\n const rawWithFilters = Buffer.allocUnsafe((stride + 1) * height);\n for (let y = 0; y < height; y++) {\n const dstRow = y * (stride + 1);\n rawWithFilters[dstRow] = 0;\n if (dropAlpha) {\n const srcRow = y * width * 4;\n for (let x = 0; x < width; x++) {\n const s = srcRow + x * 4;\n const d = dstRow + 1 + x * 3;\n rawWithFilters[d] = data[s];\n rawWithFilters[d + 1] = data[s + 1];\n rawWithFilters[d + 2] = data[s + 2];\n }\n } else {\n const srcRow = y * stride;\n data.copy(rawWithFilters, dstRow + 1, srcRow, srcRow + stride);\n }\n }\n\n const ihdr = Buffer.allocUnsafe(13);\n ihdr.writeUInt32BE(width, 0);\n ihdr.writeUInt32BE(height, 4);\n ihdr[8] = 8; // bit depth\n ihdr[9] = dropAlpha ? 2 : 6; // color type: 2 = RGB, 6 = RGBA\n ihdr[10] = 0; // compression\n ihdr[11] = 0; // filter\n ihdr[12] = 0; // interlace\n\n const signature = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);\n return Buffer.concat([\n signature,\n pngChunk(\"IHDR\", ihdr),\n pngChunk(\"IDAT\", deflateSync(rawWithFilters)),\n pngChunk(\"IEND\", Buffer.alloc(0)),\n ]);\n}\n\n/** Copy a sub-rectangle out of an RGBA bitmap (sharp `extract` semantics). */\nfunction cropBitmap(bitmap: Bitmap, region: SharpExtractRegion): Bitmap {\n const { left, top, width, height } = region;\n const out = Buffer.allocUnsafe(width * height * 4);\n const srcStride = bitmap.width * 4;\n for (let y = 0; y < height; y++) {\n const srcRow = (top + y) * srcStride + left * 4;\n bitmap.data.copy(out, y * width * 4, srcRow, srcRow + width * 4);\n }\n return { data: out, width, height };\n}\n\n/** Pad a bitmap with a solid-color border (sharp `extend` semantics). */\nfunction padBitmap(\n bitmap: Bitmap,\n top: number,\n bottom: number,\n left: number,\n right: number,\n bg: SharpColor,\n): Bitmap {\n const newWidth = bitmap.width + left + right;\n const newHeight = bitmap.height + top + bottom;\n const out = Buffer.allocUnsafe(newWidth * newHeight * 4);\n const alpha = bg.alpha === undefined ? 255 : Math.round(bg.alpha * 255);\n for (let i = 0; i < out.length; i += 4) {\n out[i] = bg.r;\n out[i + 1] = bg.g;\n out[i + 2] = bg.b;\n out[i + 3] = alpha;\n }\n for (let y = 0; y < bitmap.height; y++) {\n const srcRow = y * bitmap.width * 4;\n const dstRow = ((y + top) * newWidth + left) * 4;\n bitmap.data.copy(out, dstRow, srcRow, srcRow + bitmap.width * 4);\n }\n return { data: out, width: newWidth, height: newHeight };\n}\n\n/**\n * Autocrop a uniform border (sharp `trim` default: trim pixels matching the\n * top-left corner color, full-tolerance equality).\n */\nfunction trimBitmap(bitmap: Bitmap): Bitmap {\n const { data, width, height } = bitmap;\n const sameAsCorner = (x: number, y: number): boolean => {\n const i = (y * width + x) * 4;\n return (\n data[i] === data[0] &&\n data[i + 1] === data[1] &&\n data[i + 2] === data[2] &&\n data[i + 3] === data[3]\n );\n };\n let top = 0;\n let bottom = height - 1;\n let left = 0;\n let right = width - 1;\n const rowUniform = (y: number): boolean => {\n for (let x = 0; x < width; x++) if (!sameAsCorner(x, y)) return false;\n return true;\n };\n const colUniform = (x: number): boolean => {\n for (let y = 0; y < height; y++) if (!sameAsCorner(x, y)) return false;\n return true;\n };\n while (top < bottom && rowUniform(top)) top++;\n while (bottom > top && rowUniform(bottom)) bottom--;\n while (left < right && colUniform(left)) left++;\n while (right > left && colUniform(right)) right--;\n\n const newWidth = right - left + 1;\n const newHeight = bottom - top + 1;\n if (newWidth === width && newHeight === height) return bitmap;\n const out = Buffer.allocUnsafe(newWidth * newHeight * 4);\n for (let y = 0; y < newHeight; y++) {\n const srcRow = ((y + top) * width + left) * 4;\n out.set(data.subarray(srcRow, srcRow + newWidth * 4), y * newWidth * 4);\n }\n return { data: out, width: newWidth, height: newHeight };\n}\n",
|
|
8
|
+
"import { logger } from \"@elizaos/core\";\nimport { assertValidVisionImageBuffer } from \"./image-input\";\nimport { DoctrOCRService, shouldPreferAppleVision } from \"./ocr-service-doctr\";\nimport type { BoundingBox, OCRResult, ScreenTile } from \"./types\";\n\nexport type OCRBackendName = \"doctr\" | \"apple-vision\";\n\nexport interface OCRServiceConfig {\n /**\n * Force a specific backend. If unset, the chain is:\n * 1. Apple Vision (darwin only, when a provider has been registered)\n * 2. doCTR (ggml-backed CRNN+DBNet via native/doctr.cpp)\n *\n * There is no tesseract / onnx fallback — the migration removed both.\n * If neither backend can initialize, `initialize()` throws.\n */\n backend?: OCRBackendName;\n}\n\ninterface OCRBackend {\n name: OCRBackendName;\n initialize(): Promise<void>;\n extractText(buffer: Buffer): Promise<OCRResult>;\n dispose(): Promise<void>;\n}\n\nexport interface StructuredOCRData {\n tables: Array<{ rows: string[][]; bbox: BoundingBox }>;\n forms: Array<{ label: string; value: string; bbox: BoundingBox }>;\n lists: Array<{ items: string[]; bbox: BoundingBox }>;\n}\n\nfunction unionBbox(boxes: BoundingBox[]): BoundingBox {\n const minX = Math.min(...boxes.map((box) => box.x));\n const minY = Math.min(...boxes.map((box) => box.y));\n const maxX = Math.max(...boxes.map((box) => box.x + box.width));\n const maxY = Math.max(...boxes.map((box) => box.y + box.height));\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\nfunction parseTableRow(line: string): string[] | null {\n const trimmed = line.trim();\n const cells = trimmed.includes(\"|\")\n ? trimmed.split(\"|\")\n : trimmed.includes(\"\\t\")\n ? trimmed.split(\"\\t\")\n : trimmed.split(/\\s{2,}/u);\n const normalized = cells.map((cell) => cell.trim()).filter(Boolean);\n return normalized.length >= 2 ? normalized : null;\n}\n\nexport function extractStructuredDataFromOCR(\n ocr: OCRResult,\n): StructuredOCRData {\n const tables: StructuredOCRData[\"tables\"] = [];\n const forms: StructuredOCRData[\"forms\"] = [];\n const lists: StructuredOCRData[\"lists\"] = [];\n\n for (const block of ocr.blocks) {\n const lines = block.text\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean);\n const tableRows = lines\n .map(parseTableRow)\n .filter((row): row is string[] => Boolean(row));\n if (\n tableRows.length >= 2 &&\n new Set(tableRows.map((row) => row.length)).size === 1\n ) {\n tables.push({ rows: tableRows, bbox: block.bbox });\n }\n\n const listItems = lines\n .map((line) => line.match(/^(?:[-*•]|\\d+[.)])\\s+(.+)$/u)?.[1]?.trim())\n .filter((item): item is string => Boolean(item));\n if (listItems.length >= 2) {\n lists.push({ items: listItems, bbox: block.bbox });\n }\n\n for (const line of lines) {\n const match = line.match(/^([^:]{1,80}):\\s*(.+)$/u);\n if (match?.[1] && match[2]) {\n forms.push({\n label: match[1].trim(),\n value: match[2].trim(),\n bbox: block.bbox,\n });\n }\n }\n }\n\n const wordRows = ocr.blocks\n .flatMap((block) => block.words ?? [])\n .reduce<Map<number, Array<{ text: string; bbox: BoundingBox }>>>(\n (rows, word) => {\n const rowKey = Math.round(word.bbox.y / 12);\n const row = rows.get(rowKey) ?? [];\n row.push({ text: word.text, bbox: word.bbox });\n rows.set(rowKey, row);\n return rows;\n },\n new Map(),\n );\n\n const rowsFromWords = Array.from(wordRows.values())\n .map((row) => row.sort((a, b) => a.bbox.x - b.bbox.x))\n .filter((row) => row.length >= 2);\n if (rowsFromWords.length >= 2) {\n tables.push({\n rows: rowsFromWords.map((row) => row.map((word) => word.text)),\n bbox: unionBbox(\n rowsFromWords.flatMap((row) => row.map((word) => word.bbox)),\n ),\n });\n }\n\n return { tables, forms, lists };\n}\n\nclass DoctrBackend implements OCRBackend {\n readonly name: OCRBackendName = \"doctr\";\n private impl = new DoctrOCRService();\n initialize() {\n return this.impl.initialize();\n }\n extractText(buffer: Buffer) {\n return this.impl.extractText(buffer);\n }\n dispose() {\n return this.impl.dispose();\n }\n}\n\n/**\n * External provider seam for the Apple Vision OCR backend.\n *\n * `plugin-vision` does not take a runtime dep on `@elizaos/plugin-computeruse`\n * — that would invert the layering (computeruse is the higher-level seam).\n * Instead, the runtime registers a provider here on iOS/macOS startup using\n * `createIosVisionOcrProvider(...)` from\n * `@elizaos/plugin-computeruse/mobile/ocr-provider`. Until a provider is\n * registered, `AppleVisionBackend.extractText` throws so the chooser falls\n * through to the doCTR ggml backend.\n *\n * The provider shape is intentionally structural so plugin-vision stays\n * Node-importable on hosts that don't ship Capacitor.\n */\nexport interface AppleVisionOcrProvider {\n /** Stable id used in logs/telemetry. */\n readonly name: string;\n /** True when the underlying bridge is registered and ready. */\n available(): boolean;\n /**\n * Recognize text in the JPEG/PNG bytes. The plugin-computeruse iOS provider\n * returns `OcrResult`; we map to plugin-vision's `OCRResult` shape inline.\n */\n recognize(input: { kind: \"bytes\"; data: Uint8Array }): Promise<{\n readonly lines: ReadonlyArray<{\n readonly text: string;\n readonly confidence: number;\n readonly boundingBox: {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n };\n }>;\n readonly fullText: string;\n }>;\n}\n\nlet registeredAppleVisionProvider: AppleVisionOcrProvider | null = null;\n\nexport function registerAppleVisionOcrProvider(\n provider: AppleVisionOcrProvider | null,\n): void {\n registeredAppleVisionProvider = provider;\n logger.info(\n `[OCR] AppleVision provider ${provider ? \"registered\" : \"cleared\"}${\n provider?.name ? ` (${provider.name})` : \"\"\n }`,\n );\n}\n\nexport function getAppleVisionOcrProvider(): AppleVisionOcrProvider | null {\n return registeredAppleVisionProvider;\n}\n\n/**\n * On a plain macOS desktop (no Capacitor), register the native Apple Vision OCR\n * provider so the AppleVision backend has a bridge — the darwin sibling of the\n * iOS Capacitor bridge. Lazy-imported to avoid an import cycle, darwin-only,\n * idempotent (an already-registered provider — e.g. the iOS bridge — wins), and\n * fails soft when `swift` is absent so the chooser falls through to doCTR.\n */\nasync function ensureMacosVisionOcrProvider(): Promise<void> {\n if (process.platform !== \"darwin\") return;\n if (getAppleVisionOcrProvider()) return;\n try {\n const mod = await import(\"./ocr-service-apple-vision-macos.js\");\n if (!mod.isMacosVisionOcrAvailable()) return;\n registerAppleVisionOcrProvider(mod.createMacosVisionOcrProvider());\n } catch (error) {\n logger.warn(\n `[OCR] macOS Apple Vision provider unavailable: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nclass AppleVisionBackend implements OCRBackend {\n readonly name: OCRBackendName = \"apple-vision\";\n async initialize(): Promise<void> {\n if (!registeredAppleVisionProvider) {\n throw new Error(\n \"Apple Vision OCR backend has no registered provider — call registerAppleVisionOcrProvider(createIosVisionOcrProvider(getBridge)) from the runtime.\",\n );\n }\n if (!registeredAppleVisionProvider.available()) {\n throw new Error(\n \"Apple Vision OCR provider reports unavailable (Capacitor ComputerUse bridge not yet registered).\",\n );\n }\n }\n async extractText(buffer: Buffer): Promise<OCRResult> {\n const provider = registeredAppleVisionProvider;\n if (!provider) {\n throw new Error(\n \"Apple Vision OCR backend has no registered provider at extract time\",\n );\n }\n const result = await provider.recognize({\n kind: \"bytes\",\n data: new Uint8Array(buffer),\n });\n const blocks = result.lines.map((line) => ({\n text: line.text,\n confidence: line.confidence,\n bbox: {\n x: line.boundingBox.x,\n y: line.boundingBox.y,\n width: line.boundingBox.width,\n height: line.boundingBox.height,\n } as BoundingBox,\n }));\n return {\n text: result.fullText,\n blocks,\n fullText: result.fullText,\n };\n }\n async dispose(): Promise<void> {\n /* Provider lifecycle is owned by the registrant, not this backend. */\n }\n}\n\n/**\n * Walk the priority chain and pick the first backend that initializes.\n * Backend instances are cached; per-call we just dispatch to the active one.\n */\nexport class OCRService {\n private backends: OCRBackend[] = [];\n private chosen: OCRBackend | null = null;\n private initialized = false;\n private readonly forced?: OCRBackendName;\n\n constructor(config: OCRServiceConfig = {}) {\n this.forced = config.backend;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n await ensureMacosVisionOcrProvider();\n\n logger.info(\"[OCR] initializing OCR service…\");\n\n const candidates: Array<() => Promise<OCRBackend | null>> = [];\n if (!this.forced || this.forced === \"apple-vision\") {\n candidates.push(async () =>\n shouldPreferAppleVision() ? new AppleVisionBackend() : null,\n );\n }\n if (!this.forced || this.forced === \"doctr\") {\n candidates.push(async () =>\n (await DoctrOCRService.isAvailable()) ? new DoctrBackend() : null,\n );\n }\n\n for (const factory of candidates) {\n const backend = await factory();\n if (!backend) continue;\n try {\n if (backend.name === \"doctr\") {\n // Defer GGUF load until first use so OCRService.initialize stays\n // cheap. DoctrBackend.initialize() is what triggers the FFI load.\n this.backends.push(backend);\n if (!this.chosen) this.chosen = backend;\n continue;\n }\n await backend.initialize();\n this.backends.push(backend);\n if (!this.chosen) this.chosen = backend;\n } catch (error) {\n logger.warn(\n `[OCR] backend ${backend.name} unavailable: ${error instanceof Error ? error.message : String(error)}`,\n );\n await backend.dispose().catch(() => {});\n }\n }\n\n if (!this.chosen) {\n throw new Error(\n \"No OCR backend available — doctr.cpp GGUFs not built and no Apple Vision provider registered.\",\n );\n }\n this.initialized = true;\n logger.info(`[OCR] active backend: ${this.chosen.name}`);\n }\n\n async extractText(imageBuffer: Buffer): Promise<OCRResult> {\n await assertValidVisionImageBuffer(imageBuffer);\n if (!this.initialized) await this.initialize();\n if (!this.chosen) throw new Error(\"OCR not initialized\");\n\n const ordered = [\n this.chosen,\n ...this.backends.filter((b) => b !== this.chosen),\n ];\n let lastError: unknown = null;\n for (const backend of ordered) {\n try {\n if (backend.name === \"doctr\" && backend instanceof DoctrBackend) {\n await backend.initialize();\n }\n return await backend.extractText(imageBuffer);\n } catch (error) {\n lastError = error;\n logger.warn(\n `[OCR] backend ${backend.name} failed:`,\n error instanceof Error ? error.message : String(error),\n );\n if (backend === this.chosen && ordered.length > 1) {\n this.chosen = ordered[1];\n logger.warn(`[OCR] demoted to backend: ${this.chosen.name}`);\n }\n }\n }\n throw new Error(\n `All OCR backends failed: ${lastError instanceof Error ? lastError.message : String(lastError)}`,\n );\n }\n\n async extractFromTile(tile: ScreenTile): Promise<OCRResult> {\n if (!tile.data) {\n return { text: \"\", blocks: [], fullText: \"\" };\n }\n return this.extractText(tile.data);\n }\n\n async extractFromImage(imageBuffer: Buffer): Promise<OCRResult> {\n return this.extractText(imageBuffer);\n }\n\n async extractStructuredData(imageBuffer: Buffer): Promise<StructuredOCRData> {\n const ocr = await this.extractText(imageBuffer);\n return extractStructuredDataFromOCR(ocr);\n }\n\n getActiveBackend(): OCRBackendName | null {\n return this.chosen?.name ?? null;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async dispose(): Promise<void> {\n for (const backend of this.backends) {\n await backend.dispose().catch((error) => {\n logger.warn({ error }, `[OCR] dispose ${backend.name} failed:`);\n });\n }\n this.backends = [];\n this.chosen = null;\n this.initialized = false;\n logger.info(\"[OCR] service disposed\");\n }\n}\n",
|
|
9
|
+
"import { getSharp, type SharpMetadata } from \"./image/sharp-compat\";\n\nexport const MAX_VISION_IMAGE_BYTES = 25 * 1024 * 1024;\n\nconst SUPPORTED_FORMATS = new Set([\"jpeg\", \"png\", \"webp\"]);\nconst MIME_BY_FORMAT: Record<string, string> = {\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n webp: \"image/webp\",\n};\n\nexport interface ValidatedVisionImage {\n readonly width: number;\n readonly height: number;\n readonly format: \"jpeg\" | \"png\" | \"webp\";\n readonly contentType: \"image/jpeg\" | \"image/png\" | \"image/webp\";\n}\n\nexport function estimateBase64DecodedBytes(base64: string): number {\n const trimmed = base64.trim();\n if (!trimmed) return 0;\n const padding = trimmed.endsWith(\"==\") ? 2 : trimmed.endsWith(\"=\") ? 1 : 0;\n return Math.floor((trimmed.length * 3) / 4) - padding;\n}\n\nexport function parseVisionDataImageUrl(value: string): {\n mimeType: string;\n base64: string;\n} {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(\"Image URL must be a non-empty data URL\");\n }\n if (!value.startsWith(\"data:\")) {\n throw new Error(\"Only data image URLs are supported for vision input\");\n }\n const commaIndex = value.indexOf(\",\");\n if (commaIndex < 0) {\n throw new Error(\"Malformed data image URL\");\n }\n const header = value.slice(5, commaIndex);\n const payload = value.slice(commaIndex + 1);\n const parts = header.split(\";\").map((part) => part.toLowerCase());\n const mimeType = parts[0] ?? \"\";\n if (!SUPPORTED_FORMATS.has(mimeType.replace(/^image\\//, \"\"))) {\n throw new Error(`Unsupported image media type: ${mimeType || \"unknown\"}`);\n }\n if (!parts.includes(\"base64\")) {\n throw new Error(\"Vision data image URL must be base64 encoded\");\n }\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(payload)) {\n throw new Error(\"Malformed base64 image payload\");\n }\n if (estimateBase64DecodedBytes(payload) > MAX_VISION_IMAGE_BYTES) {\n throw new Error(\n `Image payload exceeds ${MAX_VISION_IMAGE_BYTES} byte limit`,\n );\n }\n return { mimeType, base64: payload };\n}\n\nexport async function assertValidVisionImageBuffer(\n data: Buffer,\n): Promise<ValidatedVisionImage> {\n if (!Buffer.isBuffer(data) || data.length === 0) {\n throw new Error(\"Image data must be a non-empty Buffer\");\n }\n if (data.length > MAX_VISION_IMAGE_BYTES) {\n throw new Error(`Image data exceeds ${MAX_VISION_IMAGE_BYTES} byte limit`);\n }\n\n let metadata: SharpMetadata;\n try {\n const sharp = await getSharp();\n metadata = await sharp(data, { limitInputPixels: 100_000_000 }).metadata();\n } catch (error) {\n throw new Error(\n `Malformed image input: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n const format = metadata.format;\n if (!format || !SUPPORTED_FORMATS.has(format)) {\n throw new Error(`Unsupported image media type: ${format || \"unknown\"}`);\n }\n if (!metadata.width || !metadata.height) {\n throw new Error(\n `Invalid image dimensions: ${metadata.width}x${metadata.height}`,\n );\n }\n\n return {\n width: metadata.width,\n height: metadata.height,\n format: format as ValidatedVisionImage[\"format\"],\n contentType: MIME_BY_FORMAT[format] as ValidatedVisionImage[\"contentType\"],\n };\n}\n\nexport async function assertSafeVisionDataImageUrl(\n imageUrl: string,\n): Promise<ValidatedVisionImage> {\n const { base64 } = parseVisionDataImageUrl(imageUrl);\n return assertValidVisionImageBuffer(Buffer.from(base64, \"base64\"));\n}\n",
|
|
10
|
+
"// doctr-based OCR backend — ggml runtime via `native/doctr.cpp/`.\n//\n// Replaces the previous PP-OCRv5 / onnxruntime-node path. Two-stage pipeline:\n// 1. Detection (db_mobilenet_v3_large + DBNet head) — produces a probability\n// map at H/4 × W/4.\n// 2. Contour → bbox post-processing (this file).\n// 3. Recognition (crnn_mobilenet_v3_small + CTC) — per-crop logits.\n// 4. CTC greedy decode (this file).\n//\n// The C++ side runs only the forward passes. Post-processing is pure TS to\n// keep the native surface minimal and to share the same decode logic with\n// native OCR providers that return logits. Apple Vision returns text directly so its\n// recognition path skips steps 2-4).\n//\n// **No fallback** — if doctr.cpp + GGUFs aren't available the service throws\n// a clear error and the chain in `ocr-service.ts` falls through to the next\n// backend (apple-vision on darwin) or surfaces the error to the caller.\n\nimport { logger } from \"@elizaos/core\";\nimport { getSharp } from \"./image/sharp-compat\";\nimport {\n defaultDetWeightsPath,\n defaultRecWeightsPath,\n isDoctrReady,\n loadDoctrBindings,\n} from \"./native/doctr-ffi\";\nimport type { BoundingBox, OCRResult } from \"./types\";\n\nexport interface DoctrOCRConfig {\n /** GGUF detection weights path. */\n detPath?: string;\n /** GGUF recognition weights path. */\n recPath?: string;\n /** Detection input resolution (square). Default 1024. */\n inputSize?: number;\n /** Probability threshold for the DBNet output. */\n probThreshold?: number;\n /** Minimum connected-component pixel count for a detection. */\n minComponentSize?: number;\n}\n\n/**\n * Detect platforms where Apple Vision is the better OCR choice.\n *\n * macOS Sonoma+ and iOS expose VNRecognizeTextRequest which is faster and\n * higher-quality than any community OCR for Latin scripts. The integration\n * lives in `plugin-computeruse/mobile`; we just refuse to claim availability\n * so the higher-priority Apple Vision backend wins on darwin.\n */\nexport function shouldPreferAppleVision(): boolean {\n return (\n process.platform === \"darwin\" &&\n process.env.ELIZA_DISABLE_APPLE_VISION !== \"1\"\n );\n}\n\nexport class DoctrOCRService {\n private readonly cfg: Required<\n Pick<DoctrOCRConfig, \"inputSize\" | \"probThreshold\" | \"minComponentSize\">\n > &\n DoctrOCRConfig;\n private initPromise: Promise<void> | null = null;\n private initialized = false;\n private charset: string[] = [];\n\n constructor(config: DoctrOCRConfig = {}) {\n this.cfg = {\n detPath: config.detPath ?? defaultDetWeightsPath(),\n recPath: config.recPath ?? defaultRecWeightsPath(),\n inputSize: config.inputSize ?? 1024,\n probThreshold: config.probThreshold ?? 0.3,\n minComponentSize: config.minComponentSize ?? 8,\n };\n }\n\n /**\n * Best-effort availability check. Confirms the native lib loads and the\n * GGUF files are on disk. Does NOT prove the ggml forward pass works —\n * that's discovered on the first `extractText` call.\n */\n static async isAvailable(opts?: {\n detPath?: string;\n recPath?: string;\n }): Promise<boolean> {\n const { ready } = await isDoctrReady(opts);\n return ready;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) return;\n if (this.initPromise) return this.initPromise;\n this.initPromise = this._initialize();\n return this.initPromise;\n }\n\n private async _initialize(): Promise<void> {\n const { ready, reason } = await isDoctrReady({\n detPath: this.cfg.detPath,\n recPath: this.cfg.recPath,\n });\n if (!ready) {\n throw new Error(\n `[DoctrOCR] migration in progress; GGUF not ready (${reason ?? \"unknown\"}). ` +\n `Build the native lib at plugins/plugin-vision/native/doctr.cpp and run ` +\n `scripts/convert.py to produce doctr-det.gguf + doctr-rec.gguf.`,\n );\n }\n const bindings = await loadDoctrBindings();\n if (!bindings) {\n throw new Error(\n \"[DoctrOCR] native bindings failed to load after readiness check passed\",\n );\n }\n const charsetText = await bindings.charset(this.cfg.recPath!);\n this.charset = charsetText.split(/\\r?\\n/).filter(Boolean);\n this.initialized = true;\n logger.info(\n `[DoctrOCR] initialized (det=${this.cfg.detPath}, rec=${this.cfg.recPath}, charset=${this.charset.length})`,\n );\n }\n\n async extractText(imageBuffer: Buffer): Promise<OCRResult> {\n if (!this.initialized) await this.initialize();\n const bindings = await loadDoctrBindings();\n if (!bindings) {\n throw new Error(\"[DoctrOCR] native bindings unavailable at extract time\");\n }\n\n const sharp = await getSharp();\n const meta = await sharp(imageBuffer).metadata();\n const origW = meta.width ?? 0;\n const origH = meta.height ?? 0;\n if (!origW || !origH) {\n return { text: \"\", blocks: [], fullText: \"\" };\n }\n\n const inSize = this.cfg.inputSize;\n const { data: rgb } = await sharp(imageBuffer)\n .resize(inSize, inSize, { fit: \"fill\" })\n .removeAlpha()\n .raw()\n .toBuffer({ resolveWithObject: true });\n\n const detInput = this.toCHWFloat32(rgb, inSize, inSize);\n const {\n probMap,\n h: probH,\n w: probW,\n } = await bindings.detect(this.cfg.detPath!, detInput, inSize, inSize);\n\n const xScale = origW / inSize;\n const yScale = origH / inSize;\n const regions = this.probMapToBoxes(probMap, probW, probH, xScale, yScale);\n\n const blocks: OCRResult[\"blocks\"] = [];\n for (const region of regions) {\n const recText = await this.recognizeCrop(\n bindings,\n imageBuffer,\n region.bbox,\n );\n if (!recText) continue;\n blocks.push({\n text: recText,\n bbox: region.bbox,\n confidence: region.confidence,\n });\n }\n const fullText = blocks.map((b) => b.text).join(\"\\n\");\n return { text: fullText, blocks, fullText };\n }\n\n private toCHWFloat32(rgb: Buffer, w: number, h: number): Float32Array {\n const float = new Float32Array(3 * w * h);\n const stride = w * h;\n for (let i = 0; i < stride; i++) {\n float[i] = rgb[i * 3] / 255;\n float[i + stride] = rgb[i * 3 + 1] / 255;\n float[i + 2 * stride] = rgb[i * 3 + 2] / 255;\n }\n return float;\n }\n\n /**\n * DBNet contouring: scan the probability map, group above-threshold pixels\n * into connected components, return axis-aligned bboxes in original image\n * coordinates.\n *\n * This is the same algorithm as the previous PP-OCRv5 path — it's a\n * standard DBNet post-process and works for both detection backbones.\n */\n private probMapToBoxes(\n probMap: Float32Array,\n w: number,\n h: number,\n xScale: number,\n yScale: number,\n ): Array<{ bbox: BoundingBox; confidence: number }> {\n if (!h || !w) return [];\n const threshold = this.cfg.probThreshold;\n const minSize = this.cfg.minComponentSize;\n const visited = new Uint8Array(w * h);\n const boxes: Array<{ bbox: BoundingBox; confidence: number }> = [];\n\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n const idx = y * w + x;\n if (visited[idx]) continue;\n if (probMap[idx] < threshold) continue;\n let minX = x;\n let maxX = x;\n let minY = y;\n let maxY = y;\n let probSum = 0;\n let count = 0;\n const stack: Array<[number, number]> = [[x, y]];\n while (stack.length) {\n const [cx, cy] = stack.pop()!;\n if (cx < 0 || cx >= w || cy < 0 || cy >= h) continue;\n const cidx = cy * w + cx;\n if (visited[cidx]) continue;\n const v = probMap[cidx];\n if (v < threshold) continue;\n visited[cidx] = 1;\n probSum += v;\n count++;\n if (cx < minX) minX = cx;\n if (cx > maxX) maxX = cx;\n if (cy < minY) minY = cy;\n if (cy > maxY) maxY = cy;\n stack.push([cx + 1, cy], [cx - 1, cy], [cx, cy + 1], [cx, cy - 1]);\n }\n if (count < minSize) continue;\n // DBNet unclip approximation: pad bbox before mapping back.\n const padX = Math.max(2, Math.round((maxX - minX) * 0.15));\n const padY = Math.max(2, Math.round((maxY - minY) * 0.25));\n const px = Math.max(0, minX - padX);\n const py = Math.max(0, minY - padY);\n const pxw = Math.min(w - 1, maxX + padX);\n const pyh = Math.min(h - 1, maxY + padY);\n // The probability map is at det-input resolution / 4. We mapped that\n // implicitly: probMap dims are already passed (H/4, W/4); we scale\n // through that into original-image coords via xScale*4 / yScale*4.\n const xs = xScale * 4;\n const ys = yScale * 4;\n boxes.push({\n bbox: {\n x: Math.round(px * xs),\n y: Math.round(py * ys),\n width: Math.round((pxw - px + 1) * xs),\n height: Math.round((pyh - py + 1) * ys),\n },\n confidence: probSum / count,\n });\n }\n }\n return boxes;\n }\n\n /**\n * Recognition step: crop the bbox, resize to 32xN, run through the CRNN\n * recognizer, CTC-decode the output.\n */\n private async recognizeCrop(\n bindings: Awaited<ReturnType<typeof loadDoctrBindings>>,\n imageBuffer: Buffer,\n bbox: BoundingBox,\n ): Promise<string> {\n if (!bindings) return \"\";\n if (bbox.width < 4 || bbox.height < 4) return \"\";\n const targetH = 32;\n const sharp = await getSharp();\n const cropMeta = await sharp(imageBuffer).metadata();\n if (!cropMeta.width || !cropMeta.height) return \"\";\n const safeW = Math.min(bbox.width, cropMeta.width - bbox.x);\n const safeH = Math.min(bbox.height, cropMeta.height - bbox.y);\n if (safeW <= 0 || safeH <= 0) return \"\";\n\n const aspect = safeW / safeH;\n const targetW = Math.max(16, Math.round((targetH * aspect) / 8) * 8);\n\n const { data: rgb } = await sharp(imageBuffer)\n .extract({\n left: Math.max(0, bbox.x),\n top: Math.max(0, bbox.y),\n width: safeW,\n height: safeH,\n })\n .resize(targetW, targetH, { fit: \"fill\" })\n .removeAlpha()\n .raw()\n .toBuffer({ resolveWithObject: true });\n\n const recInput = this.toCHWFloat32(rgb, targetW, targetH);\n const { logits, T, C } = await bindings.recognize(\n this.cfg.recPath!,\n recInput,\n targetH,\n targetW,\n );\n return this.ctcDecode(logits, T, C);\n }\n\n /** CTC greedy decoding. Blank index = 0. */\n private ctcDecode(logits: Float32Array, T: number, C: number): string {\n if (!T || !C) return \"\";\n const out: number[] = [];\n let prev = -1;\n for (let t = 0; t < T; t++) {\n let best = 0;\n let bestVal = logits[t * C];\n for (let c = 1; c < C; c++) {\n const v = logits[t * C + c];\n if (v > bestVal) {\n bestVal = v;\n best = c;\n }\n }\n if (best !== 0 && best !== prev) out.push(best - 1);\n prev = best;\n }\n return out\n .map((idx) => this.charset[idx] ?? \"\")\n .join(\"\")\n .replace(/\\s+/g, \" \")\n .trim();\n }\n\n async dispose(): Promise<void> {\n const bindings = await loadDoctrBindings();\n if (bindings) await bindings.dispose();\n this.initialized = false;\n this.initPromise = null;\n logger.info(\"[DoctrOCR] disposed\");\n }\n}\n",
|
|
11
|
+
"// doctr-ffi.ts — bun:ffi binding for the doctr.cpp shared library.\n//\n// The native library is built from `plugin-vision/native/doctr.cpp/` and emits\n// `libdoctr.<dylib|so|dll>`. The convention matches `plugin-local-inference`'s\n// llama.cpp binding (see that plugin's `src/native/` for the canonical pattern).\n//\n// Until the native lib has been built AND the GGUF weight files exist, every\n// public function here throws a clear error. There is no silent fallback.\n\nimport { promises as fs } from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { logger } from \"@elizaos/core\";\n\nconst MODULE_TAG = \"[doctr-ffi]\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/** Where the runtime expects to find the compiled native library. */\nfunction defaultLibraryPath(): string {\n const ext =\n process.platform === \"darwin\"\n ? \"dylib\"\n : process.platform === \"win32\"\n ? \"dll\"\n : \"so\";\n return (\n process.env.ELIZA_DOCTR_LIB ??\n path.join(\n __dirname,\n \"..\",\n \"..\",\n \"native\",\n \"doctr.cpp\",\n \"build\",\n `libdoctr.${ext}`,\n )\n );\n}\n\n/** Where the runtime expects GGUF weights. */\nexport function defaultDetWeightsPath(): string {\n const stateDir =\n process.env.ELIZA_STATE_DIR ?? path.join(os.homedir(), \".eliza\");\n return (\n process.env.ELIZA_DOCTR_DET_GGUF ??\n path.join(stateDir, \"models\", \"vision\", \"doctr-det.gguf\")\n );\n}\n\nexport function defaultRecWeightsPath(): string {\n const stateDir =\n process.env.ELIZA_STATE_DIR ?? path.join(os.homedir(), \".eliza\");\n return (\n process.env.ELIZA_DOCTR_REC_GGUF ??\n path.join(stateDir, \"models\", \"vision\", \"doctr-rec.gguf\")\n );\n}\n\n/**\n * Minimal structural type for the parts of `bun:ffi` we use. Lets the file\n * typecheck under plain Node tsc without requiring `bun-types` on every\n * downstream consumer.\n */\ninterface BunFFIModule {\n dlopen: (\n path: string,\n symbols: Record<string, { args: number[]; returns: number }>,\n ) => {\n symbols: Record<string, (...args: unknown[]) => unknown>;\n };\n FFIType: Record<\n \"cstring\" | \"pointer\" | \"i32\" | \"void\" | \"f32\" | \"u8\" | \"u32\",\n number\n >;\n ptr: (typedArray: ArrayBufferView) => unknown;\n CString: new (raw: unknown) => { toString(): string };\n}\n\ninterface DocTRBindings {\n /** Detection forward pass. Output: prob map at H/4 × W/4. */\n detect(\n detGGUFPath: string,\n rgbCHW: Float32Array,\n h: number,\n w: number,\n ): Promise<{ probMap: Float32Array; h: number; w: number }>;\n\n /** Recognition forward pass on a cropped line image. */\n recognize(\n recGGUFPath: string,\n rgbCHW: Float32Array,\n h: number,\n w: number,\n ): Promise<{ logits: Float32Array; T: number; C: number }>;\n\n /** Returns the recognition charset (utf-8, newline separated). */\n charset(recGGUFPath: string): Promise<string>;\n\n dispose(): Promise<void>;\n}\n\nlet bindingsPromise: Promise<DocTRBindings | null> | null = null;\n\n/**\n * Load the doctr.cpp shared library via `bun:ffi`. Returns null when either\n * the library or the GGUF weights are missing — the caller is expected to\n * throw a clear error in that case rather than silently fall back.\n */\nexport async function loadDoctrBindings(): Promise<DocTRBindings | null> {\n if (!bindingsPromise) {\n bindingsPromise = (async (): Promise<DocTRBindings | null> => {\n const libPath = defaultLibraryPath();\n try {\n await fs.access(libPath);\n } catch {\n logger.warn(`${MODULE_TAG} native library not found at ${libPath}`);\n return null;\n }\n\n // bun:ffi import is dynamic so the module is importable from non-bun\n // hosts (electrobun preload may run plain Node in some surfaces).\n // We avoid a static `import(\"bun:ffi\")` type reference here so plain\n // Node tsc doesn't need bun-types resolved — the runtime guard above\n // already gates the call site.\n let bunFFI: BunFFIModule | null = null;\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const dynImport = new Function(\"spec\", \"return import(spec)\") as (\n s: string,\n ) => Promise<BunFFIModule>;\n bunFFI = await dynImport(\"bun:ffi\");\n } catch {\n logger.warn(\n `${MODULE_TAG} bun:ffi unavailable — doctr.cpp requires bun runtime.`,\n );\n return null;\n }\n\n const { dlopen, FFIType, ptr, CString } = bunFFI;\n\n // The native symbol table — names match `include/doctr.h`.\n // NOTE: until the C++ side is fully wired against ggml the symbols exist\n // but their `_run` functions return DOCTR_ERR_BACKEND. The TS adapter\n // converts that to a thrown Error so the OCR service falls through to\n // its next backend (apple-vision on darwin) or throws to the caller.\n let lib: ReturnType<BunFFIModule[\"dlopen\"]>;\n try {\n lib = dlopen(libPath, {\n doctr_det_init: { args: [FFIType.cstring], returns: FFIType.pointer },\n doctr_det_run: {\n args: [\n FFIType.pointer,\n FFIType.pointer,\n FFIType.i32,\n FFIType.i32,\n FFIType.pointer,\n FFIType.pointer,\n FFIType.pointer,\n ],\n returns: FFIType.i32,\n },\n doctr_det_free: { args: [FFIType.pointer], returns: FFIType.void },\n doctr_rec_init: { args: [FFIType.cstring], returns: FFIType.pointer },\n doctr_rec_run: {\n args: [\n FFIType.pointer,\n FFIType.pointer,\n FFIType.i32,\n FFIType.i32,\n FFIType.pointer,\n FFIType.pointer,\n FFIType.pointer,\n ],\n returns: FFIType.i32,\n },\n doctr_rec_charset: {\n args: [FFIType.pointer],\n returns: FFIType.cstring,\n },\n doctr_rec_free: { args: [FFIType.pointer], returns: FFIType.void },\n });\n } catch (error) {\n logger.warn(\n `${MODULE_TAG} dlopen failed for ${libPath}:`,\n error instanceof Error ? error.message : String(error),\n );\n return null;\n }\n\n const detCtxCache = new Map<string, unknown>();\n const recCtxCache = new Map<string, unknown>();\n\n async function ensureDetCtx(gguf: string): Promise<unknown> {\n const cached = detCtxCache.get(gguf);\n if (cached) return cached;\n const cstr = Buffer.from(gguf + \"\\0\", \"utf-8\");\n const handle = lib.symbols.doctr_det_init(ptr(cstr));\n if (!handle) {\n throw new Error(\n `doctr_det_init failed for ${gguf} — GGUF likely not present or invalid.`,\n );\n }\n detCtxCache.set(gguf, handle);\n return handle;\n }\n\n async function ensureRecCtx(gguf: string): Promise<unknown> {\n const cached = recCtxCache.get(gguf);\n if (cached) return cached;\n const cstr = Buffer.from(gguf + \"\\0\", \"utf-8\");\n const handle = lib.symbols.doctr_rec_init(ptr(cstr));\n if (!handle) {\n throw new Error(\n `doctr_rec_init failed for ${gguf} — GGUF likely not present or invalid.`,\n );\n }\n recCtxCache.set(gguf, handle);\n return handle;\n }\n\n const bindings: DocTRBindings = {\n async detect(gguf, rgbCHW, h, w) {\n const ctx = await ensureDetCtx(gguf);\n const outH = new Int32Array(1);\n const outW = new Int32Array(1);\n // Worst case (h/4 × w/4) buffer pre-allocation.\n const prob = new Float32Array((h / 4) * (w / 4));\n const rc = lib.symbols.doctr_det_run(\n ctx as never,\n ptr(rgbCHW) as never,\n h,\n w,\n ptr(prob) as never,\n ptr(outH) as never,\n ptr(outW) as never,\n );\n if (rc !== 0) {\n throw new Error(\n `doctr_det_run failed (code=${rc}) — ggml backend not yet wired or weights not built.`,\n );\n }\n return { probMap: prob, h: outH[0], w: outW[0] };\n },\n\n async recognize(gguf, rgbCHW, h, w) {\n const ctx = await ensureRecCtx(gguf);\n const outT = new Int32Array(1);\n const outC = new Int32Array(1);\n // Generous upper bound: max charset ~256 entries, T = w/8.\n const logits = new Float32Array(Math.ceil(w / 8) * 512);\n const rc = lib.symbols.doctr_rec_run(\n ctx as never,\n ptr(rgbCHW) as never,\n h,\n w,\n ptr(logits) as never,\n ptr(outT) as never,\n ptr(outC) as never,\n );\n if (rc !== 0) {\n throw new Error(\n `doctr_rec_run failed (code=${rc}) — ggml backend not yet wired or weights not built.`,\n );\n }\n return { logits, T: outT[0], C: outC[0] };\n },\n\n async charset(gguf) {\n const ctx = await ensureRecCtx(gguf);\n const ptrChars = lib.symbols.doctr_rec_charset(ctx as never);\n if (!ptrChars) return \"\";\n return new CString(ptrChars as never).toString();\n },\n\n async dispose() {\n for (const handle of detCtxCache.values()) {\n lib.symbols.doctr_det_free(handle as never);\n }\n for (const handle of recCtxCache.values()) {\n lib.symbols.doctr_rec_free(handle as never);\n }\n detCtxCache.clear();\n recCtxCache.clear();\n },\n };\n\n return bindings;\n })();\n }\n return bindingsPromise;\n}\n\n/**\n * `true` when both the native library and the GGUF weights exist on disk. Does\n * not actually initialize anything — callers should still expect the C++ side\n * to return DOCTR_ERR_BACKEND until the ggml graph is wired.\n */\nexport async function isDoctrReady(opts?: {\n detPath?: string;\n recPath?: string;\n}): Promise<{ ready: boolean; reason?: string }> {\n const detPath = opts?.detPath ?? defaultDetWeightsPath();\n const recPath = opts?.recPath ?? defaultRecWeightsPath();\n try {\n await fs.access(detPath);\n } catch {\n return { ready: false, reason: `detection GGUF missing: ${detPath}` };\n }\n try {\n await fs.access(recPath);\n } catch {\n return { ready: false, reason: `recognition GGUF missing: ${recPath}` };\n }\n const bindings = await loadDoctrBindings();\n if (!bindings) {\n return {\n ready: false,\n reason: `native library failed to load (expected at ${defaultLibraryPath()})`,\n };\n }\n return { ready: true };\n}\n",
|
|
53
12
|
"import { parentPort } from \"node:worker_threads\";\n\n/**\n * Worker-safe logger that sends log messages to the main thread\n */\nexport const logger = {\n info: (message: string, ...args: unknown[]) => {\n const logMessage = {\n type: \"log\",\n level: \"info\",\n message,\n args,\n timestamp: new Date().toISOString(),\n };\n\n if (parentPort) {\n parentPort.postMessage(logMessage);\n } else {\n console.log(`[INFO] ${message}`, ...args);\n }\n },\n\n warn: (message: string, ...args: unknown[]) => {\n const logMessage = {\n type: \"log\",\n level: \"warn\",\n message,\n args,\n timestamp: new Date().toISOString(),\n };\n\n if (parentPort) {\n parentPort.postMessage(logMessage);\n } else {\n console.warn(`[WARN] ${message}`, ...args);\n }\n },\n\n error: (message: string, ...args: unknown[]) => {\n const logMessage = {\n type: \"log\",\n level: \"error\",\n message,\n args,\n timestamp: new Date().toISOString(),\n };\n\n if (parentPort) {\n parentPort.postMessage(logMessage);\n } else {\n console.error(`[ERROR] ${message}`, ...args);\n }\n },\n\n debug: (message: string, ...args: unknown[]) => {\n const logMessage = {\n type: \"log\",\n level: \"debug\",\n message,\n args,\n timestamp: new Date().toISOString(),\n };\n\n if (parentPort) {\n parentPort.postMessage(logMessage);\n } else {\n console.debug(`[DEBUG] ${message}`, ...args);\n }\n },\n};\n"
|
|
54
13
|
],
|
|
55
|
-
"mappings": "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",
|
|
56
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "CC723E052C493AA064756E2164756E21",
|
|
57
16
|
"names": []
|
|
58
17
|
}
|