@php-wasm/cli 3.0.22 → 3.0.31
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/main.js +67 -27
- package/main.js.map +1 -1
- package/package.json +10 -7
package/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../../../../packages/php-wasm/node-polyfills/src/lib/current-js-runtime.ts","../../../../packages/php-wasm/node-polyfills/src/lib/blob.ts","../../../../packages/php-wasm/node-polyfills/src/lib/custom-event.ts","../../../../packages/php-wasm/logger/src/lib/handlers/log-event.ts","../../../../packages/php-wasm/logger/src/lib/handlers/log-to-console.ts","../../../../packages/php-wasm/logger/src/lib/handlers/log-to-memory.ts","../../../../packages/php-wasm/logger/src/lib/logger.ts","../../../../node_modules/events/events.js","../../../../packages/php-wasm/xdebug-bridge/src/lib/cdp-server.ts","../../../../packages/php-wasm/xdebug-bridge/src/lib/dbgp-session.ts","../../../../node_modules/yargs-parser/build/lib/string-utils.js","../../../../node_modules/yargs-parser/build/lib/tokenize-arg-string.js","../../../../node_modules/yargs-parser/build/lib/yargs-parser-types.js","../../../../node_modules/yargs-parser/build/lib/yargs-parser.js","../../../../node_modules/yargs-parser/build/lib/index.js","../../../../node_modules/y18n/build/lib/platform-shims/node.js","../../../../node_modules/y18n/build/lib/index.js","../../../../node_modules/y18n/index.mjs","../../../../node_modules/yargs/lib/platform-shims/esm.mjs","../../../../node_modules/xml2js/lib/defaults.js","../../../../node_modules/xmlbuilder/lib/Utility.js","../../../../node_modules/xmlbuilder/lib/XMLDOMImplementation.js","../../../../node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js","../../../../node_modules/xmlbuilder/lib/XMLDOMStringList.js","../../../../node_modules/xmlbuilder/lib/XMLDOMConfiguration.js","../../../../node_modules/xmlbuilder/lib/NodeType.js","../../../../node_modules/xmlbuilder/lib/XMLAttribute.js","../../../../node_modules/xmlbuilder/lib/XMLNamedNodeMap.js","../../../../node_modules/xmlbuilder/lib/XMLElement.js","../../../../node_modules/xmlbuilder/lib/XMLCharacterData.js","../../../../node_modules/xmlbuilder/lib/XMLCData.js","../../../../node_modules/xmlbuilder/lib/XMLComment.js","../../../../node_modules/xmlbuilder/lib/XMLDeclaration.js","../../../../node_modules/xmlbuilder/lib/XMLDTDAttList.js","../../../../node_modules/xmlbuilder/lib/XMLDTDEntity.js","../../../../node_modules/xmlbuilder/lib/XMLDTDElement.js","../../../../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../../../../node_modules/xmlbuilder/lib/XMLDocType.js","../../../../node_modules/xmlbuilder/lib/XMLRaw.js","../../../../node_modules/xmlbuilder/lib/XMLText.js","../../../../node_modules/xmlbuilder/lib/XMLProcessingInstruction.js","../../../../node_modules/xmlbuilder/lib/XMLDummy.js","../../../../node_modules/xmlbuilder/lib/XMLNodeList.js","../../../../node_modules/xmlbuilder/lib/DocumentPosition.js","../../../../node_modules/xmlbuilder/lib/XMLNode.js","../../../../node_modules/xmlbuilder/lib/XMLStringifier.js","../../../../node_modules/xmlbuilder/lib/WriterState.js","../../../../node_modules/xmlbuilder/lib/XMLWriterBase.js","../../../../node_modules/xmlbuilder/lib/XMLStringWriter.js","../../../../node_modules/xmlbuilder/lib/XMLDocument.js","../../../../node_modules/xmlbuilder/lib/XMLDocumentCB.js","../../../../node_modules/xmlbuilder/lib/XMLStreamWriter.js","../../../../node_modules/xmlbuilder/lib/index.js","../../../../node_modules/xml2js/lib/builder.js","../../../../node_modules/base64-js/index.js","../../../../node_modules/ieee754/index.js","../../../../node_modules/buffer/index.js","../../../../node_modules/safe-buffer/index.js","../../../../node_modules/string_decoder/lib/string_decoder.js","../../../../node_modules/sax/lib/sax.js","../../../../node_modules/xml2js/lib/bom.js","../../../../node_modules/xml2js/lib/processors.js","../../../../node_modules/xml2js/lib/parser.js","../../../../node_modules/xml2js/lib/xml2js.js","../../../../packages/php-wasm/xdebug-bridge/src/lib/xdebug-cdp-bridge.ts","../../../../packages/php-wasm/xdebug-bridge/src/lib/start-bridge.ts","../../../../packages/php-wasm/cli/src/main.ts"],"sourcesContent":["export const currentJsRuntime = (function () {\n\tif (typeof process !== 'undefined' && process.release?.name === 'node') {\n\t\treturn 'NODE';\n\t} else if (typeof window !== 'undefined') {\n\t\treturn 'WEB';\n\t} else if (\n\t\t// @ts-ignore\n\t\ttypeof WorkerGlobalScope !== 'undefined' &&\n\t\t// @ts-ignore\n\t\tself instanceof (WorkerGlobalScope as any)\n\t) {\n\t\treturn 'WORKER';\n\t} else {\n\t\treturn 'NODE';\n\t}\n})();\n","import { currentJsRuntime } from './current-js-runtime';\n\n// Without this check, the polyfills below would also be applied\n// in web browsers. Unfortunately, Safari doesn't sypport BYOB streams\n// and doesn't support the polyfill provided here. Let's only apply\n// those polyfills in Node.js environments.\nif (currentJsRuntime === 'NODE') {\n\t/**\n\t * WordPress Playground heavily realies on the File class. This module\n\t * polyfill the File class for the different environments where\n\t * WordPress Playground may run.\n\t */\n\tif (typeof File === 'undefined') {\n\t\t/**\n\t\t * Polyfill the File class that isn't shipped in Node.js version 18.\n\t\t *\n\t\t * Blob conveniently provides a lot of the same methods as File, we\n\t\t * just need to implement a few File-specific properties.\n\t\t */\n\t\tclass File extends Blob {\n\t\t\treadonly name: string;\n\t\t\treadonly lastModified: number;\n\t\t\treadonly lastModifiedDate: Date;\n\t\t\twebkitRelativePath: any;\n\t\t\tconstructor(\n\t\t\t\tsources: BlobPart[],\n\t\t\t\tfileName: string,\n\t\t\t\toptions?: FilePropertyBag\n\t\t\t) {\n\t\t\t\tsuper(sources);\n\t\t\t\t/*\n\t\t\t\t * Compute a valid last modified date as that's what the\n\t\t\t\t * browsers do:\n\t\t\t\t *\n\t\t\t\t * ```\n\t\t\t\t * > new File([], '').lastModifiedDate\n\t\t\t\t * Sat Dec 16 2023 10:07:53 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t *\n\t\t\t\t * > new File([], '', { lastModified: NaN }).lastModifiedDate\n\t\t\t\t * Thu Jan 01 1970 01:00:00 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t *\n\t\t\t\t * > new File([], '', { lastModified: 'string' }).lastModifiedDate\n\t\t\t\t * Thu Jan 01 1970 01:00:00 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t *\n\t\t\t\t * > new File([], '', { lastModified: {} }).lastModifiedDate\n\t\t\t\t * Thu Jan 01 1970 01:00:00 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t * ```\n\t\t\t\t */\n\t\t\t\tlet date;\n\t\t\t\tif (options?.lastModified) {\n\t\t\t\t\tdate = new Date();\n\t\t\t\t}\n\t\t\t\tif (!date || isNaN(date.getFullYear())) {\n\t\t\t\t\tdate = new Date();\n\t\t\t\t}\n\t\t\t\tthis.lastModifiedDate = date;\n\t\t\t\tthis.lastModified = date.getMilliseconds();\n\t\t\t\tthis.name = fileName || '';\n\t\t\t}\n\t\t}\n\t\tglobal.File = File;\n\t}\n\n\t// eslint-disable-next-line no-inner-declarations\n\tfunction asPromise<T>(obj: FileReader) {\n\t\treturn new Promise<T>(function (resolve, reject) {\n\t\t\tobj.onload = obj.onerror = function (event: Event) {\n\t\t\t\tobj.onload = obj.onerror = null;\n\n\t\t\t\tif (event.type === 'load') {\n\t\t\t\t\tresolve(obj.result as T);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Failed to read the blob/file'));\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * File is a subclass of Blob. Let's polyfill the following Blob\n\t * methods that are missing in JSDOM:\n\t *\n\t * – Blob.text()\n\t * – Blob.stream()\n\t * – Blob.arrayBuffer()\n\t *\n\t * See the related JSDom issue:\n\t *\n\t * – [Implement Blob.stream, Blob.text and Blob.arrayBuffer](https://github.com/jsdom/jsdom/issues/2555).\n\t *\n\t * @source `blob-polyfill` npm package.\n\t * * By Eli Grey, https://eligrey.com\n\t * * By Jimmy Wärting, https://github.com/jimmywarting\n\t */\n\tif (typeof Blob.prototype.arrayBuffer === 'undefined') {\n\t\tBlob.prototype.arrayBuffer = function arrayBuffer() {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer(this);\n\t\t\treturn asPromise<Uint8Array>(reader);\n\t\t};\n\t}\n\n\tif (typeof Blob.prototype.text === 'undefined') {\n\t\tBlob.prototype.text = function text() {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsText(this);\n\t\t\treturn asPromise<string>(reader);\n\t\t};\n\t}\n\n\t/**\n\t * Detects if BYOB (Bring Your Own Buffer) streams are supported\n\t * in the current environment.\n\t *\n\t * BYOB is a new feature in the Streams API that allows reading\n\t * an arbitrary number of bytes from a stream. It's not supported\n\t * in older versions of Node.js.\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader\n\t */\n\t// eslint-disable-next-line no-inner-declarations\n\tfunction isByobSupported() {\n\t\tconst inputBytes = new Uint8Array([1, 2, 3, 4]);\n\t\tconst file = new File([inputBytes], 'test');\n\t\tconst stream = file.stream();\n\t\ttry {\n\t\t\t// This throws on older versions of node:\n\t\t\tstream.getReader({ mode: 'byob' });\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Polyfill the stream() method if it either doesn't exist,\n\t * or is an older version shipped with e.g. Node.js 18 where\n\t * BYOB streams seem to be unsupported.\n\t */\n\tif (typeof Blob.prototype.stream === 'undefined' || !isByobSupported()) {\n\t\tBlob.prototype.stream = function () {\n\t\t\tlet position = 0;\n\t\t\t// eslint-disable-next-line\n\t\t\tconst blob = this;\n\t\t\treturn new ReadableStream({\n\t\t\t\ttype: 'bytes',\n\t\t\t\t// 0.5 MB seems like a reasonable chunk size, let's adjust\n\t\t\t\t// this if needed.\n\t\t\t\tautoAllocateChunkSize: 512 * 1024,\n\n\t\t\t\tasync pull(controller) {\n\t\t\t\t\tconst view = controller.byobRequest!.view;\n\n\t\t\t\t\t// Read the next chunk of data:\n\t\t\t\t\tconst chunk = blob.slice(\n\t\t\t\t\t\tposition,\n\t\t\t\t\t\tposition + view!.byteLength\n\t\t\t\t\t);\n\t\t\t\t\tconst buffer = await chunk.arrayBuffer();\n\t\t\t\t\tconst uint8array = new Uint8Array(buffer);\n\n\t\t\t\t\t// Emit that chunk:\n\t\t\t\t\tnew Uint8Array(view!.buffer).set(uint8array);\n\t\t\t\t\tconst bytesRead = uint8array.byteLength;\n\t\t\t\t\tcontroller.byobRequest!.respond(bytesRead);\n\n\t\t\t\t\t// Bump the position and close this stream once\n\t\t\t\t\t// we've read the entire blob.\n\t\t\t\t\tposition += bytesRead;\n\t\t\t\t\tif (position >= blob.size) {\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t};\n\t}\n}\n\nexport default {};\n","import { currentJsRuntime } from './current-js-runtime';\n\nif (currentJsRuntime === 'NODE' && typeof CustomEvent === 'undefined') {\n\tclass CustomEvent<T = any> extends Event {\n\t\treadonly detail: T;\n\t\tconstructor(\n\t\t\tname: string,\n\t\t\toptions: {\n\t\t\t\tdetail?: T;\n\t\t\t\tbubbles?: boolean;\n\t\t\t\tcancellable?: boolean;\n\t\t\t\tcomposed?: boolean;\n\t\t\t} = {}\n\t\t) {\n\t\t\tsuper(name, options);\n\t\t\t/*\n\t\t\t * The bang symbol (`!`) here is a lie to make TypeScript happy.\n\t\t\t *\n\t\t\t * Without the bang TS has the following complaint:\n\t\t\t *\n\t\t\t * > T | undefined is not assignable to type T\n\t\t\t *\n\t\t\t * In reality, it's absolutely fine for T (or `options.detail`)\n\t\t\t * to be undefined. However, the CustomEvent interface shipped\n\t\t\t * with TypeScript doesn't think so and marks `this.details` as\n\t\t\t * a required property.\n\t\t\t *\n\t\t\t * This little and harmless trick silences that error.\n\t\t\t */\n\t\t\tthis.detail = options.detail!;\n\t\t}\n\t\tinitCustomEvent(): void {}\n\t}\n\tglobalThis.CustomEvent = CustomEvent;\n}\n","import type { LogHandler } from '../log-handlers';\nimport { type Log, logger } from '../logger';\n\nexport const logEventType = 'playground-log';\n\nexport const logEvent: LogHandler = (log: Log, ...args: any[]): void => {\n\tlogger.dispatchEvent(\n\t\tnew CustomEvent(logEventType, {\n\t\t\tdetail: {\n\t\t\t\tlog,\n\t\t\t\targs,\n\t\t\t},\n\t\t})\n\t);\n};\n","import type { LogHandler } from '../log-handlers';\nimport { type Log, LogSeverity, prepareLogMessage } from '../logger';\n\n/**\n * Log message to the console.\n */\nexport const logToConsole: LogHandler = (log: Log, ...args: any[]): void => {\n\tif (typeof log.message === 'string') {\n\t\t// Some errors have a read-only message property where direct\n\t\t// assignment will throw an error. The assignment is merely for\n\t\t// formatting, so let's assign with Reflect.set and avoid the error.\n\t\tReflect.set(log, 'message', prepareLogMessage(log.message));\n\t} else if (log.message.message && typeof log.message.message === 'string') {\n\t\t// Some errors have a read-only message property where direct\n\t\t// assignment will throw an error. The assignment is merely for\n\t\t// formatting, so let's assign with Reflect.set and avoid the error.\n\t\tReflect.set(\n\t\t\tlog.message,\n\t\t\t'message',\n\t\t\tprepareLogMessage(log.message.message)\n\t\t);\n\t}\n\t/* eslint-disable no-console */\n\tswitch (log.severity) {\n\t\tcase LogSeverity.Debug:\n\t\t\tconsole.debug(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Info:\n\t\t\tconsole.info(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Warn:\n\t\t\tconsole.warn(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Error:\n\t\t\tconsole.error(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Fatal:\n\t\t\tconsole.error(log.message, ...args);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log(log.message, ...args);\n\t}\n\t/* eslint-enable no-console */\n};\n","import type { LogHandler } from '../log-handlers';\nimport { formatLogEntry, type Log, LogPrefix } from '../logger';\n\nconst prepareLogMessage = (logMessage: object): string => {\n\tif (logMessage instanceof Error) {\n\t\treturn [logMessage.message, logMessage.stack].join('\\n');\n\t}\n\treturn JSON.stringify(logMessage, null, 2);\n};\n\nexport const logs: string[] = [];\n\nconst addToLogArray = (message: string): void => {\n\tlogs.push(message);\n};\n\n/**\n * Log to memory\n */\nexport const logToMemory: LogHandler = (log: Log): void => {\n\tif (log.raw === true) {\n\t\taddToLogArray(log.message);\n\t} else {\n\t\tconst message = formatLogEntry(\n\t\t\ttypeof log.message === 'object'\n\t\t\t\t? prepareLogMessage(log.message)\n\t\t\t\t: log.message,\n\t\t\tlog.severity,\n\t\t\tlog.prefix ?? LogPrefix.JS\n\t\t);\n\t\taddToLogArray(message);\n\t}\n};\n\nexport const clearMemoryLogs = (): void => {\n\tlogs.length = 0;\n};\n","import { logEvent } from './handlers/log-event';\nimport {\n\tlogToMemory,\n\tlogToConsole,\n\tlogs,\n\ttype LogHandler,\n} from './log-handlers';\n\nexport { logEventType } from './handlers/log-event';\n\nexport { errorLogPath } from './collectors/collect-php-logs';\n\nexport type Log = {\n\tmessage: any;\n\tseverity: LogSeverity;\n\tprefix?: LogPrefix;\n\traw?: boolean;\n};\n\n/**\n * Log severity levels.\n */\nexport const LogSeverity = {\n\tFatal: { name: 'fatal', level: 0 },\n\tError: { name: 'error', level: 1 },\n\tWarn: { name: 'warn', level: 2 },\n\tLog: { name: 'log', level: 3 },\n\tInfo: { name: 'info', level: 4 },\n\tDebug: { name: 'debug', level: 5 },\n} as const;\n\nexport type LogSeverity = (typeof LogSeverity)[keyof typeof LogSeverity];\n\n/**\n * Log prefix.\n */\nexport const LogPrefix = {\n\tWASM: 'Wasm Crash',\n\tPHP: 'PHP',\n\tJS: 'JavaScript',\n} as const;\n\nexport type LogPrefix = (typeof LogPrefix)[keyof typeof LogPrefix];\n\n/**\n * A logger for Playground.\n */\nexport class Logger extends EventTarget {\n\tpublic readonly fatalErrorEvent = 'playground-fatal-error';\n\tprivate readonly handlers: LogHandler[];\n\tprivate severity: LogSeverity = LogSeverity.Info;\n\n\t// constructor\n\tconstructor(\n\t\t// Log handlers\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n\t\thandlers: LogHandler[] = []\n\t) {\n\t\tsuper();\n\t\tthis.handlers = handlers;\n\t}\n\n\t/**\n\t * Get all logs.\n\t * @returns string[]\n\t */\n\tpublic getLogs(): string[] {\n\t\tif (!this.handlers.includes(logToMemory)) {\n\t\t\tthis\n\t\t\t\t.error(`Logs aren't stored because the logToMemory handler isn't registered.\n\t\t\t\tIf you're using a custom logger instance, make sure to register logToMemory handler.\n\t\t\t`);\n\t\t\treturn [];\n\t\t}\n\t\treturn [...logs];\n\t}\n\n\t/**\n\t * Log message with severity.\n\t *\n\t * @param log Log\n\t * @param args any\n\t */\n\tpublic logMessage(\n\t\tlog: Omit<Log, 'severity'> & { severity?: LogSeverity },\n\t\t...args: any[]\n\t): void {\n\t\tconst logWithSeverity: Log = {\n\t\t\t...log,\n\t\t\tseverity: log.severity ?? LogSeverity.Log,\n\t\t};\n\t\tfor (const handler of this.handlers) {\n\t\t\tif (logWithSeverity.severity.level <= this.severity.level) {\n\t\t\t\thandler(logWithSeverity, ...args);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Filter message based on severity\n\t * @param severity LogSeverity\n\t */\n\tpublic setSeverityFilterLevel(severity: LogSeverity): void {\n\t\tthis.severity = severity;\n\t}\n\n\t/**\n\t * Log message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic log(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Log,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log debug message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic debug(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Debug,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log info message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic info(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Info,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log warning message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic warn(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Warn,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log error message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic error(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Error,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n}\n\nconst getDefaultHandlers = () => {\n\ttry {\n\t\tif (process.env['NODE_ENV'] === 'test') {\n\t\t\treturn [logToMemory, logEvent];\n\t\t}\n\t} catch {\n\t\t// Process.env is not available in the browser\n\t}\n\treturn [logToMemory, logToConsole, logEvent];\n};\n\n/**\n * The logger instance.\n */\nexport const logger: Logger = new Logger(getDefaultHandlers());\n\nexport const prepareLogMessage = (message: string) => {\n\treturn message.replace(/\\t/g, '');\n};\n\nexport const formatLogEntry = (\n\tmessage: string,\n\tseverity: LogSeverity,\n\tprefix: string\n): string => {\n\tconst date = new Date();\n\tconst formattedDate = new Intl.DateTimeFormat('en-GB', {\n\t\tyear: 'numeric',\n\t\tmonth: 'short',\n\t\tday: '2-digit',\n\t\ttimeZone: 'UTC',\n\t})\n\t\t.format(date)\n\t\t.replace(/ /g, '-');\n\n\tconst formattedTime = new Intl.DateTimeFormat('en-GB', {\n\t\thour: '2-digit',\n\t\tminute: '2-digit',\n\t\tsecond: '2-digit',\n\t\thour12: false,\n\t\ttimeZone: 'UTC',\n\t\ttimeZoneName: 'short',\n\t}).format(date);\n\tconst now = formattedDate + ' ' + formattedTime;\n\tmessage = prepareLogMessage(message);\n\treturn `[${now}] ${prefix} ${severity.name}: ${message}`;\n};\n\n/**\n * Add a listener for the Playground crashes.\n * These crashes include Playground errors like Asyncify errors.\n * The callback function will receive an Event object with logs in the detail\n * property.\n *\n * @param loggerInstance The logger instance\n * @param callback The callback function\n */\nexport const addCrashListener = (\n\tloggerInstance: Logger,\n\tcallback: EventListenerOrEventListenerObject\n) => {\n\tloggerInstance.addEventListener(loggerInstance.fatalErrorEvent, callback);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { logger } from '@php-wasm/logger';\nimport { EventEmitter } from 'events';\nimport { type WebSocket, WebSocketServer } from 'ws';\n\nexport class CDPServer extends EventEmitter {\n\tprivate wss: WebSocketServer;\n\tprivate ws: WebSocket | null = null;\n\tprivate connected = false;\n\tprivate buffer: any[] = [];\n\n\tconstructor(port = 9229) {\n\t\tsuper();\n\t\tthis.wss = new WebSocketServer({ port: port });\n\t\tthis.wss.on('connection', (ws: WebSocket) => {\n\t\t\t// Only one client at a time\n\t\t\tif (this.ws) {\n\t\t\t\tws.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.ws = ws;\n\t\t\tthis.emit('clientConnected');\n\t\t\tws.on('message', (data) => {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t'\\x1b[1;32m[CDP][received]\\x1b[0m',\n\t\t\t\t\tdata.toString()\n\t\t\t\t);\n\t\t\t\tlet message: any;\n\t\t\t\ttry {\n\t\t\t\t\tmessage = JSON.parse(data.toString());\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.connected) {\n\t\t\t\t\tthis.emit('message', message);\n\t\t\t\t} else {\n\t\t\t\t\tthis.buffer.push(message);\n\t\t\t\t}\n\t\t\t});\n\t\t\tws.on('close', () => {\n\t\t\t\tthis.ws = null;\n\t\t\t\tthis.emit('clientDisconnected');\n\t\t\t});\n\t\t\tws.on('error', (err) => {\n\t\t\t\tthis.emit('error', err);\n\t\t\t});\n\t\t});\n\n\t\t// When a new 'message' listener is registered,\n\t\t// it replays any buffered messages on the next\n\t\t// tick. This ensures that the listener receives\n\t\t// all messages that arrived before it was opened.\n\t\t// Once replayed, it clears the buffer and marks\n\t\t// the connection as established.\n\t\tthis.on('newListener', (event) => {\n\t\t\tif (event === 'message') {\n\t\t\t\tprocess.nextTick(() => {\n\t\t\t\t\tfor (const message of this.buffer) {\n\t\t\t\t\t\tthis.emit('message', message);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.buffer = [];\n\n\t\t\t\t\tthis.connected = true;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tsendMessage(message: any) {\n\t\tif (!this.ws || this.ws.readyState !== this.ws.OPEN) {\n\t\t\treturn;\n\t\t}\n\t\tconst json = JSON.stringify(message);\n\t\tlogger.debug('\\x1b[1;32m[CDP][send]\\x1b[0m', json);\n\t\tthis.ws.send(json);\n\t}\n\n\tclose() {\n\t\tthis.wss.close();\n\t}\n}\n","import { logger } from '@php-wasm/logger';\nimport { EventEmitter } from 'events';\nimport net from 'net';\n\nexport class DbgpSession extends EventEmitter {\n\tprivate server: net.Server;\n\tprivate socket: net.Socket | null = null;\n\tprivate buffer = '';\n\tprivate expectedLength: number | null = null;\n\n\tconstructor(port = 9003) {\n\t\tsuper();\n\t\tthis.server = net.createServer();\n\t\tthis.server.on('connection', (socket) => {\n\t\t\t// Only allow one connection (single-session)\n\t\t\tif (this.socket) {\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.socket = socket;\n\t\t\tsocket.setEncoding('utf8');\n\t\t\tthis.emit('connected');\n\t\t\tsocket.on('data', (data: Buffer) => this.onData(data.toString()));\n\t\t\tsocket.on('close', () => {\n\t\t\t\tthis.socket = null;\n\t\t\t\tthis.emit('disconnected');\n\t\t\t});\n\t\t\tsocket.on('error', (err) => {\n\t\t\t\t// Forward error events if needed\n\t\t\t\tthis.emit('error', err);\n\t\t\t});\n\t\t});\n\t\tthis.server.listen(port);\n\t}\n\n\tprivate onData(data: string) {\n\t\tlogger.debug('\\x1b[1;32m[XDebug][received]]\\x1b[0m', data);\n\t\tthis.buffer += data;\n\t\twhile (true) {\n\t\t\tif (this.expectedLength === null) {\n\t\t\t\t// Look for the separator for length\n\t\t\t\tconst nullIndex = this.buffer.indexOf('\\x00');\n\t\t\t\tif (nullIndex === -1) {\n\t\t\t\t\t// Wait for more data\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst lengthStr = this.buffer.substring(0, nullIndex);\n\t\t\t\tconst length = parseInt(lengthStr, 10);\n\t\t\t\tif (isNaN(length)) {\n\t\t\t\t\t// Invalid length, reset buffer to be safe\n\t\t\t\t\tthis.buffer = '';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.expectedLength = length;\n\t\t\t\t// Remove the length part and null terminator from buffer\n\t\t\t\tthis.buffer = this.buffer.slice(nullIndex + 1);\n\t\t\t}\n\t\t\tif (this.expectedLength !== null) {\n\t\t\t\tif (this.buffer.length >= this.expectedLength) {\n\t\t\t\t\tconst xml = this.buffer.substring(0, this.expectedLength);\n\t\t\t\t\tthis.buffer = this.buffer.slice(this.expectedLength);\n\t\t\t\t\t// Remove trailing null of the message if present\n\t\t\t\t\tif (this.buffer.startsWith('\\x00')) {\n\t\t\t\t\t\tthis.buffer = this.buffer.slice(1);\n\t\t\t\t\t}\n\t\t\t\t\t// Reset expectedLength for next message\n\t\t\t\t\tconst msg = xml.trim();\n\t\t\t\t\tthis.expectedLength = null;\n\t\t\t\t\t// Emit the raw XML message\n\t\t\t\t\tthis.emit('message', msg);\n\t\t\t\t\t// Continue loop in case multiple messages are in buffer\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tsendCommand(command: string) {\n\t\tif (!this.socket) return;\n\t\t// Commands must end with null terminator\n\t\tlogger.debug('\\x1b[1;32m[XDebug][send]\\x1b[0m', command);\n\t\tthis.socket.write(command + '\\x00');\n\t}\n\n\tclose() {\n\t\tthis.server.close();\n\t}\n}\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nexport function camelCase(str) {\n // Handle the case where an argument is provided as camel case, e.g., fooBar.\n // by ensuring that the string isn't already mixed case:\n const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();\n if (!isCamelCase) {\n str = str.toLowerCase();\n }\n if (str.indexOf('-') === -1 && str.indexOf('_') === -1) {\n return str;\n }\n else {\n let camelcase = '';\n let nextChrUpper = false;\n const leadingHyphens = str.match(/^-+/);\n for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) {\n let chr = str.charAt(i);\n if (nextChrUpper) {\n nextChrUpper = false;\n chr = chr.toUpperCase();\n }\n if (i !== 0 && (chr === '-' || chr === '_')) {\n nextChrUpper = true;\n }\n else if (chr !== '-' && chr !== '_') {\n camelcase += chr;\n }\n }\n return camelcase;\n }\n}\nexport function decamelize(str, joinString) {\n const lowercase = str.toLowerCase();\n joinString = joinString || '-';\n let notCamelcase = '';\n for (let i = 0; i < str.length; i++) {\n const chrLower = lowercase.charAt(i);\n const chrString = str.charAt(i);\n if (chrLower !== chrString && i > 0) {\n notCamelcase += `${joinString}${lowercase.charAt(i)}`;\n }\n else {\n notCamelcase += chrString;\n }\n }\n return notCamelcase;\n}\nexport function looksLikeNumber(x) {\n if (x === null || x === undefined)\n return false;\n // if loaded from config, may already be a number.\n if (typeof x === 'number')\n return true;\n // hexadecimal.\n if (/^0x[0-9a-f]+$/i.test(x))\n return true;\n // don't treat 0123 as a number; as it drops the leading '0'.\n if (/^0[^.]/.test(x))\n return false;\n return /^[-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\n// take an un-split argv string and tokenize it.\nexport function tokenizeArgString(argString) {\n if (Array.isArray(argString)) {\n return argString.map(e => typeof e !== 'string' ? e + '' : e);\n }\n argString = argString.trim();\n let i = 0;\n let prevC = null;\n let c = null;\n let opening = null;\n const args = [];\n for (let ii = 0; ii < argString.length; ii++) {\n prevC = c;\n c = argString.charAt(ii);\n // split on spaces unless we're in quotes.\n if (c === ' ' && !opening) {\n if (!(prevC === ' ')) {\n i++;\n }\n continue;\n }\n // don't split the string if we're in matching\n // opening or closing single and double quotes.\n if (c === opening) {\n opening = null;\n }\n else if ((c === \"'\" || c === '\"') && !opening) {\n opening = c;\n }\n if (!args[i])\n args[i] = '';\n args[i] += c;\n }\n return args;\n}\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nexport var DefaultValuesForTypeKey;\n(function (DefaultValuesForTypeKey) {\n DefaultValuesForTypeKey[\"BOOLEAN\"] = \"boolean\";\n DefaultValuesForTypeKey[\"STRING\"] = \"string\";\n DefaultValuesForTypeKey[\"NUMBER\"] = \"number\";\n DefaultValuesForTypeKey[\"ARRAY\"] = \"array\";\n})(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {}));\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nimport { tokenizeArgString } from './tokenize-arg-string.js';\nimport { DefaultValuesForTypeKey } from './yargs-parser-types.js';\nimport { camelCase, decamelize, looksLikeNumber } from './string-utils.js';\nlet mixin;\nexport class YargsParser {\n constructor(_mixin) {\n mixin = _mixin;\n }\n parse(argsInput, options) {\n const opts = Object.assign({\n alias: undefined,\n array: undefined,\n boolean: undefined,\n config: undefined,\n configObjects: undefined,\n configuration: undefined,\n coerce: undefined,\n count: undefined,\n default: undefined,\n envPrefix: undefined,\n narg: undefined,\n normalize: undefined,\n string: undefined,\n number: undefined,\n __: undefined,\n key: undefined\n }, options);\n // allow a string argument to be passed in rather\n // than an argv array.\n const args = tokenizeArgString(argsInput);\n // tokenizeArgString adds extra quotes to args if argsInput is a string\n // only strip those extra quotes in processValue if argsInput is a string\n const inputIsString = typeof argsInput === 'string';\n // aliases might have transitive relationships, normalize this.\n const aliases = combineAliases(Object.assign(Object.create(null), opts.alias));\n const configuration = Object.assign({\n 'boolean-negation': true,\n 'camel-case-expansion': true,\n 'combine-arrays': false,\n 'dot-notation': true,\n 'duplicate-arguments-array': true,\n 'flatten-duplicate-arrays': true,\n 'greedy-arrays': true,\n 'halt-at-non-option': false,\n 'nargs-eats-options': false,\n 'negation-prefix': 'no-',\n 'parse-numbers': true,\n 'parse-positional-numbers': true,\n 'populate--': false,\n 'set-placeholder-key': false,\n 'short-option-groups': true,\n 'strip-aliased': false,\n 'strip-dashed': false,\n 'unknown-options-as-args': false\n }, opts.configuration);\n const defaults = Object.assign(Object.create(null), opts.default);\n const configObjects = opts.configObjects || [];\n const envPrefix = opts.envPrefix;\n const notFlagsOption = configuration['populate--'];\n const notFlagsArgv = notFlagsOption ? '--' : '_';\n const newAliases = Object.create(null);\n const defaulted = Object.create(null);\n // allow a i18n handler to be passed in, default to a fake one (util.format).\n const __ = opts.__ || mixin.format;\n const flags = {\n aliases: Object.create(null),\n arrays: Object.create(null),\n bools: Object.create(null),\n strings: Object.create(null),\n numbers: Object.create(null),\n counts: Object.create(null),\n normalize: Object.create(null),\n configs: Object.create(null),\n nargs: Object.create(null),\n coercions: Object.create(null),\n keys: []\n };\n const negative = /^-([0-9]+(\\.[0-9]+)?|\\.[0-9]+)$/;\n const negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)');\n [].concat(opts.array || []).filter(Boolean).forEach(function (opt) {\n const key = typeof opt === 'object' ? opt.key : opt;\n // assign to flags[bools|strings|numbers]\n const assignment = Object.keys(opt).map(function (key) {\n const arrayFlagKeys = {\n boolean: 'bools',\n string: 'strings',\n number: 'numbers'\n };\n return arrayFlagKeys[key];\n }).filter(Boolean).pop();\n // assign key to be coerced\n if (assignment) {\n flags[assignment][key] = true;\n }\n flags.arrays[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.boolean || []).filter(Boolean).forEach(function (key) {\n flags.bools[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.string || []).filter(Boolean).forEach(function (key) {\n flags.strings[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.number || []).filter(Boolean).forEach(function (key) {\n flags.numbers[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.count || []).filter(Boolean).forEach(function (key) {\n flags.counts[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.normalize || []).filter(Boolean).forEach(function (key) {\n flags.normalize[key] = true;\n flags.keys.push(key);\n });\n if (typeof opts.narg === 'object') {\n Object.entries(opts.narg).forEach(([key, value]) => {\n if (typeof value === 'number') {\n flags.nargs[key] = value;\n flags.keys.push(key);\n }\n });\n }\n if (typeof opts.coerce === 'object') {\n Object.entries(opts.coerce).forEach(([key, value]) => {\n if (typeof value === 'function') {\n flags.coercions[key] = value;\n flags.keys.push(key);\n }\n });\n }\n if (typeof opts.config !== 'undefined') {\n if (Array.isArray(opts.config) || typeof opts.config === 'string') {\n ;\n [].concat(opts.config).filter(Boolean).forEach(function (key) {\n flags.configs[key] = true;\n });\n }\n else if (typeof opts.config === 'object') {\n Object.entries(opts.config).forEach(([key, value]) => {\n if (typeof value === 'boolean' || typeof value === 'function') {\n flags.configs[key] = value;\n }\n });\n }\n }\n // create a lookup table that takes into account all\n // combinations of aliases: {f: ['foo'], foo: ['f']}\n extendAliases(opts.key, aliases, opts.default, flags.arrays);\n // apply default values to all aliases.\n Object.keys(defaults).forEach(function (key) {\n (flags.aliases[key] || []).forEach(function (alias) {\n defaults[alias] = defaults[key];\n });\n });\n let error = null;\n checkConfiguration();\n let notFlags = [];\n const argv = Object.assign(Object.create(null), { _: [] });\n // TODO(bcoe): for the first pass at removing object prototype we didn't\n // remove all prototypes from objects returned by this API, we might want\n // to gradually move towards doing so.\n const argvReturn = {};\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const truncatedArg = arg.replace(/^-{3,}/, '---');\n let broken;\n let key;\n let letters;\n let m;\n let next;\n let value;\n // any unknown option (except for end-of-options, \"--\")\n if (arg !== '--' && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {\n pushPositional(arg);\n // ---, ---=, ----, etc,\n }\n else if (truncatedArg.match(/^---+(=|$)/)) {\n // options without key name are invalid.\n pushPositional(arg);\n continue;\n // -- separated by =\n }\n else if (arg.match(/^--.+=/) || (!configuration['short-option-groups'] && arg.match(/^-.+=/))) {\n // Using [\\s\\S] instead of . because js doesn't support the\n // 'dotall' regex modifier. See:\n // http://stackoverflow.com/a/1068308/13216\n m = arg.match(/^--?([^=]+)=([\\s\\S]*)$/);\n // arrays format = '--f=a b c'\n if (m !== null && Array.isArray(m) && m.length >= 3) {\n if (checkAllAliases(m[1], flags.arrays)) {\n i = eatArray(i, m[1], args, m[2]);\n }\n else if (checkAllAliases(m[1], flags.nargs) !== false) {\n // nargs format = '--f=monkey washing cat'\n i = eatNargs(i, m[1], args, m[2]);\n }\n else {\n setArg(m[1], m[2], true);\n }\n }\n }\n else if (arg.match(negatedBoolean) && configuration['boolean-negation']) {\n m = arg.match(negatedBoolean);\n if (m !== null && Array.isArray(m) && m.length >= 2) {\n key = m[1];\n setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false);\n }\n // -- separated by space.\n }\n else if (arg.match(/^--.+/) || (!configuration['short-option-groups'] && arg.match(/^-[^-]+/))) {\n m = arg.match(/^--?(.+)/);\n if (m !== null && Array.isArray(m) && m.length >= 2) {\n key = m[1];\n if (checkAllAliases(key, flags.arrays)) {\n // array format = '--foo a b c'\n i = eatArray(i, key, args);\n }\n else if (checkAllAliases(key, flags.nargs) !== false) {\n // nargs format = '--foo a b c'\n // should be truthy even if: flags.nargs[key] === 0\n i = eatNargs(i, key, args);\n }\n else {\n next = args[i + 1];\n if (next !== undefined && (!next.match(/^-/) ||\n next.match(negative)) &&\n !checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts)) {\n setArg(key, next);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next);\n i++;\n }\n else {\n setArg(key, defaultValue(key));\n }\n }\n }\n // dot-notation flag separated by '='.\n }\n else if (arg.match(/^-.\\..+=/)) {\n m = arg.match(/^-([^=]+)=([\\s\\S]*)$/);\n if (m !== null && Array.isArray(m) && m.length >= 3) {\n setArg(m[1], m[2]);\n }\n // dot-notation flag separated by space.\n }\n else if (arg.match(/^-.\\..+/) && !arg.match(negative)) {\n next = args[i + 1];\n m = arg.match(/^-(.\\..+)/);\n if (m !== null && Array.isArray(m) && m.length >= 2) {\n key = m[1];\n if (next !== undefined && !next.match(/^-/) &&\n !checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts)) {\n setArg(key, next);\n i++;\n }\n else {\n setArg(key, defaultValue(key));\n }\n }\n }\n else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {\n letters = arg.slice(1, -1).split('');\n broken = false;\n for (let j = 0; j < letters.length; j++) {\n next = arg.slice(j + 2);\n if (letters[j + 1] && letters[j + 1] === '=') {\n value = arg.slice(j + 3);\n key = letters[j];\n if (checkAllAliases(key, flags.arrays)) {\n // array format = '-f=a b c'\n i = eatArray(i, key, args, value);\n }\n else if (checkAllAliases(key, flags.nargs) !== false) {\n // nargs format = '-f=monkey washing cat'\n i = eatNargs(i, key, args, value);\n }\n else {\n setArg(key, value);\n }\n broken = true;\n break;\n }\n if (next === '-') {\n setArg(letters[j], next);\n continue;\n }\n // current letter is an alphabetic character and next value is a number\n if (/[A-Za-z]/.test(letters[j]) &&\n /^-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next) &&\n checkAllAliases(next, flags.bools) === false) {\n setArg(letters[j], next);\n broken = true;\n break;\n }\n if (letters[j + 1] && letters[j + 1].match(/\\W/)) {\n setArg(letters[j], next);\n broken = true;\n break;\n }\n else {\n setArg(letters[j], defaultValue(letters[j]));\n }\n }\n key = arg.slice(-1)[0];\n if (!broken && key !== '-') {\n if (checkAllAliases(key, flags.arrays)) {\n // array format = '-f a b c'\n i = eatArray(i, key, args);\n }\n else if (checkAllAliases(key, flags.nargs) !== false) {\n // nargs format = '-f a b c'\n // should be truthy even if: flags.nargs[key] === 0\n i = eatNargs(i, key, args);\n }\n else {\n next = args[i + 1];\n if (next !== undefined && (!/^(-|--)[^-]/.test(next) ||\n next.match(negative)) &&\n !checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts)) {\n setArg(key, next);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next);\n i++;\n }\n else {\n setArg(key, defaultValue(key));\n }\n }\n }\n }\n else if (arg.match(/^-[0-9]$/) &&\n arg.match(negative) &&\n checkAllAliases(arg.slice(1), flags.bools)) {\n // single-digit boolean alias, e.g: xargs -0\n key = arg.slice(1);\n setArg(key, defaultValue(key));\n }\n else if (arg === '--') {\n notFlags = args.slice(i + 1);\n break;\n }\n else if (configuration['halt-at-non-option']) {\n notFlags = args.slice(i);\n break;\n }\n else {\n pushPositional(arg);\n }\n }\n // order of precedence:\n // 1. command line arg\n // 2. value from env var\n // 3. value from config file\n // 4. value from config objects\n // 5. configured default value\n applyEnvVars(argv, true); // special case: check env vars that point to config file\n applyEnvVars(argv, false);\n setConfig(argv);\n setConfigObjects();\n applyDefaultsAndAliases(argv, flags.aliases, defaults, true);\n applyCoercions(argv);\n if (configuration['set-placeholder-key'])\n setPlaceholderKeys(argv);\n // for any counts either not in args or without an explicit default, set to 0\n Object.keys(flags.counts).forEach(function (key) {\n if (!hasKey(argv, key.split('.')))\n setArg(key, 0);\n });\n // '--' defaults to undefined.\n if (notFlagsOption && notFlags.length)\n argv[notFlagsArgv] = [];\n notFlags.forEach(function (key) {\n argv[notFlagsArgv].push(key);\n });\n if (configuration['camel-case-expansion'] && configuration['strip-dashed']) {\n Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => {\n delete argv[key];\n });\n }\n if (configuration['strip-aliased']) {\n ;\n [].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => {\n if (configuration['camel-case-expansion'] && alias.includes('-')) {\n delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')];\n }\n delete argv[alias];\n });\n }\n // Push argument into positional array, applying numeric coercion:\n function pushPositional(arg) {\n const maybeCoercedNumber = maybeCoerceNumber('_', arg);\n if (typeof maybeCoercedNumber === 'string' || typeof maybeCoercedNumber === 'number') {\n argv._.push(maybeCoercedNumber);\n }\n }\n // how many arguments should we consume, based\n // on the nargs option?\n function eatNargs(i, key, args, argAfterEqualSign) {\n let ii;\n let toEat = checkAllAliases(key, flags.nargs);\n // NaN has a special meaning for the array type, indicating that one or\n // more values are expected.\n toEat = typeof toEat !== 'number' || isNaN(toEat) ? 1 : toEat;\n if (toEat === 0) {\n if (!isUndefined(argAfterEqualSign)) {\n error = Error(__('Argument unexpected for: %s', key));\n }\n setArg(key, defaultValue(key));\n return i;\n }\n let available = isUndefined(argAfterEqualSign) ? 0 : 1;\n if (configuration['nargs-eats-options']) {\n // classic behavior, yargs eats positional and dash arguments.\n if (args.length - (i + 1) + available < toEat) {\n error = Error(__('Not enough arguments following: %s', key));\n }\n available = toEat;\n }\n else {\n // nargs will not consume flag arguments, e.g., -abc, --foo,\n // and terminates when one is observed.\n for (ii = i + 1; ii < args.length; ii++) {\n if (!args[ii].match(/^-[^0-9]/) || args[ii].match(negative) || isUnknownOptionAsArg(args[ii]))\n available++;\n else\n break;\n }\n if (available < toEat)\n error = Error(__('Not enough arguments following: %s', key));\n }\n let consumed = Math.min(available, toEat);\n if (!isUndefined(argAfterEqualSign) && consumed > 0) {\n setArg(key, argAfterEqualSign);\n consumed--;\n }\n for (ii = i + 1; ii < (consumed + i + 1); ii++) {\n setArg(key, args[ii]);\n }\n return (i + consumed);\n }\n // if an option is an array, eat all non-hyphenated arguments\n // following it... YUM!\n // e.g., --foo apple banana cat becomes [\"apple\", \"banana\", \"cat\"]\n function eatArray(i, key, args, argAfterEqualSign) {\n let argsToSet = [];\n let next = argAfterEqualSign || args[i + 1];\n // If both array and nargs are configured, enforce the nargs count:\n const nargsCount = checkAllAliases(key, flags.nargs);\n if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) {\n argsToSet.push(true);\n }\n else if (isUndefined(next) ||\n (isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) {\n // for keys without value ==> argsToSet remains an empty []\n // set user default value, if available\n if (defaults[key] !== undefined) {\n const defVal = defaults[key];\n argsToSet = Array.isArray(defVal) ? defVal : [defVal];\n }\n }\n else {\n // value in --option=value is eaten as is\n if (!isUndefined(argAfterEqualSign)) {\n argsToSet.push(processValue(key, argAfterEqualSign, true));\n }\n for (let ii = i + 1; ii < args.length; ii++) {\n if ((!configuration['greedy-arrays'] && argsToSet.length > 0) ||\n (nargsCount && typeof nargsCount === 'number' && argsToSet.length >= nargsCount))\n break;\n next = args[ii];\n if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))\n break;\n i = ii;\n argsToSet.push(processValue(key, next, inputIsString));\n }\n }\n // If both array and nargs are configured, create an error if less than\n // nargs positionals were found. NaN has special meaning, indicating\n // that at least one value is required (more are okay).\n if (typeof nargsCount === 'number' && ((nargsCount && argsToSet.length < nargsCount) ||\n (isNaN(nargsCount) && argsToSet.length === 0))) {\n error = Error(__('Not enough arguments following: %s', key));\n }\n setArg(key, argsToSet);\n return i;\n }\n function setArg(key, val, shouldStripQuotes = inputIsString) {\n if (/-/.test(key) && configuration['camel-case-expansion']) {\n const alias = key.split('.').map(function (prop) {\n return camelCase(prop);\n }).join('.');\n addNewAlias(key, alias);\n }\n const value = processValue(key, val, shouldStripQuotes);\n const splitKey = key.split('.');\n setKey(argv, splitKey, value);\n // handle populating aliases of the full key\n if (flags.aliases[key]) {\n flags.aliases[key].forEach(function (x) {\n const keyProperties = x.split('.');\n setKey(argv, keyProperties, value);\n });\n }\n // handle populating aliases of the first element of the dot-notation key\n if (splitKey.length > 1 && configuration['dot-notation']) {\n ;\n (flags.aliases[splitKey[0]] || []).forEach(function (x) {\n let keyProperties = x.split('.');\n // expand alias with nested objects in key\n const a = [].concat(splitKey);\n a.shift(); // nuke the old key.\n keyProperties = keyProperties.concat(a);\n // populate alias only if is not already an alias of the full key\n // (already populated above)\n if (!(flags.aliases[key] || []).includes(keyProperties.join('.'))) {\n setKey(argv, keyProperties, value);\n }\n });\n }\n // Set normalize getter and setter when key is in 'normalize' but isn't an array\n if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {\n const keys = [key].concat(flags.aliases[key] || []);\n keys.forEach(function (key) {\n Object.defineProperty(argvReturn, key, {\n enumerable: true,\n get() {\n return val;\n },\n set(value) {\n val = typeof value === 'string' ? mixin.normalize(value) : value;\n }\n });\n });\n }\n }\n function addNewAlias(key, alias) {\n if (!(flags.aliases[key] && flags.aliases[key].length)) {\n flags.aliases[key] = [alias];\n newAliases[alias] = true;\n }\n if (!(flags.aliases[alias] && flags.aliases[alias].length)) {\n addNewAlias(alias, key);\n }\n }\n function processValue(key, val, shouldStripQuotes) {\n // strings may be quoted, clean this up as we assign values.\n if (shouldStripQuotes) {\n val = stripQuotes(val);\n }\n // handle parsing boolean arguments --foo=true --bar false.\n if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {\n if (typeof val === 'string')\n val = val === 'true';\n }\n let value = Array.isArray(val)\n ? val.map(function (v) { return maybeCoerceNumber(key, v); })\n : maybeCoerceNumber(key, val);\n // increment a count given as arg (either no value or value parsed as boolean)\n if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) {\n value = increment();\n }\n // Set normalized value when key is in 'normalize' and in 'arrays'\n if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {\n if (Array.isArray(val))\n value = val.map((val) => { return mixin.normalize(val); });\n else\n value = mixin.normalize(val);\n }\n return value;\n }\n function maybeCoerceNumber(key, value) {\n if (!configuration['parse-positional-numbers'] && key === '_')\n return value;\n if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) {\n const shouldCoerceNumber = looksLikeNumber(value) && configuration['parse-numbers'] && (Number.isSafeInteger(Math.floor(parseFloat(`${value}`))));\n if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) {\n value = Number(value);\n }\n }\n return value;\n }\n // set args from config.json file, this should be\n // applied last so that defaults can be applied.\n function setConfig(argv) {\n const configLookup = Object.create(null);\n // expand defaults/aliases, in-case any happen to reference\n // the config.json file.\n applyDefaultsAndAliases(configLookup, flags.aliases, defaults);\n Object.keys(flags.configs).forEach(function (configKey) {\n const configPath = argv[configKey] || configLookup[configKey];\n if (configPath) {\n try {\n let config = null;\n const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath);\n const resolveConfig = flags.configs[configKey];\n if (typeof resolveConfig === 'function') {\n try {\n config = resolveConfig(resolvedConfigPath);\n }\n catch (e) {\n config = e;\n }\n if (config instanceof Error) {\n error = config;\n return;\n }\n }\n else {\n config = mixin.require(resolvedConfigPath);\n }\n setConfigObject(config);\n }\n catch (ex) {\n // Deno will receive a PermissionDenied error if an attempt is\n // made to load config without the --allow-read flag:\n if (ex.name === 'PermissionDenied')\n error = ex;\n else if (argv[configKey])\n error = Error(__('Invalid JSON config file: %s', configPath));\n }\n }\n });\n }\n // set args from config object.\n // it recursively checks nested objects.\n function setConfigObject(config, prev) {\n Object.keys(config).forEach(function (key) {\n const value = config[key];\n const fullKey = prev ? prev + '.' + key : key;\n // if the value is an inner object and we have dot-notation\n // enabled, treat inner objects in config the same as\n // heavily nested dot notations (foo.bar.apple).\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) {\n // if the value is an object but not an array, check nested object\n setConfigObject(value, fullKey);\n }\n else {\n // setting arguments via CLI takes precedence over\n // values within the config file.\n if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) {\n setArg(fullKey, value);\n }\n }\n });\n }\n // set all config objects passed in opts\n function setConfigObjects() {\n if (typeof configObjects !== 'undefined') {\n configObjects.forEach(function (configObject) {\n setConfigObject(configObject);\n });\n }\n }\n function applyEnvVars(argv, configOnly) {\n if (typeof envPrefix === 'undefined')\n return;\n const prefix = typeof envPrefix === 'string' ? envPrefix : '';\n const env = mixin.env();\n Object.keys(env).forEach(function (envVar) {\n if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {\n // get array of nested keys and convert them to camel case\n const keys = envVar.split('__').map(function (key, i) {\n if (i === 0) {\n key = key.substring(prefix.length);\n }\n return camelCase(key);\n });\n if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys)) {\n setArg(keys.join('.'), env[envVar]);\n }\n }\n });\n }\n function applyCoercions(argv) {\n let coerce;\n const applied = new Set();\n Object.keys(argv).forEach(function (key) {\n if (!applied.has(key)) { // If we haven't already coerced this option via one of its aliases\n coerce = checkAllAliases(key, flags.coercions);\n if (typeof coerce === 'function') {\n try {\n const value = maybeCoerceNumber(key, coerce(argv[key]));\n ([].concat(flags.aliases[key] || [], key)).forEach(ali => {\n applied.add(ali);\n argv[ali] = value;\n });\n }\n catch (err) {\n error = err;\n }\n }\n }\n });\n }\n function setPlaceholderKeys(argv) {\n flags.keys.forEach((key) => {\n // don't set placeholder keys for dot notation options 'foo.bar'.\n if (~key.indexOf('.'))\n return;\n if (typeof argv[key] === 'undefined')\n argv[key] = undefined;\n });\n return argv;\n }\n function applyDefaultsAndAliases(obj, aliases, defaults, canLog = false) {\n Object.keys(defaults).forEach(function (key) {\n if (!hasKey(obj, key.split('.'))) {\n setKey(obj, key.split('.'), defaults[key]);\n if (canLog)\n defaulted[key] = true;\n (aliases[key] || []).forEach(function (x) {\n if (hasKey(obj, x.split('.')))\n return;\n setKey(obj, x.split('.'), defaults[key]);\n });\n }\n });\n }\n function hasKey(obj, keys) {\n let o = obj;\n if (!configuration['dot-notation'])\n keys = [keys.join('.')];\n keys.slice(0, -1).forEach(function (key) {\n o = (o[key] || {});\n });\n const key = keys[keys.length - 1];\n if (typeof o !== 'object')\n return false;\n else\n return key in o;\n }\n function setKey(obj, keys, value) {\n let o = obj;\n if (!configuration['dot-notation'])\n keys = [keys.join('.')];\n keys.slice(0, -1).forEach(function (key) {\n // TODO(bcoe): in the next major version of yargs, switch to\n // Object.create(null) for dot notation:\n key = sanitizeKey(key);\n if (typeof o === 'object' && o[key] === undefined) {\n o[key] = {};\n }\n if (typeof o[key] !== 'object' || Array.isArray(o[key])) {\n // ensure that o[key] is an array, and that the last item is an empty object.\n if (Array.isArray(o[key])) {\n o[key].push({});\n }\n else {\n o[key] = [o[key], {}];\n }\n // we want to update the empty object at the end of the o[key] array, so set o to that object\n o = o[key][o[key].length - 1];\n }\n else {\n o = o[key];\n }\n });\n // TODO(bcoe): in the next major version of yargs, switch to\n // Object.create(null) for dot notation:\n const key = sanitizeKey(keys[keys.length - 1]);\n const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays);\n const isValueArray = Array.isArray(value);\n let duplicate = configuration['duplicate-arguments-array'];\n // nargs has higher priority than duplicate\n if (!duplicate && checkAllAliases(key, flags.nargs)) {\n duplicate = true;\n if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) {\n o[key] = undefined;\n }\n }\n if (value === increment()) {\n o[key] = increment(o[key]);\n }\n else if (Array.isArray(o[key])) {\n if (duplicate && isTypeArray && isValueArray) {\n o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]);\n }\n else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {\n o[key] = value;\n }\n else {\n o[key] = o[key].concat([value]);\n }\n }\n else if (o[key] === undefined && isTypeArray) {\n o[key] = isValueArray ? value : [value];\n }\n else if (duplicate && !(o[key] === undefined ||\n checkAllAliases(key, flags.counts) ||\n checkAllAliases(key, flags.bools))) {\n o[key] = [o[key], value];\n }\n else {\n o[key] = value;\n }\n }\n // extend the aliases list with inferred aliases.\n function extendAliases(...args) {\n args.forEach(function (obj) {\n Object.keys(obj || {}).forEach(function (key) {\n // short-circuit if we've already added a key\n // to the aliases array, for example it might\n // exist in both 'opts.default' and 'opts.key'.\n if (flags.aliases[key])\n return;\n flags.aliases[key] = [].concat(aliases[key] || []);\n // For \"--option-name\", also set argv.optionName\n flags.aliases[key].concat(key).forEach(function (x) {\n if (/-/.test(x) && configuration['camel-case-expansion']) {\n const c = camelCase(x);\n if (c !== key && flags.aliases[key].indexOf(c) === -1) {\n flags.aliases[key].push(c);\n newAliases[c] = true;\n }\n }\n });\n // For \"--optionName\", also set argv['option-name']\n flags.aliases[key].concat(key).forEach(function (x) {\n if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) {\n const c = decamelize(x, '-');\n if (c !== key && flags.aliases[key].indexOf(c) === -1) {\n flags.aliases[key].push(c);\n newAliases[c] = true;\n }\n }\n });\n flags.aliases[key].forEach(function (x) {\n flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) {\n return x !== y;\n }));\n });\n });\n });\n }\n function checkAllAliases(key, flag) {\n const toCheck = [].concat(flags.aliases[key] || [], key);\n const keys = Object.keys(flag);\n const setAlias = toCheck.find(key => keys.includes(key));\n return setAlias ? flag[setAlias] : false;\n }\n function hasAnyFlag(key) {\n const flagsKeys = Object.keys(flags);\n const toCheck = [].concat(flagsKeys.map(k => flags[k]));\n return toCheck.some(function (flag) {\n return Array.isArray(flag) ? flag.includes(key) : flag[key];\n });\n }\n function hasFlagsMatching(arg, ...patterns) {\n const toCheck = [].concat(...patterns);\n return toCheck.some(function (pattern) {\n const match = arg.match(pattern);\n return match && hasAnyFlag(match[1]);\n });\n }\n // based on a simplified version of the short flag group parsing logic\n function hasAllShortFlags(arg) {\n // if this is a negative number, or doesn't start with a single hyphen, it's not a short flag group\n if (arg.match(negative) || !arg.match(/^-[^-]+/)) {\n return false;\n }\n let hasAllFlags = true;\n let next;\n const letters = arg.slice(1).split('');\n for (let j = 0; j < letters.length; j++) {\n next = arg.slice(j + 2);\n if (!hasAnyFlag(letters[j])) {\n hasAllFlags = false;\n break;\n }\n if ((letters[j + 1] && letters[j + 1] === '=') ||\n next === '-' ||\n (/[A-Za-z]/.test(letters[j]) && /^-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) ||\n (letters[j + 1] && letters[j + 1].match(/\\W/))) {\n break;\n }\n }\n return hasAllFlags;\n }\n function isUnknownOptionAsArg(arg) {\n return configuration['unknown-options-as-args'] && isUnknownOption(arg);\n }\n function isUnknownOption(arg) {\n arg = arg.replace(/^-{3,}/, '--');\n // ignore negative numbers\n if (arg.match(negative)) {\n return false;\n }\n // if this is a short option group and all of them are configured, it isn't unknown\n if (hasAllShortFlags(arg)) {\n return false;\n }\n // e.g. '--count=2'\n const flagWithEquals = /^-+([^=]+?)=[\\s\\S]*$/;\n // e.g. '-a' or '--arg'\n const normalFlag = /^-+([^=]+?)$/;\n // e.g. '-a-'\n const flagEndingInHyphen = /^-+([^=]+?)-$/;\n // e.g. '-abc123'\n const flagEndingInDigits = /^-+([^=]+?\\d+)$/;\n // e.g. '-a/usr/local'\n const flagEndingInNonWordCharacters = /^-+([^=]+?)\\W+.*$/;\n // check the different types of flag styles, including negatedBoolean, a pattern defined near the start of the parse method\n return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters);\n }\n // make a best effort to pick a default value\n // for an option based on name and type.\n function defaultValue(key) {\n if (!checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts) &&\n `${key}` in defaults) {\n return defaults[key];\n }\n else {\n return defaultForType(guessType(key));\n }\n }\n // return a default value, given the type of a flag.,\n function defaultForType(type) {\n const def = {\n [DefaultValuesForTypeKey.BOOLEAN]: true,\n [DefaultValuesForTypeKey.STRING]: '',\n [DefaultValuesForTypeKey.NUMBER]: undefined,\n [DefaultValuesForTypeKey.ARRAY]: []\n };\n return def[type];\n }\n // given a flag, enforce a default type.\n function guessType(key) {\n let type = DefaultValuesForTypeKey.BOOLEAN;\n if (checkAllAliases(key, flags.strings))\n type = DefaultValuesForTypeKey.STRING;\n else if (checkAllAliases(key, flags.numbers))\n type = DefaultValuesForTypeKey.NUMBER;\n else if (checkAllAliases(key, flags.bools))\n type = DefaultValuesForTypeKey.BOOLEAN;\n else if (checkAllAliases(key, flags.arrays))\n type = DefaultValuesForTypeKey.ARRAY;\n return type;\n }\n function isUndefined(num) {\n return num === undefined;\n }\n // check user configuration settings for inconsistencies\n function checkConfiguration() {\n // count keys should not be set as array/narg\n Object.keys(flags.counts).find(key => {\n if (checkAllAliases(key, flags.arrays)) {\n error = Error(__('Invalid configuration: %s, opts.count excludes opts.array.', key));\n return true;\n }\n else if (checkAllAliases(key, flags.nargs)) {\n error = Error(__('Invalid configuration: %s, opts.count excludes opts.narg.', key));\n return true;\n }\n return false;\n });\n }\n return {\n aliases: Object.assign({}, flags.aliases),\n argv: Object.assign(argvReturn, argv),\n configuration: configuration,\n defaulted: Object.assign({}, defaulted),\n error: error,\n newAliases: Object.assign({}, newAliases)\n };\n }\n}\n// if any aliases reference each other, we should\n// merge them together.\nfunction combineAliases(aliases) {\n const aliasArrays = [];\n const combined = Object.create(null);\n let change = true;\n // turn alias lookup hash {key: ['alias1', 'alias2']} into\n // a simple array ['key', 'alias1', 'alias2']\n Object.keys(aliases).forEach(function (key) {\n aliasArrays.push([].concat(aliases[key], key));\n });\n // combine arrays until zero changes are\n // made in an iteration.\n while (change) {\n change = false;\n for (let i = 0; i < aliasArrays.length; i++) {\n for (let ii = i + 1; ii < aliasArrays.length; ii++) {\n const intersect = aliasArrays[i].filter(function (v) {\n return aliasArrays[ii].indexOf(v) !== -1;\n });\n if (intersect.length) {\n aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]);\n aliasArrays.splice(ii, 1);\n change = true;\n break;\n }\n }\n }\n }\n // map arrays back to the hash-lookup (de-dupe while\n // we're at it).\n aliasArrays.forEach(function (aliasArray) {\n aliasArray = aliasArray.filter(function (v, i, self) {\n return self.indexOf(v) === i;\n });\n const lastAlias = aliasArray.pop();\n if (lastAlias !== undefined && typeof lastAlias === 'string') {\n combined[lastAlias] = aliasArray;\n }\n });\n return combined;\n}\n// this function should only be called when a count is given as an arg\n// it is NOT called to set a default value\n// thus we can start the count at 1 instead of 0\nfunction increment(orig) {\n return orig !== undefined ? orig + 1 : 1;\n}\n// TODO(bcoe): in the next major version of yargs, switch to\n// Object.create(null) for dot notation:\nfunction sanitizeKey(key) {\n if (key === '__proto__')\n return '___proto___';\n return key;\n}\nfunction stripQuotes(val) {\n return (typeof val === 'string' &&\n (val[0] === \"'\" || val[0] === '\"') &&\n val[val.length - 1] === val[0])\n ? val.substring(1, val.length - 1)\n : val;\n}\n","/**\n * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js\n * CJS and ESM environments.\n *\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nvar _a, _b, _c;\nimport { format } from 'util';\nimport { normalize, resolve } from 'path';\nimport { camelCase, decamelize, looksLikeNumber } from './string-utils.js';\nimport { YargsParser } from './yargs-parser.js';\nimport { readFileSync } from 'fs';\n// See https://github.com/yargs/yargs-parser#supported-nodejs-versions for our\n// version support policy. The YARGS_MIN_NODE_VERSION is used for testing only.\nconst minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION)\n ? Number(process.env.YARGS_MIN_NODE_VERSION)\n : 12;\nconst nodeVersion = (_b = (_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== null && _b !== void 0 ? _b : (_c = process === null || process === void 0 ? void 0 : process.version) === null || _c === void 0 ? void 0 : _c.slice(1);\nif (nodeVersion) {\n const major = Number(nodeVersion.match(/^([^.]+)/)[1]);\n if (major < minNodeVersion) {\n throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);\n }\n}\n// Creates a yargs-parser instance using Node.js standard libraries:\nconst env = process ? process.env : {};\nconst parser = new YargsParser({\n cwd: process.cwd,\n env: () => {\n return env;\n },\n format,\n normalize,\n resolve,\n // TODO: figure out a way to combine ESM and CJS coverage, such that\n // we can exercise all the lines below:\n require: (path) => {\n if (typeof require !== 'undefined') {\n return require(path);\n }\n else if (path.match(/\\.json$/)) {\n // Addresses: https://github.com/yargs/yargs/issues/2040\n return JSON.parse(readFileSync(path, 'utf8'));\n }\n else {\n throw Error('only .json config files are supported in ESM');\n }\n }\n});\nconst yargsParser = function Parser(args, opts) {\n const result = parser.parse(args.slice(), opts);\n return result.argv;\n};\nyargsParser.detailed = function (args, opts) {\n return parser.parse(args.slice(), opts);\n};\nyargsParser.camelCase = camelCase;\nyargsParser.decamelize = decamelize;\nyargsParser.looksLikeNumber = looksLikeNumber;\nexport default yargsParser;\n","import { readFileSync, statSync, writeFile } from 'fs';\nimport { format } from 'util';\nimport { resolve } from 'path';\nexport default {\n fs: {\n readFileSync,\n writeFile\n },\n format,\n resolve,\n exists: (file) => {\n try {\n return statSync(file).isFile();\n }\n catch (err) {\n return false;\n }\n }\n};\n","let shim;\nclass Y18N {\n constructor(opts) {\n // configurable options.\n opts = opts || {};\n this.directory = opts.directory || './locales';\n this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true;\n this.locale = opts.locale || 'en';\n this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true;\n // internal stuff.\n this.cache = Object.create(null);\n this.writeQueue = [];\n }\n __(...args) {\n if (typeof arguments[0] !== 'string') {\n return this._taggedLiteral(arguments[0], ...arguments);\n }\n const str = args.shift();\n let cb = function () { }; // start with noop.\n if (typeof args[args.length - 1] === 'function')\n cb = args.pop();\n cb = cb || function () { }; // noop.\n if (!this.cache[this.locale])\n this._readLocaleFile();\n // we've observed a new string, update the language file.\n if (!this.cache[this.locale][str] && this.updateFiles) {\n this.cache[this.locale][str] = str;\n // include the current directory and locale,\n // since these values could change before the\n // write is performed.\n this._enqueueWrite({\n directory: this.directory,\n locale: this.locale,\n cb\n });\n }\n else {\n cb();\n }\n return shim.format.apply(shim.format, [this.cache[this.locale][str] || str].concat(args));\n }\n __n() {\n const args = Array.prototype.slice.call(arguments);\n const singular = args.shift();\n const plural = args.shift();\n const quantity = args.shift();\n let cb = function () { }; // start with noop.\n if (typeof args[args.length - 1] === 'function')\n cb = args.pop();\n if (!this.cache[this.locale])\n this._readLocaleFile();\n let str = quantity === 1 ? singular : plural;\n if (this.cache[this.locale][singular]) {\n const entry = this.cache[this.locale][singular];\n str = entry[quantity === 1 ? 'one' : 'other'];\n }\n // we've observed a new string, update the language file.\n if (!this.cache[this.locale][singular] && this.updateFiles) {\n this.cache[this.locale][singular] = {\n one: singular,\n other: plural\n };\n // include the current directory and locale,\n // since these values could change before the\n // write is performed.\n this._enqueueWrite({\n directory: this.directory,\n locale: this.locale,\n cb\n });\n }\n else {\n cb();\n }\n // if a %d placeholder is provided, add quantity\n // to the arguments expanded by util.format.\n const values = [str];\n if (~str.indexOf('%d'))\n values.push(quantity);\n return shim.format.apply(shim.format, values.concat(args));\n }\n setLocale(locale) {\n this.locale = locale;\n }\n getLocale() {\n return this.locale;\n }\n updateLocale(obj) {\n if (!this.cache[this.locale])\n this._readLocaleFile();\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n this.cache[this.locale][key] = obj[key];\n }\n }\n }\n _taggedLiteral(parts, ...args) {\n let str = '';\n parts.forEach(function (part, i) {\n const arg = args[i + 1];\n str += part;\n if (typeof arg !== 'undefined') {\n str += '%s';\n }\n });\n return this.__.apply(this, [str].concat([].slice.call(args, 1)));\n }\n _enqueueWrite(work) {\n this.writeQueue.push(work);\n if (this.writeQueue.length === 1)\n this._processWriteQueue();\n }\n _processWriteQueue() {\n const _this = this;\n const work = this.writeQueue[0];\n // destructure the enqueued work.\n const directory = work.directory;\n const locale = work.locale;\n const cb = work.cb;\n const languageFile = this._resolveLocaleFile(directory, locale);\n const serializedLocale = JSON.stringify(this.cache[locale], null, 2);\n shim.fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) {\n _this.writeQueue.shift();\n if (_this.writeQueue.length > 0)\n _this._processWriteQueue();\n cb(err);\n });\n }\n _readLocaleFile() {\n let localeLookup = {};\n const languageFile = this._resolveLocaleFile(this.directory, this.locale);\n try {\n // When using a bundler such as webpack, readFileSync may not be defined:\n if (shim.fs.readFileSync) {\n localeLookup = JSON.parse(shim.fs.readFileSync(languageFile, 'utf-8'));\n }\n }\n catch (err) {\n if (err instanceof SyntaxError) {\n err.message = 'syntax error in ' + languageFile;\n }\n if (err.code === 'ENOENT')\n localeLookup = {};\n else\n throw err;\n }\n this.cache[this.locale] = localeLookup;\n }\n _resolveLocaleFile(directory, locale) {\n let file = shim.resolve(directory, './', locale + '.json');\n if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) {\n // attempt fallback to language only\n const languageFile = shim.resolve(directory, './', locale.split('_')[0] + '.json');\n if (this._fileExistsSync(languageFile))\n file = languageFile;\n }\n return file;\n }\n _fileExistsSync(file) {\n return shim.exists(file);\n }\n}\nexport function y18n(opts, _shim) {\n shim = _shim;\n const y18n = new Y18N(opts);\n return {\n __: y18n.__.bind(y18n),\n __n: y18n.__n.bind(y18n),\n setLocale: y18n.setLocale.bind(y18n),\n getLocale: y18n.getLocale.bind(y18n),\n updateLocale: y18n.updateLocale.bind(y18n),\n locale: y18n.locale\n };\n}\n","import shim from './build/lib/platform-shims/node.js'\nimport { y18n as _y18n } from './build/lib/index.js'\n\nconst y18n = (opts) => {\n return _y18n(opts, shim)\n}\n\nexport default y18n\n","'use strict'\n\nimport { notStrictEqual, strictEqual } from 'assert'\nimport cliui from 'cliui'\nimport escalade from 'escalade/sync'\nimport { inspect } from 'util'\nimport { readFileSync } from 'fs'\nimport { fileURLToPath } from 'url';\nimport Parser from 'yargs-parser'\nimport { basename, dirname, extname, relative, resolve } from 'path'\nimport { getProcessArgvBin } from '../../build/lib/utils/process-argv.js'\nimport { YError } from '../../build/lib/yerror.js'\nimport y18n from 'y18n'\n\nconst REQUIRE_ERROR = 'require is not supported by ESM'\nconst REQUIRE_DIRECTORY_ERROR = 'loading a directory of commands is not supported yet for ESM'\n\nlet __dirname;\ntry {\n __dirname = fileURLToPath(import.meta.url);\n} catch (e) {\n __dirname = process.cwd();\n}\nconst mainFilename = __dirname.substring(0, __dirname.lastIndexOf('node_modules'));\n\nexport default {\n assert: {\n notStrictEqual,\n strictEqual\n },\n cliui,\n findUp: escalade,\n getEnv: (key) => {\n return process.env[key]\n },\n inspect,\n getCallerFile: () => {\n throw new YError(REQUIRE_DIRECTORY_ERROR)\n },\n getProcessArgvBin,\n mainFilename: mainFilename || process.cwd(),\n Parser,\n path: {\n basename,\n dirname,\n extname,\n relative,\n resolve\n },\n process: {\n argv: () => process.argv,\n cwd: process.cwd,\n emitWarning: (warning, type) => process.emitWarning(warning, type),\n execPath: () => process.execPath,\n exit: process.exit,\n nextTick: process.nextTick,\n stdColumns: typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null\n },\n readFileSync,\n require: () => {\n throw new YError(REQUIRE_ERROR)\n },\n requireDirectory: () => {\n throw new YError(REQUIRE_DIRECTORY_ERROR)\n },\n stringWidth: (str) => {\n return [...str].length\n },\n y18n: y18n({\n directory: resolve(__dirname, '../../../locales'),\n updateFiles: false\n })\n}\n","// Generated by CoffeeScript 1.12.7\n(function() {\n exports.defaults = {\n \"0.1\": {\n explicitCharkey: false,\n trim: true,\n normalize: true,\n normalizeTags: false,\n attrkey: \"@\",\n charkey: \"#\",\n explicitArray: false,\n ignoreAttrs: false,\n mergeAttrs: false,\n explicitRoot: false,\n validator: null,\n xmlns: false,\n explicitChildren: false,\n childkey: '@@',\n charsAsChildren: false,\n includeWhiteChars: false,\n async: false,\n strict: true,\n attrNameProcessors: null,\n attrValueProcessors: null,\n tagNameProcessors: null,\n valueProcessors: null,\n emptyTag: ''\n },\n \"0.2\": {\n explicitCharkey: false,\n trim: false,\n normalize: false,\n normalizeTags: false,\n attrkey: \"$\",\n charkey: \"_\",\n explicitArray: true,\n ignoreAttrs: false,\n mergeAttrs: false,\n explicitRoot: true,\n validator: null,\n xmlns: false,\n explicitChildren: false,\n preserveChildrenOrder: false,\n childkey: '$$',\n charsAsChildren: false,\n includeWhiteChars: false,\n async: false,\n strict: true,\n attrNameProcessors: null,\n attrValueProcessors: null,\n tagNameProcessors: null,\n valueProcessors: null,\n rootName: 'root',\n xmldec: {\n 'version': '1.0',\n 'encoding': 'UTF-8',\n 'standalone': true\n },\n doctype: null,\n renderOpts: {\n 'pretty': true,\n 'indent': ' ',\n 'newline': '\\n'\n },\n headless: false,\n chunkSize: 10000,\n emptyTag: '',\n cdata: false\n }\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject,\n slice = [].slice,\n hasProp = {}.hasOwnProperty;\n\n assign = function() {\n var i, key, len, source, sources, target;\n target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n if (isFunction(Object.assign)) {\n Object.assign.apply(null, arguments);\n } else {\n for (i = 0, len = sources.length; i < len; i++) {\n source = sources[i];\n if (source != null) {\n for (key in source) {\n if (!hasProp.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n };\n\n isFunction = function(val) {\n return !!val && Object.prototype.toString.call(val) === '[object Function]';\n };\n\n isObject = function(val) {\n var ref;\n return !!val && ((ref = typeof val) === 'function' || ref === 'object');\n };\n\n isArray = function(val) {\n if (isFunction(Array.isArray)) {\n return Array.isArray(val);\n } else {\n return Object.prototype.toString.call(val) === '[object Array]';\n }\n };\n\n isEmpty = function(val) {\n var key;\n if (isArray(val)) {\n return !val.length;\n } else {\n for (key in val) {\n if (!hasProp.call(val, key)) continue;\n return false;\n }\n return true;\n }\n };\n\n isPlainObject = function(val) {\n var ctor, proto;\n return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object));\n };\n\n getValue = function(obj) {\n if (isFunction(obj.valueOf)) {\n return obj.valueOf();\n } else {\n return obj;\n }\n };\n\n module.exports.assign = assign;\n\n module.exports.isFunction = isFunction;\n\n module.exports.isObject = isObject;\n\n module.exports.isArray = isArray;\n\n module.exports.isEmpty = isEmpty;\n\n module.exports.isPlainObject = isPlainObject;\n\n module.exports.getValue = getValue;\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMImplementation;\n\n module.exports = XMLDOMImplementation = (function() {\n function XMLDOMImplementation() {}\n\n XMLDOMImplementation.prototype.hasFeature = function(feature, version) {\n return true;\n };\n\n XMLDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.createDocument = function(namespaceURI, qualifiedName, doctype) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.createHTMLDocument = function(title) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.getFeature = function(feature, version) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n return XMLDOMImplementation;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMErrorHandler;\n\n module.exports = XMLDOMErrorHandler = (function() {\n function XMLDOMErrorHandler() {}\n\n XMLDOMErrorHandler.prototype.handleError = function(error) {\n throw new Error(error);\n };\n\n return XMLDOMErrorHandler;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMStringList;\n\n module.exports = XMLDOMStringList = (function() {\n function XMLDOMStringList(arr) {\n this.arr = arr || [];\n }\n\n Object.defineProperty(XMLDOMStringList.prototype, 'length', {\n get: function() {\n return this.arr.length;\n }\n });\n\n XMLDOMStringList.prototype.item = function(index) {\n return this.arr[index] || null;\n };\n\n XMLDOMStringList.prototype.contains = function(str) {\n return this.arr.indexOf(str) !== -1;\n };\n\n return XMLDOMStringList;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMConfiguration, XMLDOMErrorHandler, XMLDOMStringList;\n\n XMLDOMErrorHandler = require('./XMLDOMErrorHandler');\n\n XMLDOMStringList = require('./XMLDOMStringList');\n\n module.exports = XMLDOMConfiguration = (function() {\n function XMLDOMConfiguration() {\n var clonedSelf;\n this.defaultParams = {\n \"canonical-form\": false,\n \"cdata-sections\": false,\n \"comments\": false,\n \"datatype-normalization\": false,\n \"element-content-whitespace\": true,\n \"entities\": true,\n \"error-handler\": new XMLDOMErrorHandler(),\n \"infoset\": true,\n \"validate-if-schema\": false,\n \"namespaces\": true,\n \"namespace-declarations\": true,\n \"normalize-characters\": false,\n \"schema-location\": '',\n \"schema-type\": '',\n \"split-cdata-sections\": true,\n \"validate\": false,\n \"well-formed\": true\n };\n this.params = clonedSelf = Object.create(this.defaultParams);\n }\n\n Object.defineProperty(XMLDOMConfiguration.prototype, 'parameterNames', {\n get: function() {\n return new XMLDOMStringList(Object.keys(this.defaultParams));\n }\n });\n\n XMLDOMConfiguration.prototype.getParameter = function(name) {\n if (this.params.hasOwnProperty(name)) {\n return this.params[name];\n } else {\n return null;\n }\n };\n\n XMLDOMConfiguration.prototype.canSetParameter = function(name, value) {\n return true;\n };\n\n XMLDOMConfiguration.prototype.setParameter = function(name, value) {\n if (value != null) {\n return this.params[name] = value;\n } else {\n return delete this.params[name];\n }\n };\n\n return XMLDOMConfiguration;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n Element: 1,\n Attribute: 2,\n Text: 3,\n CData: 4,\n EntityReference: 5,\n EntityDeclaration: 6,\n ProcessingInstruction: 7,\n Comment: 8,\n Document: 9,\n DocType: 10,\n DocumentFragment: 11,\n NotationDeclaration: 12,\n Declaration: 201,\n Raw: 202,\n AttributeDeclaration: 203,\n ElementDeclaration: 204,\n Dummy: 205\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLAttribute, XMLNode;\n\n NodeType = require('./NodeType');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLAttribute = (function() {\n function XMLAttribute(parent, name, value) {\n this.parent = parent;\n if (this.parent) {\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n }\n if (name == null) {\n throw new Error(\"Missing attribute name. \" + this.debugInfo(name));\n }\n this.name = this.stringify.name(name);\n this.value = this.stringify.attValue(value);\n this.type = NodeType.Attribute;\n this.isId = false;\n this.schemaTypeInfo = null;\n }\n\n Object.defineProperty(XMLAttribute.prototype, 'nodeType', {\n get: function() {\n return this.type;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'ownerElement', {\n get: function() {\n return this.parent;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'textContent', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'namespaceURI', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'prefix', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'localName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'specified', {\n get: function() {\n return true;\n }\n });\n\n XMLAttribute.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLAttribute.prototype.toString = function(options) {\n return this.options.writer.attribute(this, this.options.writer.filterOptions(options));\n };\n\n XMLAttribute.prototype.debugInfo = function(name) {\n name = name || this.name;\n if (name == null) {\n return \"parent: <\" + this.parent.name + \">\";\n } else {\n return \"attribute: {\" + name + \"}, parent: <\" + this.parent.name + \">\";\n }\n };\n\n XMLAttribute.prototype.isEqualNode = function(node) {\n if (node.namespaceURI !== this.namespaceURI) {\n return false;\n }\n if (node.prefix !== this.prefix) {\n return false;\n }\n if (node.localName !== this.localName) {\n return false;\n }\n if (node.value !== this.value) {\n return false;\n }\n return true;\n };\n\n return XMLAttribute;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLNamedNodeMap;\n\n module.exports = XMLNamedNodeMap = (function() {\n function XMLNamedNodeMap(nodes) {\n this.nodes = nodes;\n }\n\n Object.defineProperty(XMLNamedNodeMap.prototype, 'length', {\n get: function() {\n return Object.keys(this.nodes).length || 0;\n }\n });\n\n XMLNamedNodeMap.prototype.clone = function() {\n return this.nodes = null;\n };\n\n XMLNamedNodeMap.prototype.getNamedItem = function(name) {\n return this.nodes[name];\n };\n\n XMLNamedNodeMap.prototype.setNamedItem = function(node) {\n var oldNode;\n oldNode = this.nodes[node.nodeName];\n this.nodes[node.nodeName] = node;\n return oldNode || null;\n };\n\n XMLNamedNodeMap.prototype.removeNamedItem = function(name) {\n var oldNode;\n oldNode = this.nodes[name];\n delete this.nodes[name];\n return oldNode || null;\n };\n\n XMLNamedNodeMap.prototype.item = function(index) {\n return this.nodes[Object.keys(this.nodes)[index]] || null;\n };\n\n XMLNamedNodeMap.prototype.getNamedItemNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLNamedNodeMap.prototype.setNamedItemNS = function(node) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLNamedNodeMap.prototype.removeNamedItemNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n return XMLNamedNodeMap;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject, ref,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n\n module.exports = XMLElement = (function(superClass) {\n extend(XMLElement, superClass);\n\n function XMLElement(parent, name, attributes) {\n var child, j, len, ref1;\n XMLElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing element name. \" + this.debugInfo());\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.Element;\n this.attribs = {};\n this.schemaTypeInfo = null;\n if (attributes != null) {\n this.attribute(attributes);\n }\n if (parent.type === NodeType.Document) {\n this.isRoot = true;\n this.documentObject = parent;\n parent.rootObject = this;\n if (parent.children) {\n ref1 = parent.children;\n for (j = 0, len = ref1.length; j < len; j++) {\n child = ref1[j];\n if (child.type === NodeType.DocType) {\n child.name = this.name;\n break;\n }\n }\n }\n }\n }\n\n Object.defineProperty(XMLElement.prototype, 'tagName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'namespaceURI', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'prefix', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'localName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'id', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'className', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'classList', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'attributes', {\n get: function() {\n if (!this.attributeMap || !this.attributeMap.nodes) {\n this.attributeMap = new XMLNamedNodeMap(this.attribs);\n }\n return this.attributeMap;\n }\n });\n\n XMLElement.prototype.clone = function() {\n var att, attName, clonedSelf, ref1;\n clonedSelf = Object.create(this);\n if (clonedSelf.isRoot) {\n clonedSelf.documentObject = null;\n }\n clonedSelf.attribs = {};\n ref1 = this.attribs;\n for (attName in ref1) {\n if (!hasProp.call(ref1, attName)) continue;\n att = ref1[attName];\n clonedSelf.attribs[attName] = att.clone();\n }\n clonedSelf.children = [];\n this.children.forEach(function(child) {\n var clonedChild;\n clonedChild = child.clone();\n clonedChild.parent = clonedSelf;\n return clonedSelf.children.push(clonedChild);\n });\n return clonedSelf;\n };\n\n XMLElement.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (this.options.keepNullAttributes && (value == null)) {\n this.attribs[name] = new XMLAttribute(this, name, \"\");\n } else if (value != null) {\n this.attribs[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLElement.prototype.removeAttribute = function(name) {\n var attName, j, len;\n if (name == null) {\n throw new Error(\"Missing attribute name. \" + this.debugInfo());\n }\n name = getValue(name);\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n attName = name[j];\n delete this.attribs[attName];\n }\n } else {\n delete this.attribs[name];\n }\n return this;\n };\n\n XMLElement.prototype.toString = function(options) {\n return this.options.writer.element(this, this.options.writer.filterOptions(options));\n };\n\n XMLElement.prototype.att = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.a = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.getAttribute = function(name) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name].value;\n } else {\n return null;\n }\n };\n\n XMLElement.prototype.setAttribute = function(name, value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNode = function(name) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name];\n } else {\n return null;\n }\n };\n\n XMLElement.prototype.setAttributeNode = function(newAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.removeAttributeNode = function(oldAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagName = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.removeAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setAttributeNodeNS = function(newAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.hasAttribute = function(name) {\n return this.attribs.hasOwnProperty(name);\n };\n\n XMLElement.prototype.hasAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setIdAttribute = function(name, isId) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name].isId;\n } else {\n return isId;\n }\n };\n\n XMLElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setIdAttributeNode = function(idAttr, isId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagName = function(tagname) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByClassName = function(classNames) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.isEqualNode = function(node) {\n var i, j, ref1;\n if (!XMLElement.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.namespaceURI !== this.namespaceURI) {\n return false;\n }\n if (node.prefix !== this.prefix) {\n return false;\n }\n if (node.localName !== this.localName) {\n return false;\n }\n if (node.attribs.length !== this.attribs.length) {\n return false;\n }\n for (i = j = 0, ref1 = this.attribs.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; i = 0 <= ref1 ? ++j : --j) {\n if (!this.attribs[i].isEqualNode(node.attribs[i])) {\n return false;\n }\n }\n return true;\n };\n\n return XMLElement;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLCharacterData, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLCharacterData = (function(superClass) {\n extend(XMLCharacterData, superClass);\n\n function XMLCharacterData(parent) {\n XMLCharacterData.__super__.constructor.call(this, parent);\n this.value = '';\n }\n\n Object.defineProperty(XMLCharacterData.prototype, 'data', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n Object.defineProperty(XMLCharacterData.prototype, 'length', {\n get: function() {\n return this.value.length;\n }\n });\n\n Object.defineProperty(XMLCharacterData.prototype, 'textContent', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n XMLCharacterData.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLCharacterData.prototype.substringData = function(offset, count) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.appendData = function(arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.insertData = function(offset, arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.deleteData = function(offset, count) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.replaceData = function(offset, count, arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.isEqualNode = function(node) {\n if (!XMLCharacterData.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.data !== this.data) {\n return false;\n }\n return true;\n };\n\n return XMLCharacterData;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCData, XMLCharacterData,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLCData = (function(superClass) {\n extend(XMLCData, superClass);\n\n function XMLCData(parent, text) {\n XMLCData.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing CDATA text. \" + this.debugInfo());\n }\n this.name = \"#cdata-section\";\n this.type = NodeType.CData;\n this.value = this.stringify.cdata(text);\n }\n\n XMLCData.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLCData.prototype.toString = function(options) {\n return this.options.writer.cdata(this, this.options.writer.filterOptions(options));\n };\n\n return XMLCData;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLComment,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLComment = (function(superClass) {\n extend(XMLComment, superClass);\n\n function XMLComment(parent, text) {\n XMLComment.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing comment text. \" + this.debugInfo());\n }\n this.name = \"#comment\";\n this.type = NodeType.Comment;\n this.value = this.stringify.comment(text);\n }\n\n XMLComment.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLComment.prototype.toString = function(options) {\n return this.options.writer.comment(this, this.options.writer.filterOptions(options));\n };\n\n return XMLComment;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDeclaration, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDeclaration = (function(superClass) {\n extend(XMLDeclaration, superClass);\n\n function XMLDeclaration(parent, version, encoding, standalone) {\n var ref;\n XMLDeclaration.__super__.constructor.call(this, parent);\n if (isObject(version)) {\n ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;\n }\n if (!version) {\n version = '1.0';\n }\n this.type = NodeType.Declaration;\n this.version = this.stringify.xmlVersion(version);\n if (encoding != null) {\n this.encoding = this.stringify.xmlEncoding(encoding);\n }\n if (standalone != null) {\n this.standalone = this.stringify.xmlStandalone(standalone);\n }\n }\n\n XMLDeclaration.prototype.toString = function(options) {\n return this.options.writer.declaration(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDeclaration;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDAttList, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDAttList = (function(superClass) {\n extend(XMLDTDAttList, superClass);\n\n function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n XMLDTDAttList.__super__.constructor.call(this, parent);\n if (elementName == null) {\n throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n }\n if (attributeName == null) {\n throw new Error(\"Missing DTD attribute name. \" + this.debugInfo(elementName));\n }\n if (!attributeType) {\n throw new Error(\"Missing DTD attribute type. \" + this.debugInfo(elementName));\n }\n if (!defaultValueType) {\n throw new Error(\"Missing DTD attribute default. \" + this.debugInfo(elementName));\n }\n if (defaultValueType.indexOf('#') !== 0) {\n defaultValueType = '#' + defaultValueType;\n }\n if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {\n throw new Error(\"Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n }\n if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {\n throw new Error(\"Default value only applies to #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n }\n this.elementName = this.stringify.name(elementName);\n this.type = NodeType.AttributeDeclaration;\n this.attributeName = this.stringify.name(attributeName);\n this.attributeType = this.stringify.dtdAttType(attributeType);\n if (defaultValue) {\n this.defaultValue = this.stringify.dtdAttDefault(defaultValue);\n }\n this.defaultValueType = defaultValueType;\n }\n\n XMLDTDAttList.prototype.toString = function(options) {\n return this.options.writer.dtdAttList(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDAttList;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDEntity, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDEntity = (function(superClass) {\n extend(XMLDTDEntity, superClass);\n\n function XMLDTDEntity(parent, pe, name, value) {\n XMLDTDEntity.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD entity name. \" + this.debugInfo(name));\n }\n if (value == null) {\n throw new Error(\"Missing DTD entity value. \" + this.debugInfo(name));\n }\n this.pe = !!pe;\n this.name = this.stringify.name(name);\n this.type = NodeType.EntityDeclaration;\n if (!isObject(value)) {\n this.value = this.stringify.dtdEntityValue(value);\n this.internal = true;\n } else {\n if (!value.pubID && !value.sysID) {\n throw new Error(\"Public and/or system identifiers are required for an external entity. \" + this.debugInfo(name));\n }\n if (value.pubID && !value.sysID) {\n throw new Error(\"System identifier is required for a public external entity. \" + this.debugInfo(name));\n }\n this.internal = false;\n if (value.pubID != null) {\n this.pubID = this.stringify.dtdPubID(value.pubID);\n }\n if (value.sysID != null) {\n this.sysID = this.stringify.dtdSysID(value.sysID);\n }\n if (value.nData != null) {\n this.nData = this.stringify.dtdNData(value.nData);\n }\n if (this.pe && this.nData) {\n throw new Error(\"Notation declaration is not allowed in a parameter entity. \" + this.debugInfo(name));\n }\n }\n }\n\n Object.defineProperty(XMLDTDEntity.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'notationName', {\n get: function() {\n return this.nData || null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'inputEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'xmlEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'xmlVersion', {\n get: function() {\n return null;\n }\n });\n\n XMLDTDEntity.prototype.toString = function(options) {\n return this.options.writer.dtdEntity(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDEntity;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDElement, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDElement = (function(superClass) {\n extend(XMLDTDElement, superClass);\n\n function XMLDTDElement(parent, name, value) {\n XMLDTDElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n }\n if (!value) {\n value = '(#PCDATA)';\n }\n if (Array.isArray(value)) {\n value = '(' + value.join(',') + ')';\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.ElementDeclaration;\n this.value = this.stringify.dtdElementValue(value);\n }\n\n XMLDTDElement.prototype.toString = function(options) {\n return this.options.writer.dtdElement(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDElement;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDNotation, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDNotation = (function(superClass) {\n extend(XMLDTDNotation, superClass);\n\n function XMLDTDNotation(parent, name, value) {\n XMLDTDNotation.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD notation name. \" + this.debugInfo(name));\n }\n if (!value.pubID && !value.sysID) {\n throw new Error(\"Public or system identifiers are required for an external entity. \" + this.debugInfo(name));\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.NotationDeclaration;\n if (value.pubID != null) {\n this.pubID = this.stringify.dtdPubID(value.pubID);\n }\n if (value.sysID != null) {\n this.sysID = this.stringify.dtdSysID(value.sysID);\n }\n }\n\n Object.defineProperty(XMLDTDNotation.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDTDNotation.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n XMLDTDNotation.prototype.toString = function(options) {\n return this.options.writer.dtdNotation(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDNotation;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNamedNodeMap, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n\n module.exports = XMLDocType = (function(superClass) {\n extend(XMLDocType, superClass);\n\n function XMLDocType(parent, pubID, sysID) {\n var child, i, len, ref, ref1, ref2;\n XMLDocType.__super__.constructor.call(this, parent);\n this.type = NodeType.DocType;\n if (parent.children) {\n ref = parent.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.Element) {\n this.name = child.name;\n break;\n }\n }\n }\n this.documentObject = parent;\n if (isObject(pubID)) {\n ref1 = pubID, pubID = ref1.pubID, sysID = ref1.sysID;\n }\n if (sysID == null) {\n ref2 = [pubID, sysID], sysID = ref2[0], pubID = ref2[1];\n }\n if (pubID != null) {\n this.pubID = this.stringify.dtdPubID(pubID);\n }\n if (sysID != null) {\n this.sysID = this.stringify.dtdSysID(sysID);\n }\n }\n\n Object.defineProperty(XMLDocType.prototype, 'entities', {\n get: function() {\n var child, i, len, nodes, ref;\n nodes = {};\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if ((child.type === NodeType.EntityDeclaration) && !child.pe) {\n nodes[child.name] = child;\n }\n }\n return new XMLNamedNodeMap(nodes);\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'notations', {\n get: function() {\n var child, i, len, nodes, ref;\n nodes = {};\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.NotationDeclaration) {\n nodes[child.name] = child;\n }\n }\n return new XMLNamedNodeMap(nodes);\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'internalSubset', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n XMLDocType.prototype.element = function(name, value) {\n var child;\n child = new XMLDTDElement(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var child;\n child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.entity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, false, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.pEntity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, true, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.notation = function(name, value) {\n var child;\n child = new XMLDTDNotation(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.toString = function(options) {\n return this.options.writer.docType(this, this.options.writer.filterOptions(options));\n };\n\n XMLDocType.prototype.ele = function(name, value) {\n return this.element(name, value);\n };\n\n XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);\n };\n\n XMLDocType.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocType.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocType.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n XMLDocType.prototype.up = function() {\n return this.root() || this.documentObject;\n };\n\n XMLDocType.prototype.isEqualNode = function(node) {\n if (!XMLDocType.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.name !== this.name) {\n return false;\n }\n if (node.publicId !== this.publicId) {\n return false;\n }\n if (node.systemId !== this.systemId) {\n return false;\n }\n return true;\n };\n\n return XMLDocType;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLNode, XMLRaw,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLRaw = (function(superClass) {\n extend(XMLRaw, superClass);\n\n function XMLRaw(parent, text) {\n XMLRaw.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing raw text. \" + this.debugInfo());\n }\n this.type = NodeType.Raw;\n this.value = this.stringify.raw(text);\n }\n\n XMLRaw.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLRaw.prototype.toString = function(options) {\n return this.options.writer.raw(this, this.options.writer.filterOptions(options));\n };\n\n return XMLRaw;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLText = (function(superClass) {\n extend(XMLText, superClass);\n\n function XMLText(parent, text) {\n XMLText.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing element text. \" + this.debugInfo());\n }\n this.name = \"#text\";\n this.type = NodeType.Text;\n this.value = this.stringify.text(text);\n }\n\n Object.defineProperty(XMLText.prototype, 'isElementContentWhitespace', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLText.prototype, 'wholeText', {\n get: function() {\n var next, prev, str;\n str = '';\n prev = this.previousSibling;\n while (prev) {\n str = prev.data + str;\n prev = prev.previousSibling;\n }\n str += this.data;\n next = this.nextSibling;\n while (next) {\n str = str + next.data;\n next = next.nextSibling;\n }\n return str;\n }\n });\n\n XMLText.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLText.prototype.toString = function(options) {\n return this.options.writer.text(this, this.options.writer.filterOptions(options));\n };\n\n XMLText.prototype.splitText = function(offset) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLText.prototype.replaceWholeText = function(content) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n return XMLText;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLProcessingInstruction,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLProcessingInstruction = (function(superClass) {\n extend(XMLProcessingInstruction, superClass);\n\n function XMLProcessingInstruction(parent, target, value) {\n XMLProcessingInstruction.__super__.constructor.call(this, parent);\n if (target == null) {\n throw new Error(\"Missing instruction target. \" + this.debugInfo());\n }\n this.type = NodeType.ProcessingInstruction;\n this.target = this.stringify.insTarget(target);\n this.name = this.target;\n if (value) {\n this.value = this.stringify.insValue(value);\n }\n }\n\n XMLProcessingInstruction.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLProcessingInstruction.prototype.toString = function(options) {\n return this.options.writer.processingInstruction(this, this.options.writer.filterOptions(options));\n };\n\n XMLProcessingInstruction.prototype.isEqualNode = function(node) {\n if (!XMLProcessingInstruction.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.target !== this.target) {\n return false;\n }\n return true;\n };\n\n return XMLProcessingInstruction;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDummy, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDummy = (function(superClass) {\n extend(XMLDummy, superClass);\n\n function XMLDummy(parent) {\n XMLDummy.__super__.constructor.call(this, parent);\n this.type = NodeType.Dummy;\n }\n\n XMLDummy.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLDummy.prototype.toString = function(options) {\n return '';\n };\n\n return XMLDummy;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLNodeList;\n\n module.exports = XMLNodeList = (function() {\n function XMLNodeList(nodes) {\n this.nodes = nodes;\n }\n\n Object.defineProperty(XMLNodeList.prototype, 'length', {\n get: function() {\n return this.nodes.length || 0;\n }\n });\n\n XMLNodeList.prototype.clone = function() {\n return this.nodes = null;\n };\n\n XMLNodeList.prototype.item = function(index) {\n return this.nodes[index] || null;\n };\n\n return XMLNodeList;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n Disconnected: 1,\n Preceding: 2,\n Following: 4,\n Contains: 8,\n ContainedBy: 16,\n ImplementationSpecific: 32\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1,\n hasProp = {}.hasOwnProperty;\n\n ref1 = require('./Utility'), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue;\n\n XMLElement = null;\n\n XMLCData = null;\n\n XMLComment = null;\n\n XMLDeclaration = null;\n\n XMLDocType = null;\n\n XMLRaw = null;\n\n XMLText = null;\n\n XMLProcessingInstruction = null;\n\n XMLDummy = null;\n\n NodeType = null;\n\n XMLNodeList = null;\n\n XMLNamedNodeMap = null;\n\n DocumentPosition = null;\n\n module.exports = XMLNode = (function() {\n function XMLNode(parent1) {\n this.parent = parent1;\n if (this.parent) {\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n }\n this.value = null;\n this.children = [];\n this.baseURI = null;\n if (!XMLElement) {\n XMLElement = require('./XMLElement');\n XMLCData = require('./XMLCData');\n XMLComment = require('./XMLComment');\n XMLDeclaration = require('./XMLDeclaration');\n XMLDocType = require('./XMLDocType');\n XMLRaw = require('./XMLRaw');\n XMLText = require('./XMLText');\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n XMLDummy = require('./XMLDummy');\n NodeType = require('./NodeType');\n XMLNodeList = require('./XMLNodeList');\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n DocumentPosition = require('./DocumentPosition');\n }\n }\n\n Object.defineProperty(XMLNode.prototype, 'nodeName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nodeType', {\n get: function() {\n return this.type;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nodeValue', {\n get: function() {\n return this.value;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'parentNode', {\n get: function() {\n return this.parent;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'childNodes', {\n get: function() {\n if (!this.childNodeList || !this.childNodeList.nodes) {\n this.childNodeList = new XMLNodeList(this.children);\n }\n return this.childNodeList;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'firstChild', {\n get: function() {\n return this.children[0] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'lastChild', {\n get: function() {\n return this.children[this.children.length - 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'previousSibling', {\n get: function() {\n var i;\n i = this.parent.children.indexOf(this);\n return this.parent.children[i - 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nextSibling', {\n get: function() {\n var i;\n i = this.parent.children.indexOf(this);\n return this.parent.children[i + 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'ownerDocument', {\n get: function() {\n return this.document() || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'textContent', {\n get: function() {\n var child, j, len, ref2, str;\n if (this.nodeType === NodeType.Element || this.nodeType === NodeType.DocumentFragment) {\n str = '';\n ref2 = this.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (child.textContent) {\n str += child.textContent;\n }\n }\n return str;\n } else {\n return null;\n }\n },\n set: function(value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n XMLNode.prototype.setParent = function(parent) {\n var child, j, len, ref2, results;\n this.parent = parent;\n if (parent) {\n this.options = parent.options;\n this.stringify = parent.stringify;\n }\n ref2 = this.children;\n results = [];\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n results.push(child.setParent(this));\n }\n return results;\n };\n\n XMLNode.prototype.element = function(name, attributes, text) {\n var childNode, item, j, k, key, lastChild, len, len1, ref2, ref3, val;\n lastChild = null;\n if (attributes === null && (text == null)) {\n ref2 = [{}, null], attributes = ref2[0], text = ref2[1];\n }\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref3 = [attributes, text], text = ref3[0], attributes = ref3[1];\n }\n if (name != null) {\n name = getValue(name);\n }\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n item = name[j];\n lastChild = this.element(item);\n }\n } else if (isFunction(name)) {\n lastChild = this.element(name.apply());\n } else if (isObject(name)) {\n for (key in name) {\n if (!hasProp.call(name, key)) continue;\n val = name[key];\n if (isFunction(val)) {\n val = val.apply();\n }\n if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {\n lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);\n } else if (!this.options.separateArrayItems && Array.isArray(val) && isEmpty(val)) {\n lastChild = this.dummy();\n } else if (isObject(val) && isEmpty(val)) {\n lastChild = this.element(key);\n } else if (!this.options.keepNullNodes && (val == null)) {\n lastChild = this.dummy();\n } else if (!this.options.separateArrayItems && Array.isArray(val)) {\n for (k = 0, len1 = val.length; k < len1; k++) {\n item = val[k];\n childNode = {};\n childNode[key] = item;\n lastChild = this.element(childNode);\n }\n } else if (isObject(val)) {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && key.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.element(val);\n } else {\n lastChild = this.element(key);\n lastChild.element(val);\n }\n } else {\n lastChild = this.element(key, val);\n }\n }\n } else if (!this.options.keepNullNodes && text === null) {\n lastChild = this.dummy();\n } else {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.text(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {\n lastChild = this.cdata(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {\n lastChild = this.comment(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {\n lastChild = this.raw(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {\n lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);\n } else {\n lastChild = this.node(name, attributes, text);\n }\n }\n if (lastChild == null) {\n throw new Error(\"Could not create any elements with: \" + name + \". \" + this.debugInfo());\n }\n return lastChild;\n };\n\n XMLNode.prototype.insertBefore = function(name, attributes, text) {\n var child, i, newChild, refChild, removed;\n if (name != null ? name.type : void 0) {\n newChild = name;\n refChild = attributes;\n newChild.setParent(this);\n if (refChild) {\n i = children.indexOf(refChild);\n removed = children.splice(i);\n children.push(newChild);\n Array.prototype.push.apply(children, removed);\n } else {\n children.push(newChild);\n }\n return newChild;\n } else {\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n }\n };\n\n XMLNode.prototype.insertAfter = function(name, attributes, text) {\n var child, i, removed;\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n };\n\n XMLNode.prototype.remove = function() {\n var i, ref2;\n if (this.isRoot) {\n throw new Error(\"Cannot remove the root element. \" + this.debugInfo());\n }\n i = this.parent.children.indexOf(this);\n [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref2 = [])), ref2;\n return this.parent;\n };\n\n XMLNode.prototype.node = function(name, attributes, text) {\n var child, ref2;\n if (name != null) {\n name = getValue(name);\n }\n attributes || (attributes = {});\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n }\n child = new XMLElement(this, name, attributes);\n if (text != null) {\n child.text(text);\n }\n this.children.push(child);\n return child;\n };\n\n XMLNode.prototype.text = function(value) {\n var child;\n if (isObject(value)) {\n this.element(value);\n }\n child = new XMLText(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.cdata = function(value) {\n var child;\n child = new XMLCData(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.comment = function(value) {\n var child;\n child = new XMLComment(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.commentBefore = function(value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.comment(value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.commentAfter = function(value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.comment(value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.raw = function(value) {\n var child;\n child = new XMLRaw(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.dummy = function() {\n var child;\n child = new XMLDummy(this);\n return child;\n };\n\n XMLNode.prototype.instruction = function(target, value) {\n var insTarget, insValue, instruction, j, len;\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (j = 0, len = target.length; j < len; j++) {\n insTarget = target[j];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n instruction = new XMLProcessingInstruction(this, target, value);\n this.children.push(instruction);\n }\n return this;\n };\n\n XMLNode.prototype.instructionBefore = function(target, value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.instruction(target, value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.instructionAfter = function(target, value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.instruction(target, value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.declaration = function(version, encoding, standalone) {\n var doc, xmldec;\n doc = this.document();\n xmldec = new XMLDeclaration(doc, version, encoding, standalone);\n if (doc.children.length === 0) {\n doc.children.unshift(xmldec);\n } else if (doc.children[0].type === NodeType.Declaration) {\n doc.children[0] = xmldec;\n } else {\n doc.children.unshift(xmldec);\n }\n return doc.root() || doc;\n };\n\n XMLNode.prototype.dtd = function(pubID, sysID) {\n var child, doc, doctype, i, j, k, len, len1, ref2, ref3;\n doc = this.document();\n doctype = new XMLDocType(doc, pubID, sysID);\n ref2 = doc.children;\n for (i = j = 0, len = ref2.length; j < len; i = ++j) {\n child = ref2[i];\n if (child.type === NodeType.DocType) {\n doc.children[i] = doctype;\n return doctype;\n }\n }\n ref3 = doc.children;\n for (i = k = 0, len1 = ref3.length; k < len1; i = ++k) {\n child = ref3[i];\n if (child.isRoot) {\n doc.children.splice(i, 0, doctype);\n return doctype;\n }\n }\n doc.children.push(doctype);\n return doctype;\n };\n\n XMLNode.prototype.up = function() {\n if (this.isRoot) {\n throw new Error(\"The root node has no parent. Use doc() if you need to get the document object.\");\n }\n return this.parent;\n };\n\n XMLNode.prototype.root = function() {\n var node;\n node = this;\n while (node) {\n if (node.type === NodeType.Document) {\n return node.rootObject;\n } else if (node.isRoot) {\n return node;\n } else {\n node = node.parent;\n }\n }\n };\n\n XMLNode.prototype.document = function() {\n var node;\n node = this;\n while (node) {\n if (node.type === NodeType.Document) {\n return node;\n } else {\n node = node.parent;\n }\n }\n };\n\n XMLNode.prototype.end = function(options) {\n return this.document().end(options);\n };\n\n XMLNode.prototype.prev = function() {\n var i;\n i = this.parent.children.indexOf(this);\n if (i < 1) {\n throw new Error(\"Already at the first node. \" + this.debugInfo());\n }\n return this.parent.children[i - 1];\n };\n\n XMLNode.prototype.next = function() {\n var i;\n i = this.parent.children.indexOf(this);\n if (i === -1 || i === this.parent.children.length - 1) {\n throw new Error(\"Already at the last node. \" + this.debugInfo());\n }\n return this.parent.children[i + 1];\n };\n\n XMLNode.prototype.importDocument = function(doc) {\n var clonedRoot;\n clonedRoot = doc.root().clone();\n clonedRoot.parent = this;\n clonedRoot.isRoot = false;\n this.children.push(clonedRoot);\n return this;\n };\n\n XMLNode.prototype.debugInfo = function(name) {\n var ref2, ref3;\n name = name || this.name;\n if ((name == null) && !((ref2 = this.parent) != null ? ref2.name : void 0)) {\n return \"\";\n } else if (name == null) {\n return \"parent: <\" + this.parent.name + \">\";\n } else if (!((ref3 = this.parent) != null ? ref3.name : void 0)) {\n return \"node: <\" + name + \">\";\n } else {\n return \"node: <\" + name + \">, parent: <\" + this.parent.name + \">\";\n }\n };\n\n XMLNode.prototype.ele = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLNode.prototype.doc = function() {\n return this.document();\n };\n\n XMLNode.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLNode.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLNode.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLNode.prototype.u = function() {\n return this.up();\n };\n\n XMLNode.prototype.importXMLBuilder = function(doc) {\n return this.importDocument(doc);\n };\n\n XMLNode.prototype.replaceChild = function(newChild, oldChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.removeChild = function(oldChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.appendChild = function(newChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.hasChildNodes = function() {\n return this.children.length !== 0;\n };\n\n XMLNode.prototype.cloneNode = function(deep) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.normalize = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isSupported = function(feature, version) {\n return true;\n };\n\n XMLNode.prototype.hasAttributes = function() {\n return this.attribs.length !== 0;\n };\n\n XMLNode.prototype.compareDocumentPosition = function(other) {\n var ref, res;\n ref = this;\n if (ref === other) {\n return 0;\n } else if (this.document() !== other.document()) {\n res = DocumentPosition.Disconnected | DocumentPosition.ImplementationSpecific;\n if (Math.random() < 0.5) {\n res |= DocumentPosition.Preceding;\n } else {\n res |= DocumentPosition.Following;\n }\n return res;\n } else if (ref.isAncestor(other)) {\n return DocumentPosition.Contains | DocumentPosition.Preceding;\n } else if (ref.isDescendant(other)) {\n return DocumentPosition.Contains | DocumentPosition.Following;\n } else if (ref.isPreceding(other)) {\n return DocumentPosition.Preceding;\n } else {\n return DocumentPosition.Following;\n }\n };\n\n XMLNode.prototype.isSameNode = function(other) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.lookupPrefix = function(namespaceURI) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isDefaultNamespace = function(namespaceURI) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.lookupNamespaceURI = function(prefix) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isEqualNode = function(node) {\n var i, j, ref2;\n if (node.nodeType !== this.nodeType) {\n return false;\n }\n if (node.children.length !== this.children.length) {\n return false;\n }\n for (i = j = 0, ref2 = this.children.length - 1; 0 <= ref2 ? j <= ref2 : j >= ref2; i = 0 <= ref2 ? ++j : --j) {\n if (!this.children[i].isEqualNode(node.children[i])) {\n return false;\n }\n }\n return true;\n };\n\n XMLNode.prototype.getFeature = function(feature, version) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.setUserData = function(key, data, handler) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.getUserData = function(key) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.contains = function(other) {\n if (!other) {\n return false;\n }\n return other === this || this.isDescendant(other);\n };\n\n XMLNode.prototype.isDescendant = function(node) {\n var child, isDescendantChild, j, len, ref2;\n ref2 = this.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (node === child) {\n return true;\n }\n isDescendantChild = child.isDescendant(node);\n if (isDescendantChild) {\n return true;\n }\n }\n return false;\n };\n\n XMLNode.prototype.isAncestor = function(node) {\n return node.isDescendant(this);\n };\n\n XMLNode.prototype.isPreceding = function(node) {\n var nodePos, thisPos;\n nodePos = this.treePosition(node);\n thisPos = this.treePosition(this);\n if (nodePos === -1 || thisPos === -1) {\n return false;\n } else {\n return nodePos < thisPos;\n }\n };\n\n XMLNode.prototype.isFollowing = function(node) {\n var nodePos, thisPos;\n nodePos = this.treePosition(node);\n thisPos = this.treePosition(this);\n if (nodePos === -1 || thisPos === -1) {\n return false;\n } else {\n return nodePos > thisPos;\n }\n };\n\n XMLNode.prototype.treePosition = function(node) {\n var found, pos;\n pos = 0;\n found = false;\n this.foreachTreeNode(this.document(), function(childNode) {\n pos++;\n if (!found && childNode === node) {\n return found = true;\n }\n });\n if (found) {\n return pos;\n } else {\n return -1;\n }\n };\n\n XMLNode.prototype.foreachTreeNode = function(node, func) {\n var child, j, len, ref2, res;\n node || (node = this.document());\n ref2 = node.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (res = func(child)) {\n return res;\n } else {\n res = this.foreachTreeNode(child, func);\n if (res) {\n return res;\n }\n }\n }\n };\n\n return XMLNode;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLStringifier,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n hasProp = {}.hasOwnProperty;\n\n module.exports = XMLStringifier = (function() {\n function XMLStringifier(options) {\n this.assertLegalName = bind(this.assertLegalName, this);\n this.assertLegalChar = bind(this.assertLegalChar, this);\n var key, ref, value;\n options || (options = {});\n this.options = options;\n if (!this.options.version) {\n this.options.version = '1.0';\n }\n ref = options.stringify || {};\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this[key] = value;\n }\n }\n\n XMLStringifier.prototype.name = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalName('' + val || '');\n };\n\n XMLStringifier.prototype.text = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar(this.textEscape('' + val || ''));\n };\n\n XMLStringifier.prototype.cdata = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n val = val.replace(']]>', ']]]]><![CDATA[>');\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.comment = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (val.match(/--/)) {\n throw new Error(\"Comment text cannot contain double-hypen: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.raw = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return '' + val || '';\n };\n\n XMLStringifier.prototype.attValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar(this.attEscape(val = '' + val || ''));\n };\n\n XMLStringifier.prototype.insTarget = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.insValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (val.match(/\\?>/)) {\n throw new Error(\"Invalid processing instruction value: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.xmlVersion = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (!val.match(/1\\.[0-9]+/)) {\n throw new Error(\"Invalid version number: \" + val);\n }\n return val;\n };\n\n XMLStringifier.prototype.xmlEncoding = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) {\n throw new Error(\"Invalid encoding: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.xmlStandalone = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n if (val) {\n return \"yes\";\n } else {\n return \"no\";\n }\n };\n\n XMLStringifier.prototype.dtdPubID = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdSysID = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdElementValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdAttType = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdAttDefault = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdEntityValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdNData = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.convertAttKey = '@';\n\n XMLStringifier.prototype.convertPIKey = '?';\n\n XMLStringifier.prototype.convertTextKey = '#text';\n\n XMLStringifier.prototype.convertCDataKey = '#cdata';\n\n XMLStringifier.prototype.convertCommentKey = '#comment';\n\n XMLStringifier.prototype.convertRawKey = '#raw';\n\n XMLStringifier.prototype.assertLegalChar = function(str) {\n var regex, res;\n if (this.options.noValidation) {\n return str;\n }\n regex = '';\n if (this.options.version === '1.0') {\n regex = /[\\0-\\x08\\x0B\\f\\x0E-\\x1F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n if (res = str.match(regex)) {\n throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n }\n } else if (this.options.version === '1.1') {\n regex = /[\\0\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n if (res = str.match(regex)) {\n throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n }\n }\n return str;\n };\n\n XMLStringifier.prototype.assertLegalName = function(str) {\n var regex;\n if (this.options.noValidation) {\n return str;\n }\n this.assertLegalChar(str);\n regex = /^([:A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])([\\x2D\\.0-:A-Z_a-z\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])*$/;\n if (!str.match(regex)) {\n throw new Error(\"Invalid character in name\");\n }\n return str;\n };\n\n XMLStringifier.prototype.textEscape = function(str) {\n var ampregex;\n if (this.options.noValidation) {\n return str;\n }\n ampregex = this.options.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n return str.replace(ampregex, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\\r/g, '
');\n };\n\n XMLStringifier.prototype.attEscape = function(str) {\n var ampregex;\n if (this.options.noValidation) {\n return str;\n }\n ampregex = this.options.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n return str.replace(ampregex, '&').replace(/</g, '<').replace(/\"/g, '"').replace(/\\t/g, '	').replace(/\\n/g, '
').replace(/\\r/g, '
');\n };\n\n return XMLStringifier;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n None: 0,\n OpenTag: 1,\n InsideTag: 2,\n CloseTag: 3\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLText, XMLWriterBase, assign,\n hasProp = {}.hasOwnProperty;\n\n assign = require('./Utility').assign;\n\n NodeType = require('./NodeType');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLElement = require('./XMLElement');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDummy = require('./XMLDummy');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLWriterBase = (function() {\n function XMLWriterBase(options) {\n var key, ref, value;\n options || (options = {});\n this.options = options;\n ref = options.writer || {};\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this[\"_\" + key] = this[key];\n this[key] = value;\n }\n }\n\n XMLWriterBase.prototype.filterOptions = function(options) {\n var filteredOptions, ref, ref1, ref2, ref3, ref4, ref5, ref6;\n options || (options = {});\n options = assign({}, this.options, options);\n filteredOptions = {\n writer: this\n };\n filteredOptions.pretty = options.pretty || false;\n filteredOptions.allowEmpty = options.allowEmpty || false;\n filteredOptions.indent = (ref = options.indent) != null ? ref : ' ';\n filteredOptions.newline = (ref1 = options.newline) != null ? ref1 : '\\n';\n filteredOptions.offset = (ref2 = options.offset) != null ? ref2 : 0;\n filteredOptions.dontPrettyTextNodes = (ref3 = (ref4 = options.dontPrettyTextNodes) != null ? ref4 : options.dontprettytextnodes) != null ? ref3 : 0;\n filteredOptions.spaceBeforeSlash = (ref5 = (ref6 = options.spaceBeforeSlash) != null ? ref6 : options.spacebeforeslash) != null ? ref5 : '';\n if (filteredOptions.spaceBeforeSlash === true) {\n filteredOptions.spaceBeforeSlash = ' ';\n }\n filteredOptions.suppressPrettyCount = 0;\n filteredOptions.user = {};\n filteredOptions.state = WriterState.None;\n return filteredOptions;\n };\n\n XMLWriterBase.prototype.indent = function(node, options, level) {\n var indentLevel;\n if (!options.pretty || options.suppressPrettyCount) {\n return '';\n } else if (options.pretty) {\n indentLevel = (level || 0) + options.offset + 1;\n if (indentLevel > 0) {\n return new Array(indentLevel).join(options.indent);\n }\n }\n return '';\n };\n\n XMLWriterBase.prototype.endline = function(node, options, level) {\n if (!options.pretty || options.suppressPrettyCount) {\n return '';\n } else {\n return options.newline;\n }\n };\n\n XMLWriterBase.prototype.attribute = function(att, options, level) {\n var r;\n this.openAttribute(att, options, level);\n r = ' ' + att.name + '=\"' + att.value + '\"';\n this.closeAttribute(att, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.cdata = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<![CDATA[';\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += ']]>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.comment = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!-- ';\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += ' -->' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.declaration = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<?xml';\n options.state = WriterState.InsideTag;\n r += ' version=\"' + node.version + '\"';\n if (node.encoding != null) {\n r += ' encoding=\"' + node.encoding + '\"';\n }\n if (node.standalone != null) {\n r += ' standalone=\"' + node.standalone + '\"';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '?>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.docType = function(node, options, level) {\n var child, i, len, r, ref;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n r += '<!DOCTYPE ' + node.root().name;\n if (node.pubID && node.sysID) {\n r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.sysID) {\n r += ' SYSTEM \"' + node.sysID + '\"';\n }\n if (node.children.length > 0) {\n r += ' [';\n r += this.endline(node, options, level);\n options.state = WriterState.InsideTag;\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n r += ']';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.element = function(node, options, level) {\n var att, child, childNodeCount, firstChildNode, i, j, len, len1, name, prettySuppressed, r, ref, ref1, ref2;\n level || (level = 0);\n prettySuppressed = false;\n r = '';\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r += this.indent(node, options, level) + '<' + node.name;\n ref = node.attribs;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att, options, level);\n }\n childNodeCount = node.children.length;\n firstChildNode = childNodeCount === 0 ? null : node.children[0];\n if (childNodeCount === 0 || node.children.every(function(e) {\n return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';\n })) {\n if (options.allowEmpty) {\n r += '>';\n options.state = WriterState.CloseTag;\n r += '</' + node.name + '>' + this.endline(node, options, level);\n } else {\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '/>' + this.endline(node, options, level);\n }\n } else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {\n r += '>';\n options.state = WriterState.InsideTag;\n options.suppressPrettyCount++;\n prettySuppressed = true;\n r += this.writeChildNode(firstChildNode, options, level + 1);\n options.suppressPrettyCount--;\n prettySuppressed = false;\n options.state = WriterState.CloseTag;\n r += '</' + node.name + '>' + this.endline(node, options, level);\n } else {\n if (options.dontPrettyTextNodes) {\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n if ((child.type === NodeType.Text || child.type === NodeType.Raw) && (child.value != null)) {\n options.suppressPrettyCount++;\n prettySuppressed = true;\n break;\n }\n }\n }\n r += '>' + this.endline(node, options, level);\n options.state = WriterState.InsideTag;\n ref2 = node.children;\n for (j = 0, len1 = ref2.length; j < len1; j++) {\n child = ref2[j];\n r += this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n r += this.indent(node, options, level) + '</' + node.name + '>';\n if (prettySuppressed) {\n options.suppressPrettyCount--;\n }\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n }\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.writeChildNode = function(node, options, level) {\n switch (node.type) {\n case NodeType.CData:\n return this.cdata(node, options, level);\n case NodeType.Comment:\n return this.comment(node, options, level);\n case NodeType.Element:\n return this.element(node, options, level);\n case NodeType.Raw:\n return this.raw(node, options, level);\n case NodeType.Text:\n return this.text(node, options, level);\n case NodeType.ProcessingInstruction:\n return this.processingInstruction(node, options, level);\n case NodeType.Dummy:\n return '';\n case NodeType.Declaration:\n return this.declaration(node, options, level);\n case NodeType.DocType:\n return this.docType(node, options, level);\n case NodeType.AttributeDeclaration:\n return this.dtdAttList(node, options, level);\n case NodeType.ElementDeclaration:\n return this.dtdElement(node, options, level);\n case NodeType.EntityDeclaration:\n return this.dtdEntity(node, options, level);\n case NodeType.NotationDeclaration:\n return this.dtdNotation(node, options, level);\n default:\n throw new Error(\"Unknown XML node type: \" + node.constructor.name);\n }\n };\n\n XMLWriterBase.prototype.processingInstruction = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<?';\n options.state = WriterState.InsideTag;\n r += node.target;\n if (node.value) {\n r += ' ' + node.value;\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '?>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.raw = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.text = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdAttList = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!ATTLIST';\n options.state = WriterState.InsideTag;\n r += ' ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType;\n if (node.defaultValueType !== '#DEFAULT') {\n r += ' ' + node.defaultValueType;\n }\n if (node.defaultValue) {\n r += ' \"' + node.defaultValue + '\"';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdElement = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!ELEMENT';\n options.state = WriterState.InsideTag;\n r += ' ' + node.name + ' ' + node.value;\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdEntity = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!ENTITY';\n options.state = WriterState.InsideTag;\n if (node.pe) {\n r += ' %';\n }\n r += ' ' + node.name;\n if (node.value) {\n r += ' \"' + node.value + '\"';\n } else {\n if (node.pubID && node.sysID) {\n r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.sysID) {\n r += ' SYSTEM \"' + node.sysID + '\"';\n }\n if (node.nData) {\n r += ' NDATA ' + node.nData;\n }\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdNotation = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!NOTATION';\n options.state = WriterState.InsideTag;\n r += ' ' + node.name;\n if (node.pubID && node.sysID) {\n r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.pubID) {\n r += ' PUBLIC \"' + node.pubID + '\"';\n } else if (node.sysID) {\n r += ' SYSTEM \"' + node.sysID + '\"';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.openNode = function(node, options, level) {};\n\n XMLWriterBase.prototype.closeNode = function(node, options, level) {};\n\n XMLWriterBase.prototype.openAttribute = function(att, options, level) {};\n\n XMLWriterBase.prototype.closeAttribute = function(att, options, level) {};\n\n return XMLWriterBase;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLStringWriter, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLWriterBase = require('./XMLWriterBase');\n\n module.exports = XMLStringWriter = (function(superClass) {\n extend(XMLStringWriter, superClass);\n\n function XMLStringWriter(options) {\n XMLStringWriter.__super__.constructor.call(this, options);\n }\n\n XMLStringWriter.prototype.document = function(doc, options) {\n var child, i, len, r, ref;\n options = this.filterOptions(options);\n r = '';\n ref = doc.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += this.writeChildNode(child, options, 0);\n }\n if (options.pretty && r.slice(-options.newline.length) === options.newline) {\n r = r.slice(0, -options.newline.length);\n }\n return r;\n };\n\n return XMLStringWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDOMConfiguration, XMLDOMImplementation, XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isPlainObject = require('./Utility').isPlainObject;\n\n XMLDOMImplementation = require('./XMLDOMImplementation');\n\n XMLDOMConfiguration = require('./XMLDOMConfiguration');\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocument = (function(superClass) {\n extend(XMLDocument, superClass);\n\n function XMLDocument(options) {\n XMLDocument.__super__.constructor.call(this, null);\n this.name = \"#document\";\n this.type = NodeType.Document;\n this.documentURI = null;\n this.domConfig = new XMLDOMConfiguration();\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.stringify = new XMLStringifier(options);\n }\n\n Object.defineProperty(XMLDocument.prototype, 'implementation', {\n value: new XMLDOMImplementation()\n });\n\n Object.defineProperty(XMLDocument.prototype, 'doctype', {\n get: function() {\n var child, i, len, ref;\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.DocType) {\n return child;\n }\n }\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'documentElement', {\n get: function() {\n return this.rootObject || null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'inputEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'strictErrorChecking', {\n get: function() {\n return false;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlEncoding', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].encoding;\n } else {\n return null;\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlStandalone', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].standalone === 'yes';\n } else {\n return false;\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlVersion', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].version;\n } else {\n return \"1.0\";\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'URL', {\n get: function() {\n return this.documentURI;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'origin', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'compatMode', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'characterSet', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'contentType', {\n get: function() {\n return null;\n }\n });\n\n XMLDocument.prototype.end = function(writer) {\n var writerOptions;\n writerOptions = {};\n if (!writer) {\n writer = this.options.writer;\n } else if (isPlainObject(writer)) {\n writerOptions = writer;\n writer = this.options.writer;\n }\n return writer.document(this, writer.filterOptions(writerOptions));\n };\n\n XMLDocument.prototype.toString = function(options) {\n return this.options.writer.document(this, this.options.writer.filterOptions(options));\n };\n\n XMLDocument.prototype.createElement = function(tagName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createDocumentFragment = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createTextNode = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createComment = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createCDATASection = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createProcessingInstruction = function(target, data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createAttribute = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createEntityReference = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByTagName = function(tagname) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.importNode = function(importedNode, deep) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createElementNS = function(namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createAttributeNS = function(namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementById = function(elementId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.adoptNode = function(source) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.normalizeDocument = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.renameNode = function(node, namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByClassName = function(classNames) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createEvent = function(eventInterface) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createRange = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createNodeIterator = function(root, whatToShow, filter) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createTreeWalker = function(root, whatToShow, filter) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n return XMLDocument;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocument, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;\n\n NodeType = require('./NodeType');\n\n XMLDocument = require('./XMLDocument');\n\n XMLElement = require('./XMLElement');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLDocumentCB = (function() {\n function XMLDocumentCB(options, onData, onEnd) {\n var writerOptions;\n this.name = \"?xml\";\n this.type = NodeType.Document;\n options || (options = {});\n writerOptions = {};\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n } else if (isPlainObject(options.writer)) {\n writerOptions = options.writer;\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.writer = options.writer;\n this.writerOptions = this.writer.filterOptions(writerOptions);\n this.stringify = new XMLStringifier(options);\n this.onDataCallback = onData || function() {};\n this.onEndCallback = onEnd || function() {};\n this.currentNode = null;\n this.currentLevel = -1;\n this.openTags = {};\n this.documentStarted = false;\n this.documentCompleted = false;\n this.root = null;\n }\n\n XMLDocumentCB.prototype.createChildNode = function(node) {\n var att, attName, attributes, child, i, len, ref1, ref2;\n switch (node.type) {\n case NodeType.CData:\n this.cdata(node.value);\n break;\n case NodeType.Comment:\n this.comment(node.value);\n break;\n case NodeType.Element:\n attributes = {};\n ref1 = node.attribs;\n for (attName in ref1) {\n if (!hasProp.call(ref1, attName)) continue;\n att = ref1[attName];\n attributes[attName] = att.value;\n }\n this.node(node.name, attributes);\n break;\n case NodeType.Dummy:\n this.dummy();\n break;\n case NodeType.Raw:\n this.raw(node.value);\n break;\n case NodeType.Text:\n this.text(node.value);\n break;\n case NodeType.ProcessingInstruction:\n this.instruction(node.target, node.value);\n break;\n default:\n throw new Error(\"This XML node type is not supported in a JS object: \" + node.constructor.name);\n }\n ref2 = node.children;\n for (i = 0, len = ref2.length; i < len; i++) {\n child = ref2[i];\n this.createChildNode(child);\n if (child.type === NodeType.Element) {\n this.up();\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.dummy = function() {\n return this;\n };\n\n XMLDocumentCB.prototype.node = function(name, attributes, text) {\n var ref1;\n if (name == null) {\n throw new Error(\"Missing node name.\");\n }\n if (this.root && this.currentLevel === -1) {\n throw new Error(\"Document can only have one root node. \" + this.debugInfo(name));\n }\n this.openCurrent();\n name = getValue(name);\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref1 = [attributes, text], text = ref1[0], attributes = ref1[1];\n }\n this.currentNode = new XMLElement(this, name, attributes);\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n if (text != null) {\n this.text(text);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.element = function(name, attributes, text) {\n var child, i, len, oldValidationFlag, ref1, root;\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n this.dtdElement.apply(this, arguments);\n } else {\n if (Array.isArray(name) || isObject(name) || isFunction(name)) {\n oldValidationFlag = this.options.noValidation;\n this.options.noValidation = true;\n root = new XMLDocument(this.options).element('TEMP_ROOT');\n root.element(name);\n this.options.noValidation = oldValidationFlag;\n ref1 = root.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n this.createChildNode(child);\n if (child.type === NodeType.Element) {\n this.up();\n }\n }\n } else {\n this.node(name, attributes, text);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (!this.currentNode || this.currentNode.children) {\n throw new Error(\"att() can only be used immediately after an ele() call in callback mode. \" + this.debugInfo(name));\n }\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (this.options.keepNullAttributes && (value == null)) {\n this.currentNode.attribs[name] = new XMLAttribute(this, name, \"\");\n } else if (value != null) {\n this.currentNode.attribs[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.text = function(value) {\n var node;\n this.openCurrent();\n node = new XMLText(this, value);\n this.onData(this.writer.text(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.cdata = function(value) {\n var node;\n this.openCurrent();\n node = new XMLCData(this, value);\n this.onData(this.writer.cdata(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.comment = function(value) {\n var node;\n this.openCurrent();\n node = new XMLComment(this, value);\n this.onData(this.writer.comment(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.raw = function(value) {\n var node;\n this.openCurrent();\n node = new XMLRaw(this, value);\n this.onData(this.writer.raw(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.instruction = function(target, value) {\n var i, insTarget, insValue, len, node;\n this.openCurrent();\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (i = 0, len = target.length; i < len; i++) {\n insTarget = target[i];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n node = new XMLProcessingInstruction(this, target, value);\n this.onData(this.writer.processingInstruction(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {\n var node;\n this.openCurrent();\n if (this.documentStarted) {\n throw new Error(\"declaration() must be the first node.\");\n }\n node = new XMLDeclaration(this, version, encoding, standalone);\n this.onData(this.writer.declaration(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {\n this.openCurrent();\n if (root == null) {\n throw new Error(\"Missing root node name.\");\n }\n if (this.root) {\n throw new Error(\"dtd() must come before the root node.\");\n }\n this.currentNode = new XMLDocType(this, pubID, sysID);\n this.currentNode.rootNodeName = root;\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n return this;\n };\n\n XMLDocumentCB.prototype.dtdElement = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDElement(this, name, value);\n this.onData(this.writer.dtdElement(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var node;\n this.openCurrent();\n node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.onData(this.writer.dtdAttList(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.entity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, false, name, value);\n this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.pEntity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, true, name, value);\n this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.notation = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDNotation(this, name, value);\n this.onData(this.writer.dtdNotation(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.up = function() {\n if (this.currentLevel < 0) {\n throw new Error(\"The document node has no parent.\");\n }\n if (this.currentNode) {\n if (this.currentNode.children) {\n this.closeNode(this.currentNode);\n } else {\n this.openNode(this.currentNode);\n }\n this.currentNode = null;\n } else {\n this.closeNode(this.openTags[this.currentLevel]);\n }\n delete this.openTags[this.currentLevel];\n this.currentLevel--;\n return this;\n };\n\n XMLDocumentCB.prototype.end = function() {\n while (this.currentLevel >= 0) {\n this.up();\n }\n return this.onEnd();\n };\n\n XMLDocumentCB.prototype.openCurrent = function() {\n if (this.currentNode) {\n this.currentNode.children = true;\n return this.openNode(this.currentNode);\n }\n };\n\n XMLDocumentCB.prototype.openNode = function(node) {\n var att, chunk, name, ref1;\n if (!node.isOpen) {\n if (!this.root && this.currentLevel === 0 && node.type === NodeType.Element) {\n this.root = node;\n }\n chunk = '';\n if (node.type === NodeType.Element) {\n this.writerOptions.state = WriterState.OpenTag;\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<' + node.name;\n ref1 = node.attribs;\n for (name in ref1) {\n if (!hasProp.call(ref1, name)) continue;\n att = ref1[name];\n chunk += this.writer.attribute(att, this.writerOptions, this.currentLevel);\n }\n chunk += (node.children ? '>' : '/>') + this.writer.endline(node, this.writerOptions, this.currentLevel);\n this.writerOptions.state = WriterState.InsideTag;\n } else {\n this.writerOptions.state = WriterState.OpenTag;\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<!DOCTYPE ' + node.rootNodeName;\n if (node.pubID && node.sysID) {\n chunk += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.sysID) {\n chunk += ' SYSTEM \"' + node.sysID + '\"';\n }\n if (node.children) {\n chunk += ' [';\n this.writerOptions.state = WriterState.InsideTag;\n } else {\n this.writerOptions.state = WriterState.CloseTag;\n chunk += '>';\n }\n chunk += this.writer.endline(node, this.writerOptions, this.currentLevel);\n }\n this.onData(chunk, this.currentLevel);\n return node.isOpen = true;\n }\n };\n\n XMLDocumentCB.prototype.closeNode = function(node) {\n var chunk;\n if (!node.isClosed) {\n chunk = '';\n this.writerOptions.state = WriterState.CloseTag;\n if (node.type === NodeType.Element) {\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '</' + node.name + '>' + this.writer.endline(node, this.writerOptions, this.currentLevel);\n } else {\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + ']>' + this.writer.endline(node, this.writerOptions, this.currentLevel);\n }\n this.writerOptions.state = WriterState.None;\n this.onData(chunk, this.currentLevel);\n return node.isClosed = true;\n }\n };\n\n XMLDocumentCB.prototype.onData = function(chunk, level) {\n this.documentStarted = true;\n return this.onDataCallback(chunk, level + 1);\n };\n\n XMLDocumentCB.prototype.onEnd = function() {\n this.documentCompleted = true;\n return this.onEndCallback();\n };\n\n XMLDocumentCB.prototype.debugInfo = function(name) {\n if (name == null) {\n return \"\";\n } else {\n return \"node: <\" + name + \">\";\n }\n };\n\n XMLDocumentCB.prototype.ele = function() {\n return this.element.apply(this, arguments);\n };\n\n XMLDocumentCB.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {\n return this.doctype(root, pubID, sysID);\n };\n\n XMLDocumentCB.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLDocumentCB.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.att = function() {\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.a = function() {\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocumentCB.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocumentCB.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n return XMLDocumentCB;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLStreamWriter, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLWriterBase = require('./XMLWriterBase');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLStreamWriter = (function(superClass) {\n extend(XMLStreamWriter, superClass);\n\n function XMLStreamWriter(stream, options) {\n this.stream = stream;\n XMLStreamWriter.__super__.constructor.call(this, options);\n }\n\n XMLStreamWriter.prototype.endline = function(node, options, level) {\n if (node.isLastRootNode && options.state === WriterState.CloseTag) {\n return '';\n } else {\n return XMLStreamWriter.__super__.endline.call(this, node, options, level);\n }\n };\n\n XMLStreamWriter.prototype.document = function(doc, options) {\n var child, i, j, k, len, len1, ref, ref1, results;\n ref = doc.children;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n child = ref[i];\n child.isLastRootNode = i === doc.children.length - 1;\n }\n options = this.filterOptions(options);\n ref1 = doc.children;\n results = [];\n for (k = 0, len1 = ref1.length; k < len1; k++) {\n child = ref1[k];\n results.push(this.writeChildNode(child, options, 0));\n }\n return results;\n };\n\n XMLStreamWriter.prototype.attribute = function(att, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.attribute.call(this, att, options, level));\n };\n\n XMLStreamWriter.prototype.cdata = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.cdata.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.comment = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.comment.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.declaration = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.declaration.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.docType = function(node, options, level) {\n var child, j, len, ref;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n this.stream.write(this.indent(node, options, level));\n this.stream.write('<!DOCTYPE ' + node.root().name);\n if (node.pubID && node.sysID) {\n this.stream.write(' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"');\n } else if (node.sysID) {\n this.stream.write(' SYSTEM \"' + node.sysID + '\"');\n }\n if (node.children.length > 0) {\n this.stream.write(' [');\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.InsideTag;\n ref = node.children;\n for (j = 0, len = ref.length; j < len; j++) {\n child = ref[j];\n this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n this.stream.write(']');\n }\n options.state = WriterState.CloseTag;\n this.stream.write(options.spaceBeforeSlash + '>');\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.None;\n return this.closeNode(node, options, level);\n };\n\n XMLStreamWriter.prototype.element = function(node, options, level) {\n var att, child, childNodeCount, firstChildNode, j, len, name, prettySuppressed, ref, ref1;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n this.stream.write(this.indent(node, options, level) + '<' + node.name);\n ref = node.attribs;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n this.attribute(att, options, level);\n }\n childNodeCount = node.children.length;\n firstChildNode = childNodeCount === 0 ? null : node.children[0];\n if (childNodeCount === 0 || node.children.every(function(e) {\n return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';\n })) {\n if (options.allowEmpty) {\n this.stream.write('>');\n options.state = WriterState.CloseTag;\n this.stream.write('</' + node.name + '>');\n } else {\n options.state = WriterState.CloseTag;\n this.stream.write(options.spaceBeforeSlash + '/>');\n }\n } else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {\n this.stream.write('>');\n options.state = WriterState.InsideTag;\n options.suppressPrettyCount++;\n prettySuppressed = true;\n this.writeChildNode(firstChildNode, options, level + 1);\n options.suppressPrettyCount--;\n prettySuppressed = false;\n options.state = WriterState.CloseTag;\n this.stream.write('</' + node.name + '>');\n } else {\n this.stream.write('>' + this.endline(node, options, level));\n options.state = WriterState.InsideTag;\n ref1 = node.children;\n for (j = 0, len = ref1.length; j < len; j++) {\n child = ref1[j];\n this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n this.stream.write(this.indent(node, options, level) + '</' + node.name + '>');\n }\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.None;\n return this.closeNode(node, options, level);\n };\n\n XMLStreamWriter.prototype.processingInstruction = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.processingInstruction.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.raw = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.raw.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.text = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.text.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdAttList = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdAttList.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdElement = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdElement.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdEntity = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdEntity.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdNotation = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdNotation.call(this, node, options, level));\n };\n\n return XMLStreamWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLDOMImplementation, XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;\n\n ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction;\n\n XMLDOMImplementation = require('./XMLDOMImplementation');\n\n XMLDocument = require('./XMLDocument');\n\n XMLDocumentCB = require('./XMLDocumentCB');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n XMLStreamWriter = require('./XMLStreamWriter');\n\n NodeType = require('./NodeType');\n\n WriterState = require('./WriterState');\n\n module.exports.create = function(name, xmldec, doctype, options) {\n var doc, root;\n if (name == null) {\n throw new Error(\"Root element needs a name.\");\n }\n options = assign({}, xmldec, doctype, options);\n doc = new XMLDocument(options);\n root = doc.element(name);\n if (!options.headless) {\n doc.declaration(options);\n if ((options.pubID != null) || (options.sysID != null)) {\n doc.dtd(options);\n }\n }\n return root;\n };\n\n module.exports.begin = function(options, onData, onEnd) {\n var ref1;\n if (isFunction(options)) {\n ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];\n options = {};\n }\n if (onData) {\n return new XMLDocumentCB(options, onData, onEnd);\n } else {\n return new XMLDocument(options);\n }\n };\n\n module.exports.stringWriter = function(options) {\n return new XMLStringWriter(options);\n };\n\n module.exports.streamWriter = function(stream, options) {\n return new XMLStreamWriter(stream, options);\n };\n\n module.exports.implementation = new XMLDOMImplementation();\n\n module.exports.nodeType = NodeType;\n\n module.exports.writerState = WriterState;\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,\n hasProp = {}.hasOwnProperty;\n\n builder = require('xmlbuilder');\n\n defaults = require('./defaults').defaults;\n\n requiresCDATA = function(entry) {\n return typeof entry === \"string\" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);\n };\n\n wrapCDATA = function(entry) {\n return \"<![CDATA[\" + (escapeCDATA(entry)) + \"]]>\";\n };\n\n escapeCDATA = function(entry) {\n return entry.replace(']]>', ']]]]><![CDATA[>');\n };\n\n exports.Builder = (function() {\n function Builder(opts) {\n var key, ref, value;\n this.options = {};\n ref = defaults[\"0.2\"];\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this.options[key] = value;\n }\n for (key in opts) {\n if (!hasProp.call(opts, key)) continue;\n value = opts[key];\n this.options[key] = value;\n }\n }\n\n Builder.prototype.buildObject = function(rootObj) {\n var attrkey, charkey, render, rootElement, rootName;\n attrkey = this.options.attrkey;\n charkey = this.options.charkey;\n if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {\n rootName = Object.keys(rootObj)[0];\n rootObj = rootObj[rootName];\n } else {\n rootName = this.options.rootName;\n }\n render = (function(_this) {\n return function(element, obj) {\n var attr, child, entry, index, key, value;\n if (typeof obj !== 'object') {\n if (_this.options.cdata && requiresCDATA(obj)) {\n element.raw(wrapCDATA(obj));\n } else {\n element.txt(obj);\n }\n } else if (Array.isArray(obj)) {\n for (index in obj) {\n if (!hasProp.call(obj, index)) continue;\n child = obj[index];\n for (key in child) {\n entry = child[key];\n element = render(element.ele(key), entry).up();\n }\n }\n } else {\n for (key in obj) {\n if (!hasProp.call(obj, key)) continue;\n child = obj[key];\n if (key === attrkey) {\n if (typeof child === \"object\") {\n for (attr in child) {\n value = child[attr];\n element = element.att(attr, value);\n }\n }\n } else if (key === charkey) {\n if (_this.options.cdata && requiresCDATA(child)) {\n element = element.raw(wrapCDATA(child));\n } else {\n element = element.txt(child);\n }\n } else if (Array.isArray(child)) {\n for (index in child) {\n if (!hasProp.call(child, index)) continue;\n entry = child[index];\n if (typeof entry === 'string') {\n if (_this.options.cdata && requiresCDATA(entry)) {\n element = element.ele(key).raw(wrapCDATA(entry)).up();\n } else {\n element = element.ele(key, entry).up();\n }\n } else {\n element = render(element.ele(key), entry).up();\n }\n }\n } else if (typeof child === \"object\") {\n element = render(element.ele(key), child).up();\n } else {\n if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {\n element = element.ele(key).raw(wrapCDATA(child)).up();\n } else {\n if (child == null) {\n child = '';\n }\n element = element.ele(key, child.toString()).up();\n }\n }\n }\n }\n return element;\n };\n })(this);\n rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {\n headless: this.options.headless,\n allowSurrogateChars: this.options.allowSurrogateChars\n });\n return render(rootElement, rootObj).end(this.options.renderOpts);\n };\n\n return Builder;\n\n })();\n\n}).call(this);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // disallow unquoted attribute values if not otherwise configured\n // and strict mode is true\n if (parser.opt.unquotedAttributeValues === undefined) {\n parser.opt.unquotedAttributeValues = !strict;\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace (c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote (c) {\n return c === '\"' || c === '\\''\n }\n\n function isAttribEnd (c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch (regex, c) {\n return regex.test(c)\n }\n\n function notMatch (regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\""\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++ // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n 'amp': '&',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"',\n 'apos': \"'\"\n }\n\n sax.ENTITIES = {\n 'amp': '&',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"',\n 'apos': \"'\",\n 'AElig': 198,\n 'Aacute': 193,\n 'Acirc': 194,\n 'Agrave': 192,\n 'Aring': 197,\n 'Atilde': 195,\n 'Auml': 196,\n 'Ccedil': 199,\n 'ETH': 208,\n 'Eacute': 201,\n 'Ecirc': 202,\n 'Egrave': 200,\n 'Euml': 203,\n 'Iacute': 205,\n 'Icirc': 206,\n 'Igrave': 204,\n 'Iuml': 207,\n 'Ntilde': 209,\n 'Oacute': 211,\n 'Ocirc': 212,\n 'Ograve': 210,\n 'Oslash': 216,\n 'Otilde': 213,\n 'Ouml': 214,\n 'THORN': 222,\n 'Uacute': 218,\n 'Ucirc': 219,\n 'Ugrave': 217,\n 'Uuml': 220,\n 'Yacute': 221,\n 'aacute': 225,\n 'acirc': 226,\n 'aelig': 230,\n 'agrave': 224,\n 'aring': 229,\n 'atilde': 227,\n 'auml': 228,\n 'ccedil': 231,\n 'eacute': 233,\n 'ecirc': 234,\n 'egrave': 232,\n 'eth': 240,\n 'euml': 235,\n 'iacute': 237,\n 'icirc': 238,\n 'igrave': 236,\n 'iuml': 239,\n 'ntilde': 241,\n 'oacute': 243,\n 'ocirc': 244,\n 'ograve': 242,\n 'oslash': 248,\n 'otilde': 245,\n 'ouml': 246,\n 'szlig': 223,\n 'thorn': 254,\n 'uacute': 250,\n 'ucirc': 251,\n 'ugrave': 249,\n 'uuml': 252,\n 'yacute': 253,\n 'yuml': 255,\n 'copy': 169,\n 'reg': 174,\n 'nbsp': 160,\n 'iexcl': 161,\n 'cent': 162,\n 'pound': 163,\n 'curren': 164,\n 'yen': 165,\n 'brvbar': 166,\n 'sect': 167,\n 'uml': 168,\n 'ordf': 170,\n 'laquo': 171,\n 'not': 172,\n 'shy': 173,\n 'macr': 175,\n 'deg': 176,\n 'plusmn': 177,\n 'sup1': 185,\n 'sup2': 178,\n 'sup3': 179,\n 'acute': 180,\n 'micro': 181,\n 'para': 182,\n 'middot': 183,\n 'cedil': 184,\n 'ordm': 186,\n 'raquo': 187,\n 'frac14': 188,\n 'frac12': 189,\n 'frac34': 190,\n 'iquest': 191,\n 'times': 215,\n 'divide': 247,\n 'OElig': 338,\n 'oelig': 339,\n 'Scaron': 352,\n 'scaron': 353,\n 'Yuml': 376,\n 'fnof': 402,\n 'circ': 710,\n 'tilde': 732,\n 'Alpha': 913,\n 'Beta': 914,\n 'Gamma': 915,\n 'Delta': 916,\n 'Epsilon': 917,\n 'Zeta': 918,\n 'Eta': 919,\n 'Theta': 920,\n 'Iota': 921,\n 'Kappa': 922,\n 'Lambda': 923,\n 'Mu': 924,\n 'Nu': 925,\n 'Xi': 926,\n 'Omicron': 927,\n 'Pi': 928,\n 'Rho': 929,\n 'Sigma': 931,\n 'Tau': 932,\n 'Upsilon': 933,\n 'Phi': 934,\n 'Chi': 935,\n 'Psi': 936,\n 'Omega': 937,\n 'alpha': 945,\n 'beta': 946,\n 'gamma': 947,\n 'delta': 948,\n 'epsilon': 949,\n 'zeta': 950,\n 'eta': 951,\n 'theta': 952,\n 'iota': 953,\n 'kappa': 954,\n 'lambda': 955,\n 'mu': 956,\n 'nu': 957,\n 'xi': 958,\n 'omicron': 959,\n 'pi': 960,\n 'rho': 961,\n 'sigmaf': 962,\n 'sigma': 963,\n 'tau': 964,\n 'upsilon': 965,\n 'phi': 966,\n 'chi': 967,\n 'psi': 968,\n 'omega': 969,\n 'thetasym': 977,\n 'upsih': 978,\n 'piv': 982,\n 'ensp': 8194,\n 'emsp': 8195,\n 'thinsp': 8201,\n 'zwnj': 8204,\n 'zwj': 8205,\n 'lrm': 8206,\n 'rlm': 8207,\n 'ndash': 8211,\n 'mdash': 8212,\n 'lsquo': 8216,\n 'rsquo': 8217,\n 'sbquo': 8218,\n 'ldquo': 8220,\n 'rdquo': 8221,\n 'bdquo': 8222,\n 'dagger': 8224,\n 'Dagger': 8225,\n 'bull': 8226,\n 'hellip': 8230,\n 'permil': 8240,\n 'prime': 8242,\n 'Prime': 8243,\n 'lsaquo': 8249,\n 'rsaquo': 8250,\n 'oline': 8254,\n 'frasl': 8260,\n 'euro': 8364,\n 'image': 8465,\n 'weierp': 8472,\n 'real': 8476,\n 'trade': 8482,\n 'alefsym': 8501,\n 'larr': 8592,\n 'uarr': 8593,\n 'rarr': 8594,\n 'darr': 8595,\n 'harr': 8596,\n 'crarr': 8629,\n 'lArr': 8656,\n 'uArr': 8657,\n 'rArr': 8658,\n 'dArr': 8659,\n 'hArr': 8660,\n 'forall': 8704,\n 'part': 8706,\n 'exist': 8707,\n 'empty': 8709,\n 'nabla': 8711,\n 'isin': 8712,\n 'notin': 8713,\n 'ni': 8715,\n 'prod': 8719,\n 'sum': 8721,\n 'minus': 8722,\n 'lowast': 8727,\n 'radic': 8730,\n 'prop': 8733,\n 'infin': 8734,\n 'ang': 8736,\n 'and': 8743,\n 'or': 8744,\n 'cap': 8745,\n 'cup': 8746,\n 'int': 8747,\n 'there4': 8756,\n 'sim': 8764,\n 'cong': 8773,\n 'asymp': 8776,\n 'ne': 8800,\n 'equiv': 8801,\n 'le': 8804,\n 'ge': 8805,\n 'sub': 8834,\n 'sup': 8835,\n 'nsub': 8836,\n 'sube': 8838,\n 'supe': 8839,\n 'oplus': 8853,\n 'otimes': 8855,\n 'perp': 8869,\n 'sdot': 8901,\n 'lceil': 8968,\n 'rceil': 8969,\n 'lfloor': 8970,\n 'rfloor': 8971,\n 'lang': 9001,\n 'rang': 9002,\n 'loz': 9674,\n 'spades': 9824,\n 'clubs': 9827,\n 'hearts': 9829,\n 'diams': 9830\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit (parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function emitNode (parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText (parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts (opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error (parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er += '\\nLine: ' + parser.line +\n '\\nColumn: ' + parser.column +\n '\\nChar: ' + parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end (parser) {\n if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\n if ((parser.state !== S.BEGIN) &&\n (parser.state !== S.BEGIN_WHITESPACE) &&\n (parser.state !== S.TEXT)) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail (parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag (parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = parser.tag = { name: parser.tagName, attributes: {} }\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname (name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? [ '', name ] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib (parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(parser,\n 'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' +\n 'Actual: ' + parser.attribValue)\n } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n strictFail(parser,\n 'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' +\n 'Actual: ' + parser.attribValue)\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag (parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(parser, 'Unbound namespace prefix: ' +\n JSON.stringify(parser.tagName))\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p]\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(parser, 'Unbound namespace prefix: ' +\n JSON.stringify(prefix))\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag (parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = parser.tag = parser.tags.pop()\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity (parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (isNaN(num) || numStr.toLowerCase() !== entity) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace (parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt (chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write (chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(parser,\n 'Cannot write after close. Assign an onready handler.')\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n continue;\n }\n\n if (parser.doctype && parser.doctype !== true && parser.sgmlDecl) {\n parser.state = S.DOCTYPE_DTD\n parser.doctype += '<!' + parser.sgmlDecl + c\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(parser,\n 'Inappropriately located doctype declaration')\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n if (c === ']') {\n parser.doctype += c\n parser.state = S.DOCTYPE\n } else if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (isQuote(c)) {\n parser.doctype += c\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n } else {\n parser.doctype += c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else if (parser.doctype && parser.doctype !== true) {\n parser.state = S.DOCTYPE_DTD\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n } else {\n parser.cdata += c\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n emitNode(parser, 'onprocessinginstruction', {\n name: parser.procInstName,\n body: parser.procInstBody\n })\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(parser, 'Forward-slash in opening tag not followed by >')\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: ''\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n if (!parser.opt.unquotedAttributeValues) {\n error(parser, 'Unquoted attribute value')\n }\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n var parsedEntity = parseEntity(parser)\n if (parser.opt.unparsedEntities && !Object.values(sax.XML_ENTITIES).includes(parsedEntity)) {\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n } else {\n parser[buffer] += parsedEntity\n parser.entity = ''\n parser.state = returnState\n }\n } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n (function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10FFFF || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xFFFF) { // BMP code point\n codeUnits.push(codePoint)\n } else { // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xD800\n lowSurrogate = (codePoint % 0x400) + 0xDC00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n }())\n }\n})(typeof exports === 'undefined' ? this.sax = {} : exports)\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n exports.stripBOM = function(str) {\n if (str[0] === '\\uFEFF') {\n return str.substring(1);\n } else {\n return str;\n }\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var prefixMatch;\n\n prefixMatch = new RegExp(/(?!xmlns)^.*:/);\n\n exports.normalize = function(str) {\n return str.toLowerCase();\n };\n\n exports.firstCharLowerCase = function(str) {\n return str.charAt(0).toLowerCase() + str.slice(1);\n };\n\n exports.stripPrefix = function(str) {\n return str.replace(prefixMatch, '');\n };\n\n exports.parseNumbers = function(str) {\n if (!isNaN(str)) {\n str = str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);\n }\n return str;\n };\n\n exports.parseBooleans = function(str) {\n if (/^(?:true|false)$/i.test(str)) {\n str = str.toLowerCase() === 'true';\n }\n return str;\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var bom, defaults, defineProperty, events, isEmpty, processItem, processors, sax, setImmediate,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n sax = require('sax');\n\n events = require('events');\n\n bom = require('./bom');\n\n processors = require('./processors');\n\n setImmediate = require('timers').setImmediate;\n\n defaults = require('./defaults').defaults;\n\n isEmpty = function(thing) {\n return typeof thing === \"object\" && (thing != null) && Object.keys(thing).length === 0;\n };\n\n processItem = function(processors, item, key) {\n var i, len, process;\n for (i = 0, len = processors.length; i < len; i++) {\n process = processors[i];\n item = process(item, key);\n }\n return item;\n };\n\n defineProperty = function(obj, key, value) {\n var descriptor;\n descriptor = Object.create(null);\n descriptor.value = value;\n descriptor.writable = true;\n descriptor.enumerable = true;\n descriptor.configurable = true;\n return Object.defineProperty(obj, key, descriptor);\n };\n\n exports.Parser = (function(superClass) {\n extend(Parser, superClass);\n\n function Parser(opts) {\n this.parseStringPromise = bind(this.parseStringPromise, this);\n this.parseString = bind(this.parseString, this);\n this.reset = bind(this.reset, this);\n this.assignOrPush = bind(this.assignOrPush, this);\n this.processAsync = bind(this.processAsync, this);\n var key, ref, value;\n if (!(this instanceof exports.Parser)) {\n return new exports.Parser(opts);\n }\n this.options = {};\n ref = defaults[\"0.2\"];\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this.options[key] = value;\n }\n for (key in opts) {\n if (!hasProp.call(opts, key)) continue;\n value = opts[key];\n this.options[key] = value;\n }\n if (this.options.xmlns) {\n this.options.xmlnskey = this.options.attrkey + \"ns\";\n }\n if (this.options.normalizeTags) {\n if (!this.options.tagNameProcessors) {\n this.options.tagNameProcessors = [];\n }\n this.options.tagNameProcessors.unshift(processors.normalize);\n }\n this.reset();\n }\n\n Parser.prototype.processAsync = function() {\n var chunk, err;\n try {\n if (this.remaining.length <= this.options.chunkSize) {\n chunk = this.remaining;\n this.remaining = '';\n this.saxParser = this.saxParser.write(chunk);\n return this.saxParser.close();\n } else {\n chunk = this.remaining.substr(0, this.options.chunkSize);\n this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);\n this.saxParser = this.saxParser.write(chunk);\n return setImmediate(this.processAsync);\n }\n } catch (error1) {\n err = error1;\n if (!this.saxParser.errThrown) {\n this.saxParser.errThrown = true;\n return this.emit(err);\n }\n }\n };\n\n Parser.prototype.assignOrPush = function(obj, key, newValue) {\n if (!(key in obj)) {\n if (!this.options.explicitArray) {\n return defineProperty(obj, key, newValue);\n } else {\n return defineProperty(obj, key, [newValue]);\n }\n } else {\n if (!(obj[key] instanceof Array)) {\n defineProperty(obj, key, [obj[key]]);\n }\n return obj[key].push(newValue);\n }\n };\n\n Parser.prototype.reset = function() {\n var attrkey, charkey, ontext, stack;\n this.removeAllListeners();\n this.saxParser = sax.parser(this.options.strict, {\n trim: false,\n normalize: false,\n xmlns: this.options.xmlns\n });\n this.saxParser.errThrown = false;\n this.saxParser.onerror = (function(_this) {\n return function(error) {\n _this.saxParser.resume();\n if (!_this.saxParser.errThrown) {\n _this.saxParser.errThrown = true;\n return _this.emit(\"error\", error);\n }\n };\n })(this);\n this.saxParser.onend = (function(_this) {\n return function() {\n if (!_this.saxParser.ended) {\n _this.saxParser.ended = true;\n return _this.emit(\"end\", _this.resultObject);\n }\n };\n })(this);\n this.saxParser.ended = false;\n this.EXPLICIT_CHARKEY = this.options.explicitCharkey;\n this.resultObject = null;\n stack = [];\n attrkey = this.options.attrkey;\n charkey = this.options.charkey;\n this.saxParser.onopentag = (function(_this) {\n return function(node) {\n var key, newValue, obj, processedKey, ref;\n obj = {};\n obj[charkey] = \"\";\n if (!_this.options.ignoreAttrs) {\n ref = node.attributes;\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n if (!(attrkey in obj) && !_this.options.mergeAttrs) {\n obj[attrkey] = {};\n }\n newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];\n processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;\n if (_this.options.mergeAttrs) {\n _this.assignOrPush(obj, processedKey, newValue);\n } else {\n defineProperty(obj[attrkey], processedKey, newValue);\n }\n }\n }\n obj[\"#name\"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;\n if (_this.options.xmlns) {\n obj[_this.options.xmlnskey] = {\n uri: node.uri,\n local: node.local\n };\n }\n return stack.push(obj);\n };\n })(this);\n this.saxParser.onclosetag = (function(_this) {\n return function() {\n var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;\n obj = stack.pop();\n nodeName = obj[\"#name\"];\n if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {\n delete obj[\"#name\"];\n }\n if (obj.cdata === true) {\n cdata = obj.cdata;\n delete obj.cdata;\n }\n s = stack[stack.length - 1];\n if (obj[charkey].match(/^\\s*$/) && !cdata) {\n emptyStr = obj[charkey];\n delete obj[charkey];\n } else {\n if (_this.options.trim) {\n obj[charkey] = obj[charkey].trim();\n }\n if (_this.options.normalize) {\n obj[charkey] = obj[charkey].replace(/\\s{2,}/g, \" \").trim();\n }\n obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];\n if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n obj = obj[charkey];\n }\n }\n if (isEmpty(obj)) {\n if (typeof _this.options.emptyTag === 'function') {\n obj = _this.options.emptyTag();\n } else {\n obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;\n }\n }\n if (_this.options.validator != null) {\n xpath = \"/\" + ((function() {\n var i, len, results;\n results = [];\n for (i = 0, len = stack.length; i < len; i++) {\n node = stack[i];\n results.push(node[\"#name\"]);\n }\n return results;\n })()).concat(nodeName).join(\"/\");\n (function() {\n var err;\n try {\n return obj = _this.options.validator(xpath, s && s[nodeName], obj);\n } catch (error1) {\n err = error1;\n return _this.emit(\"error\", err);\n }\n })();\n }\n if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {\n if (!_this.options.preserveChildrenOrder) {\n node = {};\n if (_this.options.attrkey in obj) {\n node[_this.options.attrkey] = obj[_this.options.attrkey];\n delete obj[_this.options.attrkey];\n }\n if (!_this.options.charsAsChildren && _this.options.charkey in obj) {\n node[_this.options.charkey] = obj[_this.options.charkey];\n delete obj[_this.options.charkey];\n }\n if (Object.getOwnPropertyNames(obj).length > 0) {\n node[_this.options.childkey] = obj;\n }\n obj = node;\n } else if (s) {\n s[_this.options.childkey] = s[_this.options.childkey] || [];\n objClone = {};\n for (key in obj) {\n if (!hasProp.call(obj, key)) continue;\n defineProperty(objClone, key, obj[key]);\n }\n s[_this.options.childkey].push(objClone);\n delete obj[\"#name\"];\n if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n obj = obj[charkey];\n }\n }\n }\n if (stack.length > 0) {\n return _this.assignOrPush(s, nodeName, obj);\n } else {\n if (_this.options.explicitRoot) {\n old = obj;\n obj = {};\n defineProperty(obj, nodeName, old);\n }\n _this.resultObject = obj;\n _this.saxParser.ended = true;\n return _this.emit(\"end\", _this.resultObject);\n }\n };\n })(this);\n ontext = (function(_this) {\n return function(text) {\n var charChild, s;\n s = stack[stack.length - 1];\n if (s) {\n s[charkey] += text;\n if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\\\n/g, '').trim() !== '')) {\n s[_this.options.childkey] = s[_this.options.childkey] || [];\n charChild = {\n '#name': '__text__'\n };\n charChild[charkey] = text;\n if (_this.options.normalize) {\n charChild[charkey] = charChild[charkey].replace(/\\s{2,}/g, \" \").trim();\n }\n s[_this.options.childkey].push(charChild);\n }\n return s;\n }\n };\n })(this);\n this.saxParser.ontext = ontext;\n return this.saxParser.oncdata = (function(_this) {\n return function(text) {\n var s;\n s = ontext(text);\n if (s) {\n return s.cdata = true;\n }\n };\n })(this);\n };\n\n Parser.prototype.parseString = function(str, cb) {\n var err;\n if ((cb != null) && typeof cb === \"function\") {\n this.on(\"end\", function(result) {\n this.reset();\n return cb(null, result);\n });\n this.on(\"error\", function(err) {\n this.reset();\n return cb(err);\n });\n }\n try {\n str = str.toString();\n if (str.trim() === '') {\n this.emit(\"end\", null);\n return true;\n }\n str = bom.stripBOM(str);\n if (this.options.async) {\n this.remaining = str;\n setImmediate(this.processAsync);\n return this.saxParser;\n }\n return this.saxParser.write(str).close();\n } catch (error1) {\n err = error1;\n if (!(this.saxParser.errThrown || this.saxParser.ended)) {\n this.emit('error', err);\n return this.saxParser.errThrown = true;\n } else if (this.saxParser.ended) {\n throw err;\n }\n }\n };\n\n Parser.prototype.parseStringPromise = function(str) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.parseString(str, function(err, value) {\n if (err) {\n return reject(err);\n } else {\n return resolve(value);\n }\n });\n };\n })(this));\n };\n\n return Parser;\n\n })(events);\n\n exports.parseString = function(str, a, b) {\n var cb, options, parser;\n if (b != null) {\n if (typeof b === 'function') {\n cb = b;\n }\n if (typeof a === 'object') {\n options = a;\n }\n } else {\n if (typeof a === 'function') {\n cb = a;\n }\n options = {};\n }\n parser = new exports.Parser(options);\n return parser.parseString(str, cb);\n };\n\n exports.parseStringPromise = function(str, a) {\n var options, parser;\n if (typeof a === 'object') {\n options = a;\n }\n parser = new exports.Parser(options);\n return parser.parseStringPromise(str);\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var builder, defaults, parser, processors,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n defaults = require('./defaults');\n\n builder = require('./builder');\n\n parser = require('./parser');\n\n processors = require('./processors');\n\n exports.defaults = defaults.defaults;\n\n exports.processors = processors;\n\n exports.ValidationError = (function(superClass) {\n extend(ValidationError, superClass);\n\n function ValidationError(message) {\n this.message = message;\n }\n\n return ValidationError;\n\n })(Error);\n\n exports.Builder = builder.Builder;\n\n exports.Parser = parser.Parser;\n\n exports.parseString = parser.parseString;\n\n exports.parseStringPromise = parser.parseStringPromise;\n\n}).call(this);\n","import path from 'path';\nimport { createHash } from 'crypto';\nimport { parseStringPromise } from 'xml2js';\nimport type { DbgpSession } from './dbgp-session';\nimport type { CDPServer } from './cdp-server';\nimport type { ErrnoError } from '@php-wasm/universal';\n\ninterface PendingCommand {\n\tcdpId?: number;\n\tcdpMethod?: string;\n\tparams?: any;\n}\n\ninterface BreakpointInfo {\n\tcdpId: string;\n\txdebugId: string | null;\n\tfileUri: string;\n\tlineNumber: number;\n}\n\ninterface ObjectHandle {\n\ttype: 'context' | 'property';\n\tcontextId?: number;\n\tdepth: number;\n\tfullname?: string;\n\t// Add pagination support\n\tcurrentPage?: number;\n\ttotalPages?: number;\n\taggregatedProps?: any[];\n}\n\nexport interface XdebugCDPBridgeConfig {\n\tknownScriptUrls: string[];\n\tphpRoot?: string;\n\tgetPHPFile(path: string): string | Promise<string>;\n\tbreakOnFirstLine?: boolean;\n}\n\nexport class XdebugCDPBridge {\n\tprivate dbgp: DbgpSession;\n\tpublic cdp: CDPServer;\n\tprivate nextTxnId = 1;\n\tprivate pendingCommands: Map<string, PendingCommand> = new Map();\n\tprivate breakpoints: Map<string, BreakpointInfo> = new Map(); // key: cdp breakpointId\n\tprivate scriptIdByUrl: Map<string, string> = new Map();\n\tprivate nextScriptId = 1;\n\tprivate objectHandles: Map<string, ObjectHandle> = new Map();\n\tprivate nextObjectId = 1;\n\tprivate callFramesMap: Map<string, number> = new Map(); // callFrameId -> stack depth\n\tprivate xdebugConnected = false;\n\tprivate phpRoot: string;\n\tprivate readPHPFile: (path: string) => string | Promise<string>;\n\tprivate breakOnFirstLine;\n\n\tconstructor(\n\t\tdbgp: DbgpSession,\n\t\tcdp: CDPServer,\n\t\tconfig: XdebugCDPBridgeConfig\n\t) {\n\t\tthis.dbgp = dbgp;\n\t\tthis.cdp = cdp;\n\t\tthis.readPHPFile = config.getPHPFile;\n\t\tthis.phpRoot = config.phpRoot || '';\n\t\tfor (const url of config.knownScriptUrls) {\n\t\t\tthis.scriptIdByUrl.set(url, this.getOrCreateScriptId(url));\n\t\t}\n\t\tthis.breakOnFirstLine = config.breakOnFirstLine || false;\n\t}\n\n\tstart(): void {\n\t\t// Xdebug connected\n\t\tthis.dbgp.on('connected', () => {\n\t\t\tthis.xdebugConnected = true;\n\t\t\tthis.sendDbgpCommand('stdout', '-c 1'); // copies PHP stdout to console\n\t\t\tthis.sendDbgpCommand('stderr', '-c 1'); // copies PHP stderr to console\n\t\t});\n\t\t// Xdebug messages\n\t\tthis.dbgp.on('message', async (xml: string) => {\n\t\t\ttry {\n\t\t\t\tconst msgObj = await parseStringPromise(xml, {\n\t\t\t\t\texplicitArray: false,\n\t\t\t\t});\n\t\t\t\tawait this.handleDbgpMessage(msgObj);\n\t\t\t} catch {\n\t\t\t\t// Parsing error, ignore or log\n\t\t\t}\n\t\t});\n\t\t// Xdebug disconnected\n\t\tthis.dbgp.on('disconnected', () => {\n\t\t\tthis.xdebugConnected = false;\n\t\t\t// If DevTools is still connected, inform or close\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Debugger.paused',\n\t\t\t\tparams: { reason: 'terminated', callFrames: [] },\n\t\t\t});\n\t\t});\n\n\t\t// DevTools messages (requests)\n\t\tthis.cdp.on('message', (msg: any) => {\n\t\t\tthis.handleCdpMessage(msg);\n\t\t});\n\n\t\t// DevTools disconnected\n\t\tthis.cdp.on('clientDisconnected', () => {\n\t\t\t// If Xdebug still connected, detach from it\n\t\t\tif (this.xdebugConnected) {\n\t\t\t\tthis.sendDbgpCommand(`detach`);\n\t\t\t\t// After detach, Xdebug will likely close connection\n\t\t\t}\n\t\t});\n\n\t\t// Load known scripts\n\t\tthis.sendInitialScripts().then(() => {\n\t\t\tif (!this.breakOnFirstLine) {\n\t\t\t\t// Opens Sources tab instead of Console by pausing the process\n\t\t\t\tconst entry = this.scriptIdByUrl.entries().next().value;\n\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\tmethod: 'Debugger.paused',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tcallFrames: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\t\t\tscriptId: entry[1],\n\t\t\t\t\t\t\t\t\t\tlineNumber: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tscopeChain: [],\n\t\t\t\t\t\t\t\t\tthis: { type: 'undefined' },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\treason: 'other',\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\t// Resume the process after 50ms to maintain focus on the first file.\n\t\t\t\t\t// 50ms is an arbitrary choice: 0ms won’t display the code at this delay,\n\t\t\t\t\t// while 100ms would be too long and cause a visible break on the first line.\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.cdp.sendMessage({ method: 'Debugger.resumed' });\n\t\t\t\t\t}, 50);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Send a nice welcome message with instructions\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: 'info',\n\t\t\t\t\t\ttext: '🎉 Welcome to WordPress Playground DevTools! 🎉\\n ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\\n\\n1. Add breakpoints in your files to start step debugging.\\n\\n2. Run your php file, project, plugin or theme using PHP.wasm or Playground CLI.\\n\\n3. Witness the magic break.',\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: 'info',\n\t\t\t\t\t\ttext: ' ',\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tstop(): void {\n\t\tthis.dbgp.close();\n\t\tthis.cdp.close();\n\t}\n\n\tprivate async sendInitialScripts(): Promise<void> {\n\t\tfor (const [bridgeUri, scriptId] of this.scriptIdByUrl.entries()) {\n\t\t\tawait this.sendScriptToCDP(bridgeUri, scriptId);\n\t\t}\n\t}\n\n\tprivate async sendScriptToCDP(url: string, id: string): Promise<void> {\n\t\tconst highlightUri = this.uriFromBridgeToCDPSyntaxHighlight(url);\n\t\tconst cdpUri = this.uriFromBridgeToCDP(url);\n\n\t\ttry {\n\t\t\tconst phpContent = await this.readPHPFile(url);\n\t\t\tconst phpLines = phpContent.split('\\n');\n\n\t\t\t// The first line is AAAA while the others are AACA.\n\t\t\t// This is enough to set breakpoints with CDP and\n\t\t\t// communicate with the DBGp protocol.\n\t\t\tconst mappings = phpLines\n\t\t\t\t.map((_value, index) => (index === 0 ? 'AAAA' : 'AACA'))\n\t\t\t\t.join(';');\n\n\t\t\tconst sourceMap = {\n\t\t\t\tversion: 3,\n\t\t\t\t// File uri has to match the script parsed url\n\t\t\t\t// While the sources url has to match the syntax\n\t\t\t\t// highlighted file displayed in Devtools.\n\t\t\t\tfile: cdpUri,\n\t\t\t\tsources: [highlightUri],\n\t\t\t\tsourcesContent: [phpContent],\n\t\t\t\tmappings,\n\t\t\t};\n\n\t\t\tconst encodedMap = Buffer.from(\n\t\t\t\tJSON.stringify(sourceMap),\n\t\t\t\t'utf-8'\n\t\t\t).toString('base64');\n\t\t\tconst sourceMapDataUri = `data:application/json;base64,${encodedMap}`;\n\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Debugger.scriptParsed',\n\t\t\t\tparams: {\n\t\t\t\t\tscriptId: id,\n\t\t\t\t\turl: cdpUri,\n\t\t\t\t\tstartLine: 0,\n\t\t\t\t\tstartColumn: 0,\n\t\t\t\t\tendLine: phpLines.length,\n\t\t\t\t\tendColumn: 0,\n\t\t\t\t\texecutionContextId: 1,\n\t\t\t\t\tsourceMapURL: sourceMapDataUri,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// Parsing error, log error to console\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: 'warning',\n\t\t\t\t\t\ttext: (error as ErrnoError).message,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate getOrCreateScriptId(url: string): string {\n\t\tlet scriptId = this.scriptIdByUrl.get(url);\n\t\tif (!scriptId) {\n\t\t\t// IDs are used as references in the source directory.\n\t\t\t// To prevent exposing raw IDs, we hash them with SHA-256\n\t\t\t// and keep only the first 16 characters.\n\t\t\tscriptId = createHash('sha256')\n\t\t\t\t.update(String(this.nextScriptId++))\n\t\t\t\t.digest('hex')\n\t\t\t\t.slice(0, 16);\n\t\t\tthis.scriptIdByUrl.set(url, scriptId);\n\t\t}\n\t\treturn scriptId;\n\t}\n\n\t// Utility: escape and quote Xdebug fullname for property_get\n\tprivate formatPropertyFullName(fullname: string): string {\n\t\t// Escape quotes, backslashes, and nulls\n\t\tlet needsQuotes = false;\n\t\tlet result = '';\n\t\tfor (const ch of fullname) {\n\t\t\tif (ch === '\"' || ch === '\\\\' || ch === '\\x00') {\n\t\t\t\tresult += '\\\\' + ch;\n\t\t\t\tneedsQuotes = true;\n\t\t\t} else if (ch === ' ') {\n\t\t\t\tresult += ch;\n\t\t\t\tneedsQuotes = true;\n\t\t\t} else {\n\t\t\t\tresult += ch;\n\t\t\t}\n\t\t}\n\t\tif (needsQuotes || fullname.includes(\"'\")) {\n\t\t\t// If contains single quote or spaces or special chars, wrap in double quotes\n\t\t\tresult = `\"${result}\"`;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate sendDbgpCommand(command: string, data?: string): string {\n\t\tconst txnId = this.nextTxnId++;\n\t\tconst txnIdStr = txnId.toString();\n\t\tlet cmdStr = `${command} -i ${txnIdStr}`;\n\t\tif (data !== undefined) {\n\t\t\tcmdStr += ` ${data}`;\n\t\t}\n\t\tthis.dbgp.sendCommand(cmdStr);\n\t\treturn txnIdStr;\n\t}\n\n\tprivate async handleCdpMessage(message: any): Promise<void> {\n\t\tconst { id, method, params } = message;\n\t\tlet result: any = {};\n\t\tlet sendResponse = true;\n\t\tswitch (method) {\n\t\t\tcase 'Debugger.enable':\n\t\t\tcase 'Runtime.enable':\n\t\t\t\t// Acknowledge enabling of domains\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\tcase 'Debugger.setBreakpointByUrl': {\n\t\t\t\tconst { url: cdpUri, lineNumber: line } = params;\n\t\t\t\t/**\n\t\t\t\t * `url` is an optional parameter. If it's not set, we don't\n\t\t\t\t * have enough information to set a breakpoint so let's just\n\t\t\t\t * ignore the message.\n\t\t\t\t *\n\t\t\t\t * Why would `url` be not set? We don't know that yet.\n\t\t\t\t *\n\t\t\t\t * https://chromedevtools.github.io/devtools-protocol/tot/Debugger/#method-setBreakpointByUrl\n\t\t\t\t */\n\t\t\t\tif (!cdpUri) {\n\t\t\t\t\tsendResponse = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst bridgeUri = this.uriFromCDPToBridge(cdpUri);\n\t\t\t\tconst dbgpUri = this.uriFromBridgeToDBGP(bridgeUri);\n\t\t\t\tconst lineNumber = (typeof line === 'number' ? line : 0) + 1; // CDP lineNumber is 0-based, Xdebug expects 1-based\n\t\t\t\t// Generate a new breakpoint ID for DevTools\n\t\t\t\tconst cdpBreakpointId = String(this.breakpoints.size + 1);\n\t\t\t\t// If Xdebug connected, send breakpoint_set now\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tconst cmd = `breakpoint_set -t line -f ${this.formatPropertyFullName(\n\t\t\t\t\t\tdbgpUri\n\t\t\t\t\t)} -n ${lineNumber}`;\n\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tbreakpointId: cdpBreakpointId,\n\t\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\t// We'll send response when we get confirmation from Xdebug\n\t\t\t\t\tsendResponse = false;\n\t\t\t\t} else {\n\t\t\t\t\t// Xdebug not yet connected: store breakpoint to set later\n\t\t\t\t\tthis.breakpoints.set(cdpBreakpointId, {\n\t\t\t\t\t\tcdpId: cdpBreakpointId,\n\t\t\t\t\t\txdebugId: null,\n\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t});\n\t\t\t\t\tresult = {\n\t\t\t\t\t\tbreakpointId: cdpBreakpointId,\n\t\t\t\t\t\tlocations: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tscriptId: this.getOrCreateScriptId(bridgeUri),\n\t\t\t\t\t\t\t\tlineNumber: lineNumber - 1,\n\t\t\t\t\t\t\t\tcolumnNumber: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.removeBreakpoint': {\n\t\t\t\tconst { breakpointId } = params;\n\t\t\t\tconst bpIdStr = String(breakpointId);\n\t\t\t\tconst bp = this.breakpoints.get(bpIdStr);\n\t\t\t\tif (bp) {\n\t\t\t\t\tif (bp.xdebugId && this.xdebugConnected) {\n\t\t\t\t\t\t// Remove from Xdebug if it was set\n\t\t\t\t\t\tconst cmd = `breakpoint_remove -d ${bp.xdebugId}`;\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsendResponse = false;\n\t\t\t\t\t}\n\t\t\t\t\t// Remove from our map\n\t\t\t\t\tthis.breakpoints.delete(bpIdStr);\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.resume': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('run');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.stepOver': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('step_over');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.stepInto': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('step_into');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.stepOut': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('step_out');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.pause': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('break');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Runtime.evaluate':\n\t\t\tcase 'Debugger.evaluateOnCallFrame': {\n\t\t\t\tconst expression: string = params.expression || '';\n\t\t\t\tconst callFrameId: string | undefined = params.callFrameId;\n\t\t\t\t// If evaluateOnCallFrame, check if supported frame\n\t\t\t\tif (method === 'Debugger.evaluateOnCallFrame') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcallFrameId === undefined ||\n\t\t\t\t\t\t!this.callFramesMap.has(callFrameId)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Invalid frame\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\t\t\tmessage: 'No such call frame',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst frameDepth = this.callFramesMap.get(callFrameId)!;\n\t\t\t\t\tif (frameDepth !== 0) {\n\t\t\t\t\t\t// Only support evaluation in top frame for simplicity\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\t'Evaluation in this frame not supported',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\t// Xdebug eval expects code in base64\n\t\t\t\t\tconst code = Buffer.from(expression).toString('base64');\n\t\t\t\t\tconst txn = this.sendDbgpCommand('eval', `-- ${code}`);\n\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t});\n\t\t\t\t\tsendResponse = false;\n\t\t\t\t} else {\n\t\t\t\t\t// If no Xdebug, return undefined result\n\t\t\t\t\tresult = {\n\t\t\t\t\t\tresult: { type: 'undefined', value: undefined },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Runtime.getProperties': {\n\t\t\t\tconst { objectId } = params;\n\t\t\t\tconst handle = this.objectHandles.get(objectId);\n\t\t\t\tif (handle && this.xdebugConnected) {\n\t\t\t\t\tif (handle.type === 'context') {\n\t\t\t\t\t\tconst contextId = handle.contextId ?? 0;\n\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\t// Get variables in the context with pagination support (32 items per page)\n\t\t\t\t\t\tconst cmd = `context_get -d ${depth} -c ${contextId} -p 0 -m 32`;\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\t\t// Initialize pagination state\n\t\t\t\t\t\tconst updatedHandle = {\n\t\t\t\t\t\t\t...handle,\n\t\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\t\taggregatedProps: [],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.objectHandles.set(objectId, updatedHandle);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\t\tparams: { objectId: objectId },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsendResponse = false;\n\t\t\t\t\t} else if (handle.type === 'property') {\n\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\tconst fullname = handle.fullname!;\n\t\t\t\t\t\tconst fmtName = this.formatPropertyFullName(fullname);\n\t\t\t\t\t\t// Get property with pagination support (32 items per page)\n\t\t\t\t\t\tconst cmd = `property_get -d ${depth} -n ${fmtName} -p 0 -m 32`;\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\t\t// Initialize pagination state\n\t\t\t\t\t\tconst updatedHandle = {\n\t\t\t\t\t\t\t...handle,\n\t\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\t\taggregatedProps: [],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.objectHandles.set(objectId, updatedHandle);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\t\tparams: { parentObjectId: objectId },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsendResponse = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Unknown handle type\n\t\t\t\t\t\tresult = { result: [] };\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult = { result: [] };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.getScriptSource': {\n\t\t\t\tconst sid = params.scriptId;\n\t\t\t\tconst bridgeUri = [...this.scriptIdByUrl.entries()].find(\n\t\t\t\t\t([, v]) => v === sid\n\t\t\t\t)?.[0];\n\n\t\t\t\tconst fullPath = [];\n\n\t\t\t\tif (bridgeUri) {\n\t\t\t\t\tfullPath.push(\n\t\t\t\t\t\t...[\n\t\t\t\t\t\t\t\"Here's the full path for your convenience:\\n\",\n\t\t\t\t\t\t\t`${this.uriFromBridgeToCDPSyntaxHighlight(\n\t\t\t\t\t\t\t\tbridgeUri\n\t\t\t\t\t\t\t).replace('file://', '')}\\n`,\n\t\t\t\t\t\t]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// getScriptSource usually fills the source file.\n\t\t\t\t// With scripts now using source maps, the source map\n\t\t\t\t// now handles displaying the file content.\n\t\t\t\t// Therefore, we return a redirect message instead.\n\t\t\t\tresult = {\n\t\t\t\t\tscriptSource: [\n\t\t\t\t\t\t'`Are you looking for your source code?',\n\t\t\t\t\t\t'Go to PHP.wasm group in the navigator and find it there.',\n\t\t\t\t\t\t...fullPath,\n\t\t\t\t\t\t\"What is this file, then? It's a placeholder required due to the dev tools limitations.\",\n\t\t\t\t\t\t'The XDebug <-> Devtools bridge implement PHP syntax highlighting using source maps,',\n\t\t\t\t\t\t'and the unfortunate side effect is having a \"source\" file and a \"target\" file.',\n\t\t\t\t\t\t'This is the \"source\". If you\\'re interested in even more details, see the discussion at:\\n',\n\t\t\t\t\t\t'https://github.com/WordPress/wordpress-playground/pull/2566`',\n\t\t\t\t\t].join('\\n'),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// Unknown or unimplemented method\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t}\n\t\tif (sendResponse) {\n\t\t\tthis.cdp.sendMessage({ id, result });\n\t\t}\n\t}\n\n\t/* ---------- uri mapping ---------- */\n\n\tprivate uriFromBridgeToCDPSyntaxHighlight(uri: string): string {\n\t\treturn `file://PHP.wasm/${uri}`;\n\t}\n\n\tprivate uriFromBridgeToCDP(uri: string): string {\n\t\turi = this.scriptIdByUrl.get(uri) ?? '';\n\n\t\treturn `file://placeholders/${uri}`;\n\t}\n\n\tprivate uriFromCDPToBridge(uri: string): string {\n\t\tconst prefix = 'file://placeholders/';\n\n\t\treturn (\n\t\t\t[...this.scriptIdByUrl.entries()].find(\n\t\t\t\t([, v]) => v === uri.slice(prefix.length)\n\t\t\t)?.[0] ?? ''\n\t\t);\n\t}\n\n\tprivate uriFromBridgeToDBGP(uri: string): string {\n\t\treturn path.resolve(process.cwd(), uri);\n\t}\n\n\tprivate uriFromDBGPToBridge(uri: string): string {\n\t\turi = uri.startsWith('file://') ? uri.slice(7) : uri;\n\n\t\tconst index = uri.indexOf(this.phpRoot);\n\n\t\treturn index !== -1 ? uri.slice(index) : uri;\n\t}\n\n\tprivate async handleDbgpMessage(msgObj: any): Promise<void> {\n\t\tif (msgObj.init) {\n\t\t\tthis.breakpoints.forEach((breakpoint) => {\n\t\t\t\tthis.handleCdpMessage({\n\t\t\t\t\tid: breakpoint.cdpId,\n\t\t\t\t\tmethod: 'Debugger.setBreakpointByUrl',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\turl: this.uriFromBridgeToCDP(breakpoint.fileUri),\n\t\t\t\t\t\tlineNumber: breakpoint.lineNumber - 1,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst firstBreakTxn = this.breakOnFirstLine\n\t\t\t\t? this.sendDbgpCommand('step_into')\n\t\t\t\t: this.sendDbgpCommand('run');\n\t\t\tthis.pendingCommands.set(firstBreakTxn, {\n\t\t\t\t/* auto run after init */\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\t\tif (msgObj.response) {\n\t\t\tconst response = msgObj.response;\n\t\t\tconst attrs = response.$;\n\t\t\tconst command = attrs.command;\n\t\t\tconst transId = attrs.transaction_id;\n\t\t\tconst pending = this.pendingCommands.get(transId);\n\t\t\t// If this is a response to a command we sent\n\t\t\tswitch (command) {\n\t\t\t\tcase 'breakpoint_set': {\n\t\t\t\t\tif (\n\t\t\t\t\t\tpending &&\n\t\t\t\t\t\tpending.cdpId !== undefined &&\n\t\t\t\t\t\tpending.cdpMethod === 'Debugger.setBreakpointByUrl'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Map Xdebug breakpoint id to our cdp breakpoint id\n\t\t\t\t\t\tconst xdebugBpId = attrs.id;\n\t\t\t\t\t\tconst bpInfo = pending.params;\n\t\t\t\t\t\tif (bpInfo) {\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\tbreakpointId: cdpBpId,\n\t\t\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t\t\t} = bpInfo;\n\t\t\t\t\t\t\t// Store mapping\n\t\t\t\t\t\t\tthis.breakpoints.set(cdpBpId, {\n\t\t\t\t\t\t\t\tcdpId: cdpBpId,\n\t\t\t\t\t\t\t\txdebugId: xdebugBpId,\n\t\t\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Prepare CDP response\n\t\t\t\t\t\t\tconst scriptId =\n\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri);\n\t\t\t\t\t\t\tconst result = {\n\t\t\t\t\t\t\t\tbreakpointId: cdpBpId,\n\t\t\t\t\t\t\t\tlocations: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tscriptId: scriptId,\n\t\t\t\t\t\t\t\t\t\tlineNumber: lineNumber - 1,\n\t\t\t\t\t\t\t\t\t\tcolumnNumber: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'breakpoint_remove': {\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\t// No specific result content needed\n\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result: {} });\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'run':\n\t\t\t\tcase 'step_into':\n\t\t\t\tcase 'step_over':\n\t\t\t\tcase 'step_out': {\n\t\t\t\t\t// These come when execution stops or ends\n\t\t\t\t\tconst status = attrs.status; // 'break' or 'stopping'\n\n\t\t\t\t\t// NEW: send scriptParsed for any newly discovered file\n\t\t\t\t\tif (response['xdebug:message']) {\n\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\tresponse['xdebug:message'].$.filename\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (bridgeUri && !this.scriptIdByUrl.has(bridgeUri)) {\n\t\t\t\t\t\t\tawait this.sendScriptToCDP(\n\t\t\t\t\t\t\t\tbridgeUri,\n\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (status === 'break') {\n\t\t\t\t\t\t// Paused at breakpoint or step or exception\n\t\t\t\t\t\t// Get more info: which breakpoint or where\n\t\t\t\t\t\t// Use stack_get to retrieve call stack\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(`stack_get`);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\t/* internal stack get */\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// If reason indicates exception, we might handle after stack\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t} else if (status === 'stopping' || status === 'stopped') {\n\t\t\t\t\t\t// Script execution finished or engine detached\n\t\t\t\t\t\t// We can treat as resumed and terminated\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tmethod: 'Debugger.resumed',\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Xdebug might close connection after this, which triggers our close handler\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'eval': {\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\t// Handle evaluation result\n\t\t\t\t\t\tlet resultValue: any;\n\t\t\t\t\t\tif (response.property) {\n\t\t\t\t\t\t\t// The eval response may have a <property> with result\n\t\t\t\t\t\t\tconst property = response.property;\n\t\t\t\t\t\t\tconst type = property.$.type;\n\t\t\t\t\t\t\tconst encoding = property.$.encoding;\n\t\t\t\t\t\t\tlet valueStr: string | null = null;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(\n\t\t\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\t\t\t'_'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tvalueStr = property._;\n\t\t\t\t\t\t\t} else if (typeof property.$value !== 'undefined') {\n\t\t\t\t\t\t\t\t// Some responses might carry value in attribute or differently, but usually in _ or in value tag\n\t\t\t\t\t\t\t\tvalueStr = property.$value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (encoding === 'base64' && valueStr !== null) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst buf = Buffer.from(valueStr, 'base64');\n\t\t\t\t\t\t\t\t\tvalueStr = buf.toString();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t/* ignore decoding errors */\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (type === 'string') {\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\t\tvalue: valueStr ?? '',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\ttype === 'int' ||\n\t\t\t\t\t\t\t\ttype === 'float' ||\n\t\t\t\t\t\t\t\ttype === 'bool' ||\n\t\t\t\t\t\t\t\ttype === 'boolen' ||\n\t\t\t\t\t\t\t\ttype === 'integer' ||\n\t\t\t\t\t\t\t\ttype === 'double'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Map basic types\n\t\t\t\t\t\t\t\tlet parsed: any = valueStr;\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\ttype.startsWith('int') ||\n\t\t\t\t\t\t\t\t\ttype === 'integer'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tparsed = parseInt(valueStr || '0', 10);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\ttype === 'float' ||\n\t\t\t\t\t\t\t\t\ttype === 'double'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tparsed = parseFloat(valueStr || '0');\n\t\t\t\t\t\t\t\t} else if (type.startsWith('bool')) {\n\t\t\t\t\t\t\t\t\tparsed =\n\t\t\t\t\t\t\t\t\t\tvalueStr === '1' || valueStr === 'true';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresultValue = { type: 'number', value: parsed };\n\t\t\t\t\t\t\t} else if (type === 'array' || type === 'object') {\n\t\t\t\t\t\t\t\t// Complex object: create a handle for it\n\t\t\t\t\t\t\t\tconst className =\n\t\t\t\t\t\t\t\t\tproperty.$.classname ||\n\t\t\t\t\t\t\t\t\t(type === 'array' ? 'Array' : 'Object');\n\t\t\t\t\t\t\t\tconst objectId = String(this.nextObjectId++);\n\t\t\t\t\t\t\t\tconst fullname = property.$.fullname || '';\n\t\t\t\t\t\t\t\t// Store handle for later property retrieval\n\t\t\t\t\t\t\t\tthis.objectHandles.set(objectId, {\n\t\t\t\t\t\t\t\t\ttype: 'property',\n\t\t\t\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\t\t\t\tcontextId: 0,\n\t\t\t\t\t\t\t\t\tfullname: fullname,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tobjectId: objectId,\n\t\t\t\t\t\t\t\t\tclassName: className,\n\t\t\t\t\t\t\t\t\tdescription: className,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (type === 'null') {\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tsubtype: 'null',\n\t\t\t\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Other types (resource, etc)\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'undefined',\n\t\t\t\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No property in response (maybe an error or empty)\n\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\ttype: 'undefined',\n\t\t\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst result = { result: resultValue };\n\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result });\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'context_get':\n\t\t\t\tcase 'property_get': {\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\t// Handle variables or object properties retrieval with pagination\n\t\t\t\t\t\tconst objectId =\n\t\t\t\t\t\t\tpending.params?.objectId ||\n\t\t\t\t\t\t\tpending.params?.parentObjectId;\n\t\t\t\t\t\tconst handle = objectId\n\t\t\t\t\t\t\t? this.objectHandles.get(objectId)\n\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\t// @TODO: This is hacky. It enables browsing arrays. Without it,\n\t\t\t\t\t\t// the debugger shows $_SERVER as an array with a single property called\n\t\t\t\t\t\t// $_SERVER.\n\t\t\t\t\t\tconst responseProps =\n\t\t\t\t\t\t\tresponse.property?.property ?? response.property;\n\n\t\t\t\t\t\tconst currentProps: any[] = [];\n\t\t\t\t\t\tif (responseProps) {\n\t\t\t\t\t\t\tconst propertiesArray = Array.isArray(responseProps)\n\t\t\t\t\t\t\t\t? responseProps\n\t\t\t\t\t\t\t\t: [responseProps];\n\n\t\t\t\t\t\t\tfor (const prop of propertiesArray) {\n\t\t\t\t\t\t\t\tconst name =\n\t\t\t\t\t\t\t\t\tprop.$.name || prop.$.fullname || '';\n\t\t\t\t\t\t\t\tlet type = prop.$.type || 'undefined';\n\t\t\t\t\t\t\t\tconst hasChildren = prop.$.children === '1';\n\t\t\t\t\t\t\t\tconst encoding = prop.$.encoding;\n\t\t\t\t\t\t\t\tlet valueStr: string | null = null;\n\t\t\t\t\t\t\t\tif (typeof prop._ !== 'undefined') {\n\t\t\t\t\t\t\t\t\tvalueStr = prop._;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tencoding === 'base64' &&\n\t\t\t\t\t\t\t\t\tvalueStr !== null\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst buf = Buffer.from(\n\t\t\t\t\t\t\t\t\t\t\tvalueStr,\n\t\t\t\t\t\t\t\t\t\t\t'base64'\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tvalueStr = buf.toString();\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t/* ignore base64 decode errors */\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (hasChildren) {\n\t\t\t\t\t\t\t\t\t// Object or array\n\t\t\t\t\t\t\t\t\tconst className =\n\t\t\t\t\t\t\t\t\t\tprop.$.classname ||\n\t\t\t\t\t\t\t\t\t\t(type === 'array' ? 'Array' : 'Object');\n\t\t\t\t\t\t\t\t\tconst childObjectId = String(\n\t\t\t\t\t\t\t\t\t\tthis.nextObjectId++\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t// Store handle\n\t\t\t\t\t\t\t\t\tconst contextId =\n\t\t\t\t\t\t\t\t\t\tpending.cdpMethod ===\n\t\t\t\t\t\t\t\t\t\t\t'Runtime.getProperties' &&\n\t\t\t\t\t\t\t\t\t\tpending.params?.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t? this.objectHandles.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\tpending.params\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t )?.contextId || 0\n\t\t\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\t\tconst depth =\n\t\t\t\t\t\t\t\t\t\tpending.cdpMethod ===\n\t\t\t\t\t\t\t\t\t\t\t'Runtime.getProperties' &&\n\t\t\t\t\t\t\t\t\t\tpending.params?.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t? this.objectHandles.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\tpending.params\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t )?.depth || 0\n\t\t\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\t\t// Use same depth/context as parent\n\t\t\t\t\t\t\t\t\tthis.objectHandles.set(childObjectId, {\n\t\t\t\t\t\t\t\t\t\ttype: 'property',\n\t\t\t\t\t\t\t\t\t\tdepth: depth,\n\t\t\t\t\t\t\t\t\t\tcontextId: contextId,\n\t\t\t\t\t\t\t\t\t\tfullname: prop.$.fullname || name,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcurrentProps.push({\n\t\t\t\t\t\t\t\t\t\tname: prop.$.key || name,\n\t\t\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\t\t\tclassName: className,\n\t\t\t\t\t\t\t\t\t\t\tdescription: className,\n\t\t\t\t\t\t\t\t\t\t\tobjectId: childObjectId,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\twritable: false,\n\t\t\t\t\t\t\t\t\t\tconfigurable: false,\n\t\t\t\t\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Primitive or null\n\t\t\t\t\t\t\t\t\tlet value: any;\n\t\t\t\t\t\t\t\t\tlet subtype: string | undefined;\n\t\t\t\t\t\t\t\t\tif (type === 'string') {\n\t\t\t\t\t\t\t\t\t\tvalue = valueStr ?? '';\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\ttype === 'int' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'integer'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvalue = parseInt(valueStr || '0', 10);\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\ttype === 'float' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'double'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvalue = parseFloat(valueStr || '0');\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\ttype === 'bool' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'boolean'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvalue =\n\t\t\t\t\t\t\t\t\t\t\tvalueStr === '1' ||\n\t\t\t\t\t\t\t\t\t\t\tvalueStr === 'true';\n\t\t\t\t\t\t\t\t\t\ttype = 'boolean';\n\t\t\t\t\t\t\t\t\t} else if (type === 'null') {\n\t\t\t\t\t\t\t\t\t\tvalue = null;\n\t\t\t\t\t\t\t\t\t\tsubtype = 'null';\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// other types like resource\n\t\t\t\t\t\t\t\t\t\tvalue = valueStr;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst valueObj: any = {\n\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\ttype === 'integer'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'number'\n\t\t\t\t\t\t\t\t\t\t\t\t: type,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tif (subtype) valueObj.subtype = subtype;\n\t\t\t\t\t\t\t\t\tvalueObj.value = value;\n\t\t\t\t\t\t\t\t\tcurrentProps.push({\n\t\t\t\t\t\t\t\t\t\tname: prop.$.key || name,\n\t\t\t\t\t\t\t\t\t\tvalue: valueObj,\n\t\t\t\t\t\t\t\t\t\twritable: false,\n\t\t\t\t\t\t\t\t\t\tconfigurable: false,\n\t\t\t\t\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Handle pagination\n\t\t\t\t\t\tif (handle) {\n\t\t\t\t\t\t\t// Add current page props to aggregated results\n\t\t\t\t\t\t\tconst aggregatedProps = (\n\t\t\t\t\t\t\t\thandle.aggregatedProps || []\n\t\t\t\t\t\t\t).concat(currentProps);\n\n\t\t\t\t\t\t\t// Check if there are more pages - if we got exactly 32 items (page size), there might be more\n\t\t\t\t\t\t\tconst pageSize = 32;\n\t\t\t\t\t\t\tconst hasMorePages =\n\t\t\t\t\t\t\t\tcurrentProps.length === pageSize;\n\n\t\t\t\t\t\t\tif (hasMorePages) {\n\t\t\t\t\t\t\t\t// More pages available, fetch next page\n\t\t\t\t\t\t\t\tconst nextPage = (handle.currentPage || 0) + 1;\n\t\t\t\t\t\t\t\tconst updatedHandle = {\n\t\t\t\t\t\t\t\t\t...handle,\n\t\t\t\t\t\t\t\t\tcurrentPage: nextPage,\n\t\t\t\t\t\t\t\t\taggregatedProps: aggregatedProps,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tthis.objectHandles.set(\n\t\t\t\t\t\t\t\t\tobjectId!,\n\t\t\t\t\t\t\t\t\tupdatedHandle\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Send command for next page\n\t\t\t\t\t\t\t\tlet nextCmd: string;\n\t\t\t\t\t\t\t\tif (command === 'context_get') {\n\t\t\t\t\t\t\t\t\tconst contextId = handle.contextId ?? 0;\n\t\t\t\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\t\t\t\tnextCmd = `context_get -d ${depth} -c ${contextId} -p ${nextPage} -m ${pageSize}`;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// property_get\n\t\t\t\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\t\t\t\tconst fullname = handle.fullname!;\n\t\t\t\t\t\t\t\t\tconst fmtName =\n\t\t\t\t\t\t\t\t\t\tthis.formatPropertyFullName(fullname);\n\t\t\t\t\t\t\t\t\tnextCmd = `property_get -d ${depth} -n ${fmtName} -p ${nextPage} -m ${pageSize}`;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst txn = this.sendDbgpCommand(nextCmd);\n\t\t\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\t\t\tcdpId: pending.cdpId,\n\t\t\t\t\t\t\t\t\tcdpMethod: pending.cdpMethod,\n\t\t\t\t\t\t\t\t\tparams: pending.params,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t// Don't send response yet, wait for more pages\n\t\t\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// No more pages or last page, send final response\n\t\t\t\t\t\t\t\tconst result = { result: aggregatedProps };\n\t\t\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\t\t\tid: pending.cdpId,\n\t\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No handle, send current props\n\t\t\t\t\t\t\tconst result = { result: currentProps };\n\t\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result });\n\t\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'stack_get': {\n\t\t\t\t\t// Build callFrames for paused state\n\t\t\t\t\tif (response.stack) {\n\t\t\t\t\t\tconst stackEntries = Array.isArray(response.stack)\n\t\t\t\t\t\t\t? response.stack\n\t\t\t\t\t\t\t: [response.stack];\n\t\t\t\t\t\tconst callFrames: any[] = [];\n\t\t\t\t\t\tthis.callFramesMap.clear();\n\t\t\t\t\t\t// Send scriptParsed for any new files in stack\n\t\t\t\t\t\tfor (const frame of stackEntries) {\n\t\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\t\tframe.$.filename\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst scriptId =\n\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri);\n\t\t\t\t\t\t\tif (!this.scriptIdByUrl.has(bridgeUri)) {\n\t\t\t\t\t\t\t\t// Mark it known and send scriptParsed\n\t\t\t\t\t\t\t\tthis.scriptIdByUrl.set(bridgeUri, scriptId);\n\t\t\t\t\t\t\t\tawait this.sendScriptToCDP(bridgeUri, scriptId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Build callFrames array\n\t\t\t\t\t\tfor (const frame of stackEntries) {\n\t\t\t\t\t\t\tconst level = parseInt(frame.$.level, 10);\n\t\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\t\tframe.$.filename\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst line = parseInt(frame.$.lineno, 10);\n\t\t\t\t\t\t\tconst functionName =\n\t\t\t\t\t\t\t\tframe.$.where && frame.$.where !== '{main}'\n\t\t\t\t\t\t\t\t\t? frame.$.where\n\t\t\t\t\t\t\t\t\t: '(anonymous)';\n\t\t\t\t\t\t\tconst callFrameId = `frame:${level}`;\n\t\t\t\t\t\t\t// Map callFrameId to depth for evaluate\n\t\t\t\t\t\t\tthis.callFramesMap.set(callFrameId, level);\n\t\t\t\t\t\t\t// Prepare scope chain (local and global)\n\t\t\t\t\t\t\tconst scopes: any[] = [];\n\t\t\t\t\t\t\t// Local scope\n\t\t\t\t\t\t\tconst localObjectId = String(this.nextObjectId++);\n\t\t\t\t\t\t\tthis.objectHandles.set(localObjectId, {\n\t\t\t\t\t\t\t\ttype: 'context',\n\t\t\t\t\t\t\t\tcontextId: 0,\n\t\t\t\t\t\t\t\tdepth: level,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tscopes.push({\n\t\t\t\t\t\t\t\ttype: 'local',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tobjectId: localObjectId,\n\t\t\t\t\t\t\t\t\tclassName: 'Object',\n\t\t\t\t\t\t\t\t\tdescription: 'Local',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Global scope (superglobals in PHP)\n\t\t\t\t\t\t\tconst globalObjectId = String(this.nextObjectId++);\n\t\t\t\t\t\t\tthis.objectHandles.set(globalObjectId, {\n\t\t\t\t\t\t\t\ttype: 'context',\n\t\t\t\t\t\t\t\tcontextId: 1,\n\t\t\t\t\t\t\t\tdepth: level,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tscopes.push({\n\t\t\t\t\t\t\t\ttype: 'global',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tobjectId: globalObjectId,\n\t\t\t\t\t\t\t\t\tclassName: 'Object',\n\t\t\t\t\t\t\t\t\tdescription: 'Global',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Build callFrame entry\n\t\t\t\t\t\t\tcallFrames.push({\n\t\t\t\t\t\t\t\tcallFrameId: callFrameId,\n\t\t\t\t\t\t\t\tfunctionName: functionName,\n\t\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\t\tscriptId:\n\t\t\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri),\n\t\t\t\t\t\t\t\t\tlineNumber: line - 1,\n\t\t\t\t\t\t\t\t\tcolumnNumber: 0,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tscopeChain: scopes,\n\t\t\t\t\t\t\t\tthis: {\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tclassName: 'Object',\n\t\t\t\t\t\t\t\t\tdescription: 'Object',\n\t\t\t\t\t\t\t\t\tobjectId: globalObjectId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Send paused event to DevTools\n\t\t\t\t\t\tlet pauseReason = 'pause';\n\t\t\t\t\t\t// Determine reason from Xdebug if available\n\t\t\t\t\t\t// (Xdebug 'reason' might be in the original run/step response we handled prior)\n\t\t\t\t\t\t// We'll simplify: if any breakpoint matches top frame location, reason = breakpoint\n\t\t\t\t\t\tif (stackEntries.length > 0) {\n\t\t\t\t\t\t\tconst topFrame = stackEntries[0];\n\t\t\t\t\t\t\tif (topFrame.$.filename && topFrame.$.lineno) {\n\t\t\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\t\t\ttopFrame.$.filename\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst lineNumber = parseInt(\n\t\t\t\t\t\t\t\t\ttopFrame.$.lineno,\n\t\t\t\t\t\t\t\t\t10\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tfor (const bp of this.breakpoints.values()) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tbp.fileUri === bridgeUri &&\n\t\t\t\t\t\t\t\t\t\tbp.lineNumber === lineNumber\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tpauseReason = 'breakpoint';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tmethod: 'Debugger.paused',\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\treason: pauseReason,\n\t\t\t\t\t\t\t\tcallFrames: callFrames,\n\t\t\t\t\t\t\t\thitBreakpoints:\n\t\t\t\t\t\t\t\t\tpauseReason === 'breakpoint' ? [''] : [],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// Remove pending stack_get\n\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// Other commands we didn't specifically handle\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result: {} });\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msgObj.stream) {\n\t\t\tconst stream = msgObj.stream;\n\t\t\tconst kind = stream.$.type; // 'stdout' or 'stderr'\n\t\t\tconst enc = stream.$.encoding || 'none';\n\t\t\tlet data = typeof stream._ === 'string' ? stream._ : '';\n\t\t\tif (enc === 'base64') data = Buffer.from(data, 'base64').toString();\n\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: kind === 'stderr' ? 'error' : 'info',\n\t\t\t\t\t\ttext: data,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\tstackTrace: { callFrames: [] },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t} else if (msgObj.notify) {\n\t\t\t// Notifications (e.g., breakpoint_resolved, etc.) - not specifically handled here.\n\t\t}\n\t}\n}\n","import { logger } from '@php-wasm/logger';\nimport type { PHP, PHPWorker, RemoteAPI } from '@php-wasm/universal';\nimport { readdirSync, readFileSync, lstatSync } from 'fs';\nimport path from 'path';\nimport { CDPServer } from './cdp-server';\nimport { DbgpSession } from './dbgp-session';\nimport { XdebugCDPBridge } from './xdebug-cdp-bridge';\n\nexport type StartBridgeConfig = {\n\tcdpPort?: number;\n\tcdpHost?: string;\n\tdbgpPort?: number;\n\tphpRoot?: string;\n\tphpInstance?: PHP | RemoteAPI<PHPWorker>;\n\tgetPHPFile?: (path: string) => string | Promise<string>;\n\tbreakOnFirstLine?: boolean;\n};\n\nexport async function startBridge(config: StartBridgeConfig) {\n\tconst cdpPort = config.cdpPort ?? 9229;\n\tconst dbgpPort = config.dbgpPort ?? 9003;\n\tconst cdpHost = config.cdpHost ?? 'localhost';\n\tconst phpRoot = config.phpRoot ?? process.cwd();\n\tconst breakOnFirstLine = config.breakOnFirstLine ?? false;\n\n\tlogger.log('Starting XDebug Bridge...');\n\n\t// Entry point to start the service\n\tconst cdpServer = new CDPServer(cdpPort);\n\n\tlogger.log('Connect Chrome DevTools to CDP at:');\n\tlogger.log(\n\t\t`devtools://devtools/bundled/inspector.html?ws=${cdpHost}:${cdpPort}\\n`\n\t);\n\n\tawait new Promise((resolve) => cdpServer.on('clientConnected', resolve));\n\tawait new Promise((resolve) => setTimeout(resolve, 2000));\n\n\tlogger.log('Chrome connected! Initializing Xdebug receiver...');\n\n\tconst dbgpSession = new DbgpSession(dbgpPort);\n\n\tlogger.log(`XDebug receiver running on port ${dbgpPort}`);\n\tlogger.log('Running a PHP script with Xdebug enabled...');\n\n\t// Recursively get a list of .php files in phpRoot\n\tasync function getPhpFiles(dir: string): Promise<string[]> {\n\t\tconst results: string[] = [];\n\t\tconst list = config.phpInstance\n\t\t\t? await config.phpInstance!.listFiles(dir)\n\t\t\t: readdirSync(dir);\n\t\tfor (const file of list) {\n\t\t\tconst filePath = path.join(dir, file);\n\t\t\ttry {\n\t\t\t\t// lstat avoids crashes when encountering symlinks\n\t\t\t\tconst stat = config.phpInstance\n\t\t\t\t\t? await config.phpInstance!.isDir(filePath)\n\t\t\t\t\t: lstatSync(filePath).isDirectory();\n\t\t\t\tif (stat) {\n\t\t\t\t\tresults.push(...(await getPhpFiles(filePath)));\n\t\t\t\t} else if (file.endsWith('.php')) {\n\t\t\t\t\tresults.push(filePath);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip this entry if we can't read it\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t}\n\n\tconst getPHPFile = config.phpInstance\n\t\t? (path: string) => config.phpInstance!.readFileAsText(path)\n\t\t: config.getPHPFile\n\t\t? config.getPHPFile\n\t\t: (path: string) => readFileSync(path, 'utf-8');\n\n\tconst phpFiles = await getPhpFiles(phpRoot);\n\treturn new XdebugCDPBridge(dbgpSession, cdpServer, {\n\t\tknownScriptUrls: phpFiles,\n\t\tphpRoot,\n\t\tgetPHPFile,\n\t\tbreakOnFirstLine,\n\t});\n}\n","/**\n * A CLI script that runs PHP CLI via the WebAssembly build.\n */\nimport os from 'os';\nimport { writeFileSync, existsSync, mkdtempSync, chmodSync } from 'fs';\nimport { rootCertificates } from 'tls';\n\nimport {\n\tLatestSupportedPHPVersion,\n\tSupportedPHPVersionsList,\n} from '@php-wasm/universal';\nimport type { SupportedPHPVersion } from '@php-wasm/universal';\n\nimport { FileLockManagerForNode } from '@php-wasm/node';\nimport { PHP } from '@php-wasm/universal';\nimport { loadNodeRuntime, useHostFilesystem } from '@php-wasm/node';\nimport { startBridge } from '@php-wasm/xdebug-bridge';\nimport path from 'path';\n\nlet args = process.argv.slice(2);\nif (!args.length) {\n\targs = ['--help'];\n}\n\nconst baseUrl = (import.meta || {}).url;\n\n// Write the ca-bundle.crt file to disk so that PHP can find it.\nconst caBundlePath = new URL('ca-bundle.crt', baseUrl).pathname;\nif (!existsSync(caBundlePath)) {\n\twriteFileSync(caBundlePath, rootCertificates.join('\\n'));\n}\nargs.unshift('-d', `openssl.cafile=${caBundlePath}`);\n\nasync function run() {\n\tconst defaultPhpIniPath = new URL('php.ini', baseUrl).pathname;\n\tconst phpVersion = (process.env['PHP'] ||\n\t\tLatestSupportedPHPVersion) as SupportedPHPVersion;\n\tif (!SupportedPHPVersionsList.includes(phpVersion)) {\n\t\tthrow new Error(`Unsupported PHP version ${phpVersion}`);\n\t}\n\n\tconst hasXdebugOption = args.some((arg) => arg.startsWith('--xdebug'));\n\tif (hasXdebugOption) {\n\t\targs = args.filter((arg) => arg !== '--xdebug');\n\t}\n\n\tconst hasDevtoolsOption = args.some((arg) =>\n\t\targ.startsWith('--experimental-devtools')\n\t);\n\tif (hasDevtoolsOption) {\n\t\targs = args.filter((arg) => arg !== '--experimental-devtools');\n\t}\n\n\t// npm scripts set the TMPDIR env variable\n\t// PHP accepts a TMPDIR env variable and expects it to\n\t// be a writable directory within the PHP filesystem.\n\t// These two clash and prevent PHP from creating temporary\n\t// files and directories so let's just not pass the npm TMPDIR\n\t// to PHP.\n\t// @see https://github.com/npm/npm/issues/4531\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { TMPDIR, ...envVariables } = process.env;\n\n\t/**\n\t * Ensure the PHP_BINARY constant is set to the PHP-WASM binary.\n\t *\n\t * ## Rationale\n\t *\n\t * We want any `proc_open()` calls to use the PHP-WASM binary and\n\t * not the system PHP binary.\n\t *\n\t * ## How it works\n\t *\n\t * The code below creates a temporary `php` executable in PATH,\n\t * which covers `proc_open( \"php\", ... )` calls.\n\t *\n\t * Furthermore, when PHP detects the `php` executable in PATH, it\n\t * sets the PHP_BINARY constant to it.\n\t */\n\tconst tempDir = mkdtempSync(path.join(os.tmpdir(), 'php-wasm-bin'));\n\twriteFileSync(\n\t\t`${tempDir}/php`,\n\t\t`#!/bin/sh\n${process.argv[0]} ${process.execArgv.join(' ')} ${process.argv[1]}\n\t`\n\t);\n\tchmodSync(`${tempDir}/php`, 0o755);\n\n\tconst sysTempDir = mkdtempSync(path.join(os.tmpdir(), 'php-wasm-sys-tmp'));\n\tconst php = new PHP(\n\t\tawait loadNodeRuntime(phpVersion, {\n\t\t\temscriptenOptions: {\n\t\t\t\tfileLockManager: new FileLockManagerForNode(),\n\t\t\t\tprocessId: 1,\n\t\t\t\tENV: {\n\t\t\t\t\t...envVariables,\n\t\t\t\t\tTMPDIR: sysTempDir,\n\t\t\t\t\tTERM: 'xterm',\n\t\t\t\t\tPATH: `${tempDir}:${envVariables['PATH']}`,\n\t\t\t\t},\n\t\t\t},\n\t\t\twithXdebug: hasXdebugOption,\n\t\t})\n\t);\n\n\tuseHostFilesystem(php);\n\n\tif (hasDevtoolsOption && hasXdebugOption) {\n\t\tconst bridge = await startBridge({ breakOnFirstLine: true });\n\n\t\tbridge.start();\n\t}\n\n\tconst hasMinusCOption = args.some((arg) => arg.startsWith('-c'));\n\tif (!hasMinusCOption) {\n\t\targs.unshift('-c', defaultPhpIniPath);\n\t}\n\n\tconst response = await php.cli(['php', ...args]);\n\tresponse.stderr.pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite(chunk) {\n\t\t\t\tprocess.stderr.write(chunk);\n\t\t\t},\n\t\t})\n\t);\n\tresponse.stdout.pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite(chunk) {\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t},\n\t\t})\n\t);\n\n\tawait response.exitCode\n\t\t.catch((result) => {\n\t\t\tif (result.name === 'ExitStatus') {\n\t\t\t\tprocess.exit(result.status === undefined ? 1 : result.status);\n\t\t\t}\n\t\t\tthrow result;\n\t\t})\n\t\t.finally(() => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tprocess.exit(0);\n\t\t\t\t// 100 is an arbitrary number. It's there to give any child processes\n\t\t\t\t// a chance to pass their output to JS before the main process exits.\n\t\t\t}, 100);\n\t\t});\n}\n\nrun();\n"],"names":["currentJsRuntime","asPromise","obj","resolve","reject","event","isByobSupported","inputBytes","stream","File","sources","fileName","options","date","reader","position","blob","controller","view","buffer","uint8array","bytesRead","CustomEvent","name","logEventType","logEvent","log","args","logger","logToConsole","prepareLogMessage","LogSeverity","logMessage","logs","addToLogArray","message","logToMemory","formatLogEntry","LogPrefix","Logger","handlers","logWithSeverity","handler","severity","getDefaultHandlers","prefix","formattedDate","formattedTime","now","R","ReflectApply","target","receiver","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","value","EventEmitter","eventsModule","once","defaultMaxListeners","checkListener","listener","arg","_getMaxListeners","that","type","i","doError","events","er","err","len","listeners","arrayClone","_addListener","prepend","m","existing","w","onceWrapper","_onceWrap","state","wrapped","list","originalListener","spliceOne","keys","key","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","arr","copy","index","ret","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","CDPServer","port","WebSocketServer","ws","data","json","DbgpSession","net","socket","nullIndex","lengthStr","length","xml","msg","command","camelCase","str","camelcase","nextChrUpper","leadingHyphens","chr","decamelize","joinString","lowercase","notCamelcase","chrLower","chrString","looksLikeNumber","x","tokenizeArgString","argString","e","prevC","c","opening","ii","DefaultValuesForTypeKey","mixin","YargsParser","_mixin","argsInput","opts","inputIsString","aliases","combineAliases","configuration","defaults","configObjects","envPrefix","notFlagsOption","notFlagsArgv","newAliases","defaulted","__","negative","negatedBoolean","opt","assignment","extendAliases","alias","error","checkConfiguration","notFlags","argv","argvReturn","truncatedArg","broken","letters","next","isUnknownOptionAsArg","pushPositional","checkAllAliases","eatArray","eatNargs","setArg","defaultValue","j","applyEnvVars","setConfig","setConfigObjects","applyDefaultsAndAliases","applyCoercions","setPlaceholderKeys","hasKey","k","prop","maybeCoercedNumber","maybeCoerceNumber","argAfterEqualSign","toEat","isUndefined","available","consumed","argsToSet","nargsCount","defVal","processValue","val","shouldStripQuotes","addNewAlias","splitKey","setKey","keyProperties","a","stripQuotes","v","increment","configLookup","configKey","configPath","config","resolvedConfigPath","resolveConfig","setConfigObject","ex","prev","fullKey","configObject","configOnly","env","envVar","coerce","applied","ali","canLog","o","sanitizeKey","isTypeArray","isValueArray","duplicate","y","flag","toCheck","setAlias","hasAnyFlag","flagsKeys","hasFlagsMatching","patterns","pattern","match","hasAllShortFlags","hasAllFlags","isUnknownOption","defaultForType","guessType","num","aliasArrays","combined","change","aliasArray","self","lastAlias","orig","_a","_b","_c","minNodeVersion","nodeVersion","format","normalize","path","readFileSync","shim$1","writeFile","file","statSync","shim","Y18N","cb","singular","plural","quantity","values","locale","parts","part","work","_this","directory","languageFile","serializedLocale","localeLookup","y18n","_shim","_y18n","__dirname","fileURLToPath","mainFilename","this","assign","getValue","isArray","isEmpty","isFunction","isObject","isPlainObject","slice","hasProp","source","ref","ctor","proto","Utility","XMLDOMImplementationModule","XMLDOMImplementation","feature","version","qualifiedName","publicId","systemId","namespaceURI","doctype","title","XMLDOMErrorHandlerModule","XMLDOMErrorHandler","XMLDOMStringListModule","XMLDOMStringList","require$$0","require$$1","XMLDOMConfigurationModule","XMLDOMConfiguration","NodeTypeModule","NodeType","XMLAttributeModule","XMLAttribute","parent","node","XMLNamedNodeMapModule","XMLNamedNodeMap","nodes","oldNode","localName","XMLNode","extend","child","require$$2","require$$3","require$$4","XMLElementModule","superClass","XMLElement","attributes","ref1","att","attName","clonedSelf","clonedChild","attValue","newAttr","oldAttr","isId","idAttr","tagname","classNames","XMLCharacterDataModule","XMLCharacterData","offset","count","XMLCDataModule","XMLCData","text","XMLCommentModule","XMLComment","XMLDeclarationModule","XMLDeclaration","encoding","standalone","XMLDTDAttListModule","XMLDTDAttList","elementName","attributeName","attributeType","defaultValueType","XMLDTDEntityModule","XMLDTDEntity","pe","XMLDTDElementModule","XMLDTDElement","XMLDTDNotationModule","XMLDTDNotation","require$$5","require$$6","require$$7","XMLDocTypeModule","XMLDocType","pubID","sysID","ref2","XMLRawModule","XMLRaw","XMLTextModule","XMLText","content","XMLProcessingInstructionModule","XMLProcessingInstruction","XMLDummyModule","XMLDummy","XMLNodeListModule","XMLNodeList","DocumentPositionModule","DocumentPosition","XMLNodeModule","parent1","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","results","childNode","item","lastChild","len1","ref3","newChild","refChild","removed","insTarget","insValue","instruction","doc","xmldec","clonedRoot","oldChild","deep","other","res","isDescendantChild","nodePos","thisPos","found","pos","func","bind","fn","me","XMLStringifierModule","XMLStringifier","regex","ampregex","WriterStateModule","WriterState","require$$14","require$$15","XMLWriterBaseModule","XMLWriterBase","filteredOptions","ref4","ref5","ref6","level","indentLevel","r","childNodeCount","firstChildNode","prettySuppressed","XMLStringWriterModule","XMLStringWriter","XMLDocumentModule","XMLDocument","writer","writerOptions","tagName","importedNode","elementId","eventInterface","root","whatToShow","filter","require$$16","require$$17","require$$18","XMLDocumentCBModule","XMLDocumentCB","onData","onEnd","oldValidationFlag","chunk","XMLStreamWriterModule","XMLStreamWriter","lib","builder","escapeCDATA","requiresCDATA","wrapCDATA","entry","builder_1","Builder","rootObj","attrkey","charkey","render","rootElement","rootName","element","attr","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","encodeChunk","uint8","start","end","output","extraBytes","maxChunkLength","len2","ieee754","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","rt","base64","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","createBuffer","buf","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","b","fromObject","assertSize","size","alloc","fill","checked","string","actual","fromArrayLike","array","arrayView","byteOffset","numberIsNaN","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","max","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","checkInt","min","maxBytes","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","src","dst","alphabet","table","i16","copyProps","module","SafeBuffer","isEncoding","_normalizeEncoding","enc","retried","normalizeEncoding","nenc","string_decoder","StringDecoder","nb","utf16Text","utf16End","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","p","total","sax","strict","SAXParser","SAXStream","createStream","buffers","parser","clearBuffers","S","rootNS","emit","F","newf","checkBufferLength","maxAllowed","maxActual","l","closeText","emitNode","flushBuffers","write","Stream","streamWraps","ev","h","SD","CDATA","DOCTYPE","XML_NAMESPACE","XMLNS_NAMESPACE","nameStart","nameBody","entityStart","entityBody","isWhitespace","isQuote","isAttribEnd","isMatch","notMatch","nodeType","textopts","strictFail","newTag","tag","qname","attribute","qualName","local","attrib","qn","openTag","selfClosing","nv","uri","closeTag","t","closeTo","close","parseEntity","entity","entityLC","numStr","beginWhiteSpace","charAt","result","starti","pad","returnState","parsedEntity","stringFromCharCode","floor","fromCodePoint","MAX_SIZE","codeUnits","highSurrogate","lowSurrogate","bom","prefixMatch","processors","defineProperty","processItem","setImmediate","thing","process","descriptor","Parser","error1","newValue","ontext","stack","processedKey","cdata","emptyStr","nodeName","objClone","old","xpath","charChild","ValidationError","parseStringPromise","XdebugCDPBridge","dbgp","cdp","url","msgObj","bridgeUri","scriptId","id","highlightUri","cdpUri","phpContent","phpLines","mappings","_value","sourceMap","sourceMapDataUri","createHash","fullname","needsQuotes","ch","txnIdStr","cmdStr","method","params","sendResponse","line","dbgpUri","lineNumber","cdpBreakpointId","cmd","txn","breakpointId","bpIdStr","bp","expression","callFrameId","objectId","handle","contextId","updatedHandle","depth","fmtName","sid","fullPath","breakpoint","firstBreakTxn","response","attrs","transId","pending","xdebugBpId","bpInfo","cdpBpId","status","resultValue","property","valueStr","className","responseProps","currentProps","propertiesArray","hasChildren","childObjectId","subtype","valueObj","aggregatedProps","pageSize","nextPage","nextCmd","stackEntries","callFrames","frame","functionName","scopes","localObjectId","globalObjectId","pauseReason","topFrame","kind","startBridge","cdpPort","dbgpPort","cdpHost","phpRoot","breakOnFirstLine","cdpServer","dbgpSession","getPhpFiles","readdirSync","filePath","lstatSync","getPHPFile","phpFiles","baseUrl","caBundlePath","existsSync","writeFileSync","rootCertificates","run","defaultPhpIniPath","phpVersion","LatestSupportedPHPVersion","SupportedPHPVersionsList","hasXdebugOption","hasDevtoolsOption","TMPDIR","envVariables","tempDir","mkdtempSync","os","chmodSync","sysTempDir","php","PHP","loadNodeRuntime","FileLockManagerForNode","useHostFilesystem"],"mappings":"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","x_google_ignoreList":[7,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../../../../node_modules/fast-xml-parser/src/util.js","../../../../node_modules/fast-xml-parser/src/validator.js","../../../../node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js","../../../../node_modules/fast-xml-parser/src/xmlparser/xmlNode.js","../../../../node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js","../../../../node_modules/strnum/strnum.js","../../../../node_modules/fast-xml-parser/src/ignoreAttributes.js","../../../../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js","../../../../node_modules/fast-xml-parser/src/xmlparser/node2json.js","../../../../node_modules/fast-xml-parser/src/xmlparser/XMLParser.js","../../../../node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js","../../../../node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js","../../../../node_modules/jsonc-parser/lib/esm/impl/scanner.js","../../../../node_modules/jsonc-parser/lib/esm/impl/string-intern.js","../../../../node_modules/jsonc-parser/lib/esm/impl/format.js","../../../../node_modules/jsonc-parser/lib/esm/impl/parser.js","../../../../node_modules/jsonc-parser/lib/esm/impl/edit.js","../../../../node_modules/jsonc-parser/lib/esm/main.js","../../../../packages/php-wasm/cli-util/src/lib/xdebug-path-mappings.ts","../../../../packages/php-wasm/node-polyfills/src/lib/current-js-runtime.ts","../../../../packages/php-wasm/node-polyfills/src/lib/blob.ts","../../../../packages/php-wasm/node-polyfills/src/lib/custom-event.ts","../../../../packages/php-wasm/logger/src/lib/handlers/log-event.ts","../../../../packages/php-wasm/logger/src/lib/handlers/log-to-console.ts","../../../../packages/php-wasm/logger/src/lib/handlers/log-to-memory.ts","../../../../packages/php-wasm/logger/src/lib/logger.ts","../../../../node_modules/events/events.js","../../../../packages/php-wasm/xdebug-bridge/src/lib/cdp-server.ts","../../../../packages/php-wasm/xdebug-bridge/src/lib/dbgp-session.ts","../../../../node_modules/yargs-parser/build/lib/string-utils.js","../../../../node_modules/yargs-parser/build/lib/tokenize-arg-string.js","../../../../node_modules/yargs-parser/build/lib/yargs-parser-types.js","../../../../node_modules/yargs-parser/build/lib/yargs-parser.js","../../../../node_modules/yargs-parser/build/lib/index.js","../../../../node_modules/y18n/build/lib/platform-shims/node.js","../../../../node_modules/y18n/build/lib/index.js","../../../../node_modules/y18n/index.mjs","../../../../node_modules/yargs/lib/platform-shims/esm.mjs","../../../../node_modules/xml2js/lib/defaults.js","../../../../node_modules/xmlbuilder/lib/Utility.js","../../../../node_modules/xmlbuilder/lib/XMLDOMImplementation.js","../../../../node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js","../../../../node_modules/xmlbuilder/lib/XMLDOMStringList.js","../../../../node_modules/xmlbuilder/lib/XMLDOMConfiguration.js","../../../../node_modules/xmlbuilder/lib/NodeType.js","../../../../node_modules/xmlbuilder/lib/XMLAttribute.js","../../../../node_modules/xmlbuilder/lib/XMLNamedNodeMap.js","../../../../node_modules/xmlbuilder/lib/XMLElement.js","../../../../node_modules/xmlbuilder/lib/XMLCharacterData.js","../../../../node_modules/xmlbuilder/lib/XMLCData.js","../../../../node_modules/xmlbuilder/lib/XMLComment.js","../../../../node_modules/xmlbuilder/lib/XMLDeclaration.js","../../../../node_modules/xmlbuilder/lib/XMLDTDAttList.js","../../../../node_modules/xmlbuilder/lib/XMLDTDEntity.js","../../../../node_modules/xmlbuilder/lib/XMLDTDElement.js","../../../../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../../../../node_modules/xmlbuilder/lib/XMLDocType.js","../../../../node_modules/xmlbuilder/lib/XMLRaw.js","../../../../node_modules/xmlbuilder/lib/XMLText.js","../../../../node_modules/xmlbuilder/lib/XMLProcessingInstruction.js","../../../../node_modules/xmlbuilder/lib/XMLDummy.js","../../../../node_modules/xmlbuilder/lib/XMLNodeList.js","../../../../node_modules/xmlbuilder/lib/DocumentPosition.js","../../../../node_modules/xmlbuilder/lib/XMLNode.js","../../../../node_modules/xmlbuilder/lib/XMLStringifier.js","../../../../node_modules/xmlbuilder/lib/WriterState.js","../../../../node_modules/xmlbuilder/lib/XMLWriterBase.js","../../../../node_modules/xmlbuilder/lib/XMLStringWriter.js","../../../../node_modules/xmlbuilder/lib/XMLDocument.js","../../../../node_modules/xmlbuilder/lib/XMLDocumentCB.js","../../../../node_modules/xmlbuilder/lib/XMLStreamWriter.js","../../../../node_modules/xmlbuilder/lib/index.js","../../../../node_modules/xml2js/lib/builder.js","../../../../node_modules/base64-js/index.js","../../../../node_modules/ieee754/index.js","../../../../node_modules/buffer/index.js","../../../../node_modules/safe-buffer/index.js","../../../../node_modules/string_decoder/lib/string_decoder.js","../../../../node_modules/sax/lib/sax.js","../../../../node_modules/xml2js/lib/bom.js","../../../../node_modules/xml2js/lib/processors.js","../../../../node_modules/xml2js/lib/parser.js","../../../../node_modules/xml2js/lib/xml2js.js","../../../../packages/php-wasm/xdebug-bridge/src/lib/xdebug-cdp-bridge.ts","../../../../packages/php-wasm/xdebug-bridge/src/lib/start-bridge.ts","../../../../packages/php-wasm/cli/src/main.ts"],"sourcesContent":["'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nexport const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nexport function getAllMatches(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n}\n\nexport const isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n}\n\nexport function isExist(v) {\n return typeof v !== 'undefined';\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexport function merge(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if (arrayMode === 'strict') {\n target[keys[i]] = [ a[keys[i]] ];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n}\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexport function getValue(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n}\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};","'use strict';\n\nimport {getAllMatches, isName} from './util.js';\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexport function validate(xmlData, options) {\n options = Object.assign({}, defaultOptions, options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n \n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n i+=2;\n i = readPI(xmlData,i);\n if (i.err) return i;\n }else if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n let tagStartPos = i;\n i++;\n \n if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject('InvalidTag',\n \"Expected closing tag '\"+otg.tagName+\"' (opened in line \"+openPos.line+\", col \"+openPos.col+\") instead of closing tag '\"+tagName+\"'.\",\n getLineNumberForPosition(xmlData, tagStartPos));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else if(options.unpairedTags.indexOf(tagName) !== -1){\n //don't push into stack\n } else {\n tags.push({tagName, tagStartPos});\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i+1] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else{\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }else{\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if ( isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n }else if (tags.length == 1) {\n return getErrorObject('InvalidTag', \"Unclosed tag '\"+tags[0].tagName+\"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n }else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\"+\n JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\\r?\\n/g, '')+\n \"' found.\", {line: 1, col: 1});\n }\n\n return true;\n};\n\nfunction isWhiteSpace(char){\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(matches[i]))\n } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\n","\nexport const defaultOptions = {\n preserveOrder: false,\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n removeNSPrefix: false, // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val) {\n return val;\n },\n attributeValueProcessor: function(attrName, val) {\n return val;\n },\n stopNodes: [], //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function(tagName, jPath, attrs){\n return tagName\n },\n // skipEmptyListItem: false\n captureMetaData: false,\n};\n \nexport const buildOptions = function(options) {\n return Object.assign({}, defaultOptions, options);\n};\n","'use strict';\n\nlet METADATA_SYMBOL;\n\nif (typeof Symbol !== \"function\") {\n METADATA_SYMBOL = \"@@xmlMetadata\";\n} else {\n METADATA_SYMBOL = Symbol(\"XML Node Metadata\");\n}\n\nexport default class XmlNode{\n constructor(tagname) {\n this.tagname = tagname;\n this.child = []; //nested tags, text, cdata, comments in order\n this[\":@\"] = {}; //attributes map\n }\n add(key,val){\n // this.child.push( {name : key, val: val, isCdata: isCdata });\n if(key === \"__proto__\") key = \"#__proto__\";\n this.child.push( {[key]: val });\n }\n addChild(node, startIndex) {\n if(node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if(node[\":@\"] && Object.keys(node[\":@\"]).length > 0){\n this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n }else{\n this.child.push( { [node.tagname]: node.child });\n }\n // if requested, add the startIndex\n if (startIndex !== undefined) {\n // Note: for now we just overwrite the metadata. If we had more complex metadata,\n // we might need to do an object append here: metadata = { ...metadata, startIndex }\n this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex };\n }\n }\n /** symbol used for metadata */\n static getMetaDataSymbol() {\n return METADATA_SYMBOL;\n }\n}\n","import {isName} from '../util.js';\n\nexport default class DocTypeReader{\n constructor(processEntities){\n this.suppressValidationErr = !processEntities;\n }\n \n readDocType(xmlData, i){\n \n const entities = {};\n if( xmlData[i + 3] === 'O' &&\n xmlData[i + 4] === 'C' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'Y' &&\n xmlData[i + 7] === 'P' &&\n xmlData[i + 8] === 'E')\n { \n i = i+9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for(;i<xmlData.length;i++){\n if (xmlData[i] === '<' && !comment) { //Determine the tag type\n if( hasBody && hasSeq(xmlData, \"!ENTITY\",i)){\n i += 7; \n let entityName, val;\n [entityName, val,i] = this.readEntityExp(xmlData,i+1,this.suppressValidationErr);\n if(val.indexOf(\"&\") === -1) //Parameter entities are not supported\n entities[ entityName ] = {\n regx : RegExp( `&${entityName};`,\"g\"),\n val: val\n };\n }\n else if( hasBody && hasSeq(xmlData, \"!ELEMENT\",i)) {\n i += 8;//Not supported\n const {index} = this.readElementExp(xmlData,i+1);\n i = index;\n }else if( hasBody && hasSeq(xmlData, \"!ATTLIST\",i)){\n i += 8;//Not supported\n // const {index} = this.readAttlistExp(xmlData,i+1);\n // i = index;\n }else if( hasBody && hasSeq(xmlData, \"!NOTATION\",i)) {\n i += 9;//Not supported\n const {index} = this.readNotationExp(xmlData,i+1,this.suppressValidationErr);\n i = index;\n }else if( hasSeq(xmlData, \"!--\",i) ) comment = true;\n else throw new Error(`Invalid DOCTYPE`);\n\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === '>') { //Read tag content\n if(comment){\n if( xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\"){\n comment = false;\n angleBracketsCount--;\n }\n }else{\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n }else if( xmlData[i] === '['){\n hasBody = true;\n }else{\n exp += xmlData[i];\n }\n }\n if(angleBracketsCount !== 0){\n throw new Error(`Unclosed DOCTYPE`);\n }\n }else{\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return {entities, i};\n }\n readEntityExp(xmlData, i) { \n //External entities are not supported\n // <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n //Parameter entities are not supported\n // <!ENTITY entityname \"&anotherElement;\">\n\n //Internal entities are supported\n // <!ENTITY entityname \"replacement text\">\n\n // Skip leading whitespace after <!ENTITY\n i = skipWhitespace(xmlData, i);\n\n // Read entity name\n let entityName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i]) && xmlData[i] !== '\"' && xmlData[i] !== \"'\") {\n entityName += xmlData[i];\n i++;\n }\n validateEntityName(entityName);\n\n // Skip whitespace after entity name\n i = skipWhitespace(xmlData, i);\n\n // Check for unsupported constructs (external entities or parameter entities)\n if(!this.suppressValidationErr){\n if (xmlData.substring(i, i + 6).toUpperCase() === \"SYSTEM\") {\n throw new Error(\"External entities are not supported\");\n }else if (xmlData[i] === \"%\") {\n throw new Error(\"Parameter entities are not supported\");\n }\n }\n\n // Read entity value (internal entity)\n let entityValue = \"\";\n [i, entityValue] = this.readIdentifierVal(xmlData, i, \"entity\");\n i--;\n return [entityName, entityValue, i ];\n }\n\n readNotationExp(xmlData, i) {\n // Skip leading whitespace after <!NOTATION\n i = skipWhitespace(xmlData, i);\n\n // Read notation name\n let notationName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n notationName += xmlData[i];\n i++;\n }\n !this.suppressValidationErr && validateEntityName(notationName);\n\n // Skip whitespace after notation name\n i = skipWhitespace(xmlData, i);\n\n // Check identifier type (SYSTEM or PUBLIC)\n const identifierType = xmlData.substring(i, i + 6).toUpperCase();\n if (!this.suppressValidationErr && identifierType !== \"SYSTEM\" && identifierType !== \"PUBLIC\") {\n throw new Error(`Expected SYSTEM or PUBLIC, found \"${identifierType}\"`);\n }\n i += identifierType.length;\n\n // Skip whitespace after identifier type\n i = skipWhitespace(xmlData, i);\n\n // Read public identifier (if PUBLIC)\n let publicIdentifier = null;\n let systemIdentifier = null;\n\n if (identifierType === \"PUBLIC\") {\n [i, publicIdentifier ] = this.readIdentifierVal(xmlData, i, \"publicIdentifier\");\n\n // Skip whitespace after public identifier\n i = skipWhitespace(xmlData, i);\n\n // Optionally read system identifier\n if (xmlData[i] === '\"' || xmlData[i] === \"'\") {\n [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i,\"systemIdentifier\");\n }\n } else if (identifierType === \"SYSTEM\") {\n // Read system identifier (mandatory for SYSTEM)\n [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i, \"systemIdentifier\");\n\n if (!this.suppressValidationErr && !systemIdentifier) {\n throw new Error(\"Missing mandatory system identifier for SYSTEM notation\");\n }\n }\n \n return {notationName, publicIdentifier, systemIdentifier, index: --i};\n }\n\n readIdentifierVal(xmlData, i, type) {\n let identifierVal = \"\";\n const startChar = xmlData[i];\n if (startChar !== '\"' && startChar !== \"'\") {\n throw new Error(`Expected quoted string, found \"${startChar}\"`);\n }\n i++;\n\n while (i < xmlData.length && xmlData[i] !== startChar) {\n identifierVal += xmlData[i];\n i++;\n }\n\n if (xmlData[i] !== startChar) {\n throw new Error(`Unterminated ${type} value`);\n }\n i++;\n return [i, identifierVal];\n }\n\n readElementExp(xmlData, i) {\n // <!ELEMENT br EMPTY>\n // <!ELEMENT div ANY>\n // <!ELEMENT title (#PCDATA)>\n // <!ELEMENT book (title, author+)>\n // <!ELEMENT name (content-model)>\n \n // Skip leading whitespace after <!ELEMENT\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let elementName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n elementName += xmlData[i];\n i++;\n }\n\n // Validate element name\n if (!this.suppressValidationErr && !isName(elementName)) {\n throw new Error(`Invalid element name: \"${elementName}\"`);\n }\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n let contentModel = \"\";\n // Expect '(' to start content model\n if(xmlData[i] === \"E\" && hasSeq(xmlData, \"MPTY\",i)) i+=4;\n else if(xmlData[i] === \"A\" && hasSeq(xmlData, \"NY\",i)) i+=2;\n else if (xmlData[i] === \"(\") {\n i++; // Move past '('\n\n // Read content model\n while (i < xmlData.length && xmlData[i] !== \")\") {\n contentModel += xmlData[i];\n i++;\n }\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated content model\");\n }\n\n }else if(!this.suppressValidationErr){\n throw new Error(`Invalid Element Expression, found \"${xmlData[i]}\"`);\n }\n \n return {\n elementName,\n contentModel: contentModel.trim(),\n index: i\n };\n }\n\n readAttlistExp(xmlData, i) {\n // Skip leading whitespace after <!ATTLIST\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let elementName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n elementName += xmlData[i];\n i++;\n }\n\n // Validate element name\n validateEntityName(elementName)\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute name\n let attributeName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n attributeName += xmlData[i];\n i++;\n }\n\n // Validate attribute name\n if (!validateEntityName(attributeName)) {\n throw new Error(`Invalid attribute name: \"${attributeName}\"`);\n }\n\n // Skip whitespace after attribute name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute type\n let attributeType = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"NOTATION\") {\n attributeType = \"NOTATION\";\n i += 8; // Move past \"NOTATION\"\n\n // Skip whitespace after \"NOTATION\"\n i = skipWhitespace(xmlData, i);\n\n // Expect '(' to start the list of notations\n if (xmlData[i] !== \"(\") {\n throw new Error(`Expected '(', found \"${xmlData[i]}\"`);\n }\n i++; // Move past '('\n\n // Read the list of allowed notations\n let allowedNotations = [];\n while (i < xmlData.length && xmlData[i] !== \")\") {\n let notation = \"\";\n while (i < xmlData.length && xmlData[i] !== \"|\" && xmlData[i] !== \")\") {\n notation += xmlData[i];\n i++;\n }\n\n // Validate notation name\n notation = notation.trim();\n if (!validateEntityName(notation)) {\n throw new Error(`Invalid notation name: \"${notation}\"`);\n }\n\n allowedNotations.push(notation);\n\n // Skip '|' separator or exit loop\n if (xmlData[i] === \"|\") {\n i++; // Move past '|'\n i = skipWhitespace(xmlData, i); // Skip optional whitespace after '|'\n }\n }\n\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated list of notations\");\n }\n i++; // Move past ')'\n\n // Store the allowed notations as part of the attribute type\n attributeType += \" (\" + allowedNotations.join(\"|\") + \")\";\n } else {\n // Handle simple types (e.g., CDATA, ID, IDREF, etc.)\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n attributeType += xmlData[i];\n i++;\n }\n\n // Validate simple attribute type\n const validTypes = [\"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"ENTITY\", \"ENTITIES\", \"NMTOKEN\", \"NMTOKENS\"];\n if (!this.suppressValidationErr && !validTypes.includes(attributeType.toUpperCase())) {\n throw new Error(`Invalid attribute type: \"${attributeType}\"`);\n }\n }\n\n // Skip whitespace after attribute type\n i = skipWhitespace(xmlData, i);\n\n // Read default value\n let defaultValue = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"#REQUIRED\") {\n defaultValue = \"#REQUIRED\";\n i += 8;\n } else if (xmlData.substring(i, i + 7).toUpperCase() === \"#IMPLIED\") {\n defaultValue = \"#IMPLIED\";\n i += 7;\n } else {\n [i, defaultValue] = this.readIdentifierVal(xmlData, i, \"ATTLIST\");\n }\n\n return {\n elementName,\n attributeName,\n attributeType,\n defaultValue,\n index: i\n }\n }\n}\n\n\n\nconst skipWhitespace = (data, index) => {\n while (index < data.length && /\\s/.test(data[index])) {\n index++;\n }\n return index;\n};\n\n\n\nfunction hasSeq(data, seq,i){\n for(let j=0;j<seq.length;j++){\n if(seq[j]!==data[i+j+1]) return false;\n }\n return true;\n}\n\nfunction validateEntityName(name){\n if (isName(name))\n\t return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\n","const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)([0-9]*(\\.[0-9]*)?)$/;\n// const octRegex = /^0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n \nconst consider = {\n hex : true,\n // oct: false,\n leadingZeros: true,\n decimalPoint: \"\\.\",\n eNotation: true,\n //skipLike: /regex/\n};\n\nexport default function toNumber(str, options = {}){\n options = Object.assign({}, consider, options );\n if(!str || typeof str !== \"string\" ) return str;\n \n let trimmedStr = str.trim();\n \n if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n else if(str===\"0\") return 0;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return parse_int(trimmedStr, 16);\n // }else if (options.oct && octRegex.test(str)) {\n // return Number.parseInt(val, 8);\n }else if (trimmedStr.includes('e') || trimmedStr.includes('E')) { //eNotation\n return resolveEnotation(str,trimmedStr,options);\n // }else if (options.parseBin && binRegex.test(str)) {\n // return Number.parseInt(val, 2);\n }else{\n //separate negative sign, leading zeros, and rest number\n const match = numRegex.exec(trimmedStr);\n // +00.123 => [ , '+', '00', '.123', ..\n if(match){\n const sign = match[1] || \"\";\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n const decimalAdjacentToLeadingZeros = sign ? // 0., -00., 000.\n str[leadingZeros.length+1] === \".\" \n : str[leadingZeros.length] === \".\";\n\n //trim ending zeros for floating number\n if(!options.leadingZeros //leading zeros are not allowed\n && (leadingZeros.length > 1 \n || (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))){\n // 00, 00.3, +03.24, 03, 03.24\n return str;\n }\n else{//no leading zeros or leading zeros are allowed\n const num = Number(trimmedStr);\n const parsedStr = String(num);\n\n if( num === 0) return num;\n if(parsedStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n if(options.eNotation) return num;\n else return str;\n }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n if(parsedStr === \"0\") return num; //0.0\n else if(parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000\n else if( parsedStr === `${sign}${numTrimmedByZeros}`) return num;\n else return str;\n }\n \n let n = leadingZeros? numTrimmedByZeros : trimmedStr;\n if(leadingZeros){\n // -009 => -9\n return (n === parsedStr) || (sign+n === parsedStr) ? num : str\n }else {\n // +9\n return (n === parsedStr) || (n === sign+parsedStr) ? num : str\n }\n }\n }else{ //non-numeric string\n return str;\n }\n }\n}\n\nconst eNotationRegx = /^([-+])?(0*)(\\d*(\\.\\d*)?[eE][-\\+]?\\d+)$/;\nfunction resolveEnotation(str,trimmedStr,options){\n if(!options.eNotation) return str;\n const notation = trimmedStr.match(eNotationRegx); \n if(notation){\n let sign = notation[1] || \"\";\n const eChar = notation[3].indexOf(\"e\") === -1 ? \"E\" : \"e\";\n const leadingZeros = notation[2];\n const eAdjacentToLeadingZeros = sign ? // 0E.\n str[leadingZeros.length+1] === eChar \n : str[leadingZeros.length] === eChar;\n\n if(leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;\n else if(leadingZeros.length === 1 \n && (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)){\n return Number(trimmedStr);\n }else if(options.leadingZeros && !eAdjacentToLeadingZeros){ //accept with leading zeros\n //remove leading 0s\n trimmedStr = (notation[1] || \"\") + notation[3];\n return Number(trimmedStr);\n }else return str;\n }else{\n return str;\n }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr){\n if(numStr && numStr.indexOf(\".\") !== -1){//float\n numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n if(numStr === \".\") numStr = \"0\";\n else if(numStr[0] === \".\") numStr = \"0\"+numStr;\n else if(numStr[numStr.length-1] === \".\") numStr = numStr.substring(0,numStr.length-1);\n return numStr;\n }\n return numStr;\n}\n\nfunction parse_int(numStr, base){\n //polyfill\n if(parseInt) return parseInt(numStr, base);\n else if(Number.parseInt) return Number.parseInt(numStr, base);\n else if(window && window.parseInt) return window.parseInt(numStr, base);\n else throw new Error(\"parseInt, Number.parseInt, window.parseInt are not supported\")\n}","export default function getIgnoreAttributesFn(ignoreAttributes) {\n if (typeof ignoreAttributes === 'function') {\n return ignoreAttributes\n }\n if (Array.isArray(ignoreAttributes)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes) {\n if (typeof pattern === 'string' && attrName === pattern) {\n return true\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true\n }\n }\n }\n }\n return () => false\n}","'use strict';\n///@ts-check\n\nimport {getAllMatches, isExist} from '../util.js';\nimport xmlNode from './xmlNode.js';\nimport DocTypeReader from './DocTypeReader.js';\nimport toNumber from \"strnum\";\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\n\n// const regx =\n// '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n// .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\nexport default class OrderedObjParser{\n constructor(options){\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\" : { regex: /&(apos|#39|#x27);/g, val : \"'\"},\n \"gt\" : { regex: /&(gt|#62|#x3E);/g, val : \">\"},\n \"lt\" : { regex: /&(lt|#60|#x3C);/g, val : \"<\"},\n \"quot\" : { regex: /&(quot|#34|#x22);/g, val : \"\\\"\"},\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : \"&\"};\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\" : { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\" : { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\" : { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\" : { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\" : { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\" : { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\" : { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val : (_, str) => String.fromCodePoint(Number.parseInt(str, 10)) },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => String.fromCodePoint(Number.parseInt(str, 16)) },\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n }\n\n}\n\nfunction addExternalEntities(externalEntities){\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\"+ent+\";\",\"g\"),\n val : externalEntities[ent]\n }\n }\n}\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string} jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val !== undefined) {\n if (this.options.trimValues && !dontTrim) {\n val = val.trim();\n }\n if(val.length > 0){\n if(!escapeEntities) val = this.replaceEntitiesValue(val);\n \n const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n if(newval === null || newval === undefined){\n //don't parse\n return val;\n }else if(typeof newval !== typeof val || newval !== val){\n //overwrite\n return newval;\n }else if(this.options.trimValues){\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n }else{\n const trimmedVal = val.trim();\n if(trimmedVal === val){\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n }else{\n return val;\n }\n }\n }\n }\n}\n\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') {\n // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n if (this.ignoreAttributesFn(attrName, jPath)) {\n continue\n }\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n if(aName === \"__proto__\") aName = \"#__proto__\";\n if (oldVal !== undefined) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if(newVal === null || newVal === undefined){\n //don't parse\n attrs[aName] = oldVal;\n }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){\n //overwrite\n attrs[aName] = newVal;\n }else{\n //parse\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs\n }\n}\n\nconst parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n const docTypeReader = new DocTypeReader(this.options.processEntities);\n for(let i=0; i< xmlData.length; i++){//for each char in XML data\n const ch = xmlData[i];\n if(ch === '<'){\n // const nextIndex = i+1;\n // const _2ndChar = xmlData[nextIndex];\n if( xmlData[i+1] === '/') {//Closing Tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n if(this.options.removeNSPrefix){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n if(this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n\n if(currentNode){\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n\n //check if last tag of nested tag was unpaired tag\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\")+1);\n if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){\n throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n }\n let propIndex = 0\n if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){\n propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1)\n this.tagsNodeStack.pop();\n }else{\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n\n currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n textData = \"\";\n i = closeIndex;\n } else if( xmlData[i+1] === '?') {\n\n let tagData = readTagExp(xmlData,i, false, \"?>\");\n if(!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if( (this.options.ignoreDeclaration && tagData.tagName === \"?xml\") || this.options.ignorePiTags){\n\n }else{\n \n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n \n if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n }\n this.addChild(currentNode, childNode, jPath, i);\n }\n\n\n i = tagData.closeIndex + 1;\n } else if(xmlData.substr(i + 1, 3) === '!--') {\n const endIndex = findClosingIndex(xmlData, \"-->\", i+4, \"Comment is not closed.\")\n if(this.options.commentPropName){\n const comment = xmlData.substring(i + 4, endIndex - 2);\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);\n }\n i = endIndex;\n } else if( xmlData.substr(i + 1, 2) === '!D') {\n const result = docTypeReader.readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n }else if(xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9,closeIndex);\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if(val == undefined) val = \"\";\n\n //cdata should be set even if it is 0 length string\n if(this.options.cdataPropName){\n currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);\n }else{\n currentNode.add(this.options.textNodeName, val);\n }\n \n i = closeIndex + 2;\n }else {//Opening tag\n let result = readTagExp(xmlData,i, this.options.removeNSPrefix);\n let tagName= result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n \n //save text as child node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n //when nested tag is found\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n\n //check if last tag was unpaired tag\n const lastTag = currentNode;\n if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if(tagName !== xmlObj.tagname){\n jPath += jPath ? \".\" + tagName : tagName;\n }\n const startIndex = i;\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n //self-closing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n }\n //unpaired tag\n else if(this.options.unpairedTags.indexOf(tagName) !== -1){\n \n i = result.closeIndex;\n }\n //normal tag\n else{\n //read until closing tag is found\n const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result.i;\n tagContent = result.tagContent;\n }\n\n const childNode = new xmlNode(tagName);\n\n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n if(tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n \n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n \n this.addChild(currentNode, childNode, jPath, startIndex);\n }else{\n //selfClosing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n \n if(this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n\n const childNode = new xmlNode(tagName);\n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath, startIndex);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n }\n //opening tag\n else{\n const childNode = new xmlNode( tagName);\n this.tagsNodeStack.push(currentNode);\n \n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath, startIndex);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n }else{\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n}\n\nfunction addChild(currentNode, childNode, jPath, startIndex){\n // unset startIndex if not requested\n if (!this.options.captureMetaData) startIndex = undefined;\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"])\n if(result === false){\n } else if(typeof result === \"string\"){\n childNode.tagname = result\n currentNode.addChild(childNode, startIndex);\n }else{\n currentNode.addChild(childNode, startIndex);\n }\n}\n\nconst replaceEntitiesValue = function(val){\n\n if(this.options.processEntities){\n for(let entityName in this.docTypeEntities){\n const entity = this.docTypeEntities[entityName];\n val = val.replace( entity.regx, entity.val);\n }\n for(let entityName in this.lastEntities){\n const entity = this.lastEntities[entityName];\n val = val.replace( entity.regex, entity.val);\n }\n if(this.options.htmlEntities){\n for(let entityName in this.htmlEntities){\n const entity = this.htmlEntities[entityName];\n val = val.replace( entity.regex, entity.val);\n }\n }\n val = val.replace( this.ampEntity.regex, this.ampEntity.val);\n }\n return val;\n}\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n if (textData) { //store previously collected data as textNode\n if(isLeafNode === undefined) isLeafNode = currentNode.child.length === 0\n \n textData = this.parseTextData(textData,\n currentNode.tagname,\n jPath,\n false,\n currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n isLeafNode);\n\n if (textData !== undefined && textData !== \"\")\n currentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\n\n//TODO: use jPath to simplify the logic\n/**\n * \n * @param {string[]} stopNodes \n * @param {string} jPath\n * @param {string} currentTagName \n */\nfunction isItStopNode(stopNodes, jPath, currentTagName){\n const allNodesExp = \"*.\" + currentTagName;\n for (const stopNodePath in stopNodes) {\n const stopNodeExp = stopNodes[stopNodePath];\n if( allNodesExp === stopNodeExp || jPath === stopNodeExp ) return true;\n }\n return false;\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\"){\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";//reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if(closingChar[1]){\n if(xmlData[index + 1] === closingChar[1]){\n return {\n data: tagExp,\n index: index\n }\n }\n }else{\n return {\n data: tagExp,\n index: index\n }\n }\n } else if (ch === '\\t') {\n ch = \" \"\n }\n tagExp += ch;\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n const closingIndex = xmlData.indexOf(str, i);\n if(closingIndex === -1){\n throw new Error(errMsg)\n }else{\n return closingIndex + str.length - 1;\n }\n}\n\nfunction readTagExp(xmlData,i, removeNSPrefix, closingChar = \">\"){\n const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);\n if(!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if(separatorIndex !== -1){//separate tag name and attributes expression\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n\n const rawTagName = tagName;\n if(removeNSPrefix){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName,\n }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n const startIndex = i;\n // Starting at 1 since we already have an open tag\n let openTagCount = 1;\n\n for (; i < xmlData.length; i++) {\n if( xmlData[i] === \"<\"){ \n if (xmlData[i+1] === \"/\") {//close tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n if(closeTagName === tagName){\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i : closeIndex\n }\n }\n }\n i=closeIndex;\n } else if(xmlData[i+1] === '?') { \n const closeIndex = findClosingIndex(xmlData, \"?>\", i+1, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 3) === '!--') { \n const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 2) === '![') { \n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i=closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, '>')\n\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n openTagCount++;\n }\n i=tagData.closeIndex;\n }\n }\n }\n }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === 'string') {\n //console.log(options)\n const newval = val.trim();\n if(newval === 'true' ) return true;\n else if(newval === 'false' ) return false;\n else return toNumber(val, options);\n } else {\n if (isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n","'use strict';\n\nimport XmlNode from './xmlNode.js';\n\nconst METADATA_SYMBOL = XmlNode.getMetaDataSymbol();\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nexport default function prettify(node, options){\n return compress( node, options);\n}\n\n/**\n * \n * @param {array} arr \n * @param {object} options \n * @param {string} jPath \n * @returns object\n */\nfunction compress(arr, options, jPath){\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n let newJpath = \"\";\n if(jPath === undefined) newJpath = property;\n else newJpath = jPath + \".\" + property;\n\n if(property === options.textNodeName){\n if(text === undefined) text = tagObj[property];\n else text += \"\" + tagObj[property];\n }else if(property === undefined){\n continue;\n }else if(tagObj[property]){\n \n let val = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val, options);\n if (tagObj[METADATA_SYMBOL] !== undefined) {\n val[METADATA_SYMBOL] = tagObj[METADATA_SYMBOL]; // copy over metadata\n }\n\n if(tagObj[\":@\"]){\n assignAttributes( val, tagObj[\":@\"], newJpath, options);\n }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){\n val = val[options.textNodeName];\n }else if(Object.keys(val).length === 0){\n if(options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n else val = \"\";\n }\n\n if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n if(!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [ compressedObj[property] ];\n }\n compressedObj[property].push(val);\n }else{\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n if (options.isArray(property, newJpath, isLeaf )) {\n compressedObj[property] = [val];\n }else{\n compressedObj[property] = val;\n }\n }\n }\n \n }\n // if(text && text.length > 0) compressedObj[options.textNodeName] = text;\n if(typeof text === \"string\"){\n if(text.length > 0) compressedObj[options.textNodeName] = text;\n }else if(text !== undefined) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\n\nfunction propName(obj){\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(key !== \":@\") return key;\n }\n}\n\nfunction assignAttributes(obj, attrMap, jpath, options){\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [ attrMap[atrrName] ];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\n\nfunction isLeafTag(obj, options){\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n \n if (propCount === 0) {\n return true;\n }\n\n if (\n propCount === 1 &&\n (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n ) {\n return true;\n }\n\n return false;\n}\n","import { buildOptions} from './OptionsBuilder.js';\nimport OrderedObjParser from './OrderedObjParser.js';\nimport prettify from './node2json.js';\nimport {validate} from \"../validator.js\";\nimport XmlNode from './xmlNode.js';\n\nexport default class XMLParser{\n \n constructor(options){\n this.externalEntities = {};\n this.options = buildOptions(options);\n \n }\n /**\n * Parse XML dats to JS object \n * @param {string|Uint8Array} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData,validationOption){\n if(typeof xmlData !== \"string\" && xmlData.toString){\n xmlData = xmlData.toString();\n }else if(typeof xmlData !== \"string\"){\n throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n }\n \n if( validationOption){\n if(validationOption === true) validationOption = {}; //validate with default options\n \n const result = validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )\n }\n }\n const orderedObjParser = new OrderedObjParser(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value){\n if(value.indexOf(\"&\") !== -1){\n throw new Error(\"Entity value can't have '&'\")\n }else if(key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1){\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\")\n }else if(value === \"&\"){\n throw new Error(\"An entity with value '&' is not permitted\");\n }else{\n this.externalEntities[key] = value;\n }\n }\n\n /**\n * Returns a Symbol that can be used to access the metadata\n * property on a node.\n * \n * If Symbol is not available in the environment, an ordinary property is used\n * and the name of the property is here returned.\n * \n * The XMLMetaData property is only present when `captureMetaData`\n * is true in the options.\n */\n static getMetaDataSymbol() {\n return XmlNode.getMetaDataSymbol();\n }\n}\n","const EOL = \"\\n\";\n\n/**\n * \n * @param {array} jArray \n * @param {any} options \n * @returns \n */\nexport default function toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if(tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n xmlStr += indentation + options.indentBy + tagValue + indentation;\n } else {\n xmlStr += tagValue;\n }\n xmlStr += `</${tagName}>`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if(!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\n","'use strict';\n//parse Empty Node as self closing node\nimport buildFromOrderedJs from './orderedJs2Xml.js';\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nexport default function Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function(jObj) {\n if(this.options.preserveOrder){\n return buildFromOrderedJs(jObj, this.options);\n }else {\n if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n jObj = {\n [this.options.arrayNodeName] : jObj\n }\n }\n return this.j2x(jObj, 0, []).val;\n }\n};\n\nBuilder.prototype.j2x = function(jObj, level, ajPath) {\n let attrStr = '';\n let val = '';\n const jPath = ajPath.join('.')\n for (let key in jObj) {\n if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key === this.options.cdataPropName) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr && !this.ignoreAttributesFn(attr, jPath)) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n } else if (!attr) {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n let listTagAttr = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if(this.options.oneListGroup){\n const result = this.j2x(item, level + 1, ajPath.concat(key));\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr\n }\n }else{\n listTagVal += this.processTextOrObjNode(item, key, level, ajPath)\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n }\n if(this.options.oneListGroup){\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level, ajPath)\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level, ajPath) {\n const result = this.j2x(object, level + 1, ajPath.concat(key));\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if(val === \"\"){\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n }else{\n\n let tagEndExp = '</' + key + this.tagEndChar;\n let piClosingChar = \"\";\n \n if(key[0] === \"?\") {\n piClosingChar = \"?\";\n tagEndExp = \"\";\n }\n \n // attrStr is an empty string in case the attribute came as undefined or null\n if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {\n return ( this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp );\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n }else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp );\n }\n }\n}\n\nBuilder.prototype.closeTag = function(key){\n let closeTag = \"\";\n if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n }else if(this.options.suppressEmptyNode){ //empty\n closeTag = \"/\";\n }else{\n closeTag = `></${key}`\n }\n return closeTag;\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n // return this.buildTagStr(level,key, attrStr);\n }\n }\n}\n\nBuilder.prototype.buildTextValNode = function(val, key, attrStr, level) {\n if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {\n return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;\n }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n }else if(key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n }else{\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n \n if( textValue === ''){\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }else{\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n '</' + key + this.tagEndChar;\n }\n }\n}\n\nBuilder.prototype.replaceEntitiesValue = function(textValue){\n if(textValue && textValue.length > 0 && this.options.processEntities){\n for (let i=0; i<this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport function createScanner(text, ignoreTrivia = false) {\n const len = text.length;\n let pos = 0, value = '', tokenOffset = 0, token = 16 /* SyntaxKind.Unknown */, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0 /* ScanError.None */;\n function scanHexDigits(count, exact) {\n let digits = 0;\n let value = 0;\n while (digits < count || !exact) {\n let ch = text.charCodeAt(pos);\n if (ch >= 48 /* CharacterCodes._0 */ && ch <= 57 /* CharacterCodes._9 */) {\n value = value * 16 + ch - 48 /* CharacterCodes._0 */;\n }\n else if (ch >= 65 /* CharacterCodes.A */ && ch <= 70 /* CharacterCodes.F */) {\n value = value * 16 + ch - 65 /* CharacterCodes.A */ + 10;\n }\n else if (ch >= 97 /* CharacterCodes.a */ && ch <= 102 /* CharacterCodes.f */) {\n value = value * 16 + ch - 97 /* CharacterCodes.a */ + 10;\n }\n else {\n break;\n }\n pos++;\n digits++;\n }\n if (digits < count) {\n value = -1;\n }\n return value;\n }\n function setPosition(newPosition) {\n pos = newPosition;\n value = '';\n tokenOffset = 0;\n token = 16 /* SyntaxKind.Unknown */;\n scanError = 0 /* ScanError.None */;\n }\n function scanNumber() {\n let start = pos;\n if (text.charCodeAt(pos) === 48 /* CharacterCodes._0 */) {\n pos++;\n }\n else {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n if (pos < text.length && text.charCodeAt(pos) === 46 /* CharacterCodes.dot */) {\n pos++;\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n else {\n scanError = 3 /* ScanError.UnexpectedEndOfNumber */;\n return text.substring(start, pos);\n }\n }\n let end = pos;\n if (pos < text.length && (text.charCodeAt(pos) === 69 /* CharacterCodes.E */ || text.charCodeAt(pos) === 101 /* CharacterCodes.e */)) {\n pos++;\n if (pos < text.length && text.charCodeAt(pos) === 43 /* CharacterCodes.plus */ || text.charCodeAt(pos) === 45 /* CharacterCodes.minus */) {\n pos++;\n }\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n end = pos;\n }\n else {\n scanError = 3 /* ScanError.UnexpectedEndOfNumber */;\n }\n }\n return text.substring(start, end);\n }\n function scanString() {\n let result = '', start = pos;\n while (true) {\n if (pos >= len) {\n result += text.substring(start, pos);\n scanError = 2 /* ScanError.UnexpectedEndOfString */;\n break;\n }\n const ch = text.charCodeAt(pos);\n if (ch === 34 /* CharacterCodes.doubleQuote */) {\n result += text.substring(start, pos);\n pos++;\n break;\n }\n if (ch === 92 /* CharacterCodes.backslash */) {\n result += text.substring(start, pos);\n pos++;\n if (pos >= len) {\n scanError = 2 /* ScanError.UnexpectedEndOfString */;\n break;\n }\n const ch2 = text.charCodeAt(pos++);\n switch (ch2) {\n case 34 /* CharacterCodes.doubleQuote */:\n result += '\\\"';\n break;\n case 92 /* CharacterCodes.backslash */:\n result += '\\\\';\n break;\n case 47 /* CharacterCodes.slash */:\n result += '/';\n break;\n case 98 /* CharacterCodes.b */:\n result += '\\b';\n break;\n case 102 /* CharacterCodes.f */:\n result += '\\f';\n break;\n case 110 /* CharacterCodes.n */:\n result += '\\n';\n break;\n case 114 /* CharacterCodes.r */:\n result += '\\r';\n break;\n case 116 /* CharacterCodes.t */:\n result += '\\t';\n break;\n case 117 /* CharacterCodes.u */:\n const ch3 = scanHexDigits(4, true);\n if (ch3 >= 0) {\n result += String.fromCharCode(ch3);\n }\n else {\n scanError = 4 /* ScanError.InvalidUnicode */;\n }\n break;\n default:\n scanError = 5 /* ScanError.InvalidEscapeCharacter */;\n }\n start = pos;\n continue;\n }\n if (ch >= 0 && ch <= 0x1f) {\n if (isLineBreak(ch)) {\n result += text.substring(start, pos);\n scanError = 2 /* ScanError.UnexpectedEndOfString */;\n break;\n }\n else {\n scanError = 6 /* ScanError.InvalidCharacter */;\n // mark as error but continue with string\n }\n }\n pos++;\n }\n return result;\n }\n function scanNext() {\n value = '';\n scanError = 0 /* ScanError.None */;\n tokenOffset = pos;\n lineStartOffset = lineNumber;\n prevTokenLineStartOffset = tokenLineStartOffset;\n if (pos >= len) {\n // at the end\n tokenOffset = len;\n return token = 17 /* SyntaxKind.EOF */;\n }\n let code = text.charCodeAt(pos);\n // trivia: whitespace\n if (isWhiteSpace(code)) {\n do {\n pos++;\n value += String.fromCharCode(code);\n code = text.charCodeAt(pos);\n } while (isWhiteSpace(code));\n return token = 15 /* SyntaxKind.Trivia */;\n }\n // trivia: newlines\n if (isLineBreak(code)) {\n pos++;\n value += String.fromCharCode(code);\n if (code === 13 /* CharacterCodes.carriageReturn */ && text.charCodeAt(pos) === 10 /* CharacterCodes.lineFeed */) {\n pos++;\n value += '\\n';\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n return token = 14 /* SyntaxKind.LineBreakTrivia */;\n }\n switch (code) {\n // tokens: []{}:,\n case 123 /* CharacterCodes.openBrace */:\n pos++;\n return token = 1 /* SyntaxKind.OpenBraceToken */;\n case 125 /* CharacterCodes.closeBrace */:\n pos++;\n return token = 2 /* SyntaxKind.CloseBraceToken */;\n case 91 /* CharacterCodes.openBracket */:\n pos++;\n return token = 3 /* SyntaxKind.OpenBracketToken */;\n case 93 /* CharacterCodes.closeBracket */:\n pos++;\n return token = 4 /* SyntaxKind.CloseBracketToken */;\n case 58 /* CharacterCodes.colon */:\n pos++;\n return token = 6 /* SyntaxKind.ColonToken */;\n case 44 /* CharacterCodes.comma */:\n pos++;\n return token = 5 /* SyntaxKind.CommaToken */;\n // strings\n case 34 /* CharacterCodes.doubleQuote */:\n pos++;\n value = scanString();\n return token = 10 /* SyntaxKind.StringLiteral */;\n // comments\n case 47 /* CharacterCodes.slash */:\n const start = pos - 1;\n // Single-line comment\n if (text.charCodeAt(pos + 1) === 47 /* CharacterCodes.slash */) {\n pos += 2;\n while (pos < len) {\n if (isLineBreak(text.charCodeAt(pos))) {\n break;\n }\n pos++;\n }\n value = text.substring(start, pos);\n return token = 12 /* SyntaxKind.LineCommentTrivia */;\n }\n // Multi-line comment\n if (text.charCodeAt(pos + 1) === 42 /* CharacterCodes.asterisk */) {\n pos += 2;\n const safeLength = len - 1; // For lookahead.\n let commentClosed = false;\n while (pos < safeLength) {\n const ch = text.charCodeAt(pos);\n if (ch === 42 /* CharacterCodes.asterisk */ && text.charCodeAt(pos + 1) === 47 /* CharacterCodes.slash */) {\n pos += 2;\n commentClosed = true;\n break;\n }\n pos++;\n if (isLineBreak(ch)) {\n if (ch === 13 /* CharacterCodes.carriageReturn */ && text.charCodeAt(pos) === 10 /* CharacterCodes.lineFeed */) {\n pos++;\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n }\n }\n if (!commentClosed) {\n pos++;\n scanError = 1 /* ScanError.UnexpectedEndOfComment */;\n }\n value = text.substring(start, pos);\n return token = 13 /* SyntaxKind.BlockCommentTrivia */;\n }\n // just a single slash\n value += String.fromCharCode(code);\n pos++;\n return token = 16 /* SyntaxKind.Unknown */;\n // numbers\n case 45 /* CharacterCodes.minus */:\n value += String.fromCharCode(code);\n pos++;\n if (pos === len || !isDigit(text.charCodeAt(pos))) {\n return token = 16 /* SyntaxKind.Unknown */;\n }\n // found a minus, followed by a number so\n // we fall through to proceed with scanning\n // numbers\n case 48 /* CharacterCodes._0 */:\n case 49 /* CharacterCodes._1 */:\n case 50 /* CharacterCodes._2 */:\n case 51 /* CharacterCodes._3 */:\n case 52 /* CharacterCodes._4 */:\n case 53 /* CharacterCodes._5 */:\n case 54 /* CharacterCodes._6 */:\n case 55 /* CharacterCodes._7 */:\n case 56 /* CharacterCodes._8 */:\n case 57 /* CharacterCodes._9 */:\n value += scanNumber();\n return token = 11 /* SyntaxKind.NumericLiteral */;\n // literals and unknown symbols\n default:\n // is a literal? Read the full word.\n while (pos < len && isUnknownContentCharacter(code)) {\n pos++;\n code = text.charCodeAt(pos);\n }\n if (tokenOffset !== pos) {\n value = text.substring(tokenOffset, pos);\n // keywords: true, false, null\n switch (value) {\n case 'true': return token = 8 /* SyntaxKind.TrueKeyword */;\n case 'false': return token = 9 /* SyntaxKind.FalseKeyword */;\n case 'null': return token = 7 /* SyntaxKind.NullKeyword */;\n }\n return token = 16 /* SyntaxKind.Unknown */;\n }\n // some\n value += String.fromCharCode(code);\n pos++;\n return token = 16 /* SyntaxKind.Unknown */;\n }\n }\n function isUnknownContentCharacter(code) {\n if (isWhiteSpace(code) || isLineBreak(code)) {\n return false;\n }\n switch (code) {\n case 125 /* CharacterCodes.closeBrace */:\n case 93 /* CharacterCodes.closeBracket */:\n case 123 /* CharacterCodes.openBrace */:\n case 91 /* CharacterCodes.openBracket */:\n case 34 /* CharacterCodes.doubleQuote */:\n case 58 /* CharacterCodes.colon */:\n case 44 /* CharacterCodes.comma */:\n case 47 /* CharacterCodes.slash */:\n return false;\n }\n return true;\n }\n function scanNextNonTrivia() {\n let result;\n do {\n result = scanNext();\n } while (result >= 12 /* SyntaxKind.LineCommentTrivia */ && result <= 15 /* SyntaxKind.Trivia */);\n return result;\n }\n return {\n setPosition: setPosition,\n getPosition: () => pos,\n scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n getToken: () => token,\n getTokenValue: () => value,\n getTokenOffset: () => tokenOffset,\n getTokenLength: () => pos - tokenOffset,\n getTokenStartLine: () => lineStartOffset,\n getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,\n getTokenError: () => scanError,\n };\n}\nfunction isWhiteSpace(ch) {\n return ch === 32 /* CharacterCodes.space */ || ch === 9 /* CharacterCodes.tab */;\n}\nfunction isLineBreak(ch) {\n return ch === 10 /* CharacterCodes.lineFeed */ || ch === 13 /* CharacterCodes.carriageReturn */;\n}\nfunction isDigit(ch) {\n return ch >= 48 /* CharacterCodes._0 */ && ch <= 57 /* CharacterCodes._9 */;\n}\nvar CharacterCodes;\n(function (CharacterCodes) {\n CharacterCodes[CharacterCodes[\"lineFeed\"] = 10] = \"lineFeed\";\n CharacterCodes[CharacterCodes[\"carriageReturn\"] = 13] = \"carriageReturn\";\n CharacterCodes[CharacterCodes[\"space\"] = 32] = \"space\";\n CharacterCodes[CharacterCodes[\"_0\"] = 48] = \"_0\";\n CharacterCodes[CharacterCodes[\"_1\"] = 49] = \"_1\";\n CharacterCodes[CharacterCodes[\"_2\"] = 50] = \"_2\";\n CharacterCodes[CharacterCodes[\"_3\"] = 51] = \"_3\";\n CharacterCodes[CharacterCodes[\"_4\"] = 52] = \"_4\";\n CharacterCodes[CharacterCodes[\"_5\"] = 53] = \"_5\";\n CharacterCodes[CharacterCodes[\"_6\"] = 54] = \"_6\";\n CharacterCodes[CharacterCodes[\"_7\"] = 55] = \"_7\";\n CharacterCodes[CharacterCodes[\"_8\"] = 56] = \"_8\";\n CharacterCodes[CharacterCodes[\"_9\"] = 57] = \"_9\";\n CharacterCodes[CharacterCodes[\"a\"] = 97] = \"a\";\n CharacterCodes[CharacterCodes[\"b\"] = 98] = \"b\";\n CharacterCodes[CharacterCodes[\"c\"] = 99] = \"c\";\n CharacterCodes[CharacterCodes[\"d\"] = 100] = \"d\";\n CharacterCodes[CharacterCodes[\"e\"] = 101] = \"e\";\n CharacterCodes[CharacterCodes[\"f\"] = 102] = \"f\";\n CharacterCodes[CharacterCodes[\"g\"] = 103] = \"g\";\n CharacterCodes[CharacterCodes[\"h\"] = 104] = \"h\";\n CharacterCodes[CharacterCodes[\"i\"] = 105] = \"i\";\n CharacterCodes[CharacterCodes[\"j\"] = 106] = \"j\";\n CharacterCodes[CharacterCodes[\"k\"] = 107] = \"k\";\n CharacterCodes[CharacterCodes[\"l\"] = 108] = \"l\";\n CharacterCodes[CharacterCodes[\"m\"] = 109] = \"m\";\n CharacterCodes[CharacterCodes[\"n\"] = 110] = \"n\";\n CharacterCodes[CharacterCodes[\"o\"] = 111] = \"o\";\n CharacterCodes[CharacterCodes[\"p\"] = 112] = \"p\";\n CharacterCodes[CharacterCodes[\"q\"] = 113] = \"q\";\n CharacterCodes[CharacterCodes[\"r\"] = 114] = \"r\";\n CharacterCodes[CharacterCodes[\"s\"] = 115] = \"s\";\n CharacterCodes[CharacterCodes[\"t\"] = 116] = \"t\";\n CharacterCodes[CharacterCodes[\"u\"] = 117] = \"u\";\n CharacterCodes[CharacterCodes[\"v\"] = 118] = \"v\";\n CharacterCodes[CharacterCodes[\"w\"] = 119] = \"w\";\n CharacterCodes[CharacterCodes[\"x\"] = 120] = \"x\";\n CharacterCodes[CharacterCodes[\"y\"] = 121] = \"y\";\n CharacterCodes[CharacterCodes[\"z\"] = 122] = \"z\";\n CharacterCodes[CharacterCodes[\"A\"] = 65] = \"A\";\n CharacterCodes[CharacterCodes[\"B\"] = 66] = \"B\";\n CharacterCodes[CharacterCodes[\"C\"] = 67] = \"C\";\n CharacterCodes[CharacterCodes[\"D\"] = 68] = \"D\";\n CharacterCodes[CharacterCodes[\"E\"] = 69] = \"E\";\n CharacterCodes[CharacterCodes[\"F\"] = 70] = \"F\";\n CharacterCodes[CharacterCodes[\"G\"] = 71] = \"G\";\n CharacterCodes[CharacterCodes[\"H\"] = 72] = \"H\";\n CharacterCodes[CharacterCodes[\"I\"] = 73] = \"I\";\n CharacterCodes[CharacterCodes[\"J\"] = 74] = \"J\";\n CharacterCodes[CharacterCodes[\"K\"] = 75] = \"K\";\n CharacterCodes[CharacterCodes[\"L\"] = 76] = \"L\";\n CharacterCodes[CharacterCodes[\"M\"] = 77] = \"M\";\n CharacterCodes[CharacterCodes[\"N\"] = 78] = \"N\";\n CharacterCodes[CharacterCodes[\"O\"] = 79] = \"O\";\n CharacterCodes[CharacterCodes[\"P\"] = 80] = \"P\";\n CharacterCodes[CharacterCodes[\"Q\"] = 81] = \"Q\";\n CharacterCodes[CharacterCodes[\"R\"] = 82] = \"R\";\n CharacterCodes[CharacterCodes[\"S\"] = 83] = \"S\";\n CharacterCodes[CharacterCodes[\"T\"] = 84] = \"T\";\n CharacterCodes[CharacterCodes[\"U\"] = 85] = \"U\";\n CharacterCodes[CharacterCodes[\"V\"] = 86] = \"V\";\n CharacterCodes[CharacterCodes[\"W\"] = 87] = \"W\";\n CharacterCodes[CharacterCodes[\"X\"] = 88] = \"X\";\n CharacterCodes[CharacterCodes[\"Y\"] = 89] = \"Y\";\n CharacterCodes[CharacterCodes[\"Z\"] = 90] = \"Z\";\n CharacterCodes[CharacterCodes[\"asterisk\"] = 42] = \"asterisk\";\n CharacterCodes[CharacterCodes[\"backslash\"] = 92] = \"backslash\";\n CharacterCodes[CharacterCodes[\"closeBrace\"] = 125] = \"closeBrace\";\n CharacterCodes[CharacterCodes[\"closeBracket\"] = 93] = \"closeBracket\";\n CharacterCodes[CharacterCodes[\"colon\"] = 58] = \"colon\";\n CharacterCodes[CharacterCodes[\"comma\"] = 44] = \"comma\";\n CharacterCodes[CharacterCodes[\"dot\"] = 46] = \"dot\";\n CharacterCodes[CharacterCodes[\"doubleQuote\"] = 34] = \"doubleQuote\";\n CharacterCodes[CharacterCodes[\"minus\"] = 45] = \"minus\";\n CharacterCodes[CharacterCodes[\"openBrace\"] = 123] = \"openBrace\";\n CharacterCodes[CharacterCodes[\"openBracket\"] = 91] = \"openBracket\";\n CharacterCodes[CharacterCodes[\"plus\"] = 43] = \"plus\";\n CharacterCodes[CharacterCodes[\"slash\"] = 47] = \"slash\";\n CharacterCodes[CharacterCodes[\"formFeed\"] = 12] = \"formFeed\";\n CharacterCodes[CharacterCodes[\"tab\"] = 9] = \"tab\";\n})(CharacterCodes || (CharacterCodes = {}));\n","export const cachedSpaces = new Array(20).fill(0).map((_, index) => {\n return ' '.repeat(index);\n});\nconst maxCachedValues = 200;\nexport const cachedBreakLinesWithSpaces = {\n ' ': {\n '\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n return '\\n' + ' '.repeat(index);\n }),\n '\\r': new Array(maxCachedValues).fill(0).map((_, index) => {\n return '\\r' + ' '.repeat(index);\n }),\n '\\r\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n return '\\r\\n' + ' '.repeat(index);\n }),\n },\n '\\t': {\n '\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n return '\\n' + '\\t'.repeat(index);\n }),\n '\\r': new Array(maxCachedValues).fill(0).map((_, index) => {\n return '\\r' + '\\t'.repeat(index);\n }),\n '\\r\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n return '\\r\\n' + '\\t'.repeat(index);\n }),\n }\n};\nexport const supportedEols = ['\\n', '\\r', '\\r\\n'];\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nimport { cachedSpaces, cachedBreakLinesWithSpaces, supportedEols } from './string-intern';\nexport function format(documentText, range, options) {\n let initialIndentLevel;\n let formatText;\n let formatTextStart;\n let rangeStart;\n let rangeEnd;\n if (range) {\n rangeStart = range.offset;\n rangeEnd = rangeStart + range.length;\n formatTextStart = rangeStart;\n while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {\n formatTextStart--;\n }\n let endOffset = rangeEnd;\n while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n endOffset++;\n }\n formatText = documentText.substring(formatTextStart, endOffset);\n initialIndentLevel = computeIndentLevel(formatText, options);\n }\n else {\n formatText = documentText;\n initialIndentLevel = 0;\n formatTextStart = 0;\n rangeStart = 0;\n rangeEnd = documentText.length;\n }\n const eol = getEOL(options, documentText);\n const eolFastPathSupported = supportedEols.includes(eol);\n let numberLineBreaks = 0;\n let indentLevel = 0;\n let indentValue;\n if (options.insertSpaces) {\n indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4);\n }\n else {\n indentValue = '\\t';\n }\n const indentType = indentValue === '\\t' ? '\\t' : ' ';\n let scanner = createScanner(formatText, false);\n let hasError = false;\n function newLinesAndIndent() {\n if (numberLineBreaks > 1) {\n return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);\n }\n const amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);\n if (!eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length) {\n return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n }\n if (amountOfSpaces <= 0) {\n return eol;\n }\n return cachedBreakLinesWithSpaces[indentType][eol][amountOfSpaces];\n }\n function scanNext() {\n let token = scanner.scan();\n numberLineBreaks = 0;\n while (token === 15 /* SyntaxKind.Trivia */ || token === 14 /* SyntaxKind.LineBreakTrivia */) {\n if (token === 14 /* SyntaxKind.LineBreakTrivia */ && options.keepLines) {\n numberLineBreaks += 1;\n }\n else if (token === 14 /* SyntaxKind.LineBreakTrivia */) {\n numberLineBreaks = 1;\n }\n token = scanner.scan();\n }\n hasError = token === 16 /* SyntaxKind.Unknown */ || scanner.getTokenError() !== 0 /* ScanError.None */;\n return token;\n }\n const editOperations = [];\n function addEdit(text, startOffset, endOffset) {\n if (!hasError && (!range || (startOffset < rangeEnd && endOffset > rangeStart)) && documentText.substring(startOffset, endOffset) !== text) {\n editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n }\n }\n let firstToken = scanNext();\n if (options.keepLines && numberLineBreaks > 0) {\n addEdit(repeat(eol, numberLineBreaks), 0, 0);\n }\n if (firstToken !== 17 /* SyntaxKind.EOF */) {\n let firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n let initialIndent = (indentValue.length * initialIndentLevel < 20) && options.insertSpaces\n ? cachedSpaces[indentValue.length * initialIndentLevel]\n : repeat(indentValue, initialIndentLevel);\n addEdit(initialIndent, formatTextStart, firstTokenStart);\n }\n while (firstToken !== 17 /* SyntaxKind.EOF */) {\n let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n let secondToken = scanNext();\n let replaceContent = '';\n let needsLineBreak = false;\n while (numberLineBreaks === 0 && (secondToken === 12 /* SyntaxKind.LineCommentTrivia */ || secondToken === 13 /* SyntaxKind.BlockCommentTrivia */)) {\n let commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(cachedSpaces[1], firstTokenEnd, commentTokenStart);\n firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n needsLineBreak = secondToken === 12 /* SyntaxKind.LineCommentTrivia */;\n replaceContent = needsLineBreak ? newLinesAndIndent() : '';\n secondToken = scanNext();\n }\n if (secondToken === 2 /* SyntaxKind.CloseBraceToken */) {\n if (firstToken !== 1 /* SyntaxKind.OpenBraceToken */) {\n indentLevel--;\n }\n ;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1 /* SyntaxKind.OpenBraceToken */) {\n replaceContent = newLinesAndIndent();\n }\n else if (options.keepLines) {\n replaceContent = cachedSpaces[1];\n }\n }\n else if (secondToken === 4 /* SyntaxKind.CloseBracketToken */) {\n if (firstToken !== 3 /* SyntaxKind.OpenBracketToken */) {\n indentLevel--;\n }\n ;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3 /* SyntaxKind.OpenBracketToken */) {\n replaceContent = newLinesAndIndent();\n }\n else if (options.keepLines) {\n replaceContent = cachedSpaces[1];\n }\n }\n else {\n switch (firstToken) {\n case 3 /* SyntaxKind.OpenBracketToken */:\n case 1 /* SyntaxKind.OpenBraceToken */:\n indentLevel++;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n replaceContent = newLinesAndIndent();\n }\n else {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 5 /* SyntaxKind.CommaToken */:\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n replaceContent = newLinesAndIndent();\n }\n else {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 12 /* SyntaxKind.LineCommentTrivia */:\n replaceContent = newLinesAndIndent();\n break;\n case 13 /* SyntaxKind.BlockCommentTrivia */:\n if (numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n }\n else if (!needsLineBreak) {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 6 /* SyntaxKind.ColonToken */:\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n }\n else if (!needsLineBreak) {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 10 /* SyntaxKind.StringLiteral */:\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n }\n else if (secondToken === 6 /* SyntaxKind.ColonToken */ && !needsLineBreak) {\n replaceContent = '';\n }\n break;\n case 7 /* SyntaxKind.NullKeyword */:\n case 8 /* SyntaxKind.TrueKeyword */:\n case 9 /* SyntaxKind.FalseKeyword */:\n case 11 /* SyntaxKind.NumericLiteral */:\n case 2 /* SyntaxKind.CloseBraceToken */:\n case 4 /* SyntaxKind.CloseBracketToken */:\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n }\n else {\n if ((secondToken === 12 /* SyntaxKind.LineCommentTrivia */ || secondToken === 13 /* SyntaxKind.BlockCommentTrivia */) && !needsLineBreak) {\n replaceContent = cachedSpaces[1];\n }\n else if (secondToken !== 5 /* SyntaxKind.CommaToken */ && secondToken !== 17 /* SyntaxKind.EOF */) {\n hasError = true;\n }\n }\n break;\n case 16 /* SyntaxKind.Unknown */:\n hasError = true;\n break;\n }\n if (numberLineBreaks > 0 && (secondToken === 12 /* SyntaxKind.LineCommentTrivia */ || secondToken === 13 /* SyntaxKind.BlockCommentTrivia */)) {\n replaceContent = newLinesAndIndent();\n }\n }\n if (secondToken === 17 /* SyntaxKind.EOF */) {\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n }\n else {\n replaceContent = options.insertFinalNewline ? eol : '';\n }\n }\n const secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n firstToken = secondToken;\n }\n return editOperations;\n}\nfunction repeat(s, count) {\n let result = '';\n for (let i = 0; i < count; i++) {\n result += s;\n }\n return result;\n}\nfunction computeIndentLevel(content, options) {\n let i = 0;\n let nChars = 0;\n const tabSize = options.tabSize || 4;\n while (i < content.length) {\n let ch = content.charAt(i);\n if (ch === cachedSpaces[1]) {\n nChars++;\n }\n else if (ch === '\\t') {\n nChars += tabSize;\n }\n else {\n break;\n }\n i++;\n }\n return Math.floor(nChars / tabSize);\n}\nfunction getEOL(options, text) {\n for (let i = 0; i < text.length; i++) {\n const ch = text.charAt(i);\n if (ch === '\\r') {\n if (i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n return '\\r\\n';\n }\n return '\\r';\n }\n else if (ch === '\\n') {\n return '\\n';\n }\n }\n return (options && options.eol) || '\\n';\n}\nexport function isEOL(text, offset) {\n return '\\r\\n'.indexOf(text.charAt(offset)) !== -1;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nvar ParseOptions;\n(function (ParseOptions) {\n ParseOptions.DEFAULT = {\n allowTrailingComma: false\n };\n})(ParseOptions || (ParseOptions = {}));\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport function getLocation(text, position) {\n const segments = []; // strings or numbers\n const earlyReturnException = new Object();\n let previousNode = undefined;\n const previousNodeInst = {\n value: {},\n offset: 0,\n length: 0,\n type: 'object',\n parent: undefined\n };\n let isAtPropertyKey = false;\n function setPreviousNode(value, offset, length, type) {\n previousNodeInst.value = value;\n previousNodeInst.offset = offset;\n previousNodeInst.length = length;\n previousNodeInst.type = type;\n previousNodeInst.colonOffset = undefined;\n previousNode = previousNodeInst;\n }\n try {\n visit(text, {\n onObjectBegin: (offset, length) => {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n isAtPropertyKey = position > offset;\n segments.push(''); // push a placeholder (will be replaced)\n },\n onObjectProperty: (name, offset, length) => {\n if (position < offset) {\n throw earlyReturnException;\n }\n setPreviousNode(name, offset, length, 'property');\n segments[segments.length - 1] = name;\n if (position <= offset + length) {\n throw earlyReturnException;\n }\n },\n onObjectEnd: (offset, length) => {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.pop();\n },\n onArrayBegin: (offset, length) => {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.push(0);\n },\n onArrayEnd: (offset, length) => {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.pop();\n },\n onLiteralValue: (value, offset, length) => {\n if (position < offset) {\n throw earlyReturnException;\n }\n setPreviousNode(value, offset, length, getNodeType(value));\n if (position <= offset + length) {\n throw earlyReturnException;\n }\n },\n onSeparator: (sep, offset, length) => {\n if (position <= offset) {\n throw earlyReturnException;\n }\n if (sep === ':' && previousNode && previousNode.type === 'property') {\n previousNode.colonOffset = offset;\n isAtPropertyKey = false;\n previousNode = undefined;\n }\n else if (sep === ',') {\n const last = segments[segments.length - 1];\n if (typeof last === 'number') {\n segments[segments.length - 1] = last + 1;\n }\n else {\n isAtPropertyKey = true;\n segments[segments.length - 1] = '';\n }\n previousNode = undefined;\n }\n }\n });\n }\n catch (e) {\n if (e !== earlyReturnException) {\n throw e;\n }\n }\n return {\n path: segments,\n previousNode,\n isAtPropertyKey,\n matches: (pattern) => {\n let k = 0;\n for (let i = 0; k < pattern.length && i < segments.length; i++) {\n if (pattern[k] === segments[i] || pattern[k] === '*') {\n k++;\n }\n else if (pattern[k] !== '**') {\n return false;\n }\n }\n return k === pattern.length;\n }\n };\n}\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport function parse(text, errors = [], options = ParseOptions.DEFAULT) {\n let currentProperty = null;\n let currentParent = [];\n const previousParents = [];\n function onValue(value) {\n if (Array.isArray(currentParent)) {\n currentParent.push(value);\n }\n else if (currentProperty !== null) {\n currentParent[currentProperty] = value;\n }\n }\n const visitor = {\n onObjectBegin: () => {\n const object = {};\n onValue(object);\n previousParents.push(currentParent);\n currentParent = object;\n currentProperty = null;\n },\n onObjectProperty: (name) => {\n currentProperty = name;\n },\n onObjectEnd: () => {\n currentParent = previousParents.pop();\n },\n onArrayBegin: () => {\n const array = [];\n onValue(array);\n previousParents.push(currentParent);\n currentParent = array;\n currentProperty = null;\n },\n onArrayEnd: () => {\n currentParent = previousParents.pop();\n },\n onLiteralValue: onValue,\n onError: (error, offset, length) => {\n errors.push({ error, offset, length });\n }\n };\n visit(text, visitor, options);\n return currentParent[0];\n}\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {\n let currentParent = { type: 'array', offset: -1, length: -1, children: [], parent: undefined }; // artificial root\n function ensurePropertyComplete(endOffset) {\n if (currentParent.type === 'property') {\n currentParent.length = endOffset - currentParent.offset;\n currentParent = currentParent.parent;\n }\n }\n function onValue(valueNode) {\n currentParent.children.push(valueNode);\n return valueNode;\n }\n const visitor = {\n onObjectBegin: (offset) => {\n currentParent = onValue({ type: 'object', offset, length: -1, parent: currentParent, children: [] });\n },\n onObjectProperty: (name, offset, length) => {\n currentParent = onValue({ type: 'property', offset, length: -1, parent: currentParent, children: [] });\n currentParent.children.push({ type: 'string', value: name, offset, length, parent: currentParent });\n },\n onObjectEnd: (offset, length) => {\n ensurePropertyComplete(offset + length); // in case of a missing value for a property: make sure property is complete\n currentParent.length = offset + length - currentParent.offset;\n currentParent = currentParent.parent;\n ensurePropertyComplete(offset + length);\n },\n onArrayBegin: (offset, length) => {\n currentParent = onValue({ type: 'array', offset, length: -1, parent: currentParent, children: [] });\n },\n onArrayEnd: (offset, length) => {\n currentParent.length = offset + length - currentParent.offset;\n currentParent = currentParent.parent;\n ensurePropertyComplete(offset + length);\n },\n onLiteralValue: (value, offset, length) => {\n onValue({ type: getNodeType(value), offset, length, parent: currentParent, value });\n ensurePropertyComplete(offset + length);\n },\n onSeparator: (sep, offset, length) => {\n if (currentParent.type === 'property') {\n if (sep === ':') {\n currentParent.colonOffset = offset;\n }\n else if (sep === ',') {\n ensurePropertyComplete(offset);\n }\n }\n },\n onError: (error, offset, length) => {\n errors.push({ error, offset, length });\n }\n };\n visit(text, visitor, options);\n const result = currentParent.children[0];\n if (result) {\n delete result.parent;\n }\n return result;\n}\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport function findNodeAtLocation(root, path) {\n if (!root) {\n return undefined;\n }\n let node = root;\n for (let segment of path) {\n if (typeof segment === 'string') {\n if (node.type !== 'object' || !Array.isArray(node.children)) {\n return undefined;\n }\n let found = false;\n for (const propertyNode of node.children) {\n if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment && propertyNode.children.length === 2) {\n node = propertyNode.children[1];\n found = true;\n break;\n }\n }\n if (!found) {\n return undefined;\n }\n }\n else {\n const index = segment;\n if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {\n return undefined;\n }\n node = node.children[index];\n }\n }\n return node;\n}\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport function getNodePath(node) {\n if (!node.parent || !node.parent.children) {\n return [];\n }\n const path = getNodePath(node.parent);\n if (node.parent.type === 'property') {\n const key = node.parent.children[0].value;\n path.push(key);\n }\n else if (node.parent.type === 'array') {\n const index = node.parent.children.indexOf(node);\n if (index !== -1) {\n path.push(index);\n }\n }\n return path;\n}\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport function getNodeValue(node) {\n switch (node.type) {\n case 'array':\n return node.children.map(getNodeValue);\n case 'object':\n const obj = Object.create(null);\n for (let prop of node.children) {\n const valueNode = prop.children[1];\n if (valueNode) {\n obj[prop.children[0].value] = getNodeValue(valueNode);\n }\n }\n return obj;\n case 'null':\n case 'string':\n case 'number':\n case 'boolean':\n return node.value;\n default:\n return undefined;\n }\n}\nexport function contains(node, offset, includeRightBound = false) {\n return (offset >= node.offset && offset < (node.offset + node.length)) || includeRightBound && (offset === (node.offset + node.length));\n}\n/**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport function findNodeAtOffset(node, offset, includeRightBound = false) {\n if (contains(node, offset, includeRightBound)) {\n const children = node.children;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length && children[i].offset <= offset; i++) {\n const item = findNodeAtOffset(children[i], offset, includeRightBound);\n if (item) {\n return item;\n }\n }\n }\n return node;\n }\n return undefined;\n}\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport function visit(text, visitor, options = ParseOptions.DEFAULT) {\n const _scanner = createScanner(text, false);\n // Important: Only pass copies of this to visitor functions to prevent accidental modification, and\n // to not affect visitor functions which stored a reference to a previous JSONPath\n const _jsonPath = [];\n // Depth of onXXXBegin() callbacks suppressed. onXXXEnd() decrements this if it isn't 0 already.\n // Callbacks are only called when this value is 0.\n let suppressedCallbacks = 0;\n function toNoArgVisit(visitFunction) {\n return visitFunction ? () => suppressedCallbacks === 0 && visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n }\n function toOneArgVisit(visitFunction) {\n return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n }\n function toOneArgVisitWithPath(visitFunction) {\n return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n }\n function toBeginVisit(visitFunction) {\n return visitFunction ?\n () => {\n if (suppressedCallbacks > 0) {\n suppressedCallbacks++;\n }\n else {\n let cbReturn = visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice());\n if (cbReturn === false) {\n suppressedCallbacks = 1;\n }\n }\n }\n : () => true;\n }\n function toEndVisit(visitFunction) {\n return visitFunction ?\n () => {\n if (suppressedCallbacks > 0) {\n suppressedCallbacks--;\n }\n if (suppressedCallbacks === 0) {\n visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter());\n }\n }\n : () => true;\n }\n const onObjectBegin = toBeginVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toEndVisit(visitor.onObjectEnd), onArrayBegin = toBeginVisit(visitor.onArrayBegin), onArrayEnd = toEndVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n const disallowComments = options && options.disallowComments;\n const allowTrailingComma = options && options.allowTrailingComma;\n function scanNext() {\n while (true) {\n const token = _scanner.scan();\n switch (_scanner.getTokenError()) {\n case 4 /* ScanError.InvalidUnicode */:\n handleError(14 /* ParseErrorCode.InvalidUnicode */);\n break;\n case 5 /* ScanError.InvalidEscapeCharacter */:\n handleError(15 /* ParseErrorCode.InvalidEscapeCharacter */);\n break;\n case 3 /* ScanError.UnexpectedEndOfNumber */:\n handleError(13 /* ParseErrorCode.UnexpectedEndOfNumber */);\n break;\n case 1 /* ScanError.UnexpectedEndOfComment */:\n if (!disallowComments) {\n handleError(11 /* ParseErrorCode.UnexpectedEndOfComment */);\n }\n break;\n case 2 /* ScanError.UnexpectedEndOfString */:\n handleError(12 /* ParseErrorCode.UnexpectedEndOfString */);\n break;\n case 6 /* ScanError.InvalidCharacter */:\n handleError(16 /* ParseErrorCode.InvalidCharacter */);\n break;\n }\n switch (token) {\n case 12 /* SyntaxKind.LineCommentTrivia */:\n case 13 /* SyntaxKind.BlockCommentTrivia */:\n if (disallowComments) {\n handleError(10 /* ParseErrorCode.InvalidCommentToken */);\n }\n else {\n onComment();\n }\n break;\n case 16 /* SyntaxKind.Unknown */:\n handleError(1 /* ParseErrorCode.InvalidSymbol */);\n break;\n case 15 /* SyntaxKind.Trivia */:\n case 14 /* SyntaxKind.LineBreakTrivia */:\n break;\n default:\n return token;\n }\n }\n }\n function handleError(error, skipUntilAfter = [], skipUntil = []) {\n onError(error);\n if (skipUntilAfter.length + skipUntil.length > 0) {\n let token = _scanner.getToken();\n while (token !== 17 /* SyntaxKind.EOF */) {\n if (skipUntilAfter.indexOf(token) !== -1) {\n scanNext();\n break;\n }\n else if (skipUntil.indexOf(token) !== -1) {\n break;\n }\n token = scanNext();\n }\n }\n }\n function parseString(isValue) {\n const value = _scanner.getTokenValue();\n if (isValue) {\n onLiteralValue(value);\n }\n else {\n onObjectProperty(value);\n // add property name afterwards\n _jsonPath.push(value);\n }\n scanNext();\n return true;\n }\n function parseLiteral() {\n switch (_scanner.getToken()) {\n case 11 /* SyntaxKind.NumericLiteral */:\n const tokenValue = _scanner.getTokenValue();\n let value = Number(tokenValue);\n if (isNaN(value)) {\n handleError(2 /* ParseErrorCode.InvalidNumberFormat */);\n value = 0;\n }\n onLiteralValue(value);\n break;\n case 7 /* SyntaxKind.NullKeyword */:\n onLiteralValue(null);\n break;\n case 8 /* SyntaxKind.TrueKeyword */:\n onLiteralValue(true);\n break;\n case 9 /* SyntaxKind.FalseKeyword */:\n onLiteralValue(false);\n break;\n default:\n return false;\n }\n scanNext();\n return true;\n }\n function parseProperty() {\n if (_scanner.getToken() !== 10 /* SyntaxKind.StringLiteral */) {\n handleError(3 /* ParseErrorCode.PropertyNameExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n return false;\n }\n parseString(false);\n if (_scanner.getToken() === 6 /* SyntaxKind.ColonToken */) {\n onSeparator(':');\n scanNext(); // consume colon\n if (!parseValue()) {\n handleError(4 /* ParseErrorCode.ValueExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n }\n }\n else {\n handleError(5 /* ParseErrorCode.ColonExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n }\n _jsonPath.pop(); // remove processed property name\n return true;\n }\n function parseObject() {\n onObjectBegin();\n scanNext(); // consume open brace\n let needsComma = false;\n while (_scanner.getToken() !== 2 /* SyntaxKind.CloseBraceToken */ && _scanner.getToken() !== 17 /* SyntaxKind.EOF */) {\n if (_scanner.getToken() === 5 /* SyntaxKind.CommaToken */) {\n if (!needsComma) {\n handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n }\n onSeparator(',');\n scanNext(); // consume comma\n if (_scanner.getToken() === 2 /* SyntaxKind.CloseBraceToken */ && allowTrailingComma) {\n break;\n }\n }\n else if (needsComma) {\n handleError(6 /* ParseErrorCode.CommaExpected */, [], []);\n }\n if (!parseProperty()) {\n handleError(4 /* ParseErrorCode.ValueExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n }\n needsComma = true;\n }\n onObjectEnd();\n if (_scanner.getToken() !== 2 /* SyntaxKind.CloseBraceToken */) {\n handleError(7 /* ParseErrorCode.CloseBraceExpected */, [2 /* SyntaxKind.CloseBraceToken */], []);\n }\n else {\n scanNext(); // consume close brace\n }\n return true;\n }\n function parseArray() {\n onArrayBegin();\n scanNext(); // consume open bracket\n let isFirstElement = true;\n let needsComma = false;\n while (_scanner.getToken() !== 4 /* SyntaxKind.CloseBracketToken */ && _scanner.getToken() !== 17 /* SyntaxKind.EOF */) {\n if (_scanner.getToken() === 5 /* SyntaxKind.CommaToken */) {\n if (!needsComma) {\n handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n }\n onSeparator(',');\n scanNext(); // consume comma\n if (_scanner.getToken() === 4 /* SyntaxKind.CloseBracketToken */ && allowTrailingComma) {\n break;\n }\n }\n else if (needsComma) {\n handleError(6 /* ParseErrorCode.CommaExpected */, [], []);\n }\n if (isFirstElement) {\n _jsonPath.push(0);\n isFirstElement = false;\n }\n else {\n _jsonPath[_jsonPath.length - 1]++;\n }\n if (!parseValue()) {\n handleError(4 /* ParseErrorCode.ValueExpected */, [], [4 /* SyntaxKind.CloseBracketToken */, 5 /* SyntaxKind.CommaToken */]);\n }\n needsComma = true;\n }\n onArrayEnd();\n if (!isFirstElement) {\n _jsonPath.pop(); // remove array index\n }\n if (_scanner.getToken() !== 4 /* SyntaxKind.CloseBracketToken */) {\n handleError(8 /* ParseErrorCode.CloseBracketExpected */, [4 /* SyntaxKind.CloseBracketToken */], []);\n }\n else {\n scanNext(); // consume close bracket\n }\n return true;\n }\n function parseValue() {\n switch (_scanner.getToken()) {\n case 3 /* SyntaxKind.OpenBracketToken */:\n return parseArray();\n case 1 /* SyntaxKind.OpenBraceToken */:\n return parseObject();\n case 10 /* SyntaxKind.StringLiteral */:\n return parseString(true);\n default:\n return parseLiteral();\n }\n }\n scanNext();\n if (_scanner.getToken() === 17 /* SyntaxKind.EOF */) {\n if (options.allowEmptyContent) {\n return true;\n }\n handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n return false;\n }\n if (!parseValue()) {\n handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n return false;\n }\n if (_scanner.getToken() !== 17 /* SyntaxKind.EOF */) {\n handleError(9 /* ParseErrorCode.EndOfFileExpected */, [], []);\n }\n return true;\n}\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport function stripComments(text, replaceCh) {\n let _scanner = createScanner(text), parts = [], kind, offset = 0, pos;\n do {\n pos = _scanner.getPosition();\n kind = _scanner.scan();\n switch (kind) {\n case 12 /* SyntaxKind.LineCommentTrivia */:\n case 13 /* SyntaxKind.BlockCommentTrivia */:\n case 17 /* SyntaxKind.EOF */:\n if (offset !== pos) {\n parts.push(text.substring(offset, pos));\n }\n if (replaceCh !== undefined) {\n parts.push(_scanner.getTokenValue().replace(/[^\\r\\n]/g, replaceCh));\n }\n offset = _scanner.getPosition();\n break;\n }\n } while (kind !== 17 /* SyntaxKind.EOF */);\n return parts.join('');\n}\nexport function getNodeType(value) {\n switch (typeof value) {\n case 'boolean': return 'boolean';\n case 'number': return 'number';\n case 'string': return 'string';\n case 'object': {\n if (!value) {\n return 'null';\n }\n else if (Array.isArray(value)) {\n return 'array';\n }\n return 'object';\n }\n default: return 'null';\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { format, isEOL } from './format';\nimport { parseTree, findNodeAtLocation } from './parser';\nexport function removeProperty(text, path, options) {\n return setProperty(text, path, void 0, options);\n}\nexport function setProperty(text, originalPath, value, options) {\n const path = originalPath.slice();\n const errors = [];\n const root = parseTree(text, errors);\n let parent = void 0;\n let lastSegment = void 0;\n while (path.length > 0) {\n lastSegment = path.pop();\n parent = findNodeAtLocation(root, path);\n if (parent === void 0 && value !== void 0) {\n if (typeof lastSegment === 'string') {\n value = { [lastSegment]: value };\n }\n else {\n value = [value];\n }\n }\n else {\n break;\n }\n }\n if (!parent) {\n // empty document\n if (value === void 0) { // delete\n throw new Error('Can not delete in empty document');\n }\n return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, options);\n }\n else if (parent.type === 'object' && typeof lastSegment === 'string' && Array.isArray(parent.children)) {\n const existing = findNodeAtLocation(parent, [lastSegment]);\n if (existing !== void 0) {\n if (value === void 0) { // delete\n if (!existing.parent) {\n throw new Error('Malformed AST');\n }\n const propertyIndex = parent.children.indexOf(existing.parent);\n let removeBegin;\n let removeEnd = existing.parent.offset + existing.parent.length;\n if (propertyIndex > 0) {\n // remove the comma of the previous node\n let previous = parent.children[propertyIndex - 1];\n removeBegin = previous.offset + previous.length;\n }\n else {\n removeBegin = parent.offset + 1;\n if (parent.children.length > 1) {\n // remove the comma of the next node\n let next = parent.children[1];\n removeEnd = next.offset;\n }\n }\n return withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: '' }, options);\n }\n else {\n // set value of existing property\n return withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, options);\n }\n }\n else {\n if (value === void 0) { // delete\n return []; // property does not exist, nothing to do\n }\n const newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;\n const index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map(p => p.children[0].value)) : parent.children.length;\n let edit;\n if (index > 0) {\n let previous = parent.children[index - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n else if (parent.children.length === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n }\n else {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty + ',' };\n }\n return withFormatting(text, edit, options);\n }\n }\n else if (parent.type === 'array' && typeof lastSegment === 'number' && Array.isArray(parent.children)) {\n const insertIndex = lastSegment;\n if (insertIndex === -1) {\n // Insert\n const newProperty = `${JSON.stringify(value)}`;\n let edit;\n if (parent.children.length === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n }\n else {\n const previous = parent.children[parent.children.length - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n return withFormatting(text, edit, options);\n }\n else if (value === void 0 && parent.children.length >= 0) {\n // Removal\n const removalIndex = lastSegment;\n const toRemove = parent.children[removalIndex];\n let edit;\n if (parent.children.length === 1) {\n // only item\n edit = { offset: parent.offset + 1, length: parent.length - 2, content: '' };\n }\n else if (parent.children.length - 1 === removalIndex) {\n // last item\n let previous = parent.children[removalIndex - 1];\n let offset = previous.offset + previous.length;\n let parentEndOffset = parent.offset + parent.length;\n edit = { offset, length: parentEndOffset - 2 - offset, content: '' };\n }\n else {\n edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: '' };\n }\n return withFormatting(text, edit, options);\n }\n else if (value !== void 0) {\n let edit;\n const newProperty = `${JSON.stringify(value)}`;\n if (!options.isArrayInsertion && parent.children.length > lastSegment) {\n const toModify = parent.children[lastSegment];\n edit = { offset: toModify.offset, length: toModify.length, content: newProperty };\n }\n else if (parent.children.length === 0 || lastSegment === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: parent.children.length === 0 ? newProperty : newProperty + ',' };\n }\n else {\n const index = lastSegment > parent.children.length ? parent.children.length : lastSegment;\n const previous = parent.children[index - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n return withFormatting(text, edit, options);\n }\n else {\n throw new Error(`Can not ${value === void 0 ? 'remove' : (options.isArrayInsertion ? 'insert' : 'modify')} Array index ${insertIndex} as length is not sufficient`);\n }\n }\n else {\n throw new Error(`Can not add ${typeof lastSegment !== 'number' ? 'index' : 'property'} to parent of type ${parent.type}`);\n }\n}\nfunction withFormatting(text, edit, options) {\n if (!options.formattingOptions) {\n return [edit];\n }\n // apply the edit\n let newText = applyEdit(text, edit);\n // format the new text\n let begin = edit.offset;\n let end = edit.offset + edit.content.length;\n if (edit.length === 0 || edit.content.length === 0) { // insert or remove\n while (begin > 0 && !isEOL(newText, begin - 1)) {\n begin--;\n }\n while (end < newText.length && !isEOL(newText, end)) {\n end++;\n }\n }\n const edits = format(newText, { offset: begin, length: end - begin }, { ...options.formattingOptions, keepLines: false });\n // apply the formatting edits and track the begin and end offsets of the changes\n for (let i = edits.length - 1; i >= 0; i--) {\n const edit = edits[i];\n newText = applyEdit(newText, edit);\n begin = Math.min(begin, edit.offset);\n end = Math.max(end, edit.offset + edit.length);\n end += edit.content.length - edit.length;\n }\n // create a single edit with all changes\n const editLength = text.length - (newText.length - end) - begin;\n return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];\n}\nexport function applyEdit(text, edit) {\n return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);\n}\nexport function isWS(text, offset) {\n return '\\r\\n \\t'.indexOf(text.charAt(offset)) !== -1;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport * as formatter from './impl/format';\nimport * as edit from './impl/edit';\nimport * as scanner from './impl/scanner';\nimport * as parser from './impl/parser';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport const createScanner = scanner.createScanner;\nexport var ScanError;\n(function (ScanError) {\n ScanError[ScanError[\"None\"] = 0] = \"None\";\n ScanError[ScanError[\"UnexpectedEndOfComment\"] = 1] = \"UnexpectedEndOfComment\";\n ScanError[ScanError[\"UnexpectedEndOfString\"] = 2] = \"UnexpectedEndOfString\";\n ScanError[ScanError[\"UnexpectedEndOfNumber\"] = 3] = \"UnexpectedEndOfNumber\";\n ScanError[ScanError[\"InvalidUnicode\"] = 4] = \"InvalidUnicode\";\n ScanError[ScanError[\"InvalidEscapeCharacter\"] = 5] = \"InvalidEscapeCharacter\";\n ScanError[ScanError[\"InvalidCharacter\"] = 6] = \"InvalidCharacter\";\n})(ScanError || (ScanError = {}));\nexport var SyntaxKind;\n(function (SyntaxKind) {\n SyntaxKind[SyntaxKind[\"OpenBraceToken\"] = 1] = \"OpenBraceToken\";\n SyntaxKind[SyntaxKind[\"CloseBraceToken\"] = 2] = \"CloseBraceToken\";\n SyntaxKind[SyntaxKind[\"OpenBracketToken\"] = 3] = \"OpenBracketToken\";\n SyntaxKind[SyntaxKind[\"CloseBracketToken\"] = 4] = \"CloseBracketToken\";\n SyntaxKind[SyntaxKind[\"CommaToken\"] = 5] = \"CommaToken\";\n SyntaxKind[SyntaxKind[\"ColonToken\"] = 6] = \"ColonToken\";\n SyntaxKind[SyntaxKind[\"NullKeyword\"] = 7] = \"NullKeyword\";\n SyntaxKind[SyntaxKind[\"TrueKeyword\"] = 8] = \"TrueKeyword\";\n SyntaxKind[SyntaxKind[\"FalseKeyword\"] = 9] = \"FalseKeyword\";\n SyntaxKind[SyntaxKind[\"StringLiteral\"] = 10] = \"StringLiteral\";\n SyntaxKind[SyntaxKind[\"NumericLiteral\"] = 11] = \"NumericLiteral\";\n SyntaxKind[SyntaxKind[\"LineCommentTrivia\"] = 12] = \"LineCommentTrivia\";\n SyntaxKind[SyntaxKind[\"BlockCommentTrivia\"] = 13] = \"BlockCommentTrivia\";\n SyntaxKind[SyntaxKind[\"LineBreakTrivia\"] = 14] = \"LineBreakTrivia\";\n SyntaxKind[SyntaxKind[\"Trivia\"] = 15] = \"Trivia\";\n SyntaxKind[SyntaxKind[\"Unknown\"] = 16] = \"Unknown\";\n SyntaxKind[SyntaxKind[\"EOF\"] = 17] = \"EOF\";\n})(SyntaxKind || (SyntaxKind = {}));\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport const getLocation = parser.getLocation;\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore, always check the errors list to find out if the input was valid.\n */\nexport const parse = parser.parse;\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport const parseTree = parser.parseTree;\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport const findNodeAtLocation = parser.findNodeAtLocation;\n/**\n * Finds the innermost node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport const findNodeAtOffset = parser.findNodeAtOffset;\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport const getNodePath = parser.getNodePath;\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport const getNodeValue = parser.getNodeValue;\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport const visit = parser.visit;\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport const stripComments = parser.stripComments;\nexport var ParseErrorCode;\n(function (ParseErrorCode) {\n ParseErrorCode[ParseErrorCode[\"InvalidSymbol\"] = 1] = \"InvalidSymbol\";\n ParseErrorCode[ParseErrorCode[\"InvalidNumberFormat\"] = 2] = \"InvalidNumberFormat\";\n ParseErrorCode[ParseErrorCode[\"PropertyNameExpected\"] = 3] = \"PropertyNameExpected\";\n ParseErrorCode[ParseErrorCode[\"ValueExpected\"] = 4] = \"ValueExpected\";\n ParseErrorCode[ParseErrorCode[\"ColonExpected\"] = 5] = \"ColonExpected\";\n ParseErrorCode[ParseErrorCode[\"CommaExpected\"] = 6] = \"CommaExpected\";\n ParseErrorCode[ParseErrorCode[\"CloseBraceExpected\"] = 7] = \"CloseBraceExpected\";\n ParseErrorCode[ParseErrorCode[\"CloseBracketExpected\"] = 8] = \"CloseBracketExpected\";\n ParseErrorCode[ParseErrorCode[\"EndOfFileExpected\"] = 9] = \"EndOfFileExpected\";\n ParseErrorCode[ParseErrorCode[\"InvalidCommentToken\"] = 10] = \"InvalidCommentToken\";\n ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfComment\"] = 11] = \"UnexpectedEndOfComment\";\n ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfString\"] = 12] = \"UnexpectedEndOfString\";\n ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfNumber\"] = 13] = \"UnexpectedEndOfNumber\";\n ParseErrorCode[ParseErrorCode[\"InvalidUnicode\"] = 14] = \"InvalidUnicode\";\n ParseErrorCode[ParseErrorCode[\"InvalidEscapeCharacter\"] = 15] = \"InvalidEscapeCharacter\";\n ParseErrorCode[ParseErrorCode[\"InvalidCharacter\"] = 16] = \"InvalidCharacter\";\n})(ParseErrorCode || (ParseErrorCode = {}));\nexport function printParseErrorCode(code) {\n switch (code) {\n case 1 /* ParseErrorCode.InvalidSymbol */: return 'InvalidSymbol';\n case 2 /* ParseErrorCode.InvalidNumberFormat */: return 'InvalidNumberFormat';\n case 3 /* ParseErrorCode.PropertyNameExpected */: return 'PropertyNameExpected';\n case 4 /* ParseErrorCode.ValueExpected */: return 'ValueExpected';\n case 5 /* ParseErrorCode.ColonExpected */: return 'ColonExpected';\n case 6 /* ParseErrorCode.CommaExpected */: return 'CommaExpected';\n case 7 /* ParseErrorCode.CloseBraceExpected */: return 'CloseBraceExpected';\n case 8 /* ParseErrorCode.CloseBracketExpected */: return 'CloseBracketExpected';\n case 9 /* ParseErrorCode.EndOfFileExpected */: return 'EndOfFileExpected';\n case 10 /* ParseErrorCode.InvalidCommentToken */: return 'InvalidCommentToken';\n case 11 /* ParseErrorCode.UnexpectedEndOfComment */: return 'UnexpectedEndOfComment';\n case 12 /* ParseErrorCode.UnexpectedEndOfString */: return 'UnexpectedEndOfString';\n case 13 /* ParseErrorCode.UnexpectedEndOfNumber */: return 'UnexpectedEndOfNumber';\n case 14 /* ParseErrorCode.InvalidUnicode */: return 'InvalidUnicode';\n case 15 /* ParseErrorCode.InvalidEscapeCharacter */: return 'InvalidEscapeCharacter';\n case 16 /* ParseErrorCode.InvalidCharacter */: return 'InvalidCharacter';\n }\n return '<unknown ParseErrorCode>';\n}\n/**\n * Computes the edit operations needed to format a JSON document.\n *\n * @param documentText The input text\n * @param range The range to format or `undefined` to format the full content\n * @param options The formatting options\n * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}.\n * To apply the edit operations to the input, use {@linkcode applyEdits}.\n */\nexport function format(documentText, range, options) {\n return formatter.format(documentText, range, options);\n}\n/**\n * Computes the edit operations needed to modify a value in the JSON document.\n *\n * @param documentText The input text\n * @param path The path of the value to change. The path represents either to the document root, a property or an array item.\n * If the path points to an non-existing property or item, it will be created.\n * @param value The new value for the specified property or item. If the value is undefined,\n * the property or item will be removed.\n * @param options Options\n * @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}.\n * To apply the edit operations to the input, use {@linkcode applyEdits}.\n */\nexport function modify(text, path, value, options) {\n return edit.setProperty(text, path, value, options);\n}\n/**\n * Applies edits to an input string.\n * @param text The input text\n * @param edits Edit operations following the format described in {@linkcode EditResult}.\n * @returns The text with the applied edits.\n * @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}.\n */\nexport function applyEdits(text, edits) {\n let sortedEdits = edits.slice(0).sort((a, b) => {\n const diff = a.offset - b.offset;\n if (diff === 0) {\n return a.length - b.length;\n }\n return diff;\n });\n let lastModifiedOffset = text.length;\n for (let i = sortedEdits.length - 1; i >= 0; i--) {\n let e = sortedEdits[i];\n if (e.offset + e.length <= lastModifiedOffset) {\n text = edit.applyEdit(text, e);\n }\n else {\n throw new Error('Overlapping edit');\n }\n lastModifiedOffset = e.offset;\n }\n return text;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { Mount } from './mounts';\nimport {\n\ttype X2jOptions,\n\ttype XmlBuilderOptions,\n\tXMLParser,\n\tXMLBuilder,\n} from 'fast-xml-parser';\nimport * as JSONC from 'jsonc-parser';\n\n/**\n * Create a symlink to a tempory directory.\n *\n * The symlink is created to access the system temp dir\n * inside the current debugging directory.\n *\n * @param nativeDirPath The system temp dir path.\n * @param symlinkPath The symlink name.\n */\nexport async function createTempDirSymlink(\n\tnativeDirPath: string,\n\tsymlinkPath: string,\n\tplatform: string\n) {\n\tconst type =\n\t\tplatform === 'win32'\n\t\t\t? // On Windows, creating a 'dir' symlink can require elevated permissions.\n\t\t\t\t// In this case, let's make junction points because they function like\n\t\t\t\t// symlinks and do not require elevated permissions.\n\t\t\t\t'junction'\n\t\t\t: 'dir';\n\tfs.symlinkSync(nativeDirPath, symlinkPath, type);\n}\n\n/**\n * Remove the given temporary directory symlink if it exists.\n *\n * @param symlinkPath The symlink path.\n */\nexport async function removeTempDirSymlink(symlinkPath: string) {\n\ttry {\n\t\tconst stats = fs.lstatSync(symlinkPath);\n\t\tif (stats.isSymbolicLink()) {\n\t\t\tfs.unlinkSync(symlinkPath);\n\t\t}\n\t} catch {\n\t\t// Symlink does not exist or cannot be accessed, nothing to remove\n\t}\n}\n\n/**\n * Filters out mounts that are not in the current working directory\n *\n * @param mounts The mounts list.\n */\nfunction filterLocalMounts(cwd: string, mounts: Mount[]) {\n\treturn mounts.filter((mount) => {\n\t\tconst absoluteHostPath = path.resolve(mount.hostPath);\n\t\tconst cwdChildPrefix = path.join(cwd, path.sep);\n\t\treturn (\n\t\t\t// If auto-mounting from the current directory,\n\t\t\t// the entire project directory can be mapped.\n\t\t\tabsoluteHostPath === cwd ||\n\t\t\tabsoluteHostPath.startsWith(cwdChildPrefix)\n\t\t);\n\t});\n}\n\nexport type IDEConfig = {\n\t/**\n\t * The name of the configuration within the IDE configuration.\n\t */\n\tname: string;\n\t/**\n\t * The IDEs to configure.\n\t */\n\tides: string[];\n\t/**\n\t * The web server host.\n\t */\n\thost: string;\n\t/**\n\t * The web server port.\n\t */\n\tport: number;\n\t/**\n\t * The current working directory to consider for debugger path mapping.\n\t */\n\tcwd: string;\n\t/**\n\t * The mounts to consider for debugger path mapping.\n\t */\n\tmounts?: Mount[];\n\t/**\n\t * The IDE key to use for the debug configuration. Defaults to 'PLAYGROUNDCLI'.\n\t */\n\tideKey?: string;\n};\n\ntype PhpStormConfigMetaData = {\n\tname?: string;\n\tversion?: string;\n\thost?: string;\n\tuse_path_mappings?: string;\n\t'local-root'?: string;\n\t'remote-root'?: string;\n\t/**\n\t * The type of the server.\n\t */\n\ttype?: 'PhpRemoteDebugRunConfigurationType';\n\tfactoryName?: string;\n\tfilter_connections?: 'FILTER';\n\tserver_name?: string;\n\tsession_id?: string;\n\tv?: string;\n};\n\ntype PhpStormConfigNode = {\n\t':@'?: PhpStormConfigMetaData;\n\tproject?: PhpStormConfigNode[];\n\tcomponent?: PhpStormConfigNode[];\n\tservers?: PhpStormConfigNode[];\n\tserver?: PhpStormConfigNode[];\n\tpath_mappings?: PhpStormConfigNode[];\n\tmapping?: PhpStormConfigNode[];\n\tconfiguration?: PhpStormConfigNode[];\n\tmethod?: PhpStormConfigNode[];\n};\n\ntype VSCodeConfigMetaData = {\n\t[key: string]: string;\n};\n\ntype VSCodeConfigNode = {\n\tname: string;\n\ttype: string;\n\trequest: string;\n\tport: number;\n\tpathMappings?: VSCodeConfigMetaData;\n};\n\nconst xmlParserOptions: X2jOptions = {\n\tignoreAttributes: false,\n\tattributeNamePrefix: '',\n\tpreserveOrder: true,\n\tcdataPropName: '__cdata',\n\tcommentPropName: '__xmlComment',\n\tallowBooleanAttributes: true,\n\ttrimValues: true,\n};\nconst xmlBuilderOptions: XmlBuilderOptions = {\n\tignoreAttributes: xmlParserOptions.ignoreAttributes,\n\tattributeNamePrefix: xmlParserOptions.attributeNamePrefix,\n\tpreserveOrder: xmlParserOptions.preserveOrder,\n\tcdataPropName: xmlParserOptions.cdataPropName,\n\tcommentPropName: xmlParserOptions.commentPropName,\n\tsuppressBooleanAttributes: !xmlParserOptions.allowBooleanAttributes,\n\tformat: true,\n\tindentBy: '\\t',\n};\n\nconst jsoncParseOptions: JSONC.ParseOptions = {\n\tallowEmptyContent: true,\n\tallowTrailingComma: true,\n};\n\nexport type PhpStormConfigOptions = {\n\tname: string;\n\thost: string;\n\tport: number;\n\tprojectDir: string;\n\tmappings?: Mount[];\n\tideKey: string;\n};\n\n/**\n * Pure function to update PHPStorm XML config with XDebug server and run configuration.\n *\n * @param xmlContent The original XML content of workspace.xml\n * @param options Configuration options for the server\n * @returns Updated XML content\n * @throws Error if XML is invalid or configuration is incompatible\n */\nexport function updatePhpStormConfig(\n\txmlContent: string,\n\toptions: PhpStormConfigOptions\n): string {\n\tconst { name, host, port, mappings, ideKey } = options;\n\n\tconst xmlParser = new XMLParser(xmlParserOptions);\n\n\t// Parse the XML\n\tconst config: PhpStormConfigNode[] = (() => {\n\t\ttry {\n\t\t\treturn xmlParser.parse(xmlContent, true);\n\t\t} catch {\n\t\t\tthrow new Error('PhpStorm configuration file is not valid XML.');\n\t\t}\n\t})();\n\n\t// Create the server element with path mappings\n\tconst serverElement: PhpStormConfigNode = {\n\t\tserver: [{}],\n\t\t':@': {\n\t\t\tname,\n\t\t\t// NOTE: PhpStorm quirk: Xdebug only works when the full URL (including port)\n\t\t\t// is provided in `host`. The separate `port` field is ignored or misinterpreted,\n\t\t\t// so we rely solely on host: \"host:port\".\n\t\t\thost: `${host}:${port}`,\n\t\t\tuse_path_mappings: 'true',\n\t\t},\n\t};\n\n\tif (mappings && mappings.length) {\n\t\tserverElement.server![0].path_mappings = mappings.map((mapping) => ({\n\t\t\tmapping: [],\n\t\t\t':@': {\n\t\t\t\t'local-root': `$PROJECT_DIR$/${toPosixPath(\n\t\t\t\t\tpath.relative(options.projectDir, mapping.hostPath)\n\t\t\t\t)}`,\n\t\t\t\t'remote-root': mapping.vfsPath,\n\t\t\t},\n\t\t}));\n\t}\n\n\t// Find or create project element\n\tlet projectElement = config?.find((c: PhpStormConfigNode) => !!c?.project);\n\tif (projectElement) {\n\t\tconst projectVersion = projectElement[':@']?.version;\n\t\tif (projectVersion === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t'PhpStorm IDE integration only supports <project version=\"4\"> in workspace.xml, ' +\n\t\t\t\t\t'but the <project> configuration has no version number.'\n\t\t\t);\n\t\t} else if (projectVersion !== '4') {\n\t\t\tthrow new Error(\n\t\t\t\t'PhpStorm IDE integration only supports <project version=\"4\"> in workspace.xml, ' +\n\t\t\t\t\t`but we found a <project> configuration with version \"${projectVersion}\".`\n\t\t\t);\n\t\t}\n\t}\n\tif (projectElement === undefined) {\n\t\tprojectElement = {\n\t\t\tproject: [],\n\t\t\t':@': { version: '4' },\n\t\t};\n\t\tconfig.push(projectElement);\n\t}\n\n\t// Find or create PhpServers component\n\tlet componentElement = projectElement.project?.find(\n\t\t(c: PhpStormConfigNode) =>\n\t\t\t!!c?.component && c?.[':@']?.name === 'PhpServers'\n\t);\n\tif (componentElement === undefined) {\n\t\tcomponentElement = {\n\t\t\tcomponent: [],\n\t\t\t':@': { name: 'PhpServers' },\n\t\t};\n\n\t\tif (projectElement.project === undefined) {\n\t\t\tprojectElement.project = [];\n\t\t}\n\n\t\tprojectElement.project.push(componentElement);\n\t}\n\n\t// Find or create servers element\n\tlet serversElement = componentElement.component?.find(\n\t\t(c: PhpStormConfigNode) => !!c?.servers\n\t);\n\tif (serversElement === undefined) {\n\t\tserversElement = { servers: [] };\n\n\t\tif (componentElement.component === undefined) {\n\t\t\tcomponentElement.component = [];\n\t\t}\n\n\t\tcomponentElement.component.push(serversElement);\n\t}\n\n\t// Check if server already exists\n\tconst serverElementIndex = serversElement.servers?.findIndex(\n\t\t(c: PhpStormConfigNode) => !!c?.server && c?.[':@']?.name === name\n\t);\n\n\t// Only add server if it doesn't exist\n\tif (serverElementIndex === undefined || serverElementIndex < 0) {\n\t\tif (serversElement.servers === undefined) {\n\t\t\tserversElement.servers = [];\n\t\t}\n\n\t\tserversElement.servers.push(serverElement);\n\t}\n\n\t// Find or create RunManager component\n\tlet runManagerElement = projectElement.project?.find(\n\t\t(c: PhpStormConfigNode) =>\n\t\t\t!!c?.component && c?.[':@']?.name === 'RunManager'\n\t);\n\tif (runManagerElement === undefined) {\n\t\trunManagerElement = {\n\t\t\tcomponent: [],\n\t\t\t':@': { name: 'RunManager' },\n\t\t};\n\n\t\tif (projectElement.project === undefined) {\n\t\t\tprojectElement.project = [];\n\t\t}\n\n\t\tprojectElement.project.push(runManagerElement);\n\t}\n\n\t// Check if run configuration already exists\n\tconst existingConfigIndex =\n\t\trunManagerElement.component?.findIndex(\n\t\t\t(c: PhpStormConfigNode) =>\n\t\t\t\t!!c?.configuration && c?.[':@']?.name === name\n\t\t) ?? -1;\n\n\t// Only add run configuration if it doesn't exist\n\tif (existingConfigIndex < 0) {\n\t\tconst runConfigElement: PhpStormConfigNode = {\n\t\t\tconfiguration: [\n\t\t\t\t{\n\t\t\t\t\tmethod: [],\n\t\t\t\t\t':@': { v: '2' },\n\t\t\t\t},\n\t\t\t],\n\t\t\t':@': {\n\t\t\t\tname: name,\n\t\t\t\ttype: 'PhpRemoteDebugRunConfigurationType',\n\t\t\t\tfactoryName: 'PHP Remote Debug',\n\t\t\t\tfilter_connections: 'FILTER',\n\t\t\t\tserver_name: name,\n\t\t\t\tsession_id: ideKey,\n\t\t\t},\n\t\t};\n\n\t\tif (runManagerElement.component === undefined) {\n\t\t\trunManagerElement.component = [];\n\t\t}\n\n\t\trunManagerElement.component.push(runConfigElement);\n\t}\n\n\t// Build the updated XML\n\tconst xmlBuilder = new XMLBuilder(xmlBuilderOptions);\n\tconst xml = xmlBuilder.build(config);\n\n\t// Validate the generated XML\n\ttry {\n\t\txmlParser.parse(xml, true);\n\t} catch {\n\t\tthrow new Error(\n\t\t\t'The resulting PhpStorm configuration file is not valid XML.'\n\t\t);\n\t}\n\n\treturn xml;\n}\n\nexport type VSCodeConfigOptions = {\n\tname: string;\n\tworkspaceDir: string;\n\tmappings?: Mount[];\n};\n\n/**\n * Pure function to update VS Code launch.json config with XDebug configuration.\n *\n * @param jsonContent The original JSON content of launch.json\n * @param options Configuration options\n * @returns Updated JSON content\n * @throws Error if JSON is invalid\n */\nexport function updateVSCodeConfig(\n\tjsonContent: string,\n\toptions: VSCodeConfigOptions\n): string {\n\tconst { name, mappings } = options;\n\n\tconst errors: JSONC.ParseError[] = [];\n\n\tlet content = jsonContent;\n\tlet root = JSONC.parseTree(content, errors, jsoncParseOptions);\n\n\tif (root === undefined || errors.length) {\n\t\tthrow new Error('VS Code configuration file is not valid JSON.');\n\t}\n\n\t// Find or create configurations array\n\tlet configurationsNode = JSONC.findNodeAtLocation(root, ['configurations']);\n\n\tif (\n\t\tconfigurationsNode === undefined ||\n\t\tconfigurationsNode.children === undefined\n\t) {\n\t\tconst edits = JSONC.modify(content, ['configurations'], [], {});\n\t\tcontent = JSONC.applyEdits(content, edits);\n\n\t\troot = JSONC.parseTree(content, [], jsoncParseOptions);\n\t\tconfigurationsNode = JSONC.findNodeAtLocation(root!, [\n\t\t\t'configurations',\n\t\t]);\n\t}\n\n\t// Check if configuration already exists\n\tconst configurationIndex = configurationsNode?.children?.findIndex(\n\t\t(child: any) =>\n\t\t\tJSONC.findNodeAtLocation(child, ['name'])?.value === name\n\t);\n\n\t// Only add configuration if it doesn't exist\n\tif (configurationIndex === undefined || configurationIndex < 0) {\n\t\tconst configuration: VSCodeConfigNode = {\n\t\t\tname: name,\n\t\t\ttype: 'php',\n\t\t\trequest: 'launch',\n\t\t\tport: 9003,\n\t\t};\n\n\t\tif (mappings && mappings.length) {\n\t\t\tconfiguration.pathMappings = mappings.reduce((acc, mount) => {\n\t\t\t\tacc[mount.vfsPath] = `\\${workspaceFolder}/${toPosixPath(\n\t\t\t\t\tpath.relative(options.workspaceDir, mount.hostPath)\n\t\t\t\t)}`;\n\t\t\t\treturn acc;\n\t\t\t}, {} as VSCodeConfigMetaData);\n\t\t}\n\n\t\t// Get the current length to append at the end\n\t\tconst currentLength = configurationsNode?.children?.length || 0;\n\n\t\tconst edits = JSONC.modify(\n\t\t\tcontent,\n\t\t\t['configurations', currentLength],\n\t\t\tconfiguration,\n\t\t\t{\n\t\t\t\tformattingOptions: {\n\t\t\t\t\tinsertSpaces: true,\n\t\t\t\t\ttabSize: 4,\n\t\t\t\t\teol: '\\n',\n\t\t\t\t},\n\t\t\t}\n\t\t);\n\n\t\tcontent = jsoncApplyEdits(content, edits);\n\t}\n\n\treturn content;\n}\n\n/**\n * Implement necessary parameters and path mappings in IDE configuration files.\n *\n * @param name The configuration name.\n * @param mounts The mounts options.\n */\nexport async function addXdebugIDEConfig({\n\tname,\n\tides,\n\thost,\n\tport,\n\tcwd,\n\tmounts,\n\tideKey = 'PHPWASMCLI',\n}: IDEConfig) {\n\tconst mappings = mounts ? filterLocalMounts(cwd, mounts) : [];\n\tconst modifiedConfig: Record<string, string> = {};\n\n\t// PHPstorm\n\tif (ides.includes('phpstorm')) {\n\t\tconst phpStormRelativeConfigFilePath = '.idea/workspace.xml';\n\t\tconst phpStormConfigFilePath = path.join(\n\t\t\tcwd,\n\t\t\tphpStormRelativeConfigFilePath\n\t\t);\n\n\t\t// Create a template config file if the IDE directory exists,\n\t\t// or throw an error if IDE integration is requested but the directory is missing.\n\t\tif (!fs.existsSync(phpStormConfigFilePath)) {\n\t\t\tif (fs.existsSync(path.dirname(phpStormConfigFilePath))) {\n\t\t\t\tfs.writeFileSync(\n\t\t\t\t\tphpStormConfigFilePath,\n\t\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<project version=\"4\">\\n</project>'\n\t\t\t\t);\n\t\t\t} else if (ides.length == 1) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`PhpStorm IDE integration requested, but no '.idea' directory was found in the current working directory.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (fs.existsSync(phpStormConfigFilePath)) {\n\t\t\tconst contents = fs.readFileSync(phpStormConfigFilePath, 'utf8');\n\t\t\tconst updatedXml = updatePhpStormConfig(contents, {\n\t\t\t\tname,\n\t\t\t\thost,\n\t\t\t\tport,\n\t\t\t\tprojectDir: cwd,\n\t\t\t\tmappings,\n\t\t\t\tideKey,\n\t\t\t});\n\t\t\tfs.writeFileSync(phpStormConfigFilePath, updatedXml);\n\t\t\tmodifiedConfig['phpstorm'] = phpStormRelativeConfigFilePath;\n\t\t}\n\t}\n\n\t// VSCode\n\tif (ides.includes('vscode')) {\n\t\tconst vsCodeRelativeConfigFilePath = '.vscode/launch.json';\n\t\tconst vsCodeConfigFilePath = path.join(\n\t\t\tcwd,\n\t\t\tvsCodeRelativeConfigFilePath\n\t\t);\n\n\t\t// Create a template config file if the IDE directory exists,\n\t\t// or throw an error if IDE integration is requested but the directory is missing.\n\t\tif (!fs.existsSync(vsCodeConfigFilePath)) {\n\t\t\tif (fs.existsSync(path.dirname(vsCodeConfigFilePath))) {\n\t\t\t\tfs.writeFileSync(\n\t\t\t\t\tvsCodeConfigFilePath,\n\t\t\t\t\t'{\\n \"configurations\": []\\n}'\n\t\t\t\t);\n\t\t\t} else if (ides.length == 1) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`VS Code IDE integration requested, but no '.vscode' directory was found in the current working directory.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (fs.existsSync(vsCodeConfigFilePath)) {\n\t\t\tconst content = fs.readFileSync(vsCodeConfigFilePath, 'utf-8');\n\t\t\tconst updatedJson = updateVSCodeConfig(content, {\n\t\t\t\tname,\n\t\t\t\tworkspaceDir: cwd,\n\t\t\t\tmappings,\n\t\t\t});\n\n\t\t\t// Only write and track the file if changes were made\n\t\t\tif (updatedJson !== content) {\n\t\t\t\tfs.writeFileSync(vsCodeConfigFilePath, updatedJson);\n\t\t\t\tmodifiedConfig['vscode'] = vsCodeRelativeConfigFilePath;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn modifiedConfig;\n}\n\n/**\n * Remove stale parameters and path mappings in IDE configuration files.\n *\n * @param name The configuration name.\n * @param cwd The current working directory.\n */\nexport async function clearXdebugIDEConfig(name: string, cwd: string) {\n\tconst phpStormConfigFilePath = path.join(cwd, '.idea/workspace.xml');\n\t// PhpStorm\n\tif (fs.existsSync(phpStormConfigFilePath)) {\n\t\tconst contents = fs.readFileSync(phpStormConfigFilePath, 'utf8');\n\t\tconst xmlParser = new XMLParser(xmlParserOptions);\n\t\t// NOTE: Using an IIFE so `config` can remain const.\n\t\tconst config: PhpStormConfigNode[] = (() => {\n\t\t\ttry {\n\t\t\t\treturn xmlParser.parse(contents, true);\n\t\t\t} catch {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'PhpStorm configuration file is not valid XML.'\n\t\t\t\t);\n\t\t\t}\n\t\t})();\n\n\t\tconst projectElement = config.find(\n\t\t\t(c: PhpStormConfigNode) => !!c?.project\n\t\t);\n\t\tconst componentElement = projectElement?.project?.find(\n\t\t\t(c: PhpStormConfigNode) =>\n\t\t\t\t!!c?.component && c?.[':@']?.name === 'PhpServers'\n\t\t);\n\t\tconst serversElement = componentElement?.component?.find(\n\t\t\t(c: PhpStormConfigNode) => !!c?.servers\n\t\t);\n\t\tconst serverElementIndex = serversElement?.servers?.findIndex(\n\t\t\t(c: PhpStormConfigNode) => !!c?.server && c?.[':@']?.name === name\n\t\t);\n\n\t\tif (serverElementIndex !== undefined && serverElementIndex >= 0) {\n\t\t\tserversElement!.servers!.splice(serverElementIndex, 1);\n\n\t\t\tconst xmlBuilder = new XMLBuilder(xmlBuilderOptions);\n\t\t\tconst xml = xmlBuilder.build(config);\n\n\t\t\ttry {\n\t\t\t\txmlParser.parse(xml, true);\n\t\t\t} catch {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'The resulting PhpStorm configuration file is not valid XML.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\txml ===\n\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<project version=\"4\">\\n\t<component name=\"PhpServers\">\\n\t\t<servers></servers>\\n\t</component>\\n</project>'\n\t\t\t) {\n\t\t\t\tfs.unlinkSync(phpStormConfigFilePath);\n\t\t\t} else {\n\t\t\t\tfs.writeFileSync(phpStormConfigFilePath, xml);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst vsCodeConfigFilePath = path.join(cwd, '.vscode/launch.json');\n\t// VSCode\n\tif (fs.existsSync(vsCodeConfigFilePath)) {\n\t\tconst errors: JSONC.ParseError[] = [];\n\n\t\tconst content = fs.readFileSync(vsCodeConfigFilePath, 'utf-8');\n\t\tconst root = JSONC.parseTree(content, errors, jsoncParseOptions);\n\n\t\tif (root === undefined || errors.length) {\n\t\t\tthrow new Error('VS Code configuration file is not valid JSON.');\n\t\t}\n\n\t\tconst configurationsNode = JSONC.findNodeAtLocation(root, [\n\t\t\t'configurations',\n\t\t]);\n\n\t\tconst configurationIndex = configurationsNode?.children?.findIndex(\n\t\t\t(child: any) =>\n\t\t\t\tJSONC.findNodeAtLocation(child, ['name'])?.value === name\n\t\t);\n\n\t\tif (configurationIndex !== undefined && configurationIndex >= 0) {\n\t\t\tconst edits = JSONC.modify(\n\t\t\t\tcontent,\n\t\t\t\t['configurations', configurationIndex],\n\t\t\t\tundefined,\n\t\t\t\t{\n\t\t\t\t\tformattingOptions: {\n\t\t\t\t\t\tinsertSpaces: true,\n\t\t\t\t\t\ttabSize: 4,\n\t\t\t\t\t\teol: '\\n',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tconst json = jsoncApplyEdits(content, edits);\n\t\t\tif (json === '{\\n \"configurations\": []\\n}') {\n\t\t\t\tfs.unlinkSync(vsCodeConfigFilePath);\n\t\t\t} else {\n\t\t\t\tfs.writeFileSync(vsCodeConfigFilePath, json);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction jsoncApplyEdits(content: string, edits: JSONC.Edit[]) {\n\tconst errors: JSONC.ParseError[] = [];\n\tconst json = JSONC.applyEdits(content, edits);\n\n\terrors.length = 0;\n\n\tJSONC.parseTree(json, errors, jsoncParseOptions);\n\n\tif (errors.length) {\n\t\tconst formattedErrors = errors\n\t\t\t.map((error) => {\n\t\t\t\treturn {\n\t\t\t\t\tmessage: JSONC.printParseErrorCode(error.error),\n\t\t\t\t\toffset: error.offset,\n\t\t\t\t\tlength: error.length,\n\t\t\t\t\tfragment: json.slice(\n\t\t\t\t\t\tMath.max(0, error.offset - 20),\n\t\t\t\t\t\tMath.min(json.length, error.offset + error.length + 10)\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.map(\n\t\t\t\t(error) =>\n\t\t\t\t\t`${error.message} at ${error.offset}:${error.length} (${error.fragment})`\n\t\t\t);\n\t\tconst formattedEdits = edits.map(\n\t\t\t(edit) => `At ${edit.offset}:${edit.length} - (${edit.content})`\n\t\t);\n\t\tthrow new Error(\n\t\t\t`VS Code configuration file (.vscode/launch.json) is not valid a JSONC after CLI modifications. This is likely ` +\n\t\t\t\t`a CLI bug. Please report it at https://github.com/WordPress/wordpress-playground/issues and include the contents ` +\n\t\t\t\t`of your \".vscode/launch.json\" file. \\n\\n Applied edits: ${formattedEdits.join(\n\t\t\t\t\t'\\n'\n\t\t\t\t)}\\n\\n The errors are: ${formattedErrors.join('\\n')}`\n\t\t);\n\t}\n\n\treturn json;\n}\n\nfunction toPosixPath(pathStr: string) {\n\treturn pathStr.replaceAll(path.sep, path.posix.sep);\n}\n","export const currentJsRuntime = (function () {\n\tif (typeof process !== 'undefined' && process.release?.name === 'node') {\n\t\treturn 'NODE';\n\t} else if (typeof window !== 'undefined') {\n\t\treturn 'WEB';\n\t} else if (\n\t\t// @ts-ignore\n\t\ttypeof WorkerGlobalScope !== 'undefined' &&\n\t\t// @ts-ignore\n\t\tself instanceof (WorkerGlobalScope as any)\n\t) {\n\t\treturn 'WORKER';\n\t} else {\n\t\treturn 'NODE';\n\t}\n})();\n","import { currentJsRuntime } from './current-js-runtime';\n\n// Without this check, the polyfills below would also be applied\n// in web browsers. Unfortunately, Safari doesn't sypport BYOB streams\n// and doesn't support the polyfill provided here. Let's only apply\n// those polyfills in Node.js environments.\nif (currentJsRuntime === 'NODE') {\n\t/**\n\t * WordPress Playground heavily realies on the File class. This module\n\t * polyfill the File class for the different environments where\n\t * WordPress Playground may run.\n\t */\n\tif (typeof File === 'undefined') {\n\t\t/**\n\t\t * Polyfill the File class that isn't shipped in Node.js version 18.\n\t\t *\n\t\t * Blob conveniently provides a lot of the same methods as File, we\n\t\t * just need to implement a few File-specific properties.\n\t\t */\n\t\tclass File extends Blob {\n\t\t\treadonly name: string;\n\t\t\treadonly lastModified: number;\n\t\t\treadonly lastModifiedDate: Date;\n\t\t\twebkitRelativePath: any;\n\t\t\tconstructor(\n\t\t\t\tsources: BlobPart[],\n\t\t\t\tfileName: string,\n\t\t\t\toptions?: FilePropertyBag\n\t\t\t) {\n\t\t\t\tsuper(sources);\n\t\t\t\t/*\n\t\t\t\t * Compute a valid last modified date as that's what the\n\t\t\t\t * browsers do:\n\t\t\t\t *\n\t\t\t\t * ```\n\t\t\t\t * > new File([], '').lastModifiedDate\n\t\t\t\t * Sat Dec 16 2023 10:07:53 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t *\n\t\t\t\t * > new File([], '', { lastModified: NaN }).lastModifiedDate\n\t\t\t\t * Thu Jan 01 1970 01:00:00 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t *\n\t\t\t\t * > new File([], '', { lastModified: 'string' }).lastModifiedDate\n\t\t\t\t * Thu Jan 01 1970 01:00:00 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t *\n\t\t\t\t * > new File([], '', { lastModified: {} }).lastModifiedDate\n\t\t\t\t * Thu Jan 01 1970 01:00:00 GMT+0100 (czas środkowoeuropejski standardowy)\n\t\t\t\t * ```\n\t\t\t\t */\n\t\t\t\tlet date;\n\t\t\t\tif (options?.lastModified) {\n\t\t\t\t\tdate = new Date();\n\t\t\t\t}\n\t\t\t\tif (!date || isNaN(date.getFullYear())) {\n\t\t\t\t\tdate = new Date();\n\t\t\t\t}\n\t\t\t\tthis.lastModifiedDate = date;\n\t\t\t\tthis.lastModified = date.getMilliseconds();\n\t\t\t\tthis.name = fileName || '';\n\t\t\t}\n\t\t}\n\t\tglobal.File = File;\n\t}\n\n\t// eslint-disable-next-line no-inner-declarations\n\tfunction asPromise<T>(obj: FileReader) {\n\t\treturn new Promise<T>(function (resolve, reject) {\n\t\t\tobj.onload = obj.onerror = function (event: Event) {\n\t\t\t\tobj.onload = obj.onerror = null;\n\n\t\t\t\tif (event.type === 'load') {\n\t\t\t\t\tresolve(obj.result as T);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Failed to read the blob/file'));\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * File is a subclass of Blob. Let's polyfill the following Blob\n\t * methods that are missing in JSDOM:\n\t *\n\t * – Blob.text()\n\t * – Blob.stream()\n\t * – Blob.arrayBuffer()\n\t *\n\t * See the related JSDom issue:\n\t *\n\t * – [Implement Blob.stream, Blob.text and Blob.arrayBuffer](https://github.com/jsdom/jsdom/issues/2555).\n\t *\n\t * @source `blob-polyfill` npm package.\n\t * * By Eli Grey, https://eligrey.com\n\t * * By Jimmy Wärting, https://github.com/jimmywarting\n\t */\n\tif (typeof Blob.prototype.arrayBuffer === 'undefined') {\n\t\tBlob.prototype.arrayBuffer = function arrayBuffer() {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer(this);\n\t\t\treturn asPromise<Uint8Array>(reader);\n\t\t};\n\t}\n\n\tif (typeof Blob.prototype.text === 'undefined') {\n\t\tBlob.prototype.text = function text() {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsText(this);\n\t\t\treturn asPromise<string>(reader);\n\t\t};\n\t}\n\n\t/**\n\t * Detects if BYOB (Bring Your Own Buffer) streams are supported\n\t * in the current environment.\n\t *\n\t * BYOB is a new feature in the Streams API that allows reading\n\t * an arbitrary number of bytes from a stream. It's not supported\n\t * in older versions of Node.js.\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader\n\t */\n\t// eslint-disable-next-line no-inner-declarations\n\tfunction isByobSupported() {\n\t\tconst inputBytes = new Uint8Array([1, 2, 3, 4]);\n\t\tconst file = new File([inputBytes], 'test');\n\t\tconst stream = file.stream();\n\t\ttry {\n\t\t\t// This throws on older versions of node:\n\t\t\tstream.getReader({ mode: 'byob' });\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Polyfill the stream() method if it either doesn't exist,\n\t * or is an older version shipped with e.g. Node.js 18 where\n\t * BYOB streams seem to be unsupported.\n\t */\n\tif (typeof Blob.prototype.stream === 'undefined' || !isByobSupported()) {\n\t\tBlob.prototype.stream = function () {\n\t\t\tlet position = 0;\n\t\t\t// eslint-disable-next-line\n\t\t\tconst blob = this;\n\t\t\treturn new ReadableStream({\n\t\t\t\ttype: 'bytes',\n\t\t\t\t// 0.5 MB seems like a reasonable chunk size, let's adjust\n\t\t\t\t// this if needed.\n\t\t\t\tautoAllocateChunkSize: 512 * 1024,\n\n\t\t\t\tasync pull(controller) {\n\t\t\t\t\tconst view = controller.byobRequest!.view;\n\n\t\t\t\t\t// Read the next chunk of data:\n\t\t\t\t\tconst chunk = blob.slice(\n\t\t\t\t\t\tposition,\n\t\t\t\t\t\tposition + view!.byteLength\n\t\t\t\t\t);\n\t\t\t\t\tconst buffer = await chunk.arrayBuffer();\n\t\t\t\t\tconst uint8array = new Uint8Array(buffer);\n\n\t\t\t\t\t// Emit that chunk:\n\t\t\t\t\tnew Uint8Array(view!.buffer).set(uint8array);\n\t\t\t\t\tconst bytesRead = uint8array.byteLength;\n\t\t\t\t\tcontroller.byobRequest!.respond(bytesRead);\n\n\t\t\t\t\t// Bump the position and close this stream once\n\t\t\t\t\t// we've read the entire blob.\n\t\t\t\t\tposition += bytesRead;\n\t\t\t\t\tif (position >= blob.size) {\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t};\n\t}\n}\n\nexport default {};\n","import { currentJsRuntime } from './current-js-runtime';\n\nif (currentJsRuntime === 'NODE' && typeof CustomEvent === 'undefined') {\n\tclass CustomEvent<T = any> extends Event {\n\t\treadonly detail: T;\n\t\tconstructor(\n\t\t\tname: string,\n\t\t\toptions: {\n\t\t\t\tdetail?: T;\n\t\t\t\tbubbles?: boolean;\n\t\t\t\tcancellable?: boolean;\n\t\t\t\tcomposed?: boolean;\n\t\t\t} = {}\n\t\t) {\n\t\t\tsuper(name, options);\n\t\t\t/*\n\t\t\t * The bang symbol (`!`) here is a lie to make TypeScript happy.\n\t\t\t *\n\t\t\t * Without the bang TS has the following complaint:\n\t\t\t *\n\t\t\t * > T | undefined is not assignable to type T\n\t\t\t *\n\t\t\t * In reality, it's absolutely fine for T (or `options.detail`)\n\t\t\t * to be undefined. However, the CustomEvent interface shipped\n\t\t\t * with TypeScript doesn't think so and marks `this.details` as\n\t\t\t * a required property.\n\t\t\t *\n\t\t\t * This little and harmless trick silences that error.\n\t\t\t */\n\t\t\tthis.detail = options.detail!;\n\t\t}\n\t\tinitCustomEvent(): void {}\n\t}\n\tglobalThis.CustomEvent = CustomEvent;\n}\n","import type { LogHandler } from '../log-handlers';\nimport { type Log, logger } from '../logger';\n\nexport const logEventType = 'playground-log';\n\nexport const logEvent: LogHandler = (log: Log, ...args: any[]): void => {\n\tlogger.dispatchEvent(\n\t\tnew CustomEvent(logEventType, {\n\t\t\tdetail: {\n\t\t\t\tlog,\n\t\t\t\targs,\n\t\t\t},\n\t\t})\n\t);\n};\n","import type { LogHandler } from '../log-handlers';\nimport { type Log, LogSeverity, prepareLogMessage } from '../logger';\n\n/**\n * Log message to the console.\n */\nexport const logToConsole: LogHandler = (log: Log, ...args: any[]): void => {\n\tif (typeof log.message === 'string') {\n\t\t// Some errors have a read-only message property where direct\n\t\t// assignment will throw an error. The assignment is merely for\n\t\t// formatting, so let's assign with Reflect.set and avoid the error.\n\t\tReflect.set(log, 'message', prepareLogMessage(log.message));\n\t} else if (log.message.message && typeof log.message.message === 'string') {\n\t\t// Some errors have a read-only message property where direct\n\t\t// assignment will throw an error. The assignment is merely for\n\t\t// formatting, so let's assign with Reflect.set and avoid the error.\n\t\tReflect.set(\n\t\t\tlog.message,\n\t\t\t'message',\n\t\t\tprepareLogMessage(log.message.message)\n\t\t);\n\t}\n\t/* eslint-disable no-console */\n\tswitch (log.severity) {\n\t\tcase LogSeverity.Debug:\n\t\t\tconsole.debug(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Info:\n\t\t\tconsole.info(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Warn:\n\t\t\tconsole.warn(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Error:\n\t\t\tconsole.error(log.message, ...args);\n\t\t\tbreak;\n\t\tcase LogSeverity.Fatal:\n\t\t\tconsole.error(log.message, ...args);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log(log.message, ...args);\n\t}\n\t/* eslint-enable no-console */\n};\n","import type { LogHandler } from '../log-handlers';\nimport { formatLogEntry, type Log, LogPrefix } from '../logger';\n\nconst prepareLogMessage = (logMessage: object): string => {\n\tif (logMessage instanceof Error) {\n\t\treturn [logMessage.message, logMessage.stack].join('\\n');\n\t}\n\treturn JSON.stringify(logMessage, null, 2);\n};\n\nexport const logs: string[] = [];\n\nconst addToLogArray = (message: string): void => {\n\tlogs.push(message);\n};\n\n/**\n * Log to memory\n */\nexport const logToMemory: LogHandler = (log: Log): void => {\n\tif (log.raw === true) {\n\t\taddToLogArray(log.message);\n\t} else {\n\t\tconst message = formatLogEntry(\n\t\t\ttypeof log.message === 'object'\n\t\t\t\t? prepareLogMessage(log.message)\n\t\t\t\t: log.message,\n\t\t\tlog.severity,\n\t\t\tlog.prefix ?? LogPrefix.JS\n\t\t);\n\t\taddToLogArray(message);\n\t}\n};\n\nexport const clearMemoryLogs = (): void => {\n\tlogs.length = 0;\n};\n","import { logEvent } from './handlers/log-event';\nimport {\n\tlogToMemory,\n\tlogToConsole,\n\tlogs,\n\ttype LogHandler,\n} from './log-handlers';\n\nexport { logEventType } from './handlers/log-event';\n\nexport { errorLogPath } from './collectors/collect-php-logs';\n\nexport type Log = {\n\tmessage: any;\n\tseverity: LogSeverity;\n\tprefix?: LogPrefix;\n\traw?: boolean;\n};\n\n/**\n * Log severity levels.\n */\nexport const LogSeverity = {\n\tFatal: { name: 'fatal', level: 0 },\n\tError: { name: 'error', level: 1 },\n\tWarn: { name: 'warn', level: 2 },\n\tLog: { name: 'log', level: 3 },\n\tInfo: { name: 'info', level: 4 },\n\tDebug: { name: 'debug', level: 5 },\n} as const;\n\nexport type LogSeverity = (typeof LogSeverity)[keyof typeof LogSeverity];\n\n/**\n * Log prefix.\n */\nexport const LogPrefix = {\n\tWASM: 'Wasm Crash',\n\tPHP: 'PHP',\n\tJS: 'JavaScript',\n} as const;\n\nexport type LogPrefix = (typeof LogPrefix)[keyof typeof LogPrefix];\n\n/**\n * A logger for Playground.\n */\nexport class Logger extends EventTarget {\n\tpublic readonly fatalErrorEvent = 'playground-fatal-error';\n\tprivate readonly handlers: LogHandler[];\n\tprivate severity: LogSeverity = LogSeverity.Info;\n\n\t// constructor\n\tconstructor(\n\t\t// Log handlers\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n\t\thandlers: LogHandler[] = []\n\t) {\n\t\tsuper();\n\t\tthis.handlers = handlers;\n\t}\n\n\t/**\n\t * Get all logs.\n\t * @returns string[]\n\t */\n\tpublic getLogs(): string[] {\n\t\tif (!this.handlers.includes(logToMemory)) {\n\t\t\tthis\n\t\t\t\t.error(`Logs aren't stored because the logToMemory handler isn't registered.\n\t\t\t\tIf you're using a custom logger instance, make sure to register logToMemory handler.\n\t\t\t`);\n\t\t\treturn [];\n\t\t}\n\t\treturn [...logs];\n\t}\n\n\t/**\n\t * Log message with severity.\n\t *\n\t * @param log Log\n\t * @param args any\n\t */\n\tpublic logMessage(\n\t\tlog: Omit<Log, 'severity'> & { severity?: LogSeverity },\n\t\t...args: any[]\n\t): void {\n\t\tconst logWithSeverity: Log = {\n\t\t\t...log,\n\t\t\tseverity: log.severity ?? LogSeverity.Log,\n\t\t};\n\t\tfor (const handler of this.handlers) {\n\t\t\tif (logWithSeverity.severity.level <= this.severity.level) {\n\t\t\t\thandler(logWithSeverity, ...args);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Filter message based on severity\n\t * @param severity LogSeverity\n\t */\n\tpublic setSeverityFilterLevel(severity: LogSeverity): void {\n\t\tthis.severity = severity;\n\t}\n\n\t/**\n\t * Log message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic log(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Log,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log debug message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic debug(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Debug,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log info message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic info(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Info,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log warning message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic warn(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Warn,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n\n\t/**\n\t * Log error message\n\t *\n\t * @param message any\n\t * @param args any\n\t */\n\tpublic error(message: any, ...args: any[]): void {\n\t\tthis.logMessage(\n\t\t\t{\n\t\t\t\tmessage,\n\t\t\t\tseverity: LogSeverity.Error,\n\t\t\t\tprefix: LogPrefix.JS,\n\t\t\t\traw: false,\n\t\t\t},\n\t\t\t...args\n\t\t);\n\t}\n}\n\nconst getDefaultHandlers = () => {\n\ttry {\n\t\tif (process.env['NODE_ENV'] === 'test') {\n\t\t\treturn [logToMemory, logEvent];\n\t\t}\n\t} catch {\n\t\t// Process.env is not available in the browser\n\t}\n\treturn [logToMemory, logToConsole, logEvent];\n};\n\n/**\n * The logger instance.\n */\nexport const logger: Logger = new Logger(getDefaultHandlers());\n\nexport const prepareLogMessage = (message: string) => {\n\treturn message.replace(/\\t/g, '');\n};\n\nexport const formatLogEntry = (\n\tmessage: string,\n\tseverity: LogSeverity,\n\tprefix: string\n): string => {\n\tconst date = new Date();\n\tconst formattedDate = new Intl.DateTimeFormat('en-GB', {\n\t\tyear: 'numeric',\n\t\tmonth: 'short',\n\t\tday: '2-digit',\n\t\ttimeZone: 'UTC',\n\t})\n\t\t.format(date)\n\t\t.replace(/ /g, '-');\n\n\tconst formattedTime = new Intl.DateTimeFormat('en-GB', {\n\t\thour: '2-digit',\n\t\tminute: '2-digit',\n\t\tsecond: '2-digit',\n\t\thour12: false,\n\t\ttimeZone: 'UTC',\n\t\ttimeZoneName: 'short',\n\t}).format(date);\n\tconst now = formattedDate + ' ' + formattedTime;\n\tmessage = prepareLogMessage(message);\n\treturn `[${now}] ${prefix} ${severity.name}: ${message}`;\n};\n\n/**\n * Add a listener for the Playground crashes.\n * These crashes include Playground errors like Asyncify errors.\n * The callback function will receive an Event object with logs in the detail\n * property.\n *\n * @param loggerInstance The logger instance\n * @param callback The callback function\n */\nexport const addCrashListener = (\n\tloggerInstance: Logger,\n\tcallback: EventListenerOrEventListenerObject\n) => {\n\tloggerInstance.addEventListener(loggerInstance.fatalErrorEvent, callback);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { logger } from '@php-wasm/logger';\nimport { EventEmitter } from 'events';\nimport { type WebSocket, WebSocketServer } from 'ws';\n\nexport class CDPServer extends EventEmitter {\n\tprivate wss: WebSocketServer;\n\tprivate ws: WebSocket | null = null;\n\tprivate connected = false;\n\tprivate buffer: any[] = [];\n\n\tconstructor(port = 9229) {\n\t\tsuper();\n\t\tthis.wss = new WebSocketServer({ port: port });\n\t\tthis.wss.on('connection', (ws: WebSocket) => {\n\t\t\t// Only one client at a time\n\t\t\tif (this.ws) {\n\t\t\t\tws.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.ws = ws;\n\t\t\tthis.emit('clientConnected');\n\t\t\tws.on('message', (data) => {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t'\\x1b[1;32m[CDP][received]\\x1b[0m',\n\t\t\t\t\tdata.toString()\n\t\t\t\t);\n\t\t\t\tlet message: any;\n\t\t\t\ttry {\n\t\t\t\t\tmessage = JSON.parse(data.toString());\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.connected) {\n\t\t\t\t\tthis.emit('message', message);\n\t\t\t\t} else {\n\t\t\t\t\tthis.buffer.push(message);\n\t\t\t\t}\n\t\t\t});\n\t\t\tws.on('close', () => {\n\t\t\t\tthis.ws = null;\n\t\t\t\tthis.emit('clientDisconnected');\n\t\t\t});\n\t\t\tws.on('error', (err) => {\n\t\t\t\tthis.emit('error', err);\n\t\t\t});\n\t\t});\n\n\t\t// When a new 'message' listener is registered,\n\t\t// it replays any buffered messages on the next\n\t\t// tick. This ensures that the listener receives\n\t\t// all messages that arrived before it was opened.\n\t\t// Once replayed, it clears the buffer and marks\n\t\t// the connection as established.\n\t\tthis.on('newListener', (event) => {\n\t\t\tif (event === 'message') {\n\t\t\t\tprocess.nextTick(() => {\n\t\t\t\t\tfor (const message of this.buffer) {\n\t\t\t\t\t\tthis.emit('message', message);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.buffer = [];\n\n\t\t\t\t\tthis.connected = true;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tsendMessage(message: any) {\n\t\tif (!this.ws || this.ws.readyState !== this.ws.OPEN) {\n\t\t\treturn;\n\t\t}\n\t\tconst json = JSON.stringify(message);\n\t\tlogger.debug('\\x1b[1;32m[CDP][send]\\x1b[0m', json);\n\t\tthis.ws.send(json);\n\t}\n\n\tclose() {\n\t\tthis.wss.close();\n\t}\n}\n","import { logger } from '@php-wasm/logger';\nimport { EventEmitter } from 'events';\nimport net from 'net';\n\nexport class DbgpSession extends EventEmitter {\n\tprivate server: net.Server;\n\tprivate socket: net.Socket | null = null;\n\tprivate buffer = '';\n\tprivate expectedLength: number | null = null;\n\n\tconstructor(port = 9003) {\n\t\tsuper();\n\t\tthis.server = net.createServer();\n\t\tthis.server.on('connection', (socket) => {\n\t\t\t// Only allow one connection (single-session)\n\t\t\tif (this.socket) {\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.socket = socket;\n\t\t\tsocket.setEncoding('utf8');\n\t\t\tthis.emit('connected');\n\t\t\tsocket.on('data', (data: Buffer) => this.onData(data.toString()));\n\t\t\tsocket.on('close', () => {\n\t\t\t\tthis.socket = null;\n\t\t\t\tthis.emit('disconnected');\n\t\t\t});\n\t\t\tsocket.on('error', (err) => {\n\t\t\t\t// Forward error events if needed\n\t\t\t\tthis.emit('error', err);\n\t\t\t});\n\t\t});\n\t\tthis.server.listen(port);\n\t}\n\n\tprivate onData(data: string) {\n\t\tlogger.debug('\\x1b[1;32m[XDebug][received]]\\x1b[0m', data);\n\t\tthis.buffer += data;\n\t\twhile (true) {\n\t\t\tif (this.expectedLength === null) {\n\t\t\t\t// Look for the separator for length\n\t\t\t\tconst nullIndex = this.buffer.indexOf('\\x00');\n\t\t\t\tif (nullIndex === -1) {\n\t\t\t\t\t// Wait for more data\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst lengthStr = this.buffer.substring(0, nullIndex);\n\t\t\t\tconst length = parseInt(lengthStr, 10);\n\t\t\t\tif (isNaN(length)) {\n\t\t\t\t\t// Invalid length, reset buffer to be safe\n\t\t\t\t\tthis.buffer = '';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.expectedLength = length;\n\t\t\t\t// Remove the length part and null terminator from buffer\n\t\t\t\tthis.buffer = this.buffer.slice(nullIndex + 1);\n\t\t\t}\n\t\t\tif (this.expectedLength !== null) {\n\t\t\t\tif (this.buffer.length >= this.expectedLength) {\n\t\t\t\t\tconst xml = this.buffer.substring(0, this.expectedLength);\n\t\t\t\t\tthis.buffer = this.buffer.slice(this.expectedLength);\n\t\t\t\t\t// Remove trailing null of the message if present\n\t\t\t\t\tif (this.buffer.startsWith('\\x00')) {\n\t\t\t\t\t\tthis.buffer = this.buffer.slice(1);\n\t\t\t\t\t}\n\t\t\t\t\t// Reset expectedLength for next message\n\t\t\t\t\tconst msg = xml.trim();\n\t\t\t\t\tthis.expectedLength = null;\n\t\t\t\t\t// Emit the raw XML message\n\t\t\t\t\tthis.emit('message', msg);\n\t\t\t\t\t// Continue loop in case multiple messages are in buffer\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tsendCommand(command: string) {\n\t\tif (!this.socket) return;\n\t\t// Commands must end with null terminator\n\t\tlogger.debug('\\x1b[1;32m[XDebug][send]\\x1b[0m', command);\n\t\tthis.socket.write(command + '\\x00');\n\t}\n\n\tclose() {\n\t\tthis.server.close();\n\t}\n}\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nexport function camelCase(str) {\n // Handle the case where an argument is provided as camel case, e.g., fooBar.\n // by ensuring that the string isn't already mixed case:\n const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();\n if (!isCamelCase) {\n str = str.toLowerCase();\n }\n if (str.indexOf('-') === -1 && str.indexOf('_') === -1) {\n return str;\n }\n else {\n let camelcase = '';\n let nextChrUpper = false;\n const leadingHyphens = str.match(/^-+/);\n for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) {\n let chr = str.charAt(i);\n if (nextChrUpper) {\n nextChrUpper = false;\n chr = chr.toUpperCase();\n }\n if (i !== 0 && (chr === '-' || chr === '_')) {\n nextChrUpper = true;\n }\n else if (chr !== '-' && chr !== '_') {\n camelcase += chr;\n }\n }\n return camelcase;\n }\n}\nexport function decamelize(str, joinString) {\n const lowercase = str.toLowerCase();\n joinString = joinString || '-';\n let notCamelcase = '';\n for (let i = 0; i < str.length; i++) {\n const chrLower = lowercase.charAt(i);\n const chrString = str.charAt(i);\n if (chrLower !== chrString && i > 0) {\n notCamelcase += `${joinString}${lowercase.charAt(i)}`;\n }\n else {\n notCamelcase += chrString;\n }\n }\n return notCamelcase;\n}\nexport function looksLikeNumber(x) {\n if (x === null || x === undefined)\n return false;\n // if loaded from config, may already be a number.\n if (typeof x === 'number')\n return true;\n // hexadecimal.\n if (/^0x[0-9a-f]+$/i.test(x))\n return true;\n // don't treat 0123 as a number; as it drops the leading '0'.\n if (/^0[^.]/.test(x))\n return false;\n return /^[-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\n// take an un-split argv string and tokenize it.\nexport function tokenizeArgString(argString) {\n if (Array.isArray(argString)) {\n return argString.map(e => typeof e !== 'string' ? e + '' : e);\n }\n argString = argString.trim();\n let i = 0;\n let prevC = null;\n let c = null;\n let opening = null;\n const args = [];\n for (let ii = 0; ii < argString.length; ii++) {\n prevC = c;\n c = argString.charAt(ii);\n // split on spaces unless we're in quotes.\n if (c === ' ' && !opening) {\n if (!(prevC === ' ')) {\n i++;\n }\n continue;\n }\n // don't split the string if we're in matching\n // opening or closing single and double quotes.\n if (c === opening) {\n opening = null;\n }\n else if ((c === \"'\" || c === '\"') && !opening) {\n opening = c;\n }\n if (!args[i])\n args[i] = '';\n args[i] += c;\n }\n return args;\n}\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nexport var DefaultValuesForTypeKey;\n(function (DefaultValuesForTypeKey) {\n DefaultValuesForTypeKey[\"BOOLEAN\"] = \"boolean\";\n DefaultValuesForTypeKey[\"STRING\"] = \"string\";\n DefaultValuesForTypeKey[\"NUMBER\"] = \"number\";\n DefaultValuesForTypeKey[\"ARRAY\"] = \"array\";\n})(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {}));\n","/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nimport { tokenizeArgString } from './tokenize-arg-string.js';\nimport { DefaultValuesForTypeKey } from './yargs-parser-types.js';\nimport { camelCase, decamelize, looksLikeNumber } from './string-utils.js';\nlet mixin;\nexport class YargsParser {\n constructor(_mixin) {\n mixin = _mixin;\n }\n parse(argsInput, options) {\n const opts = Object.assign({\n alias: undefined,\n array: undefined,\n boolean: undefined,\n config: undefined,\n configObjects: undefined,\n configuration: undefined,\n coerce: undefined,\n count: undefined,\n default: undefined,\n envPrefix: undefined,\n narg: undefined,\n normalize: undefined,\n string: undefined,\n number: undefined,\n __: undefined,\n key: undefined\n }, options);\n // allow a string argument to be passed in rather\n // than an argv array.\n const args = tokenizeArgString(argsInput);\n // tokenizeArgString adds extra quotes to args if argsInput is a string\n // only strip those extra quotes in processValue if argsInput is a string\n const inputIsString = typeof argsInput === 'string';\n // aliases might have transitive relationships, normalize this.\n const aliases = combineAliases(Object.assign(Object.create(null), opts.alias));\n const configuration = Object.assign({\n 'boolean-negation': true,\n 'camel-case-expansion': true,\n 'combine-arrays': false,\n 'dot-notation': true,\n 'duplicate-arguments-array': true,\n 'flatten-duplicate-arrays': true,\n 'greedy-arrays': true,\n 'halt-at-non-option': false,\n 'nargs-eats-options': false,\n 'negation-prefix': 'no-',\n 'parse-numbers': true,\n 'parse-positional-numbers': true,\n 'populate--': false,\n 'set-placeholder-key': false,\n 'short-option-groups': true,\n 'strip-aliased': false,\n 'strip-dashed': false,\n 'unknown-options-as-args': false\n }, opts.configuration);\n const defaults = Object.assign(Object.create(null), opts.default);\n const configObjects = opts.configObjects || [];\n const envPrefix = opts.envPrefix;\n const notFlagsOption = configuration['populate--'];\n const notFlagsArgv = notFlagsOption ? '--' : '_';\n const newAliases = Object.create(null);\n const defaulted = Object.create(null);\n // allow a i18n handler to be passed in, default to a fake one (util.format).\n const __ = opts.__ || mixin.format;\n const flags = {\n aliases: Object.create(null),\n arrays: Object.create(null),\n bools: Object.create(null),\n strings: Object.create(null),\n numbers: Object.create(null),\n counts: Object.create(null),\n normalize: Object.create(null),\n configs: Object.create(null),\n nargs: Object.create(null),\n coercions: Object.create(null),\n keys: []\n };\n const negative = /^-([0-9]+(\\.[0-9]+)?|\\.[0-9]+)$/;\n const negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)');\n [].concat(opts.array || []).filter(Boolean).forEach(function (opt) {\n const key = typeof opt === 'object' ? opt.key : opt;\n // assign to flags[bools|strings|numbers]\n const assignment = Object.keys(opt).map(function (key) {\n const arrayFlagKeys = {\n boolean: 'bools',\n string: 'strings',\n number: 'numbers'\n };\n return arrayFlagKeys[key];\n }).filter(Boolean).pop();\n // assign key to be coerced\n if (assignment) {\n flags[assignment][key] = true;\n }\n flags.arrays[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.boolean || []).filter(Boolean).forEach(function (key) {\n flags.bools[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.string || []).filter(Boolean).forEach(function (key) {\n flags.strings[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.number || []).filter(Boolean).forEach(function (key) {\n flags.numbers[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.count || []).filter(Boolean).forEach(function (key) {\n flags.counts[key] = true;\n flags.keys.push(key);\n });\n [].concat(opts.normalize || []).filter(Boolean).forEach(function (key) {\n flags.normalize[key] = true;\n flags.keys.push(key);\n });\n if (typeof opts.narg === 'object') {\n Object.entries(opts.narg).forEach(([key, value]) => {\n if (typeof value === 'number') {\n flags.nargs[key] = value;\n flags.keys.push(key);\n }\n });\n }\n if (typeof opts.coerce === 'object') {\n Object.entries(opts.coerce).forEach(([key, value]) => {\n if (typeof value === 'function') {\n flags.coercions[key] = value;\n flags.keys.push(key);\n }\n });\n }\n if (typeof opts.config !== 'undefined') {\n if (Array.isArray(opts.config) || typeof opts.config === 'string') {\n ;\n [].concat(opts.config).filter(Boolean).forEach(function (key) {\n flags.configs[key] = true;\n });\n }\n else if (typeof opts.config === 'object') {\n Object.entries(opts.config).forEach(([key, value]) => {\n if (typeof value === 'boolean' || typeof value === 'function') {\n flags.configs[key] = value;\n }\n });\n }\n }\n // create a lookup table that takes into account all\n // combinations of aliases: {f: ['foo'], foo: ['f']}\n extendAliases(opts.key, aliases, opts.default, flags.arrays);\n // apply default values to all aliases.\n Object.keys(defaults).forEach(function (key) {\n (flags.aliases[key] || []).forEach(function (alias) {\n defaults[alias] = defaults[key];\n });\n });\n let error = null;\n checkConfiguration();\n let notFlags = [];\n const argv = Object.assign(Object.create(null), { _: [] });\n // TODO(bcoe): for the first pass at removing object prototype we didn't\n // remove all prototypes from objects returned by this API, we might want\n // to gradually move towards doing so.\n const argvReturn = {};\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const truncatedArg = arg.replace(/^-{3,}/, '---');\n let broken;\n let key;\n let letters;\n let m;\n let next;\n let value;\n // any unknown option (except for end-of-options, \"--\")\n if (arg !== '--' && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {\n pushPositional(arg);\n // ---, ---=, ----, etc,\n }\n else if (truncatedArg.match(/^---+(=|$)/)) {\n // options without key name are invalid.\n pushPositional(arg);\n continue;\n // -- separated by =\n }\n else if (arg.match(/^--.+=/) || (!configuration['short-option-groups'] && arg.match(/^-.+=/))) {\n // Using [\\s\\S] instead of . because js doesn't support the\n // 'dotall' regex modifier. See:\n // http://stackoverflow.com/a/1068308/13216\n m = arg.match(/^--?([^=]+)=([\\s\\S]*)$/);\n // arrays format = '--f=a b c'\n if (m !== null && Array.isArray(m) && m.length >= 3) {\n if (checkAllAliases(m[1], flags.arrays)) {\n i = eatArray(i, m[1], args, m[2]);\n }\n else if (checkAllAliases(m[1], flags.nargs) !== false) {\n // nargs format = '--f=monkey washing cat'\n i = eatNargs(i, m[1], args, m[2]);\n }\n else {\n setArg(m[1], m[2], true);\n }\n }\n }\n else if (arg.match(negatedBoolean) && configuration['boolean-negation']) {\n m = arg.match(negatedBoolean);\n if (m !== null && Array.isArray(m) && m.length >= 2) {\n key = m[1];\n setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false);\n }\n // -- separated by space.\n }\n else if (arg.match(/^--.+/) || (!configuration['short-option-groups'] && arg.match(/^-[^-]+/))) {\n m = arg.match(/^--?(.+)/);\n if (m !== null && Array.isArray(m) && m.length >= 2) {\n key = m[1];\n if (checkAllAliases(key, flags.arrays)) {\n // array format = '--foo a b c'\n i = eatArray(i, key, args);\n }\n else if (checkAllAliases(key, flags.nargs) !== false) {\n // nargs format = '--foo a b c'\n // should be truthy even if: flags.nargs[key] === 0\n i = eatNargs(i, key, args);\n }\n else {\n next = args[i + 1];\n if (next !== undefined && (!next.match(/^-/) ||\n next.match(negative)) &&\n !checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts)) {\n setArg(key, next);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next);\n i++;\n }\n else {\n setArg(key, defaultValue(key));\n }\n }\n }\n // dot-notation flag separated by '='.\n }\n else if (arg.match(/^-.\\..+=/)) {\n m = arg.match(/^-([^=]+)=([\\s\\S]*)$/);\n if (m !== null && Array.isArray(m) && m.length >= 3) {\n setArg(m[1], m[2]);\n }\n // dot-notation flag separated by space.\n }\n else if (arg.match(/^-.\\..+/) && !arg.match(negative)) {\n next = args[i + 1];\n m = arg.match(/^-(.\\..+)/);\n if (m !== null && Array.isArray(m) && m.length >= 2) {\n key = m[1];\n if (next !== undefined && !next.match(/^-/) &&\n !checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts)) {\n setArg(key, next);\n i++;\n }\n else {\n setArg(key, defaultValue(key));\n }\n }\n }\n else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {\n letters = arg.slice(1, -1).split('');\n broken = false;\n for (let j = 0; j < letters.length; j++) {\n next = arg.slice(j + 2);\n if (letters[j + 1] && letters[j + 1] === '=') {\n value = arg.slice(j + 3);\n key = letters[j];\n if (checkAllAliases(key, flags.arrays)) {\n // array format = '-f=a b c'\n i = eatArray(i, key, args, value);\n }\n else if (checkAllAliases(key, flags.nargs) !== false) {\n // nargs format = '-f=monkey washing cat'\n i = eatNargs(i, key, args, value);\n }\n else {\n setArg(key, value);\n }\n broken = true;\n break;\n }\n if (next === '-') {\n setArg(letters[j], next);\n continue;\n }\n // current letter is an alphabetic character and next value is a number\n if (/[A-Za-z]/.test(letters[j]) &&\n /^-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next) &&\n checkAllAliases(next, flags.bools) === false) {\n setArg(letters[j], next);\n broken = true;\n break;\n }\n if (letters[j + 1] && letters[j + 1].match(/\\W/)) {\n setArg(letters[j], next);\n broken = true;\n break;\n }\n else {\n setArg(letters[j], defaultValue(letters[j]));\n }\n }\n key = arg.slice(-1)[0];\n if (!broken && key !== '-') {\n if (checkAllAliases(key, flags.arrays)) {\n // array format = '-f a b c'\n i = eatArray(i, key, args);\n }\n else if (checkAllAliases(key, flags.nargs) !== false) {\n // nargs format = '-f a b c'\n // should be truthy even if: flags.nargs[key] === 0\n i = eatNargs(i, key, args);\n }\n else {\n next = args[i + 1];\n if (next !== undefined && (!/^(-|--)[^-]/.test(next) ||\n next.match(negative)) &&\n !checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts)) {\n setArg(key, next);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next);\n i++;\n }\n else {\n setArg(key, defaultValue(key));\n }\n }\n }\n }\n else if (arg.match(/^-[0-9]$/) &&\n arg.match(negative) &&\n checkAllAliases(arg.slice(1), flags.bools)) {\n // single-digit boolean alias, e.g: xargs -0\n key = arg.slice(1);\n setArg(key, defaultValue(key));\n }\n else if (arg === '--') {\n notFlags = args.slice(i + 1);\n break;\n }\n else if (configuration['halt-at-non-option']) {\n notFlags = args.slice(i);\n break;\n }\n else {\n pushPositional(arg);\n }\n }\n // order of precedence:\n // 1. command line arg\n // 2. value from env var\n // 3. value from config file\n // 4. value from config objects\n // 5. configured default value\n applyEnvVars(argv, true); // special case: check env vars that point to config file\n applyEnvVars(argv, false);\n setConfig(argv);\n setConfigObjects();\n applyDefaultsAndAliases(argv, flags.aliases, defaults, true);\n applyCoercions(argv);\n if (configuration['set-placeholder-key'])\n setPlaceholderKeys(argv);\n // for any counts either not in args or without an explicit default, set to 0\n Object.keys(flags.counts).forEach(function (key) {\n if (!hasKey(argv, key.split('.')))\n setArg(key, 0);\n });\n // '--' defaults to undefined.\n if (notFlagsOption && notFlags.length)\n argv[notFlagsArgv] = [];\n notFlags.forEach(function (key) {\n argv[notFlagsArgv].push(key);\n });\n if (configuration['camel-case-expansion'] && configuration['strip-dashed']) {\n Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => {\n delete argv[key];\n });\n }\n if (configuration['strip-aliased']) {\n ;\n [].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => {\n if (configuration['camel-case-expansion'] && alias.includes('-')) {\n delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')];\n }\n delete argv[alias];\n });\n }\n // Push argument into positional array, applying numeric coercion:\n function pushPositional(arg) {\n const maybeCoercedNumber = maybeCoerceNumber('_', arg);\n if (typeof maybeCoercedNumber === 'string' || typeof maybeCoercedNumber === 'number') {\n argv._.push(maybeCoercedNumber);\n }\n }\n // how many arguments should we consume, based\n // on the nargs option?\n function eatNargs(i, key, args, argAfterEqualSign) {\n let ii;\n let toEat = checkAllAliases(key, flags.nargs);\n // NaN has a special meaning for the array type, indicating that one or\n // more values are expected.\n toEat = typeof toEat !== 'number' || isNaN(toEat) ? 1 : toEat;\n if (toEat === 0) {\n if (!isUndefined(argAfterEqualSign)) {\n error = Error(__('Argument unexpected for: %s', key));\n }\n setArg(key, defaultValue(key));\n return i;\n }\n let available = isUndefined(argAfterEqualSign) ? 0 : 1;\n if (configuration['nargs-eats-options']) {\n // classic behavior, yargs eats positional and dash arguments.\n if (args.length - (i + 1) + available < toEat) {\n error = Error(__('Not enough arguments following: %s', key));\n }\n available = toEat;\n }\n else {\n // nargs will not consume flag arguments, e.g., -abc, --foo,\n // and terminates when one is observed.\n for (ii = i + 1; ii < args.length; ii++) {\n if (!args[ii].match(/^-[^0-9]/) || args[ii].match(negative) || isUnknownOptionAsArg(args[ii]))\n available++;\n else\n break;\n }\n if (available < toEat)\n error = Error(__('Not enough arguments following: %s', key));\n }\n let consumed = Math.min(available, toEat);\n if (!isUndefined(argAfterEqualSign) && consumed > 0) {\n setArg(key, argAfterEqualSign);\n consumed--;\n }\n for (ii = i + 1; ii < (consumed + i + 1); ii++) {\n setArg(key, args[ii]);\n }\n return (i + consumed);\n }\n // if an option is an array, eat all non-hyphenated arguments\n // following it... YUM!\n // e.g., --foo apple banana cat becomes [\"apple\", \"banana\", \"cat\"]\n function eatArray(i, key, args, argAfterEqualSign) {\n let argsToSet = [];\n let next = argAfterEqualSign || args[i + 1];\n // If both array and nargs are configured, enforce the nargs count:\n const nargsCount = checkAllAliases(key, flags.nargs);\n if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) {\n argsToSet.push(true);\n }\n else if (isUndefined(next) ||\n (isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) {\n // for keys without value ==> argsToSet remains an empty []\n // set user default value, if available\n if (defaults[key] !== undefined) {\n const defVal = defaults[key];\n argsToSet = Array.isArray(defVal) ? defVal : [defVal];\n }\n }\n else {\n // value in --option=value is eaten as is\n if (!isUndefined(argAfterEqualSign)) {\n argsToSet.push(processValue(key, argAfterEqualSign, true));\n }\n for (let ii = i + 1; ii < args.length; ii++) {\n if ((!configuration['greedy-arrays'] && argsToSet.length > 0) ||\n (nargsCount && typeof nargsCount === 'number' && argsToSet.length >= nargsCount))\n break;\n next = args[ii];\n if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))\n break;\n i = ii;\n argsToSet.push(processValue(key, next, inputIsString));\n }\n }\n // If both array and nargs are configured, create an error if less than\n // nargs positionals were found. NaN has special meaning, indicating\n // that at least one value is required (more are okay).\n if (typeof nargsCount === 'number' && ((nargsCount && argsToSet.length < nargsCount) ||\n (isNaN(nargsCount) && argsToSet.length === 0))) {\n error = Error(__('Not enough arguments following: %s', key));\n }\n setArg(key, argsToSet);\n return i;\n }\n function setArg(key, val, shouldStripQuotes = inputIsString) {\n if (/-/.test(key) && configuration['camel-case-expansion']) {\n const alias = key.split('.').map(function (prop) {\n return camelCase(prop);\n }).join('.');\n addNewAlias(key, alias);\n }\n const value = processValue(key, val, shouldStripQuotes);\n const splitKey = key.split('.');\n setKey(argv, splitKey, value);\n // handle populating aliases of the full key\n if (flags.aliases[key]) {\n flags.aliases[key].forEach(function (x) {\n const keyProperties = x.split('.');\n setKey(argv, keyProperties, value);\n });\n }\n // handle populating aliases of the first element of the dot-notation key\n if (splitKey.length > 1 && configuration['dot-notation']) {\n ;\n (flags.aliases[splitKey[0]] || []).forEach(function (x) {\n let keyProperties = x.split('.');\n // expand alias with nested objects in key\n const a = [].concat(splitKey);\n a.shift(); // nuke the old key.\n keyProperties = keyProperties.concat(a);\n // populate alias only if is not already an alias of the full key\n // (already populated above)\n if (!(flags.aliases[key] || []).includes(keyProperties.join('.'))) {\n setKey(argv, keyProperties, value);\n }\n });\n }\n // Set normalize getter and setter when key is in 'normalize' but isn't an array\n if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {\n const keys = [key].concat(flags.aliases[key] || []);\n keys.forEach(function (key) {\n Object.defineProperty(argvReturn, key, {\n enumerable: true,\n get() {\n return val;\n },\n set(value) {\n val = typeof value === 'string' ? mixin.normalize(value) : value;\n }\n });\n });\n }\n }\n function addNewAlias(key, alias) {\n if (!(flags.aliases[key] && flags.aliases[key].length)) {\n flags.aliases[key] = [alias];\n newAliases[alias] = true;\n }\n if (!(flags.aliases[alias] && flags.aliases[alias].length)) {\n addNewAlias(alias, key);\n }\n }\n function processValue(key, val, shouldStripQuotes) {\n // strings may be quoted, clean this up as we assign values.\n if (shouldStripQuotes) {\n val = stripQuotes(val);\n }\n // handle parsing boolean arguments --foo=true --bar false.\n if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {\n if (typeof val === 'string')\n val = val === 'true';\n }\n let value = Array.isArray(val)\n ? val.map(function (v) { return maybeCoerceNumber(key, v); })\n : maybeCoerceNumber(key, val);\n // increment a count given as arg (either no value or value parsed as boolean)\n if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) {\n value = increment();\n }\n // Set normalized value when key is in 'normalize' and in 'arrays'\n if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {\n if (Array.isArray(val))\n value = val.map((val) => { return mixin.normalize(val); });\n else\n value = mixin.normalize(val);\n }\n return value;\n }\n function maybeCoerceNumber(key, value) {\n if (!configuration['parse-positional-numbers'] && key === '_')\n return value;\n if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) {\n const shouldCoerceNumber = looksLikeNumber(value) && configuration['parse-numbers'] && (Number.isSafeInteger(Math.floor(parseFloat(`${value}`))));\n if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) {\n value = Number(value);\n }\n }\n return value;\n }\n // set args from config.json file, this should be\n // applied last so that defaults can be applied.\n function setConfig(argv) {\n const configLookup = Object.create(null);\n // expand defaults/aliases, in-case any happen to reference\n // the config.json file.\n applyDefaultsAndAliases(configLookup, flags.aliases, defaults);\n Object.keys(flags.configs).forEach(function (configKey) {\n const configPath = argv[configKey] || configLookup[configKey];\n if (configPath) {\n try {\n let config = null;\n const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath);\n const resolveConfig = flags.configs[configKey];\n if (typeof resolveConfig === 'function') {\n try {\n config = resolveConfig(resolvedConfigPath);\n }\n catch (e) {\n config = e;\n }\n if (config instanceof Error) {\n error = config;\n return;\n }\n }\n else {\n config = mixin.require(resolvedConfigPath);\n }\n setConfigObject(config);\n }\n catch (ex) {\n // Deno will receive a PermissionDenied error if an attempt is\n // made to load config without the --allow-read flag:\n if (ex.name === 'PermissionDenied')\n error = ex;\n else if (argv[configKey])\n error = Error(__('Invalid JSON config file: %s', configPath));\n }\n }\n });\n }\n // set args from config object.\n // it recursively checks nested objects.\n function setConfigObject(config, prev) {\n Object.keys(config).forEach(function (key) {\n const value = config[key];\n const fullKey = prev ? prev + '.' + key : key;\n // if the value is an inner object and we have dot-notation\n // enabled, treat inner objects in config the same as\n // heavily nested dot notations (foo.bar.apple).\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) {\n // if the value is an object but not an array, check nested object\n setConfigObject(value, fullKey);\n }\n else {\n // setting arguments via CLI takes precedence over\n // values within the config file.\n if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) {\n setArg(fullKey, value);\n }\n }\n });\n }\n // set all config objects passed in opts\n function setConfigObjects() {\n if (typeof configObjects !== 'undefined') {\n configObjects.forEach(function (configObject) {\n setConfigObject(configObject);\n });\n }\n }\n function applyEnvVars(argv, configOnly) {\n if (typeof envPrefix === 'undefined')\n return;\n const prefix = typeof envPrefix === 'string' ? envPrefix : '';\n const env = mixin.env();\n Object.keys(env).forEach(function (envVar) {\n if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {\n // get array of nested keys and convert them to camel case\n const keys = envVar.split('__').map(function (key, i) {\n if (i === 0) {\n key = key.substring(prefix.length);\n }\n return camelCase(key);\n });\n if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys)) {\n setArg(keys.join('.'), env[envVar]);\n }\n }\n });\n }\n function applyCoercions(argv) {\n let coerce;\n const applied = new Set();\n Object.keys(argv).forEach(function (key) {\n if (!applied.has(key)) { // If we haven't already coerced this option via one of its aliases\n coerce = checkAllAliases(key, flags.coercions);\n if (typeof coerce === 'function') {\n try {\n const value = maybeCoerceNumber(key, coerce(argv[key]));\n ([].concat(flags.aliases[key] || [], key)).forEach(ali => {\n applied.add(ali);\n argv[ali] = value;\n });\n }\n catch (err) {\n error = err;\n }\n }\n }\n });\n }\n function setPlaceholderKeys(argv) {\n flags.keys.forEach((key) => {\n // don't set placeholder keys for dot notation options 'foo.bar'.\n if (~key.indexOf('.'))\n return;\n if (typeof argv[key] === 'undefined')\n argv[key] = undefined;\n });\n return argv;\n }\n function applyDefaultsAndAliases(obj, aliases, defaults, canLog = false) {\n Object.keys(defaults).forEach(function (key) {\n if (!hasKey(obj, key.split('.'))) {\n setKey(obj, key.split('.'), defaults[key]);\n if (canLog)\n defaulted[key] = true;\n (aliases[key] || []).forEach(function (x) {\n if (hasKey(obj, x.split('.')))\n return;\n setKey(obj, x.split('.'), defaults[key]);\n });\n }\n });\n }\n function hasKey(obj, keys) {\n let o = obj;\n if (!configuration['dot-notation'])\n keys = [keys.join('.')];\n keys.slice(0, -1).forEach(function (key) {\n o = (o[key] || {});\n });\n const key = keys[keys.length - 1];\n if (typeof o !== 'object')\n return false;\n else\n return key in o;\n }\n function setKey(obj, keys, value) {\n let o = obj;\n if (!configuration['dot-notation'])\n keys = [keys.join('.')];\n keys.slice(0, -1).forEach(function (key) {\n // TODO(bcoe): in the next major version of yargs, switch to\n // Object.create(null) for dot notation:\n key = sanitizeKey(key);\n if (typeof o === 'object' && o[key] === undefined) {\n o[key] = {};\n }\n if (typeof o[key] !== 'object' || Array.isArray(o[key])) {\n // ensure that o[key] is an array, and that the last item is an empty object.\n if (Array.isArray(o[key])) {\n o[key].push({});\n }\n else {\n o[key] = [o[key], {}];\n }\n // we want to update the empty object at the end of the o[key] array, so set o to that object\n o = o[key][o[key].length - 1];\n }\n else {\n o = o[key];\n }\n });\n // TODO(bcoe): in the next major version of yargs, switch to\n // Object.create(null) for dot notation:\n const key = sanitizeKey(keys[keys.length - 1]);\n const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays);\n const isValueArray = Array.isArray(value);\n let duplicate = configuration['duplicate-arguments-array'];\n // nargs has higher priority than duplicate\n if (!duplicate && checkAllAliases(key, flags.nargs)) {\n duplicate = true;\n if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) {\n o[key] = undefined;\n }\n }\n if (value === increment()) {\n o[key] = increment(o[key]);\n }\n else if (Array.isArray(o[key])) {\n if (duplicate && isTypeArray && isValueArray) {\n o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]);\n }\n else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {\n o[key] = value;\n }\n else {\n o[key] = o[key].concat([value]);\n }\n }\n else if (o[key] === undefined && isTypeArray) {\n o[key] = isValueArray ? value : [value];\n }\n else if (duplicate && !(o[key] === undefined ||\n checkAllAliases(key, flags.counts) ||\n checkAllAliases(key, flags.bools))) {\n o[key] = [o[key], value];\n }\n else {\n o[key] = value;\n }\n }\n // extend the aliases list with inferred aliases.\n function extendAliases(...args) {\n args.forEach(function (obj) {\n Object.keys(obj || {}).forEach(function (key) {\n // short-circuit if we've already added a key\n // to the aliases array, for example it might\n // exist in both 'opts.default' and 'opts.key'.\n if (flags.aliases[key])\n return;\n flags.aliases[key] = [].concat(aliases[key] || []);\n // For \"--option-name\", also set argv.optionName\n flags.aliases[key].concat(key).forEach(function (x) {\n if (/-/.test(x) && configuration['camel-case-expansion']) {\n const c = camelCase(x);\n if (c !== key && flags.aliases[key].indexOf(c) === -1) {\n flags.aliases[key].push(c);\n newAliases[c] = true;\n }\n }\n });\n // For \"--optionName\", also set argv['option-name']\n flags.aliases[key].concat(key).forEach(function (x) {\n if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) {\n const c = decamelize(x, '-');\n if (c !== key && flags.aliases[key].indexOf(c) === -1) {\n flags.aliases[key].push(c);\n newAliases[c] = true;\n }\n }\n });\n flags.aliases[key].forEach(function (x) {\n flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) {\n return x !== y;\n }));\n });\n });\n });\n }\n function checkAllAliases(key, flag) {\n const toCheck = [].concat(flags.aliases[key] || [], key);\n const keys = Object.keys(flag);\n const setAlias = toCheck.find(key => keys.includes(key));\n return setAlias ? flag[setAlias] : false;\n }\n function hasAnyFlag(key) {\n const flagsKeys = Object.keys(flags);\n const toCheck = [].concat(flagsKeys.map(k => flags[k]));\n return toCheck.some(function (flag) {\n return Array.isArray(flag) ? flag.includes(key) : flag[key];\n });\n }\n function hasFlagsMatching(arg, ...patterns) {\n const toCheck = [].concat(...patterns);\n return toCheck.some(function (pattern) {\n const match = arg.match(pattern);\n return match && hasAnyFlag(match[1]);\n });\n }\n // based on a simplified version of the short flag group parsing logic\n function hasAllShortFlags(arg) {\n // if this is a negative number, or doesn't start with a single hyphen, it's not a short flag group\n if (arg.match(negative) || !arg.match(/^-[^-]+/)) {\n return false;\n }\n let hasAllFlags = true;\n let next;\n const letters = arg.slice(1).split('');\n for (let j = 0; j < letters.length; j++) {\n next = arg.slice(j + 2);\n if (!hasAnyFlag(letters[j])) {\n hasAllFlags = false;\n break;\n }\n if ((letters[j + 1] && letters[j + 1] === '=') ||\n next === '-' ||\n (/[A-Za-z]/.test(letters[j]) && /^-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) ||\n (letters[j + 1] && letters[j + 1].match(/\\W/))) {\n break;\n }\n }\n return hasAllFlags;\n }\n function isUnknownOptionAsArg(arg) {\n return configuration['unknown-options-as-args'] && isUnknownOption(arg);\n }\n function isUnknownOption(arg) {\n arg = arg.replace(/^-{3,}/, '--');\n // ignore negative numbers\n if (arg.match(negative)) {\n return false;\n }\n // if this is a short option group and all of them are configured, it isn't unknown\n if (hasAllShortFlags(arg)) {\n return false;\n }\n // e.g. '--count=2'\n const flagWithEquals = /^-+([^=]+?)=[\\s\\S]*$/;\n // e.g. '-a' or '--arg'\n const normalFlag = /^-+([^=]+?)$/;\n // e.g. '-a-'\n const flagEndingInHyphen = /^-+([^=]+?)-$/;\n // e.g. '-abc123'\n const flagEndingInDigits = /^-+([^=]+?\\d+)$/;\n // e.g. '-a/usr/local'\n const flagEndingInNonWordCharacters = /^-+([^=]+?)\\W+.*$/;\n // check the different types of flag styles, including negatedBoolean, a pattern defined near the start of the parse method\n return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters);\n }\n // make a best effort to pick a default value\n // for an option based on name and type.\n function defaultValue(key) {\n if (!checkAllAliases(key, flags.bools) &&\n !checkAllAliases(key, flags.counts) &&\n `${key}` in defaults) {\n return defaults[key];\n }\n else {\n return defaultForType(guessType(key));\n }\n }\n // return a default value, given the type of a flag.,\n function defaultForType(type) {\n const def = {\n [DefaultValuesForTypeKey.BOOLEAN]: true,\n [DefaultValuesForTypeKey.STRING]: '',\n [DefaultValuesForTypeKey.NUMBER]: undefined,\n [DefaultValuesForTypeKey.ARRAY]: []\n };\n return def[type];\n }\n // given a flag, enforce a default type.\n function guessType(key) {\n let type = DefaultValuesForTypeKey.BOOLEAN;\n if (checkAllAliases(key, flags.strings))\n type = DefaultValuesForTypeKey.STRING;\n else if (checkAllAliases(key, flags.numbers))\n type = DefaultValuesForTypeKey.NUMBER;\n else if (checkAllAliases(key, flags.bools))\n type = DefaultValuesForTypeKey.BOOLEAN;\n else if (checkAllAliases(key, flags.arrays))\n type = DefaultValuesForTypeKey.ARRAY;\n return type;\n }\n function isUndefined(num) {\n return num === undefined;\n }\n // check user configuration settings for inconsistencies\n function checkConfiguration() {\n // count keys should not be set as array/narg\n Object.keys(flags.counts).find(key => {\n if (checkAllAliases(key, flags.arrays)) {\n error = Error(__('Invalid configuration: %s, opts.count excludes opts.array.', key));\n return true;\n }\n else if (checkAllAliases(key, flags.nargs)) {\n error = Error(__('Invalid configuration: %s, opts.count excludes opts.narg.', key));\n return true;\n }\n return false;\n });\n }\n return {\n aliases: Object.assign({}, flags.aliases),\n argv: Object.assign(argvReturn, argv),\n configuration: configuration,\n defaulted: Object.assign({}, defaulted),\n error: error,\n newAliases: Object.assign({}, newAliases)\n };\n }\n}\n// if any aliases reference each other, we should\n// merge them together.\nfunction combineAliases(aliases) {\n const aliasArrays = [];\n const combined = Object.create(null);\n let change = true;\n // turn alias lookup hash {key: ['alias1', 'alias2']} into\n // a simple array ['key', 'alias1', 'alias2']\n Object.keys(aliases).forEach(function (key) {\n aliasArrays.push([].concat(aliases[key], key));\n });\n // combine arrays until zero changes are\n // made in an iteration.\n while (change) {\n change = false;\n for (let i = 0; i < aliasArrays.length; i++) {\n for (let ii = i + 1; ii < aliasArrays.length; ii++) {\n const intersect = aliasArrays[i].filter(function (v) {\n return aliasArrays[ii].indexOf(v) !== -1;\n });\n if (intersect.length) {\n aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]);\n aliasArrays.splice(ii, 1);\n change = true;\n break;\n }\n }\n }\n }\n // map arrays back to the hash-lookup (de-dupe while\n // we're at it).\n aliasArrays.forEach(function (aliasArray) {\n aliasArray = aliasArray.filter(function (v, i, self) {\n return self.indexOf(v) === i;\n });\n const lastAlias = aliasArray.pop();\n if (lastAlias !== undefined && typeof lastAlias === 'string') {\n combined[lastAlias] = aliasArray;\n }\n });\n return combined;\n}\n// this function should only be called when a count is given as an arg\n// it is NOT called to set a default value\n// thus we can start the count at 1 instead of 0\nfunction increment(orig) {\n return orig !== undefined ? orig + 1 : 1;\n}\n// TODO(bcoe): in the next major version of yargs, switch to\n// Object.create(null) for dot notation:\nfunction sanitizeKey(key) {\n if (key === '__proto__')\n return '___proto___';\n return key;\n}\nfunction stripQuotes(val) {\n return (typeof val === 'string' &&\n (val[0] === \"'\" || val[0] === '\"') &&\n val[val.length - 1] === val[0])\n ? val.substring(1, val.length - 1)\n : val;\n}\n","/**\n * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js\n * CJS and ESM environments.\n *\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nvar _a, _b, _c;\nimport { format } from 'util';\nimport { normalize, resolve } from 'path';\nimport { camelCase, decamelize, looksLikeNumber } from './string-utils.js';\nimport { YargsParser } from './yargs-parser.js';\nimport { readFileSync } from 'fs';\n// See https://github.com/yargs/yargs-parser#supported-nodejs-versions for our\n// version support policy. The YARGS_MIN_NODE_VERSION is used for testing only.\nconst minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION)\n ? Number(process.env.YARGS_MIN_NODE_VERSION)\n : 12;\nconst nodeVersion = (_b = (_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== null && _b !== void 0 ? _b : (_c = process === null || process === void 0 ? void 0 : process.version) === null || _c === void 0 ? void 0 : _c.slice(1);\nif (nodeVersion) {\n const major = Number(nodeVersion.match(/^([^.]+)/)[1]);\n if (major < minNodeVersion) {\n throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);\n }\n}\n// Creates a yargs-parser instance using Node.js standard libraries:\nconst env = process ? process.env : {};\nconst parser = new YargsParser({\n cwd: process.cwd,\n env: () => {\n return env;\n },\n format,\n normalize,\n resolve,\n // TODO: figure out a way to combine ESM and CJS coverage, such that\n // we can exercise all the lines below:\n require: (path) => {\n if (typeof require !== 'undefined') {\n return require(path);\n }\n else if (path.match(/\\.json$/)) {\n // Addresses: https://github.com/yargs/yargs/issues/2040\n return JSON.parse(readFileSync(path, 'utf8'));\n }\n else {\n throw Error('only .json config files are supported in ESM');\n }\n }\n});\nconst yargsParser = function Parser(args, opts) {\n const result = parser.parse(args.slice(), opts);\n return result.argv;\n};\nyargsParser.detailed = function (args, opts) {\n return parser.parse(args.slice(), opts);\n};\nyargsParser.camelCase = camelCase;\nyargsParser.decamelize = decamelize;\nyargsParser.looksLikeNumber = looksLikeNumber;\nexport default yargsParser;\n","import { readFileSync, statSync, writeFile } from 'fs';\nimport { format } from 'util';\nimport { resolve } from 'path';\nexport default {\n fs: {\n readFileSync,\n writeFile\n },\n format,\n resolve,\n exists: (file) => {\n try {\n return statSync(file).isFile();\n }\n catch (err) {\n return false;\n }\n }\n};\n","let shim;\nclass Y18N {\n constructor(opts) {\n // configurable options.\n opts = opts || {};\n this.directory = opts.directory || './locales';\n this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true;\n this.locale = opts.locale || 'en';\n this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true;\n // internal stuff.\n this.cache = Object.create(null);\n this.writeQueue = [];\n }\n __(...args) {\n if (typeof arguments[0] !== 'string') {\n return this._taggedLiteral(arguments[0], ...arguments);\n }\n const str = args.shift();\n let cb = function () { }; // start with noop.\n if (typeof args[args.length - 1] === 'function')\n cb = args.pop();\n cb = cb || function () { }; // noop.\n if (!this.cache[this.locale])\n this._readLocaleFile();\n // we've observed a new string, update the language file.\n if (!this.cache[this.locale][str] && this.updateFiles) {\n this.cache[this.locale][str] = str;\n // include the current directory and locale,\n // since these values could change before the\n // write is performed.\n this._enqueueWrite({\n directory: this.directory,\n locale: this.locale,\n cb\n });\n }\n else {\n cb();\n }\n return shim.format.apply(shim.format, [this.cache[this.locale][str] || str].concat(args));\n }\n __n() {\n const args = Array.prototype.slice.call(arguments);\n const singular = args.shift();\n const plural = args.shift();\n const quantity = args.shift();\n let cb = function () { }; // start with noop.\n if (typeof args[args.length - 1] === 'function')\n cb = args.pop();\n if (!this.cache[this.locale])\n this._readLocaleFile();\n let str = quantity === 1 ? singular : plural;\n if (this.cache[this.locale][singular]) {\n const entry = this.cache[this.locale][singular];\n str = entry[quantity === 1 ? 'one' : 'other'];\n }\n // we've observed a new string, update the language file.\n if (!this.cache[this.locale][singular] && this.updateFiles) {\n this.cache[this.locale][singular] = {\n one: singular,\n other: plural\n };\n // include the current directory and locale,\n // since these values could change before the\n // write is performed.\n this._enqueueWrite({\n directory: this.directory,\n locale: this.locale,\n cb\n });\n }\n else {\n cb();\n }\n // if a %d placeholder is provided, add quantity\n // to the arguments expanded by util.format.\n const values = [str];\n if (~str.indexOf('%d'))\n values.push(quantity);\n return shim.format.apply(shim.format, values.concat(args));\n }\n setLocale(locale) {\n this.locale = locale;\n }\n getLocale() {\n return this.locale;\n }\n updateLocale(obj) {\n if (!this.cache[this.locale])\n this._readLocaleFile();\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n this.cache[this.locale][key] = obj[key];\n }\n }\n }\n _taggedLiteral(parts, ...args) {\n let str = '';\n parts.forEach(function (part, i) {\n const arg = args[i + 1];\n str += part;\n if (typeof arg !== 'undefined') {\n str += '%s';\n }\n });\n return this.__.apply(this, [str].concat([].slice.call(args, 1)));\n }\n _enqueueWrite(work) {\n this.writeQueue.push(work);\n if (this.writeQueue.length === 1)\n this._processWriteQueue();\n }\n _processWriteQueue() {\n const _this = this;\n const work = this.writeQueue[0];\n // destructure the enqueued work.\n const directory = work.directory;\n const locale = work.locale;\n const cb = work.cb;\n const languageFile = this._resolveLocaleFile(directory, locale);\n const serializedLocale = JSON.stringify(this.cache[locale], null, 2);\n shim.fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) {\n _this.writeQueue.shift();\n if (_this.writeQueue.length > 0)\n _this._processWriteQueue();\n cb(err);\n });\n }\n _readLocaleFile() {\n let localeLookup = {};\n const languageFile = this._resolveLocaleFile(this.directory, this.locale);\n try {\n // When using a bundler such as webpack, readFileSync may not be defined:\n if (shim.fs.readFileSync) {\n localeLookup = JSON.parse(shim.fs.readFileSync(languageFile, 'utf-8'));\n }\n }\n catch (err) {\n if (err instanceof SyntaxError) {\n err.message = 'syntax error in ' + languageFile;\n }\n if (err.code === 'ENOENT')\n localeLookup = {};\n else\n throw err;\n }\n this.cache[this.locale] = localeLookup;\n }\n _resolveLocaleFile(directory, locale) {\n let file = shim.resolve(directory, './', locale + '.json');\n if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) {\n // attempt fallback to language only\n const languageFile = shim.resolve(directory, './', locale.split('_')[0] + '.json');\n if (this._fileExistsSync(languageFile))\n file = languageFile;\n }\n return file;\n }\n _fileExistsSync(file) {\n return shim.exists(file);\n }\n}\nexport function y18n(opts, _shim) {\n shim = _shim;\n const y18n = new Y18N(opts);\n return {\n __: y18n.__.bind(y18n),\n __n: y18n.__n.bind(y18n),\n setLocale: y18n.setLocale.bind(y18n),\n getLocale: y18n.getLocale.bind(y18n),\n updateLocale: y18n.updateLocale.bind(y18n),\n locale: y18n.locale\n };\n}\n","import shim from './build/lib/platform-shims/node.js'\nimport { y18n as _y18n } from './build/lib/index.js'\n\nconst y18n = (opts) => {\n return _y18n(opts, shim)\n}\n\nexport default y18n\n","'use strict'\n\nimport { notStrictEqual, strictEqual } from 'assert'\nimport cliui from 'cliui'\nimport escalade from 'escalade/sync'\nimport { inspect } from 'util'\nimport { readFileSync } from 'fs'\nimport { fileURLToPath } from 'url';\nimport Parser from 'yargs-parser'\nimport { basename, dirname, extname, relative, resolve } from 'path'\nimport { getProcessArgvBin } from '../../build/lib/utils/process-argv.js'\nimport { YError } from '../../build/lib/yerror.js'\nimport y18n from 'y18n'\n\nconst REQUIRE_ERROR = 'require is not supported by ESM'\nconst REQUIRE_DIRECTORY_ERROR = 'loading a directory of commands is not supported yet for ESM'\n\nlet __dirname;\ntry {\n __dirname = fileURLToPath(import.meta.url);\n} catch (e) {\n __dirname = process.cwd();\n}\nconst mainFilename = __dirname.substring(0, __dirname.lastIndexOf('node_modules'));\n\nexport default {\n assert: {\n notStrictEqual,\n strictEqual\n },\n cliui,\n findUp: escalade,\n getEnv: (key) => {\n return process.env[key]\n },\n inspect,\n getCallerFile: () => {\n throw new YError(REQUIRE_DIRECTORY_ERROR)\n },\n getProcessArgvBin,\n mainFilename: mainFilename || process.cwd(),\n Parser,\n path: {\n basename,\n dirname,\n extname,\n relative,\n resolve\n },\n process: {\n argv: () => process.argv,\n cwd: process.cwd,\n emitWarning: (warning, type) => process.emitWarning(warning, type),\n execPath: () => process.execPath,\n exit: process.exit,\n nextTick: process.nextTick,\n stdColumns: typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null\n },\n readFileSync,\n require: () => {\n throw new YError(REQUIRE_ERROR)\n },\n requireDirectory: () => {\n throw new YError(REQUIRE_DIRECTORY_ERROR)\n },\n stringWidth: (str) => {\n return [...str].length\n },\n y18n: y18n({\n directory: resolve(__dirname, '../../../locales'),\n updateFiles: false\n })\n}\n","// Generated by CoffeeScript 1.12.7\n(function() {\n exports.defaults = {\n \"0.1\": {\n explicitCharkey: false,\n trim: true,\n normalize: true,\n normalizeTags: false,\n attrkey: \"@\",\n charkey: \"#\",\n explicitArray: false,\n ignoreAttrs: false,\n mergeAttrs: false,\n explicitRoot: false,\n validator: null,\n xmlns: false,\n explicitChildren: false,\n childkey: '@@',\n charsAsChildren: false,\n includeWhiteChars: false,\n async: false,\n strict: true,\n attrNameProcessors: null,\n attrValueProcessors: null,\n tagNameProcessors: null,\n valueProcessors: null,\n emptyTag: ''\n },\n \"0.2\": {\n explicitCharkey: false,\n trim: false,\n normalize: false,\n normalizeTags: false,\n attrkey: \"$\",\n charkey: \"_\",\n explicitArray: true,\n ignoreAttrs: false,\n mergeAttrs: false,\n explicitRoot: true,\n validator: null,\n xmlns: false,\n explicitChildren: false,\n preserveChildrenOrder: false,\n childkey: '$$',\n charsAsChildren: false,\n includeWhiteChars: false,\n async: false,\n strict: true,\n attrNameProcessors: null,\n attrValueProcessors: null,\n tagNameProcessors: null,\n valueProcessors: null,\n rootName: 'root',\n xmldec: {\n 'version': '1.0',\n 'encoding': 'UTF-8',\n 'standalone': true\n },\n doctype: null,\n renderOpts: {\n 'pretty': true,\n 'indent': ' ',\n 'newline': '\\n'\n },\n headless: false,\n chunkSize: 10000,\n emptyTag: '',\n cdata: false\n }\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject,\n slice = [].slice,\n hasProp = {}.hasOwnProperty;\n\n assign = function() {\n var i, key, len, source, sources, target;\n target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n if (isFunction(Object.assign)) {\n Object.assign.apply(null, arguments);\n } else {\n for (i = 0, len = sources.length; i < len; i++) {\n source = sources[i];\n if (source != null) {\n for (key in source) {\n if (!hasProp.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n };\n\n isFunction = function(val) {\n return !!val && Object.prototype.toString.call(val) === '[object Function]';\n };\n\n isObject = function(val) {\n var ref;\n return !!val && ((ref = typeof val) === 'function' || ref === 'object');\n };\n\n isArray = function(val) {\n if (isFunction(Array.isArray)) {\n return Array.isArray(val);\n } else {\n return Object.prototype.toString.call(val) === '[object Array]';\n }\n };\n\n isEmpty = function(val) {\n var key;\n if (isArray(val)) {\n return !val.length;\n } else {\n for (key in val) {\n if (!hasProp.call(val, key)) continue;\n return false;\n }\n return true;\n }\n };\n\n isPlainObject = function(val) {\n var ctor, proto;\n return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object));\n };\n\n getValue = function(obj) {\n if (isFunction(obj.valueOf)) {\n return obj.valueOf();\n } else {\n return obj;\n }\n };\n\n module.exports.assign = assign;\n\n module.exports.isFunction = isFunction;\n\n module.exports.isObject = isObject;\n\n module.exports.isArray = isArray;\n\n module.exports.isEmpty = isEmpty;\n\n module.exports.isPlainObject = isPlainObject;\n\n module.exports.getValue = getValue;\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMImplementation;\n\n module.exports = XMLDOMImplementation = (function() {\n function XMLDOMImplementation() {}\n\n XMLDOMImplementation.prototype.hasFeature = function(feature, version) {\n return true;\n };\n\n XMLDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.createDocument = function(namespaceURI, qualifiedName, doctype) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.createHTMLDocument = function(title) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.getFeature = function(feature, version) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n return XMLDOMImplementation;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMErrorHandler;\n\n module.exports = XMLDOMErrorHandler = (function() {\n function XMLDOMErrorHandler() {}\n\n XMLDOMErrorHandler.prototype.handleError = function(error) {\n throw new Error(error);\n };\n\n return XMLDOMErrorHandler;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMStringList;\n\n module.exports = XMLDOMStringList = (function() {\n function XMLDOMStringList(arr) {\n this.arr = arr || [];\n }\n\n Object.defineProperty(XMLDOMStringList.prototype, 'length', {\n get: function() {\n return this.arr.length;\n }\n });\n\n XMLDOMStringList.prototype.item = function(index) {\n return this.arr[index] || null;\n };\n\n XMLDOMStringList.prototype.contains = function(str) {\n return this.arr.indexOf(str) !== -1;\n };\n\n return XMLDOMStringList;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMConfiguration, XMLDOMErrorHandler, XMLDOMStringList;\n\n XMLDOMErrorHandler = require('./XMLDOMErrorHandler');\n\n XMLDOMStringList = require('./XMLDOMStringList');\n\n module.exports = XMLDOMConfiguration = (function() {\n function XMLDOMConfiguration() {\n var clonedSelf;\n this.defaultParams = {\n \"canonical-form\": false,\n \"cdata-sections\": false,\n \"comments\": false,\n \"datatype-normalization\": false,\n \"element-content-whitespace\": true,\n \"entities\": true,\n \"error-handler\": new XMLDOMErrorHandler(),\n \"infoset\": true,\n \"validate-if-schema\": false,\n \"namespaces\": true,\n \"namespace-declarations\": true,\n \"normalize-characters\": false,\n \"schema-location\": '',\n \"schema-type\": '',\n \"split-cdata-sections\": true,\n \"validate\": false,\n \"well-formed\": true\n };\n this.params = clonedSelf = Object.create(this.defaultParams);\n }\n\n Object.defineProperty(XMLDOMConfiguration.prototype, 'parameterNames', {\n get: function() {\n return new XMLDOMStringList(Object.keys(this.defaultParams));\n }\n });\n\n XMLDOMConfiguration.prototype.getParameter = function(name) {\n if (this.params.hasOwnProperty(name)) {\n return this.params[name];\n } else {\n return null;\n }\n };\n\n XMLDOMConfiguration.prototype.canSetParameter = function(name, value) {\n return true;\n };\n\n XMLDOMConfiguration.prototype.setParameter = function(name, value) {\n if (value != null) {\n return this.params[name] = value;\n } else {\n return delete this.params[name];\n }\n };\n\n return XMLDOMConfiguration;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n Element: 1,\n Attribute: 2,\n Text: 3,\n CData: 4,\n EntityReference: 5,\n EntityDeclaration: 6,\n ProcessingInstruction: 7,\n Comment: 8,\n Document: 9,\n DocType: 10,\n DocumentFragment: 11,\n NotationDeclaration: 12,\n Declaration: 201,\n Raw: 202,\n AttributeDeclaration: 203,\n ElementDeclaration: 204,\n Dummy: 205\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLAttribute, XMLNode;\n\n NodeType = require('./NodeType');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLAttribute = (function() {\n function XMLAttribute(parent, name, value) {\n this.parent = parent;\n if (this.parent) {\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n }\n if (name == null) {\n throw new Error(\"Missing attribute name. \" + this.debugInfo(name));\n }\n this.name = this.stringify.name(name);\n this.value = this.stringify.attValue(value);\n this.type = NodeType.Attribute;\n this.isId = false;\n this.schemaTypeInfo = null;\n }\n\n Object.defineProperty(XMLAttribute.prototype, 'nodeType', {\n get: function() {\n return this.type;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'ownerElement', {\n get: function() {\n return this.parent;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'textContent', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'namespaceURI', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'prefix', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'localName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'specified', {\n get: function() {\n return true;\n }\n });\n\n XMLAttribute.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLAttribute.prototype.toString = function(options) {\n return this.options.writer.attribute(this, this.options.writer.filterOptions(options));\n };\n\n XMLAttribute.prototype.debugInfo = function(name) {\n name = name || this.name;\n if (name == null) {\n return \"parent: <\" + this.parent.name + \">\";\n } else {\n return \"attribute: {\" + name + \"}, parent: <\" + this.parent.name + \">\";\n }\n };\n\n XMLAttribute.prototype.isEqualNode = function(node) {\n if (node.namespaceURI !== this.namespaceURI) {\n return false;\n }\n if (node.prefix !== this.prefix) {\n return false;\n }\n if (node.localName !== this.localName) {\n return false;\n }\n if (node.value !== this.value) {\n return false;\n }\n return true;\n };\n\n return XMLAttribute;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLNamedNodeMap;\n\n module.exports = XMLNamedNodeMap = (function() {\n function XMLNamedNodeMap(nodes) {\n this.nodes = nodes;\n }\n\n Object.defineProperty(XMLNamedNodeMap.prototype, 'length', {\n get: function() {\n return Object.keys(this.nodes).length || 0;\n }\n });\n\n XMLNamedNodeMap.prototype.clone = function() {\n return this.nodes = null;\n };\n\n XMLNamedNodeMap.prototype.getNamedItem = function(name) {\n return this.nodes[name];\n };\n\n XMLNamedNodeMap.prototype.setNamedItem = function(node) {\n var oldNode;\n oldNode = this.nodes[node.nodeName];\n this.nodes[node.nodeName] = node;\n return oldNode || null;\n };\n\n XMLNamedNodeMap.prototype.removeNamedItem = function(name) {\n var oldNode;\n oldNode = this.nodes[name];\n delete this.nodes[name];\n return oldNode || null;\n };\n\n XMLNamedNodeMap.prototype.item = function(index) {\n return this.nodes[Object.keys(this.nodes)[index]] || null;\n };\n\n XMLNamedNodeMap.prototype.getNamedItemNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLNamedNodeMap.prototype.setNamedItemNS = function(node) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLNamedNodeMap.prototype.removeNamedItemNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n return XMLNamedNodeMap;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject, ref,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n\n module.exports = XMLElement = (function(superClass) {\n extend(XMLElement, superClass);\n\n function XMLElement(parent, name, attributes) {\n var child, j, len, ref1;\n XMLElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing element name. \" + this.debugInfo());\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.Element;\n this.attribs = {};\n this.schemaTypeInfo = null;\n if (attributes != null) {\n this.attribute(attributes);\n }\n if (parent.type === NodeType.Document) {\n this.isRoot = true;\n this.documentObject = parent;\n parent.rootObject = this;\n if (parent.children) {\n ref1 = parent.children;\n for (j = 0, len = ref1.length; j < len; j++) {\n child = ref1[j];\n if (child.type === NodeType.DocType) {\n child.name = this.name;\n break;\n }\n }\n }\n }\n }\n\n Object.defineProperty(XMLElement.prototype, 'tagName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'namespaceURI', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'prefix', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'localName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'id', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'className', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'classList', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'attributes', {\n get: function() {\n if (!this.attributeMap || !this.attributeMap.nodes) {\n this.attributeMap = new XMLNamedNodeMap(this.attribs);\n }\n return this.attributeMap;\n }\n });\n\n XMLElement.prototype.clone = function() {\n var att, attName, clonedSelf, ref1;\n clonedSelf = Object.create(this);\n if (clonedSelf.isRoot) {\n clonedSelf.documentObject = null;\n }\n clonedSelf.attribs = {};\n ref1 = this.attribs;\n for (attName in ref1) {\n if (!hasProp.call(ref1, attName)) continue;\n att = ref1[attName];\n clonedSelf.attribs[attName] = att.clone();\n }\n clonedSelf.children = [];\n this.children.forEach(function(child) {\n var clonedChild;\n clonedChild = child.clone();\n clonedChild.parent = clonedSelf;\n return clonedSelf.children.push(clonedChild);\n });\n return clonedSelf;\n };\n\n XMLElement.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (this.options.keepNullAttributes && (value == null)) {\n this.attribs[name] = new XMLAttribute(this, name, \"\");\n } else if (value != null) {\n this.attribs[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLElement.prototype.removeAttribute = function(name) {\n var attName, j, len;\n if (name == null) {\n throw new Error(\"Missing attribute name. \" + this.debugInfo());\n }\n name = getValue(name);\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n attName = name[j];\n delete this.attribs[attName];\n }\n } else {\n delete this.attribs[name];\n }\n return this;\n };\n\n XMLElement.prototype.toString = function(options) {\n return this.options.writer.element(this, this.options.writer.filterOptions(options));\n };\n\n XMLElement.prototype.att = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.a = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.getAttribute = function(name) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name].value;\n } else {\n return null;\n }\n };\n\n XMLElement.prototype.setAttribute = function(name, value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNode = function(name) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name];\n } else {\n return null;\n }\n };\n\n XMLElement.prototype.setAttributeNode = function(newAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.removeAttributeNode = function(oldAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagName = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.removeAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setAttributeNodeNS = function(newAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.hasAttribute = function(name) {\n return this.attribs.hasOwnProperty(name);\n };\n\n XMLElement.prototype.hasAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setIdAttribute = function(name, isId) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name].isId;\n } else {\n return isId;\n }\n };\n\n XMLElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setIdAttributeNode = function(idAttr, isId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagName = function(tagname) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByClassName = function(classNames) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.isEqualNode = function(node) {\n var i, j, ref1;\n if (!XMLElement.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.namespaceURI !== this.namespaceURI) {\n return false;\n }\n if (node.prefix !== this.prefix) {\n return false;\n }\n if (node.localName !== this.localName) {\n return false;\n }\n if (node.attribs.length !== this.attribs.length) {\n return false;\n }\n for (i = j = 0, ref1 = this.attribs.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; i = 0 <= ref1 ? ++j : --j) {\n if (!this.attribs[i].isEqualNode(node.attribs[i])) {\n return false;\n }\n }\n return true;\n };\n\n return XMLElement;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLCharacterData, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLCharacterData = (function(superClass) {\n extend(XMLCharacterData, superClass);\n\n function XMLCharacterData(parent) {\n XMLCharacterData.__super__.constructor.call(this, parent);\n this.value = '';\n }\n\n Object.defineProperty(XMLCharacterData.prototype, 'data', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n Object.defineProperty(XMLCharacterData.prototype, 'length', {\n get: function() {\n return this.value.length;\n }\n });\n\n Object.defineProperty(XMLCharacterData.prototype, 'textContent', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n XMLCharacterData.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLCharacterData.prototype.substringData = function(offset, count) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.appendData = function(arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.insertData = function(offset, arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.deleteData = function(offset, count) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.replaceData = function(offset, count, arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.isEqualNode = function(node) {\n if (!XMLCharacterData.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.data !== this.data) {\n return false;\n }\n return true;\n };\n\n return XMLCharacterData;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCData, XMLCharacterData,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLCData = (function(superClass) {\n extend(XMLCData, superClass);\n\n function XMLCData(parent, text) {\n XMLCData.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing CDATA text. \" + this.debugInfo());\n }\n this.name = \"#cdata-section\";\n this.type = NodeType.CData;\n this.value = this.stringify.cdata(text);\n }\n\n XMLCData.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLCData.prototype.toString = function(options) {\n return this.options.writer.cdata(this, this.options.writer.filterOptions(options));\n };\n\n return XMLCData;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLComment,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLComment = (function(superClass) {\n extend(XMLComment, superClass);\n\n function XMLComment(parent, text) {\n XMLComment.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing comment text. \" + this.debugInfo());\n }\n this.name = \"#comment\";\n this.type = NodeType.Comment;\n this.value = this.stringify.comment(text);\n }\n\n XMLComment.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLComment.prototype.toString = function(options) {\n return this.options.writer.comment(this, this.options.writer.filterOptions(options));\n };\n\n return XMLComment;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDeclaration, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDeclaration = (function(superClass) {\n extend(XMLDeclaration, superClass);\n\n function XMLDeclaration(parent, version, encoding, standalone) {\n var ref;\n XMLDeclaration.__super__.constructor.call(this, parent);\n if (isObject(version)) {\n ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;\n }\n if (!version) {\n version = '1.0';\n }\n this.type = NodeType.Declaration;\n this.version = this.stringify.xmlVersion(version);\n if (encoding != null) {\n this.encoding = this.stringify.xmlEncoding(encoding);\n }\n if (standalone != null) {\n this.standalone = this.stringify.xmlStandalone(standalone);\n }\n }\n\n XMLDeclaration.prototype.toString = function(options) {\n return this.options.writer.declaration(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDeclaration;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDAttList, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDAttList = (function(superClass) {\n extend(XMLDTDAttList, superClass);\n\n function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n XMLDTDAttList.__super__.constructor.call(this, parent);\n if (elementName == null) {\n throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n }\n if (attributeName == null) {\n throw new Error(\"Missing DTD attribute name. \" + this.debugInfo(elementName));\n }\n if (!attributeType) {\n throw new Error(\"Missing DTD attribute type. \" + this.debugInfo(elementName));\n }\n if (!defaultValueType) {\n throw new Error(\"Missing DTD attribute default. \" + this.debugInfo(elementName));\n }\n if (defaultValueType.indexOf('#') !== 0) {\n defaultValueType = '#' + defaultValueType;\n }\n if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {\n throw new Error(\"Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n }\n if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {\n throw new Error(\"Default value only applies to #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n }\n this.elementName = this.stringify.name(elementName);\n this.type = NodeType.AttributeDeclaration;\n this.attributeName = this.stringify.name(attributeName);\n this.attributeType = this.stringify.dtdAttType(attributeType);\n if (defaultValue) {\n this.defaultValue = this.stringify.dtdAttDefault(defaultValue);\n }\n this.defaultValueType = defaultValueType;\n }\n\n XMLDTDAttList.prototype.toString = function(options) {\n return this.options.writer.dtdAttList(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDAttList;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDEntity, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDEntity = (function(superClass) {\n extend(XMLDTDEntity, superClass);\n\n function XMLDTDEntity(parent, pe, name, value) {\n XMLDTDEntity.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD entity name. \" + this.debugInfo(name));\n }\n if (value == null) {\n throw new Error(\"Missing DTD entity value. \" + this.debugInfo(name));\n }\n this.pe = !!pe;\n this.name = this.stringify.name(name);\n this.type = NodeType.EntityDeclaration;\n if (!isObject(value)) {\n this.value = this.stringify.dtdEntityValue(value);\n this.internal = true;\n } else {\n if (!value.pubID && !value.sysID) {\n throw new Error(\"Public and/or system identifiers are required for an external entity. \" + this.debugInfo(name));\n }\n if (value.pubID && !value.sysID) {\n throw new Error(\"System identifier is required for a public external entity. \" + this.debugInfo(name));\n }\n this.internal = false;\n if (value.pubID != null) {\n this.pubID = this.stringify.dtdPubID(value.pubID);\n }\n if (value.sysID != null) {\n this.sysID = this.stringify.dtdSysID(value.sysID);\n }\n if (value.nData != null) {\n this.nData = this.stringify.dtdNData(value.nData);\n }\n if (this.pe && this.nData) {\n throw new Error(\"Notation declaration is not allowed in a parameter entity. \" + this.debugInfo(name));\n }\n }\n }\n\n Object.defineProperty(XMLDTDEntity.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'notationName', {\n get: function() {\n return this.nData || null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'inputEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'xmlEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'xmlVersion', {\n get: function() {\n return null;\n }\n });\n\n XMLDTDEntity.prototype.toString = function(options) {\n return this.options.writer.dtdEntity(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDEntity;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDElement, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDElement = (function(superClass) {\n extend(XMLDTDElement, superClass);\n\n function XMLDTDElement(parent, name, value) {\n XMLDTDElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n }\n if (!value) {\n value = '(#PCDATA)';\n }\n if (Array.isArray(value)) {\n value = '(' + value.join(',') + ')';\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.ElementDeclaration;\n this.value = this.stringify.dtdElementValue(value);\n }\n\n XMLDTDElement.prototype.toString = function(options) {\n return this.options.writer.dtdElement(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDElement;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDNotation, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDNotation = (function(superClass) {\n extend(XMLDTDNotation, superClass);\n\n function XMLDTDNotation(parent, name, value) {\n XMLDTDNotation.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD notation name. \" + this.debugInfo(name));\n }\n if (!value.pubID && !value.sysID) {\n throw new Error(\"Public or system identifiers are required for an external entity. \" + this.debugInfo(name));\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.NotationDeclaration;\n if (value.pubID != null) {\n this.pubID = this.stringify.dtdPubID(value.pubID);\n }\n if (value.sysID != null) {\n this.sysID = this.stringify.dtdSysID(value.sysID);\n }\n }\n\n Object.defineProperty(XMLDTDNotation.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDTDNotation.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n XMLDTDNotation.prototype.toString = function(options) {\n return this.options.writer.dtdNotation(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDNotation;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNamedNodeMap, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n\n module.exports = XMLDocType = (function(superClass) {\n extend(XMLDocType, superClass);\n\n function XMLDocType(parent, pubID, sysID) {\n var child, i, len, ref, ref1, ref2;\n XMLDocType.__super__.constructor.call(this, parent);\n this.type = NodeType.DocType;\n if (parent.children) {\n ref = parent.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.Element) {\n this.name = child.name;\n break;\n }\n }\n }\n this.documentObject = parent;\n if (isObject(pubID)) {\n ref1 = pubID, pubID = ref1.pubID, sysID = ref1.sysID;\n }\n if (sysID == null) {\n ref2 = [pubID, sysID], sysID = ref2[0], pubID = ref2[1];\n }\n if (pubID != null) {\n this.pubID = this.stringify.dtdPubID(pubID);\n }\n if (sysID != null) {\n this.sysID = this.stringify.dtdSysID(sysID);\n }\n }\n\n Object.defineProperty(XMLDocType.prototype, 'entities', {\n get: function() {\n var child, i, len, nodes, ref;\n nodes = {};\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if ((child.type === NodeType.EntityDeclaration) && !child.pe) {\n nodes[child.name] = child;\n }\n }\n return new XMLNamedNodeMap(nodes);\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'notations', {\n get: function() {\n var child, i, len, nodes, ref;\n nodes = {};\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.NotationDeclaration) {\n nodes[child.name] = child;\n }\n }\n return new XMLNamedNodeMap(nodes);\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'internalSubset', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n XMLDocType.prototype.element = function(name, value) {\n var child;\n child = new XMLDTDElement(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var child;\n child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.entity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, false, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.pEntity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, true, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.notation = function(name, value) {\n var child;\n child = new XMLDTDNotation(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.toString = function(options) {\n return this.options.writer.docType(this, this.options.writer.filterOptions(options));\n };\n\n XMLDocType.prototype.ele = function(name, value) {\n return this.element(name, value);\n };\n\n XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);\n };\n\n XMLDocType.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocType.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocType.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n XMLDocType.prototype.up = function() {\n return this.root() || this.documentObject;\n };\n\n XMLDocType.prototype.isEqualNode = function(node) {\n if (!XMLDocType.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.name !== this.name) {\n return false;\n }\n if (node.publicId !== this.publicId) {\n return false;\n }\n if (node.systemId !== this.systemId) {\n return false;\n }\n return true;\n };\n\n return XMLDocType;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLNode, XMLRaw,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLRaw = (function(superClass) {\n extend(XMLRaw, superClass);\n\n function XMLRaw(parent, text) {\n XMLRaw.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing raw text. \" + this.debugInfo());\n }\n this.type = NodeType.Raw;\n this.value = this.stringify.raw(text);\n }\n\n XMLRaw.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLRaw.prototype.toString = function(options) {\n return this.options.writer.raw(this, this.options.writer.filterOptions(options));\n };\n\n return XMLRaw;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLText = (function(superClass) {\n extend(XMLText, superClass);\n\n function XMLText(parent, text) {\n XMLText.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing element text. \" + this.debugInfo());\n }\n this.name = \"#text\";\n this.type = NodeType.Text;\n this.value = this.stringify.text(text);\n }\n\n Object.defineProperty(XMLText.prototype, 'isElementContentWhitespace', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLText.prototype, 'wholeText', {\n get: function() {\n var next, prev, str;\n str = '';\n prev = this.previousSibling;\n while (prev) {\n str = prev.data + str;\n prev = prev.previousSibling;\n }\n str += this.data;\n next = this.nextSibling;\n while (next) {\n str = str + next.data;\n next = next.nextSibling;\n }\n return str;\n }\n });\n\n XMLText.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLText.prototype.toString = function(options) {\n return this.options.writer.text(this, this.options.writer.filterOptions(options));\n };\n\n XMLText.prototype.splitText = function(offset) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLText.prototype.replaceWholeText = function(content) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n return XMLText;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLProcessingInstruction,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLProcessingInstruction = (function(superClass) {\n extend(XMLProcessingInstruction, superClass);\n\n function XMLProcessingInstruction(parent, target, value) {\n XMLProcessingInstruction.__super__.constructor.call(this, parent);\n if (target == null) {\n throw new Error(\"Missing instruction target. \" + this.debugInfo());\n }\n this.type = NodeType.ProcessingInstruction;\n this.target = this.stringify.insTarget(target);\n this.name = this.target;\n if (value) {\n this.value = this.stringify.insValue(value);\n }\n }\n\n XMLProcessingInstruction.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLProcessingInstruction.prototype.toString = function(options) {\n return this.options.writer.processingInstruction(this, this.options.writer.filterOptions(options));\n };\n\n XMLProcessingInstruction.prototype.isEqualNode = function(node) {\n if (!XMLProcessingInstruction.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.target !== this.target) {\n return false;\n }\n return true;\n };\n\n return XMLProcessingInstruction;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDummy, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDummy = (function(superClass) {\n extend(XMLDummy, superClass);\n\n function XMLDummy(parent) {\n XMLDummy.__super__.constructor.call(this, parent);\n this.type = NodeType.Dummy;\n }\n\n XMLDummy.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLDummy.prototype.toString = function(options) {\n return '';\n };\n\n return XMLDummy;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLNodeList;\n\n module.exports = XMLNodeList = (function() {\n function XMLNodeList(nodes) {\n this.nodes = nodes;\n }\n\n Object.defineProperty(XMLNodeList.prototype, 'length', {\n get: function() {\n return this.nodes.length || 0;\n }\n });\n\n XMLNodeList.prototype.clone = function() {\n return this.nodes = null;\n };\n\n XMLNodeList.prototype.item = function(index) {\n return this.nodes[index] || null;\n };\n\n return XMLNodeList;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n Disconnected: 1,\n Preceding: 2,\n Following: 4,\n Contains: 8,\n ContainedBy: 16,\n ImplementationSpecific: 32\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1,\n hasProp = {}.hasOwnProperty;\n\n ref1 = require('./Utility'), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue;\n\n XMLElement = null;\n\n XMLCData = null;\n\n XMLComment = null;\n\n XMLDeclaration = null;\n\n XMLDocType = null;\n\n XMLRaw = null;\n\n XMLText = null;\n\n XMLProcessingInstruction = null;\n\n XMLDummy = null;\n\n NodeType = null;\n\n XMLNodeList = null;\n\n XMLNamedNodeMap = null;\n\n DocumentPosition = null;\n\n module.exports = XMLNode = (function() {\n function XMLNode(parent1) {\n this.parent = parent1;\n if (this.parent) {\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n }\n this.value = null;\n this.children = [];\n this.baseURI = null;\n if (!XMLElement) {\n XMLElement = require('./XMLElement');\n XMLCData = require('./XMLCData');\n XMLComment = require('./XMLComment');\n XMLDeclaration = require('./XMLDeclaration');\n XMLDocType = require('./XMLDocType');\n XMLRaw = require('./XMLRaw');\n XMLText = require('./XMLText');\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n XMLDummy = require('./XMLDummy');\n NodeType = require('./NodeType');\n XMLNodeList = require('./XMLNodeList');\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n DocumentPosition = require('./DocumentPosition');\n }\n }\n\n Object.defineProperty(XMLNode.prototype, 'nodeName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nodeType', {\n get: function() {\n return this.type;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nodeValue', {\n get: function() {\n return this.value;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'parentNode', {\n get: function() {\n return this.parent;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'childNodes', {\n get: function() {\n if (!this.childNodeList || !this.childNodeList.nodes) {\n this.childNodeList = new XMLNodeList(this.children);\n }\n return this.childNodeList;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'firstChild', {\n get: function() {\n return this.children[0] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'lastChild', {\n get: function() {\n return this.children[this.children.length - 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'previousSibling', {\n get: function() {\n var i;\n i = this.parent.children.indexOf(this);\n return this.parent.children[i - 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nextSibling', {\n get: function() {\n var i;\n i = this.parent.children.indexOf(this);\n return this.parent.children[i + 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'ownerDocument', {\n get: function() {\n return this.document() || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'textContent', {\n get: function() {\n var child, j, len, ref2, str;\n if (this.nodeType === NodeType.Element || this.nodeType === NodeType.DocumentFragment) {\n str = '';\n ref2 = this.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (child.textContent) {\n str += child.textContent;\n }\n }\n return str;\n } else {\n return null;\n }\n },\n set: function(value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n XMLNode.prototype.setParent = function(parent) {\n var child, j, len, ref2, results;\n this.parent = parent;\n if (parent) {\n this.options = parent.options;\n this.stringify = parent.stringify;\n }\n ref2 = this.children;\n results = [];\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n results.push(child.setParent(this));\n }\n return results;\n };\n\n XMLNode.prototype.element = function(name, attributes, text) {\n var childNode, item, j, k, key, lastChild, len, len1, ref2, ref3, val;\n lastChild = null;\n if (attributes === null && (text == null)) {\n ref2 = [{}, null], attributes = ref2[0], text = ref2[1];\n }\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref3 = [attributes, text], text = ref3[0], attributes = ref3[1];\n }\n if (name != null) {\n name = getValue(name);\n }\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n item = name[j];\n lastChild = this.element(item);\n }\n } else if (isFunction(name)) {\n lastChild = this.element(name.apply());\n } else if (isObject(name)) {\n for (key in name) {\n if (!hasProp.call(name, key)) continue;\n val = name[key];\n if (isFunction(val)) {\n val = val.apply();\n }\n if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {\n lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);\n } else if (!this.options.separateArrayItems && Array.isArray(val) && isEmpty(val)) {\n lastChild = this.dummy();\n } else if (isObject(val) && isEmpty(val)) {\n lastChild = this.element(key);\n } else if (!this.options.keepNullNodes && (val == null)) {\n lastChild = this.dummy();\n } else if (!this.options.separateArrayItems && Array.isArray(val)) {\n for (k = 0, len1 = val.length; k < len1; k++) {\n item = val[k];\n childNode = {};\n childNode[key] = item;\n lastChild = this.element(childNode);\n }\n } else if (isObject(val)) {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && key.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.element(val);\n } else {\n lastChild = this.element(key);\n lastChild.element(val);\n }\n } else {\n lastChild = this.element(key, val);\n }\n }\n } else if (!this.options.keepNullNodes && text === null) {\n lastChild = this.dummy();\n } else {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.text(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {\n lastChild = this.cdata(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {\n lastChild = this.comment(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {\n lastChild = this.raw(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {\n lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);\n } else {\n lastChild = this.node(name, attributes, text);\n }\n }\n if (lastChild == null) {\n throw new Error(\"Could not create any elements with: \" + name + \". \" + this.debugInfo());\n }\n return lastChild;\n };\n\n XMLNode.prototype.insertBefore = function(name, attributes, text) {\n var child, i, newChild, refChild, removed;\n if (name != null ? name.type : void 0) {\n newChild = name;\n refChild = attributes;\n newChild.setParent(this);\n if (refChild) {\n i = children.indexOf(refChild);\n removed = children.splice(i);\n children.push(newChild);\n Array.prototype.push.apply(children, removed);\n } else {\n children.push(newChild);\n }\n return newChild;\n } else {\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n }\n };\n\n XMLNode.prototype.insertAfter = function(name, attributes, text) {\n var child, i, removed;\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n };\n\n XMLNode.prototype.remove = function() {\n var i, ref2;\n if (this.isRoot) {\n throw new Error(\"Cannot remove the root element. \" + this.debugInfo());\n }\n i = this.parent.children.indexOf(this);\n [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref2 = [])), ref2;\n return this.parent;\n };\n\n XMLNode.prototype.node = function(name, attributes, text) {\n var child, ref2;\n if (name != null) {\n name = getValue(name);\n }\n attributes || (attributes = {});\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n }\n child = new XMLElement(this, name, attributes);\n if (text != null) {\n child.text(text);\n }\n this.children.push(child);\n return child;\n };\n\n XMLNode.prototype.text = function(value) {\n var child;\n if (isObject(value)) {\n this.element(value);\n }\n child = new XMLText(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.cdata = function(value) {\n var child;\n child = new XMLCData(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.comment = function(value) {\n var child;\n child = new XMLComment(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.commentBefore = function(value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.comment(value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.commentAfter = function(value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.comment(value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.raw = function(value) {\n var child;\n child = new XMLRaw(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.dummy = function() {\n var child;\n child = new XMLDummy(this);\n return child;\n };\n\n XMLNode.prototype.instruction = function(target, value) {\n var insTarget, insValue, instruction, j, len;\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (j = 0, len = target.length; j < len; j++) {\n insTarget = target[j];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n instruction = new XMLProcessingInstruction(this, target, value);\n this.children.push(instruction);\n }\n return this;\n };\n\n XMLNode.prototype.instructionBefore = function(target, value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.instruction(target, value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.instructionAfter = function(target, value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.instruction(target, value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.declaration = function(version, encoding, standalone) {\n var doc, xmldec;\n doc = this.document();\n xmldec = new XMLDeclaration(doc, version, encoding, standalone);\n if (doc.children.length === 0) {\n doc.children.unshift(xmldec);\n } else if (doc.children[0].type === NodeType.Declaration) {\n doc.children[0] = xmldec;\n } else {\n doc.children.unshift(xmldec);\n }\n return doc.root() || doc;\n };\n\n XMLNode.prototype.dtd = function(pubID, sysID) {\n var child, doc, doctype, i, j, k, len, len1, ref2, ref3;\n doc = this.document();\n doctype = new XMLDocType(doc, pubID, sysID);\n ref2 = doc.children;\n for (i = j = 0, len = ref2.length; j < len; i = ++j) {\n child = ref2[i];\n if (child.type === NodeType.DocType) {\n doc.children[i] = doctype;\n return doctype;\n }\n }\n ref3 = doc.children;\n for (i = k = 0, len1 = ref3.length; k < len1; i = ++k) {\n child = ref3[i];\n if (child.isRoot) {\n doc.children.splice(i, 0, doctype);\n return doctype;\n }\n }\n doc.children.push(doctype);\n return doctype;\n };\n\n XMLNode.prototype.up = function() {\n if (this.isRoot) {\n throw new Error(\"The root node has no parent. Use doc() if you need to get the document object.\");\n }\n return this.parent;\n };\n\n XMLNode.prototype.root = function() {\n var node;\n node = this;\n while (node) {\n if (node.type === NodeType.Document) {\n return node.rootObject;\n } else if (node.isRoot) {\n return node;\n } else {\n node = node.parent;\n }\n }\n };\n\n XMLNode.prototype.document = function() {\n var node;\n node = this;\n while (node) {\n if (node.type === NodeType.Document) {\n return node;\n } else {\n node = node.parent;\n }\n }\n };\n\n XMLNode.prototype.end = function(options) {\n return this.document().end(options);\n };\n\n XMLNode.prototype.prev = function() {\n var i;\n i = this.parent.children.indexOf(this);\n if (i < 1) {\n throw new Error(\"Already at the first node. \" + this.debugInfo());\n }\n return this.parent.children[i - 1];\n };\n\n XMLNode.prototype.next = function() {\n var i;\n i = this.parent.children.indexOf(this);\n if (i === -1 || i === this.parent.children.length - 1) {\n throw new Error(\"Already at the last node. \" + this.debugInfo());\n }\n return this.parent.children[i + 1];\n };\n\n XMLNode.prototype.importDocument = function(doc) {\n var clonedRoot;\n clonedRoot = doc.root().clone();\n clonedRoot.parent = this;\n clonedRoot.isRoot = false;\n this.children.push(clonedRoot);\n return this;\n };\n\n XMLNode.prototype.debugInfo = function(name) {\n var ref2, ref3;\n name = name || this.name;\n if ((name == null) && !((ref2 = this.parent) != null ? ref2.name : void 0)) {\n return \"\";\n } else if (name == null) {\n return \"parent: <\" + this.parent.name + \">\";\n } else if (!((ref3 = this.parent) != null ? ref3.name : void 0)) {\n return \"node: <\" + name + \">\";\n } else {\n return \"node: <\" + name + \">, parent: <\" + this.parent.name + \">\";\n }\n };\n\n XMLNode.prototype.ele = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLNode.prototype.doc = function() {\n return this.document();\n };\n\n XMLNode.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLNode.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLNode.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLNode.prototype.u = function() {\n return this.up();\n };\n\n XMLNode.prototype.importXMLBuilder = function(doc) {\n return this.importDocument(doc);\n };\n\n XMLNode.prototype.replaceChild = function(newChild, oldChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.removeChild = function(oldChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.appendChild = function(newChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.hasChildNodes = function() {\n return this.children.length !== 0;\n };\n\n XMLNode.prototype.cloneNode = function(deep) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.normalize = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isSupported = function(feature, version) {\n return true;\n };\n\n XMLNode.prototype.hasAttributes = function() {\n return this.attribs.length !== 0;\n };\n\n XMLNode.prototype.compareDocumentPosition = function(other) {\n var ref, res;\n ref = this;\n if (ref === other) {\n return 0;\n } else if (this.document() !== other.document()) {\n res = DocumentPosition.Disconnected | DocumentPosition.ImplementationSpecific;\n if (Math.random() < 0.5) {\n res |= DocumentPosition.Preceding;\n } else {\n res |= DocumentPosition.Following;\n }\n return res;\n } else if (ref.isAncestor(other)) {\n return DocumentPosition.Contains | DocumentPosition.Preceding;\n } else if (ref.isDescendant(other)) {\n return DocumentPosition.Contains | DocumentPosition.Following;\n } else if (ref.isPreceding(other)) {\n return DocumentPosition.Preceding;\n } else {\n return DocumentPosition.Following;\n }\n };\n\n XMLNode.prototype.isSameNode = function(other) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.lookupPrefix = function(namespaceURI) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isDefaultNamespace = function(namespaceURI) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.lookupNamespaceURI = function(prefix) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isEqualNode = function(node) {\n var i, j, ref2;\n if (node.nodeType !== this.nodeType) {\n return false;\n }\n if (node.children.length !== this.children.length) {\n return false;\n }\n for (i = j = 0, ref2 = this.children.length - 1; 0 <= ref2 ? j <= ref2 : j >= ref2; i = 0 <= ref2 ? ++j : --j) {\n if (!this.children[i].isEqualNode(node.children[i])) {\n return false;\n }\n }\n return true;\n };\n\n XMLNode.prototype.getFeature = function(feature, version) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.setUserData = function(key, data, handler) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.getUserData = function(key) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.contains = function(other) {\n if (!other) {\n return false;\n }\n return other === this || this.isDescendant(other);\n };\n\n XMLNode.prototype.isDescendant = function(node) {\n var child, isDescendantChild, j, len, ref2;\n ref2 = this.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (node === child) {\n return true;\n }\n isDescendantChild = child.isDescendant(node);\n if (isDescendantChild) {\n return true;\n }\n }\n return false;\n };\n\n XMLNode.prototype.isAncestor = function(node) {\n return node.isDescendant(this);\n };\n\n XMLNode.prototype.isPreceding = function(node) {\n var nodePos, thisPos;\n nodePos = this.treePosition(node);\n thisPos = this.treePosition(this);\n if (nodePos === -1 || thisPos === -1) {\n return false;\n } else {\n return nodePos < thisPos;\n }\n };\n\n XMLNode.prototype.isFollowing = function(node) {\n var nodePos, thisPos;\n nodePos = this.treePosition(node);\n thisPos = this.treePosition(this);\n if (nodePos === -1 || thisPos === -1) {\n return false;\n } else {\n return nodePos > thisPos;\n }\n };\n\n XMLNode.prototype.treePosition = function(node) {\n var found, pos;\n pos = 0;\n found = false;\n this.foreachTreeNode(this.document(), function(childNode) {\n pos++;\n if (!found && childNode === node) {\n return found = true;\n }\n });\n if (found) {\n return pos;\n } else {\n return -1;\n }\n };\n\n XMLNode.prototype.foreachTreeNode = function(node, func) {\n var child, j, len, ref2, res;\n node || (node = this.document());\n ref2 = node.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (res = func(child)) {\n return res;\n } else {\n res = this.foreachTreeNode(child, func);\n if (res) {\n return res;\n }\n }\n }\n };\n\n return XMLNode;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLStringifier,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n hasProp = {}.hasOwnProperty;\n\n module.exports = XMLStringifier = (function() {\n function XMLStringifier(options) {\n this.assertLegalName = bind(this.assertLegalName, this);\n this.assertLegalChar = bind(this.assertLegalChar, this);\n var key, ref, value;\n options || (options = {});\n this.options = options;\n if (!this.options.version) {\n this.options.version = '1.0';\n }\n ref = options.stringify || {};\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this[key] = value;\n }\n }\n\n XMLStringifier.prototype.name = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalName('' + val || '');\n };\n\n XMLStringifier.prototype.text = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar(this.textEscape('' + val || ''));\n };\n\n XMLStringifier.prototype.cdata = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n val = val.replace(']]>', ']]]]><![CDATA[>');\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.comment = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (val.match(/--/)) {\n throw new Error(\"Comment text cannot contain double-hypen: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.raw = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return '' + val || '';\n };\n\n XMLStringifier.prototype.attValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar(this.attEscape(val = '' + val || ''));\n };\n\n XMLStringifier.prototype.insTarget = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.insValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (val.match(/\\?>/)) {\n throw new Error(\"Invalid processing instruction value: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.xmlVersion = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (!val.match(/1\\.[0-9]+/)) {\n throw new Error(\"Invalid version number: \" + val);\n }\n return val;\n };\n\n XMLStringifier.prototype.xmlEncoding = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) {\n throw new Error(\"Invalid encoding: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.xmlStandalone = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n if (val) {\n return \"yes\";\n } else {\n return \"no\";\n }\n };\n\n XMLStringifier.prototype.dtdPubID = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdSysID = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdElementValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdAttType = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdAttDefault = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdEntityValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdNData = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.convertAttKey = '@';\n\n XMLStringifier.prototype.convertPIKey = '?';\n\n XMLStringifier.prototype.convertTextKey = '#text';\n\n XMLStringifier.prototype.convertCDataKey = '#cdata';\n\n XMLStringifier.prototype.convertCommentKey = '#comment';\n\n XMLStringifier.prototype.convertRawKey = '#raw';\n\n XMLStringifier.prototype.assertLegalChar = function(str) {\n var regex, res;\n if (this.options.noValidation) {\n return str;\n }\n regex = '';\n if (this.options.version === '1.0') {\n regex = /[\\0-\\x08\\x0B\\f\\x0E-\\x1F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n if (res = str.match(regex)) {\n throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n }\n } else if (this.options.version === '1.1') {\n regex = /[\\0\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n if (res = str.match(regex)) {\n throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n }\n }\n return str;\n };\n\n XMLStringifier.prototype.assertLegalName = function(str) {\n var regex;\n if (this.options.noValidation) {\n return str;\n }\n this.assertLegalChar(str);\n regex = /^([:A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])([\\x2D\\.0-:A-Z_a-z\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])*$/;\n if (!str.match(regex)) {\n throw new Error(\"Invalid character in name\");\n }\n return str;\n };\n\n XMLStringifier.prototype.textEscape = function(str) {\n var ampregex;\n if (this.options.noValidation) {\n return str;\n }\n ampregex = this.options.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n return str.replace(ampregex, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\\r/g, '
');\n };\n\n XMLStringifier.prototype.attEscape = function(str) {\n var ampregex;\n if (this.options.noValidation) {\n return str;\n }\n ampregex = this.options.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n return str.replace(ampregex, '&').replace(/</g, '<').replace(/\"/g, '"').replace(/\\t/g, '	').replace(/\\n/g, '
').replace(/\\r/g, '
');\n };\n\n return XMLStringifier;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n None: 0,\n OpenTag: 1,\n InsideTag: 2,\n CloseTag: 3\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLText, XMLWriterBase, assign,\n hasProp = {}.hasOwnProperty;\n\n assign = require('./Utility').assign;\n\n NodeType = require('./NodeType');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLElement = require('./XMLElement');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDummy = require('./XMLDummy');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLWriterBase = (function() {\n function XMLWriterBase(options) {\n var key, ref, value;\n options || (options = {});\n this.options = options;\n ref = options.writer || {};\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this[\"_\" + key] = this[key];\n this[key] = value;\n }\n }\n\n XMLWriterBase.prototype.filterOptions = function(options) {\n var filteredOptions, ref, ref1, ref2, ref3, ref4, ref5, ref6;\n options || (options = {});\n options = assign({}, this.options, options);\n filteredOptions = {\n writer: this\n };\n filteredOptions.pretty = options.pretty || false;\n filteredOptions.allowEmpty = options.allowEmpty || false;\n filteredOptions.indent = (ref = options.indent) != null ? ref : ' ';\n filteredOptions.newline = (ref1 = options.newline) != null ? ref1 : '\\n';\n filteredOptions.offset = (ref2 = options.offset) != null ? ref2 : 0;\n filteredOptions.dontPrettyTextNodes = (ref3 = (ref4 = options.dontPrettyTextNodes) != null ? ref4 : options.dontprettytextnodes) != null ? ref3 : 0;\n filteredOptions.spaceBeforeSlash = (ref5 = (ref6 = options.spaceBeforeSlash) != null ? ref6 : options.spacebeforeslash) != null ? ref5 : '';\n if (filteredOptions.spaceBeforeSlash === true) {\n filteredOptions.spaceBeforeSlash = ' ';\n }\n filteredOptions.suppressPrettyCount = 0;\n filteredOptions.user = {};\n filteredOptions.state = WriterState.None;\n return filteredOptions;\n };\n\n XMLWriterBase.prototype.indent = function(node, options, level) {\n var indentLevel;\n if (!options.pretty || options.suppressPrettyCount) {\n return '';\n } else if (options.pretty) {\n indentLevel = (level || 0) + options.offset + 1;\n if (indentLevel > 0) {\n return new Array(indentLevel).join(options.indent);\n }\n }\n return '';\n };\n\n XMLWriterBase.prototype.endline = function(node, options, level) {\n if (!options.pretty || options.suppressPrettyCount) {\n return '';\n } else {\n return options.newline;\n }\n };\n\n XMLWriterBase.prototype.attribute = function(att, options, level) {\n var r;\n this.openAttribute(att, options, level);\n r = ' ' + att.name + '=\"' + att.value + '\"';\n this.closeAttribute(att, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.cdata = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<![CDATA[';\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += ']]>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.comment = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!-- ';\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += ' -->' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.declaration = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<?xml';\n options.state = WriterState.InsideTag;\n r += ' version=\"' + node.version + '\"';\n if (node.encoding != null) {\n r += ' encoding=\"' + node.encoding + '\"';\n }\n if (node.standalone != null) {\n r += ' standalone=\"' + node.standalone + '\"';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '?>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.docType = function(node, options, level) {\n var child, i, len, r, ref;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n r += '<!DOCTYPE ' + node.root().name;\n if (node.pubID && node.sysID) {\n r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.sysID) {\n r += ' SYSTEM \"' + node.sysID + '\"';\n }\n if (node.children.length > 0) {\n r += ' [';\n r += this.endline(node, options, level);\n options.state = WriterState.InsideTag;\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n r += ']';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.element = function(node, options, level) {\n var att, child, childNodeCount, firstChildNode, i, j, len, len1, name, prettySuppressed, r, ref, ref1, ref2;\n level || (level = 0);\n prettySuppressed = false;\n r = '';\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r += this.indent(node, options, level) + '<' + node.name;\n ref = node.attribs;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att, options, level);\n }\n childNodeCount = node.children.length;\n firstChildNode = childNodeCount === 0 ? null : node.children[0];\n if (childNodeCount === 0 || node.children.every(function(e) {\n return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';\n })) {\n if (options.allowEmpty) {\n r += '>';\n options.state = WriterState.CloseTag;\n r += '</' + node.name + '>' + this.endline(node, options, level);\n } else {\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '/>' + this.endline(node, options, level);\n }\n } else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {\n r += '>';\n options.state = WriterState.InsideTag;\n options.suppressPrettyCount++;\n prettySuppressed = true;\n r += this.writeChildNode(firstChildNode, options, level + 1);\n options.suppressPrettyCount--;\n prettySuppressed = false;\n options.state = WriterState.CloseTag;\n r += '</' + node.name + '>' + this.endline(node, options, level);\n } else {\n if (options.dontPrettyTextNodes) {\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n if ((child.type === NodeType.Text || child.type === NodeType.Raw) && (child.value != null)) {\n options.suppressPrettyCount++;\n prettySuppressed = true;\n break;\n }\n }\n }\n r += '>' + this.endline(node, options, level);\n options.state = WriterState.InsideTag;\n ref2 = node.children;\n for (j = 0, len1 = ref2.length; j < len1; j++) {\n child = ref2[j];\n r += this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n r += this.indent(node, options, level) + '</' + node.name + '>';\n if (prettySuppressed) {\n options.suppressPrettyCount--;\n }\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n }\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.writeChildNode = function(node, options, level) {\n switch (node.type) {\n case NodeType.CData:\n return this.cdata(node, options, level);\n case NodeType.Comment:\n return this.comment(node, options, level);\n case NodeType.Element:\n return this.element(node, options, level);\n case NodeType.Raw:\n return this.raw(node, options, level);\n case NodeType.Text:\n return this.text(node, options, level);\n case NodeType.ProcessingInstruction:\n return this.processingInstruction(node, options, level);\n case NodeType.Dummy:\n return '';\n case NodeType.Declaration:\n return this.declaration(node, options, level);\n case NodeType.DocType:\n return this.docType(node, options, level);\n case NodeType.AttributeDeclaration:\n return this.dtdAttList(node, options, level);\n case NodeType.ElementDeclaration:\n return this.dtdElement(node, options, level);\n case NodeType.EntityDeclaration:\n return this.dtdEntity(node, options, level);\n case NodeType.NotationDeclaration:\n return this.dtdNotation(node, options, level);\n default:\n throw new Error(\"Unknown XML node type: \" + node.constructor.name);\n }\n };\n\n XMLWriterBase.prototype.processingInstruction = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<?';\n options.state = WriterState.InsideTag;\n r += node.target;\n if (node.value) {\n r += ' ' + node.value;\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '?>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.raw = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.text = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdAttList = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!ATTLIST';\n options.state = WriterState.InsideTag;\n r += ' ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType;\n if (node.defaultValueType !== '#DEFAULT') {\n r += ' ' + node.defaultValueType;\n }\n if (node.defaultValue) {\n r += ' \"' + node.defaultValue + '\"';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdElement = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!ELEMENT';\n options.state = WriterState.InsideTag;\n r += ' ' + node.name + ' ' + node.value;\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdEntity = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!ENTITY';\n options.state = WriterState.InsideTag;\n if (node.pe) {\n r += ' %';\n }\n r += ' ' + node.name;\n if (node.value) {\n r += ' \"' + node.value + '\"';\n } else {\n if (node.pubID && node.sysID) {\n r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.sysID) {\n r += ' SYSTEM \"' + node.sysID + '\"';\n }\n if (node.nData) {\n r += ' NDATA ' + node.nData;\n }\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdNotation = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '<!NOTATION';\n options.state = WriterState.InsideTag;\n r += ' ' + node.name;\n if (node.pubID && node.sysID) {\n r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.pubID) {\n r += ' PUBLIC \"' + node.pubID + '\"';\n } else if (node.sysID) {\n r += ' SYSTEM \"' + node.sysID + '\"';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.openNode = function(node, options, level) {};\n\n XMLWriterBase.prototype.closeNode = function(node, options, level) {};\n\n XMLWriterBase.prototype.openAttribute = function(att, options, level) {};\n\n XMLWriterBase.prototype.closeAttribute = function(att, options, level) {};\n\n return XMLWriterBase;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLStringWriter, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLWriterBase = require('./XMLWriterBase');\n\n module.exports = XMLStringWriter = (function(superClass) {\n extend(XMLStringWriter, superClass);\n\n function XMLStringWriter(options) {\n XMLStringWriter.__super__.constructor.call(this, options);\n }\n\n XMLStringWriter.prototype.document = function(doc, options) {\n var child, i, len, r, ref;\n options = this.filterOptions(options);\n r = '';\n ref = doc.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += this.writeChildNode(child, options, 0);\n }\n if (options.pretty && r.slice(-options.newline.length) === options.newline) {\n r = r.slice(0, -options.newline.length);\n }\n return r;\n };\n\n return XMLStringWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDOMConfiguration, XMLDOMImplementation, XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isPlainObject = require('./Utility').isPlainObject;\n\n XMLDOMImplementation = require('./XMLDOMImplementation');\n\n XMLDOMConfiguration = require('./XMLDOMConfiguration');\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocument = (function(superClass) {\n extend(XMLDocument, superClass);\n\n function XMLDocument(options) {\n XMLDocument.__super__.constructor.call(this, null);\n this.name = \"#document\";\n this.type = NodeType.Document;\n this.documentURI = null;\n this.domConfig = new XMLDOMConfiguration();\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.stringify = new XMLStringifier(options);\n }\n\n Object.defineProperty(XMLDocument.prototype, 'implementation', {\n value: new XMLDOMImplementation()\n });\n\n Object.defineProperty(XMLDocument.prototype, 'doctype', {\n get: function() {\n var child, i, len, ref;\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.DocType) {\n return child;\n }\n }\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'documentElement', {\n get: function() {\n return this.rootObject || null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'inputEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'strictErrorChecking', {\n get: function() {\n return false;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlEncoding', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].encoding;\n } else {\n return null;\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlStandalone', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].standalone === 'yes';\n } else {\n return false;\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlVersion', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].version;\n } else {\n return \"1.0\";\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'URL', {\n get: function() {\n return this.documentURI;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'origin', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'compatMode', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'characterSet', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'contentType', {\n get: function() {\n return null;\n }\n });\n\n XMLDocument.prototype.end = function(writer) {\n var writerOptions;\n writerOptions = {};\n if (!writer) {\n writer = this.options.writer;\n } else if (isPlainObject(writer)) {\n writerOptions = writer;\n writer = this.options.writer;\n }\n return writer.document(this, writer.filterOptions(writerOptions));\n };\n\n XMLDocument.prototype.toString = function(options) {\n return this.options.writer.document(this, this.options.writer.filterOptions(options));\n };\n\n XMLDocument.prototype.createElement = function(tagName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createDocumentFragment = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createTextNode = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createComment = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createCDATASection = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createProcessingInstruction = function(target, data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createAttribute = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createEntityReference = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByTagName = function(tagname) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.importNode = function(importedNode, deep) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createElementNS = function(namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createAttributeNS = function(namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementById = function(elementId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.adoptNode = function(source) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.normalizeDocument = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.renameNode = function(node, namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByClassName = function(classNames) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createEvent = function(eventInterface) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createRange = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createNodeIterator = function(root, whatToShow, filter) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createTreeWalker = function(root, whatToShow, filter) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n return XMLDocument;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocument, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;\n\n NodeType = require('./NodeType');\n\n XMLDocument = require('./XMLDocument');\n\n XMLElement = require('./XMLElement');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLDocumentCB = (function() {\n function XMLDocumentCB(options, onData, onEnd) {\n var writerOptions;\n this.name = \"?xml\";\n this.type = NodeType.Document;\n options || (options = {});\n writerOptions = {};\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n } else if (isPlainObject(options.writer)) {\n writerOptions = options.writer;\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.writer = options.writer;\n this.writerOptions = this.writer.filterOptions(writerOptions);\n this.stringify = new XMLStringifier(options);\n this.onDataCallback = onData || function() {};\n this.onEndCallback = onEnd || function() {};\n this.currentNode = null;\n this.currentLevel = -1;\n this.openTags = {};\n this.documentStarted = false;\n this.documentCompleted = false;\n this.root = null;\n }\n\n XMLDocumentCB.prototype.createChildNode = function(node) {\n var att, attName, attributes, child, i, len, ref1, ref2;\n switch (node.type) {\n case NodeType.CData:\n this.cdata(node.value);\n break;\n case NodeType.Comment:\n this.comment(node.value);\n break;\n case NodeType.Element:\n attributes = {};\n ref1 = node.attribs;\n for (attName in ref1) {\n if (!hasProp.call(ref1, attName)) continue;\n att = ref1[attName];\n attributes[attName] = att.value;\n }\n this.node(node.name, attributes);\n break;\n case NodeType.Dummy:\n this.dummy();\n break;\n case NodeType.Raw:\n this.raw(node.value);\n break;\n case NodeType.Text:\n this.text(node.value);\n break;\n case NodeType.ProcessingInstruction:\n this.instruction(node.target, node.value);\n break;\n default:\n throw new Error(\"This XML node type is not supported in a JS object: \" + node.constructor.name);\n }\n ref2 = node.children;\n for (i = 0, len = ref2.length; i < len; i++) {\n child = ref2[i];\n this.createChildNode(child);\n if (child.type === NodeType.Element) {\n this.up();\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.dummy = function() {\n return this;\n };\n\n XMLDocumentCB.prototype.node = function(name, attributes, text) {\n var ref1;\n if (name == null) {\n throw new Error(\"Missing node name.\");\n }\n if (this.root && this.currentLevel === -1) {\n throw new Error(\"Document can only have one root node. \" + this.debugInfo(name));\n }\n this.openCurrent();\n name = getValue(name);\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref1 = [attributes, text], text = ref1[0], attributes = ref1[1];\n }\n this.currentNode = new XMLElement(this, name, attributes);\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n if (text != null) {\n this.text(text);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.element = function(name, attributes, text) {\n var child, i, len, oldValidationFlag, ref1, root;\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n this.dtdElement.apply(this, arguments);\n } else {\n if (Array.isArray(name) || isObject(name) || isFunction(name)) {\n oldValidationFlag = this.options.noValidation;\n this.options.noValidation = true;\n root = new XMLDocument(this.options).element('TEMP_ROOT');\n root.element(name);\n this.options.noValidation = oldValidationFlag;\n ref1 = root.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n this.createChildNode(child);\n if (child.type === NodeType.Element) {\n this.up();\n }\n }\n } else {\n this.node(name, attributes, text);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (!this.currentNode || this.currentNode.children) {\n throw new Error(\"att() can only be used immediately after an ele() call in callback mode. \" + this.debugInfo(name));\n }\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (this.options.keepNullAttributes && (value == null)) {\n this.currentNode.attribs[name] = new XMLAttribute(this, name, \"\");\n } else if (value != null) {\n this.currentNode.attribs[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.text = function(value) {\n var node;\n this.openCurrent();\n node = new XMLText(this, value);\n this.onData(this.writer.text(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.cdata = function(value) {\n var node;\n this.openCurrent();\n node = new XMLCData(this, value);\n this.onData(this.writer.cdata(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.comment = function(value) {\n var node;\n this.openCurrent();\n node = new XMLComment(this, value);\n this.onData(this.writer.comment(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.raw = function(value) {\n var node;\n this.openCurrent();\n node = new XMLRaw(this, value);\n this.onData(this.writer.raw(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.instruction = function(target, value) {\n var i, insTarget, insValue, len, node;\n this.openCurrent();\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (i = 0, len = target.length; i < len; i++) {\n insTarget = target[i];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n node = new XMLProcessingInstruction(this, target, value);\n this.onData(this.writer.processingInstruction(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {\n var node;\n this.openCurrent();\n if (this.documentStarted) {\n throw new Error(\"declaration() must be the first node.\");\n }\n node = new XMLDeclaration(this, version, encoding, standalone);\n this.onData(this.writer.declaration(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {\n this.openCurrent();\n if (root == null) {\n throw new Error(\"Missing root node name.\");\n }\n if (this.root) {\n throw new Error(\"dtd() must come before the root node.\");\n }\n this.currentNode = new XMLDocType(this, pubID, sysID);\n this.currentNode.rootNodeName = root;\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n return this;\n };\n\n XMLDocumentCB.prototype.dtdElement = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDElement(this, name, value);\n this.onData(this.writer.dtdElement(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var node;\n this.openCurrent();\n node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.onData(this.writer.dtdAttList(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.entity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, false, name, value);\n this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.pEntity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, true, name, value);\n this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.notation = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDNotation(this, name, value);\n this.onData(this.writer.dtdNotation(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.up = function() {\n if (this.currentLevel < 0) {\n throw new Error(\"The document node has no parent.\");\n }\n if (this.currentNode) {\n if (this.currentNode.children) {\n this.closeNode(this.currentNode);\n } else {\n this.openNode(this.currentNode);\n }\n this.currentNode = null;\n } else {\n this.closeNode(this.openTags[this.currentLevel]);\n }\n delete this.openTags[this.currentLevel];\n this.currentLevel--;\n return this;\n };\n\n XMLDocumentCB.prototype.end = function() {\n while (this.currentLevel >= 0) {\n this.up();\n }\n return this.onEnd();\n };\n\n XMLDocumentCB.prototype.openCurrent = function() {\n if (this.currentNode) {\n this.currentNode.children = true;\n return this.openNode(this.currentNode);\n }\n };\n\n XMLDocumentCB.prototype.openNode = function(node) {\n var att, chunk, name, ref1;\n if (!node.isOpen) {\n if (!this.root && this.currentLevel === 0 && node.type === NodeType.Element) {\n this.root = node;\n }\n chunk = '';\n if (node.type === NodeType.Element) {\n this.writerOptions.state = WriterState.OpenTag;\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<' + node.name;\n ref1 = node.attribs;\n for (name in ref1) {\n if (!hasProp.call(ref1, name)) continue;\n att = ref1[name];\n chunk += this.writer.attribute(att, this.writerOptions, this.currentLevel);\n }\n chunk += (node.children ? '>' : '/>') + this.writer.endline(node, this.writerOptions, this.currentLevel);\n this.writerOptions.state = WriterState.InsideTag;\n } else {\n this.writerOptions.state = WriterState.OpenTag;\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<!DOCTYPE ' + node.rootNodeName;\n if (node.pubID && node.sysID) {\n chunk += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n } else if (node.sysID) {\n chunk += ' SYSTEM \"' + node.sysID + '\"';\n }\n if (node.children) {\n chunk += ' [';\n this.writerOptions.state = WriterState.InsideTag;\n } else {\n this.writerOptions.state = WriterState.CloseTag;\n chunk += '>';\n }\n chunk += this.writer.endline(node, this.writerOptions, this.currentLevel);\n }\n this.onData(chunk, this.currentLevel);\n return node.isOpen = true;\n }\n };\n\n XMLDocumentCB.prototype.closeNode = function(node) {\n var chunk;\n if (!node.isClosed) {\n chunk = '';\n this.writerOptions.state = WriterState.CloseTag;\n if (node.type === NodeType.Element) {\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '</' + node.name + '>' + this.writer.endline(node, this.writerOptions, this.currentLevel);\n } else {\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + ']>' + this.writer.endline(node, this.writerOptions, this.currentLevel);\n }\n this.writerOptions.state = WriterState.None;\n this.onData(chunk, this.currentLevel);\n return node.isClosed = true;\n }\n };\n\n XMLDocumentCB.prototype.onData = function(chunk, level) {\n this.documentStarted = true;\n return this.onDataCallback(chunk, level + 1);\n };\n\n XMLDocumentCB.prototype.onEnd = function() {\n this.documentCompleted = true;\n return this.onEndCallback();\n };\n\n XMLDocumentCB.prototype.debugInfo = function(name) {\n if (name == null) {\n return \"\";\n } else {\n return \"node: <\" + name + \">\";\n }\n };\n\n XMLDocumentCB.prototype.ele = function() {\n return this.element.apply(this, arguments);\n };\n\n XMLDocumentCB.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {\n return this.doctype(root, pubID, sysID);\n };\n\n XMLDocumentCB.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLDocumentCB.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.att = function() {\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.a = function() {\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocumentCB.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocumentCB.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n return XMLDocumentCB;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLStreamWriter, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLWriterBase = require('./XMLWriterBase');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLStreamWriter = (function(superClass) {\n extend(XMLStreamWriter, superClass);\n\n function XMLStreamWriter(stream, options) {\n this.stream = stream;\n XMLStreamWriter.__super__.constructor.call(this, options);\n }\n\n XMLStreamWriter.prototype.endline = function(node, options, level) {\n if (node.isLastRootNode && options.state === WriterState.CloseTag) {\n return '';\n } else {\n return XMLStreamWriter.__super__.endline.call(this, node, options, level);\n }\n };\n\n XMLStreamWriter.prototype.document = function(doc, options) {\n var child, i, j, k, len, len1, ref, ref1, results;\n ref = doc.children;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n child = ref[i];\n child.isLastRootNode = i === doc.children.length - 1;\n }\n options = this.filterOptions(options);\n ref1 = doc.children;\n results = [];\n for (k = 0, len1 = ref1.length; k < len1; k++) {\n child = ref1[k];\n results.push(this.writeChildNode(child, options, 0));\n }\n return results;\n };\n\n XMLStreamWriter.prototype.attribute = function(att, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.attribute.call(this, att, options, level));\n };\n\n XMLStreamWriter.prototype.cdata = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.cdata.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.comment = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.comment.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.declaration = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.declaration.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.docType = function(node, options, level) {\n var child, j, len, ref;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n this.stream.write(this.indent(node, options, level));\n this.stream.write('<!DOCTYPE ' + node.root().name);\n if (node.pubID && node.sysID) {\n this.stream.write(' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"');\n } else if (node.sysID) {\n this.stream.write(' SYSTEM \"' + node.sysID + '\"');\n }\n if (node.children.length > 0) {\n this.stream.write(' [');\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.InsideTag;\n ref = node.children;\n for (j = 0, len = ref.length; j < len; j++) {\n child = ref[j];\n this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n this.stream.write(']');\n }\n options.state = WriterState.CloseTag;\n this.stream.write(options.spaceBeforeSlash + '>');\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.None;\n return this.closeNode(node, options, level);\n };\n\n XMLStreamWriter.prototype.element = function(node, options, level) {\n var att, child, childNodeCount, firstChildNode, j, len, name, prettySuppressed, ref, ref1;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n this.stream.write(this.indent(node, options, level) + '<' + node.name);\n ref = node.attribs;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n this.attribute(att, options, level);\n }\n childNodeCount = node.children.length;\n firstChildNode = childNodeCount === 0 ? null : node.children[0];\n if (childNodeCount === 0 || node.children.every(function(e) {\n return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';\n })) {\n if (options.allowEmpty) {\n this.stream.write('>');\n options.state = WriterState.CloseTag;\n this.stream.write('</' + node.name + '>');\n } else {\n options.state = WriterState.CloseTag;\n this.stream.write(options.spaceBeforeSlash + '/>');\n }\n } else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {\n this.stream.write('>');\n options.state = WriterState.InsideTag;\n options.suppressPrettyCount++;\n prettySuppressed = true;\n this.writeChildNode(firstChildNode, options, level + 1);\n options.suppressPrettyCount--;\n prettySuppressed = false;\n options.state = WriterState.CloseTag;\n this.stream.write('</' + node.name + '>');\n } else {\n this.stream.write('>' + this.endline(node, options, level));\n options.state = WriterState.InsideTag;\n ref1 = node.children;\n for (j = 0, len = ref1.length; j < len; j++) {\n child = ref1[j];\n this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n this.stream.write(this.indent(node, options, level) + '</' + node.name + '>');\n }\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.None;\n return this.closeNode(node, options, level);\n };\n\n XMLStreamWriter.prototype.processingInstruction = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.processingInstruction.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.raw = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.raw.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.text = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.text.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdAttList = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdAttList.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdElement = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdElement.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdEntity = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdEntity.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdNotation = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdNotation.call(this, node, options, level));\n };\n\n return XMLStreamWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLDOMImplementation, XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;\n\n ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction;\n\n XMLDOMImplementation = require('./XMLDOMImplementation');\n\n XMLDocument = require('./XMLDocument');\n\n XMLDocumentCB = require('./XMLDocumentCB');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n XMLStreamWriter = require('./XMLStreamWriter');\n\n NodeType = require('./NodeType');\n\n WriterState = require('./WriterState');\n\n module.exports.create = function(name, xmldec, doctype, options) {\n var doc, root;\n if (name == null) {\n throw new Error(\"Root element needs a name.\");\n }\n options = assign({}, xmldec, doctype, options);\n doc = new XMLDocument(options);\n root = doc.element(name);\n if (!options.headless) {\n doc.declaration(options);\n if ((options.pubID != null) || (options.sysID != null)) {\n doc.dtd(options);\n }\n }\n return root;\n };\n\n module.exports.begin = function(options, onData, onEnd) {\n var ref1;\n if (isFunction(options)) {\n ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];\n options = {};\n }\n if (onData) {\n return new XMLDocumentCB(options, onData, onEnd);\n } else {\n return new XMLDocument(options);\n }\n };\n\n module.exports.stringWriter = function(options) {\n return new XMLStringWriter(options);\n };\n\n module.exports.streamWriter = function(stream, options) {\n return new XMLStreamWriter(stream, options);\n };\n\n module.exports.implementation = new XMLDOMImplementation();\n\n module.exports.nodeType = NodeType;\n\n module.exports.writerState = WriterState;\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,\n hasProp = {}.hasOwnProperty;\n\n builder = require('xmlbuilder');\n\n defaults = require('./defaults').defaults;\n\n requiresCDATA = function(entry) {\n return typeof entry === \"string\" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);\n };\n\n wrapCDATA = function(entry) {\n return \"<![CDATA[\" + (escapeCDATA(entry)) + \"]]>\";\n };\n\n escapeCDATA = function(entry) {\n return entry.replace(']]>', ']]]]><![CDATA[>');\n };\n\n exports.Builder = (function() {\n function Builder(opts) {\n var key, ref, value;\n this.options = {};\n ref = defaults[\"0.2\"];\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this.options[key] = value;\n }\n for (key in opts) {\n if (!hasProp.call(opts, key)) continue;\n value = opts[key];\n this.options[key] = value;\n }\n }\n\n Builder.prototype.buildObject = function(rootObj) {\n var attrkey, charkey, render, rootElement, rootName;\n attrkey = this.options.attrkey;\n charkey = this.options.charkey;\n if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {\n rootName = Object.keys(rootObj)[0];\n rootObj = rootObj[rootName];\n } else {\n rootName = this.options.rootName;\n }\n render = (function(_this) {\n return function(element, obj) {\n var attr, child, entry, index, key, value;\n if (typeof obj !== 'object') {\n if (_this.options.cdata && requiresCDATA(obj)) {\n element.raw(wrapCDATA(obj));\n } else {\n element.txt(obj);\n }\n } else if (Array.isArray(obj)) {\n for (index in obj) {\n if (!hasProp.call(obj, index)) continue;\n child = obj[index];\n for (key in child) {\n entry = child[key];\n element = render(element.ele(key), entry).up();\n }\n }\n } else {\n for (key in obj) {\n if (!hasProp.call(obj, key)) continue;\n child = obj[key];\n if (key === attrkey) {\n if (typeof child === \"object\") {\n for (attr in child) {\n value = child[attr];\n element = element.att(attr, value);\n }\n }\n } else if (key === charkey) {\n if (_this.options.cdata && requiresCDATA(child)) {\n element = element.raw(wrapCDATA(child));\n } else {\n element = element.txt(child);\n }\n } else if (Array.isArray(child)) {\n for (index in child) {\n if (!hasProp.call(child, index)) continue;\n entry = child[index];\n if (typeof entry === 'string') {\n if (_this.options.cdata && requiresCDATA(entry)) {\n element = element.ele(key).raw(wrapCDATA(entry)).up();\n } else {\n element = element.ele(key, entry).up();\n }\n } else {\n element = render(element.ele(key), entry).up();\n }\n }\n } else if (typeof child === \"object\") {\n element = render(element.ele(key), child).up();\n } else {\n if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {\n element = element.ele(key).raw(wrapCDATA(child)).up();\n } else {\n if (child == null) {\n child = '';\n }\n element = element.ele(key, child.toString()).up();\n }\n }\n }\n }\n return element;\n };\n })(this);\n rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {\n headless: this.options.headless,\n allowSurrogateChars: this.options.allowSurrogateChars\n });\n return render(rootElement, rootObj).end(this.options.renderOpts);\n };\n\n return Builder;\n\n })();\n\n}).call(this);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}",";(function (sax) {\n // wrapper for non-node envs\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt)\n }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment',\n 'sgmlDecl',\n 'textNode',\n 'tagName',\n 'doctype',\n 'procInstName',\n 'procInstBody',\n 'entity',\n 'attribName',\n 'attribValue',\n 'cdata',\n 'script',\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace',\n ]\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES =\n parser.strictEntities ?\n Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // disallow unquoted attribute values if not otherwise configured\n // and strict mode is true\n if (parser.opt.unquotedAttributeValues === undefined) {\n parser.opt.unquotedAttributeValues = !strict\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this)\n },\n write: write,\n resume: function () {\n this.error = null\n return this\n },\n close: function () {\n return this.write(null)\n },\n flush: function () {\n flushBuffers(this)\n },\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false,\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n })\n\n SAXStream.prototype.write = function (data) {\n if (\n typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)\n ) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args =\n arguments.length === 1 ?\n [arguments[0]]\n : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace(c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\"\n }\n\n function isAttribEnd(c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch(regex, c) {\n return regex.test(c)\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\""\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n }\n\n sax.ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error(parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er +=\n '\\nLine: ' +\n parser.line +\n '\\nColumn: ' +\n parser.column +\n '\\nChar: ' +\n parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, 'Unclosed root tag')\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = (parser.tag = { name: parser.tagName, attributes: {} })\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? ['', name] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n 'xml: prefix must be bound to ' +\n XML_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else if (\n local === 'xmlns' &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n 'xmlns: prefix must be bound to ' +\n XMLNS_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue,\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName)\n )\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p],\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : tag.ns[prefix] || ''\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(prefix)\n )\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop())\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity(parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (\n isNaN(num) ||\n numStr.toLowerCase() !== entity ||\n num < 0 ||\n num > 0x10ffff\n ) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt(chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write(chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(\n parser,\n 'Cannot write after close. Assign an onready handler.'\n )\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (\n c === '<' &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (\n !isWhitespace(c) &&\n (!parser.sawRoot || parser.closedRoot)\n ) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n continue\n }\n\n if (\n parser.doctype &&\n parser.doctype !== true &&\n parser.sgmlDecl\n ) {\n parser.state = S.DOCTYPE_DTD\n parser.doctype += '<!' + parser.sgmlDecl + c\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(\n parser,\n 'Inappropriately located doctype declaration'\n )\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n if (c === ']') {\n parser.doctype += c\n parser.state = S.DOCTYPE\n } else if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (isQuote(c)) {\n parser.doctype += c\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n } else {\n parser.doctype += c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else if (parser.doctype && parser.doctype !== true) {\n parser.state = S.DOCTYPE_DTD\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n var starti = i - 1\n while (c && c !== ']') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.cdata += chunk.substring(starti, i - 1)\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n emitNode(parser, 'onprocessinginstruction', {\n name: parser.procInstName,\n body: parser.procInstBody,\n })\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(\n parser,\n 'Forward-slash in opening tag not followed by >'\n )\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: '',\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n if (!parser.opt.unquotedAttributeValues) {\n error(parser, 'Unquoted attribute value')\n }\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n var parsedEntity = parseEntity(parser)\n if (\n parser.opt.unparsedEntities &&\n !Object.values(sax.XML_ENTITIES).includes(parsedEntity)\n ) {\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n } else {\n parser[buffer] += parsedEntity\n parser.entity = ''\n parser.state = returnState\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n ;(function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint)\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xd800\n lowSurrogate = (codePoint % 0x400) + 0xdc00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n })()\n }\n})(typeof exports === 'undefined' ? (this.sax = {}) : exports)\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n exports.stripBOM = function(str) {\n if (str[0] === '\\uFEFF') {\n return str.substring(1);\n } else {\n return str;\n }\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var prefixMatch;\n\n prefixMatch = new RegExp(/(?!xmlns)^.*:/);\n\n exports.normalize = function(str) {\n return str.toLowerCase();\n };\n\n exports.firstCharLowerCase = function(str) {\n return str.charAt(0).toLowerCase() + str.slice(1);\n };\n\n exports.stripPrefix = function(str) {\n return str.replace(prefixMatch, '');\n };\n\n exports.parseNumbers = function(str) {\n if (!isNaN(str)) {\n str = str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);\n }\n return str;\n };\n\n exports.parseBooleans = function(str) {\n if (/^(?:true|false)$/i.test(str)) {\n str = str.toLowerCase() === 'true';\n }\n return str;\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var bom, defaults, defineProperty, events, isEmpty, processItem, processors, sax, setImmediate,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n sax = require('sax');\n\n events = require('events');\n\n bom = require('./bom');\n\n processors = require('./processors');\n\n setImmediate = require('timers').setImmediate;\n\n defaults = require('./defaults').defaults;\n\n isEmpty = function(thing) {\n return typeof thing === \"object\" && (thing != null) && Object.keys(thing).length === 0;\n };\n\n processItem = function(processors, item, key) {\n var i, len, process;\n for (i = 0, len = processors.length; i < len; i++) {\n process = processors[i];\n item = process(item, key);\n }\n return item;\n };\n\n defineProperty = function(obj, key, value) {\n var descriptor;\n descriptor = Object.create(null);\n descriptor.value = value;\n descriptor.writable = true;\n descriptor.enumerable = true;\n descriptor.configurable = true;\n return Object.defineProperty(obj, key, descriptor);\n };\n\n exports.Parser = (function(superClass) {\n extend(Parser, superClass);\n\n function Parser(opts) {\n this.parseStringPromise = bind(this.parseStringPromise, this);\n this.parseString = bind(this.parseString, this);\n this.reset = bind(this.reset, this);\n this.assignOrPush = bind(this.assignOrPush, this);\n this.processAsync = bind(this.processAsync, this);\n var key, ref, value;\n if (!(this instanceof exports.Parser)) {\n return new exports.Parser(opts);\n }\n this.options = {};\n ref = defaults[\"0.2\"];\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this.options[key] = value;\n }\n for (key in opts) {\n if (!hasProp.call(opts, key)) continue;\n value = opts[key];\n this.options[key] = value;\n }\n if (this.options.xmlns) {\n this.options.xmlnskey = this.options.attrkey + \"ns\";\n }\n if (this.options.normalizeTags) {\n if (!this.options.tagNameProcessors) {\n this.options.tagNameProcessors = [];\n }\n this.options.tagNameProcessors.unshift(processors.normalize);\n }\n this.reset();\n }\n\n Parser.prototype.processAsync = function() {\n var chunk, err;\n try {\n if (this.remaining.length <= this.options.chunkSize) {\n chunk = this.remaining;\n this.remaining = '';\n this.saxParser = this.saxParser.write(chunk);\n return this.saxParser.close();\n } else {\n chunk = this.remaining.substr(0, this.options.chunkSize);\n this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);\n this.saxParser = this.saxParser.write(chunk);\n return setImmediate(this.processAsync);\n }\n } catch (error1) {\n err = error1;\n if (!this.saxParser.errThrown) {\n this.saxParser.errThrown = true;\n return this.emit(err);\n }\n }\n };\n\n Parser.prototype.assignOrPush = function(obj, key, newValue) {\n if (!(key in obj)) {\n if (!this.options.explicitArray) {\n return defineProperty(obj, key, newValue);\n } else {\n return defineProperty(obj, key, [newValue]);\n }\n } else {\n if (!(obj[key] instanceof Array)) {\n defineProperty(obj, key, [obj[key]]);\n }\n return obj[key].push(newValue);\n }\n };\n\n Parser.prototype.reset = function() {\n var attrkey, charkey, ontext, stack;\n this.removeAllListeners();\n this.saxParser = sax.parser(this.options.strict, {\n trim: false,\n normalize: false,\n xmlns: this.options.xmlns\n });\n this.saxParser.errThrown = false;\n this.saxParser.onerror = (function(_this) {\n return function(error) {\n _this.saxParser.resume();\n if (!_this.saxParser.errThrown) {\n _this.saxParser.errThrown = true;\n return _this.emit(\"error\", error);\n }\n };\n })(this);\n this.saxParser.onend = (function(_this) {\n return function() {\n if (!_this.saxParser.ended) {\n _this.saxParser.ended = true;\n return _this.emit(\"end\", _this.resultObject);\n }\n };\n })(this);\n this.saxParser.ended = false;\n this.EXPLICIT_CHARKEY = this.options.explicitCharkey;\n this.resultObject = null;\n stack = [];\n attrkey = this.options.attrkey;\n charkey = this.options.charkey;\n this.saxParser.onopentag = (function(_this) {\n return function(node) {\n var key, newValue, obj, processedKey, ref;\n obj = {};\n obj[charkey] = \"\";\n if (!_this.options.ignoreAttrs) {\n ref = node.attributes;\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n if (!(attrkey in obj) && !_this.options.mergeAttrs) {\n obj[attrkey] = {};\n }\n newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];\n processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;\n if (_this.options.mergeAttrs) {\n _this.assignOrPush(obj, processedKey, newValue);\n } else {\n defineProperty(obj[attrkey], processedKey, newValue);\n }\n }\n }\n obj[\"#name\"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;\n if (_this.options.xmlns) {\n obj[_this.options.xmlnskey] = {\n uri: node.uri,\n local: node.local\n };\n }\n return stack.push(obj);\n };\n })(this);\n this.saxParser.onclosetag = (function(_this) {\n return function() {\n var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;\n obj = stack.pop();\n nodeName = obj[\"#name\"];\n if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {\n delete obj[\"#name\"];\n }\n if (obj.cdata === true) {\n cdata = obj.cdata;\n delete obj.cdata;\n }\n s = stack[stack.length - 1];\n if (obj[charkey].match(/^\\s*$/) && !cdata) {\n emptyStr = obj[charkey];\n delete obj[charkey];\n } else {\n if (_this.options.trim) {\n obj[charkey] = obj[charkey].trim();\n }\n if (_this.options.normalize) {\n obj[charkey] = obj[charkey].replace(/\\s{2,}/g, \" \").trim();\n }\n obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];\n if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n obj = obj[charkey];\n }\n }\n if (isEmpty(obj)) {\n if (typeof _this.options.emptyTag === 'function') {\n obj = _this.options.emptyTag();\n } else {\n obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;\n }\n }\n if (_this.options.validator != null) {\n xpath = \"/\" + ((function() {\n var i, len, results;\n results = [];\n for (i = 0, len = stack.length; i < len; i++) {\n node = stack[i];\n results.push(node[\"#name\"]);\n }\n return results;\n })()).concat(nodeName).join(\"/\");\n (function() {\n var err;\n try {\n return obj = _this.options.validator(xpath, s && s[nodeName], obj);\n } catch (error1) {\n err = error1;\n return _this.emit(\"error\", err);\n }\n })();\n }\n if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {\n if (!_this.options.preserveChildrenOrder) {\n node = {};\n if (_this.options.attrkey in obj) {\n node[_this.options.attrkey] = obj[_this.options.attrkey];\n delete obj[_this.options.attrkey];\n }\n if (!_this.options.charsAsChildren && _this.options.charkey in obj) {\n node[_this.options.charkey] = obj[_this.options.charkey];\n delete obj[_this.options.charkey];\n }\n if (Object.getOwnPropertyNames(obj).length > 0) {\n node[_this.options.childkey] = obj;\n }\n obj = node;\n } else if (s) {\n s[_this.options.childkey] = s[_this.options.childkey] || [];\n objClone = {};\n for (key in obj) {\n if (!hasProp.call(obj, key)) continue;\n defineProperty(objClone, key, obj[key]);\n }\n s[_this.options.childkey].push(objClone);\n delete obj[\"#name\"];\n if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n obj = obj[charkey];\n }\n }\n }\n if (stack.length > 0) {\n return _this.assignOrPush(s, nodeName, obj);\n } else {\n if (_this.options.explicitRoot) {\n old = obj;\n obj = {};\n defineProperty(obj, nodeName, old);\n }\n _this.resultObject = obj;\n _this.saxParser.ended = true;\n return _this.emit(\"end\", _this.resultObject);\n }\n };\n })(this);\n ontext = (function(_this) {\n return function(text) {\n var charChild, s;\n s = stack[stack.length - 1];\n if (s) {\n s[charkey] += text;\n if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\\\n/g, '').trim() !== '')) {\n s[_this.options.childkey] = s[_this.options.childkey] || [];\n charChild = {\n '#name': '__text__'\n };\n charChild[charkey] = text;\n if (_this.options.normalize) {\n charChild[charkey] = charChild[charkey].replace(/\\s{2,}/g, \" \").trim();\n }\n s[_this.options.childkey].push(charChild);\n }\n return s;\n }\n };\n })(this);\n this.saxParser.ontext = ontext;\n return this.saxParser.oncdata = (function(_this) {\n return function(text) {\n var s;\n s = ontext(text);\n if (s) {\n return s.cdata = true;\n }\n };\n })(this);\n };\n\n Parser.prototype.parseString = function(str, cb) {\n var err;\n if ((cb != null) && typeof cb === \"function\") {\n this.on(\"end\", function(result) {\n this.reset();\n return cb(null, result);\n });\n this.on(\"error\", function(err) {\n this.reset();\n return cb(err);\n });\n }\n try {\n str = str.toString();\n if (str.trim() === '') {\n this.emit(\"end\", null);\n return true;\n }\n str = bom.stripBOM(str);\n if (this.options.async) {\n this.remaining = str;\n setImmediate(this.processAsync);\n return this.saxParser;\n }\n return this.saxParser.write(str).close();\n } catch (error1) {\n err = error1;\n if (!(this.saxParser.errThrown || this.saxParser.ended)) {\n this.emit('error', err);\n return this.saxParser.errThrown = true;\n } else if (this.saxParser.ended) {\n throw err;\n }\n }\n };\n\n Parser.prototype.parseStringPromise = function(str) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.parseString(str, function(err, value) {\n if (err) {\n return reject(err);\n } else {\n return resolve(value);\n }\n });\n };\n })(this));\n };\n\n return Parser;\n\n })(events);\n\n exports.parseString = function(str, a, b) {\n var cb, options, parser;\n if (b != null) {\n if (typeof b === 'function') {\n cb = b;\n }\n if (typeof a === 'object') {\n options = a;\n }\n } else {\n if (typeof a === 'function') {\n cb = a;\n }\n options = {};\n }\n parser = new exports.Parser(options);\n return parser.parseString(str, cb);\n };\n\n exports.parseStringPromise = function(str, a) {\n var options, parser;\n if (typeof a === 'object') {\n options = a;\n }\n parser = new exports.Parser(options);\n return parser.parseStringPromise(str);\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var builder, defaults, parser, processors,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n defaults = require('./defaults');\n\n builder = require('./builder');\n\n parser = require('./parser');\n\n processors = require('./processors');\n\n exports.defaults = defaults.defaults;\n\n exports.processors = processors;\n\n exports.ValidationError = (function(superClass) {\n extend(ValidationError, superClass);\n\n function ValidationError(message) {\n this.message = message;\n }\n\n return ValidationError;\n\n })(Error);\n\n exports.Builder = builder.Builder;\n\n exports.Parser = parser.Parser;\n\n exports.parseString = parser.parseString;\n\n exports.parseStringPromise = parser.parseStringPromise;\n\n}).call(this);\n","import path from 'path';\nimport { createHash } from 'crypto';\nimport { parseStringPromise } from 'xml2js';\nimport type { DbgpSession } from './dbgp-session';\nimport type { CDPServer } from './cdp-server';\nimport type { ErrnoError } from '@php-wasm/universal';\n\ninterface PendingCommand {\n\tcdpId?: number;\n\tcdpMethod?: string;\n\tparams?: any;\n}\n\ninterface BreakpointInfo {\n\tcdpId: string;\n\txdebugId: string | null;\n\tfileUri: string;\n\tlineNumber: number;\n}\n\ninterface ObjectHandle {\n\ttype: 'context' | 'property';\n\tcontextId?: number;\n\tdepth: number;\n\tfullname?: string;\n\t// Add pagination support\n\tcurrentPage?: number;\n\ttotalPages?: number;\n\taggregatedProps?: any[];\n}\n\nexport interface XdebugCDPBridgeConfig {\n\tknownScriptUrls: string[];\n\tphpRoot?: string;\n\tgetPHPFile(path: string): string | Promise<string>;\n\tbreakOnFirstLine?: boolean;\n}\n\nexport class XdebugCDPBridge {\n\tprivate dbgp: DbgpSession;\n\tpublic cdp: CDPServer;\n\tprivate nextTxnId = 1;\n\tprivate pendingCommands: Map<string, PendingCommand> = new Map();\n\tprivate breakpoints: Map<string, BreakpointInfo> = new Map(); // key: cdp breakpointId\n\tprivate scriptIdByUrl: Map<string, string> = new Map();\n\tprivate nextScriptId = 1;\n\tprivate objectHandles: Map<string, ObjectHandle> = new Map();\n\tprivate nextObjectId = 1;\n\tprivate callFramesMap: Map<string, number> = new Map(); // callFrameId -> stack depth\n\tprivate xdebugConnected = false;\n\tprivate phpRoot: string;\n\tprivate readPHPFile: (path: string) => string | Promise<string>;\n\tprivate breakOnFirstLine;\n\n\tconstructor(\n\t\tdbgp: DbgpSession,\n\t\tcdp: CDPServer,\n\t\tconfig: XdebugCDPBridgeConfig\n\t) {\n\t\tthis.dbgp = dbgp;\n\t\tthis.cdp = cdp;\n\t\tthis.readPHPFile = config.getPHPFile;\n\t\tthis.phpRoot = config.phpRoot || '';\n\t\tfor (const url of config.knownScriptUrls) {\n\t\t\tthis.scriptIdByUrl.set(url, this.getOrCreateScriptId(url));\n\t\t}\n\t\tthis.breakOnFirstLine = config.breakOnFirstLine || false;\n\t}\n\n\tstart(): void {\n\t\t// Xdebug connected\n\t\tthis.dbgp.on('connected', () => {\n\t\t\tthis.xdebugConnected = true;\n\t\t\tthis.sendDbgpCommand('stdout', '-c 1'); // copies PHP stdout to console\n\t\t\tthis.sendDbgpCommand('stderr', '-c 1'); // copies PHP stderr to console\n\t\t});\n\t\t// Xdebug messages\n\t\tthis.dbgp.on('message', async (xml: string) => {\n\t\t\ttry {\n\t\t\t\tconst msgObj = await parseStringPromise(xml, {\n\t\t\t\t\texplicitArray: false,\n\t\t\t\t});\n\t\t\t\tawait this.handleDbgpMessage(msgObj);\n\t\t\t} catch {\n\t\t\t\t// Parsing error, ignore or log\n\t\t\t}\n\t\t});\n\t\t// Xdebug disconnected\n\t\tthis.dbgp.on('disconnected', () => {\n\t\t\tthis.xdebugConnected = false;\n\t\t\t// If DevTools is still connected, inform or close\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Debugger.paused',\n\t\t\t\tparams: { reason: 'terminated', callFrames: [] },\n\t\t\t});\n\t\t});\n\n\t\t// DevTools messages (requests)\n\t\tthis.cdp.on('message', (msg: any) => {\n\t\t\tthis.handleCdpMessage(msg);\n\t\t});\n\n\t\t// DevTools disconnected\n\t\tthis.cdp.on('clientDisconnected', () => {\n\t\t\t// If Xdebug still connected, detach from it\n\t\t\tif (this.xdebugConnected) {\n\t\t\t\tthis.sendDbgpCommand(`detach`);\n\t\t\t\t// After detach, Xdebug will likely close connection\n\t\t\t}\n\t\t});\n\n\t\t// Load known scripts\n\t\tthis.sendInitialScripts().then(() => {\n\t\t\tif (!this.breakOnFirstLine) {\n\t\t\t\t// Opens Sources tab instead of Console by pausing the process\n\t\t\t\tconst entry = this.scriptIdByUrl.entries().next().value;\n\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\tmethod: 'Debugger.paused',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tcallFrames: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\t\t\tscriptId: entry[1],\n\t\t\t\t\t\t\t\t\t\tlineNumber: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tscopeChain: [],\n\t\t\t\t\t\t\t\t\tthis: { type: 'undefined' },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\treason: 'other',\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\t// Resume the process after 50ms to maintain focus on the first file.\n\t\t\t\t\t// 50ms is an arbitrary choice: 0ms won’t display the code at this delay,\n\t\t\t\t\t// while 100ms would be too long and cause a visible break on the first line.\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.cdp.sendMessage({ method: 'Debugger.resumed' });\n\t\t\t\t\t}, 50);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Send a nice welcome message with instructions\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: 'info',\n\t\t\t\t\t\ttext: '🎉 Welcome to WordPress Playground DevTools! 🎉\\n ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\\n\\n1. Add breakpoints in your files to start step debugging.\\n\\n2. Run your php file, project, plugin or theme using PHP.wasm or Playground CLI.\\n\\n3. Witness the magic break.',\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: 'info',\n\t\t\t\t\t\ttext: ' ',\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tstop(): void {\n\t\tthis.dbgp.close();\n\t\tthis.cdp.close();\n\t}\n\n\tprivate async sendInitialScripts(): Promise<void> {\n\t\tfor (const [bridgeUri, scriptId] of this.scriptIdByUrl.entries()) {\n\t\t\tawait this.sendScriptToCDP(bridgeUri, scriptId);\n\t\t}\n\t}\n\n\tprivate async sendScriptToCDP(url: string, id: string): Promise<void> {\n\t\tconst highlightUri = this.uriFromBridgeToCDPSyntaxHighlight(url);\n\t\tconst cdpUri = this.uriFromBridgeToCDP(url);\n\n\t\ttry {\n\t\t\tconst phpContent = await this.readPHPFile(url);\n\t\t\tconst phpLines = phpContent.split('\\n');\n\n\t\t\t// The first line is AAAA while the others are AACA.\n\t\t\t// This is enough to set breakpoints with CDP and\n\t\t\t// communicate with the DBGp protocol.\n\t\t\tconst mappings = phpLines\n\t\t\t\t.map((_value, index) => (index === 0 ? 'AAAA' : 'AACA'))\n\t\t\t\t.join(';');\n\n\t\t\tconst sourceMap = {\n\t\t\t\tversion: 3,\n\t\t\t\t// File uri has to match the script parsed url\n\t\t\t\t// While the sources url has to match the syntax\n\t\t\t\t// highlighted file displayed in Devtools.\n\t\t\t\tfile: cdpUri,\n\t\t\t\tsources: [highlightUri],\n\t\t\t\tsourcesContent: [phpContent],\n\t\t\t\tmappings,\n\t\t\t};\n\n\t\t\tconst encodedMap = Buffer.from(\n\t\t\t\tJSON.stringify(sourceMap),\n\t\t\t\t'utf-8'\n\t\t\t).toString('base64');\n\t\t\tconst sourceMapDataUri = `data:application/json;base64,${encodedMap}`;\n\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Debugger.scriptParsed',\n\t\t\t\tparams: {\n\t\t\t\t\tscriptId: id,\n\t\t\t\t\turl: cdpUri,\n\t\t\t\t\tstartLine: 0,\n\t\t\t\t\tstartColumn: 0,\n\t\t\t\t\tendLine: phpLines.length,\n\t\t\t\t\tendColumn: 0,\n\t\t\t\t\texecutionContextId: 1,\n\t\t\t\t\tsourceMapURL: sourceMapDataUri,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// Parsing error, log error to console\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: 'warning',\n\t\t\t\t\t\ttext: (error as ErrnoError).message,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate getOrCreateScriptId(url: string): string {\n\t\tlet scriptId = this.scriptIdByUrl.get(url);\n\t\tif (!scriptId) {\n\t\t\t// IDs are used as references in the source directory.\n\t\t\t// To prevent exposing raw IDs, we hash them with SHA-256\n\t\t\t// and keep only the first 16 characters.\n\t\t\tscriptId = createHash('sha256')\n\t\t\t\t.update(String(this.nextScriptId++))\n\t\t\t\t.digest('hex')\n\t\t\t\t.slice(0, 16);\n\t\t\tthis.scriptIdByUrl.set(url, scriptId);\n\t\t}\n\t\treturn scriptId;\n\t}\n\n\t// Utility: escape and quote Xdebug fullname for property_get\n\tprivate formatPropertyFullName(fullname: string): string {\n\t\t// Escape quotes, backslashes, and nulls\n\t\tlet needsQuotes = false;\n\t\tlet result = '';\n\t\tfor (const ch of fullname) {\n\t\t\tif (ch === '\"' || ch === '\\\\' || ch === '\\x00') {\n\t\t\t\tresult += '\\\\' + ch;\n\t\t\t\tneedsQuotes = true;\n\t\t\t} else if (ch === ' ') {\n\t\t\t\tresult += ch;\n\t\t\t\tneedsQuotes = true;\n\t\t\t} else {\n\t\t\t\tresult += ch;\n\t\t\t}\n\t\t}\n\t\tif (needsQuotes || fullname.includes(\"'\")) {\n\t\t\t// If contains single quote or spaces or special chars, wrap in double quotes\n\t\t\tresult = `\"${result}\"`;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate sendDbgpCommand(command: string, data?: string): string {\n\t\tconst txnId = this.nextTxnId++;\n\t\tconst txnIdStr = txnId.toString();\n\t\tlet cmdStr = `${command} -i ${txnIdStr}`;\n\t\tif (data !== undefined) {\n\t\t\tcmdStr += ` ${data}`;\n\t\t}\n\t\tthis.dbgp.sendCommand(cmdStr);\n\t\treturn txnIdStr;\n\t}\n\n\tprivate async handleCdpMessage(message: any): Promise<void> {\n\t\tconst { id, method, params } = message;\n\t\tlet result: any = {};\n\t\tlet sendResponse = true;\n\t\tswitch (method) {\n\t\t\tcase 'Debugger.enable':\n\t\t\tcase 'Runtime.enable':\n\t\t\t\t// Acknowledge enabling of domains\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\tcase 'Debugger.setBreakpointByUrl': {\n\t\t\t\tconst { url: cdpUri, lineNumber: line } = params;\n\t\t\t\t/**\n\t\t\t\t * `url` is an optional parameter. If it's not set, we don't\n\t\t\t\t * have enough information to set a breakpoint so let's just\n\t\t\t\t * ignore the message.\n\t\t\t\t *\n\t\t\t\t * Why would `url` be not set? We don't know that yet.\n\t\t\t\t *\n\t\t\t\t * https://chromedevtools.github.io/devtools-protocol/tot/Debugger/#method-setBreakpointByUrl\n\t\t\t\t */\n\t\t\t\tif (!cdpUri) {\n\t\t\t\t\tsendResponse = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst bridgeUri = this.uriFromCDPToBridge(cdpUri);\n\t\t\t\tconst dbgpUri = this.uriFromBridgeToDBGP(bridgeUri);\n\t\t\t\tconst lineNumber = (typeof line === 'number' ? line : 0) + 1; // CDP lineNumber is 0-based, Xdebug expects 1-based\n\t\t\t\t// Generate a new breakpoint ID for DevTools\n\t\t\t\tconst cdpBreakpointId = String(this.breakpoints.size + 1);\n\t\t\t\t// If Xdebug connected, send breakpoint_set now\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tconst cmd = `breakpoint_set -t line -f ${this.formatPropertyFullName(\n\t\t\t\t\t\tdbgpUri\n\t\t\t\t\t)} -n ${lineNumber}`;\n\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tbreakpointId: cdpBreakpointId,\n\t\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\t// We'll send response when we get confirmation from Xdebug\n\t\t\t\t\tsendResponse = false;\n\t\t\t\t} else {\n\t\t\t\t\t// Xdebug not yet connected: store breakpoint to set later\n\t\t\t\t\tthis.breakpoints.set(cdpBreakpointId, {\n\t\t\t\t\t\tcdpId: cdpBreakpointId,\n\t\t\t\t\t\txdebugId: null,\n\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t});\n\t\t\t\t\tresult = {\n\t\t\t\t\t\tbreakpointId: cdpBreakpointId,\n\t\t\t\t\t\tlocations: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tscriptId: this.getOrCreateScriptId(bridgeUri),\n\t\t\t\t\t\t\t\tlineNumber: lineNumber - 1,\n\t\t\t\t\t\t\t\tcolumnNumber: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.removeBreakpoint': {\n\t\t\t\tconst { breakpointId } = params;\n\t\t\t\tconst bpIdStr = String(breakpointId);\n\t\t\t\tconst bp = this.breakpoints.get(bpIdStr);\n\t\t\t\tif (bp) {\n\t\t\t\t\tif (bp.xdebugId && this.xdebugConnected) {\n\t\t\t\t\t\t// Remove from Xdebug if it was set\n\t\t\t\t\t\tconst cmd = `breakpoint_remove -d ${bp.xdebugId}`;\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsendResponse = false;\n\t\t\t\t\t}\n\t\t\t\t\t// Remove from our map\n\t\t\t\t\tthis.breakpoints.delete(bpIdStr);\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.resume': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('run');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.stepOver': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('step_over');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.stepInto': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('step_into');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.stepOut': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('step_out');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.pause': {\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\tthis.sendDbgpCommand('break');\n\t\t\t\t}\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Runtime.evaluate':\n\t\t\tcase 'Debugger.evaluateOnCallFrame': {\n\t\t\t\tconst expression: string = params.expression || '';\n\t\t\t\tconst callFrameId: string | undefined = params.callFrameId;\n\t\t\t\t// If evaluateOnCallFrame, check if supported frame\n\t\t\t\tif (method === 'Debugger.evaluateOnCallFrame') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcallFrameId === undefined ||\n\t\t\t\t\t\t!this.callFramesMap.has(callFrameId)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Invalid frame\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\t\t\tmessage: 'No such call frame',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst frameDepth = this.callFramesMap.get(callFrameId)!;\n\t\t\t\t\tif (frameDepth !== 0) {\n\t\t\t\t\t\t// Only support evaluation in top frame for simplicity\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\t'Evaluation in this frame not supported',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.xdebugConnected) {\n\t\t\t\t\t// Xdebug eval expects code in base64\n\t\t\t\t\tconst code = Buffer.from(expression).toString('base64');\n\t\t\t\t\tconst txn = this.sendDbgpCommand('eval', `-- ${code}`);\n\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t});\n\t\t\t\t\tsendResponse = false;\n\t\t\t\t} else {\n\t\t\t\t\t// If no Xdebug, return undefined result\n\t\t\t\t\tresult = {\n\t\t\t\t\t\tresult: { type: 'undefined', value: undefined },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Runtime.getProperties': {\n\t\t\t\tconst { objectId } = params;\n\t\t\t\tconst handle = this.objectHandles.get(objectId);\n\t\t\t\tif (handle && this.xdebugConnected) {\n\t\t\t\t\tif (handle.type === 'context') {\n\t\t\t\t\t\tconst contextId = handle.contextId ?? 0;\n\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\t// Get variables in the context with pagination support (32 items per page)\n\t\t\t\t\t\tconst cmd = `context_get -d ${depth} -c ${contextId} -p 0 -m 32`;\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\t\t// Initialize pagination state\n\t\t\t\t\t\tconst updatedHandle = {\n\t\t\t\t\t\t\t...handle,\n\t\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\t\taggregatedProps: [],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.objectHandles.set(objectId, updatedHandle);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\t\tparams: { objectId: objectId },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsendResponse = false;\n\t\t\t\t\t} else if (handle.type === 'property') {\n\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\tconst fullname = handle.fullname!;\n\t\t\t\t\t\tconst fmtName = this.formatPropertyFullName(fullname);\n\t\t\t\t\t\t// Get property with pagination support (32 items per page)\n\t\t\t\t\t\tconst cmd = `property_get -d ${depth} -n ${fmtName} -p 0 -m 32`;\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(cmd);\n\t\t\t\t\t\t// Initialize pagination state\n\t\t\t\t\t\tconst updatedHandle = {\n\t\t\t\t\t\t\t...handle,\n\t\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\t\taggregatedProps: [],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.objectHandles.set(objectId, updatedHandle);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\tcdpId: id,\n\t\t\t\t\t\t\tcdpMethod: method,\n\t\t\t\t\t\t\tparams: { parentObjectId: objectId },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsendResponse = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Unknown handle type\n\t\t\t\t\t\tresult = { result: [] };\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult = { result: [] };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Debugger.getScriptSource': {\n\t\t\t\tconst sid = params.scriptId;\n\t\t\t\tconst bridgeUri = [...this.scriptIdByUrl.entries()].find(\n\t\t\t\t\t([, v]) => v === sid\n\t\t\t\t)?.[0];\n\n\t\t\t\tconst fullPath = [];\n\n\t\t\t\tif (bridgeUri) {\n\t\t\t\t\tfullPath.push(\n\t\t\t\t\t\t...[\n\t\t\t\t\t\t\t\"Here's the full path for your convenience:\\n\",\n\t\t\t\t\t\t\t`${this.uriFromBridgeToCDPSyntaxHighlight(\n\t\t\t\t\t\t\t\tbridgeUri\n\t\t\t\t\t\t\t).replace('file://', '')}\\n`,\n\t\t\t\t\t\t]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// getScriptSource usually fills the source file.\n\t\t\t\t// With scripts now using source maps, the source map\n\t\t\t\t// now handles displaying the file content.\n\t\t\t\t// Therefore, we return a redirect message instead.\n\t\t\t\tresult = {\n\t\t\t\t\tscriptSource: [\n\t\t\t\t\t\t'`Are you looking for your source code?',\n\t\t\t\t\t\t'Go to PHP.wasm group in the navigator and find it there.',\n\t\t\t\t\t\t...fullPath,\n\t\t\t\t\t\t\"What is this file, then? It's a placeholder required due to the dev tools limitations.\",\n\t\t\t\t\t\t'The XDebug <-> Devtools bridge implement PHP syntax highlighting using source maps,',\n\t\t\t\t\t\t'and the unfortunate side effect is having a \"source\" file and a \"target\" file.',\n\t\t\t\t\t\t'This is the \"source\". If you\\'re interested in even more details, see the discussion at:\\n',\n\t\t\t\t\t\t'https://github.com/WordPress/wordpress-playground/pull/2566`',\n\t\t\t\t\t].join('\\n'),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// Unknown or unimplemented method\n\t\t\t\tresult = {};\n\t\t\t\tbreak;\n\t\t}\n\t\tif (sendResponse) {\n\t\t\tthis.cdp.sendMessage({ id, result });\n\t\t}\n\t}\n\n\t/* ---------- uri mapping ---------- */\n\n\tprivate uriFromBridgeToCDPSyntaxHighlight(uri: string): string {\n\t\treturn `file://PHP.wasm/${uri}`;\n\t}\n\n\tprivate uriFromBridgeToCDP(uri: string): string {\n\t\turi = this.scriptIdByUrl.get(uri) ?? '';\n\n\t\treturn `file://placeholders/${uri}`;\n\t}\n\n\tprivate uriFromCDPToBridge(uri: string): string {\n\t\tconst prefix = 'file://placeholders/';\n\n\t\treturn (\n\t\t\t[...this.scriptIdByUrl.entries()].find(\n\t\t\t\t([, v]) => v === uri.slice(prefix.length)\n\t\t\t)?.[0] ?? ''\n\t\t);\n\t}\n\n\tprivate uriFromBridgeToDBGP(uri: string): string {\n\t\treturn path.resolve(process.cwd(), uri);\n\t}\n\n\tprivate uriFromDBGPToBridge(uri: string): string {\n\t\turi = uri.startsWith('file://') ? uri.slice(7) : uri;\n\n\t\tconst index = uri.indexOf(this.phpRoot);\n\n\t\treturn index !== -1 ? uri.slice(index) : uri;\n\t}\n\n\tprivate async handleDbgpMessage(msgObj: any): Promise<void> {\n\t\tif (msgObj.init) {\n\t\t\tthis.breakpoints.forEach((breakpoint) => {\n\t\t\t\tthis.handleCdpMessage({\n\t\t\t\t\tid: breakpoint.cdpId,\n\t\t\t\t\tmethod: 'Debugger.setBreakpointByUrl',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\turl: this.uriFromBridgeToCDP(breakpoint.fileUri),\n\t\t\t\t\t\tlineNumber: breakpoint.lineNumber - 1,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst firstBreakTxn = this.breakOnFirstLine\n\t\t\t\t? this.sendDbgpCommand('step_into')\n\t\t\t\t: this.sendDbgpCommand('run');\n\t\t\tthis.pendingCommands.set(firstBreakTxn, {\n\t\t\t\t/* auto run after init */\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\t\tif (msgObj.response) {\n\t\t\tconst response = msgObj.response;\n\t\t\tconst attrs = response.$;\n\t\t\tconst command = attrs.command;\n\t\t\tconst transId = attrs.transaction_id;\n\t\t\tconst pending = this.pendingCommands.get(transId);\n\t\t\t// If this is a response to a command we sent\n\t\t\tswitch (command) {\n\t\t\t\tcase 'breakpoint_set': {\n\t\t\t\t\tif (\n\t\t\t\t\t\tpending &&\n\t\t\t\t\t\tpending.cdpId !== undefined &&\n\t\t\t\t\t\tpending.cdpMethod === 'Debugger.setBreakpointByUrl'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Map Xdebug breakpoint id to our cdp breakpoint id\n\t\t\t\t\t\tconst xdebugBpId = attrs.id;\n\t\t\t\t\t\tconst bpInfo = pending.params;\n\t\t\t\t\t\tif (bpInfo) {\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\tbreakpointId: cdpBpId,\n\t\t\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t\t\t} = bpInfo;\n\t\t\t\t\t\t\t// Store mapping\n\t\t\t\t\t\t\tthis.breakpoints.set(cdpBpId, {\n\t\t\t\t\t\t\t\tcdpId: cdpBpId,\n\t\t\t\t\t\t\t\txdebugId: xdebugBpId,\n\t\t\t\t\t\t\t\tfileUri: bridgeUri,\n\t\t\t\t\t\t\t\tlineNumber,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Prepare CDP response\n\t\t\t\t\t\t\tconst scriptId =\n\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri);\n\t\t\t\t\t\t\tconst result = {\n\t\t\t\t\t\t\t\tbreakpointId: cdpBpId,\n\t\t\t\t\t\t\t\tlocations: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tscriptId: scriptId,\n\t\t\t\t\t\t\t\t\t\tlineNumber: lineNumber - 1,\n\t\t\t\t\t\t\t\t\t\tcolumnNumber: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'breakpoint_remove': {\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\t// No specific result content needed\n\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result: {} });\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'run':\n\t\t\t\tcase 'step_into':\n\t\t\t\tcase 'step_over':\n\t\t\t\tcase 'step_out': {\n\t\t\t\t\t// These come when execution stops or ends\n\t\t\t\t\tconst status = attrs.status; // 'break' or 'stopping'\n\n\t\t\t\t\t// NEW: send scriptParsed for any newly discovered file\n\t\t\t\t\tif (response['xdebug:message']) {\n\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\tresponse['xdebug:message'].$.filename\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (bridgeUri && !this.scriptIdByUrl.has(bridgeUri)) {\n\t\t\t\t\t\t\tawait this.sendScriptToCDP(\n\t\t\t\t\t\t\t\tbridgeUri,\n\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (status === 'break') {\n\t\t\t\t\t\t// Paused at breakpoint or step or exception\n\t\t\t\t\t\t// Get more info: which breakpoint or where\n\t\t\t\t\t\t// Use stack_get to retrieve call stack\n\t\t\t\t\t\tconst txn = this.sendDbgpCommand(`stack_get`);\n\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\t/* internal stack get */\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// If reason indicates exception, we might handle after stack\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t} else if (status === 'stopping' || status === 'stopped') {\n\t\t\t\t\t\t// Script execution finished or engine detached\n\t\t\t\t\t\t// We can treat as resumed and terminated\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tmethod: 'Debugger.resumed',\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Xdebug might close connection after this, which triggers our close handler\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'eval': {\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\t// Handle evaluation result\n\t\t\t\t\t\tlet resultValue: any;\n\t\t\t\t\t\tif (response.property) {\n\t\t\t\t\t\t\t// The eval response may have a <property> with result\n\t\t\t\t\t\t\tconst property = response.property;\n\t\t\t\t\t\t\tconst type = property.$.type;\n\t\t\t\t\t\t\tconst encoding = property.$.encoding;\n\t\t\t\t\t\t\tlet valueStr: string | null = null;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(\n\t\t\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\t\t\t'_'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tvalueStr = property._;\n\t\t\t\t\t\t\t} else if (typeof property.$value !== 'undefined') {\n\t\t\t\t\t\t\t\t// Some responses might carry value in attribute or differently, but usually in _ or in value tag\n\t\t\t\t\t\t\t\tvalueStr = property.$value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (encoding === 'base64' && valueStr !== null) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst buf = Buffer.from(valueStr, 'base64');\n\t\t\t\t\t\t\t\t\tvalueStr = buf.toString();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t/* ignore decoding errors */\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (type === 'string') {\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\t\tvalue: valueStr ?? '',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\ttype === 'int' ||\n\t\t\t\t\t\t\t\ttype === 'float' ||\n\t\t\t\t\t\t\t\ttype === 'bool' ||\n\t\t\t\t\t\t\t\ttype === 'boolen' ||\n\t\t\t\t\t\t\t\ttype === 'integer' ||\n\t\t\t\t\t\t\t\ttype === 'double'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Map basic types\n\t\t\t\t\t\t\t\tlet parsed: any = valueStr;\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\ttype.startsWith('int') ||\n\t\t\t\t\t\t\t\t\ttype === 'integer'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tparsed = parseInt(valueStr || '0', 10);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\ttype === 'float' ||\n\t\t\t\t\t\t\t\t\ttype === 'double'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tparsed = parseFloat(valueStr || '0');\n\t\t\t\t\t\t\t\t} else if (type.startsWith('bool')) {\n\t\t\t\t\t\t\t\t\tparsed =\n\t\t\t\t\t\t\t\t\t\tvalueStr === '1' || valueStr === 'true';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresultValue = { type: 'number', value: parsed };\n\t\t\t\t\t\t\t} else if (type === 'array' || type === 'object') {\n\t\t\t\t\t\t\t\t// Complex object: create a handle for it\n\t\t\t\t\t\t\t\tconst className =\n\t\t\t\t\t\t\t\t\tproperty.$.classname ||\n\t\t\t\t\t\t\t\t\t(type === 'array' ? 'Array' : 'Object');\n\t\t\t\t\t\t\t\tconst objectId = String(this.nextObjectId++);\n\t\t\t\t\t\t\t\tconst fullname = property.$.fullname || '';\n\t\t\t\t\t\t\t\t// Store handle for later property retrieval\n\t\t\t\t\t\t\t\tthis.objectHandles.set(objectId, {\n\t\t\t\t\t\t\t\t\ttype: 'property',\n\t\t\t\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\t\t\t\tcontextId: 0,\n\t\t\t\t\t\t\t\t\tfullname: fullname,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tobjectId: objectId,\n\t\t\t\t\t\t\t\t\tclassName: className,\n\t\t\t\t\t\t\t\t\tdescription: className,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (type === 'null') {\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tsubtype: 'null',\n\t\t\t\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Other types (resource, etc)\n\t\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\t\ttype: 'undefined',\n\t\t\t\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No property in response (maybe an error or empty)\n\t\t\t\t\t\t\tresultValue = {\n\t\t\t\t\t\t\t\ttype: 'undefined',\n\t\t\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst result = { result: resultValue };\n\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result });\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'context_get':\n\t\t\t\tcase 'property_get': {\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\t// Handle variables or object properties retrieval with pagination\n\t\t\t\t\t\tconst objectId =\n\t\t\t\t\t\t\tpending.params?.objectId ||\n\t\t\t\t\t\t\tpending.params?.parentObjectId;\n\t\t\t\t\t\tconst handle = objectId\n\t\t\t\t\t\t\t? this.objectHandles.get(objectId)\n\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\t// @TODO: This is hacky. It enables browsing arrays. Without it,\n\t\t\t\t\t\t// the debugger shows $_SERVER as an array with a single property called\n\t\t\t\t\t\t// $_SERVER.\n\t\t\t\t\t\tconst responseProps =\n\t\t\t\t\t\t\tresponse.property?.property ?? response.property;\n\n\t\t\t\t\t\tconst currentProps: any[] = [];\n\t\t\t\t\t\tif (responseProps) {\n\t\t\t\t\t\t\tconst propertiesArray = Array.isArray(responseProps)\n\t\t\t\t\t\t\t\t? responseProps\n\t\t\t\t\t\t\t\t: [responseProps];\n\n\t\t\t\t\t\t\tfor (const prop of propertiesArray) {\n\t\t\t\t\t\t\t\tconst name =\n\t\t\t\t\t\t\t\t\tprop.$.name || prop.$.fullname || '';\n\t\t\t\t\t\t\t\tlet type = prop.$.type || 'undefined';\n\t\t\t\t\t\t\t\tconst hasChildren = prop.$.children === '1';\n\t\t\t\t\t\t\t\tconst encoding = prop.$.encoding;\n\t\t\t\t\t\t\t\tlet valueStr: string | null = null;\n\t\t\t\t\t\t\t\tif (typeof prop._ !== 'undefined') {\n\t\t\t\t\t\t\t\t\tvalueStr = prop._;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tencoding === 'base64' &&\n\t\t\t\t\t\t\t\t\tvalueStr !== null\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst buf = Buffer.from(\n\t\t\t\t\t\t\t\t\t\t\tvalueStr,\n\t\t\t\t\t\t\t\t\t\t\t'base64'\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tvalueStr = buf.toString();\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t/* ignore base64 decode errors */\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (hasChildren) {\n\t\t\t\t\t\t\t\t\t// Object or array\n\t\t\t\t\t\t\t\t\tconst className =\n\t\t\t\t\t\t\t\t\t\tprop.$.classname ||\n\t\t\t\t\t\t\t\t\t\t(type === 'array' ? 'Array' : 'Object');\n\t\t\t\t\t\t\t\t\tconst childObjectId = String(\n\t\t\t\t\t\t\t\t\t\tthis.nextObjectId++\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t// Store handle\n\t\t\t\t\t\t\t\t\tconst contextId =\n\t\t\t\t\t\t\t\t\t\tpending.cdpMethod ===\n\t\t\t\t\t\t\t\t\t\t\t'Runtime.getProperties' &&\n\t\t\t\t\t\t\t\t\t\tpending.params?.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t? this.objectHandles.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\tpending.params\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t )?.contextId || 0\n\t\t\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\t\tconst depth =\n\t\t\t\t\t\t\t\t\t\tpending.cdpMethod ===\n\t\t\t\t\t\t\t\t\t\t\t'Runtime.getProperties' &&\n\t\t\t\t\t\t\t\t\t\tpending.params?.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t? this.objectHandles.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\tpending.params\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.parentObjectId\n\t\t\t\t\t\t\t\t\t\t\t )?.depth || 0\n\t\t\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\t\t// Use same depth/context as parent\n\t\t\t\t\t\t\t\t\tthis.objectHandles.set(childObjectId, {\n\t\t\t\t\t\t\t\t\t\ttype: 'property',\n\t\t\t\t\t\t\t\t\t\tdepth: depth,\n\t\t\t\t\t\t\t\t\t\tcontextId: contextId,\n\t\t\t\t\t\t\t\t\t\tfullname: prop.$.fullname || name,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcurrentProps.push({\n\t\t\t\t\t\t\t\t\t\tname: prop.$.key || name,\n\t\t\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\t\t\tclassName: className,\n\t\t\t\t\t\t\t\t\t\t\tdescription: className,\n\t\t\t\t\t\t\t\t\t\t\tobjectId: childObjectId,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\twritable: false,\n\t\t\t\t\t\t\t\t\t\tconfigurable: false,\n\t\t\t\t\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Primitive or null\n\t\t\t\t\t\t\t\t\tlet value: any;\n\t\t\t\t\t\t\t\t\tlet subtype: string | undefined;\n\t\t\t\t\t\t\t\t\tif (type === 'string') {\n\t\t\t\t\t\t\t\t\t\tvalue = valueStr ?? '';\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\ttype === 'int' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'integer'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvalue = parseInt(valueStr || '0', 10);\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\ttype === 'float' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'double'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvalue = parseFloat(valueStr || '0');\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\ttype === 'bool' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'boolean'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tvalue =\n\t\t\t\t\t\t\t\t\t\t\tvalueStr === '1' ||\n\t\t\t\t\t\t\t\t\t\t\tvalueStr === 'true';\n\t\t\t\t\t\t\t\t\t\ttype = 'boolean';\n\t\t\t\t\t\t\t\t\t} else if (type === 'null') {\n\t\t\t\t\t\t\t\t\t\tvalue = null;\n\t\t\t\t\t\t\t\t\t\tsubtype = 'null';\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// other types like resource\n\t\t\t\t\t\t\t\t\t\tvalue = valueStr;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst valueObj: any = {\n\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\ttype === 'integer'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'number'\n\t\t\t\t\t\t\t\t\t\t\t\t: type,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tif (subtype) valueObj.subtype = subtype;\n\t\t\t\t\t\t\t\t\tvalueObj.value = value;\n\t\t\t\t\t\t\t\t\tcurrentProps.push({\n\t\t\t\t\t\t\t\t\t\tname: prop.$.key || name,\n\t\t\t\t\t\t\t\t\t\tvalue: valueObj,\n\t\t\t\t\t\t\t\t\t\twritable: false,\n\t\t\t\t\t\t\t\t\t\tconfigurable: false,\n\t\t\t\t\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Handle pagination\n\t\t\t\t\t\tif (handle) {\n\t\t\t\t\t\t\t// Add current page props to aggregated results\n\t\t\t\t\t\t\tconst aggregatedProps = (\n\t\t\t\t\t\t\t\thandle.aggregatedProps || []\n\t\t\t\t\t\t\t).concat(currentProps);\n\n\t\t\t\t\t\t\t// Check if there are more pages - if we got exactly 32 items (page size), there might be more\n\t\t\t\t\t\t\tconst pageSize = 32;\n\t\t\t\t\t\t\tconst hasMorePages =\n\t\t\t\t\t\t\t\tcurrentProps.length === pageSize;\n\n\t\t\t\t\t\t\tif (hasMorePages) {\n\t\t\t\t\t\t\t\t// More pages available, fetch next page\n\t\t\t\t\t\t\t\tconst nextPage = (handle.currentPage || 0) + 1;\n\t\t\t\t\t\t\t\tconst updatedHandle = {\n\t\t\t\t\t\t\t\t\t...handle,\n\t\t\t\t\t\t\t\t\tcurrentPage: nextPage,\n\t\t\t\t\t\t\t\t\taggregatedProps: aggregatedProps,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tthis.objectHandles.set(\n\t\t\t\t\t\t\t\t\tobjectId!,\n\t\t\t\t\t\t\t\t\tupdatedHandle\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Send command for next page\n\t\t\t\t\t\t\t\tlet nextCmd: string;\n\t\t\t\t\t\t\t\tif (command === 'context_get') {\n\t\t\t\t\t\t\t\t\tconst contextId = handle.contextId ?? 0;\n\t\t\t\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\t\t\t\tnextCmd = `context_get -d ${depth} -c ${contextId} -p ${nextPage} -m ${pageSize}`;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// property_get\n\t\t\t\t\t\t\t\t\tconst depth = handle.depth;\n\t\t\t\t\t\t\t\t\tconst fullname = handle.fullname!;\n\t\t\t\t\t\t\t\t\tconst fmtName =\n\t\t\t\t\t\t\t\t\t\tthis.formatPropertyFullName(fullname);\n\t\t\t\t\t\t\t\t\tnextCmd = `property_get -d ${depth} -n ${fmtName} -p ${nextPage} -m ${pageSize}`;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst txn = this.sendDbgpCommand(nextCmd);\n\t\t\t\t\t\t\t\tthis.pendingCommands.set(txn, {\n\t\t\t\t\t\t\t\t\tcdpId: pending.cdpId,\n\t\t\t\t\t\t\t\t\tcdpMethod: pending.cdpMethod,\n\t\t\t\t\t\t\t\t\tparams: pending.params,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t// Don't send response yet, wait for more pages\n\t\t\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// No more pages or last page, send final response\n\t\t\t\t\t\t\t\tconst result = { result: aggregatedProps };\n\t\t\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\t\t\tid: pending.cdpId,\n\t\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No handle, send current props\n\t\t\t\t\t\t\tconst result = { result: currentProps };\n\t\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result });\n\t\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'stack_get': {\n\t\t\t\t\t// Build callFrames for paused state\n\t\t\t\t\tif (response.stack) {\n\t\t\t\t\t\tconst stackEntries = Array.isArray(response.stack)\n\t\t\t\t\t\t\t? response.stack\n\t\t\t\t\t\t\t: [response.stack];\n\t\t\t\t\t\tconst callFrames: any[] = [];\n\t\t\t\t\t\tthis.callFramesMap.clear();\n\t\t\t\t\t\t// Send scriptParsed for any new files in stack\n\t\t\t\t\t\tfor (const frame of stackEntries) {\n\t\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\t\tframe.$.filename\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst scriptId =\n\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri);\n\t\t\t\t\t\t\tif (!this.scriptIdByUrl.has(bridgeUri)) {\n\t\t\t\t\t\t\t\t// Mark it known and send scriptParsed\n\t\t\t\t\t\t\t\tthis.scriptIdByUrl.set(bridgeUri, scriptId);\n\t\t\t\t\t\t\t\tawait this.sendScriptToCDP(bridgeUri, scriptId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Build callFrames array\n\t\t\t\t\t\tfor (const frame of stackEntries) {\n\t\t\t\t\t\t\tconst level = parseInt(frame.$.level, 10);\n\t\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\t\tframe.$.filename\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst line = parseInt(frame.$.lineno, 10);\n\t\t\t\t\t\t\tconst functionName =\n\t\t\t\t\t\t\t\tframe.$.where && frame.$.where !== '{main}'\n\t\t\t\t\t\t\t\t\t? frame.$.where\n\t\t\t\t\t\t\t\t\t: '(anonymous)';\n\t\t\t\t\t\t\tconst callFrameId = `frame:${level}`;\n\t\t\t\t\t\t\t// Map callFrameId to depth for evaluate\n\t\t\t\t\t\t\tthis.callFramesMap.set(callFrameId, level);\n\t\t\t\t\t\t\t// Prepare scope chain (local and global)\n\t\t\t\t\t\t\tconst scopes: any[] = [];\n\t\t\t\t\t\t\t// Local scope\n\t\t\t\t\t\t\tconst localObjectId = String(this.nextObjectId++);\n\t\t\t\t\t\t\tthis.objectHandles.set(localObjectId, {\n\t\t\t\t\t\t\t\ttype: 'context',\n\t\t\t\t\t\t\t\tcontextId: 0,\n\t\t\t\t\t\t\t\tdepth: level,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tscopes.push({\n\t\t\t\t\t\t\t\ttype: 'local',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tobjectId: localObjectId,\n\t\t\t\t\t\t\t\t\tclassName: 'Object',\n\t\t\t\t\t\t\t\t\tdescription: 'Local',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Global scope (superglobals in PHP)\n\t\t\t\t\t\t\tconst globalObjectId = String(this.nextObjectId++);\n\t\t\t\t\t\t\tthis.objectHandles.set(globalObjectId, {\n\t\t\t\t\t\t\t\ttype: 'context',\n\t\t\t\t\t\t\t\tcontextId: 1,\n\t\t\t\t\t\t\t\tdepth: level,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tscopes.push({\n\t\t\t\t\t\t\t\ttype: 'global',\n\t\t\t\t\t\t\t\tobject: {\n\t\t\t\t\t\t\t\t\tobjectId: globalObjectId,\n\t\t\t\t\t\t\t\t\tclassName: 'Object',\n\t\t\t\t\t\t\t\t\tdescription: 'Global',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Build callFrame entry\n\t\t\t\t\t\t\tcallFrames.push({\n\t\t\t\t\t\t\t\tcallFrameId: callFrameId,\n\t\t\t\t\t\t\t\tfunctionName: functionName,\n\t\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\t\tscriptId:\n\t\t\t\t\t\t\t\t\t\tthis.getOrCreateScriptId(bridgeUri),\n\t\t\t\t\t\t\t\t\tlineNumber: line - 1,\n\t\t\t\t\t\t\t\t\tcolumnNumber: 0,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tscopeChain: scopes,\n\t\t\t\t\t\t\t\tthis: {\n\t\t\t\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\t\t\t\tclassName: 'Object',\n\t\t\t\t\t\t\t\t\tdescription: 'Object',\n\t\t\t\t\t\t\t\t\tobjectId: globalObjectId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Send paused event to DevTools\n\t\t\t\t\t\tlet pauseReason = 'pause';\n\t\t\t\t\t\t// Determine reason from Xdebug if available\n\t\t\t\t\t\t// (Xdebug 'reason' might be in the original run/step response we handled prior)\n\t\t\t\t\t\t// We'll simplify: if any breakpoint matches top frame location, reason = breakpoint\n\t\t\t\t\t\tif (stackEntries.length > 0) {\n\t\t\t\t\t\t\tconst topFrame = stackEntries[0];\n\t\t\t\t\t\t\tif (topFrame.$.filename && topFrame.$.lineno) {\n\t\t\t\t\t\t\t\tconst bridgeUri = this.uriFromDBGPToBridge(\n\t\t\t\t\t\t\t\t\ttopFrame.$.filename\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst lineNumber = parseInt(\n\t\t\t\t\t\t\t\t\ttopFrame.$.lineno,\n\t\t\t\t\t\t\t\t\t10\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tfor (const bp of this.breakpoints.values()) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tbp.fileUri === bridgeUri &&\n\t\t\t\t\t\t\t\t\t\tbp.lineNumber === lineNumber\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tpauseReason = 'breakpoint';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.cdp.sendMessage({\n\t\t\t\t\t\t\tmethod: 'Debugger.paused',\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\treason: pauseReason,\n\t\t\t\t\t\t\t\tcallFrames: callFrames,\n\t\t\t\t\t\t\t\thitBreakpoints:\n\t\t\t\t\t\t\t\t\tpauseReason === 'breakpoint' ? [''] : [],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// Remove pending stack_get\n\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// Other commands we didn't specifically handle\n\t\t\t\t\tif (pending && pending.cdpId !== undefined) {\n\t\t\t\t\t\tthis.cdp.sendMessage({ id: pending.cdpId, result: {} });\n\t\t\t\t\t\tthis.pendingCommands.delete(transId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msgObj.stream) {\n\t\t\tconst stream = msgObj.stream;\n\t\t\tconst kind = stream.$.type; // 'stdout' or 'stderr'\n\t\t\tconst enc = stream.$.encoding || 'none';\n\t\t\tlet data = typeof stream._ === 'string' ? stream._ : '';\n\t\t\tif (enc === 'base64') data = Buffer.from(data, 'base64').toString();\n\n\t\t\tthis.cdp.sendMessage({\n\t\t\t\tmethod: 'Log.entryAdded',\n\t\t\t\tparams: {\n\t\t\t\t\tentry: {\n\t\t\t\t\t\tsource: 'other',\n\t\t\t\t\t\tlevel: kind === 'stderr' ? 'error' : 'info',\n\t\t\t\t\t\ttext: data,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\tstackTrace: { callFrames: [] },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t} else if (msgObj.notify) {\n\t\t\t// Notifications (e.g., breakpoint_resolved, etc.) - not specifically handled here.\n\t\t}\n\t}\n}\n","import { logger } from '@php-wasm/logger';\nimport type { PHP, PHPWorker, RemoteAPI } from '@php-wasm/universal';\nimport { readdirSync, readFileSync, lstatSync } from 'fs';\nimport path from 'path';\nimport { CDPServer } from './cdp-server';\nimport { DbgpSession } from './dbgp-session';\nimport { XdebugCDPBridge } from './xdebug-cdp-bridge';\n\nexport type StartBridgeConfig = {\n\tcdpPort?: number;\n\tcdpHost?: string;\n\tdbgpPort?: number;\n\tphpRoot?: string;\n\tphpInstance?: PHP | RemoteAPI<PHPWorker>;\n\tgetPHPFile?: (path: string) => string | Promise<string>;\n\tbreakOnFirstLine?: boolean;\n};\n\nexport async function startBridge(config: StartBridgeConfig) {\n\tconst cdpPort = config.cdpPort ?? 9229;\n\tconst dbgpPort = config.dbgpPort ?? 9003;\n\tconst cdpHost = config.cdpHost ?? 'localhost';\n\tconst phpRoot = config.phpRoot ?? process.cwd();\n\tconst breakOnFirstLine = config.breakOnFirstLine ?? false;\n\n\tlogger.log('Starting XDebug Bridge...');\n\n\t// Entry point to start the service\n\tconst cdpServer = new CDPServer(cdpPort);\n\n\tlogger.log('Connect Chrome DevTools to CDP at:');\n\tlogger.log(\n\t\t`devtools://devtools/bundled/inspector.html?ws=${cdpHost}:${cdpPort}\\n`\n\t);\n\n\tawait new Promise((resolve) => cdpServer.on('clientConnected', resolve));\n\tawait new Promise((resolve) => setTimeout(resolve, 2000));\n\n\tlogger.log('Chrome connected! Initializing Xdebug receiver...');\n\n\tconst dbgpSession = new DbgpSession(dbgpPort);\n\n\tlogger.log(`XDebug receiver running on port ${dbgpPort}`);\n\tlogger.log('Running a PHP script with Xdebug enabled...');\n\n\t// Recursively get a list of .php files in phpRoot\n\tasync function getPhpFiles(dir: string): Promise<string[]> {\n\t\tconst results: string[] = [];\n\t\tconst list = config.phpInstance\n\t\t\t? await config.phpInstance!.listFiles(dir)\n\t\t\t: readdirSync(dir);\n\t\tfor (const file of list) {\n\t\t\tconst filePath = path.join(dir, file);\n\t\t\ttry {\n\t\t\t\t// lstat avoids crashes when encountering symlinks\n\t\t\t\tconst stat = config.phpInstance\n\t\t\t\t\t? await config.phpInstance!.isDir(filePath)\n\t\t\t\t\t: lstatSync(filePath).isDirectory();\n\t\t\t\tif (stat) {\n\t\t\t\t\tresults.push(...(await getPhpFiles(filePath)));\n\t\t\t\t} else if (file.endsWith('.php')) {\n\t\t\t\t\tresults.push(filePath);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip this entry if we can't read it\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t}\n\n\tconst getPHPFile = config.phpInstance\n\t\t? (path: string) => config.phpInstance!.readFileAsText(path)\n\t\t: config.getPHPFile\n\t\t? config.getPHPFile\n\t\t: (path: string) => readFileSync(path, 'utf-8');\n\n\tconst phpFiles = await getPhpFiles(phpRoot);\n\treturn new XdebugCDPBridge(dbgpSession, cdpServer, {\n\t\tknownScriptUrls: phpFiles,\n\t\tphpRoot,\n\t\tgetPHPFile,\n\t\tbreakOnFirstLine,\n\t});\n}\n","/**\n * A CLI script that runs PHP CLI via the WebAssembly build.\n */\nimport {\n\tLatestSupportedPHPVersion,\n\tSupportedPHPVersionsList,\n} from '@php-wasm/universal';\nimport { spawn } from 'child_process';\nimport { chmodSync, existsSync, mkdtempSync, writeFileSync } from 'fs';\nimport os from 'os';\nimport { rootCertificates } from 'tls';\n/* eslint-disable no-console */\nimport { addXdebugIDEConfig, clearXdebugIDEConfig } from '@php-wasm/cli-util';\nimport {\n\tFileLockManagerForNode,\n\tloadNodeRuntime,\n\tuseHostFilesystem,\n} from '@php-wasm/node';\nimport type { SupportedPHPVersion } from '@php-wasm/universal';\nimport { PHP } from '@php-wasm/universal';\nimport { startBridge } from '@php-wasm/xdebug-bridge';\nimport path from 'path';\n\nlet args = process.argv.slice(2);\nif (!args.length) {\n\targs = ['--help'];\n}\n\nconst bold = (text: string) =>\n\tprocess.stdout.isTTY ? '\\x1b[1m' + text + '\\x1b[0m' : text;\n\nconst italic = (text: string) =>\n\tprocess.stdout.isTTY ? `\\x1b[3m${text}\\x1b[0m` : text;\n\nconst highlight = (text: string) =>\n\tprocess.stdout.isTTY ? `\\x1b[33m${text}\\x1b[0m` : text;\n\nconst baseUrl = (import.meta || {}).url;\n\n// Write the ca-bundle.crt file to disk so that PHP can find it.\nconst caBundlePath = new URL('ca-bundle.crt', baseUrl).pathname;\nif (!existsSync(caBundlePath)) {\n\twriteFileSync(caBundlePath, rootCertificates.join('\\n'));\n}\nargs.unshift('-d', `openssl.cafile=${caBundlePath}`);\n\nasync function run() {\n\tconst defaultPhpIniPath = new URL('php.ini', baseUrl).pathname;\n\tconst phpVersion = (process.env['PHP'] ||\n\t\tLatestSupportedPHPVersion) as SupportedPHPVersion;\n\tif (!SupportedPHPVersionsList.includes(phpVersion)) {\n\t\tthrow new Error(`Unsupported PHP version ${phpVersion}`);\n\t}\n\n\tconst hasXdebugOption = args.some((arg) => arg.startsWith('--xdebug'));\n\tif (hasXdebugOption) {\n\t\targs = args.filter((arg) => arg !== '--xdebug');\n\t}\n\n\tconst hasDevtoolsOption = args.some((arg) =>\n\t\targ.startsWith('--experimental-devtools')\n\t);\n\tif (hasDevtoolsOption) {\n\t\targs = args.filter((arg) => arg !== '--experimental-devtools');\n\t}\n\n\tconst experimentalUnsafeIDEIntegrationOptions =\n\t\targs\n\t\t\t.filter((arg) =>\n\t\t\t\targ.startsWith('--experimental-unsafe-ide-integration')\n\t\t\t)\n\t\t\t.map((arg) => {\n\t\t\t\tconst value = arg.split('=')[1];\n\t\t\t\tif (value === undefined) return ['vscode', 'phpstorm'];\n\t\t\t\tif (value.includes(',')) return value.split(',');\n\t\t\t\treturn [value];\n\t\t\t})[0] ?? false;\n\tif (experimentalUnsafeIDEIntegrationOptions) {\n\t\targs = args.filter(\n\t\t\t(arg) => !arg.startsWith('--experimental-unsafe-ide-integration')\n\t\t);\n\t}\n\n\t// npm scripts set the TMPDIR env variable\n\t// PHP accepts a TMPDIR env variable and expects it to\n\t// be a writable directory within the PHP filesystem.\n\t// These two clash and prevent PHP from creating temporary\n\t// files and directories so let's just not pass the npm TMPDIR\n\t// to PHP.\n\t// @see https://github.com/npm/npm/issues/4531\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { TMPDIR, ...envVariables } = process.env;\n\n\t/**\n\t * Ensure the PHP_BINARY constant is set to the PHP-WASM binary.\n\t *\n\t * ## Rationale\n\t *\n\t * We want any `proc_open()` calls to use the PHP-WASM binary and\n\t * not the system PHP binary.\n\t *\n\t * ## How it works\n\t *\n\t * The code below creates a temporary `php` executable in PATH,\n\t * which covers `proc_open( \"php\", ... )` calls.\n\t *\n\t * Furthermore, when PHP detects the `php` executable in PATH, it\n\t * sets the PHP_BINARY constant to it.\n\t */\n\tconst tempDir = mkdtempSync(path.join(os.tmpdir(), 'php-wasm-bin'));\n\twriteFileSync(\n\t\t`${tempDir}/php`,\n\t\t`#!/bin/sh\n${process.argv[0]} ${process.execArgv.join(' ')} ${process.argv[1]}\n\t`\n\t);\n\tchmodSync(`${tempDir}/php`, 0o755);\n\n\tconst sysTempDir = mkdtempSync(path.join(os.tmpdir(), 'php-wasm-sys-tmp'));\n\tconst php = new PHP(\n\t\tawait loadNodeRuntime(phpVersion, {\n\t\t\temscriptenOptions: {\n\t\t\t\tfileLockManager: new FileLockManagerForNode(),\n\t\t\t\tprocessId: 1,\n\t\t\t\tENV: {\n\t\t\t\t\t...envVariables,\n\t\t\t\t\tTMPDIR: sysTempDir,\n\t\t\t\t\tTERM: 'xterm',\n\t\t\t\t\tPATH: `${tempDir}:${envVariables['PATH']}`,\n\t\t\t\t},\n\t\t\t},\n\t\t\twithXdebug: hasXdebugOption,\n\t\t})\n\t);\n\tphp.setSpawnHandler((command: string, args: string[]): any =>\n\t\tspawn(command, args, {\n\t\t\tshell: true,\n\t\t\tstdio: ['pipe', 'pipe', 'pipe'],\n\t\t})\n\t);\n\n\tuseHostFilesystem(php);\n\n\t// If xdebug, and experimental IDE are enabled,\n\t// add the new IDE config.\n\tif (hasXdebugOption && experimentalUnsafeIDEIntegrationOptions) {\n\t\ttry {\n\t\t\tconst IDEConfigName = 'PHP.wasm CLI - Listen for Xdebug';\n\t\t\tconst ides = experimentalUnsafeIDEIntegrationOptions;\n\n\t\t\t// NOTE: Both the 'clear' and 'add' operations can throw errors.\n\t\t\tawait clearXdebugIDEConfig(IDEConfigName, process.cwd());\n\n\t\t\tconst modifiedConfig = await addXdebugIDEConfig({\n\t\t\t\tname: IDEConfigName,\n\t\t\t\thost: 'example.com',\n\t\t\t\tport: 443,\n\t\t\t\tides: ides,\n\t\t\t\tcwd: process.cwd(),\n\t\t\t});\n\n\t\t\t// Display IDE-specific instructions\n\t\t\tconst hasVSCode = ides.includes('vscode');\n\t\t\tconst hasPhpStorm = ides.includes('phpstorm');\n\t\t\tconst configFiles = Object.values(modifiedConfig);\n\n\t\t\tconsole.log('');\n\n\t\t\tif (configFiles.length > 0) {\n\t\t\t\tconsole.log(bold(`Xdebug configured successfully`));\n\t\t\t\tconsole.log(\n\t\t\t\t\thighlight(`Updated IDE config: `) + configFiles.join(' ')\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconsole.log(bold(`Xdebug configuration failed.`));\n\t\t\t\tconsole.log(\n\t\t\t\t\t'No IDE-specific project settings directory was found in the current working directory.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log('');\n\n\t\t\tif (hasVSCode && modifiedConfig['vscode']) {\n\t\t\t\tconsole.log(bold('VS Code / Cursor instructions:'));\n\t\t\t\tconsole.log(\n\t\t\t\t\t' 1. Ensure you have installed an IDE extension for PHP Debugging'\n\t\t\t\t);\n\t\t\t\tconsole.log(\n\t\t\t\t\t` (The ${bold('PHP Debug')} extension by ${bold(\n\t\t\t\t\t\t'Xdebug'\n\t\t\t\t\t)} has been a solid option)`\n\t\t\t\t);\n\t\t\t\tconsole.log(\n\t\t\t\t\t' 2. Open the Run and Debug panel on the left sidebar'\n\t\t\t\t);\n\t\t\t\tconsole.log(\n\t\t\t\t\t` 3. Select \"${italic(IDEConfigName)}\" from the dropdown`\n\t\t\t\t);\n\t\t\t\tconsole.log(' 3. Click \"start debugging\"');\n\t\t\t\tconsole.log(' 5. Set a breakpoint.');\n\t\t\t\tconsole.log(' 6. Run your command with PHP.wasm CLI.');\n\t\t\t\tif (hasPhpStorm) {\n\t\t\t\t\tconsole.log('');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hasPhpStorm && modifiedConfig['phpstorm']) {\n\t\t\t\tconsole.log(bold('PhpStorm instructions:'));\n\t\t\t\tconsole.log(\n\t\t\t\t\t` 1. Choose \"${italic(\n\t\t\t\t\t\tIDEConfigName\n\t\t\t\t\t)}\" debug configuration in the toolbar`\n\t\t\t\t);\n\t\t\t\tconsole.log(' 2. Click the debug button (bug icon)`');\n\t\t\t\tconsole.log(' 3. Set a breakpoint.');\n\t\t\t\tconsole.log(' 4. Run your command with PHP.wasm CLI.');\n\t\t\t}\n\n\t\t\tconsole.log('');\n\t\t} catch (error) {\n\t\t\tthrow new Error('Could not configure Xdebug', {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (hasXdebugOption && hasDevtoolsOption) {\n\t\tconst bridge = await startBridge({ breakOnFirstLine: true });\n\n\t\tbridge.start();\n\t}\n\n\tconst hasMinusCOption = args.some((arg) => arg.startsWith('-c'));\n\tif (!hasMinusCOption) {\n\t\targs.unshift('-c', defaultPhpIniPath);\n\t}\n\n\tconst response = await php.cli(['php', ...args]);\n\tresponse.stderr.pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite(chunk) {\n\t\t\t\tprocess.stderr.write(chunk);\n\t\t\t},\n\t\t})\n\t);\n\tresponse.stdout.pipeTo(\n\t\tnew WritableStream({\n\t\t\twrite(chunk) {\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t},\n\t\t})\n\t);\n\n\tawait response.exitCode\n\t\t.catch((result) => {\n\t\t\tif (result.name === 'ExitStatus') {\n\t\t\t\tprocess.exit(result.status === undefined ? 1 : result.status);\n\t\t\t}\n\t\t\tthrow result;\n\t\t})\n\t\t.finally(() => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tprocess.exit(0);\n\t\t\t\t// 100 is an arbitrary number. It's there to give any child processes\n\t\t\t\t// a chance to pass their output to JS before the main process exits.\n\t\t\t}, 100);\n\t\t});\n}\n\nrun();\n"],"names":["nameStartChar","nameChar","nameRegexp","regexName","getAllMatches","string","regex","matches","match","allmatches","len","index","isName","isExist","v","defaultOptions","validate","xmlData","options","tags","tagFound","reachedRoot","i","readPI","tagStartPos","readCommentAndCDATA","closingTag","tagName","validateTagName","msg","getErrorObject","getLineNumberForPosition","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","otg","openPos","afterAmp","validateAmpersand","isWhiteSpace","t","char","start","tagname","angleBracketsCount","doubleQuote","singleQuote","startChar","tagClosed","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","validateNumberAmpersand","re","count","code","message","lineNumber","lines","val","jPath","attrs","buildOptions","METADATA_SYMBOL","XmlNode","key","node","startIndex","DocTypeReader","processEntities","entities","hasBody","comment","exp","hasSeq","entityName","skipWhitespace","validateEntityName","entityValue","notationName","identifierType","publicIdentifier","systemIdentifier","type","identifierVal","elementName","contentModel","attributeName","attributeType","allowedNotations","notation","validTypes","defaultValue","data","seq","j","name","hexRegex","numRegex","consider","toNumber","str","trimmedStr","parse_int","resolveEnotation","sign","leadingZeros","numTrimmedByZeros","trimZeros","decimalAdjacentToLeadingZeros","num","parsedStr","n","eNotationRegx","eChar","eAdjacentToLeadingZeros","numStr","base","getIgnoreAttributesFn","ignoreAttributes","pattern","OrderedObjParser","_","addExternalEntities","parseXml","parseTextData","resolveNameSpace","buildAttributesMap","isItStopNode","replaceEntitiesValue","readStopNodeData","saveTextToParentTag","addChild","externalEntities","entKeys","ent","dontTrim","hasAttributes","isLeafNode","escapeEntities","newval","parseValue","prefix","attrsRegx","oldVal","aName","newVal","attrCollection","xmlObj","xmlNode","currentNode","textData","docTypeReader","closeIndex","findClosingIndex","colonIndex","lastTagName","propIndex","tagData","readTagExp","childNode","endIndex","tagExp","rawTagName","attrExpPresent","lastTag","tagContent","entity","stopNodes","currentTagName","allNodesExp","stopNodePath","stopNodeExp","tagExpWithClosingIndex","closingChar","attrBoundary","ch","errMsg","closingIndex","removeNSPrefix","separatorIndex","openTagCount","shouldParse","prettify","compress","arr","text","compressedObj","tagObj","property","propName","newJpath","isLeaf","isLeafTag","assignAttributes","obj","keys","attrMap","jpath","atrrName","textNodeName","propCount","XMLParser","validationOption","orderedObjParser","orderedResult","value","EOL","toXml","jArray","indentation","arrToStr","xmlStr","isPreviousElementTag","newJPath","tagText","isStopNode","attStr","attr_to_str","tempInd","piTextNodeName","newIdentation","tagStart","tagValue","attr","attrVal","textValue","a","Builder","isAttribute","processTextOrObjNode","indentate","jObj","buildFromOrderedJs","level","ajPath","arrLen","listTagVal","listTagAttr","item","Ks","L","object","tagEndExp","piClosingChar","closeTag","createScanner","ignoreTrivia","pos","tokenOffset","token","lineStartOffset","tokenLineStartOffset","prevTokenLineStartOffset","scanError","scanHexDigits","exact","digits","setPosition","newPosition","scanNumber","isDigit","end","scanString","ch3","isLineBreak","scanNext","safeLength","commentClosed","isUnknownContentCharacter","scanNextNonTrivia","CharacterCodes","cachedSpaces","maxCachedValues","cachedBreakLinesWithSpaces","supportedEols","format","documentText","range","initialIndentLevel","formatText","formatTextStart","rangeStart","rangeEnd","isEOL","endOffset","computeIndentLevel","eol","getEOL","eolFastPathSupported","numberLineBreaks","indentLevel","indentValue","repeat","indentType","scanner","hasError","newLinesAndIndent","amountOfSpaces","editOperations","addEdit","startOffset","firstToken","firstTokenStart","initialIndent","firstTokenEnd","secondToken","replaceContent","needsLineBreak","commentTokenStart","secondTokenStart","s","content","nChars","tabSize","offset","ParseOptions","parseTree","errors","currentParent","ensurePropertyComplete","onValue","valueNode","visit","length","getNodeType","sep","error","findNodeAtLocation","root","path","segment","found","propertyNode","visitor","_scanner","_jsonPath","suppressedCallbacks","toNoArgVisit","visitFunction","toOneArgVisit","arg","toOneArgVisitWithPath","toBeginVisit","toEndVisit","onObjectBegin","onObjectProperty","onObjectEnd","onArrayBegin","onArrayEnd","onLiteralValue","onSeparator","onComment","onError","disallowComments","allowTrailingComma","handleError","skipUntilAfter","skipUntil","parseString","isValue","parseLiteral","tokenValue","parseProperty","parseObject","needsComma","parseArray","isFirstElement","setProperty","originalPath","parent","lastSegment","existing","propertyIndex","removeBegin","removeEnd","previous","withFormatting","newProperty","p","edit","insertIndex","removalIndex","toRemove","parentEndOffset","toModify","newText","applyEdit","begin","edits","editLength","ScanError","SyntaxKind","parser.parseTree","parser.findNodeAtLocation","ParseErrorCode","printParseErrorCode","modify","edit.setProperty","applyEdits","sortedEdits","b","diff","lastModifiedOffset","e","edit.applyEdit","filterLocalMounts","cwd","mounts","mount","absoluteHostPath","cwdChildPrefix","xmlParserOptions","xmlBuilderOptions","jsoncParseOptions","updatePhpStormConfig","xmlContent","host","port","mappings","ideKey","xmlParser","config","serverElement","mapping","toPosixPath","projectElement","c","projectVersion","componentElement","serversElement","serverElementIndex","runManagerElement","runConfigElement","xml","XMLBuilder","updateVSCodeConfig","jsonContent","JSONC.parseTree","configurationsNode","JSONC.findNodeAtLocation","JSONC.modify","JSONC.applyEdits","configurationIndex","child","configuration","acc","currentLength","jsoncApplyEdits","addXdebugIDEConfig","ides","modifiedConfig","phpStormRelativeConfigFilePath","phpStormConfigFilePath","fs","contents","updatedXml","vsCodeRelativeConfigFilePath","vsCodeConfigFilePath","updatedJson","clearXdebugIDEConfig","json","formattedErrors","JSONC.printParseErrorCode","formattedEdits","pathStr","currentJsRuntime","asPromise","resolve","reject","event","isByobSupported","inputBytes","stream","File","sources","fileName","date","reader","position","blob","controller","view","buffer","uint8array","bytesRead","CustomEvent","logEventType","logEvent","log","args","logger","logToConsole","prepareLogMessage","LogSeverity","logMessage","logs","addToLogArray","logToMemory","formatLogEntry","LogPrefix","Logger","handlers","logWithSeverity","handler","severity","getDefaultHandlers","formattedDate","formattedTime","now","R","ReflectApply","target","receiver","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","EventEmitter","eventsModule","once","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","doError","events","er","err","listeners","arrayClone","_addListener","prepend","m","w","onceWrapper","_onceWrap","state","wrapped","list","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","copy","ret","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","CDPServer","WebSocketServer","ws","DbgpSession","net","socket","nullIndex","lengthStr","command","camelCase","camelcase","nextChrUpper","leadingHyphens","chr","decamelize","joinString","lowercase","notCamelcase","chrLower","chrString","looksLikeNumber","x","tokenizeArgString","argString","prevC","opening","ii","DefaultValuesForTypeKey","mixin","YargsParser","_mixin","argsInput","opts","inputIsString","aliases","combineAliases","defaults","configObjects","envPrefix","notFlagsOption","notFlagsArgv","newAliases","defaulted","__","negative","negatedBoolean","opt","assignment","extendAliases","alias","checkConfiguration","notFlags","argv","argvReturn","truncatedArg","broken","letters","next","isUnknownOptionAsArg","pushPositional","checkAllAliases","eatArray","eatNargs","setArg","applyEnvVars","setConfig","setConfigObjects","applyDefaultsAndAliases","applyCoercions","setPlaceholderKeys","hasKey","k","prop","maybeCoercedNumber","maybeCoerceNumber","argAfterEqualSign","toEat","isUndefined","available","consumed","argsToSet","nargsCount","defVal","processValue","shouldStripQuotes","addNewAlias","splitKey","setKey","keyProperties","stripQuotes","increment","configLookup","configKey","configPath","resolvedConfigPath","resolveConfig","setConfigObject","ex","prev","fullKey","configObject","configOnly","env","envVar","coerce","applied","ali","canLog","o","sanitizeKey","isTypeArray","isValueArray","duplicate","y","flag","toCheck","setAlias","hasAnyFlag","flagsKeys","hasFlagsMatching","patterns","hasAllShortFlags","hasAllFlags","isUnknownOption","defaultForType","guessType","aliasArrays","combined","change","aliasArray","self","lastAlias","orig","_a","_b","_c","minNodeVersion","nodeVersion","normalize","readFileSync","shim$1","writeFile","file","statSync","shim","Y18N","cb","singular","plural","quantity","values","locale","parts","part","work","_this","directory","languageFile","serializedLocale","localeLookup","y18n","_shim","_y18n","__dirname","fileURLToPath","mainFilename","this","assign","getValue","isArray","isEmpty","isFunction","isObject","isPlainObject","slice","hasProp","source","ref","ctor","proto","Utility","XMLDOMImplementationModule","XMLDOMImplementation","feature","version","qualifiedName","publicId","systemId","namespaceURI","doctype","title","XMLDOMErrorHandlerModule","XMLDOMErrorHandler","XMLDOMStringListModule","XMLDOMStringList","require$$0","require$$1","XMLDOMConfigurationModule","XMLDOMConfiguration","NodeTypeModule","NodeType","XMLAttributeModule","XMLAttribute","XMLNamedNodeMapModule","XMLNamedNodeMap","nodes","oldNode","localName","XMLNode","extend","require$$2","require$$3","require$$4","XMLElementModule","superClass","XMLElement","attributes","ref1","att","attName","clonedSelf","clonedChild","attValue","newAttr","oldAttr","isId","idAttr","classNames","XMLCharacterDataModule","XMLCharacterData","XMLCDataModule","XMLCData","XMLCommentModule","XMLComment","XMLDeclarationModule","XMLDeclaration","encoding","standalone","XMLDTDAttListModule","XMLDTDAttList","defaultValueType","XMLDTDEntityModule","XMLDTDEntity","pe","XMLDTDElementModule","XMLDTDElement","XMLDTDNotationModule","XMLDTDNotation","require$$5","require$$6","require$$7","XMLDocTypeModule","XMLDocType","pubID","sysID","ref2","XMLRawModule","XMLRaw","XMLTextModule","XMLText","XMLProcessingInstructionModule","XMLProcessingInstruction","XMLDummyModule","XMLDummy","XMLNodeListModule","XMLNodeList","DocumentPositionModule","DocumentPosition","XMLNodeModule","parent1","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","results","lastChild","len1","ref3","newChild","refChild","removed","insTarget","insValue","instruction","doc","xmldec","clonedRoot","oldChild","deep","other","res","isDescendantChild","nodePos","thisPos","func","bind","fn","me","XMLStringifierModule","XMLStringifier","ampregex","WriterStateModule","WriterState","require$$14","require$$15","XMLWriterBaseModule","XMLWriterBase","filteredOptions","ref4","ref5","ref6","r","childNodeCount","firstChildNode","prettySuppressed","XMLStringWriterModule","XMLStringWriter","XMLDocumentModule","XMLDocument","writer","writerOptions","importedNode","elementId","eventInterface","whatToShow","filter","require$$16","require$$17","require$$18","XMLDocumentCBModule","XMLDocumentCB","onData","onEnd","oldValidationFlag","chunk","XMLStreamWriterModule","XMLStreamWriter","lib","builder","escapeCDATA","requiresCDATA","wrapCDATA","entry","builder_1","rootObj","attrkey","charkey","render","rootElement","rootName","element","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","encodeChunk","uint8","output","extraBytes","maxChunkLength","len2","ieee754","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","rt","base64","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","createBuffer","buf","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","size","alloc","fill","checked","actual","fromArrayLike","array","arrayView","byteOffset","numberIsNaN","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","max","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","checkInt","min","maxBytes","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","src","dst","alphabet","table","i16","copyProps","module","SafeBuffer","isEncoding","_normalizeEncoding","enc","retried","normalizeEncoding","nenc","string_decoder","StringDecoder","nb","utf16Text","utf16End","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","total","sax","strict","SAXParser","SAXStream","createStream","buffers","parser","clearBuffers","S","rootNS","emit","F","newf","checkBufferLength","maxAllowed","maxActual","l","closeText","emitNode","flushBuffers","write","Stream","streamWraps","ev","h","SD","CDATA","DOCTYPE","XML_NAMESPACE","XMLNS_NAMESPACE","nameStart","nameBody","entityStart","entityBody","isWhitespace","isQuote","isAttribEnd","isMatch","notMatch","nodeType","textopts","strictFail","newTag","tag","qname","attribute","qualName","local","attrib","qn","openTag","selfClosing","nv","uri","closeTo","close","parseEntity","entityLC","beginWhiteSpace","charAt","starti","pad","returnState","parsedEntity","stringFromCharCode","floor","fromCodePoint","MAX_SIZE","codeUnits","highSurrogate","lowSurrogate","bom","prefixMatch","processors","defineProperty","processItem","setImmediate","thing","process","descriptor","Parser","error1","newValue","ontext","stack","processedKey","cdata","emptyStr","nodeName","objClone","old","xpath","charChild","ValidationError","parseStringPromise","XdebugCDPBridge","dbgp","cdp","url","msgObj","bridgeUri","scriptId","id","highlightUri","cdpUri","phpContent","phpLines","_value","sourceMap","sourceMapDataUri","createHash","fullname","needsQuotes","txnIdStr","cmdStr","method","params","sendResponse","line","dbgpUri","cdpBreakpointId","cmd","txn","breakpointId","bpIdStr","bp","expression","callFrameId","objectId","handle","contextId","updatedHandle","depth","fmtName","sid","fullPath","breakpoint","firstBreakTxn","response","transId","pending","xdebugBpId","bpInfo","cdpBpId","status","resultValue","valueStr","className","responseProps","currentProps","propertiesArray","hasChildren","childObjectId","subtype","valueObj","aggregatedProps","pageSize","nextPage","nextCmd","stackEntries","callFrames","frame","functionName","scopes","localObjectId","globalObjectId","pauseReason","topFrame","kind","startBridge","cdpPort","dbgpPort","cdpHost","phpRoot","breakOnFirstLine","cdpServer","dbgpSession","getPhpFiles","readdirSync","filePath","lstatSync","getPHPFile","phpFiles","bold","italic","highlight","baseUrl","caBundlePath","existsSync","writeFileSync","rootCertificates","run","defaultPhpIniPath","phpVersion","LatestSupportedPHPVersion","SupportedPHPVersionsList","hasXdebugOption","hasDevtoolsOption","experimentalUnsafeIDEIntegrationOptions","TMPDIR","envVariables","tempDir","mkdtempSync","os","chmodSync","sysTempDir","php","PHP","loadNodeRuntime","FileLockManagerForNode","spawn","useHostFilesystem","IDEConfigName","hasVSCode","hasPhpStorm","configFiles"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82]}
|