vbapm 0.6.3-alpha

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.
Files changed (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +246 -0
  3. package/lib/_commonjsHelpers-553b27b3.js +2 -0
  4. package/lib/_commonjsHelpers-553b27b3.js.map +1 -0
  5. package/lib/build-project-55e5df48.js +4 -0
  6. package/lib/build-project-55e5df48.js.map +1 -0
  7. package/lib/build-target-283e1e7d.js +10 -0
  8. package/lib/build-target-283e1e7d.js.map +1 -0
  9. package/lib/create-project-905598ca.js +11 -0
  10. package/lib/create-project-905598ca.js.map +1 -0
  11. package/lib/debug.js +2 -0
  12. package/lib/debug.js.map +1 -0
  13. package/lib/export-project-55168787.js +5 -0
  14. package/lib/export-project-55168787.js.map +1 -0
  15. package/lib/export-target-c9ddd2fa.js +5 -0
  16. package/lib/export-target-c9ddd2fa.js.map +1 -0
  17. package/lib/get-target-23b8cc04.js +12 -0
  18. package/lib/get-target-23b8cc04.js.map +1 -0
  19. package/lib/index-35cff1d5.js +38 -0
  20. package/lib/index-35cff1d5.js.map +1 -0
  21. package/lib/index-87f55e79.js +4 -0
  22. package/lib/index-87f55e79.js.map +1 -0
  23. package/lib/index-b49bd5b2.js +2 -0
  24. package/lib/index-b49bd5b2.js.map +1 -0
  25. package/lib/index-c97017db.js +2 -0
  26. package/lib/index-c97017db.js.map +1 -0
  27. package/lib/index-d9ba3ba0.js +6 -0
  28. package/lib/index-d9ba3ba0.js.map +1 -0
  29. package/lib/index-ffbba08f.js +3 -0
  30. package/lib/index-ffbba08f.js.map +1 -0
  31. package/lib/index.js +2 -0
  32. package/lib/index.js.map +1 -0
  33. package/lib/inherits-713f4554.js +2 -0
  34. package/lib/inherits-713f4554.js.map +1 -0
  35. package/lib/init-project-a62cb644.js +16 -0
  36. package/lib/init-project-a62cb644.js.map +1 -0
  37. package/lib/load-from-project-e6530a69.js +6 -0
  38. package/lib/load-from-project-e6530a69.js.map +1 -0
  39. package/lib/minimatch-3a1d1fa9.js +2 -0
  40. package/lib/minimatch-3a1d1fa9.js.map +1 -0
  41. package/lib/once-9eb67b4f.js +2 -0
  42. package/lib/once-9eb67b4f.js.map +1 -0
  43. package/lib/project-d43b4e0c.js +30 -0
  44. package/lib/project-d43b4e0c.js.map +1 -0
  45. package/lib/run-macro-f4aa7c14.js +2 -0
  46. package/lib/run-macro-f4aa7c14.js.map +1 -0
  47. package/lib/sat-solver-01d6409e.js +2 -0
  48. package/lib/sat-solver-01d6409e.js.map +1 -0
  49. package/lib/src/actions/build-project.d.ts +2 -0
  50. package/lib/src/actions/create-project.d.ts +8 -0
  51. package/lib/src/actions/export-project.d.ts +6 -0
  52. package/lib/src/actions/increment-version.d.ts +5 -0
  53. package/lib/src/actions/init-project.d.ts +9 -0
  54. package/lib/src/actions/run-macro.d.ts +8 -0
  55. package/lib/src/actions/test-project.d.ts +5 -0
  56. package/lib/src/addin.d.ts +36 -0
  57. package/lib/src/bin/vba-blocks-build.d.ts +2 -0
  58. package/lib/src/bin/vba-blocks-export.d.ts +2 -0
  59. package/lib/src/bin/vba-blocks-init.d.ts +2 -0
  60. package/lib/src/bin/vba-blocks-new.d.ts +2 -0
  61. package/lib/src/bin/vba-blocks-run.d.ts +2 -0
  62. package/lib/src/bin/vba-blocks-test.d.ts +2 -0
  63. package/lib/src/bin/vba-blocks-version.d.ts +2 -0
  64. package/lib/src/bin/vba-blocks.d.ts +2 -0
  65. package/lib/src/build/apply-changeset.d.ts +3 -0
  66. package/lib/src/build/build-graph.d.ts +18 -0
  67. package/lib/src/build/changeset.d.ts +14 -0
  68. package/lib/src/build/compare-build-graphs.d.ts +3 -0
  69. package/lib/src/build/component.d.ts +25 -0
  70. package/lib/src/build/index.d.ts +7 -0
  71. package/lib/src/build/load-from-export.d.ts +2 -0
  72. package/lib/src/build/load-from-project.d.ts +5 -0
  73. package/lib/src/build/stage-build-graph.d.ts +2 -0
  74. package/lib/src/build/transform-build-graph.d.ts +3 -0
  75. package/lib/src/build/transforms/editor-config.d.ts +3 -0
  76. package/lib/src/cache.d.ts +9 -0
  77. package/lib/src/config.d.ts +29 -0
  78. package/lib/src/debug.d.ts +2 -0
  79. package/lib/src/env.d.ts +21 -0
  80. package/lib/src/errors.d.ts +56 -0
  81. package/lib/src/index.d.ts +16 -0
  82. package/lib/src/installer.d.ts +3 -0
  83. package/lib/src/lockfile/index.d.ts +23 -0
  84. package/lib/src/lockfile/is-lockfile-valid.d.ts +10 -0
  85. package/lib/src/lockfile/lockfile.d.ts +26 -0
  86. package/lib/src/manifest/dependency.d.ts +25 -0
  87. package/lib/src/manifest/index.d.ts +34 -0
  88. package/lib/src/manifest/reference.d.ts +12 -0
  89. package/lib/src/manifest/source.d.ts +8 -0
  90. package/lib/src/manifest/target.d.ts +10 -0
  91. package/lib/src/manifest/version.d.ts +3 -0
  92. package/lib/src/messages.d.ts +22 -0
  93. package/lib/src/professional/sources/git-source.d.ts +7 -0
  94. package/lib/src/professional/workspace.d.ts +10 -0
  95. package/lib/src/project.d.ts +48 -0
  96. package/lib/src/reporter.d.ts +12 -0
  97. package/lib/src/resolve/dependency-graph.d.ts +4 -0
  98. package/lib/src/resolve/index.d.ts +6 -0
  99. package/lib/src/resolve/latest-solver.d.ts +8 -0
  100. package/lib/src/resolve/resolver.d.ts +23 -0
  101. package/lib/src/resolve/sat-solver.d.ts +7 -0
  102. package/lib/src/sources/index.d.ts +16 -0
  103. package/lib/src/sources/path-source.d.ts +7 -0
  104. package/lib/src/sources/registration.d.ts +17 -0
  105. package/lib/src/sources/registry-source.d.ts +32 -0
  106. package/lib/src/sources/source.d.ts +6 -0
  107. package/lib/src/targets/add-target.d.ts +8 -0
  108. package/lib/src/targets/build-target.d.ts +41 -0
  109. package/lib/src/targets/export-target.d.ts +15 -0
  110. package/lib/src/targets/get-target.d.ts +7 -0
  111. package/lib/src/targets/index.d.ts +3 -0
  112. package/lib/src/targets/project-info.d.ts +7 -0
  113. package/lib/src/targets/transform-target.d.ts +3 -0
  114. package/lib/src/targets/transforms/core-xml.d.ts +2 -0
  115. package/lib/src/targets/transforms/workbook-xml.d.ts +2 -0
  116. package/lib/src/utils/async-map.d.ts +4 -0
  117. package/lib/src/utils/download.d.ts +1 -0
  118. package/lib/src/utils/fs.d.ts +23 -0
  119. package/lib/src/utils/get-staging.d.ts +1 -0
  120. package/lib/src/utils/git.d.ts +4 -0
  121. package/lib/src/utils/github.d.ts +9 -0
  122. package/lib/src/utils/has.d.ts +1 -0
  123. package/lib/src/utils/hash.d.ts +8 -0
  124. package/lib/src/utils/interop.d.ts +1 -0
  125. package/lib/src/utils/is.d.ts +5 -0
  126. package/lib/src/utils/noop.d.ts +1 -0
  127. package/lib/src/utils/observable.d.ts +15 -0
  128. package/lib/src/utils/parallel.d.ts +6 -0
  129. package/lib/src/utils/path.d.ts +7 -0
  130. package/lib/src/utils/pipe.d.ts +5 -0
  131. package/lib/src/utils/run.d.ts +17 -0
  132. package/lib/src/utils/stdout-file.d.ts +3 -0
  133. package/lib/src/utils/text.d.ts +4 -0
  134. package/lib/src/utils/toml.d.ts +4 -0
  135. package/lib/src/utils/unique.d.ts +1 -0
  136. package/lib/src/utils/without.d.ts +1 -0
  137. package/lib/src/utils/xml.d.ts +10 -0
  138. package/lib/src/utils/zip.d.ts +17 -0
  139. package/lib/test-project-d4f237d1.js +2 -0
  140. package/lib/test-project-d4f237d1.js.map +1 -0
  141. package/lib/text-ba532b40.js +10 -0
  142. package/lib/text-ba532b40.js.map +1 -0
  143. package/lib/tmp-bc08ebcf.js +10 -0
  144. package/lib/tmp-bc08ebcf.js.map +1 -0
  145. package/lib/toml-patch.es-6bd2145d.js +4 -0
  146. package/lib/toml-patch.es-6bd2145d.js.map +1 -0
  147. package/lib/vba-blocks-build-a717fcdb.js +10 -0
  148. package/lib/vba-blocks-build-a717fcdb.js.map +1 -0
  149. package/lib/vba-blocks-export-7e2c75cc.js +8 -0
  150. package/lib/vba-blocks-export-7e2c75cc.js.map +1 -0
  151. package/lib/vba-blocks-init-54531020.js +17 -0
  152. package/lib/vba-blocks-init-54531020.js.map +1 -0
  153. package/lib/vba-blocks-new-3210d92c.js +18 -0
  154. package/lib/vba-blocks-new-3210d92c.js.map +1 -0
  155. package/lib/vba-blocks-run-ab9d4ad4.js +11 -0
  156. package/lib/vba-blocks-run-ab9d4ad4.js.map +1 -0
  157. package/lib/vba-blocks-test-da5dba90.js +16 -0
  158. package/lib/vba-blocks-test-da5dba90.js.map +1 -0
  159. package/lib/vba-blocks-version-e1b3c35a.js +9 -0
  160. package/lib/vba-blocks-version-e1b3c35a.js.map +1 -0
  161. package/lib/vba-blocks.js +43 -0
  162. package/lib/vba-blocks.js.map +1 -0
  163. package/lib/workbook-xml-69fff4ae.js +3 -0
  164. package/lib/workbook-xml-69fff4ae.js.map +1 -0
  165. package/package.json +116 -0
  166. package/run-scripts/run.applescript +78 -0
  167. package/run-scripts/run.ps1 +211 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbook-xml-69fff4ae.js","sources":["../src/addin.ts","../node_modules/matcher-collection/index.js","../node_modules/walk-sync/index.js","../node_modules/ensure-posix-path/index.js","../src/utils/async-map.ts","../node_modules/pseudomap/pseudomap.js","../node_modules/pseudomap/map.js","../node_modules/yallist/yallist.js","../node_modules/lru-cache/index.js","../node_modules/sigmund/sigmund.js","../node_modules/editorconfig/src/lib/fnmatch.js","../node_modules/editorconfig/src/lib/ini.js","../node_modules/editorconfig/src/index.js","../src/build/transforms/editor-config.ts","../src/build/transform-build-graph.ts","../node_modules/xml-js/lib/xml2js.js","../node_modules/sax/lib/sax.js","../node_modules/xml-js/lib/array-helper.js","../node_modules/xml-js/lib/options-helper.js","../node_modules/xml-js/lib/xml2json.js","../node_modules/xml-js/lib/js2xml.js","../node_modules/xml-js/lib/index.js","../src/utils/xml.ts","../src/targets/transforms/core-xml.ts","../src/utils/without.ts","../src/targets/transforms/workbook-xml.ts"],"sourcesContent":["import { ImportGraph } from \"./build/build-graph\";\nimport { env } from \"./env\";\nimport { CliError, ErrorCode } from \"./errors\";\nimport { Target } from \"./manifest/target\";\nimport { Project } from \"./project\";\nimport { copy, ensureDir, pathExists } from \"./utils/fs\";\nimport { dirname, join } from \"./utils/path\";\nimport { run } from \"./utils/run\";\n\nexport type Application = \"excel\";\nexport type Addin = string;\n\nexport interface AddinOptions {\n\taddin?: string;\n\tstaging?: boolean;\n}\n\nexport const extensions: { [application: string]: string[] } = {\n\texcel: [\"xlsx\", \"xlsm\", \"xlam\"]\n};\nexport const addins: { [application: string]: string } = {\n\texcel: join(env.addins, \"vba-blocks.xlam\")\n};\n\nconst byExtension: { [extension: string]: string } = {};\nfor (const [application, values] of Object.entries(extensions)) {\n\tfor (const extension of values) {\n\t\tbyExtension[extension] = application;\n\t}\n}\n\n/**\n * Import graph of src and references into given target\n */\nexport async function importGraph(\n\tproject: Project,\n\ttarget: Target,\n\tgraph: ImportGraph,\n\tfile: string,\n\toptions: AddinOptions = {}\n): Promise<void> {\n\tconst { application, addin } = getTargetInfo(project, target);\n\tconst { name, components, references } = graph;\n\n\tawait run(application, options.addin || addin, \"Build.ImportGraph\", [\n\t\tJSON.stringify({\n\t\t\tfile,\n\t\t\tname,\n\t\t\tsrc: components,\n\t\t\treferences\n\t\t})\n\t]);\n}\n\n/**\n * Export src and references from given target\n */\nexport async function exportTo(\n\tproject: Project,\n\ttarget: Target,\n\tstaging: string,\n\toptions: AddinOptions = {}\n): Promise<void> {\n\tlet { application, addin, file } = getTargetInfo(project, target);\n\n\t// For Mac, stage target to avoid permission prompts\n\tif (!env.isWindows) {\n\t\tconst staged = join(staging, \"staged\", target.filename);\n\t\tif (!(await pathExists(staged))) {\n\t\t\tawait ensureDir(dirname(staged));\n\t\t\tawait copy(file, staged);\n\t\t}\n\n\t\tfile = staged;\n\t}\n\n\tawait run(application, options.addin || addin, \"Build.ExportTo\", [\n\t\tJSON.stringify({\n\t\t\tfile,\n\t\t\tstaging\n\t\t})\n\t]);\n}\n\n/**\n * Create a new document at the given path\n */\nexport async function createDocument(\n\tproject: Project,\n\ttarget: Target,\n\toptions: AddinOptions = {}\n): Promise<string> {\n\tconst { application, addin, file } = getTargetInfo(project, target, options);\n\n\t// For Mac, stage target to avoid permission prompts and then copy to build directory\n\tconst useStaging = !env.isWindows && !options.staging;\n\tlet path = !useStaging ? file : join(project.paths.staging, target.filename);\n\n\tawait ensureDir(dirname(path));\n\tawait run(application, options.addin || addin, \"Build.CreateDocument\", [\n\t\tJSON.stringify({\n\t\t\tpath\n\t\t})\n\t]);\n\n\t// For Mac, then copy staged to build directory\n\tif (useStaging) {\n\t\tawait ensureDir(dirname(file));\n\t\tawait copy(path, file);\n\t}\n\n\treturn file;\n}\n\n/**\n * Get application, addin, and file for given target\n */\nexport function getTargetInfo(\n\tproject: Project,\n\ttarget: Target,\n\toptions: AddinOptions = {}\n): { application: Application; addin: Addin; file: string } {\n\tconst application = extensionToApplication(target.type);\n\tconst addin = addins[application];\n\tconst file = join(options.staging ? project.paths.staging : project.paths.build, target.filename);\n\n\treturn { application, addin, file };\n}\n\nexport function extensionToApplication(extension: string): Application {\n\textension = extension.replace(\".\", \"\");\n\tconst application = byExtension[extension];\n\tif (!application) {\n\t\tthrow new CliError(\n\t\t\tErrorCode.AddinUnsupportedType,\n\t\t\t`The target type \"${extension} is not currently supported.`\n\t\t);\n\t}\n\n\treturn application as Application;\n}\n","'use strict';\nvar minimatch_1 = require(\"minimatch\");\nmodule.exports = /** @class */ (function () {\n function MatcherCollection(matchers) {\n this.matchers = matchers.map(function (matcher) {\n return typeof matcher === 'string' ? new minimatch_1.Minimatch(matcher) : matcher;\n });\n }\n MatcherCollection.prototype.match = function (value) {\n for (var i = 0; i < this.matchers.length; i++) {\n if (this.matchers[i].match(value)) {\n return true;\n }\n }\n return false;\n };\n MatcherCollection.prototype.mayContain = function (value) {\n var parts = value.split(/\\/|\\\\/g).filter(Boolean);\n for (var i = 0; i < this.matchers.length; i++) {\n var matcher = this.matchers[i];\n for (var j = 0; j < matcher.set.length; j++) {\n if (matcher.matchOne(parts, matcher.set[j], true)) {\n return true;\n }\n }\n }\n return false;\n };\n ;\n return MatcherCollection;\n}());\n","'use strict';\nvar fs = require(\"fs\");\nvar MatcherCollection = require(\"matcher-collection\");\nvar ensurePosix = require(\"ensure-posix-path\");\nvar path = require(\"path\");\nfunction walkSync(baseDir, inputOptions) {\n var options = handleOptions(inputOptions);\n var mapFunct;\n if (options.includeBasePath) {\n mapFunct = function (entry) {\n return entry.basePath.split(path.sep).join('/') + '/' + entry.relativePath;\n };\n }\n else {\n mapFunct = function (entry) {\n return entry.relativePath;\n };\n }\n return _walkSync(baseDir, options, null, []).map(mapFunct);\n}\nfunction getStat(path) {\n try {\n return fs.statSync(path);\n }\n catch (error) {\n if (error !== null && typeof error === 'object' && (error.code === 'ENOENT' || error.code === 'ENOTDIR')) {\n return;\n }\n throw error;\n }\n}\n(function (walkSync) {\n function entries(baseDir, inputOptions) {\n var options = handleOptions(inputOptions);\n return _walkSync(ensurePosix(baseDir), options, null, []);\n }\n walkSync.entries = entries;\n ;\n var Entry = /** @class */ (function () {\n function Entry(relativePath, basePath, mode, size, mtime) {\n this.relativePath = relativePath;\n this.basePath = basePath;\n this.mode = mode;\n this.size = size;\n this.mtime = mtime;\n }\n Object.defineProperty(Entry.prototype, \"fullPath\", {\n get: function () {\n return this.basePath + \"/\" + this.relativePath;\n },\n enumerable: true,\n configurable: true\n });\n Entry.prototype.isDirectory = function () {\n return (this.mode & 61440) === 16384;\n };\n return Entry;\n }());\n walkSync.Entry = Entry;\n})(walkSync || (walkSync = {}));\nfunction isDefined(val) {\n return typeof val !== 'undefined';\n}\nfunction handleOptions(_options) {\n var options = {};\n if (Array.isArray(_options)) {\n options.globs = _options;\n }\n else if (_options) {\n options = _options;\n }\n return options;\n}\nfunction handleRelativePath(_relativePath) {\n if (_relativePath == null) {\n return '';\n }\n else if (_relativePath.slice(-1) !== '/') {\n return _relativePath + '/';\n }\n else {\n return _relativePath;\n }\n}\nfunction lexicographically(a, b) {\n var aPath = a.relativePath;\n var bPath = b.relativePath;\n if (aPath === bPath) {\n return 0;\n }\n else if (aPath < bPath) {\n return -1;\n }\n else {\n return 1;\n }\n}\nfunction _walkSync(baseDir, options, _relativePath, visited) {\n // Inside this function, prefer string concatenation to the slower path.join\n // https://github.com/joyent/node/pull/6929\n var relativePath = handleRelativePath(_relativePath);\n var realPath = fs.realpathSync(baseDir + '/' + relativePath);\n if (visited.indexOf(realPath) >= 0) {\n return [];\n }\n else {\n visited.push(realPath);\n }\n try {\n var globs = options.globs;\n var ignorePatterns = options.ignore;\n var globMatcher = void 0;\n var ignoreMatcher_1;\n var results = [];\n if (ignorePatterns) {\n ignoreMatcher_1 = new MatcherCollection(ignorePatterns);\n }\n if (globs) {\n globMatcher = new MatcherCollection(globs);\n }\n if (globMatcher && !globMatcher.mayContain(relativePath)) {\n return results;\n }\n var names = fs.readdirSync(baseDir + '/' + relativePath);\n var entries = names.map(function (name) {\n var entryRelativePath = relativePath + name;\n if (ignoreMatcher_1 && ignoreMatcher_1.match(entryRelativePath)) {\n return;\n }\n var fullPath = baseDir + '/' + entryRelativePath;\n var stats = getStat(fullPath);\n if (stats && stats.isDirectory()) {\n return new walkSync.Entry(entryRelativePath + '/', baseDir, stats.mode, stats.size, stats.mtime.getTime());\n }\n else {\n return new walkSync.Entry(entryRelativePath, baseDir, stats && stats.mode || 0, stats && stats.size || 0, stats && stats.mtime.getTime() || 0);\n }\n }).filter(isDefined);\n var sortedEntries = entries.sort(lexicographically);\n for (var i = 0; i < sortedEntries.length; ++i) {\n var entry = sortedEntries[i];\n if (entry.isDirectory()) {\n if (options.directories !== false && (!globMatcher || globMatcher.match(entry.relativePath))) {\n results.push(entry);\n }\n results = results.concat(_walkSync(baseDir, options, entry.relativePath, visited));\n }\n else {\n if (!globMatcher || globMatcher.match(entry.relativePath)) {\n results.push(entry);\n }\n }\n }\n return results;\n }\n finally {\n visited.pop();\n }\n}\nmodule.exports = walkSync;\n","\"use strict\";\nvar path = require(\"path\");\nmodule.exports = function ensurePosix(filepath) {\n if (path.sep !== '/') {\n return filepath.split(path.sep).join('/');\n }\n return filepath;\n};\n","// TODO Advanced typing to match input and output type from functions\n// For now, use simple 1-to-1 mapping\n\ntype AsyncFn<TValue> = (input: TValue) => Promise<TValue>;\ntype Fn<TValue> = (input: TValue) => TValue;\n\nexport function asyncMap<TValue>(...fns: Array<Fn<TValue> | AsyncFn<TValue>>): AsyncFn<TValue> {\n\treturn async value => {\n\t\tlet memo = value;\n\n\t\tfor (const fn of fns) {\n\t\t\tmemo = await fn(memo);\n\t\t}\n\n\t\treturn memo;\n\t};\n}\n","var hasOwnProperty = Object.prototype.hasOwnProperty\n\nmodule.exports = PseudoMap\n\nfunction PseudoMap (set) {\n if (!(this instanceof PseudoMap)) // whyyyyyyy\n throw new TypeError(\"Constructor PseudoMap requires 'new'\")\n\n this.clear()\n\n if (set) {\n if ((set instanceof PseudoMap) ||\n (typeof Map === 'function' && set instanceof Map))\n set.forEach(function (value, key) {\n this.set(key, value)\n }, this)\n else if (Array.isArray(set))\n set.forEach(function (kv) {\n this.set(kv[0], kv[1])\n }, this)\n else\n throw new TypeError('invalid argument')\n }\n}\n\nPseudoMap.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n Object.keys(this._data).forEach(function (k) {\n if (k !== 'size')\n fn.call(thisp, this._data[k].value, this._data[k].key)\n }, this)\n}\n\nPseudoMap.prototype.has = function (k) {\n return !!find(this._data, k)\n}\n\nPseudoMap.prototype.get = function (k) {\n var res = find(this._data, k)\n return res && res.value\n}\n\nPseudoMap.prototype.set = function (k, v) {\n set(this._data, k, v)\n}\n\nPseudoMap.prototype.delete = function (k) {\n var res = find(this._data, k)\n if (res) {\n delete this._data[res._index]\n this._data.size--\n }\n}\n\nPseudoMap.prototype.clear = function () {\n var data = Object.create(null)\n data.size = 0\n\n Object.defineProperty(this, '_data', {\n value: data,\n enumerable: false,\n configurable: true,\n writable: false\n })\n}\n\nObject.defineProperty(PseudoMap.prototype, 'size', {\n get: function () {\n return this._data.size\n },\n set: function (n) {},\n enumerable: true,\n configurable: true\n})\n\nPseudoMap.prototype.values =\nPseudoMap.prototype.keys =\nPseudoMap.prototype.entries = function () {\n throw new Error('iterators are not implemented in this version')\n}\n\n// Either identical, or both NaN\nfunction same (a, b) {\n return a === b || a !== a && b !== b\n}\n\nfunction Entry (k, v, i) {\n this.key = k\n this.value = v\n this._index = i\n}\n\nfunction find (data, k) {\n for (var i = 0, s = '_' + k, key = s;\n hasOwnProperty.call(data, key);\n key = s + i++) {\n if (same(data[key].key, k))\n return data[key]\n }\n}\n\nfunction set (data, k, v) {\n for (var i = 0, s = '_' + k, key = s;\n hasOwnProperty.call(data, key);\n key = s + i++) {\n if (same(data[key].key, k)) {\n data[key].value = v\n return\n }\n }\n data.size++\n data[key] = new Entry(k, v, key)\n}\n","if (process.env.npm_package_name === 'pseudomap' &&\n process.env.npm_lifecycle_script === 'test')\n process.env.TEST_PSEUDOMAP = 'true'\n\nif (typeof Map === 'function' && !process.env.TEST_PSEUDOMAP) {\n module.exports = Map\n} else {\n module.exports = require('./pseudomap')\n}\n","module.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n","'use strict'\n\nmodule.exports = LRUCache\n\n// This will be a proper iterable 'Map' in engines that support it,\n// or a fakey-fake PseudoMap in older versions.\nvar Map = require('pseudomap')\nvar util = require('util')\n\n// A linked list to keep track of recently-used-ness\nvar Yallist = require('yallist')\n\n// use symbols if possible, otherwise just _props\nvar hasSymbol = typeof Symbol === 'function' && process.env._nodeLRUCacheForceNoSymbol !== '1'\nvar makeSymbol\nif (hasSymbol) {\n makeSymbol = function (key) {\n return Symbol(key)\n }\n} else {\n makeSymbol = function (key) {\n return '_' + key\n }\n}\n\nvar MAX = makeSymbol('max')\nvar LENGTH = makeSymbol('length')\nvar LENGTH_CALCULATOR = makeSymbol('lengthCalculator')\nvar ALLOW_STALE = makeSymbol('allowStale')\nvar MAX_AGE = makeSymbol('maxAge')\nvar DISPOSE = makeSymbol('dispose')\nvar NO_DISPOSE_ON_SET = makeSymbol('noDisposeOnSet')\nvar LRU_LIST = makeSymbol('lruList')\nvar CACHE = makeSymbol('cache')\n\nfunction naiveLength () { return 1 }\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nfunction LRUCache (options) {\n if (!(this instanceof LRUCache)) {\n return new LRUCache(options)\n }\n\n if (typeof options === 'number') {\n options = { max: options }\n }\n\n if (!options) {\n options = {}\n }\n\n var max = this[MAX] = options.max\n // Kind of weird to have a default max of Infinity, but oh well.\n if (!max ||\n !(typeof max === 'number') ||\n max <= 0) {\n this[MAX] = Infinity\n }\n\n var lc = options.length || naiveLength\n if (typeof lc !== 'function') {\n lc = naiveLength\n }\n this[LENGTH_CALCULATOR] = lc\n\n this[ALLOW_STALE] = options.stale || false\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this.reset()\n}\n\n// resize the cache when the max changes.\nObject.defineProperty(LRUCache.prototype, 'max', {\n set: function (mL) {\n if (!mL || !(typeof mL === 'number') || mL <= 0) {\n mL = Infinity\n }\n this[MAX] = mL\n trim(this)\n },\n get: function () {\n return this[MAX]\n },\n enumerable: true\n})\n\nObject.defineProperty(LRUCache.prototype, 'allowStale', {\n set: function (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n },\n get: function () {\n return this[ALLOW_STALE]\n },\n enumerable: true\n})\n\nObject.defineProperty(LRUCache.prototype, 'maxAge', {\n set: function (mA) {\n if (!mA || !(typeof mA === 'number') || mA < 0) {\n mA = 0\n }\n this[MAX_AGE] = mA\n trim(this)\n },\n get: function () {\n return this[MAX_AGE]\n },\n enumerable: true\n})\n\n// resize the cache when the lengthCalculator changes.\nObject.defineProperty(LRUCache.prototype, 'lengthCalculator', {\n set: function (lC) {\n if (typeof lC !== 'function') {\n lC = naiveLength\n }\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(function (hit) {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n }, this)\n }\n trim(this)\n },\n get: function () { return this[LENGTH_CALCULATOR] },\n enumerable: true\n})\n\nObject.defineProperty(LRUCache.prototype, 'length', {\n get: function () { return this[LENGTH] },\n enumerable: true\n})\n\nObject.defineProperty(LRUCache.prototype, 'itemCount', {\n get: function () { return this[LRU_LIST].length },\n enumerable: true\n})\n\nLRUCache.prototype.rforEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this[LRU_LIST].tail; walker !== null;) {\n var prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n}\n\nfunction forEachStep (self, fn, node, thisp) {\n var hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE]) {\n hit = undefined\n }\n }\n if (hit) {\n fn.call(thisp, hit.value, hit.key, self)\n }\n}\n\nLRUCache.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this[LRU_LIST].head; walker !== null;) {\n var next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n}\n\nLRUCache.prototype.keys = function () {\n return this[LRU_LIST].toArray().map(function (k) {\n return k.key\n }, this)\n}\n\nLRUCache.prototype.values = function () {\n return this[LRU_LIST].toArray().map(function (k) {\n return k.value\n }, this)\n}\n\nLRUCache.prototype.reset = function () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(function (hit) {\n this[DISPOSE](hit.key, hit.value)\n }, this)\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n}\n\nLRUCache.prototype.dump = function () {\n return this[LRU_LIST].map(function (hit) {\n if (!isStale(this, hit)) {\n return {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }\n }\n }, this).toArray().filter(function (h) {\n return h\n })\n}\n\nLRUCache.prototype.dumpLru = function () {\n return this[LRU_LIST]\n}\n\n/* istanbul ignore next */\nLRUCache.prototype.inspect = function (n, opts) {\n var str = 'LRUCache {'\n var extras = false\n\n var as = this[ALLOW_STALE]\n if (as) {\n str += '\\n allowStale: true'\n extras = true\n }\n\n var max = this[MAX]\n if (max && max !== Infinity) {\n if (extras) {\n str += ','\n }\n str += '\\n max: ' + util.inspect(max, opts)\n extras = true\n }\n\n var maxAge = this[MAX_AGE]\n if (maxAge) {\n if (extras) {\n str += ','\n }\n str += '\\n maxAge: ' + util.inspect(maxAge, opts)\n extras = true\n }\n\n var lc = this[LENGTH_CALCULATOR]\n if (lc && lc !== naiveLength) {\n if (extras) {\n str += ','\n }\n str += '\\n length: ' + util.inspect(this[LENGTH], opts)\n extras = true\n }\n\n var didFirst = false\n this[LRU_LIST].forEach(function (item) {\n if (didFirst) {\n str += ',\\n '\n } else {\n if (extras) {\n str += ',\\n'\n }\n didFirst = true\n str += '\\n '\n }\n var key = util.inspect(item.key).split('\\n').join('\\n ')\n var val = { value: item.value }\n if (item.maxAge !== maxAge) {\n val.maxAge = item.maxAge\n }\n if (lc !== naiveLength) {\n val.length = item.length\n }\n if (isStale(this, item)) {\n val.stale = true\n }\n\n val = util.inspect(val, opts).split('\\n').join('\\n ')\n str += key + ' => ' + val\n })\n\n if (didFirst || extras) {\n str += '\\n'\n }\n str += '}'\n\n return str\n}\n\nLRUCache.prototype.set = function (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n var now = maxAge ? Date.now() : 0\n var len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n var node = this[CACHE].get(key)\n var item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET]) {\n this[DISPOSE](key, item.value)\n }\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n var hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE]) {\n this[DISPOSE](key, value)\n }\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n}\n\nLRUCache.prototype.has = function (key) {\n if (!this[CACHE].has(key)) return false\n var hit = this[CACHE].get(key).value\n if (isStale(this, hit)) {\n return false\n }\n return true\n}\n\nLRUCache.prototype.get = function (key) {\n return get(this, key, true)\n}\n\nLRUCache.prototype.peek = function (key) {\n return get(this, key, false)\n}\n\nLRUCache.prototype.pop = function () {\n var node = this[LRU_LIST].tail\n if (!node) return null\n del(this, node)\n return node.value\n}\n\nLRUCache.prototype.del = function (key) {\n del(this, this[CACHE].get(key))\n}\n\nLRUCache.prototype.load = function (arr) {\n // reset the cache\n this.reset()\n\n var now = Date.now()\n // A previous serialized cache has the most recent items first\n for (var l = arr.length - 1; l >= 0; l--) {\n var hit = arr[l]\n var expiresAt = hit.e || 0\n if (expiresAt === 0) {\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n } else {\n var maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n}\n\nLRUCache.prototype.prune = function () {\n var self = this\n this[CACHE].forEach(function (value, key) {\n get(self, key, false)\n })\n}\n\nfunction get (self, key, doUse) {\n var node = self[CACHE].get(key)\n if (node) {\n var hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE]) hit = undefined\n } else {\n if (doUse) {\n self[LRU_LIST].unshiftNode(node)\n }\n }\n if (hit) hit = hit.value\n }\n return hit\n}\n\nfunction isStale (self, hit) {\n if (!hit || (!hit.maxAge && !self[MAX_AGE])) {\n return false\n }\n var stale = false\n var diff = Date.now() - hit.now\n if (hit.maxAge) {\n stale = diff > hit.maxAge\n } else {\n stale = self[MAX_AGE] && (diff > self[MAX_AGE])\n }\n return stale\n}\n\nfunction trim (self) {\n if (self[LENGTH] > self[MAX]) {\n for (var walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n var prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nfunction del (self, node) {\n if (node) {\n var hit = node.value\n if (self[DISPOSE]) {\n self[DISPOSE](hit.key, hit.value)\n }\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\n// classy, since V8 prefers predictable objects.\nfunction Entry (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n}\n","module.exports = sigmund\nfunction sigmund (subject, maxSessions) {\n maxSessions = maxSessions || 10;\n var notes = [];\n var analysis = '';\n var RE = RegExp;\n\n function psychoAnalyze (subject, session) {\n if (session > maxSessions) return;\n\n if (typeof subject === 'function' ||\n typeof subject === 'undefined') {\n return;\n }\n\n if (typeof subject !== 'object' || !subject ||\n (subject instanceof RE)) {\n analysis += subject;\n return;\n }\n\n if (notes.indexOf(subject) !== -1 || session === maxSessions) return;\n\n notes.push(subject);\n analysis += '{';\n Object.keys(subject).forEach(function (issue, _, __) {\n // pseudo-private values. skip those.\n if (issue.charAt(0) === '_') return;\n var to = typeof subject[issue];\n if (to === 'function' || to === 'undefined') return;\n analysis += issue;\n psychoAnalyze(subject[issue], session + 1);\n });\n }\n psychoAnalyze(subject, 0);\n return analysis;\n}\n\n// vim: set softtabstop=4 shiftwidth=4:\n","// Based on minimatch.js by isaacs <https://npmjs.org/package/minimatch>\n\n var platform = typeof process === \"object\" ? process.platform : \"win32\"\n\n if (module) module.exports = minimatch\n else exports.minimatch = minimatch\n\n minimatch.Minimatch = Minimatch\n\n var LRU = require(\"lru-cache\")\n , cache = minimatch.cache = new LRU({max: 100})\n , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\n , sigmund = require(\"sigmund\")\n\n var path = require(\"path\")\n // any single thing other than /\n // don't need to escape / when using new RegExp()\n , qmark = \"[^/]\"\n\n // * => any number of characters\n , star = qmark + \"*?\"\n\n // ** when dots are allowed. Anything goes, except .. and .\n // not (^ or / followed by one or two dots followed by $ or /),\n // followed by anything, any number of times.\n , twoStarDot = \"(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?\"\n\n // not a ^ or / followed by a dot,\n // followed by anything, any number of times.\n , twoStarNoDot = \"(?:(?!(?:\\\\\\/|^)\\\\.).)*?\"\n\n // characters that need to be escaped in RegExp.\n , reSpecials = charSet(\"().*{}+?[]^$\\\\!\")\n\n// \"abc\" -> { a:true, b:true, c:true }\n function charSet (s) {\n return s.split(\"\").reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n }\n\n// normalizes slashes.\n var slashSplit = /\\/+/\n\n minimatch.monkeyPatch = monkeyPatch\n function monkeyPatch () {\n var desc = Object.getOwnPropertyDescriptor(String.prototype, \"match\")\n var orig = desc.value\n desc.value = function (p) {\n if (p instanceof Minimatch) return p.match(this)\n return orig.call(this, p)\n }\n Object.defineProperty(String.prototype, desc)\n }\n\n minimatch.filter = filter\n function filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n }\n\n function ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n }\n\n minimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n }\n\n Minimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n }\n\n\n function minimatch (p, pattern, options) {\n if (typeof pattern !== \"string\") {\n throw new TypeError(\"glob pattern string required\")\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === \"#\") {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === \"\") return p === \"\"\n\n return new Minimatch(pattern, options).match(p)\n }\n\n function Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options, cache)\n }\n\n if (typeof pattern !== \"string\") {\n throw new TypeError(\"glob pattern string required\")\n }\n\n if (!options) options = {}\n\n // windows: need to use /, not \\\n // On other platforms, \\ is a valid (albeit bad) filename char.\n if (platform === \"win32\") {\n pattern = pattern.split(\"\\\\\").join(\"/\")\n }\n\n // lru storage.\n // these things aren't particularly big, but walking down the string\n // and turning it into a regexp can get pretty costly.\n var cacheKey = pattern + \"\\n\" + sigmund(options)\n var cached = minimatch.cache.get(cacheKey)\n if (cached) return cached\n minimatch.cache.set(cacheKey, this)\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n }\n\n Minimatch.prototype.make = make\n function make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === \"#\") {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) console.error(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n if (options.debug) console.error(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n if (options.debug) console.error(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return -1 === s.indexOf(false)\n })\n\n if (options.debug) console.error(this.pattern, set)\n\n this.set = set\n }\n\n Minimatch.prototype.parseNegate = parseNegate\n function parseNegate () {\n var pattern = this.pattern\n , negate = false\n , options = this.options\n , negateOffset = 0\n\n if (options.nonegate) return\n\n for ( var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === \"!\"\n ; i ++) {\n negate = !negate\n negateOffset ++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n }\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\n minimatch.braceExpand = function (pattern, options) {\n return new Minimatch(pattern, options).braceExpand()\n }\n\n Minimatch.prototype.braceExpand = braceExpand\n function braceExpand (pattern, options) {\n options = options || this.options\n pattern = typeof pattern === \"undefined\"\n ? this.pattern : pattern\n\n if (typeof pattern === \"undefined\") {\n throw new Error(\"undefined pattern\")\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n var escaping = false\n\n // examples and comments refer to this crazy pattern:\n // a{b,c{d,e},{f,g}h}x{y,z}\n // expected:\n // abxy\n // abxz\n // acdxy\n // acdxz\n // acexy\n // acexz\n // afhxy\n // afhxz\n // aghxy\n // aghxz\n\n // everything before the first \\{ is just a prefix.\n // So, we pluck that off, and work with the rest,\n // and then prepend it to everything we find.\n if (pattern.charAt(0) !== \"{\") {\n // console.error(pattern)\n var prefix = null\n for (var i = 0, l = pattern.length; i < l; i ++) {\n var c = pattern.charAt(i)\n // console.error(i, c)\n if (c === \"\\\\\") {\n escaping = !escaping\n } else if (c === \"{\" && !escaping) {\n prefix = pattern.substr(0, i)\n break\n }\n }\n\n // actually no sets, all { were escaped.\n if (prefix === null) {\n // console.error(\"no sets\")\n return [pattern]\n }\n\n var tail = braceExpand(pattern.substr(i), options)\n return tail.map(function (t) {\n return prefix + t\n })\n }\n\n // now we have something like:\n // {b,c{d,e},{f,g}h}x{y,z}\n // walk through the set, expanding each part, until\n // the set ends. then, we'll expand the suffix.\n // If the set only has a single member, then'll put the {} back\n\n // first, handle numeric sets, since they're easier\n var numset = pattern.match(/^\\{(-?[0-9]+)\\.\\.(-?[0-9]+)\\}/)\n if (numset) {\n // console.error(\"numset\", numset[1], numset[2])\n var suf = braceExpand(pattern.substr(numset[0].length), options)\n , start = +numset[1]\n , end = +numset[2]\n , inc = start > end ? -1 : 1\n , set = []\n for (var i = start; i != (end + inc); i += inc) {\n // append all the suffixes\n for (var ii = 0, ll = suf.length; ii < ll; ii ++) {\n set.push(i + suf[ii])\n }\n }\n return set\n }\n\n // ok, walk through the set\n // We hope, somewhat optimistically, that there\n // will be a } at the end.\n // If the closing brace isn't found, then the pattern is\n // interpreted as braceExpand(\"\\\\\" + pattern) so that\n // the leading \\{ will be interpreted literally.\n var i = 1 // skip the \\{\n , depth = 1\n , set = []\n , member = \"\"\n , sawEnd = false\n , escaping = false\n\n function addMember () {\n set.push(member)\n member = \"\"\n }\n\n // console.error(\"Entering for\")\n FOR: for (i = 1, l = pattern.length; i < l; i ++) {\n var c = pattern.charAt(i)\n // console.error(\"\", i, c)\n\n if (escaping) {\n escaping = false\n member += \"\\\\\" + c\n } else {\n switch (c) {\n case \"\\\\\":\n escaping = true\n continue\n\n case \"{\":\n depth ++\n member += \"{\"\n continue\n\n case \"}\":\n depth --\n // if this closes the actual set, then we're done\n if (depth === 0) {\n addMember()\n // pluck off the close-brace\n i ++\n break FOR\n } else {\n member += c\n continue\n }\n\n case \",\":\n if (depth === 1) {\n addMember()\n } else {\n member += c\n }\n continue\n\n default:\n member += c\n continue\n } // switch\n } // else\n } // for\n\n // now we've either finished the set, and the suffix is\n // pattern.substr(i), or we have *not* closed the set,\n // and need to escape the leading brace\n if (depth !== 0) {\n // console.error(\"didn't close\", pattern)\n return braceExpand(\"\\\\\" + pattern, options)\n }\n\n // x{y,z} -> [\"xy\", \"xz\"]\n // console.error(\"set\", set)\n // console.error(\"suffix\", pattern.substr(i))\n var suf = braceExpand(pattern.substr(i), options)\n // [\"b\", \"c{d,e}\",\"{f,g}h\"] ->\n // [[\"b\"], [\"cd\", \"ce\"], [\"fh\", \"gh\"]]\n var addBraces = set.length === 1\n // console.error(\"set pre-expanded\", set)\n set = set.map(function (p) {\n return braceExpand(p, options)\n })\n // console.error(\"set expanded\", set)\n\n\n // [[\"b\"], [\"cd\", \"ce\"], [\"fh\", \"gh\"]] ->\n // [\"b\", \"cd\", \"ce\", \"fh\", \"gh\"]\n set = set.reduce(function (l, r) {\n return l.concat(r)\n })\n\n if (addBraces) {\n set = set.map(function (s) {\n return \"{\" + s + \"}\"\n })\n }\n\n // now attach the suffixes.\n var ret = []\n for (var i = 0, l = set.length; i < l; i ++) {\n for (var ii = 0, ll = suf.length; ii < ll; ii ++) {\n ret.push(set[i] + suf[ii])\n }\n }\n return ret\n }\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n Minimatch.prototype.parse = parse\n var SUBPARSE = {}\n function parse (pattern, isSub) {\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === \"**\") return GLOBSTAR\n if (pattern === \"\") return \"\"\n\n var re = \"\"\n , hasMagic = !!options.nocase\n , escaping = false\n // ? => one single character\n , patternListStack = []\n , plType\n , stateChar\n , inClass = false\n , reClassStart = -1\n , classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n , patternStart = pattern.charAt(0) === \".\" ? \"\" // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? \"(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))\"\n : \"(?!\\\\.)\"\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case \"*\":\n re += star\n hasMagic = true\n break\n case \"?\":\n re += qmark\n hasMagic = true\n break\n default:\n re += \"\\\\\"+stateChar\n break\n }\n stateChar = false\n }\n }\n\n for ( var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i ++ ) {\n\n if (options.debug) {\n console.error(\"%s\\t%s %s %j\", pattern, i, re, c)\n }\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += \"\\\\\" + c\n escaping = false\n continue\n }\n\n SWITCH: switch (c) {\n case \"/\":\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case \"\\\\\":\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case \"?\":\n case \"*\":\n case \"+\":\n case \"@\":\n case \"!\":\n if (options.debug) {\n console.error(\"%s\\t%s %s %j <-- stateChar\", pattern, i, re, c)\n }\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n if (c === \"!\" && i === classStart + 1) c = \"^\"\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case \"(\":\n if (inClass) {\n re += \"(\"\n continue\n }\n\n if (!stateChar) {\n re += \"\\\\(\"\n continue\n }\n\n plType = stateChar\n patternListStack.push({ type: plType\n , start: i - 1\n , reStart: re.length })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === \"!\" ? \"(?:(?!\" : \"(?:\"\n stateChar = false\n continue\n\n case \")\":\n if (inClass || !patternListStack.length) {\n re += \"\\\\)\"\n continue\n }\n\n hasMagic = true\n re += \")\"\n plType = patternListStack.pop().type\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n switch (plType) {\n case \"!\":\n re += \"[^/]*?)\"\n break\n case \"?\":\n case \"+\":\n case \"*\": re += plType\n case \"@\": break // the default anyway\n }\n continue\n\n case \"|\":\n if (inClass || !patternListStack.length || escaping) {\n re += \"\\\\|\"\n escaping = false\n continue\n }\n\n re += \"|\"\n continue\n\n // these are mostly the same in regexp and glob\n case \"[\":\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += \"\\\\\" + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case \"]\":\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += \"\\\\\" + c\n escaping = false\n continue\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === \"^\" && inClass)) {\n re += \"\\\\\"\n }\n\n re += c\n\n } // switch\n } // for\n\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n var cs = pattern.substr(classStart + 1)\n , sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + \"\\\\[\" + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n var pl\n while (pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + 3)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2})*)(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = \"\\\\\"\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + \"|\"\n })\n\n // console.error(\"tail=%j\\n %s\", tail, tail)\n var t = pl.type === \"*\" ? star\n : pl.type === \"?\" ? qmark\n : \"\\\\\" + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart)\n + t + \"\\\\(\"\n + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += \"\\\\\\\\\"\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case \".\":\n case \"[\":\n case \"(\": addPatternStart = true\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== \"\" && hasMagic) re = \"(?=.)\" + re\n\n if (addPatternStart) re = patternStart + re\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [ re, hasMagic ]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? \"i\" : \"\"\n , regExp = new RegExp(\"^\" + re + \"$\", flags)\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n }\n\n minimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n }\n\n Minimatch.prototype.makeRe = makeRe\n function makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) return this.regexp = false\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n , flags = options.nocase ? \"i\" : \"\"\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === \"string\") ? regExpEscape(p)\n : p._src\n }).join(\"\\\\\\/\")\n }).join(\"|\")\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = \"^(?:\" + re + \")$\"\n\n // can match anything, as long as it's not this.\n if (this.negate) re = \"^(?!\" + re + \").*$\"\n\n try {\n return this.regexp = new RegExp(re, flags)\n } catch (ex) {\n return this.regexp = false\n }\n }\n\n minimatch.match = function (list, pattern, options) {\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n }\n\n Minimatch.prototype.match = match\n function match (f, partial) {\n // console.error(\"match\", f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === \"\"\n\n if (f === \"/\" && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n // On other platforms, \\ is a valid (albeit bad) filename char.\n if (platform === \"win32\") {\n f = f.split(\"\\\\\").join(\"/\")\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n if (options.debug) {\n console.error(this.pattern, \"split\", f)\n }\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n // console.error(this.pattern, \"set\", set)\n\n for (var i = 0, l = set.length; i < l; i ++) {\n var pattern = set[i]\n var hit = this.matchOne(f, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n }\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\n Minimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n if (options.debug) {\n console.error(\"matchOne\",\n { \"this\": this\n , file: file\n , pattern: pattern })\n }\n\n if (options.matchBase && pattern.length === 1) {\n file = path.basename(file.join(\"/\")).split(\"/\")\n }\n\n if (options.debug) {\n console.error(\"matchOne\", file.length, pattern.length)\n }\n\n for ( var fi = 0\n , pi = 0\n , fl = file.length\n , pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi ++, pi ++ ) {\n\n if (options.debug) {\n console.error(\"matchOne loop\")\n }\n var p = pattern[pi]\n , f = file[fi]\n\n if (options.debug) {\n console.error(pattern, p, f)\n }\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n if (options.debug)\n console.error('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n , pr = pi + 1\n if (pr === pl) {\n if (options.debug)\n console.error('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for ( ; fi < fl; fi ++) {\n if (file[fi] === \".\" || file[fi] === \"..\" ||\n (!options.dot && file[fi].charAt(0) === \".\")) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n WHILE: while (fr < fl) {\n var swallowee = file[fr]\n\n if (options.debug) {\n console.error('\\nglobstar while',\n file, fr, pattern, pr, swallowee)\n }\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n if (options.debug)\n console.error('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === \".\" || swallowee === \"..\" ||\n (!options.dot && swallowee.charAt(0) === \".\")) {\n if (options.debug)\n console.error(\"dot detected!\", file, fr, pattern, pr)\n break WHILE\n }\n\n // ** swallows a segment, and continue.\n if (options.debug)\n console.error('globstar swallow a segment, and continue')\n fr ++\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n // console.error(\"\\n>>> no match, partial?\", file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === \"string\") {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n if (options.debug) {\n console.error(\"string match\", p, f, hit)\n }\n } else {\n hit = f.match(p)\n if (options.debug) {\n console.error(\"pattern match\", p, f, hit)\n }\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === \"\")\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error(\"wtf?\")\n }\n\n\n// replace stuff like \\* with *\n function globUnescape (s) {\n return s.replace(/\\\\(.)/g, \"$1\")\n }\n\n\n function regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\")\n }\n","\"use strict\";\r\n// Based on iniparser by shockie <https://npmjs.org/package/iniparser>\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result[\"default\"] = mod;\r\n return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fs = __importStar(require(\"fs\"));\r\n/**\r\n * define the possible values:\r\n * section: [section]\r\n * param: key=value\r\n * comment: ;this is a comment\r\n */\r\nvar regex = {\r\n section: /^\\s*\\[(([^#;]|\\\\#|\\\\;)+)\\]\\s*([#;].*)?$/,\r\n param: /^\\s*([\\w\\.\\-\\_]+)\\s*[=:]\\s*(.*?)\\s*([#;].*)?$/,\r\n comment: /^\\s*[#;].*$/,\r\n};\r\n/**\r\n * Parses an .ini file\r\n * @param file The location of the .ini file\r\n */\r\nfunction parse(file) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n fs.readFile(file, 'utf8', function (err, data) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(parseString(data));\r\n });\r\n })];\r\n });\r\n });\r\n}\r\nexports.parse = parse;\r\nfunction parseSync(file) {\r\n return parseString(fs.readFileSync(file, 'utf8'));\r\n}\r\nexports.parseSync = parseSync;\r\nfunction parseString(data) {\r\n var sectionBody = {};\r\n var sectionName = null;\r\n var value = [[sectionName, sectionBody]];\r\n var lines = data.split(/\\r\\n|\\r|\\n/);\r\n lines.forEach(function (line) {\r\n var match;\r\n if (regex.comment.test(line)) {\r\n return;\r\n }\r\n if (regex.param.test(line)) {\r\n match = line.match(regex.param);\r\n sectionBody[match[1]] =\r\n match[2];\r\n }\r\n else if (regex.section.test(line)) {\r\n match = line.match(regex.section);\r\n sectionName = match[1];\r\n sectionBody = {};\r\n value.push([sectionName, sectionBody]);\r\n }\r\n });\r\n return value;\r\n}\r\nexports.parseString = parseString;\r\n","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result[\"default\"] = mod;\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar fs = __importStar(require(\"fs\"));\r\nvar path = __importStar(require(\"path\"));\r\nvar semver = __importStar(require(\"semver\"));\r\nvar fnmatch_1 = __importDefault(require(\"./lib/fnmatch\"));\r\nvar ini_1 = require(\"./lib/ini\");\r\nexports.parseString = ini_1.parseString;\r\nvar package_json_1 = __importDefault(require(\"../package.json\"));\r\nvar knownProps = {\r\n end_of_line: true,\r\n indent_style: true,\r\n indent_size: true,\r\n insert_final_newline: true,\r\n trim_trailing_whitespace: true,\r\n charset: true,\r\n};\r\nfunction fnmatch(filepath, glob) {\r\n var matchOptions = { matchBase: true, dot: true, noext: true };\r\n glob = glob.replace(/\\*\\*/g, '{*,**/**/**}');\r\n return fnmatch_1.default(filepath, glob, matchOptions);\r\n}\r\nfunction getConfigFileNames(filepath, options) {\r\n var paths = [];\r\n do {\r\n filepath = path.dirname(filepath);\r\n paths.push(path.join(filepath, options.config));\r\n } while (filepath !== options.root);\r\n return paths;\r\n}\r\nfunction processMatches(matches, version) {\r\n // Set indent_size to 'tab' if indent_size is unspecified and\r\n // indent_style is set to 'tab'.\r\n if ('indent_style' in matches\r\n && matches.indent_style === 'tab'\r\n && !('indent_size' in matches)\r\n && semver.gte(version, '0.10.0')) {\r\n matches.indent_size = 'tab';\r\n }\r\n // Set tab_width to indent_size if indent_size is specified and\r\n // tab_width is unspecified\r\n if ('indent_size' in matches\r\n && !('tab_width' in matches)\r\n && matches.indent_size !== 'tab') {\r\n matches.tab_width = matches.indent_size;\r\n }\r\n // Set indent_size to tab_width if indent_size is 'tab'\r\n if ('indent_size' in matches\r\n && 'tab_width' in matches\r\n && matches.indent_size === 'tab') {\r\n matches.indent_size = matches.tab_width;\r\n }\r\n return matches;\r\n}\r\nfunction processOptions(options, filepath) {\r\n if (options === void 0) { options = {}; }\r\n return {\r\n config: options.config || '.editorconfig',\r\n version: options.version || package_json_1.default.version,\r\n root: path.resolve(options.root || path.parse(filepath).root),\r\n };\r\n}\r\nfunction buildFullGlob(pathPrefix, glob) {\r\n switch (glob.indexOf('/')) {\r\n case -1:\r\n glob = '**/' + glob;\r\n break;\r\n case 0:\r\n glob = glob.substring(1);\r\n break;\r\n default:\r\n break;\r\n }\r\n return path.join(pathPrefix, glob);\r\n}\r\nfunction extendProps(props, options) {\r\n if (props === void 0) { props = {}; }\r\n if (options === void 0) { options = {}; }\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n var value = options[key];\r\n var key2 = key.toLowerCase();\r\n var value2 = value;\r\n if (knownProps[key2]) {\r\n value2 = value.toLowerCase();\r\n }\r\n try {\r\n value2 = JSON.parse(value);\r\n }\r\n catch (e) { }\r\n if (typeof value === 'undefined' || value === null) {\r\n // null and undefined are values specific to JSON (no special meaning\r\n // in editorconfig) & should just be returned as regular strings.\r\n value2 = String(value);\r\n }\r\n props[key2] = value2;\r\n }\r\n }\r\n return props;\r\n}\r\nfunction parseFromConfigs(configs, filepath, options) {\r\n return processMatches(configs\r\n .reverse()\r\n .reduce(function (matches, file) {\r\n var pathPrefix = path.dirname(file.name);\r\n file.contents.forEach(function (section) {\r\n var glob = section[0];\r\n var options2 = section[1];\r\n if (!glob) {\r\n return;\r\n }\r\n var fullGlob = buildFullGlob(pathPrefix, glob);\r\n if (!fnmatch(filepath, fullGlob)) {\r\n return;\r\n }\r\n matches = extendProps(matches, options2);\r\n });\r\n return matches;\r\n }, {}), options.version);\r\n}\r\nfunction getConfigsForFiles(files) {\r\n var configs = [];\r\n for (var i in files) {\r\n if (files.hasOwnProperty(i)) {\r\n var file = files[i];\r\n var contents = ini_1.parseString(file.contents);\r\n configs.push({\r\n name: file.name,\r\n contents: contents,\r\n });\r\n if ((contents[0][1].root || '').toLowerCase() === 'true') {\r\n break;\r\n }\r\n }\r\n }\r\n return configs;\r\n}\r\nfunction readConfigFiles(filepaths) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n return [2 /*return*/, Promise.all(filepaths.map(function (name) { return new Promise(function (resolve) {\r\n fs.readFile(name, 'utf8', function (err, data) {\r\n resolve({\r\n name: name,\r\n contents: err ? '' : data,\r\n });\r\n });\r\n }); }))];\r\n });\r\n });\r\n}\r\nfunction readConfigFilesSync(filepaths) {\r\n var files = [];\r\n var file;\r\n filepaths.forEach(function (filepath) {\r\n try {\r\n file = fs.readFileSync(filepath, 'utf8');\r\n }\r\n catch (e) {\r\n file = '';\r\n }\r\n files.push({\r\n name: filepath,\r\n contents: file,\r\n });\r\n });\r\n return files;\r\n}\r\nfunction opts(filepath, options) {\r\n if (options === void 0) { options = {}; }\r\n var resolvedFilePath = path.resolve(filepath);\r\n return [\r\n resolvedFilePath,\r\n processOptions(options, resolvedFilePath),\r\n ];\r\n}\r\nfunction parseFromFiles(filepath, files, options) {\r\n if (options === void 0) { options = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, resolvedFilePath, processedOptions;\r\n return __generator(this, function (_b) {\r\n _a = opts(filepath, options), resolvedFilePath = _a[0], processedOptions = _a[1];\r\n return [2 /*return*/, files.then(getConfigsForFiles)\r\n .then(function (configs) { return parseFromConfigs(configs, resolvedFilePath, processedOptions); })];\r\n });\r\n });\r\n}\r\nexports.parseFromFiles = parseFromFiles;\r\nfunction parseFromFilesSync(filepath, files, options) {\r\n if (options === void 0) { options = {}; }\r\n var _a = opts(filepath, options), resolvedFilePath = _a[0], processedOptions = _a[1];\r\n return parseFromConfigs(getConfigsForFiles(files), resolvedFilePath, processedOptions);\r\n}\r\nexports.parseFromFilesSync = parseFromFilesSync;\r\nfunction parse(_filepath, _options) {\r\n if (_options === void 0) { _options = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, resolvedFilePath, processedOptions, filepaths;\r\n return __generator(this, function (_b) {\r\n _a = opts(_filepath, _options), resolvedFilePath = _a[0], processedOptions = _a[1];\r\n filepaths = getConfigFileNames(resolvedFilePath, processedOptions);\r\n return [2 /*return*/, readConfigFiles(filepaths)\r\n .then(getConfigsForFiles)\r\n .then(function (configs) { return parseFromConfigs(configs, resolvedFilePath, processedOptions); })];\r\n });\r\n });\r\n}\r\nexports.parse = parse;\r\nfunction parseSync(_filepath, _options) {\r\n if (_options === void 0) { _options = {}; }\r\n var _a = opts(_filepath, _options), resolvedFilePath = _a[0], processedOptions = _a[1];\r\n var filepaths = getConfigFileNames(resolvedFilePath, processedOptions);\r\n var files = readConfigFilesSync(filepaths);\r\n return parseFromConfigs(getConfigsForFiles(files), resolvedFilePath, processedOptions);\r\n}\r\nexports.parseSync = parseSync;\r\n","import { KnownProps as EditorConfig, parse } from \"editorconfig\";\nimport { env } from \"../../env\";\nimport { parallel } from \"../../utils/parallel\";\nimport { extname } from \"../../utils/path\";\nimport { BY_LINE } from \"../../utils/text\";\nimport { BuildGraph } from \"../build-graph\";\nimport { Component } from \"../component\";\n\nconst debug = env.debug(\"vba-blocks:editor-config\");\nconst cache: Map<string, EditorConfig> = new Map();\n\nexport async function toCompiled(graph: BuildGraph): Promise<BuildGraph> {\n\treturn graph;\n}\n\nexport async function toSrc(graph: BuildGraph): Promise<BuildGraph> {\n\t// First, normalize line-endings to CRLF\n\tconst { name, references, fromDependencies } = graph;\n\tconst components = await parallel(graph.components, formatComponent);\n\n\treturn { name, components, references, fromDependencies };\n}\n\nasync function formatComponent(component: Component): Promise<Component> {\n\tconst { end_of_line, trim_trailing_whitespace, insert_final_newline } = await loadEditorConfig(\n\t\tcomponent\n\t);\n\tconst newLine = end_of_line === \"lf\" ? \"\\n\" : \"\\r\\n\";\n\n\tconst code = component.code;\n\tconst lines = code.split(BY_LINE);\n\tconst transformedCode = lines\n\t\t.map(trim_trailing_whitespace ? trimTrailingWhitespace : passthrough)\n\t\t.join(newLine);\n\n\tcomponent.code = insert_final_newline ? insertFinalNewline(transformedCode) : transformedCode;\n\n\treturn component;\n}\n\nasync function loadEditorConfig(component: Component): Promise<EditorConfig> {\n\tconst extension = extname(component.filename);\n\tif (cache.has(extension)) return cache.get(extension)!;\n\n\tconst config = await parse(component.filename);\n\tcache.set(extension, config);\n\n\tdebug(`Formatting ${extension} with`, config);\n\n\treturn config;\n}\n\nfunction trimTrailingWhitespace(line: string): string {\n\treturn line.trimEnd();\n}\n\nfunction insertFinalNewline(code: string): string {\n\tif (code[code.length - 1] !== \"\\n\") code += \"\\n\";\n\treturn code;\n}\n\nfunction passthrough(line: string): string {\n\treturn line;\n}\n","import { asyncMap } from \"../utils/async-map\";\nimport { BuildGraph } from \"./build-graph\";\nimport * as editorConfig from \"./transforms/editor-config\";\n\nconst transforms = [editorConfig];\n\nexport const toCompiled = asyncMap<BuildGraph>(\n\t...transforms.map(transform => transform.toCompiled).filter(Boolean)\n);\nexport const toSrc = asyncMap<BuildGraph>(\n\t...transforms.map(transform => transform.toSrc).filter(Boolean)\n);\n","var sax = require('sax');\r\nvar expat /*= require('node-expat');*/ = { on: function () { }, parse: function () { } };\r\nvar helper = require('./options-helper');\r\nvar isArray = require('./array-helper').isArray;\r\n\r\nvar options;\r\nvar pureJsParser = true;\r\nvar currentElement;\r\n\r\nfunction validateOptions(userOptions) {\r\n options = helper.copyOptions(userOptions);\r\n helper.ensureFlagExists('ignoreDeclaration', options);\r\n helper.ensureFlagExists('ignoreInstruction', options);\r\n helper.ensureFlagExists('ignoreAttributes', options);\r\n helper.ensureFlagExists('ignoreText', options);\r\n helper.ensureFlagExists('ignoreComment', options);\r\n helper.ensureFlagExists('ignoreCdata', options);\r\n helper.ensureFlagExists('ignoreDoctype', options);\r\n helper.ensureFlagExists('compact', options);\r\n helper.ensureFlagExists('alwaysChildren', options);\r\n helper.ensureFlagExists('addParent', options);\r\n helper.ensureFlagExists('trim', options);\r\n helper.ensureFlagExists('nativeType', options);\r\n helper.ensureFlagExists('nativeTypeAttributes', options);\r\n helper.ensureFlagExists('sanitize', options);\r\n helper.ensureFlagExists('instructionHasAttributes', options);\r\n helper.ensureFlagExists('captureSpacesBetweenElements', options);\r\n helper.ensureAlwaysArrayExists(options);\r\n helper.ensureKeyExists('declaration', options);\r\n helper.ensureKeyExists('instruction', options);\r\n helper.ensureKeyExists('attributes', options);\r\n helper.ensureKeyExists('text', options);\r\n helper.ensureKeyExists('comment', options);\r\n helper.ensureKeyExists('cdata', options);\r\n helper.ensureKeyExists('doctype', options);\r\n helper.ensureKeyExists('type', options);\r\n helper.ensureKeyExists('name', options);\r\n helper.ensureKeyExists('elements', options);\r\n helper.ensureKeyExists('parent', options);\r\n helper.checkFnExists('doctype', options);\r\n helper.checkFnExists('instruction', options);\r\n helper.checkFnExists('cdata', options);\r\n helper.checkFnExists('comment', options);\r\n helper.checkFnExists('text', options);\r\n helper.checkFnExists('instructionName', options);\r\n helper.checkFnExists('elementName', options);\r\n helper.checkFnExists('attributeName', options);\r\n helper.checkFnExists('attributeValue', options);\r\n helper.checkFnExists('attributes', options);\r\n return options;\r\n}\r\n\r\nfunction nativeType(value) {\r\n var nValue = Number(value);\r\n if (!isNaN(nValue)) {\r\n return nValue;\r\n }\r\n var bValue = value.toLowerCase();\r\n if (bValue === 'true') {\r\n return true;\r\n } else if (bValue === 'false') {\r\n return false;\r\n }\r\n return value;\r\n}\r\n\r\nfunction addField(type, value) {\r\n var key;\r\n if (options.compact) {\r\n if (\r\n !currentElement[options[type + 'Key']] &&\r\n (isArray(options.alwaysArray) ? options.alwaysArray.indexOf(options[type + 'Key']) !== -1 : options.alwaysArray)\r\n ) {\r\n currentElement[options[type + 'Key']] = [];\r\n }\r\n if (currentElement[options[type + 'Key']] && !isArray(currentElement[options[type + 'Key']])) {\r\n currentElement[options[type + 'Key']] = [currentElement[options[type + 'Key']]];\r\n }\r\n if (type + 'Fn' in options && typeof value === 'string') {\r\n value = options[type + 'Fn'](value, currentElement);\r\n }\r\n if (type === 'instruction' && ('instructionFn' in options || 'instructionNameFn' in options)) {\r\n for (key in value) {\r\n if (value.hasOwnProperty(key)) {\r\n if ('instructionFn' in options) {\r\n value[key] = options.instructionFn(value[key], key, currentElement);\r\n } else {\r\n var temp = value[key];\r\n delete value[key];\r\n value[options.instructionNameFn(key, temp, currentElement)] = temp;\r\n }\r\n }\r\n }\r\n }\r\n if (isArray(currentElement[options[type + 'Key']])) {\r\n currentElement[options[type + 'Key']].push(value);\r\n } else {\r\n currentElement[options[type + 'Key']] = value;\r\n }\r\n } else {\r\n if (!currentElement[options.elementsKey]) {\r\n currentElement[options.elementsKey] = [];\r\n }\r\n var element = {};\r\n element[options.typeKey] = type;\r\n if (type === 'instruction') {\r\n for (key in value) {\r\n if (value.hasOwnProperty(key)) {\r\n break;\r\n }\r\n }\r\n element[options.nameKey] = 'instructionNameFn' in options ? options.instructionNameFn(key, value, currentElement) : key;\r\n if (options.instructionHasAttributes) {\r\n element[options.attributesKey] = value[key][options.attributesKey];\r\n if ('instructionFn' in options) {\r\n element[options.attributesKey] = options.instructionFn(element[options.attributesKey], key, currentElement);\r\n }\r\n } else {\r\n if ('instructionFn' in options) {\r\n value[key] = options.instructionFn(value[key], key, currentElement);\r\n }\r\n element[options.instructionKey] = value[key];\r\n }\r\n } else {\r\n if (type + 'Fn' in options) {\r\n value = options[type + 'Fn'](value, currentElement);\r\n }\r\n element[options[type + 'Key']] = value;\r\n }\r\n if (options.addParent) {\r\n element[options.parentKey] = currentElement;\r\n }\r\n currentElement[options.elementsKey].push(element);\r\n }\r\n}\r\n\r\nfunction manipulateAttributes(attributes) {\r\n if ('attributesFn' in options && attributes) {\r\n attributes = options.attributesFn(attributes, currentElement);\r\n }\r\n if ((options.trim || 'attributeValueFn' in options || 'attributeNameFn' in options || options.nativeTypeAttributes) && attributes) {\r\n var key;\r\n for (key in attributes) {\r\n if (attributes.hasOwnProperty(key)) {\r\n if (options.trim) attributes[key] = attributes[key].trim();\r\n if (options.nativeTypeAttributes) {\r\n attributes[key] = nativeType(attributes[key]);\r\n }\r\n if ('attributeValueFn' in options) attributes[key] = options.attributeValueFn(attributes[key], key, currentElement);\r\n if ('attributeNameFn' in options) {\r\n var temp = attributes[key];\r\n delete attributes[key];\r\n attributes[options.attributeNameFn(key, attributes[key], currentElement)] = temp;\r\n }\r\n }\r\n }\r\n }\r\n return attributes;\r\n}\r\n\r\nfunction onInstruction(instruction) {\r\n var attributes = {};\r\n if (instruction.body && (instruction.name.toLowerCase() === 'xml' || options.instructionHasAttributes)) {\r\n var attrsRegExp = /([\\w:-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\w+))\\s*/g;\r\n var match;\r\n while ((match = attrsRegExp.exec(instruction.body)) !== null) {\r\n attributes[match[1]] = match[2] || match[3] || match[4];\r\n }\r\n attributes = manipulateAttributes(attributes);\r\n }\r\n if (instruction.name.toLowerCase() === 'xml') {\r\n if (options.ignoreDeclaration) {\r\n return;\r\n }\r\n currentElement[options.declarationKey] = {};\r\n if (Object.keys(attributes).length) {\r\n currentElement[options.declarationKey][options.attributesKey] = attributes;\r\n }\r\n if (options.addParent) {\r\n currentElement[options.declarationKey][options.parentKey] = currentElement;\r\n }\r\n } else {\r\n if (options.ignoreInstruction) {\r\n return;\r\n }\r\n if (options.trim) {\r\n instruction.body = instruction.body.trim();\r\n }\r\n var value = {};\r\n if (options.instructionHasAttributes && Object.keys(attributes).length) {\r\n value[instruction.name] = {};\r\n value[instruction.name][options.attributesKey] = attributes;\r\n } else {\r\n value[instruction.name] = instruction.body;\r\n }\r\n addField('instruction', value);\r\n }\r\n}\r\n\r\nfunction onStartElement(name, attributes) {\r\n var element;\r\n if (typeof name === 'object') {\r\n attributes = name.attributes;\r\n name = name.name;\r\n }\r\n attributes = manipulateAttributes(attributes);\r\n if ('elementNameFn' in options) {\r\n name = options.elementNameFn(name, currentElement);\r\n }\r\n if (options.compact) {\r\n element = {};\r\n if (!options.ignoreAttributes && attributes && Object.keys(attributes).length) {\r\n element[options.attributesKey] = {};\r\n var key;\r\n for (key in attributes) {\r\n if (attributes.hasOwnProperty(key)) {\r\n element[options.attributesKey][key] = attributes[key];\r\n }\r\n }\r\n }\r\n if (\r\n !(name in currentElement) &&\r\n (isArray(options.alwaysArray) ? options.alwaysArray.indexOf(name) !== -1 : options.alwaysArray)\r\n ) {\r\n currentElement[name] = [];\r\n }\r\n if (currentElement[name] && !isArray(currentElement[name])) {\r\n currentElement[name] = [currentElement[name]];\r\n }\r\n if (isArray(currentElement[name])) {\r\n currentElement[name].push(element);\r\n } else {\r\n currentElement[name] = element;\r\n }\r\n } else {\r\n if (!currentElement[options.elementsKey]) {\r\n currentElement[options.elementsKey] = [];\r\n }\r\n element = {};\r\n element[options.typeKey] = 'element';\r\n element[options.nameKey] = name;\r\n if (!options.ignoreAttributes && attributes && Object.keys(attributes).length) {\r\n element[options.attributesKey] = attributes;\r\n }\r\n if (options.alwaysChildren) {\r\n element[options.elementsKey] = [];\r\n }\r\n currentElement[options.elementsKey].push(element);\r\n }\r\n element[options.parentKey] = currentElement; // will be deleted in onEndElement() if !options.addParent\r\n currentElement = element;\r\n}\r\n\r\nfunction onText(text) {\r\n if (options.ignoreText) {\r\n return;\r\n }\r\n if (!text.trim() && !options.captureSpacesBetweenElements) {\r\n return;\r\n }\r\n if (options.trim) {\r\n text = text.trim();\r\n }\r\n if (options.nativeType) {\r\n text = nativeType(text);\r\n }\r\n if (options.sanitize) {\r\n text = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n }\r\n addField('text', text);\r\n}\r\n\r\nfunction onComment(comment) {\r\n if (options.ignoreComment) {\r\n return;\r\n }\r\n if (options.trim) {\r\n comment = comment.trim();\r\n }\r\n addField('comment', comment);\r\n}\r\n\r\nfunction onEndElement(name) {\r\n var parentElement = currentElement[options.parentKey];\r\n if (!options.addParent) {\r\n delete currentElement[options.parentKey];\r\n }\r\n currentElement = parentElement;\r\n}\r\n\r\nfunction onCdata(cdata) {\r\n if (options.ignoreCdata) {\r\n return;\r\n }\r\n if (options.trim) {\r\n cdata = cdata.trim();\r\n }\r\n addField('cdata', cdata);\r\n}\r\n\r\nfunction onDoctype(doctype) {\r\n if (options.ignoreDoctype) {\r\n return;\r\n }\r\n doctype = doctype.replace(/^ /, '');\r\n if (options.trim) {\r\n doctype = doctype.trim();\r\n }\r\n addField('doctype', doctype);\r\n}\r\n\r\nfunction onError(error) {\r\n error.note = error; //console.error(error);\r\n}\r\n\r\nmodule.exports = function (xml, userOptions) {\r\n\r\n var parser = pureJsParser ? sax.parser(true, {}) : parser = new expat.Parser('UTF-8');\r\n var result = {};\r\n currentElement = result;\r\n\r\n options = validateOptions(userOptions);\r\n\r\n if (pureJsParser) {\r\n parser.opt = {strictEntities: true};\r\n parser.onopentag = onStartElement;\r\n parser.ontext = onText;\r\n parser.oncomment = onComment;\r\n parser.onclosetag = onEndElement;\r\n parser.onerror = onError;\r\n parser.oncdata = onCdata;\r\n parser.ondoctype = onDoctype;\r\n parser.onprocessinginstruction = onInstruction;\r\n } else {\r\n parser.on('startElement', onStartElement);\r\n parser.on('text', onText);\r\n parser.on('comment', onComment);\r\n parser.on('endElement', onEndElement);\r\n parser.on('error', onError);\r\n //parser.on('startCdata', onStartCdata);\r\n //parser.on('endCdata', onEndCdata);\r\n //parser.on('entityDecl', onEntityDecl);\r\n }\r\n\r\n if (pureJsParser) {\r\n parser.write(xml).close();\r\n } else {\r\n if (!parser.parse(xml)) {\r\n throw new Error('XML parsing error: ' + parser.getError());\r\n }\r\n }\r\n\r\n if (result[options.elementsKey]) {\r\n var temp = result[options.elementsKey];\r\n delete result[options.elementsKey];\r\n result[options.elementsKey] = temp;\r\n delete result.text;\r\n }\r\n\r\n return result;\r\n\r\n};\r\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 // 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\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++, // &amp 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=\"&quot;\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\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).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\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 parser.doctype += c\n if (c === ']') {\n parser.state = S.DOCTYPE\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = 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 {\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 strictFail(parser, 'Unquoted attribute value')\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 parser[buffer] += parseEntity(parser)\n parser.entity = ''\n parser.state = returnState\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:\n throw new Error(parser, 'Unknown state: ' + parser.state)\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","module.exports = {\r\n\r\n isArray: function(value) {\r\n if (Array.isArray) {\r\n return Array.isArray(value);\r\n }\r\n // fallback for older browsers like IE 8\r\n return Object.prototype.toString.call( value ) === '[object Array]';\r\n }\r\n\r\n};\r\n","var isArray = require('./array-helper').isArray;\r\n\r\nmodule.exports = {\r\n\r\n copyOptions: function (options) {\r\n var key, copy = {};\r\n for (key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n copy[key] = options[key];\r\n }\r\n }\r\n return copy;\r\n },\r\n\r\n ensureFlagExists: function (item, options) {\r\n if (!(item in options) || typeof options[item] !== 'boolean') {\r\n options[item] = false;\r\n }\r\n },\r\n\r\n ensureSpacesExists: function (options) {\r\n if (!('spaces' in options) || (typeof options.spaces !== 'number' && typeof options.spaces !== 'string')) {\r\n options.spaces = 0;\r\n }\r\n },\r\n\r\n ensureAlwaysArrayExists: function (options) {\r\n if (!('alwaysArray' in options) || (typeof options.alwaysArray !== 'boolean' && !isArray(options.alwaysArray))) {\r\n options.alwaysArray = false;\r\n }\r\n },\r\n\r\n ensureKeyExists: function (key, options) {\r\n if (!(key + 'Key' in options) || typeof options[key + 'Key'] !== 'string') {\r\n options[key + 'Key'] = options.compact ? '_' + key : key;\r\n }\r\n },\r\n\r\n checkFnExists: function (key, options) {\r\n return key + 'Fn' in options;\r\n }\r\n\r\n};\r\n","var helper = require('./options-helper');\r\nvar xml2js = require('./xml2js');\r\n\r\nfunction validateOptions (userOptions) {\r\n var options = helper.copyOptions(userOptions);\r\n helper.ensureSpacesExists(options);\r\n return options;\r\n}\r\n\r\nmodule.exports = function(xml, userOptions) {\r\n var options, js, json, parentKey;\r\n options = validateOptions(userOptions);\r\n js = xml2js(xml, options);\r\n parentKey = 'compact' in options && options.compact ? '_parent' : 'parent';\r\n // parentKey = ptions.compact ? '_parent' : 'parent'; // consider this\r\n if ('addParent' in options && options.addParent) {\r\n json = JSON.stringify(js, function (k, v) { return k === parentKey? '_' : v; }, options.spaces);\r\n } else {\r\n json = JSON.stringify(js, null, options.spaces);\r\n }\r\n return json.replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\r\n};\r\n","var helper = require('./options-helper');\nvar isArray = require('./array-helper').isArray;\n\nvar currentElement, currentElementName;\n\nfunction validateOptions(userOptions) {\n var options = helper.copyOptions(userOptions);\n helper.ensureFlagExists('ignoreDeclaration', options);\n helper.ensureFlagExists('ignoreInstruction', options);\n helper.ensureFlagExists('ignoreAttributes', options);\n helper.ensureFlagExists('ignoreText', options);\n helper.ensureFlagExists('ignoreComment', options);\n helper.ensureFlagExists('ignoreCdata', options);\n helper.ensureFlagExists('ignoreDoctype', options);\n helper.ensureFlagExists('compact', options);\n helper.ensureFlagExists('indentText', options);\n helper.ensureFlagExists('indentCdata', options);\n helper.ensureFlagExists('indentAttributes', options);\n helper.ensureFlagExists('indentInstruction', options);\n helper.ensureFlagExists('fullTagEmptyElement', options);\n helper.ensureFlagExists('noQuotesForNativeAttributes', options);\n helper.ensureSpacesExists(options);\n if (typeof options.spaces === 'number') {\n options.spaces = Array(options.spaces + 1).join(' ');\n }\n helper.ensureKeyExists('declaration', options);\n helper.ensureKeyExists('instruction', options);\n helper.ensureKeyExists('attributes', options);\n helper.ensureKeyExists('text', options);\n helper.ensureKeyExists('comment', options);\n helper.ensureKeyExists('cdata', options);\n helper.ensureKeyExists('doctype', options);\n helper.ensureKeyExists('type', options);\n helper.ensureKeyExists('name', options);\n helper.ensureKeyExists('elements', options);\n helper.checkFnExists('doctype', options);\n helper.checkFnExists('instruction', options);\n helper.checkFnExists('cdata', options);\n helper.checkFnExists('comment', options);\n helper.checkFnExists('text', options);\n helper.checkFnExists('instructionName', options);\n helper.checkFnExists('elementName', options);\n helper.checkFnExists('attributeName', options);\n helper.checkFnExists('attributeValue', options);\n helper.checkFnExists('attributes', options);\n helper.checkFnExists('fullTagEmptyElement', options);\n return options;\n}\n\nfunction writeIndentation(options, depth, firstLine) {\n return (!firstLine && options.spaces ? '\\n' : '') + Array(depth + 1).join(options.spaces);\n}\n\nfunction writeAttributes(attributes, options, depth) {\n if (options.ignoreAttributes) {\n return '';\n }\n if ('attributesFn' in options) {\n attributes = options.attributesFn(attributes, currentElementName, currentElement);\n }\n var key, attr, attrName, quote, result = [];\n for (key in attributes) {\n if (attributes.hasOwnProperty(key) && attributes[key] !== null && attributes[key] !== undefined) {\n quote = options.noQuotesForNativeAttributes && typeof attributes[key] !== 'string' ? '' : '\"';\n attr = '' + attributes[key]; // ensure number and boolean are converted to String\n attr = attr.replace(/\"/g, '&quot;');\n attrName = 'attributeNameFn' in options ? options.attributeNameFn(key, attr, currentElementName, currentElement) : key;\n result.push((options.spaces && options.indentAttributes? writeIndentation(options, depth+1, false) : ' '));\n result.push(attrName + '=' + quote + ('attributeValueFn' in options ? options.attributeValueFn(attr, key, currentElementName, currentElement) : attr) + quote);\n }\n }\n if (attributes && Object.keys(attributes).length && options.spaces && options.indentAttributes) {\n result.push(writeIndentation(options, depth, false));\n }\n return result.join('');\n}\n\nfunction writeDeclaration(declaration, options, depth) {\n currentElement = declaration;\n currentElementName = 'xml';\n return options.ignoreDeclaration ? '' : '<?' + 'xml' + writeAttributes(declaration[options.attributesKey], options, depth) + '?>';\n}\n\nfunction writeInstruction(instruction, options, depth) {\n if (options.ignoreInstruction) {\n return '';\n }\n var key;\n for (key in instruction) {\n if (instruction.hasOwnProperty(key)) {\n break;\n }\n }\n var instructionName = 'instructionNameFn' in options ? options.instructionNameFn(key, instruction[key], currentElementName, currentElement) : key;\n if (typeof instruction[key] === 'object') {\n currentElement = instruction;\n currentElementName = instructionName;\n return '<?' + instructionName + writeAttributes(instruction[key][options.attributesKey], options, depth) + '?>';\n } else {\n var instructionValue = instruction[key] ? instruction[key] : '';\n if ('instructionFn' in options) instructionValue = options.instructionFn(instructionValue, key, currentElementName, currentElement);\n return '<?' + instructionName + (instructionValue ? ' ' + instructionValue : '') + '?>';\n }\n}\n\nfunction writeComment(comment, options) {\n return options.ignoreComment ? '' : '<!--' + ('commentFn' in options ? options.commentFn(comment, currentElementName, currentElement) : comment) + '-->';\n}\n\nfunction writeCdata(cdata, options) {\n return options.ignoreCdata ? '' : '<![CDATA[' + ('cdataFn' in options ? options.cdataFn(cdata, currentElementName, currentElement) : cdata.replace(']]>', ']]]]><![CDATA[>')) + ']]>';\n}\n\nfunction writeDoctype(doctype, options) {\n return options.ignoreDoctype ? '' : '<!DOCTYPE ' + ('doctypeFn' in options ? options.doctypeFn(doctype, currentElementName, currentElement) : doctype) + '>';\n}\n\nfunction writeText(text, options) {\n if (options.ignoreText) return '';\n text = '' + text; // ensure Number and Boolean are converted to String\n text = text.replace(/&amp;/g, '&'); // desanitize to avoid double sanitization\n text = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n return 'textFn' in options ? options.textFn(text, currentElementName, currentElement) : text;\n}\n\nfunction hasContent(element, options) {\n var i;\n if (element.elements && element.elements.length) {\n for (i = 0; i < element.elements.length; ++i) {\n switch (element.elements[i][options.typeKey]) {\n case 'text':\n if (options.indentText) {\n return true;\n }\n break; // skip to next key\n case 'cdata':\n if (options.indentCdata) {\n return true;\n }\n break; // skip to next key\n case 'instruction':\n if (options.indentInstruction) {\n return true;\n }\n break; // skip to next key\n case 'doctype':\n case 'comment':\n case 'element':\n return true;\n default:\n return true;\n }\n }\n }\n return false;\n}\n\nfunction writeElement(element, options, depth) {\n currentElement = element;\n currentElementName = element.name;\n var xml = [], elementName = 'elementNameFn' in options ? options.elementNameFn(element.name, element) : element.name;\n xml.push('<' + elementName);\n if (element[options.attributesKey]) {\n xml.push(writeAttributes(element[options.attributesKey], options, depth));\n }\n var withClosingTag = element[options.elementsKey] && element[options.elementsKey].length || element[options.attributesKey] && element[options.attributesKey]['xml:space'] === 'preserve';\n if (!withClosingTag) {\n if ('fullTagEmptyElementFn' in options) {\n withClosingTag = options.fullTagEmptyElementFn(element.name, element);\n } else {\n withClosingTag = options.fullTagEmptyElement;\n }\n }\n if (withClosingTag) {\n xml.push('>');\n if (element[options.elementsKey] && element[options.elementsKey].length) {\n xml.push(writeElements(element[options.elementsKey], options, depth + 1));\n currentElement = element;\n currentElementName = element.name;\n }\n xml.push(options.spaces && hasContent(element, options) ? '\\n' + Array(depth + 1).join(options.spaces) : '');\n xml.push('</' + elementName + '>');\n } else {\n xml.push('/>');\n }\n return xml.join('');\n}\n\nfunction writeElements(elements, options, depth, firstLine) {\n return elements.reduce(function (xml, element) {\n var indent = writeIndentation(options, depth, firstLine && !xml);\n switch (element.type) {\n case 'element': return xml + indent + writeElement(element, options, depth);\n case 'comment': return xml + indent + writeComment(element[options.commentKey], options);\n case 'doctype': return xml + indent + writeDoctype(element[options.doctypeKey], options);\n case 'cdata': return xml + (options.indentCdata ? indent : '') + writeCdata(element[options.cdataKey], options);\n case 'text': return xml + (options.indentText ? indent : '') + writeText(element[options.textKey], options);\n case 'instruction':\n var instruction = {};\n instruction[element[options.nameKey]] = element[options.attributesKey] ? element : element[options.instructionKey];\n return xml + (options.indentInstruction ? indent : '') + writeInstruction(instruction, options, depth);\n }\n }, '');\n}\n\nfunction hasContentCompact(element, options, anyContent) {\n var key;\n for (key in element) {\n if (element.hasOwnProperty(key)) {\n switch (key) {\n case options.parentKey:\n case options.attributesKey:\n break; // skip to next key\n case options.textKey:\n if (options.indentText || anyContent) {\n return true;\n }\n break; // skip to next key\n case options.cdataKey:\n if (options.indentCdata || anyContent) {\n return true;\n }\n break; // skip to next key\n case options.instructionKey:\n if (options.indentInstruction || anyContent) {\n return true;\n }\n break; // skip to next key\n case options.doctypeKey:\n case options.commentKey:\n return true;\n default:\n return true;\n }\n }\n }\n return false;\n}\n\nfunction writeElementCompact(element, name, options, depth, indent) {\n currentElement = element;\n currentElementName = name;\n var elementName = 'elementNameFn' in options ? options.elementNameFn(name, element) : name;\n if (typeof element === 'undefined' || element === null || element === '') {\n return 'fullTagEmptyElementFn' in options && options.fullTagEmptyElementFn(name, element) || options.fullTagEmptyElement ? '<' + elementName + '></' + elementName + '>' : '<' + elementName + '/>';\n }\n var xml = [];\n if (name) {\n xml.push('<' + elementName);\n if (typeof element !== 'object') {\n xml.push('>' + writeText(element,options) + '</' + elementName + '>');\n return xml.join('');\n }\n if (element[options.attributesKey]) {\n xml.push(writeAttributes(element[options.attributesKey], options, depth));\n }\n var withClosingTag = hasContentCompact(element, options, true) || element[options.attributesKey] && element[options.attributesKey]['xml:space'] === 'preserve';\n if (!withClosingTag) {\n if ('fullTagEmptyElementFn' in options) {\n withClosingTag = options.fullTagEmptyElementFn(name, element);\n } else {\n withClosingTag = options.fullTagEmptyElement;\n }\n }\n if (withClosingTag) {\n xml.push('>');\n } else {\n xml.push('/>');\n return xml.join('');\n }\n }\n xml.push(writeElementsCompact(element, options, depth + 1, false));\n currentElement = element;\n currentElementName = name;\n if (name) {\n xml.push((indent ? writeIndentation(options, depth, false) : '') + '</' + elementName + '>');\n }\n return xml.join('');\n}\n\nfunction writeElementsCompact(element, options, depth, firstLine) {\n var i, key, nodes, xml = [];\n for (key in element) {\n if (element.hasOwnProperty(key)) {\n nodes = isArray(element[key]) ? element[key] : [element[key]];\n for (i = 0; i < nodes.length; ++i) {\n switch (key) {\n case options.declarationKey: xml.push(writeDeclaration(nodes[i], options, depth)); break;\n case options.instructionKey: xml.push((options.indentInstruction ? writeIndentation(options, depth, firstLine) : '') + writeInstruction(nodes[i], options, depth)); break;\n case options.attributesKey: case options.parentKey: break; // skip\n case options.textKey: xml.push((options.indentText ? writeIndentation(options, depth, firstLine) : '') + writeText(nodes[i], options)); break;\n case options.cdataKey: xml.push((options.indentCdata ? writeIndentation(options, depth, firstLine) : '') + writeCdata(nodes[i], options)); break;\n case options.doctypeKey: xml.push(writeIndentation(options, depth, firstLine) + writeDoctype(nodes[i], options)); break;\n case options.commentKey: xml.push(writeIndentation(options, depth, firstLine) + writeComment(nodes[i], options)); break;\n default: xml.push(writeIndentation(options, depth, firstLine) + writeElementCompact(nodes[i], key, options, depth, hasContentCompact(nodes[i], options)));\n }\n firstLine = firstLine && !xml.length;\n }\n }\n }\n return xml.join('');\n}\n\nmodule.exports = function (js, options) {\n options = validateOptions(options);\n var xml = [];\n currentElement = js;\n currentElementName = '_root_';\n if (options.compact) {\n xml.push(writeElementsCompact(js, options, 0, true));\n } else {\n if (js[options.declarationKey]) {\n xml.push(writeDeclaration(js[options.declarationKey], options, 0));\n }\n if (js[options.elementsKey] && js[options.elementsKey].length) {\n xml.push(writeElements(js[options.elementsKey], options, 0, !xml.length));\n }\n }\n return xml.join('');\n};\n","/*jslint node:true */\r\n\r\nvar xml2js = require('./xml2js');\r\nvar xml2json = require('./xml2json');\r\nvar js2xml = require('./js2xml');\r\nvar json2xml = require('./json2xml');\r\n\r\nmodule.exports = {\r\n xml2js: xml2js,\r\n xml2json: xml2json,\r\n js2xml: js2xml,\r\n json2xml: json2xml\r\n};\r\n","import { xml2js, js2xml, Element } from \"xml-js\";\n\nexport type Xml = any;\n\nexport function parseXml(xml: string | Buffer): Element {\n\tif (Buffer.isBuffer(xml)) {\n\t\txml = xml.toString(\"utf8\");\n\t}\n\n\treturn xml2js(xml, { compact: false }) as Element;\n}\n\nexport interface ConvertOptions {\n\t// https://github.com/nashwaan/xml-js#options-for-converting-js-object--json--xml\n\tcompact?: boolean;\n}\n\nexport function convertXml(value: Xml, options?: ConvertOptions): string {\n\treturn js2xml(value, options);\n}\n\nexport function findElement(\n\telements: Element[] | undefined,\n\tcallback: (element: Element, index: number, elements: Element[]) => boolean\n): Element | undefined {\n\treturn elements && elements.find(callback);\n}\n\nexport function findElementByName(elements: Element[] | undefined, name: string) {\n\treturn findElement(elements, element => element.name === name);\n}\n","import { parseXml, convertXml, findElementByName } from \"../../utils/xml\";\nimport { env } from \"../../env\";\n\nimport { UnzipFile } from \"../../utils/zip\";\n\nconst debug = env.debug(\"vba-blocks:target.transforms.core-xml\");\nconst CORE_XML = /docProps[\\/,\\\\]core\\.xml/i;\n\nexport default function transformCoreXml(file: UnzipFile): UnzipFile {\n\tif (!CORE_XML.test(file.path)) return file;\n\n\tconst xml = parseXml(file.data.toString(\"utf8\"));\n\n\t// 1. cp:coreProperties > cp:lastModifiedBy -> Replace with dc:creator\n\t// 2. cp:coreProperties > dcterms:modified -> Replace with dcterms:created\n\tconst core_properties = findElementByName(xml.elements, \"cp:coreProperties\");\n\tif (core_properties) {\n\t\t// 1.\n\t\tconst last_modified_by = findElementByName(core_properties.elements, \"cp:lastModifiedBy\");\n\t\tconst creator = findElementByName(core_properties.elements, \"dc:creator\");\n\t\tif (last_modified_by && creator) {\n\t\t\tlast_modified_by.elements![0].text = creator.elements![0].text;\n\t\t}\n\n\t\t// 2.\n\t\tconst modified = findElementByName(core_properties.elements, \"dcterms:modified\");\n\t\tconst created = findElementByName(core_properties.elements, \"dcterms:created\");\n\t\tif (modified && created) {\n\t\t\tmodified.elements![0].text = created.elements![0].text;\n\t\t}\n\t} else {\n\t\tdebug(\"Warning: cp:coreProperties not found, unable to transform core.xml\");\n\t}\n\n\tfile.data = Buffer.from(convertXml(xml));\n\treturn file;\n}\n","export default function without<TValue>(array: TValue[], ...values: TValue[]): TValue[] {\n\tarray = array.slice();\n\tfor (const value of values) {\n\t\tconst index = array.indexOf(value);\n\t\tarray.splice(index, 1);\n\t}\n\treturn array;\n}\n","import { parseXml, convertXml, findElementByName } from \"../../utils/xml\";\nimport without from \"../../utils/without\";\nimport { env } from \"../../env\";\n\nimport { UnzipFile } from \"../../utils/zip\";\n\nconst debug = env.debug(\"vba-blocks:target.transforms.workbook-xml\");\nconst WORKBOOK_XML = /xl[\\/,\\\\]workbook\\.xml/i;\n\nexport default function transformWorkbookXml(file: UnzipFile): UnzipFile {\n\tif (!WORKBOOK_XML.test(file.path)) return file;\n\n\tconst xml = parseXml(file.data.toString(\"utf8\"));\n\n\t// 1. workbook > mc:AlternateContent > mc:Choice > x15ac:absPath -> Replace 'url' with empty string\n\t// 2. workbook > bookViews > workbookView -> Remove (maybe bookViews too)\n\t// 3. workbook > fileVersion -> Remove\n\t// 4. workbook > calcPr -> Set calcId=\"0\"\n\tconst workbook = findElementByName(xml.elements, \"workbook\");\n\tif (workbook) {\n\t\tconst alternate_content = findElementByName(workbook.elements, \"mc:AlternateContent\");\n\t\tconst choice = findElementByName(alternate_content && alternate_content.elements, \"mc:Choice\");\n\t\tconst abs_path = findElementByName(choice && choice.elements, \"x15ac:absPath\");\n\n\t\tif (abs_path) {\n\t\t\tabs_path.attributes!.url = \"\";\n\t\t}\n\n\t\tconst book_views = findElementByName(workbook.elements, \"bookViews\");\n\t\tif (book_views) {\n\t\t\tworkbook.elements = without(workbook.elements!, book_views);\n\t\t}\n\n\t\tconst file_version = findElementByName(workbook.elements, \"fileVersion\");\n\t\tif (file_version) {\n\t\t\tworkbook.elements = without(workbook.elements!, file_version);\n\t\t}\n\n\t\tconst calc_pr = findElementByName(workbook.elements, \"calcPr\");\n\t\tif (calc_pr) {\n\t\t\tcalc_pr.attributes!.calcId = \"0\";\n\t\t}\n\t} else {\n\t\tdebug(\"Warning: workbook not found, unable to transform workbook.xml\");\n\t}\n\n\tfile.data = Buffer.from(convertXml(xml));\n\treturn file;\n}\n"],"names":["extensions","excel","addins","join","env","byExtension","application","values","Object","entries","extension","getTargetInfo","project","target","options","extensionToApplication","type","addin","file","staging","paths","build","filename","replace","CliError","ErrorCode","AddinUnsupportedType","matcherCollection","MatcherCollection","matchers","this","map","matcher","minimatch_1","Minimatch","prototype","match","value","i","length","mayContain","parts","split","filter","Boolean","j","set","matchOne","walkSync","baseDir","inputOptions","mapFunct","handleOptions","includeBasePath","entry","basePath","path","sep","relativePath","_walkSync","isDefined","val","_options","Array","isArray","globs","lexicographically","a","b","aPath","bPath","_relativePath","visited","slice","handleRelativePath","realPath","fs","realpathSync","indexOf","push","ignoreMatcher_1","ignorePatterns","ignore","globMatcher","results","readdirSync","name","entryRelativePath","stats","statSync","error","code","getStat","isDirectory","Entry","mode","size","mtime","getTime","sortedEntries","sort","directories","concat","pop","filepath","defineProperty","get","enumerable","configurable","walkSync_1","asyncMap","fns","async","memo","fn","hasOwnProperty","pseudomap","PseudoMap","TypeError","clear","Map","forEach","key","kv","same","k","v","_index","find","data","s","call","thisp","keys","_data","has","res","delete","create","writable","n","Error","process","npm_package_name","npm_lifecycle_script","TEST_PSEUDOMAP","module","exports","require$$0","yallist","Yallist","list","self","tail","head","item","arguments","l","Node","unshift","prev","next","removeNode","node","unshiftNode","pushNode","shift","walker","forEachReverse","getReverse","mapReverse","reduce","initial","acc","reduceReverse","toArray","arr","toArrayReverse","from","to","ret","sliceReverse","reverse","p","makeSymbol","lruCache","LRUCache","MAX","Symbol","_nodeLRUCacheForceNoSymbol","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","naiveLength","max","Infinity","lc","stale","maxAge","dispose","noDisposeOnSet","reset","forEachStep","hit","isStale","del","undefined","doUse","diff","Date","now","trim","mL","allowStale","mA","lC","rforEach","dump","e","h","dumpLru","inspect","opts","str","extras","util","didFirst","len","peek","load","expiresAt","prune","sigmund_1","subject","maxSessions","notes","analysis","RE","RegExp","psychoAnalyze","session","issue","_","__","charAt","platform","minimatch","cache","LRU","GLOBSTAR","qmark","star","reSpecials","c","slashSplit","ext","t","pattern","nocomment","cacheKey","sigmund","cached","regexp","negate","comment","empty","make","monkeyPatch","desc","getOwnPropertyDescriptor","String","orig","defaults","def","m","_made","parseNegate","globSet","braceExpand","debug","console","globParts","si","parse","negateOffset","nonegate","substr","nobrace","escaping","prefix","numset","suf","start","end","inc","ii","ll","depth","member","addMember","FOR","addBraces","r","isSub","noglobstar","plType","stateChar","pl","re","hasMagic","nocase","patternListStack","inClass","reClassStart","classStart","patternStart","dot","clearStateChar","noext","reStart","cs","sp","SUBPARSE","$1","$2","addPatternStart","globUnescape","flags","regExp","_glob","_src","makeRe","twoStar","regExpEscape","ex","mm","f","nonull","partial","flipNegate","matchBase","basename","fi","pi","fl","fr","pr","WHILE","swallowee","toLowerCase","__awaiter","commonjsGlobal","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","result","done","then","apply","__generator","body","y","g","label","sent","trys","ops","verb","throw","return","iterator","op","__importStar","mod","__esModule","regex","section","param","parseString","sectionBody","sectionName","line","test","_a","readFile","err","parseSync","readFileSync","__importDefault","default","require$$1","semver","require$$2","fnmatch_1","require$$3","ini_1","package_json_1","require$$4","knownProps","end_of_line","indent_style","indent_size","insert_final_newline","trim_trailing_whitespace","charset","getConfigFileNames","dirname","config","root","processOptions","version","parseFromConfigs","configs","matches","gte","tab_width","processMatches","pathPrefix","contents","glob","options2","fullGlob","substring","buildFullGlob","fnmatch","props","key2","value2","JSON","extendProps","getConfigsForFiles","files","readConfigFiles","filepaths","all","resolvedFilePath","parseFromFiles","processedOptions","_b","parseFromFilesSync","_filepath","readConfigFilesSync","formatComponent","component","extname","loadEditorConfig","newLine","transformedCode","BY_LINE","trimTrailingWhitespace","passthrough","insertFinalNewline","trimEnd","graph","references","fromDependencies","components","parallel","transforms","editorConfig","transform","toCompiled","toSrc","currentElement","sax","parser","strict","opt","SAXParser","SAXStream","createStream","MAX_BUFFER_LENGTH","Stream","buffers","clearBuffers","q","bufferCheckPosition","lowercase","lowercasetags","looseCase","tags","closed","closedRoot","sawRoot","tag","noscript","state","S","BEGIN","strictEntities","ENTITIES","XML_ENTITIES","attribList","xmlns","ns","rootNS","trackPosition","position","column","emit","EVENTS","o","F","write","chunk","toString","BEGIN_WHITESPACE","beginWhiteSpace","TEXT","starti","textNode","isWhitespace","strictFail","TEXT_ENTITY","OPEN_WAKA","startTagPosition","SCRIPT","SCRIPT_ENDING","script","CLOSE_TAG","SGML_DECL","sgmlDecl","isMatch","nameStart","OPEN_TAG","tagName","PROC_INST","procInstName","procInstBody","pad","toUpperCase","CDATA","emitNode","cdata","COMMENT","DOCTYPE","doctype","isQuote","SGML_DECL_QUOTED","DOCTYPE_DTD","DOCTYPE_QUOTED","DOCTYPE_DTD_QUOTED","COMMENT_ENDING","COMMENT_ENDED","textopts","CDATA_ENDING","CDATA_ENDING_2","PROC_INST_ENDING","PROC_INST_BODY","nameBody","newTag","openTag","OPEN_TAG_SLASH","ATTRIB","closeTag","attribName","attribValue","ATTRIB_NAME","ATTRIB_VALUE","attrib","ATTRIB_NAME_SAW_WHITE","attributes","ATTRIB_VALUE_QUOTED","ATTRIB_VALUE_UNQUOTED","ATTRIB_VALUE_ENTITY_Q","ATTRIB_VALUE_CLOSED","isAttribEnd","ATTRIB_VALUE_ENTITY_U","CLOSE_TAG_SAW_WHITE","notMatch","returnState","buffer","parseEntity","entity","entityBody","entityStart","maxAllowed","Math","maxActual","closeText","checkBufferLength","resume","close","flush","streamWraps","ev","_parser","readable","me","onend","onerror","er","_decoder","removeAllListeners","on","constructor","Buffer","isBuffer","SD","StringDecoder","handler","args","splice","XML_NAMESPACE","XMLNS_NAMESPACE","xml","stringFromCharCode","floor","fromCodePoint","STATE","COMMENT_STARTING","amp","gt","lt","quot","apos","AElig","Aacute","Acirc","Agrave","Aring","Atilde","Auml","Ccedil","ETH","Eacute","Ecirc","Egrave","Euml","Iacute","Icirc","Igrave","Iuml","Ntilde","Oacute","Ocirc","Ograve","Oslash","Otilde","Ouml","THORN","Uacute","Ucirc","Ugrave","Uuml","Yacute","aacute","acirc","aelig","agrave","aring","atilde","auml","ccedil","eacute","ecirc","egrave","eth","euml","iacute","icirc","igrave","iuml","ntilde","oacute","ocirc","ograve","oslash","otilde","ouml","szlig","thorn","uacute","ucirc","ugrave","uuml","yacute","yuml","copy","reg","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","ordf","laquo","not","shy","macr","deg","plusmn","sup1","sup2","sup3","acute","micro","para","middot","cedil","ordm","raquo","frac14","frac12","frac34","iquest","times","divide","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","tilde","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","prop","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","fromCharCode","event","nodeType","text","normalize","message","parent","qname","attribute","qualName","local","qn","selfClosing","uri","stringify","nv","isSelfClosing","closeTo","x","num","entityLC","numStr","parseInt","isNaN","highSurrogate","lowSurrogate","codeUnits","index","codePoint","Number","isFinite","RangeError","arrayHelper","optionsHelper","spaces","alwaysArray","compact","nativeType","nValue","bValue","addField","instructionFn","temp","instructionNameFn","elementsKey","element","typeKey","nameKey","instructionHasAttributes","attributesKey","instructionKey","addParent","parentKey","manipulateAttributes","attributesFn","nativeTypeAttributes","attributeValueFn","attributeNameFn","onInstruction","instruction","attrsRegExp","exec","ignoreDeclaration","declarationKey","ignoreInstruction","onStartElement","elementNameFn","ignoreAttributes","alwaysChildren","onText","ignoreText","captureSpacesBetweenElements","sanitize","onComment","ignoreComment","onEndElement","parentElement","onCdata","ignoreCdata","onDoctype","ignoreDoctype","onError","note","xml2js","userOptions","helper","validateOptions","onopentag","ontext","oncomment","onclosetag","oncdata","ondoctype","onprocessinginstruction","currentElementName","writeIndentation","firstLine","writeAttributes","attr","attrName","quote","noQuotesForNativeAttributes","indentAttributes","writeDeclaration","declaration","writeInstruction","instructionName","instructionValue","writeComment","commentFn","writeCdata","cdataFn","writeDoctype","doctypeFn","writeText","textFn","writeElements","elements","indent","elementName","withClosingTag","fullTagEmptyElementFn","fullTagEmptyElement","indentText","indentCdata","indentInstruction","hasContent","writeElement","commentKey","doctypeKey","cdataKey","textKey","hasContentCompact","anyContent","writeElementCompact","writeElementsCompact","nodes","js2xml","js","lib","parseXml","convertXml","findElementByName","callback","findElement","CORE_XML","without","array","WORKBOOK_XML","useStaging","isWindows","ensureDir","run","staged","pathExists","src","core_properties","last_modified_by","creator","modified","created","workbook","alternate_content","choice","abs_path","url","book_views","file_version","calc_pr","calcId"],"mappings":"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"}